Index: /trunk/00FlowSolve_KW/CMD_ODYSSEUS/Make.inc
===================================================================
--- /trunk/00FlowSolve_KW/CMD_ODYSSEUS/Make.inc	(revision 6)
+++ /trunk/00FlowSolve_KW/CMD_ODYSSEUS/Make.inc	(revision 6)
@@ -0,0 +1,57 @@
+SHELL=/bin/sh
+BASE=${PWD}
+
+#=====================================================
+MY_MODULE=-I/$(BASE)/src/class
+PETSC_DIR=$(PETSC_DIR_X)
+include $(PETSC_DIR)/bmake/common/variables
+include $(PETSC_DIR)/bmake/petscconf
+
+
+#==================================================================
+#=== f90 optimization flags
+#==================================================================
+ FOPTFLAGS = -C -O3          # -C -qarch=auto -qextname -qsuffix=cpp=f90
+
+#==================================================================
+#=== the following can be set as environment 
+#=== variables (the preferred approach) or defined 
+#=== explicitly here
+#==================================================================
+
+ F77        = pgf95          # how to compile fixed format .f files
+ F90        = mpif90 -g -Mpreprocess -Mbounds     # f90 compiler that is mpi aware
+
+PACKAGES_LIBS= $(HYPRE_LIB_X) $(SCALAPACK_LIB_X) $(LAPACK_LIB_X) $(BLAS_LIB_X) $(BLACS_LIB_X) $(SUPERLUDIST_LIB_X) $(X11_LIB_X) 
+PETSC_LIBS = ${PACKAGES_LIBS} $(PETSC_LIB_X) $(PETSC_FORTRAN_LIB_BASIC) $(PETSC_LIB_BASIC)
+
+XTRA_LIBS = $(HYPRE_LIB_X) $(SCALAPACK_LIB_X) $(LAPACK_LIB_X) $(BLAS_LIB_X) $(BLACS_LIB_X) $(SUPERLUDIST_LIB_X) $(NETCDF_LIB_X) $(FFTW3_LIB_X) $(MPI_LIB_X)
+
+#==================================================================
+# combine  variables for (PETSC + EXTERNAL PACKAGES), NETCDF and FFTW3
+#==================================================================
+
+ALL_INCLUDES = $(MY_MODULE) $(PETSC_INC_X) $(NETCDF_INC_X) $(FFTW3_INC_X) $(MPI_INC_X)
+ALL_EXT_LIBS = $(PETSC_LIBS) $(XTRA_LIBS) 
+
+showconfig:
+	@echo
+	-@echo  "host:          " `hostname -s`
+	-@echo  "               " `uname -sr`
+	-@echo  "user:          " `whoami`
+	-@echo  "compile date:  " `date`
+	-@echo  "PETSC_DIR:     " ${PETSC_DIR}
+	-@echo  "PETSC_ARCH:    " ${PETSC_ARCH}
+	-@echo  "OUTPUT_ROOT:   " ${OUTPUT_ROOT}
+	-@echo  "F90:           " ${F90}
+	-@echo  "F77:           " ${F77}
+	-@echo  "FOPTFLAGS:     " ${FOPTFLAGS}
+	-@echo  "FLINKER:       " ${FLINKER}
+	-@echo  "NETCDF_INC:    " ${NETCDF_INC}
+	-@echo  "NETCDF_LIB:    " ${NETCDF_LIB}
+	-@echo  "FFTW_INC:      " ${FFTW_INC}
+	-@echo  "FFTW_LIB:      " ${FFTW_LIB}
+	-@echo  "LAPACK_LIB:    " ${LAPACK_LIB}
+	-@echo  "BLAS_LIB:      " ${BLAS_LIB}
+	-@echo  "PETSC_LIBS:    " ${PETSC_LIBS}
+	-@echo  "XTRA_LIBS:     " ${XTRA_LIBS}
Index: /trunk/00FlowSolve_KW/CMD_ODYSSEUS/Makefile
===================================================================
--- /trunk/00FlowSolve_KW/CMD_ODYSSEUS/Makefile	(revision 6)
+++ /trunk/00FlowSolve_KW/CMD_ODYSSEUS/Makefile	(revision 6)
@@ -0,0 +1,108 @@
+include Make.inc
+
+	
+all:  
+		@echo
+		make clean
+		make show
+		make outdirs
+		make libs  
+		make flow.x
+		@echo "Done."
+
+ifndef OUTPUT_ROOT		
+outdirs:
+		@echo
+		@echo "... deleting output directories"		
+		-rm -rf output
+		@echo
+		@echo "... creating new output directory tree: ${BASE}"
+		cd ${BASE} ; mkdir output output/1D output/2D output/3D output/TS output/codes_etc
+		@echo
+		cd ${BASE} ;  make show
+		@echo "Done."
+else
+outdirs:
+		@echo
+		@echo "... deleting local link to output directories"		
+		-rm -rf output
+		@echo
+		@echo "... creating top level directory: $(OUTPUT)"
+		mkdir ${OUTPUT_ROOT}
+		@echo "... creating new output directory tree: $(OUTPUT)"
+		cd ${OUTPUT_ROOT} ; mkdir output output/1D output/2D output/3D output/TS output/codes_etc
+		@echo
+		@echo "... creating local link to output directory: $(OUTPUT)"
+		@echo "... BASE $(BASE)"
+		cd ${BASE} ; ln -s ${OUTPUT} output	; make show
+		@echo
+		cd ${BASE} ;  make show
+		@echo "Done."
+endif
+
+libs:  	
+		@echo
+		mkdir lib
+		make cleanlibdirs
+		rm -f classlog fort* output/DetailsLog output/MemoryLog
+		cp -f Make.inc src/OOFlowSolve.h src/class
+		cp -f Make.inc src/OOFlowSolve.h src/utils
+		cd src/class;  make "BASE=${BASE}" all
+		cd src/utils;  make "BASE=${BASE}" all
+
+flow.x: input/flow_solve_user.f90 src/initialize.f90  \
+		src/flow_solve.f90  src/particle_routines.f90 \
+		src/immersed_boundary.f90 src/write_results.f90\
+		src/petsc_solver_code.f90 lib/libscalarvariable.a \
+		lib/libutils.a
+		@echo
+		@echo "... building executable flow.x"
+		cp -f input/flow_solve_user.f90 src
+		cp -f Make.inc src; cd src; make "BASE=${BASE}" all
+		rm -f FlowSolveConfig
+		make showconfig >& FlowSolveConfig
+		rm -f svn_status
+		svn -v status >& svn_status
+		@echo "Done."
+		@echo
+		
+clean:
+		@echo
+		@echo "cleaning up directories"
+		make cleanlibdirs
+		make cleansrcdir
+		rm -f flow.x fort.* classlog
+		@echo "Done."
+
+cleanlibdirs:  	
+		@echo
+		cp -f Make.inc src/OOFlowSolve.h src/class
+		cp -f Make.inc src/OOFlowSolve.h src/utils
+		cd src/class;  make clean
+		cd src/utils;  make clean
+		
+cleansrcdir:  	
+		@echo
+		cp -f Make.inc src
+		cd src;  make clean
+		
+show:
+	@echo
+	make "BASE=${BASE}" -f  Make.inc showconfig >& FlowSolveConfig
+
+help:
+		@echo
+		@echo "===========  available make targets ================="
+		@echo "make show         -- show configuration variables"
+		@echo "make all          -- clean,outdirs,libs,flow.x"
+		@echo "make outdirs      -- create new output directories"
+		@echo "make clean        -- cleans all dirs except output"
+		@echo "make libs         -- compile lib/libscalarvariable.a and lib/libutils.a"
+		@echo "make flow.x       -- create executable flow.x"
+		@echo "Done." 
+		@echo "====================================================="
+
+
+
+
+
Index: /trunk/00FlowSolve_KW/CMD_ODYSSEUS/exec_run.ksh
===================================================================
--- /trunk/00FlowSolve_KW/CMD_ODYSSEUS/exec_run.ksh	(revision 6)
+++ /trunk/00FlowSolve_KW/CMD_ODYSSEUS/exec_run.ksh	(revision 6)
@@ -0,0 +1,11 @@
+
+echo 'PWD='$PWD
+
+ln -s $1 $2 
+
+
+./flow.x 
+
+\rm -rf $2
+
+
Index: /trunk/00FlowSolve_KW/CMD_ODYSSEUS/lanc.ksh
===================================================================
--- /trunk/00FlowSolve_KW/CMD_ODYSSEUS/lanc.ksh	(revision 6)
+++ /trunk/00FlowSolve_KW/CMD_ODYSSEUS/lanc.ksh	(revision 6)
@@ -0,0 +1,151 @@
+#!/usr/bin/ksh
+#######################################################
+#####          LANCEMENT DU RUN                 ####### 
+#######################################################
+#_____________________________________________________
+#
+#       DEFINITION DES VARIABLES
+#_____________________________________________________
+
+MODE=$1
+VERSION=$2
+RUN=$3
+
+
+
+if [ $# -ne 3 ]; then
+  echo ' '
+  echo " *** Mauvais arguments d'entree ! *** "
+  echo '   exemple: ./lanc.ksh mode version numero_run'
+  echo ' '
+  exit 1
+fi
+
+echo ' '
+echo ' '
+case $1 in
+  0)
+   echo '========================'
+   echo '==     MODE BATCH     =='
+   echo '========================'
+  ;;
+  1)
+   echo '========================'
+   echo '==   MODE INTERACTIF  =='
+   echo '========================'
+  ;;
+  *)
+   echo '========================'
+   echo '==     MODE TEST      =='
+   echo '========================'
+  ;;
+esac
+ echo ' '
+ echo ' '
+
+#_____________________________________________________
+#
+# PARAMETRES 
+#_____________________________________________________
+
+DATE=`date '+%Y%m%d'_'%H%M%S'`
+echo `date`
+
+HOME_DIR=/home2/xlvlod/IDRIS
+HOME_PROG=00FlowSolve_KW
+HOME_PROJECT=${HOME_PROG}
+SUB_PROJECT=sub_KW
+WORK_PROG=${RUN}_ODYSSEUS_${HOME_PROJECT}_${VERSION}_${DATE}
+
+echo ' '
+echo 'Definitions des variables:'
+echo '   HOME_DIR    = '$HOME_DIR
+echo '   HOME_PROG   = '$HOME_PROG
+echo '   HOME_PROJECT= '$HOME_PROJECT'     Version: '$VERSION
+echo '   SUB_PROJECT = '$SUB_PROJECT
+echo '   WORK_DIR    = '$WORK_DIR
+echo '   WORK_PROG   = '$WORK_PROG
+
+
+#_____________________________________________________
+#
+# CREATION DU REPERTOIRE DE COMPILATION SUR LE WORKDIR
+#_____________________________________________________
+
+echo ' '
+echo 'Creation du repertoire de compilation et copie des fichiers'
+if [ ! -d $HOME_DIR/$HOME_PROG/setups/$VERSION ]; then
+   echo $HOME_DIR/$HOME_PROG/setups/$VERSION
+   echo ' '
+   echo '   WARNING: le projet '$HOME_PROJECT" dans sa version $VERSION n'existe pas"
+   exit 1
+fi
+
+cd $WORK_DIR
+if  [ -d $WORK_PROG ]; then 
+  rm -rf $WORK_PROG
+fi
+mkdir $WORK_PROG 
+cd $WORK_PROG
+cp -rf $HOME_DIR/$HOME_PROG/* .
+\rm -rf input
+ln -s setups/$VERSION input
+
+#_____________________________________________________
+#
+#       COMPILATION DU PROG SUR LE WORKDIR
+#_____________________________________________________
+
+echo ' '
+echo 'Compilation du code pour le projet: '$HOME_PROJECT
+# Compilation
+cd $WORK_DIR/$WORK_PROG
+make clean
+make libs
+make flow.x
+make outdirs
+if [ -f flow.x ]; then
+   echo '   Compilation successful ! Here we go'
+else
+   echo '   WARNING: Compilation failed !'
+   cd $WORK_DIR
+   rm -rf $WORK_PROG
+   exit 1
+fi
+
+echo ' '
+case $1 in
+	0)
+	#_____________________________________________________
+	#
+	#        OFFLINE NOHUP
+	#_____________________________________________________
+	echo ' Soumission du job... offline.'
+	cp $HOME_DIR/$HOME_PROG/exec_run.ksh $WORK_DIR/$WORK_PROG/.
+	cd $WORK_DIR/$WORK_PROG
+	nohup ./exec_run.ksh $WORK_DIR/$WORK_PROG $HOME/$WORK_PROG > $WORK_DIR/$WORK_PROG/nohup.out &
+	;;
+	1)
+        #_____________________________________________________
+        #
+        #        ONLINE 
+        #_____________________________________________________
+        echo ' Mode interactif: execution sur le workdir ...'
+        cd $WORK_DIR/$WORK_PROG
+        ln -s $WORK_DIR/$WORK_PROG $HOME/$WORK_PROG
+        ./flow.x 
+        rm $HOME/$WORK_PROG
+        echo ' End : successful run !'
+	;;
+	*)
+	#_____________________________________________________
+	#
+	#        TEST COMPILATION
+	#_____________________________________________________
+	echo ' End : successful test !'
+	cd $WORK_DIR
+	rm -rf $WORK_PROG
+	;;
+esac
+echo ' '
+
Index: /trunk/00FlowSolve_KW/CMD_ZAHIR/Make.inc
===================================================================
--- /trunk/00FlowSolve_KW/CMD_ZAHIR/Make.inc	(revision 6)
+++ /trunk/00FlowSolve_KW/CMD_ZAHIR/Make.inc	(revision 6)
@@ -0,0 +1,65 @@
+SHELL=/bin/sh
+BASE=${PWD}
+
+#=====================================================
+MY_MODULE=-I/$(BASE)/src/class
+PETSC_DIR=/workdir/rech/dyc/rdyc711/petsc-2.3.0
+include $(PETSC_DIR)/bmake/common/variables
+include $(PETSC_DIR)/bmake/petscconf
+
+
+#==================================================================
+#=== f90 optimization flags
+#==================================================================
+ FOPTFLAGS = -C -O3 -qarch=auto 
+
+#==================================================================
+#=== the following can be set as environment 
+#=== variables (the preferred approach) or defined 
+#=== explicitly here
+#==================================================================
+
+ F77        = /usr/bin/xlf -g     # how to compile fixed format .f files
+ F90        = /usr/bin/mpxlf90_r -qsuffix=f=f90 -qsuffix=cpp=f90 -qnoextname # f90 compiler that is mpi aware
+
+NETCDF_INC = $(NETCDF)
+NETCDF_LIB = $(NETCDF)
+
+FFTW_INC = $(FFTW3_I4S4D8)
+FFTW_LIB = $(FFTW3_I4S4D8) -lfftw3 -lfftw3f
+
+XTRA_LIBS = $(BLAS_I4S4D8) $(LAPACK_I4S4D8)
+
+PETSC_LIBS = ${PACKAGES_LIBS} -L/$(PETSC_DIR)/lib/$(PETSC_ARCH) \
+                                $(PETSC_FORTRAN_LIB_BASIC)      \
+                                $(PETSC_LIB_BASIC)
+
+
+#==================================================================
+# combine  variables for (PETSC + EXTERNAL PACKAGES), NETCDF and FFTW3
+#==================================================================
+
+ALL_INCLUDES = $(MY_MODULE) $(PETSC_INCLUDE) $(NETCDF_INC) $(FFTW_INC) $(MPI_INC)
+ALL_EXT_LIBS = $(PETSC_LIBS) $(NETCDF_LIB) $(FFTW_LIB) $(XTRA_LIBS)
+
+showconfig:
+	@echo
+	-@echo  "host:          " `hostname -s`
+	-@echo  "               " `uname -sr`
+	-@echo  "user:          " `whoami`
+	-@echo  "compile date:  " `date`
+	-@echo  "PETSC_DIR:     " ${PETSC_DIR}
+	-@echo  "PETSC_ARCH:    " ${PETSC_ARCH}
+	-@echo  "OUTPUT_ROOT:   " ${OUTPUT_ROOT}
+	-@echo  "F90:           " ${F90}
+	-@echo  "F77:           " ${F77}
+	-@echo  "FOPTFLAGS:     " ${FOPTFLAGS}
+	-@echo  "FLINKER:       " ${FLINKER}
+	-@echo  "NETCDF_INC:    " ${NETCDF_INC}
+	-@echo  "NETCDF_LIB:    " ${NETCDF_LIB}
+	-@echo  "FFTW_INC:      " ${FFTW_INC}
+	-@echo  "FFTW_LIB:      " ${FFTW_LIB}
+	-@echo  "LAPACK_LIB:    " ${LAPACK_LIB}
+	-@echo  "BLAS_LIB:      " ${BLAS_LIB}
+	-@echo  "PETSC_LIBS:    " ${PETSC_LIBS}
+	-@echo  "XTRA_LIBS:     " ${XTRA_LIBS}
Index: /trunk/00FlowSolve_KW/CMD_ZAHIR/Makefile
===================================================================
--- /trunk/00FlowSolve_KW/CMD_ZAHIR/Makefile	(revision 6)
+++ /trunk/00FlowSolve_KW/CMD_ZAHIR/Makefile	(revision 6)
@@ -0,0 +1,89 @@
+include Make.inc
+
+	
+all:  
+		@echo
+		make clean
+		make show
+		make outdirs
+		make libs  
+		make flow.x
+		@echo "Done."
+
+outdirs:
+		@echo
+		@echo "... deleting output directories"		
+		-rm -rf output
+		@echo
+		@echo "... creating new output directory tree: ${BASE}"
+		cd ${BASE} ; mkdir output output/1D output/2D output/3D output/TS output/codes_etc
+		@echo
+		cd ${BASE} ;  make show
+		@echo "Done."
+
+libs:  	
+		@echo
+		mkdir lib
+		make cleanlibdirs
+		rm -f classlog fort* output/DetailsLog output/MemoryLog
+		cp -f Make.inc src/OOFlowSolve.h src/class
+		cp -f Make.inc src/OOFlowSolve.h src/utils
+		cd src/class;  make "BASE=${BASE}" all
+		cd src/utils;  make "BASE=${BASE}" all
+
+flow.x: input/flow_solve_user.f90 src/initialize.f90  \
+		src/flow_solve.f90  src/particle_routines.f90 \
+		src/immersed_boundary.f90 src/write_results.f90\
+		src/petsc_solver_code.f90 lib/libscalarvariable.a \
+		lib/libutils.a
+		@echo
+		@echo "... building executable flow.x"
+		cp -f input/flow_solve_user.f90 src
+		cp -f Make.inc src; cd src; make "BASE=${BASE}" all
+		rm -f FlowSolveConfig
+		make showconfig >& FlowSolveConfig
+		rm -f svn_status
+		svn -v status >& svn_status
+		@echo "Done."
+		@echo
+		
+clean:
+		@echo
+		@echo "cleaning up directories"
+		make cleanlibdirs
+		make cleansrcdir
+		rm -f flow.x fort.* classlog
+		@echo "Done."
+
+cleanlibdirs:  	
+		@echo
+		cp -f Make.inc src/OOFlowSolve.h src/class
+		cp -f Make.inc src/OOFlowSolve.h src/utils
+		cd src/class;  make clean
+		cd src/utils;  make clean
+		
+cleansrcdir:  	
+		@echo
+		cp -f Make.inc src
+		cd src;  make clean
+		
+show:
+	@echo
+	make "BASE=${BASE}" -f  Make.inc showconfig >& FlowSolveConfig
+
+help:
+		@echo
+		@echo "===========  available make targets ================="
+		@echo "make show         -- show configuration variables"
+		@echo "make all          -- clean,outdirs,libs,flow.x"
+		@echo "make outdirs      -- create new output directories"
+		@echo "make clean        -- cleans all dirs except output"
+		@echo "make libs         -- compile lib/libscalarvariable.a and lib/libutils.a"
+		@echo "make flow.x       -- create executable flow.x"
+		@echo "Done." 
+		@echo "====================================================="
+
+
+
+
+
Index: /trunk/00FlowSolve_KW/CMD_ZAHIR/lanc.ksh
===================================================================
--- /trunk/00FlowSolve_KW/CMD_ZAHIR/lanc.ksh	(revision 6)
+++ /trunk/00FlowSolve_KW/CMD_ZAHIR/lanc.ksh	(revision 6)
@@ -0,0 +1,151 @@
+#!/usr/bin/ksh
+#######################################################
+#####          LANCEMENT DU RUN                 ####### 
+#######################################################
+#_____________________________________________________
+#
+#       DEFINITION DES VARIABLES
+#_____________________________________________________
+
+MODE=$1
+VERSION=$2
+RUN=$3
+
+
+
+if [ $# -ne 3 ]; then
+  echo ' '
+  echo " *** Mauvais arguments d'entree ! *** "
+  echo '   exemple: ./lanc.ksh mode version numero_run'
+  echo ' '
+  exit 1
+fi
+
+echo ' '
+echo ' '
+case $1 in
+  0)
+   echo '========================'
+   echo '==     MODE BATCH     =='
+   echo '========================'
+  ;;
+  1)
+   echo '========================'
+   echo '==   MODE INTERACTIF  =='
+   echo '========================'
+  ;;
+  *)
+   echo '========================'
+   echo '==     MODE TEST      =='
+   echo '========================'
+  ;;
+esac
+ echo ' '
+ echo ' '
+
+#_____________________________________________________
+#
+# PARAMETRES 
+#_____________________________________________________
+
+DATE=`date '+%Y%m%d'_'%H%M%S'`
+echo `date`
+
+HOME_DIR=/homegpfs/rech/dyc/rdyc711/CODE_PS
+HOME_PROG=00FlowSolve_KW
+HOME_PROJECT=${HOME_PROG}
+SUB_PROJECT=sub_KW
+WORK_PROG=${RUN}_ZAHIR_${HOME_PROJECT}_${VERSION}_${DATE}
+WORK_DIR=$WORKDIR
+
+echo ' '
+echo 'Definitions des variables:'
+echo '   HOME_DIR    = '$HOME_DIR
+echo '   HOME_PROG   = '$HOME_PROG
+echo '   HOME_PROJECT= '$HOME_PROJECT'     Version: '$VERSION
+echo '   SUB_PROJECT = '$SUB_PROJECT
+echo '   WORK_DIR    = '$WORK_DIR
+echo '   WORK_PROG   = '$WORK_PROG
+
+
+#_____________________________________________________
+#
+# CREATION DU REPERTOIRE DE COMPILATION SUR LE WORKDIR
+#_____________________________________________________
+
+echo ' '
+echo 'Creation du repertoire de compilation et copie des fichiers'
+if [ ! -d $HOME_DIR/$HOME_PROG/setups/$VERSION ]; then
+   echo $HOME_DIR/$HOME_PROG/setups/$VERSION
+   echo ' '
+   echo '   WARNING: le projet '$HOME_PROJECT" dans sa version $VERSION n'existe pas"
+   exit 1
+fi
+
+cd $WORK_DIR
+if  [ -d $WORK_PROG ]; then 
+  rm -rf $WORK_PROG
+fi
+mkdir $WORK_PROG 
+cd $WORK_PROG
+cp -rf $HOME_DIR/$HOME_PROG/* .
+\rm -rf input
+ln -s setups/$VERSION input
+
+#_____________________________________________________
+#
+#       COMPILATION DU PROG SUR LE WORKDIR
+#_____________________________________________________
+
+echo ' '
+echo 'Compilation du code pour le projet: '$HOME_PROJECT
+# Compilation
+cd $WORK_DIR/$WORK_PROG
+make clean
+make libs
+make flow.x
+make outdirs
+if [ -f flow.x ]; then
+   echo '   Compilation successful ! Here we go'
+else
+   echo '   WARNING: Compilation failed !'
+   cd $WORK_DIR
+   rm -rf $WORK_PROG
+   exit 1
+fi
+
+echo ' '
+case $1 in
+	0)
+	#_____________________________________________________
+	#
+	#        OFFLINE NOHUP
+	#_____________________________________________________
+	echo ' Soumission du job... offline.'
+        cd $WORK_DIR/$WORK_PROG
+        cp $HOME_DIR/$HOME_PROG/$SUB_PROJECT .
+        llsubmit $SUB_PROJECT
+	;;
+	1)
+        #_____________________________________________________
+        #
+        #        ONLINE 
+        #_____________________________________________________
+        echo ' Mode interactif: execution sur le workdir ...'
+        cd $WORK_DIR/$WORK_PROG
+        ./flow.x 
+        rm $HOME/$WORK_PROG
+        echo ' End : successful run !'
+	;;
+	*)
+	#_____________________________________________________
+	#
+	#        TEST COMPILATION
+	#_____________________________________________________
+	echo ' End : successful test !'
+	cd $WORK_DIR
+	rm -rf $WORK_PROG
+	;;
+esac
+echo ' '
+
Index: /trunk/00FlowSolve_KW/CMD_ZAHIR/sub_KW
===================================================================
--- /trunk/00FlowSolve_KW/CMD_ZAHIR/sub_KW	(revision 6)
+++ /trunk/00FlowSolve_KW/CMD_ZAHIR/sub_KW	(revision 6)
@@ -0,0 +1,59 @@
+# Nom arbitraire du travail LoadLeveler
+# @ job_name = run.kw
+# Type de travail
+# @ job_type = parallel
+# Fichier de sortie standard du travail       
+# @ output = $(job_name).$(jobid)
+# Fichier de sortie d'erreur du travail
+# @ error =  $(job_name).$(jobid)
+# @ notify_user = xlvlod@lodyc.jussieu.fr
+# @ notification = complete
+# Temps CPU max. en seconde par processus
+# @ cpu_limit = 2000
+# Mémoire max. utulisée par processus (ici 700 Megaoctets)
+# @ data_limit = 3.9Gb
+# @ stack_limit = 0.2Gb
+# Nombre de processus demandé (ici 8)
+# @ total_tasks = 8
+# @ queue
+
+### Pour avoir l'écho des commandes
+set -x 
+
+### Variables d'environnement
+export DATE=`date '+%Y%m%d'_'%H%M%S'`
+export COMPIL_DIR=$LOADL_STEP_INITDIR
+
+### Répertoire temporaire de travail
+#cd $TMPDIR
+#export TEMPD=$TMPDIR
+cd $COMPIL_DIR
+rm -rf TEMP
+mkdir TEMP
+export TEMPD=$COMPIL_DIR/TEMP
+cd $TEMPD
+
+### pour la sauvegarde de la sortie de job
+cp $COMPIL_DIR/FICH_RUN .
+export RUN_NAME=`more FICH_RUN`
+export MFDIR=ZAHIR_${RUN_NAME}
+
+cp $COMPIL_DIR/MP_PROCS .
+export MP_PROCS=`more MP_PROCS`
+
+### Prepration des repertoires
+cp -r $COMPIL_DIR/flow.x .
+cp -r $COMPIL_DIR/input .
+cp -r $COMPIL_DIR/output .
+
+### create a directory on gaya
+rsh gaya -n mkdir $MFDIR
+
+### Exécution d'un programme MPI
+./flow.x
+
+#### new compression
+make clean
+cd ..
+$HOME/bin/compress $TEMPD $COMPIL_DIR $MP_PROCS $MFDIR # tar cf all-in-one.tar output input src 
+
Index: /trunk/00FlowSolve_KW/README
===================================================================
--- /trunk/00FlowSolve_KW/README	(revision 6)
+++ /trunk/00FlowSolve_KW/README	(revision 6)
@@ -0,0 +1,4 @@
+
+
+you have to configure the "Make.inc" file, take an exemple in the repertory "CMD_ODYSSEUS". Then add the "Makefile" file to your base directory. And try to execute "tools".
+
Index: /trunk/00FlowSolve_KW/input
===================================================================
--- /trunk/00FlowSolve_KW/input	(revision 6)
+++ /trunk/00FlowSolve_KW/input	(revision 6)
@@ -0,0 +1,1 @@
+link setups/rigid_lid_IW
Index: /trunk/00FlowSolve_KW/setups/M2_forcing/BoundaryConditions
===================================================================
--- /trunk/00FlowSolve_KW/setups/M2_forcing/BoundaryConditions	(revision 6)
+++ /trunk/00FlowSolve_KW/setups/M2_forcing/BoundaryConditions	(revision 6)
@@ -0,0 +1,30 @@
+ neumann   ! x
+ neumann
+ periodic 
+ periodic   
+ neumann 
+ neumann 
+ neumann   ! x 
+ neumann
+ periodic 
+ periodic 
+ neumann 
+ neumann
+ neumann   !x
+ neumann
+ periodic 
+ periodic 
+ dirichlet 
+ dirichlet
+ neumann  ! x 
+ neumann
+ periodic 
+ periodic 
+ dirichlet 
+ dirichlet 
+ neumann   !x
+ neumann
+ periodic 
+ periodic
+ neumann 
+ neumann
Index: /trunk/00FlowSolve_KW/setups/M2_forcing/DifferentiationMethods
===================================================================
--- /trunk/00FlowSolve_KW/setups/M2_forcing/DifferentiationMethods	(revision 6)
+++ /trunk/00FlowSolve_KW/setups/M2_forcing/DifferentiationMethods	(revision 6)
@@ -0,0 +1,18 @@
+ cos     !! treatment of u in x direction
+ cos     !! treatment of u in y direction 
+ cos     !! treatment of u in z direction
+ cos     !! treatment of v in x direction 
+ cos     !! treatment of v in y direction 
+ cos     !! treatment of v in z direction
+ cos     !! treatment of w in x direction 
+ cos     !! treatment of w in y direction 
+ sin     !! treatment of w in z direction
+ cos     !! treatment of s1 in x direction 
+ cos     !! treatment of s1 in y direction 
+ cos     !! treatment of s1 in z direction
+ cos     !! treatment of s2 in x direction 
+ cos     !! treatment of s2 in y direction 
+ cos     !! treatment of s2 in z direction
+ cos     !! treatment of phi in x direction 
+ cos     !! treatment of phi in y direction 
+ cos     !! treatment of phi in z direction
Index: /trunk/00FlowSolve_KW/setups/M2_forcing/PetscOptions
===================================================================
--- /trunk/00FlowSolve_KW/setups/M2_forcing/PetscOptions	(revision 6)
+++ /trunk/00FlowSolve_KW/setups/M2_forcing/PetscOptions	(revision 6)
@@ -0,0 +1,17 @@
+
+-ksp_monitor
+#-nonzero_guess         # if set, the previous soln is used to start
+-petsc_fgmres           # or -petsc_bcgs
+-ksp_gmres_restart 50   # these are NOT preallocated
+
+
+-PC_pressure            # precondition pressure solve w/ explicit A ??
+-pressure_its 100
+-petsc_diag             # or -petsc_hypre or -petsc_pcasm
+
+#-PC_othervars          # precondition other variables besides pressure??
+-othervars_its 5        # maximum number of iterations for the implicit solves
+
+
+
+
Index: /trunk/00FlowSolve_KW/setups/M2_forcing/flow_solve_user.f90
===================================================================
--- /trunk/00FlowSolve_KW/setups/M2_forcing/flow_solve_user.f90	(revision 6)
+++ /trunk/00FlowSolve_KW/setups/M2_forcing/flow_solve_user.f90	(revision 6)
@@ -0,0 +1,877 @@
+!!==========================================================
+!!==========================================================
+module user_routines
+!! module for user-customized subroutines and functions
+use user_data               
+implicit none
+public   :: user_ics                 !!routine defining initial conditions
+public   :: user_forcing             !!routine defining any external forcing
+public   :: user_particle_positions  !!routine defining initial locations
+public   :: UserBdryData             !!routine for specifying boundary-condition data
+public   :: eval_s1_bar              !!routine defining ambient s1 profile & z derivs
+public   :: eval_s2_bar              !!routine defining ambient s2 profile & z derivs
+public   :: map_s2x_at_gridpoints    !!routine to define mapping for distributing gridpoints
+public   :: point_map_x2s            !!routine to evaluate map at given point x
+public   :: point_map_s2x            !!routine to evaluate map at given point s
+public   :: eval_surface             !!routine to define an immersed boundary surface
+
+!!==========================================================    
+Contains
+!!==========================================================
+
+!!==========================================================
+subroutine user_ics(xval,yval,zval,Fvals,id,nx,ny,nz)
+!!===========================================================
+!!  User defined subroutine to specify initial conditions.
+!!  Inputs and outputs are all in dimensional units.
+!!  
+!!
+!!  inputs:
+!!   x,y,z   coordinate arrays (in meters) that define 
+!!           the region over which forcing functions
+!!           are to be evaluated
+!! 
+!!   id      field id [u,v,w,s1',s2'] <---[1,2,3,4,5]
+!!             where s1 = s1bar(z) + s1'(x,y,z,t)
+!!             and   s2 = s2bar(z) + s2'(x,y,z,t)
+!!
+!!  outputs:
+!!          F(:,:,:) the initial conditions for variable id
+!!          F is to be returned in DIMENSIONAL units 
+!!          (i.e. m/s or deg C etc )
+!!   
+!!===========================================================
+ use user_data, only: Lx,Ly,Lz,f,N2,dgrad,rho_0,      &
+                      g,beta_dimensional,runlabel  
+ implicit none
+ integer                ::  nx,ny,nz,id
+ real(kind=8)           ::  xval(nx)
+ real(kind=8)           ::  yval(ny)
+ real(kind=8)           ::  zval(nz)
+ real(kind=8)           ::  Fvals(nx,ny,nz)  
+
+ select case(id) 
+  case(1)        !! ics for u [m/s]  
+   Fvals=0.d0     
+  case(2)        !! ics for v [m/s]
+   Fvals=0.d0
+  case(3)        !! ics for w [m/s]  
+   Fvals=0.d0     
+  case(4)        !! ics for s1' [m/s]
+   Fvals=0.d0
+  case(5)        !! ics for s2' [m/s]  
+   Fvals=0.d0     
+  case default
+   stop 'error in calling user_ics: id out of range'
+ end select
+
+return
+end subroutine user_ics
+!!========================================================== 
+!!==========================================================
+      
+      
+      
+
+
+!!========================================================== 
+!!==========================================================
+subroutine user_forcing(x,y,z,t,FF,id,m1,m2,m3)
+!!===========================================================
+!!  User defined subroutine to add time/space dependent
+!!  forcing to the equations of motion. Inputs and outputs
+!!  for this routine are all in dimensional units.
+!!  
+!!
+!!  inputs:
+!!   x,y,z   coordinate arrays [m] that define 
+!!           the region over which forcing
+!!           functions are to be evaluated
+!!   t       current time in seconds  
+!!   id      field id [u,v,w,s1',s2'] <---[1,2,3,4,5]
+!!
+!!  outputs:
+!!          FF(:,:,:) the rhs term for equation id
+!!          FF is to be returned in DIMENSIONAL units 
+!!          (i.e. m/s2 or deg C/s etc )
+!!   
+!!===========================================================
+ use user_data
+ use dependent_variables
+ use intermediate_variables
+ use etc,        only: MM0
+ use mpi_params, only: myid,numprocs,comm
+ implicit none
+ integer           ::  m1,m2,m3
+ real(kind=8)      ::  x(m1)
+ real(kind=8)      ::  y(m2)
+ real(kind=8)      ::  z(m3)
+ real(kind=8)      ::  t
+ real(kind=8)      ::  FF(m1,m2,m3)
+ integer           ::  id,i,j,k
+  
+ 
+ real(kind=8)      :: x0,z0,eta,beta,sigma1,sigma2,xfreq
+ real(kind=8)      :: arg,Amp,h,XX
+ real(kind=8)      :: sponge_width_left,sponge_width_right
+ real(kind=8)      :: sponge_kappa,sponge_tau,window,h2
+ integer           :: pid,ierr
+  
+ do pid=0,numprocs-1  
+  if( pid==myid ) then
+   !! read some input from a user-created file
+    open(1,file='input/forcing_params.nliwi',position='rewind')
+     read(1,*) eta                 !! amplitude [m]
+     read(1,*) xfreq               !! freq=xfreq=M2 [1/s]
+     read(1,*) sponge_width_left   !! [m]
+     read(1,*) sponge_width_right  !! [m]
+     read(1,*) sponge_kappa        !! [m2/s]
+     read(1,*) sponge_tau          !! [1/s]
+    close(1)
+  endif  
+  call mpi_barrier(comm,ierr)
+ enddo
+ arg=xfreq*t                    !! phase of the forcing
+ Amp=eta*xfreq*xfreq
+ h2 = (Lx/nx)**2
+
+ select case(id)
+ 
+  case(1)   ! u 
+      !!=============================================================
+      !! M2 forcing function
+      !!=============================================================
+        FF = -Amp*cos(arg)
+        
+  case(2) ! v
+  
+   FF=0.d0;RETURN
+   
+   do k=1,m3
+     do j=1,m2       
+      !!=============================================================
+      !! Sponge layers  (ignore endpts unless this causes problems)
+      !!=============================================================
+      do i=2,m1-1
+       window = exp(-(x(i)/sponge_width_left)**2)          &
+              + exp(-((x(i)-Lx)/sponge_width_right)**2)
+              
+       XX =   velocity(2)%SlabVals(i-1,j,k)  &
+          -2.*velocity(2)%SlabVals(i,j,k)    &
+           +  velocity(2)%SlabVals(i+1,j,k)
+           
+       FF(i,j,k) = window*( - velocity(2)%SlabVals(i,j,k)/(sponge_tau) &
+                            + (sponge_kappa/h2)*XX  )
+      enddo       
+     enddo
+   enddo
+   
+  case(3) ! w
+  
+   FF=0.d0;RETURN
+   
+   do k=1,m3
+     do j=1,m2
+      !!=============================================================
+      !! Sponge layers  (ignore endpts unless this causes problems)
+      !!=============================================================
+      do i=2,m1-1
+       window = exp(-(x(i)/sponge_width_left)**2)          &
+              + exp(-((x(i)-Lx)/sponge_width_right)**2)
+              
+       XX =   velocity(3)%SlabVals(i-1,j,k)  &
+          -2.*velocity(3)%SlabVals(i,j,k)    &
+           +  velocity(3)%SlabVals(i+1,j,k)
+           
+       FF(i,j,k) = window*( - velocity(3)%SlabVals(i,j,k)/(sponge_tau) &
+                            + (sponge_kappa/h2)*XX  )
+      enddo
+     enddo
+   enddo   
+  
+  case(4) ! s1
+    
+   FF=0.d0;RETURN
+   
+   do k=1,m3
+     do j=1,m2
+      !!=============================================================
+      !! Sponge layers  (ignore endpts unless this causes problems)
+      !!=============================================================
+      do i=2,m1-1
+       window = exp(-(x(i)/sponge_width_left)**2)          &
+              + exp(-((x(i)-Lx)/sponge_width_right)**2)
+              
+       XX =   scalars(1)%SlabVals(i-1,j,k)  &
+          -2.*scalars(1)%SlabVals(i,j,k)    &
+           +  scalars(1)%SlabVals(i+1,j,k)
+           
+       FF(i,j,k) = window*( - scalars(1)%SlabVals(i,j,k)/(sponge_tau) &
+                            + (sponge_kappa/h2)*XX  )
+      enddo
+     enddo
+   enddo
+   
+  case(5)
+   
+   FF=0.d0;RETURN
+   
+   do k=1,m3
+     do j=1,m2
+      !!=============================================================
+      !! Sponge layers  (ignore endpts unless this causes problems)
+      !!=============================================================
+      do i=2,m1-1
+       window = exp(-(x(i)/sponge_width_left)**2)          &
+              + exp(-((x(i)-Lx)/sponge_width_right)**2)
+              
+       XX =   scalars(2)%SlabVals(i-1,j,k)  &
+          -2.*scalars(2)%SlabVals(i,j,k)    &
+           +  scalars(2)%SlabVals(i+1,j,k)
+           
+       FF(i,j,k) = window*( - scalars(2)%SlabVals(i,j,k)/(sponge_tau) &
+                            + (sponge_kappa/h2)*XX  )
+      enddo
+     enddo
+   enddo
+   
+  case default
+  
+   stop 'error in calling user_forcing: id out of range'
+  
+ end select 
+return
+end subroutine user_forcing
+!!==================================================================== 
+
+
+!!==================================================================== 
+subroutine UserBdryData(id,dim,endpt,bdry_type,m1,m2,x1,x2,vals)
+!!====================================================================
+!!
+!!   A boundary condition "type" has been specified for each variable
+!!   at each of the six faces [x=0,Lx] [y=0,Ly] [z=0,Lz]
+!!
+!!   The boundary conditions have the form  
+!!   Var(id)(:,:) = vals(:,:) 
+!!                      at coordinate(idim)'s BEGINNING/END (Dirichlet)
+!!         or
+!!   d/dn Var(id)(:,:)=vals(:,:) 
+!!                        at coordinate(idim)'s BEGINNING/END (Neumann)
+!!
+!!   My convention here is that d/dn is equal to d/d(coordinate)
+!!   at both ends it is NOT the OUTWARD facing normal.
+!!   e.g for dim=1, d/dn=d/dx at both x=0,Lx
+!!
+!!   The boundary data "vals" must be specified in this routine.
+!!
+!!   In the example below, all boundary conditions are homogeneous 
+!!   and therefore vals(:,:) is set to 0.0 except at the upper rigid lid,
+!!   where a stress (neumann) condition is imposed (du/dz=vals(:,:)).
+!!        ( upper rigid lid: dim=3, endpt=ENDING, x1<==x, x2<==y )
+!!
+!!   ==================================================================
+!!   INPUT
+!!   ==================================================================
+!!   id               (1,2,3,4,5) ==> (u,v,w,s1',s2')
+!!   dim                    (x,y,z)==>(1,2,3)
+!!   endpt              (start,end)==>(1,2)=(BEGINNING,ENDING)
+!!   m1,m2              array dims of bdry face
+!!   bdry_type           dirichlet, neumann
+!!   x1(:),x2(:)         y&z, x&z or x&y    
+!!                       for dim=(1,2,3) respectively
+!!                       positions given in METERS
+!!   ==================================================================
+!!   OUTPUT
+!!   ==================================================================
+!!   vals(_n1,_n2)  user defined boundary values in DIMENSIONAL UNITS
+!!   ==================================================================
+ use user_data
+ implicit none
+ integer,parameter:: BEGINNING=1,ENDING=2
+ integer          :: id  
+ integer          :: dim      
+ integer          :: endpt 
+ integer          :: m1,m2 
+ integer          :: i,j
+ character(len=80):: bdry_type       
+ real(kind=8)     :: x1(m1),x2(m2) 
+ real(kind=8)     :: vals(m1,m2)                                        
+ real(kind=8)     :: x,y,z
+
+  
+ if(dim==1 .and. xdim_periodic) then
+  vals=0.
+  return
+ endif
+ 
+ if(dim==2 .and. ydim_periodic) then
+  vals=0.
+  return
+ endif
+ 
+ select case(id)  !! value of id determines which block to execute
+ 
+  case(1)               !! bcs for u or du/dn
+   vals(:,:) = 0.d0
+
+  case(2)               !! bcs for v or dv/dn
+   vals(:,:) = 0.d0
+  
+  case(3)               !! bcs for w or dw/dn
+   vals(:,:) = 0.d0
+  
+  case(4)               !! bcs for s1 or ds1/dn
+    vals(:,:) = 0.d0
+  
+  case(5)               !! bcs for s2 or ds2/dn
+   vals(:,:) = 0.d0
+  
+ end select
+ 
+return 
+end subroutine UserBdryData
+      
+!!================================================================ 
+!!================================================================ 
+ subroutine eval_s1_bar(s1_bar,s1_bar_z,s1_bar_zz)  
+  use user_data
+  use mpi_params
+  use etc, only: numzplanes,numzplanes_below
+  use independent_variables,  only: Grid
+  use dependent_variables , only : velocity,scalars
+!!================================================================ 
+!!  Code is written to solve the eqn of motion for s1'
+!!   where s1 = s1_bar(z) + s1'(x,y,z,t).
+!!   Supply s1_bar and its z derivatives here.
+!!   Setting s1_bar=0 is fine if there is no sensible 
+!!   ambient distribution of s1 in your problem.
+!!
+!! z:           vertical z spatial position  [m]
+!! Lz:          vertical size of computational domain [m]
+!! s1_scale:    characteristic range of s1 values, used to scale s1
+!!              units are dimensional, 
+!!              e.g. kg/m3 for s1--> perturbation density
+!!
+!! output 
+!! s1_bar, s1_bar_z, s1_bar_zz
+!! scalar concentration and z derivs   [dimensional units]
+ use mpi_params, only: myid,numprocs,comm
+ implicit none
+ real(kind=8),dimension(:),intent(inout) :: s1_bar,s1_bar_z,s1_bar_zz
+!!=================================================================
+!!         USER CUSTOMIZED CODE SEGMENT STARTS  HERE  
+!!                    S1_BAR DEPENDs ONLY ON Z  
+!!         The meaning of s1 is defined by scalar_kind(1) 
+!!         in problem_params (temp,salinity,density,tracer)
+!!=================================================================
+
+ integer :: k,my_k
+ real(kind=8) :: zpos
+
+ integer              :: pid,ierr
+ real(kind=8),save    :: ddz_deep,ddz_upper,z0,gamma
+ real(kind=8),save    :: alpha
+ logical,save         :: first_entry=.TRUE.
+ 
+ !===================================
+ if( first_entry ) then  
+  do pid=0,numprocs-1  
+   if(pid==myid) then
+    open(1,file='input/stratification_params.nliwi',position='rewind')
+     read(1,*) ddz_deep
+     read(1,*) ddz_upper
+     read(1,*) z0
+     read(1,*) gamma
+    close(1) 
+   endif  
+   call mpi_barrier(comm,ierr)  
+  enddo  
+  alpha = ddz_upper - ddz_deep;
+  first_entry=.FALSE.
+ endif
+ !===================================
+
+ !!==============================
+ !! s1 ===> pd in kg/m3
+ !!==============================
+ do k=1,scalars(1)%DataMap%locnz
+    my_k = velocity(1)%DataMap%my_global_kvals(k)
+    zpos = Lz*Grid(0)%SpaceDims(3)%x(my_k) ! [m]
+    s1_bar(k) = 35.d0 + ddz_deep*zpos        &
+                + (alpha/2.d0)*( zpos + gamma*log( cosh((zpos-z0)/gamma)) );
+    s1_bar_z(k) = ddz_deep + (alpha/2.d0)*(1.d0 + tanh((zpos-z0)/gamma)); 
+    s1_bar_zz(k) = 0.d0  !! don't diffuse background
+ enddo  
+        
+ return
+ end subroutine eval_s1_bar
+!!================================================================ 
+!!================================================================ 
+
+
+
+
+
+
+!!================================================================ 
+!!================================================================ 
+ subroutine eval_s2_bar(s2_bar,s2_bar_z,s2_bar_zz)  
+  use user_data
+!!================================================================ 
+!!  Code is written to solve the eqn of motion for s2'
+!!   where s2 = s2_bar(z) + s2'(x,y,z,t).
+!!   Supply s2_bar and its z derivatives here.
+!!   Setting s2_bar=0 is fine if there is no sensible 
+!!   ambient distribution of s2 in your problem.
+!!
+!! z:           vertical z spatial position  [m]
+!! Lz:          vertical size of computational domain [m]
+!! s2_scale:    characteristic range of s2 values, used to scale s2
+!!              units are dimensional, 
+!!              e.g. kg/m3 for s2--> perturbation density
+!!
+!! output 
+!! s2_bar, s2_bar_z, s2_bar_zz
+!! scalar concentration and z derivs   [dimensional units]
+ implicit none
+ real(kind=8),dimension(:),intent(inout) :: s2_bar,s2_bar_z,s2_bar_zz
+!!=================================================================
+!!         USER CUSTOMIZED CODE SEGMENT STARTS  HERE  
+!!                    s2_BAR DEPENDs ONLY ON Z  
+!!         The meaning of s2 is defined by scalar_kind(1) 
+!!         in problem_params (temp,salinity,density,tracer)
+!!=================================================================
+ 
+  !!==============================
+  !! s2 ===> passive tracer
+  !!==============================
+   s2_bar = 0.d0
+   s2_bar_z = 0.d0      
+   s2_bar_zz = 0.0
+      
+ return
+end subroutine eval_s2_bar
+!!================================================================ 
+!!================================================================ 
+
+
+!!================================================================ 
+!!================================================================ 
+ subroutine map_s2x_at_gridpoints(idim,periodic,s,Lx,         &
+                                  x,dxds,d2xds2,maplabel)
+                                  
+  use user_data, only: MapParams,runlabel
+  implicit none
+  integer            :: idim,N
+  real(kind=8)       :: a,b,h,Lx
+  real(kind=8)       :: s(:),ds,dt,t
+  real(kind=8)       :: x(:),pi
+  real(kind=8)       :: dxds(:)
+  real(kind=8)       :: d2xds2(:)
+  character(len=80)  :: maplabel
+  logical            :: periodic
+
+!!==================================================
+!! user can declare new local variables here 
+!!==================================================
+  real(kind=8)  :: beta,s0,alpha,gamma,num,denom
+  integer       :: i,p,mapid
+!!==================================================
+
+  N = ubound(s,1)  !!  # of discrete gridpoints
+  pi=4.*atan(1.)
+  
+  if( periodic ) then
+   ds=1./N
+  else
+   ds=1./(N-1.)
+  endif
+
+  !! x endpoints
+  a = 0.d0  !! by convention
+  b = Lx
+  
+  !! by convention, parameterize w/ s in [0,1]
+  s(:) = (/ (ds*i, i = 0,N-1) /)
+  
+
+!!MAPPING FOR X DIRECTION
+  if( idim == 1) then
+
+    !! mapid=1   !! simple linear s in [0,1] <--> x in [0,b]
+    !! mapid=2   !! cluster, see below
+    
+     mapid=2
+     mapid=1
+        
+    if( mapid==1) then
+     p=-999
+     beta=-999.d0
+     s0=-999.d0
+    elseif( mapid==2 ) then        
+     p = 2        !! controls width of clustered region
+                  !! p=3 gives wider region than p=2
+     beta = .25*b !! controls severity of clustering  .85
+                  !! 0<= beta <=b , as beta->b, --> unclustered grid
+     s0 = 0.75    !! sets center of clustered region
+    endif
+    
+    
+!!MAPPING FOR Y DIRECTION
+  elseif( idim == 2) then
+
+    !! mapid=1   !! simple linear s in [0,1] <--> x in [0,b]
+    !! mapid=2   !! cluster, see below
+    
+    mapid=1
+       
+    if( mapid==1) then
+     p=-999
+     beta=-999.d0
+     s0=-999.d0
+    elseif( mapid==2 ) then        
+     p = 1        !! controls width of clustered region
+                  !! p=3 gives wider region than p=2
+     beta = .95*b !! controls severity of clustering
+                  !! 0<= beta <=b , as beta->b, --> unclustered grid
+     s0 = 0.5     !! sets center of clustered region
+    endif
+    
+    
+
+!!MAPPING FOR Z DIRECTION
+  elseif( idim == 3) then
+
+    !! mapid=1   !! simple linear s in [0,1] <--> x in [0,b]
+    !! mapid=2   !! cluster, see below
+    
+     mapid=2
+     mapid=1
+    
+    if( mapid==1) then
+     p=-999
+     beta=-999.d0
+     s0=-999.d0
+    elseif( mapid==2 ) then
+     p = 1        !! controls width of clustered region
+                  !! p=3 gives wider region than p=2
+     beta = .25*b !! controls severity of clustering
+                  !! 0<= beta <=b , as beta->b, --> unclustered grid
+     s0 = 1.0     !! sets center of clustered region
+    endif
+
+  elseif( idim == -998 ) then   !! standard chebychev approach
+    !! s in [-1,1] <--> x in [0,b]
+    !! cheby differentiation will give df/ds, then df/dx=df/ds * ds/dx
+    !! the t<-->s transformation is buried in the chebyshev transform/
+    !! recursion/transform procedure.
+    maplabel = 'cheby'  !! not well tested yet
+    dt=pi/(N-1.)
+    do i=1,N
+     t=(i-1.)*dt          !! parameter t in [0,pi]
+     s(i)=-cos(t)         !! s in [-1,1]
+    enddo
+    
+  endif
+ !!==================================================================
+  
+  if( mapid==1 ) then
+   
+   !! simple linear mapping [0,1] ->[0,b]
+    x(:) =  (b-a) * s(:) + a
+    dxds(:) =  (b-a)
+    d2xds2(:) = 0.d0
+    maplabel='uniform_spacing'
+  
+  elseif(mapid==2) then
+  
+    !! some derived quantities    
+    num=(2*p+1)*(b-beta);
+    denom=b*( ((1-s0)/b)**(2*p+1) + (s0/b)**(2*p+1) )
+    alpha = num/denom;
+    gamma = (alpha*b/(2*p+1) )*(s0/b)**(2*p+1);
+    maplabel='cluster'
+    
+    !! evaluate the mapping at gridpoints
+    do i=1,N
+     x(i)=(alpha*b/(2*p+1))*((s(i)-s0)/b)**(2*p+1) + beta*s(i) + gamma
+     dxds(i)= alpha*((s(i)-s0)/b)**(2*p) + beta
+     d2xds2(i)=(2.*p*alpha/b)*((s(i)-s0)/b)**(2*p-1)
+    enddo
+            
+  elseif(mapid==3) then
+      
+    !! map x in [0,b] to s in [-1 1]
+    x(:) = (b/2.d0)*(s(:)+1.d0)
+    dxds(:) = b/2.d0
+    d2xds2(:) = 0.d0
+    
+  endif
+  
+  !! save the mapping parameters
+  MapParams(idim,1) = p   ! save as real even though its an integer
+  MapParams(idim,2) = beta
+  MapParams(idim,3) = s0
+  MapParams(idim,4) = mapid
+
+   
+ end subroutine map_s2x_at_gridpoints
+!!================================================================ 
+!!================================================================ 
+
+
+!!================================================================ 
+!! you don't need to edit below here unless you are defining your 
+!! own custom maps, in which case  mapid > 3
+!!================================================================
+
+
+!!================================================================ 
+!!================================================================ 
+ subroutine point_map_x2s(x,idim,periodic,Lx,N,s)
+  use user_data,     only: MapParams
+  implicit none
+  real(kind=8)          :: x,s,Lx
+  real(kind=8)          :: a,b,h
+  integer               :: idim,N
+  logical               :: periodic
+  
+  !!==================================================
+  !! user can declare new local variables here 
+  !!==================================================
+  real(kind=8)  :: beta,s0,tol
+  integer       :: p,mapid
+  !!==================================================
+  
+  a = 0.d0  !! by convention
+  b=Lx
+  
+  !! user params for coord. map
+  p = MapParams(idim,1)  !! convert back to integer
+  beta = MapParams(idim,2)
+  s0 = MapParams(idim,3)
+  mapid = MapParams(idim,4)
+  
+  tol=1.e-5
+  
+!! this is the part the user needs to specify
+!! must be consistent with mapping functions used
+!! in map_s2x_at_gridpoints etc
+
+    if( mapid == 1 ) then       !! simple linear
+     s = (x-a)/(b-a)
+    elseif( mapid == 2 ) then   !! cluster w/ (p,beta,s0)
+     call NewtonCluster(s,p,beta,s0,b,tol,x)
+    endif
+   
+ end subroutine point_map_x2s
+!!================================================================ 
+!!================================================================ 
+
+
+!!================================================================ 
+!!================================================================ 
+ subroutine point_map_s2x(s,idim,periodic,Lx,N,x,x_s)
+  use user_data,     only: MapParams
+  implicit none
+  real(kind=8)          :: x,s,x_s,Lx
+  real(kind=8)          :: a,b,h
+  integer               :: idim,N
+  logical               :: periodic
+  
+  !!==================================================
+  !! user can declare new local variables here 
+  !!==================================================
+  real(kind=8)  :: beta,s0,num,denom,alpha,gamma
+  integer       :: p,mapid
+  !!==================================================
+
+  a = 0.d0  !! by convention
+  b=Lx
+  mapid = MapParams(idim,4)
+
+!! this is the part the user needs to specify
+!! must be consistent with mapping functions used
+!! in map_s2x_at_gridpoints etc
+
+   if( mapid==1 ) then   !! simple linear map
+    x =  (b-a) * s + a
+    x_s = b-a
+   elseif( mapid==2 ) then
+    !! user params for cluster map
+    p = MapParams(idim,1)  !! convert back to integer
+    beta = MapParams(idim,2)
+    s0 = MapParams(idim,3)
+    !! derived params for cluster map
+    num=(2*p+1)*(b-beta);
+    denom=b*( ((1-s0)/b)**(2*p+1) + (s0/b)**(2*p+1) )
+    alpha = num/denom;
+    gamma = (alpha*b/(2*p+1) )*(s0/b)**(2*p+1);
+    x = (alpha*b/(2*p+1))*((s-s0)/b)**(2*p+1) + beta*s + gamma
+    x_s = (alpha)*((s-s0)/b)**(2*p) + beta
+   endif
+
+
+ end subroutine point_map_s2x
+!!================================================================ 
+!!================================================================ 
+
+!!================================================================ 
+!!================================================================
+ subroutine NewtonCluster(s,p,beta,s0,b,tol,x) 
+  implicit none
+  real(kind=8)      :: s,beta,s0,b
+  real(kind=8)      :: alpha,gamma,tol
+  real(kind=8)      :: F,df,x,ds,num,denom
+  integer           :: k,kmax=500,p
+
+  if( x==0 ) then
+   s=0; return
+  else
+   s=b/(x)  !! initial guess
+  endif 
+  
+  num=(2*p+1)*(b-beta);
+  denom=b*( ((1-s0)/b)**(2*p+1) + (s0/b)**(2*p+1) )
+  alpha = num/denom;
+  gamma = (alpha*b/(2*p+1) )*(s0/b)**(2*p+1)
+    
+  do k=1,kmax 
+   F = x - (alpha*b/(2*p+1))*((s-s0)/b)**(2*p+1) + beta*s + gamma
+   df = -( alpha*((s-s0)/b)**(2*p) + beta )
+   ds = - F/dF
+   s = s + ds
+   !write(0,*) F,df,x
+   if( abs(F) < tol .or. abs(ds) < tol ) exit
+  enddo
+  if( abs(F) > tol .and. abs(ds) > tol )  &
+    stop 'No convergence NewtonCluster'
+ end subroutine NewtonCluster
+!!================================================================ 
+!!================================================================
+
+ 
+!!================================================================ 
+!!================================================================ 
+ subroutine user_particle_positions(locations,np,Lx,Ly,Lz)
+ !!   locations(i,j)  i=1,np
+ !!                   j=1,2,3  
+ !!                   for x,y,z in 
+ !!                   (0,Lx),(0,Ly),(0,Lz) [m]
+ !!  urv <---> uniformly distributed random variable in [0,1]
+ use mpi_params, only: myid,numprocs,comm
+ implicit none
+ integer           :: i,np 
+ real(kind=8)      :: Lx,Ly,Lz
+ real(kind=8)      :: locations(np,3)
+ real(kind=8)      :: urv
+ 
+ integer           :: nboxes,ibox,mynp,ierr,pid,ip(2)
+ real(kind=8)      :: x0,x1,y0,y1,z0,z1,frac
+ 
+ 
+ call RANDOM_SEED  !! I'm using the F90 intrinsic functions
+                   !! RANDOM_SEED, RANDOM_NUMBER here
+ ip(1)=1
+ do pid=0,numprocs-1
+  if( pid==myid ) then  
+   !! read input file one processor at a time
+   open(1,file='input/particles.nliwi',position='rewind')   
+    read(1,*) nboxes    
+    do ibox=1,nboxes    
+     read(1,*) frac
+     read(1,*) x0
+     read(1,*) x1
+     read(1,*) y0
+     read(1,*) y1
+     read(1,*) z0
+     read(1,*) z1
+     ip(2) = ip(1) + frac*np
+     
+     print*,'ip(1)=',ip(1),' ip(2)=',ip(2)
+     do i=ip(1),ip(2)       
+      call RANDOM_NUMBER( urv )
+      locations(i,1) = x0 + (x1-x0)*urv  
+     
+      call RANDOM_NUMBER( urv )
+      locations(i,2) = y0 + (y1-y0)*urv 
+     
+      call RANDOM_NUMBER( urv )
+      locations(i,3) = z0 + (z1-y0)*urv         
+     enddo  !! loop over particles in box
+     ip(1)=ip(2) + 1
+     
+    enddo  !! loop thru boxes w/ particles
+   close(1)   
+  endif !! end of 'my turn?' block  
+  call mpi_barrier(comm,ierr)
+ enddo  !! loop over pids
+  
+ return 
+end subroutine user_particle_positions
+!!================================================================ 
+!!================================================================
+ 
+
+!======================================================================
+!======================================================================
+subroutine eval_surface(x,h,h_x,h_y)
+ use user_data,  only: Lx,Ly,Lz
+ use mpi_params, only: myid,numprocs,comm
+ implicit none
+ integer           :: i,pid,ierr
+ real(kind=8)      :: x(2),h,h_x,h_y,junk
+ real(kind=8)      :: xval,yval
+ real(kind=8),save :: sigmax,x0,h0,floor
+ logical,save      :: first_entry=.TRUE.
+!======================================================================
+!     inputs are DIMENSIONLESS x,y pts --> x(2)
+!     output is  corresponding DIMENSIONLESS surface height
+!     and, if requested, the partials h_x and h_y
+!
+!     (x,y,h(x,y)) is the point on surface z=h(x,y)
+       xval=Lz*x(1)
+       yval=Lz*x(2)
+!======================================================================
+!
+ if( first_entry ) then
+  !! read input file one processor at a time
+  do pid=0,numprocs-1   
+   if(pid==myid) then
+     open(1,file='input/forcing_params.nliwi',position='rewind')
+       !! skip over 1st 6 vals (ampl,freq & sponge params)
+       do i=1,6
+        read(1,*) junk
+       enddo
+       !! read the topo params
+       read(1,*) x0
+       read(1,*) floor
+       read(1,*) h0
+       read(1,*) sigmax
+     close(1)
+   endif   
+   call mpi_barrier(comm,ierr)       
+  enddo
+  first_entry=.FALSE.
+ endif
+                    
+      h = ( floor + (h0)*exp(-((xval-x0)/(sigmax) )**2) )/Lz   !! [dless]
+      
+      h_x = -(2.*h0/(sigmax**2))*((xval-x0))  &
+             *exp(-((xval-x0)/(sigmax) )**2)                   !! [dless]
+             
+      h_y = 0.d0                                               !! [dless]
+      
+      
+ return
+end subroutine eval_surface
+!======================================================================
+!======================================================================
+
+
+
+
+
+ 
+end module user_routines
Index: /trunk/00FlowSolve_KW/setups/M2_forcing/forcing_params.nliwi
===================================================================
--- /trunk/00FlowSolve_KW/setups/M2_forcing/forcing_params.nliwi	(revision 6)
+++ /trunk/00FlowSolve_KW/setups/M2_forcing/forcing_params.nliwi	(revision 6)
@@ -0,0 +1,12 @@
+150        ! eta
+1.4075e-4  ! xfreq       ! 2.*pi/(12.4*3600.)
+50000.     ! sponge_width_left
+175000.    ! sponge_width_right
+0.01       ! sponge_kappa (stable till ~ 100)
+1000.      ! sponge_tau ~ O(2*pi 1/N) ~ 2pi 1/.01 ~ 100*6 --> 1000
+93750.     ! x0  position of ridge
+350.       ! IB floor
+2300.      ! h0  total height is floor + h0
+10000.     ! sigma_x, x scale of ridge shape
+3000.      ! Lz
+
Index: /trunk/00FlowSolve_KW/setups/M2_forcing/io_params
===================================================================
--- /trunk/00FlowSolve_KW/setups/M2_forcing/io_params	(revision 6)
+++ /trunk/00FlowSolve_KW/setups/M2_forcing/io_params	(revision 6)
@@ -0,0 +1,119 @@
+XZplane      !!===>  rootname for this file-set
+new          !!===>  append w/ each write or create new file
+20           !!===>  steps between writes   
+1            !!===>  istart
+2048         !!===>  iend
+1            !!===>  i inc
+1            !!===>  jstart
+1            !!===>  jend
+1            !!===>  j inc
+40           !!===>  kstart
+513          !!===>  kend
+1            !!===>  k inc
+1            !!===>  write u
+1            !!===>  write v 
+1            !!===>  write w
+1            !!===>  write s1 
+0            !!===>  write s2 
+Z0           !!===>  rootname for this file-set
+append       !!===>  append w/ each write or create new file
+2            !!===>  steps between writes  (1 min)
+768          !!===>  istart
+768          !!===>  iend
+1            !!===>  i inc
+1            !!===>  jstart
+1            !!===>  jend
+1            !!===>  j inc
+400          !!===>  kstart
+513          !!===>  kend
+1            !!===>  k inc
+1            !!===>  write u
+1            !!===>  write v 
+1            !!===>  write w
+1            !!===>  write s1 
+0            !!===>  write s2
+Z1           !!===>  rootname for this file-set
+append       !!===>  append w/ each write or create new file
+2            !!===>  steps between writes  (1 min)
+717          !!===>  istart   ( sigma_x/2 )
+717          !!===>  iend
+1            !!===>  i inc
+1            !!===>  jstart
+1            !!===>  jend
+1            !!===>  j inc
+380          !!===>  kstart
+513          !!===>  kend
+1            !!===>  k inc
+1            !!===>  write u
+1            !!===>  write v 
+1            !!===>  write w
+1            !!===>  write s1 
+0            !!===>  write s2
+Z2           !!===>  rootname for this file-set
+append       !!===>  append w/ each write or create new file
+2            !!===>  steps between writes  (1 min)
+666          !!===>  istart   ( sigma_x/2 )
+666          !!===>  iend
+1            !!===>  i inc
+1            !!===>  jstart
+1            !!===>  jend
+1            !!===>  j inc
+350          !!===>  kstart
+513          !!===>  kend
+1            !!===>  k inc
+1            !!===>  write u
+1            !!===>  write v 
+1            !!===>  write w
+1            !!===>  write s1 
+0            !!===>  write s2
+Zleft        !!===>  rootname for this file-set
+append       !!===>  append w/ each write or create new file
+2            !!===>  steps between writes  (1 min)
+1            !!===>  istart   ( sigma_x/2 )
+1            !!===>  iend
+1            !!===>  i inc
+1            !!===>  jstart
+1            !!===>  jend
+1            !!===>  j inc
+1            !!===>  kstart
+513          !!===>  kend
+1            !!===>  k inc
+1            !!===>  write u
+1            !!===>  write v 
+1            !!===>  write w
+1            !!===>  write s1 
+0            !!===>  write s2
+Zright       !!===>  rootname for this file-set
+append       !!===>  append w/ each write or create new file
+2            !!===>  steps between writes  (1 min)
+1537         !!===>  istart   ( sigma_x/2 )
+1537         !!===>  iend
+1            !!===>  i inc
+1            !!===>  jstart
+1            !!===>  jend
+1            !!===>  j inc
+1            !!===>  kstart
+513          !!===>  kend
+1            !!===>  k inc
+1            !!===>  write u
+1            !!===>  write v 
+1            !!===>  write w
+1            !!===>  write s1 
+0            !!===>  write s2
+Xtop         !!===>  rootname for this file-set
+append       !!===>  append w/ each write or create new file
+2            !!===>  steps between writes  (1 min)
+1            !!===>  istart   ( sigma_x/2 )
+1537         !!===>  iend
+1            !!===>  i inc
+1            !!===>  jstart
+1            !!===>  jend
+1            !!===>  j inc
+513          !!===>  kstart
+513          !!===>  kend
+1            !!===>  k inc
+1            !!===>  write u
+1            !!===>  write v 
+1            !!===>  write w
+1            !!===>  write s1 
+0            !!===>  write s2
Index: /trunk/00FlowSolve_KW/setups/M2_forcing/num_filesets
===================================================================
--- /trunk/00FlowSolve_KW/setups/M2_forcing/num_filesets	(revision 6)
+++ /trunk/00FlowSolve_KW/setups/M2_forcing/num_filesets	(revision 6)
@@ -0,0 +1,1 @@
+6 
Index: /trunk/00FlowSolve_KW/setups/M2_forcing/particles.nliwi
===================================================================
--- /trunk/00FlowSolve_KW/setups/M2_forcing/particles.nliwi	(revision 6)
+++ /trunk/00FlowSolve_KW/setups/M2_forcing/particles.nliwi	(revision 6)
@@ -0,0 +1,8 @@
+1        ! num of boxes
+.8       ! % of particles in box 1
+63750.   ! x left    box 1
+123750.  ! x right   box 1
+0.       ! y left    box 1
+0.       ! y right   box 1
+2550.    ! z bottom  box 1
+3000.    ! z top     box 1
Index: /trunk/00FlowSolve_KW/setups/M2_forcing/problem_params
===================================================================
--- /trunk/00FlowSolve_KW/setups/M2_forcing/problem_params	(revision 6)
+++ /trunk/00FlowSolve_KW/setups/M2_forcing/problem_params	(revision 6)
@@ -0,0 +1,26 @@
+M2_forcing_1111   !  runlabel
+2048              ! nx   
+1                 ! ny
+513               ! nz   
+1000              ! nparticles
+30.               ! dt 
+0.0               ! t_start 
+223200.           ! t_end    ! 223200=5*12.4 hrs
+187500.           ! Lx
+1.                ! Ly
+3000.             ! Lz
+r                 ! s1 <=== density
+p                 ! s2 <=== passive tracer
+.TRUE.            ! call user forcing routine
+.TRUE.            ! immersed boundary specified
+9.81              ! g
+4.9745e-5         ! f
+0.00              ! beta 1.6069e-11
+1025.0            ! rho_0
+1.e-6             ! nu
+1.e-6             ! kappa for s1
+1.e-6             ! kappa for s2 
+3.1052e-04        ! characteristic val of drho/dz
+6.0000            ! characteristic val of s1 ===> dT
+1.0               ! characteristic val of s2 ===> d(concentration)
+0.5               ! u0 = 50 cm/sec
Index: /trunk/00FlowSolve_KW/setups/M2_forcing/stratification_params.nliwi
===================================================================
--- /trunk/00FlowSolve_KW/setups/M2_forcing/stratification_params.nliwi	(revision 6)
+++ /trunk/00FlowSolve_KW/setups/M2_forcing/stratification_params.nliwi	(revision 6)
@@ -0,0 +1,4 @@
+-1.e-5   !  ddz_deep     ! d/dz rho_bar deep ocean
+-0.001   !  ddz_upper    ! d/dz rho_bar upper ocean
+2700     !  z0           ! upper/deep transition
+75       !  gamma        ! transition scale
Index: /trunk/00FlowSolve_KW/setups/rayons_kw/BoundaryConditions
===================================================================
--- /trunk/00FlowSolve_KW/setups/rayons_kw/BoundaryConditions	(revision 6)
+++ /trunk/00FlowSolve_KW/setups/rayons_kw/BoundaryConditions	(revision 6)
@@ -0,0 +1,30 @@
+ neumann   ! x
+ neumann
+ periodic 
+ periodic   
+ neumann 
+ neumann 
+ neumann   ! x 
+ neumann
+ periodic 
+ periodic 
+ neumann 
+ neumann
+ neumann   !x
+ neumann
+ periodic 
+ periodic 
+ dirichlet 
+ dirichlet
+ neumann  ! x 
+ neumann
+ periodic 
+ periodic 
+ dirichlet 
+ dirichlet 
+ neumann   !x
+ neumann
+ periodic 
+ periodic
+ neumann 
+ neumann
Index: /trunk/00FlowSolve_KW/setups/rayons_kw/DifferentiationMethods
===================================================================
--- /trunk/00FlowSolve_KW/setups/rayons_kw/DifferentiationMethods	(revision 6)
+++ /trunk/00FlowSolve_KW/setups/rayons_kw/DifferentiationMethods	(revision 6)
@@ -0,0 +1,18 @@
+ cos     !! treatment of u in x direction
+ cos     !! treatment of u in y direction 
+ cos     !! treatment of u in z direction
+ cos     !! treatment of v in x direction 
+ cos     !! treatment of v in y direction 
+ cos     !! treatment of v in z direction
+ cos     !! treatment of w in x direction 
+ cos     !! treatment of w in y direction 
+ sin     !! treatment of w in z direction
+ cos     !! treatment of s1 in x direction 
+ cos     !! treatment of s1 in y direction 
+ cos     !! treatment of s1 in z direction
+ cos     !! treatment of s2 in x direction 
+ cos     !! treatment of s2 in y direction 
+ cos     !! treatment of s2 in z direction
+ cos     !! treatment of phi in x direction 
+ cos     !! treatment of phi in y direction 
+ cos     !! treatment of phi in z direction
Index: /trunk/00FlowSolve_KW/setups/rayons_kw/PetscOptions
===================================================================
--- /trunk/00FlowSolve_KW/setups/rayons_kw/PetscOptions	(revision 6)
+++ /trunk/00FlowSolve_KW/setups/rayons_kw/PetscOptions	(revision 6)
@@ -0,0 +1,17 @@
+
+-ksp_monitor
+#-nonzero_guess         # if set, the previous soln is used to start
+-petsc_fgmres           # or -petsc_bcgs
+-ksp_gmres_restart 50   # these are NOT preallocated
+
+
+-PC_pressure            # precondition pressure solve w/ explicit A ??
+-pressure_its 15
+-petsc_diag             # or -petsc_hypre or -petsc_pcasm
+
+#-PC_othervars          # precondition other variables besides pressure??
+-othervars_its 5        # maximum number of iterations for the implicit solves
+
+
+
+
Index: /trunk/00FlowSolve_KW/setups/rayons_kw/flow_solve_user.f90
===================================================================
--- /trunk/00FlowSolve_KW/setups/rayons_kw/flow_solve_user.f90	(revision 6)
+++ /trunk/00FlowSolve_KW/setups/rayons_kw/flow_solve_user.f90	(revision 6)
@@ -0,0 +1,723 @@
+!!==========================================================
+!!==========================================================
+module user_routines
+!! module for user-customized subroutines and functions
+use user_data               
+implicit none
+public   :: user_ics                 !!routine defining initial conditions
+public   :: user_forcing             !!routine defining any external forcing
+public   :: user_particle_positions  !!routine defining initial locations
+public   :: UserBdryData             !!routine for specifying boundary-condition data
+public   :: eval_s1_bar              !!routine defining ambient s1 profile & z derivs
+public   :: eval_s2_bar              !!routine defining ambient s2 profile & z derivs
+public   :: map_s2x_at_gridpoints    !!routine to define mapping for distributing gridpoints
+public   :: point_map_x2s            !!routine to evaluate map at given point x
+public   :: point_map_s2x            !!routine to evaluate map at given point s
+public   :: eval_surface             !!routine to define an immersed boundary surface
+
+!!==========================================================    
+Contains
+!!==========================================================
+
+!!==========================================================
+subroutine user_ics(xval,yval,zval,Fvals,id,nx,ny,nz)
+!!===========================================================
+!!  User defined subroutine to specify initial conditions.
+!!  Inputs and outputs are all in dimensional units.
+!!  
+!!
+!!  inputs:
+!!   x,y,z   coordinate arrays (in meters) that define 
+!!           the region over which forcing functions
+!!           are to be evaluated
+!! 
+!!   id      field id [u,v,w,s1',s2'] <---[1,2,3,4,5]
+!!             where s1 = s1bar(z) + s1'(x,y,z,t)
+!!             and   s2 = s2bar(z) + s2'(x,y,z,t)
+!!
+!!  outputs:
+!!          F(:,:,:) the initial conditions for variable id
+!!          F is to be returned in DIMENSIONAL units 
+!!          (i.e. m/s or deg C etc )
+!!   
+!!===========================================================
+ use user_data, only: Lx,Ly,Lz,f,N2,dgrad,rho_0,      &
+                      g,beta_dimensional,runlabel  
+ implicit none
+ integer                ::  nx,ny,nz,id
+ real(kind=8)           ::  xval(nx)
+ real(kind=8)           ::  yval(ny)
+ real(kind=8)           ::  zval(nz)
+ real(kind=8)           ::  Fvals(nx,ny,nz)  
+
+ select case(id) 
+  case(1)        !! ics for u [m/s]  
+   Fvals=0.d0     
+  case(2)        !! ics for v [m/s]
+   Fvals=0.d0
+  case(3)        !! ics for w [m/s]  
+   Fvals=0.d0     
+  case(4)        !! ics for s1' [m/s]
+   Fvals=0.d0
+  case(5)        !! ics for s2' [m/s]  
+   Fvals=0.d0     
+  case default
+   stop 'error in calling user_ics: id out of range'
+ end select
+
+return
+end subroutine user_ics
+!!========================================================== 
+!!==========================================================
+      
+      
+      
+
+
+!!========================================================== 
+!!==========================================================
+subroutine user_forcing(x,y,z,t,FF,id,m1,m2,m3)
+!!===========================================================
+!!  User defined subroutine to add time/space dependent
+!!  forcing to the equations of motion. Inputs and outputs
+!!  for this routine are all in dimensional units.
+!!  
+!!
+!!  inputs:
+!!   x,y,z   coordinate arrays [m] that define 
+!!           the region over which forcing
+!!           functions are to be evaluated
+!!   t       current time in seconds  
+!!   id      field id [u,v,w,s1',s2'] <---[1,2,3,4,5]
+!!
+!!  outputs:
+!!          FF(:,:,:) the rhs term for equation id
+!!          FF is to be returned in DIMENSIONAL units 
+!!          (i.e. m/s2 or deg C/s etc )
+!!   
+!!===========================================================
+ use user_data
+ use dependent_variables
+ use intermediate_variables
+ use etc,  only: MM0
+ implicit none
+ integer           ::  m1,m2,m3
+ real(kind=8)      ::  x(m1)
+ real(kind=8)      ::  y(m2)
+ real(kind=8)      ::  z(m3)
+ real(kind=8)      ::  t
+ real(kind=8)      ::  FF(m1,m2,m3)
+ integer           ::  id
+ 
+ !!===========================================
+ !!===========================================
+ real(kind=8)      ::  a_ics,xfreq,arg
+ real(kind=8)      ::  sigma1,sigma2,Amp
+ real(kind=8)      ::  env_x,env_z
+ integer           :: i,j,k
+ !!===========================================
+ a_ics=250                 !! displacement
+ xfreq=1.01*f              !! freq=xfreq
+ arg=xfreq*t               !! phase 
+ sigma1=5000./2.           !! horizontal scale
+ sigma2=350./2.            !! vertical scale
+ Amp=a_ics*xfreq*xfreq 
+ !!=========================================
+ !!===========================================
+ 
+ select case(id)
+ 
+  case(1)  ! u 
+  
+    do k=1,m3
+     do j=1,m2
+      do i=1,m1
+       env_x=exp((-((x(i)-Lx/2)**2))/(sigma1**2))
+       env_z=exp((-((Lz-z(k))**2))/(sigma2**2))
+       FF(i,j,k) = -Amp*sin(arg)*env_x*env_z
+      enddo
+     enddo
+    enddo
+        
+  case(2)  ! v
+  
+   FF=0.d0
+   
+  case(3) ! w
+  
+   FF=0.d0
+  
+  case(4) ! s1
+    
+   FF=0.d0
+   
+  case(5)
+   
+   FF=0.d0
+   
+  case default
+  
+   stop 'error in calling user_forcing: id out of range'
+  
+ end select 
+return
+end subroutine user_forcing
+!!==================================================================== 
+
+
+!!==================================================================== 
+subroutine UserBdryData(id,dim,endpt,bdry_type,m1,m2,x1,x2,vals)
+!!====================================================================
+!!
+!!   A boundary condition "type" has been specified for each variable
+!!   at each of the six faces [x=0,Lx] [y=0,Ly] [z=0,Lz]
+!!
+!!   The boundary conditions have the form  
+!!   Var(id)(:,:) = vals(:,:) 
+!!                      at coordinate(idim)'s BEGINNING/END (Dirichlet)
+!!         or
+!!   d/dn Var(id)(:,:)=vals(:,:) 
+!!                        at coordinate(idim)'s BEGINNING/END (Neumann)
+!!
+!!   My convention here is that d/dn is equal to d/d(coordinate)
+!!   at both ends it is NOT the OUTWARD facing normal.
+!!   e.g for dim=1, d/dn=d/dx at both x=0,Lx
+!!
+!!   The boundary data "vals" must be specified in this routine.
+!!
+!!   In the example below, all boundary conditions are homogeneous 
+!!   and therefore vals(:,:) is set to 0.0 except at the upper rigid lid,
+!!   where a stress (neumann) condition is imposed (du/dz=vals(:,:)).
+!!        ( upper rigid lid: dim=3, endpt=ENDING, x1<==x, x2<==y )
+!!
+!!   ==================================================================
+!!   INPUT
+!!   ==================================================================
+!!   id               (1,2,3,4,5) ==> (u,v,w,s1',s2')
+!!   dim                    (x,y,z)==>(1,2,3)
+!!   endpt              (start,end)==>(1,2)=(BEGINNING,ENDING)
+!!   m1,m2              array dims of bdry face
+!!   bdry_type           dirichlet, neumann
+!!   x1(:),x2(:)         y&z, x&z or x&y    
+!!                       for dim=(1,2,3) respectively
+!!                       positions given in METERS
+!!   ==================================================================
+!!   OUTPUT
+!!   ==================================================================
+!!   vals(_n1,_n2)  user defined boundary values in DIMENSIONAL UNITS
+!!   ==================================================================
+ use user_data
+ implicit none
+ integer,parameter:: BEGINNING=1,ENDING=2
+ integer          :: id  
+ integer          :: dim      
+ integer          :: endpt 
+ integer          :: m1,m2 
+ integer          :: i,j
+ character(len=80):: bdry_type       
+ real(kind=8)     :: x1(m1),x2(m2) 
+ real(kind=8)     :: vals(m1,m2)                                        
+ real(kind=8)     :: x,y,z
+ 
+ real(kind=8),parameter     :: dTdz=1.4133829e-3
+
+  
+ if(dim==1 .and. xdim_periodic) then
+  vals=0.
+  return
+ endif
+ 
+ if(dim==2 .and. ydim_periodic) then
+  vals=0.
+  return
+ endif
+ 
+ 
+ select case(id)  !! value of id determines which block to execute
+ 
+  case(1)               !! bcs for u or du/dn
+   vals(:,:) = 0.d0
+
+  case(2)               !! bcs for v or dv/dn
+   vals(:,:) = 0.d0
+  
+  case(3)               !! bcs for w or dw/dn
+   vals(:,:) = 0.d0
+  
+  case(4)               !! bcs for s1 or ds1/dn
+    vals(:,:) = -dTdz * 0. !! ==> zero for now
+  
+  case(5)               !! bcs for s2 or ds2/dn
+   vals(:,:) = 0.d0
+  
+ end select
+ 
+return 
+end subroutine UserBdryData
+      
+!!================================================================ 
+!!================================================================ 
+ subroutine eval_s1_bar(s1_bar,s1_bar_z,s1_bar_zz)  
+  use independent_variables,  only: Grid
+  use dependent_variables , only : velocity,scalars
+  use user_data
+!!================================================================ 
+!!  Code is written to solve the eqn of motion for s1'
+!!   where s1 = s1_bar(z) + s1'(x,y,z,t).
+!!   Supply s1_bar and its z derivatives here.
+!!   Setting s1_bar=0 is fine if there is no sensible 
+!!   ambient distribution of s1 in your problem.
+!!
+!! z:           vertical z spatial position  [m]
+!! Lz:          vertical size of computational domain [m]
+!! s1_scale:    characteristic range of s1 values, used to scale s1
+!!              units are dimensional, 
+!!              e.g. kg/m3 for s1--> perturbation density
+!!
+!! output 
+!! s1_bar, s1_bar_z, s1_bar_zz
+!! scalar concentration and z derivs   [dimensional units]
+ implicit none
+ real(kind=8),dimension(:),intent(inout) :: s1_bar,s1_bar_z,s1_bar_zz
+!!=================================================================
+!!         USER CUSTOMIZED CODE SEGMENT STARTS  HERE  
+!!                    S1_BAR DEPENDs ONLY ON Z  
+!!         The meaning of s1 is defined by scalar_kind(1) 
+!!         in problem_params (temp,salinity,density,tracer)
+!!=================================================================
+ integer :: k,my_k
+ real(kind=8) :: zpos
+ real(kind=8)    :: T0,dTdz 
+ 
+  !!==============================
+  !! s1 ===> temperature in deg C
+  !!==============================
+   dTdz=1.4133829e-3
+   T0=10.d0
+   do k=1,scalars(1)%DataMap%locnz
+      my_k = velocity(1)%DataMap%my_global_kvals(k)
+      zpos = Lz*Grid(0)%SpaceDims(3)%x(my_k) ! [m]
+      s1_bar(k) =  T0 + dTdz*zpos 
+      s1_bar_z(k) = dTdz
+      s1_bar_zz(k) = 0.0
+   enddo
+        
+ return
+ end subroutine eval_s1_bar
+!!================================================================ 
+!!================================================================ 
+
+
+
+
+
+
+!!================================================================ 
+!!================================================================ 
+ subroutine eval_s2_bar(s2_bar,s2_bar_z,s2_bar_zz)  
+  use user_data
+!!================================================================ 
+!!  Code is written to solve the eqn of motion for s2'
+!!   where s2 = s2_bar(z) + s2'(x,y,z,t).
+!!   Supply s2_bar and its z derivatives here.
+!!   Setting s2_bar=0 is fine if there is no sensible 
+!!   ambient distribution of s2 in your problem.
+!!
+!! z:           vertical z spatial position  [m]
+!! Lz:          vertical size of computational domain [m]
+!! s2_scale:    characteristic range of s2 values, used to scale s2
+!!              units are dimensional, 
+!!              e.g. kg/m3 for s2--> perturbation density
+!!
+!! output 
+!! s2_bar, s2_bar_z, s2_bar_zz
+!! scalar concentration and z derivs   [dimensional units]
+ implicit none
+ real(kind=8),dimension(:),intent(inout) :: s2_bar,s2_bar_z,s2_bar_zz
+!!=================================================================
+!!         USER CUSTOMIZED CODE SEGMENT STARTS  HERE  
+!!                    s2_BAR DEPENDs ONLY ON Z  
+!!         The meaning of s2 is defined by scalar_kind(1) 
+!!         in problem_params (temp,salinity,density,tracer)
+!!=================================================================
+ 
+  !!==============================
+  !! s2 ===> passive tracer
+  !!==============================
+   s2_bar = 0.d0
+   s2_bar_z = 0.d0      
+   s2_bar_zz = 0.0
+      
+ return
+end subroutine eval_s2_bar
+!!================================================================ 
+!!================================================================ 
+
+
+!!================================================================ 
+!!================================================================ 
+ subroutine map_s2x_at_gridpoints(idim,periodic,s,Lx,         &
+                                  x,dxds,d2xds2,maplabel)
+                                  
+  use user_data, only: MapParams,runlabel
+  implicit none
+  integer            :: idim,N
+  real(kind=8)       :: a,b,h,Lx
+  real(kind=8)       :: s(:),ds,dt,t
+  real(kind=8)       :: x(:),pi
+  real(kind=8)       :: dxds(:)
+  real(kind=8)       :: d2xds2(:)
+  character(len=80)  :: maplabel
+  logical            :: periodic
+
+!!==================================================
+!! user can declare new local variables here 
+!!==================================================
+  real(kind=8)  :: beta,s0,alpha,gamma,num,denom
+  integer       :: i,p,mapid
+!!==================================================
+
+  N = ubound(s,1)  !!  # of discrete gridpoints
+  pi=4.*atan(1.)
+  
+  if( periodic ) then
+   ds=1./N
+  else
+   ds=1./(N-1.)
+  endif
+
+  !! x endpoints
+  a = 0.d0  !! by convention
+  b = Lx
+  
+  !! by convention, parameterize w/ s in [0,1]
+  s(:) = (/ (ds*i, i = 0,N-1) /)
+  
+
+!!MAPPING FOR X DIRECTION
+  if( idim == 1) then
+
+    !! mapid=1   !! simple linear s in [0,1] <--> x in [0,b]
+    !! mapid=2   !! cluster, see below
+    
+     mapid=2
+        
+    if( mapid==1) then
+     p=-999
+     beta=-999.d0
+     s0=-999.d0
+    elseif( mapid==2 ) then        
+     p = 2        !! controls width of clustered region
+                  !! p=3 gives wider region than p=2
+     beta = .25*b !! controls severity of clustering  .85
+                  !! 0<= beta <=b , as beta->b, --> unclustered grid
+     s0 = 0.5     !! sets center of clustered region
+    endif
+    
+    
+!!MAPPING FOR Y DIRECTION
+  elseif( idim == 2) then
+
+    !! mapid=1   !! simple linear s in [0,1] <--> x in [0,b]
+    !! mapid=2   !! cluster, see below
+    
+    mapid=1
+       
+    if( mapid==1) then
+     p=-999
+     beta=-999.d0
+     s0=-999.d0
+    elseif( mapid==2 ) then        
+     p = 1        !! controls width of clustered region
+                  !! p=3 gives wider region than p=2
+     beta = .95*b !! controls severity of clustering
+                  !! 0<= beta <=b , as beta->b, --> unclustered grid
+     s0 = 0.5     !! sets center of clustered region
+    endif
+    
+    
+
+!!MAPPING FOR Z DIRECTION
+  elseif( idim == 3) then
+
+    !! mapid=1   !! simple linear s in [0,1] <--> x in [0,b]
+    !! mapid=2   !! cluster, see below
+    
+     mapid=2
+    
+    if( mapid==1) then
+     p=-999
+     beta=-999.d0
+     s0=-999.d0
+    elseif( mapid==2 ) then
+     p = 1        !! controls width of clustered region
+                  !! p=3 gives wider region than p=2
+     beta = .25*b !! controls severity of clustering
+                  !! 0<= beta <=b , as beta->b, --> unclustered grid
+     s0 = 1.0     !! sets center of clustered region
+    endif
+
+  elseif( idim == -998 ) then   !! standard chebychev approach
+    !! s in [-1,1] <--> x in [0,b]
+    !! cheby differentiation will give df/ds, then df/dx=df/ds * ds/dx
+    !! the t<-->s transformation is buried in the chebyshev transform/
+    !! recursion/transform procedure.
+    maplabel = 'cheby'  !! not well tested yet
+    dt=pi/(N-1.)
+    do i=1,N
+     t=(i-1.)*dt          !! parameter t in [0,pi]
+     s(i)=-cos(t)         !! s in [-1,1]
+    enddo
+    
+  endif
+ !!==================================================================
+  
+  if( mapid==1 ) then
+   
+   !! simple linear mapping [0,1] ->[0,b]
+    x(:) =  (b-a) * s(:) + a
+    dxds(:) =  (b-a)
+    d2xds2(:) = 0.d0
+    maplabel='uniform_spacing'
+  
+  elseif(mapid==2) then
+  
+    !! some derived quantities    
+    num=(2*p+1)*(b-beta);
+    denom=b*( ((1-s0)/b)**(2*p+1) + (s0/b)**(2*p+1) )
+    alpha = num/denom;
+    gamma = (alpha*b/(2*p+1) )*(s0/b)**(2*p+1);
+    maplabel='cluster'
+    
+    !! evaluate the mapping at gridpoints
+    do i=1,N
+     x(i)=(alpha*b/(2*p+1))*((s(i)-s0)/b)**(2*p+1) + beta*s(i) + gamma
+     dxds(i)= alpha*((s(i)-s0)/b)**(2*p) + beta
+     d2xds2(i)=(2.*p*alpha/b)*((s(i)-s0)/b)**(2*p-1)
+    enddo
+            
+  elseif(mapid==3) then
+      
+    !! map x in [0,b] to s in [-1 1]
+    x(:) = (b/2.d0)*(s(:)+1.d0)
+    dxds(:) = b/2.d0
+    d2xds2(:) = 0.d0
+    
+  endif
+  
+  !! save the mapping parameters
+  MapParams(idim,1) = p   ! save as real even though its an integer
+  MapParams(idim,2) = beta
+  MapParams(idim,3) = s0
+  MapParams(idim,4) = mapid
+
+   
+ end subroutine map_s2x_at_gridpoints
+!!================================================================ 
+!!================================================================ 
+
+
+!!================================================================ 
+!! you don't need to edit below here unless you are defining your 
+!! own custom maps, in which case  mapid > 3
+!!================================================================
+
+
+!!================================================================ 
+!!================================================================ 
+ subroutine point_map_x2s(x,idim,periodic,Lx,N,s)
+  use user_data,     only: MapParams
+  implicit none
+  real(kind=8)          :: x,s,Lx
+  real(kind=8)          :: a,b,h
+  integer               :: idim,N
+  logical               :: periodic
+  
+  !!==================================================
+  !! user can declare new local variables here 
+  !!==================================================
+  real(kind=8)  :: beta,s0,tol
+  integer       :: p,mapid
+  !!==================================================
+  
+  a = 0.d0  !! by convention
+  b=Lx
+  
+  !! user params for coord. map
+  p = MapParams(idim,1)  !! convert back to integer
+  beta = MapParams(idim,2)
+  s0 = MapParams(idim,3)
+  mapid = MapParams(idim,4)
+  
+  tol=1.e-5
+  
+!! this is the part the user needs to specify
+!! must be consistent with mapping functions used
+!! in map_s2x_at_gridpoints etc
+
+    if( mapid == 1 ) then       !! simple linear
+     s = (x-a)/(b-a)
+    elseif( mapid == 2 ) then   !! cluster w/ (p,beta,s0)
+     call NewtonCluster(s,p,beta,s0,b,tol,x)
+    endif
+   
+ end subroutine point_map_x2s
+!!================================================================ 
+!!================================================================ 
+
+
+!!================================================================ 
+!!================================================================ 
+ subroutine point_map_s2x(s,idim,periodic,Lx,N,x,x_s)
+  use user_data,     only: MapParams
+  implicit none
+  real(kind=8)          :: x,s,x_s,Lx
+  real(kind=8)          :: a,b,h
+  integer               :: idim,N
+  logical               :: periodic
+  
+  !!==================================================
+  !! user can declare new local variables here 
+  !!==================================================
+  real(kind=8)  :: beta,s0,num,denom,alpha,gamma
+  integer       :: p,mapid
+  !!==================================================
+
+  a = 0.d0  !! by convention
+  b=Lx
+  mapid = MapParams(idim,4)
+
+!! this is the part the user needs to specify
+!! must be consistent with mapping functions used
+!! in map_s2x_at_gridpoints etc
+
+   if( mapid==1 ) then   !! simple linear map
+    x =  (b-a) * s + a
+    x_s = b-a
+   elseif( mapid==2 ) then
+    !! user params for cluster map
+    p = MapParams(idim,1)  !! convert back to integer
+    beta = MapParams(idim,2)
+    s0 = MapParams(idim,3)
+    !! derived params for cluster map
+    num=(2*p+1)*(b-beta);
+    denom=b*( ((1-s0)/b)**(2*p+1) + (s0/b)**(2*p+1) )
+    alpha = num/denom;
+    gamma = (alpha*b/(2*p+1) )*(s0/b)**(2*p+1);
+    x = (alpha*b/(2*p+1))*((s-s0)/b)**(2*p+1) + beta*s + gamma
+    x_s = (alpha)*((s-s0)/b)**(2*p) + beta
+   endif
+
+
+ end subroutine point_map_s2x
+!!================================================================ 
+!!================================================================ 
+
+!!================================================================ 
+!!================================================================
+ subroutine NewtonCluster(s,p,beta,s0,b,tol,x) 
+  implicit none
+  real(kind=8)      :: s,beta,s0,b
+  real(kind=8)      :: alpha,gamma,tol
+  real(kind=8)      :: F,df,x,ds,num,denom
+  integer           :: k,kmax=500,p
+
+  if( x==0 ) then
+   s=0; return
+  else
+   s=b/(x)  !! initial guess
+  endif 
+  
+  num=(2*p+1)*(b-beta);
+  denom=b*( ((1-s0)/b)**(2*p+1) + (s0/b)**(2*p+1) )
+  alpha = num/denom;
+  gamma = (alpha*b/(2*p+1) )*(s0/b)**(2*p+1)
+    
+  do k=1,kmax 
+   F = x - (alpha*b/(2*p+1))*((s-s0)/b)**(2*p+1) + beta*s + gamma
+   df = -( alpha*((s-s0)/b)**(2*p) + beta )
+   ds = - F/dF
+   s = s + ds
+   !write(0,*) F,df,x
+   if( abs(F) < tol .or. abs(ds) < tol ) exit
+  enddo
+  if( abs(F) > tol .and. abs(ds) > tol )  &
+    stop 'No convergence NewtonCluster'
+ end subroutine NewtonCluster
+!!================================================================ 
+!!================================================================
+
+ 
+!!================================================================ 
+!!================================================================ 
+subroutine user_particle_positions(locations,np,Lx,Ly,Lz)
+ !!   locations(i,j)  i=1,np
+ !!                   j=1,2,3  
+ !!                   for x,y,z in 
+ !!                   (0,Lx),(0,Ly),(0,Lz) [m]
+ !!  urv <---> uniformly distributed random variable in [0,1]
+ implicit none
+ integer           :: i, j, np
+ real(kind=8)      :: Lx, Ly, Lz
+ real(kind=8)      :: locations(np,3)
+ real(kind=8)      :: urv,sides(3)
+ 
+ call RANDOM_SEED  !! I'm using the F90 intrinsic functions
+                   !! RANDOM_SEED, RANDOM_NUMBER here
+ sides(:) = (/Lx,Ly,Lz/)
+  do i=1,np       
+   do j=1,3  
+     call RANDOM_NUMBER( urv )
+     locations(i,1) = urv*sides(j)  
+   enddo      
+  enddo 
+ return
+ 
+end subroutine user_particle_positions
+!!================================================================ 
+!!================================================================
+ 
+
+!======================================================================
+!======================================================================
+subroutine eval_surface(x,h,h_x,h_y)
+ use user_data, only: Lx,Ly,Lz
+ implicit none
+ real(kind=8)      :: x(2),h,h_x,h_y
+ real(kind=8)      :: xval,yval,sigmax,x0,h0,floor
+!======================================================================
+!     inputs are DIMENSIONLESS x,y pts --> x(2)
+!     output is  corresponding DIMENSIONLESS surface height
+!     and, if requested, the partials h_x and h_y
+!
+!     (x,y,h(x,y)) is the point on surface z=h(x,y)
+       xval=Lz*x(1)
+       yval=Lz*x(2)
+!======================================================================
+!
+      STOP 'eval immersed bdry surface called '
+      
+      x0=.75*Lx
+      sigmax=25000.
+      h0=2300.  
+      floor = 350.  !! peak = floor + h0 = 2650
+             
+      h = ( floor + (h0)*exp(-((xval-x0)/(sigmax) )**2) )/Lz   !! [dless]
+      
+      h_x = -(2.*h0/(sigmax**2))*((xval-x0))  &
+             *exp(-((xval-x0)/(sigmax) )**2)                   !! [dless]
+             
+      h_y = 0.d0                                               !! [dless]
+      
+      
+ return
+end subroutine eval_surface
+!======================================================================
+!======================================================================
+
+
+
+
+
+ 
+end module user_routines
Index: /trunk/00FlowSolve_KW/setups/rayons_kw/io_params
===================================================================
--- /trunk/00FlowSolve_KW/setups/rayons_kw/io_params	(revision 6)
+++ /trunk/00FlowSolve_KW/setups/rayons_kw/io_params	(revision 6)
@@ -0,0 +1,34 @@
+XZplane 
+append 
+5 
+1 
+1024   ! nx
+1 
+1 
+1    !ny 
+1 
+1 
+512   !nz
+1 
+1 
+1 
+1 
+1 
+1 
+Zprofile
+append 
+2
+750 
+750    !nx 
+1 
+1 
+1      !ny 
+1 
+1
+512    !nz 
+1 
+1 
+1 
+1 
+1 
+1 
Index: /trunk/00FlowSolve_KW/setups/rayons_kw/num_filesets
===================================================================
--- /trunk/00FlowSolve_KW/setups/rayons_kw/num_filesets	(revision 6)
+++ /trunk/00FlowSolve_KW/setups/rayons_kw/num_filesets	(revision 6)
@@ -0,0 +1,1 @@
+2 
Index: /trunk/00FlowSolve_KW/setups/rayons_kw/problem_params
===================================================================
--- /trunk/00FlowSolve_KW/setups/rayons_kw/problem_params	(revision 6)
+++ /trunk/00FlowSolve_KW/setups/rayons_kw/problem_params	(revision 6)
@@ -0,0 +1,26 @@
+M2_forcing     ! runlabel rigid_lid_IW  sech2_IW  longs_IW M2_forcing
+1024           ! nx
+1              ! ny
+512            ! nz
+10000          ! nparticles
+60.0           ! dt
+0.0            ! t_start 
+720000.        ! t_end
+500000.        ! Lx
+200000.        ! Ly
+3000.          ! Lz
+r              ! s1 <=== density
+p              ! s2 <=== passive tracer
+.TRUE.         ! call user forcing routine
+.FALSE.        ! immersed boundary specified
+9.81           ! g
+4.9745e-5      ! f
+0.00           ! beta 1.6069e-11
+1025.0         ! rho_0
+1.e-6          ! nu
+1.e-6          ! kappa for s1
+1.e-6          ! kappa for s2 
+3.1052e-04     ! characteristic val of drho/dz
+6.0000         ! characteristic val of s1 ===> dT
+1.0            ! characteristic val of s2 ===> d(concentration)
+0.5            ! u0 = 10 cm/sec
Index: /trunk/00FlowSolve_KW/setups/rigid_lid_IW/BoundaryConditions
===================================================================
--- /trunk/00FlowSolve_KW/setups/rigid_lid_IW/BoundaryConditions	(revision 6)
+++ /trunk/00FlowSolve_KW/setups/rigid_lid_IW/BoundaryConditions	(revision 6)
@@ -0,0 +1,30 @@
+ periodic 
+ periodic
+ periodic 
+ periodic   
+ neumann 
+ neumann 
+ periodic 
+ periodic
+ periodic 
+ periodic 
+ neumann 
+ neumann
+ periodic 
+ periodic
+ periodic 
+ periodic 
+ dirichlet 
+ dirichlet
+ periodic 
+ periodic
+ periodic 
+ periodic 
+ dirichlet 
+ dirichlet 
+ periodic 
+ periodic
+ periodic 
+ periodic
+ neumann 
+ neumann
Index: /trunk/00FlowSolve_KW/setups/rigid_lid_IW/DifferentiationMethods
===================================================================
--- /trunk/00FlowSolve_KW/setups/rigid_lid_IW/DifferentiationMethods	(revision 6)
+++ /trunk/00FlowSolve_KW/setups/rigid_lid_IW/DifferentiationMethods	(revision 6)
@@ -0,0 +1,18 @@
+ fourier     !! treatment of u in x direction
+ fourier     !! treatment of u in y direction 
+ cos         !! treatment of u in z direction
+ fourier     !! treatment of v in x direction 
+ fourier     !! treatment of v in y direction 
+ cos         !! treatment of v in z direction
+ fourier     !! treatment of w in x direction 
+ fourier     !! treatment of w in y direction 
+ sin         !! treatment of w in z direction
+ fourier     !! treatment of s1 in x direction 
+ fourier     !! treatment of s1 in y direction 
+ sin         !! treatment of s1 in z direction
+ fourier     !! treatment of s2 in x direction 
+ fourier     !! treatment of s2 in y direction 
+ cos         !! treatment of s2 in z direction
+ fourier     !! treatment of phi in x direction 
+ fourier     !! treatment of phi in y direction 
+ cos         !! treatment of phi in z direction  
Index: /trunk/00FlowSolve_KW/setups/rigid_lid_IW/PetscOptions
===================================================================
--- /trunk/00FlowSolve_KW/setups/rigid_lid_IW/PetscOptions	(revision 6)
+++ /trunk/00FlowSolve_KW/setups/rigid_lid_IW/PetscOptions	(revision 6)
@@ -0,0 +1,17 @@
+
+-ksp_monitor
+#-nonzero_guess         # if set, the previous soln is used to start
+-petsc_fgmres           # or -petsc_bcgs
+-ksp_gmres_restart 50   # these are NOT preallocated
+
+
+-PC_pressure            # precondition pressure solve w/ explicit A ??
+-pressure_its 100
+-petsc_diag             # or -petsc_hypre or -petsc_pcasm
+
+#-PC_othervars          # precondition other variables besides pressure??
+-othervars_its 5        # maximum number of iterations for the implicit solves
+
+
+
+
Index: /trunk/00FlowSolve_KW/setups/rigid_lid_IW/flow_solve_user.f90
===================================================================
--- /trunk/00FlowSolve_KW/setups/rigid_lid_IW/flow_solve_user.f90	(revision 6)
+++ /trunk/00FlowSolve_KW/setups/rigid_lid_IW/flow_solve_user.f90	(revision 6)
@@ -0,0 +1,791 @@
+!!==========================================================
+!!==========================================================
+module user_routines
+!! module for user-customized subroutines and functions
+use user_data               
+implicit none
+public   :: user_ics                 !!routine defining initial conditions
+public   :: user_forcing             !!routine defining any external forcing
+public   :: user_particle_positions  !!routine defining initial locations
+public   :: UserBdryData             !!routine for specifying boundary-condition data
+public   :: eval_s1_bar              !!routine defining ambient s1 profile & z derivs
+public   :: eval_s2_bar              !!routine defining ambient s2 profile & z derivs
+public   :: map_s2x_at_gridpoints    !!routine to define mapping for distributing gridpoints
+public   :: point_map_x2s            !!routine to evaluate map at given point x
+public   :: point_map_s2x            !!routine to evaluate map at given point s
+
+!!==========================================================    
+Contains
+!!==========================================================
+
+!!==========================================================
+subroutine user_ics(xval,yval,zval,Fvals,id,nx,ny,nz)
+!!===========================================================
+!!  User defined subroutine to specify initial conditions.
+!!  Inputs and outputs are all in dimensional units.
+!!  
+!!
+!!  inputs:
+!!   x,y,z   coordinate arrays (in meters) that define 
+!!           the region over which forcing functions
+!!           are to be evaluated
+!! 
+!!   id      field id [u,v,w,s1',s2'] <---[1,2,3,4,5]
+!!             where s1 = s1bar(z) + s1'(x,y,z,t)
+!!             and   s2 = s2bar(z) + s2'(x,y,z,t)
+!!
+!!  outputs:
+!!          F(:,:,:) the initial conditions for variable id
+!!          F is to be returned in DIMENSIONAL units 
+!!          (i.e. m/s or deg C etc )
+!!   
+!!===========================================================
+ use mpi_params
+ use user_data, only: Lx,Ly,Lz,f,N2,dgrad,rho_0,      &
+                      g,beta_dimensional,runlabel  
+ implicit none
+ real(kind=8)           ::  xval(nx)
+ real(kind=8)           ::  yval(ny)
+ real(kind=8)           ::  zval(nz)
+ real(kind=8)           ::  Fvals(nx,ny,nz)
+ integer                ::  id,ierr
+ integer                ::  nx,ny,nz 
+ integer                ::  i,j,k,kk
+ 
+ !! rigid_lid_IW
+ real(kind=8)     :: omega,omega2,neg_dgrad,A,f2,pi
+ real(kind=8)     :: kx,kx2,ky,ky2,kz,kz2,C(2,2)
+ pi=4.*atan(1.)
+ 
+ 
+  f2=f*f 
+  kx=2.*pi/Lx
+  if(ny==1) then
+   ky=0.*pi/Ly
+  else
+   ky=2.*pi/Ly
+  endif
+  kz=pi/Lz
+ 
+  kx2=kx*kx
+  ky2=ky*ky
+  kz2=kz*kz
+ 
+  omega2=((kx2+ky2)*N2 + kz2*f2)  &
+         / (kx2 + ky2 + kz2)
+  omega=sqrt(omega2)
+ 
+  neg_dgrad=-(dgrad)   !! NOTE ======>> - <<======== sign !!!!
+ 
+  A = 0.01
+ 
+  C(1,1)=A*kx*kz*omega/(kx2+ky2)
+  C(2,1)=A*ky*kz*omega/(kx2+ky2)
+  C(1,2)=A*ky*kz*f/(kx2+ky2)
+  C(2,2)=A*kx*kz*f/(kx2+ky2)
+  
+  write(0,*) ' inertial freq  ',f,'   1/s'
+  write(0,*) ' BV freq        ',sqrt(N2),'   1/s'
+  write(0,*) ' IW freq        ',omega,'   1/s'
+  write(0,*) ' IW cph         ',omega*3600.d0/(2.*pi)
+  write(0,*) ' IW per         ',2.*pi/omega,'  secs'
+  write(0,*) ' IW per         ',(2.*pi/omega)/60,'  mins'
+  write(0,*) ' IW per         ',(2.*pi/omega)/3600,'  hrs'
+  write(0,*) ' BV per         ',(2.*pi/sqrt(N2))/60,'  mins'
+  write(0,*) ' BV per         ',(2.*pi/sqrt(N2)),'  secs'
+  write(0,*) ' Inertial per   ',(2.*pi/f)/3600,'  hrs'
+  write(0,*) ' Inertial per   ',(2.*pi/f),'  secs'
+  write(0,*) ' horizontal wavelength   ',(2.*pi/sqrt(kx2+ky2)),'  m'
+  write(0,*) ' vertical wavelength     ',(2.*pi/sqrt(kz2)),'  m'
+    
+
+ select case(id)
+ 
+  case(1)        !! ics for u [m/s]
+  
+   do i=1,nx
+    do j=1,ny
+     do k=1,nz
+      Fvals(i,j,k) =  C(1,1)*cos(kz*zval(k))*cos(kx*xval(i) + ky*yval(j))     &
+                    - C(1,2)*cos(kz*zval(k))*sin(kx*xval(i) + ky*yval(j))
+     enddo
+    enddo
+   enddo
+  
+  case(2)        !! ics for v [m/s]
+  
+   do i=1,nx
+    do j=1,ny
+     do k=1,nz
+      Fvals(i,j,k) =  C(2,1)*cos(kz*zval(k))*cos(kx*xval(i) + ky*yval(j))     &
+                   +  C(2,2)*cos(kz*zval(k))*sin(kx*xval(i) + ky*yval(j))  
+      enddo
+    enddo
+   enddo
+  
+  case(3)        !! ics for w [m/s]
+  
+   do i=1,nx
+    do j=1,ny
+     do k=1,nz
+      Fvals(i,j,k) = A*omega*sin(kz*zval(k))*sin(kx*xval(i) + ky*yval(j))
+     enddo
+    enddo
+   enddo
+   
+  case(4)        !! ics for s1' 
+  
+   do i=1,nx
+    do j=1,ny
+     do k=1,nz
+      Fvals(i,j,k) = -A*neg_dgrad*sin(kz*zval(k))*cos(kx*xval(i) + ky*yval(j))
+     enddo
+    enddo
+   enddo
+  
+  case(5)        !! ics for s2' 
+  
+   do i=1,nx
+    do j=1,ny
+     do k=1,nz
+       Fvals(i,j,k) = exp(-((zval(k)-Lz)/(Lz/8.))**2 )
+     enddo
+    enddo
+   enddo
+
+  case default
+   stop 'error in calling user_ics: id out of range'
+ end select
+
+return
+end subroutine user_ics
+!!========================================================== 
+!!==========================================================
+      
+      
+      
+
+
+!!========================================================== 
+!!==========================================================
+subroutine user_forcing(x,y,z,t,FF,id,m1,m2,m3)
+!!===========================================================
+!!  User defined subroutine to add time/space dependent
+!!  forcing to the equations of motion. Inputs and outputs
+!!  for this routine are all in dimensional units.
+!!  
+!!
+!!  inputs:
+!!   x,y,z   coordinate arrays [m] that define 
+!!           the region over which forcing
+!!           functions are to be evaluated
+!!   t       current time in seconds  
+!!   id      field id [u,v,w,s1',s2'] <---[1,2,3,4,5]
+!!
+!!  outputs:
+!!          FF(:,:,:) the rhs term for equation id
+!!          FF is to be returned in DIMENSIONAL units 
+!!          (i.e. m/s2 or deg C/s etc )
+!!   
+!!===========================================================
+ use user_data
+ use dependent_variables
+ use intermediate_variables
+ use etc,  only: MM0
+ implicit none
+ integer           ::  m1,m2,m3
+ real(kind=8)      ::  x(m1)
+ real(kind=8)      ::  y(m2)
+ real(kind=8)      ::  z(m3)
+ real(kind=8)      ::  t
+ real(kind=8)      ::  FF(m1,m2,m3)
+ integer           ::  id
+  
+ real(kind=8)  :: xpos,ypos,zpos
+ integer       :: i,j,k
+ 
+
+!!==================================================================
+ select case(id)
+ 
+  case(1)   ! u 
+   FF=0.d0
+  case(2)   ! v
+   FF=0.d0
+  case(3)   ! w 
+   FF=0.d0
+  case(4)   ! s1
+   FF=0.d0
+  case(5)   ! s2 
+   FF=0.d0
+  
+  case default
+   stop 'error in calling user_forcing: id out of range'
+  
+ end select 
+return
+end subroutine user_forcing
+!!==================================================================== 
+
+
+!!==================================================================== 
+subroutine UserBdryData(id,dim,endpt,bdry_type,m1,m2,x1,x2,vals)
+!!====================================================================
+!!
+!!   A boundary condition "type" has been specified for each variable
+!!   at each of the six faces [x=0,Lx] [y=0,Ly] [z=0,Lz]
+!!
+!!   The boundary conditions have the form  
+!!   Var(id)(:,:) = vals(:,:) 
+!!                      at coordinate(idim)'s BEGINNING/END (Dirichlet)
+!!         or
+!!   d/dn Var(id)(:,:)=vals(:,:) 
+!!                        at coordinate(idim)'s BEGINNING/END (Neumann)
+!!
+!!   My convention here is that d/dn is equal to d/d(coordinate)
+!!   at both ends it is NOT the OUTWARD facing normal.
+!!   e.g for dim=1, d/dn=d/dx at both x=0,Lx
+!!
+!!   The boundary data "vals" must be specified in this routine.
+!!
+!!   In the example below, all boundary conditions are homogeneous 
+!!   and therefore vals(:,:) is set to 0.0 except at the upper rigid lid,
+!!   where a stress (neumann) condition is imposed (du/dz=vals(:,:)).
+!!        ( upper rigid lid: dim=3, endpt=ENDING, x1<==x, x2<==y )
+!!
+!!   ==================================================================
+!!   INPUT
+!!   ==================================================================
+!!   id            (1,2,3,4,5) ==> (u,v,w,s1',s2')
+!!   dim                    (x,y,z)==>(1,2,3)
+!!   endpt              (start,end)==>(1,2)=(BEGINNING,ENDING)
+!!   m1,m2              array dims of bdry face
+!!   bdry_type           dirichlet, neumann
+!!   x1(:),x2(:)         y&z, x&z or x&y    
+!!                       for dim=(1,2,3) respectively
+!!                       positions given in METERS
+!!   ==================================================================
+!!   OUTPUT
+!!   ==================================================================
+!!   vals(_n1,_n2)  user defined boundary values in DIMENSIONAL UNITS
+!!   ==================================================================
+ use user_data
+ implicit none
+ integer          :: id  
+ integer          :: dim      
+ integer          :: endpt 
+ integer          :: m1,m2 
+ integer          :: i,j
+ integer,parameter:: BEGINNING=1,ENDING=2
+ character(len=80):: bdry_type       
+ real(kind=8)     :: x1(m1),x2(m2) 
+ real(kind=8)     :: vals(m1,m2)                                        
+ real(kind=8)     :: x,y,z
+
+ 
+ if(dim==1 .and. xdim_periodic) then
+  vals=0.
+  return
+ endif
+ 
+ if(dim==2 .and. ydim_periodic) then
+  vals=0.
+  return
+ endif
+ 
+ select case(id)  !! value of id determines which block to execute
+ 
+  case(1)               !! bcs for u or du/dn
+   vals(:,:) = 0.d0
+
+  case(2)               !! bcs for v or dv/dn
+   vals(:,:) = 0.d0
+  
+  case(3)               !! bcs for w or dw/dn
+   vals(:,:) = 0.d0
+  
+  case(4)               !! bcs for s1 or ds1/dn
+   vals(:,:) = 0.d0
+  
+  case(5)               !! bcs for s2 or ds2/dn
+   vals(:,:) = 0.d0
+  
+ end select
+ 
+return 
+end subroutine UserBdryData
+      
+!!================================================================ 
+!!================================================================ 
+ subroutine eval_s1_bar(s1_bar,s1_bar_z,s1_bar_zz)  
+  use user_data, only: Lz
+  use independent_variables,  only: Grid
+  use dependent_variables , only : velocity,scalars
+
+!!================================================================ 
+!!  Code is written to solve the eqn of motion for s1'
+!!   where s1 = s1_bar(z) + s1'(x,y,z,t).
+!!   Supply s1_bar and its z derivatives here.
+!!   Setting s1_bar=0 is fine if there is no sensible 
+!!   ambient distribution of s1 in your problem.
+!!
+!! z:           vertical z spatial position  [m]
+!! Lz:          vertical size of computational domain [m]
+!! s1_scale:    characteristic range of s1 values, used to scale s1
+!!              units are dimensional, 
+!!              e.g. kg/m3 for s1--> perturbation density
+!!
+!! output 
+!! s1_bar, s1_bar_z, s1_bar_zz
+!! scalar concentration and z derivs   [dimensional units]
+ implicit none
+ real(kind=8),dimension(:),intent(inout) :: s1_bar,s1_bar_z,s1_bar_zz
+!!=================================================================
+!!         USER CUSTOMIZED CODE SEGMENT STARTS  HERE  
+!!                    S1_BAR DEPENDs ONLY ON Z  
+!!         The meaning of s1 is defined by scalar_kind(1) 
+!!         in problem_params (temp,salinity,density,tracer)
+!!=================================================================
+ integer :: k,my_k
+ real(kind=8) :: zpos 
+ real(kind=8), parameter    :: dRdz = 40.243
+  
+  !!==============================
+  !! s1 ===> dens in kg/m3
+  !!==============================
+  do k=1,scalars(1)%DataMap%locnz
+     my_k = velocity(1)%DataMap%my_global_kvals(k)
+     zpos = Lz*Grid(0)%SpaceDims(3)%x(my_k) ! [m] 
+     s1_bar(k) = dRdz*(Lz-zpos)
+     s1_bar_z(k) = -dRdz
+     s1_bar_zz(k) = 0.0
+  enddo
+
+ return
+ end subroutine eval_s1_bar
+!!================================================================ 
+!!================================================================ 
+
+
+
+
+
+
+!!================================================================ 
+!!================================================================ 
+ subroutine eval_s2_bar(s2_bar,s2_bar_z,s2_bar_zz)  
+  use user_data
+!!================================================================ 
+!!  Code is written to solve the eqn of motion for s2'
+!!   where s2 = s2_bar(z) + s2'(x,y,z,t).
+!!   Supply s2_bar and its z derivatives here.
+!!   Setting s2_bar=0 is fine if there is no sensible 
+!!   ambient distribution of s2 in your problem.
+!!
+!! z:           vertical z spatial position  [m]
+!! Lz:          vertical size of computational domain [m]
+!! s2_scale:    characteristic range of s2 values, used to scale s2
+!!              units are dimensional, 
+!!              e.g. kg/m3 for s2--> perturbation density
+!!
+!! output 
+!! s2_bar, s2_bar_z, s2_bar_zz
+!! scalar concentration and z derivs   [dimensional units]
+ implicit none
+ real(kind=8) s2_bar,s2_bar_z,s2_bar_zz
+!!=================================================================
+!!         USER CUSTOMIZED CODE SEGMENT STARTS  HERE  
+!!                    s2_BAR DEPENDs ONLY ON Z  
+!!         The meaning of s2 is defined by scalar_kind(1) 
+!!         in problem_params (temp,salinity,density,tracer)
+!!=================================================================
+
+  !!==============================
+  !! s2 ===> passive tracer
+  !!==============================
+   s2_bar = 0.d0
+   s2_bar_z = 0.d0      
+   s2_bar_zz = 0.0
+      
+ return
+end subroutine eval_s2_bar
+!!================================================================ 
+!!================================================================ 
+
+
+
+!!================================================================ 
+!!================================================================ 
+ subroutine map_s2x_at_gridpoints(idim,periodic,s,Lx,         &
+                                  x,dxds,d2xds2,maplabel)
+                                  
+  use user_data, only: MapParams,runlabel
+  implicit none
+  integer            :: idim,N
+  real(kind=8)       :: a,b,h,Lx
+  real(kind=8)       :: s(:),ds,dt,t
+  real(kind=8)       :: x(:),pi
+  real(kind=8)       :: dxds(:)
+  real(kind=8)       :: d2xds2(:)
+  character(len=80)  :: maplabel
+  logical            :: periodic
+
+!!==================================================
+!! user can declare new local variables here 
+!!==================================================
+  real(kind=8)  :: beta,s0,alpha,gamma,num,denom
+  integer       :: i,p,mapid
+!!==================================================
+
+  N = ubound(s,1)  !!  # of discrete gridpoints
+  pi=4.*atan(1.)
+  
+  if( periodic ) then
+   ds=1./N
+  else
+   ds=1./(N-1.)
+  endif
+
+  !! x endpoints
+  a = 0.d0  !! by convention
+  b = Lx
+  
+  !! by convention, parameterize w/ s in [0,1]
+  s(:) = (/ (ds*i, i = 0,N-1) /)
+  
+  !!MAPPING FOR X DIRECTION
+  if( idim == 1) then
+    mapid=1
+        
+     if( mapid==1) then
+      p=-999
+      beta=-999.d0
+      s0=-999.d0
+     elseif( mapid==2 ) then        
+      p = 2        !! controls width of clustered region
+                   !! p=3 gives wider region than p=2
+      beta = .25*b !! controls severity of clustering  .85
+                   !! 0<= beta <=b , as beta->b, --> unclustered grid
+      s0 = 0.5     !! sets center of clustered region
+     endif
+    
+    
+!!MAPPING FOR Y DIRECTION
+  elseif( idim == 2) then
+
+    mapid=1
+       
+    if( mapid==1) then
+     p=-999
+     beta=-999.d0
+     s0=-999.d0
+    elseif( mapid==2 ) then        
+     p = 1        !! controls width of clustered region
+                  !! p=3 gives wider region than p=2
+     beta = .95*b !! controls severity of clustering
+                  !! 0<= beta <=b , as beta->b, --> unclustered grid
+     s0 = 0.5     !! sets center of clustered region
+    endif
+    
+    
+
+!!MAPPING FOR Z DIRECTION
+  elseif( idim == 3) then
+
+    mapid=1   !! simple linear s in [0,1] <--> x in [0,b]
+    
+    if( mapid==1) then
+     p=-999
+     beta=-999.d0
+     s0=-999.d0
+    elseif( mapid==2 ) then
+     p = 1        !! controls width of clustered region
+                  !! p=3 gives wider region than p=2
+     beta = .25*b !! controls severity of clustering
+                  !! 0<= beta <=b , as beta->b, --> unclustered grid
+     s0 = 1.0     !! sets center of clustered region
+    endif
+    
+    
+  elseif( idim == -998 ) then   !! standard chebychev approach
+    !! s in [-1,1] <--> x in [0,b]
+    !! cheby differentiation will give df/ds, then df/dx=df/ds * ds/dx
+    !! the t<-->s transformation is buried in the chebyshev transform/
+    !! recursion/transform procedure.
+    maplabel = 'cheby'  !! not well tested yet
+    dt=pi/(N-1.)
+    do i=1,N
+     t=(i-1.)*dt          !! parameter t in [0,pi]
+     s(i)=-cos(t)         !! s in [-1,1]
+    enddo
+    
+  endif
+ !!==================================================================
+  
+  
+  
+  if( mapid==1 ) then
+   
+   !! simple linear mapping [0,1] ->[0,b]
+    x(:) =  (b-a) * s(:) + a
+    dxds(:) =  (b-a)
+    d2xds2(:) = 0.d0
+    maplabel='uniform_spacing'
+  
+  elseif(mapid==2) then
+  
+    !! some derived quantities    
+    num=(2*p+1)*(b-beta);
+    denom=b*( ((1-s0)/b)**(2*p+1) + (s0/b)**(2*p+1) )
+    alpha = num/denom;
+    gamma = (alpha*b/(2*p+1) )*(s0/b)**(2*p+1);
+    maplabel='cluster'
+    
+    !! evaluate the mapping at gridpoints
+    do i=1,N
+     x(i)=(alpha*b/(2*p+1))*((s(i)-s0)/b)**(2*p+1) + beta*s(i) + gamma
+     dxds(i)= alpha*((s(i)-s0)/b)**(2*p) + beta
+     d2xds2(i)=(2.*p*alpha/b)*((s(i)-s0)/b)**(2*p-1)
+    enddo
+            
+  elseif(mapid==3) then
+      
+    !! map x in [0,b] to s in [-1 1]
+    x(:) = (b/2.d0)*(s(:)+1.d0)
+    dxds(:) = b/2.d0
+    d2xds2(:) = 0.d0
+    
+  endif
+  
+  !! save the mapping parameters
+  MapParams(idim,1) = p   ! save as real even though its an integer
+  MapParams(idim,2) = beta
+  MapParams(idim,3) = s0
+  MapParams(idim,4) = mapid
+
+   
+ end subroutine map_s2x_at_gridpoints
+!!================================================================ 
+!!================================================================ 
+
+
+!!================================================================ 
+!! You don't need to edit below here unless you are defining your 
+!! own custom maps, in which case, use  mapid > 3 and use the
+!! code below as a guide for doing something similar.
+!!================================================================
+
+
+!!================================================================ 
+!!================================================================ 
+ subroutine point_map_x2s(x,idim,periodic,Lx,N,s)
+  use user_data,     only: MapParams
+  implicit none
+  real(kind=8)          :: x,s,Lx
+  real(kind=8)          :: a,b,h
+  integer               :: idim,N
+  logical               :: periodic
+  
+  !!==================================================
+  !! user can declare new local variables here 
+  !!==================================================
+  real(kind=8)  :: beta,s0,tol
+  integer       :: p,mapid
+  !!==================================================
+  
+  a = 0.d0  !! by convention
+  b=Lx
+  
+  !! user params for coord. map
+  p = MapParams(idim,1)  !! convert back to integer
+  beta = MapParams(idim,2)
+  s0 = MapParams(idim,3)
+  mapid = MapParams(idim,4)
+  
+  tol=1.e-5
+  
+!! this is the part the user needs to specify
+!! must be consistent with mapping functions used
+!! in map_s2x_at_gridpoints etc
+
+    if( mapid == 1 ) then       !! simple linear
+     s = (x-a)/(b-a)
+    elseif( mapid == 2 ) then   !! cluster w/ (p,beta,s0)
+     call NewtonCluster(s,p,beta,s0,b,tol,x)
+    endif
+   
+ end subroutine point_map_x2s
+!!================================================================ 
+!!================================================================ 
+
+
+!!================================================================ 
+!!================================================================ 
+ subroutine point_map_s2x(s,idim,periodic,Lx,N,x,x_s)
+  use user_data,     only: MapParams
+  implicit none
+  real(kind=8)          :: x,s,x_s,Lx
+  real(kind=8)          :: a,b,h
+  integer               :: idim,N
+  logical               :: periodic
+  
+  !!==================================================
+  !! user can declare new local variables here 
+  !!==================================================
+  real(kind=8)  :: beta,s0,num,denom,alpha,gamma
+  integer       :: p,mapid
+  !!==================================================
+
+  a = 0.d0  !! by convention
+  b=Lx
+  mapid = MapParams(idim,4)
+
+!! this is the part the user needs to specify
+!! must be consistent with mapping functions used
+!! in map_s2x_at_gridpoints etc
+
+   if( mapid==1 ) then   !! simple linear map
+    x =  (b-a) * s + a
+    x_s = b-a
+   elseif( mapid==2 ) then
+    !! user params for cluster map
+    p = MapParams(idim,1)  !! convert back to integer
+    beta = MapParams(idim,2)
+    s0 = MapParams(idim,3)
+    !! derived params for cluster map
+    num=(2*p+1)*(b-beta);
+    denom=b*( ((1-s0)/b)**(2*p+1) + (s0/b)**(2*p+1) )
+    alpha = num/denom;
+    gamma = (alpha*b/(2*p+1) )*(s0/b)**(2*p+1);
+    x = (alpha*b/(2*p+1))*((s-s0)/b)**(2*p+1) + beta*s + gamma
+    x_s = (alpha)*((s-s0)/b)**(2*p) + beta
+   endif
+
+
+ end subroutine point_map_s2x
+!!================================================================ 
+!!================================================================ 
+
+!!================================================================ 
+!!================================================================
+ subroutine NewtonCluster(s,p,beta,s0,b,tol,x) 
+  implicit none
+  real(kind=8)      :: s,beta,s0,b
+  real(kind=8)      :: alpha,gamma,tol
+  real(kind=8)      :: F,df,x,ds,num,denom
+  integer           :: k,kmax=500,p
+
+  if( x==0 ) then
+   s=0; return
+  else
+   s=b/(x)  !! initial guess
+  endif 
+  
+  num=(2*p+1)*(b-beta);
+  denom=b*( ((1-s0)/b)**(2*p+1) + (s0/b)**(2*p+1) )
+  alpha = num/denom;
+  gamma = (alpha*b/(2*p+1) )*(s0/b)**(2*p+1)
+    
+  do k=1,kmax 
+   F = x - (alpha*b/(2*p+1))*((s-s0)/b)**(2*p+1) + beta*s + gamma
+   df = -( alpha*((s-s0)/b)**(2*p) + beta )
+   ds = - F/dF
+   s = s + ds
+   !write(0,*) F,df,x
+   if( abs(F) < tol .or. abs(ds) < tol ) exit
+  enddo
+  if( abs(F) > tol .and. abs(ds) > tol )  &
+    stop 'No convergence NewtonCluster'
+ end subroutine NewtonCluster
+!!================================================================ 
+!!================================================================
+
+
+ 
+!!================================================================ 
+!!================================================================ 
+subroutine user_particle_positions(locations,np,Lx,Ly,Lz)
+ !!   locations(i,j)  i=1,np
+ !!                   j=1,2,3  
+ !!                   for x,y,z in 
+ !!                   (0,Lx),(0,Ly),(0,Lz) [m]
+ !!  urv <---> uniformly distributed random variable in [0,1]
+ implicit none
+ integer           :: i, j, np
+ real(kind=8)      :: Lx, Ly, Lz
+ real(kind=8)      :: locations(np,3)
+ real(kind=8)      :: urv,sides(3)
+ 
+ call RANDOM_SEED  !! I'm using the F90 intrinsic functions
+                   !! RANDOM_SEED, RANDOM_NUMBER here
+ sides(:) = (/Lx,Ly,Lz/)
+  do i=1,np       
+   do j=1,3  
+     call RANDOM_NUMBER( urv )
+     locations(i,1) = urv*sides(j)  
+   enddo      
+  enddo 
+ return
+ 
+end subroutine user_particle_positions
+!!================================================================ 
+!!================================================================ 
+
+!======================================================================
+!======================================================================
+subroutine eval_surface(x,h,h_x,h_y)
+ use user_data,  only: Lx,Ly,Lz
+ use mpi_params, only: myid,numprocs,comm
+ implicit none
+ integer           :: i,pid,ierr
+ real(kind=8)      :: x(2),h,h_x,h_y,junk
+ real(kind=8)      :: xval,yval
+ real(kind=8),save :: sigmax,x0,h0,floor
+ logical,save      :: first_entry=.TRUE.
+!======================================================================
+!     inputs are DIMENSIONLESS x,y pts --> x(2)
+!     output is  corresponding DIMENSIONLESS surface height
+!     and, if requested, the partials h_x and h_y
+!
+!     (x,y,h(x,y)) is the point on surface z=h(x,y)
+       xval=Lz*x(1)
+       yval=Lz*x(2)
+!======================================================================
+!
+ if( first_entry ) then
+  !! read input file one processor at a time
+  do pid=0,numprocs-1   
+   if(pid==myid) then
+     open(1,file='input/forcing_params.nliwi',position='rewind')
+       !! skip over 1st 6 vals (ampl,freq & sponge params)
+       do i=1,6
+        read(1,*) junk
+       enddo
+       !! read the topo params
+       read(1,*) x0
+       read(1,*) floor
+       read(1,*) h0
+       read(1,*) sigmax
+     close(1)
+   endif   
+   call mpi_barrier(comm,ierr)       
+  enddo
+  first_entry=.FALSE.
+ endif
+                    
+      h = ( floor + (h0)*exp(-((xval-x0)/(sigmax) )**2) )/Lz   !! [dless]
+      
+      h_x = -(2.*h0/(sigmax**2))*((xval-x0))  &
+             *exp(-((xval-x0)/(sigmax) )**2)                   !! [dless]
+             
+      h_y = 0.d0                                               !! [dless]
+      
+      
+ return
+end subroutine eval_surface
+!======================================================================
+!======================================================================
+
+
+ 
+end module user_routines
Index: /trunk/00FlowSolve_KW/setups/rigid_lid_IW/io_params
===================================================================
--- /trunk/00FlowSolve_KW/setups/rigid_lid_IW/io_params	(revision 6)
+++ /trunk/00FlowSolve_KW/setups/rigid_lid_IW/io_params	(revision 6)
@@ -0,0 +1,34 @@
+XZplane 
+append 
+1 
+1
+32      !nx
+1 
+1 
+1      !ny
+1 
+1 
+32     !nz
+1 
+1 
+1 
+1 
+1 
+1 
+XZplane2
+append 
+1 
+1
+32      !nx
+1 
+1 
+1       !ny
+1 
+1 
+32     !nz
+1 
+1 
+1 
+1 
+1 
+1 
Index: /trunk/00FlowSolve_KW/setups/rigid_lid_IW/num_filesets
===================================================================
--- /trunk/00FlowSolve_KW/setups/rigid_lid_IW/num_filesets	(revision 6)
+++ /trunk/00FlowSolve_KW/setups/rigid_lid_IW/num_filesets	(revision 6)
@@ -0,0 +1,1 @@
+2 
Index: /trunk/00FlowSolve_KW/setups/rigid_lid_IW/problem_params
===================================================================
--- /trunk/00FlowSolve_KW/setups/rigid_lid_IW/problem_params	(revision 6)
+++ /trunk/00FlowSolve_KW/setups/rigid_lid_IW/problem_params	(revision 6)
@@ -0,0 +1,26 @@
+rigid_lid_IW   ! runlabel rigid_lid_IW  sech2_IW  longs_IW
+32            ! nx
+1             ! ny
+33            ! nz
+0              ! nparticles
+0.150          ! dt
+0.0            ! t_start 
+11.125         ! t_end
+1.00           ! Lx
+1.00           ! Ly
+4.00           ! Lz
+r              ! s1 <=== density (rho)
+p              ! s2 <=== passive tracer
+.FALSE.        ! call user forcing routine
+.FALSE.        ! no immersed boundary specified
+9.81           ! g
+.12566         ! f
+0.             ! beta 1.6069e-11
+1000.0         ! rho_0
+1.e-9          ! nu
+1.e-5          ! kappa for s1
+1.e-5          ! kappa for s2 
+40.243         ! characteristic val of drho/dz
+40.            ! typical drho/dz * Lz
+1.0            ! typical concentration scale
+0.1            ! u0 = 10 cm/sec
Index: /trunk/00FlowSolve_KW/src/Makefile
===================================================================
--- /trunk/00FlowSolve_KW/src/Makefile	(revision 6)
+++ /trunk/00FlowSolve_KW/src/Makefile	(revision 6)
@@ -0,0 +1,70 @@
+#=====================================================	
+#  OOFlowSolve Makefile for src directory
+#=====================================================	
+SHELL=/bin/sh
+include Make.inc
+
+OBJS = flow_solve.o flow_solve_user.o \
+	read_userdata.o write_results.o \
+	initialize.o petsc_solver_code.o \
+	particle_routines.o \
+	immersed_boundary.o
+
+CLASS_LIB = -L${BASE}/lib -lscalarvariable
+
+UTILS_LIB = -L${BASE}/lib -lutils
+
+LIBS= ${CLASS_LIB} ${UTILS_LIB} ${ALL_EXT_LIBS} ${XTRA_LIBS}
+
+#==================
+# Targets
+#==================
+
+all:
+	@echo
+	make flow.x
+	mv   flow.x ${BASE}	
+	
+flow.x: $(OBJS)
+	$(FLINKER) -o $@ $(OBJS) $(LIBS)
+
+clean:
+	@echo
+	@echo "src:  removing  *.o, *.mod,  Make.inc, flow_solve_user.f90 "
+	rm -f ${OBJS} *.mod  Make.inc flow_solve_user.f90
+	
+
+#===================================
+# Dependencies
+#===================================
+
+flow_solve.o: initialize.o flow_solve_user.o
+
+flow_solve_user.o:  user_data.mod
+
+immersed_boundary.o: flow_solve_user.o
+
+read_userdata.o:
+
+particle_routines.o: ${BASE}/lib/libscalarvariable.a ${BASE}/lib/libutils.a flow_solve_user.o
+
+initialize.o: ${BASE}/lib/libscalarvariable.a ${BASE}/lib/libutils.a  \
+				flow_solve_user.o particle_routines.o immersed_boundary.o
+
+petsc_solver_code.o:
+
+write_results.o: user_data.mod
+
+#==================
+# Suffix Rules
+#==================
+
+.SUFFIXES: $(SUFFIXES) .f90  .F90 .f
+
+.f.o:
+	${F77} $(FOPTFLAGS) -c $<
+
+
+.f90.o:
+	${F90} $(FOPTFLAGS) \
+	 $(ALL_INCLUDES) -c $<
Index: /trunk/00FlowSolve_KW/src/OOFlowSolve.h
===================================================================
--- /trunk/00FlowSolve_KW/src/OOFlowSolve.h	(revision 6)
+++ /trunk/00FlowSolve_KW/src/OOFlowSolve.h	(revision 6)
@@ -0,0 +1,28 @@
+!! file src/OOFlowSolve.h
+integer, parameter   :: U_ID=1
+integer, parameter   :: V_ID=2
+integer, parameter   :: W_ID=3
+integer, parameter   :: S1_ID=4
+integer, parameter   :: S2_ID=5
+integer, parameter   :: PRESSURE_ID=6
+integer, parameter   :: PHI_ID=6
+
+integer,parameter    :: MaxNumProcs=1024
+integer,parameter    :: MaxNumMGLevels=1
+integer,parameter    :: MaxMGIndex=MaxNumMGLevels-1
+integer,parameter    :: MaxABSlices=5
+integer,parameter    :: MaxNumDims=3
+integer,parameter    :: MaxNumScalars=2
+integer,parameter    :: MaxNumVars=MaxNumDims+MaxNumScalars+1
+integer,parameter    :: MaxNumOutputFileSets=100
+
+integer,parameter    :: DEF_REFINE=2
+integer,parameter    :: DEF_MG_LEVELS=1
+integer,parameter    :: DEF_NCOARSE=4
+
+integer,parameter     :: NumDims=MaxNumDims
+integer,parameter     :: NumVars=MaxNumVars
+integer,parameter     :: NumScalars=MaxNumScalars
+integer,parameter     :: NumScratchVars=5
+
+real(kind=8),parameter        :: pi=3.14159265358979
Index: /trunk/00FlowSolve_KW/src/class/ClassBoundaryConditions.f90
===================================================================
--- /trunk/00FlowSolve_KW/src/class/ClassBoundaryConditions.f90	(revision 6)
+++ /trunk/00FlowSolve_KW/src/class/ClassBoundaryConditions.f90	(revision 6)
@@ -0,0 +1,404 @@
+Module class_BoundaryConditions
+  use class_BoundaryOperator
+  use class_TensorProductGrid
+  use class_DataDecomposition
+  use class_ScalarVariable
+  implicit none
+  public  :: InitializeBoundaryConditions
+  public  :: ApplyBCs
+  public  :: ApplyBdryOp
+  private :: MakeStdBdryOps
+  
+  !!Members:  
+  integer                   :: NeumannOrder  
+  type( BoundaryOperator )  :: BdryOp_X0DH
+  type( BoundaryOperator )  :: BdryOp_X1DH
+  type( BoundaryOperator )  :: BdryOp_X0NH
+  type( BoundaryOperator )  :: BdryOp_X1NH
+ 
+  type( BoundaryOperator )  :: BdryOp_Y0DH
+  type( BoundaryOperator )  :: BdryOp_Y1DH
+  type( BoundaryOperator )  :: BdryOp_Y0NH
+  type( BoundaryOperator )  :: BdryOp_Y1NH
+ 
+  type( BoundaryOperator )  :: BdryOp_Z0DH
+  type( BoundaryOperator )  :: BdryOp_Z1DH
+  type( BoundaryOperator )  :: BdryOp_Z0NH
+  type( BoundaryOperator )  :: BdryOp_Z1NH
+  
+ Contains
+ 
+ subroutine InitializeBoundaryConditions  &
+             (Grid,DataMap,NeumannOrder,HomDirBCs,HomNeuBCs)
+  use class_TensorProductGrid
+  use class_DataDecomposition
+  use class_BoundaryOperator
+
+  implicit none
+  integer,intent(in)                      :: NeumannOrder
+  type( TensorProductGrid ),intent(in)    :: Grid
+  type( DataDecomposition ),intent(in)    :: DataMap
+  type( BoundaryOperator ),intent(inout)  :: HomDirBCs(3,2)
+  type( BoundaryOperator ),intent(inout)  :: HomNeuBCs(3,2)
+    
+  call MakeStdBdryOps                                                  &
+                    (NeumannOrder,Grid,DataMap,                        &
+                     HomDirBCs(1,1),HomDirBCs(1,2), &
+                     HomNeuBCs(1,1),HomNeuBCs(1,2),  &
+                     HomDirBCs(2,1),HomDirBCs(2,2), &
+                     HomNeuBCs(2,1),HomNeuBCs(2,2),  &
+                     HomDirBCs(3,1),HomDirBCs(3,2), &
+                     HomNeuBCs(3,1),HomNeuBCs(3,2)  )
+                               
+ end subroutine InitializeBoundaryConditions
+ 
+ subroutine MakeStdBdryOps                                    &
+           (order,Grid,DataMap,                               &
+            BdryOp_X0DH,BdryOp_X1DH,BdryOp_X0NH,BdryOp_X1NH,  &
+            BdryOp_Y0DH,BdryOp_Y1DH,BdryOp_Y0NH,BdryOp_Y1NH,  &
+            BdryOp_Z0DH,BdryOp_Z1DH,BdryOp_Z0NH,BdryOp_Z1NH)
+                           
+   use class_BoundaryOperator
+   use class_TensorProductGrid
+   use class_DataDecomposition
+   implicit none
+  
+   integer,intent(in)                      :: order
+   type( TensorProductGrid ),intent(in)    :: Grid
+   type( DataDecomposition ),intent(in)    :: DataMap
+   
+   type( BoundaryOperator ),intent(inout)  :: BdryOp_X0DH
+   type( BoundaryOperator ),intent(inout)  :: BdryOp_X1DH
+   type( BoundaryOperator ),intent(inout)  :: BdryOp_X0NH
+   type( BoundaryOperator ),intent(inout)  :: BdryOp_X1NH
+ 
+   type( BoundaryOperator ),intent(inout)  :: BdryOp_Y0DH
+   type( BoundaryOperator ),intent(inout)  :: BdryOp_Y1DH
+   type( BoundaryOperator ),intent(inout)  :: BdryOp_Y0NH
+   type( BoundaryOperator ),intent(inout)  :: BdryOp_Y1NH
+ 
+   type( BoundaryOperator ),intent(inout)  :: BdryOp_Z0DH
+   type( BoundaryOperator ),intent(inout)  :: BdryOp_Z1DH
+   type( BoundaryOperator ),intent(inout)  :: BdryOp_Z0NH
+   type( BoundaryOperator ),intent(inout)  :: BdryOp_Z1NH
+  
+   integer                                 :: dim(3)=(/1,2,3/)
+   integer                                 :: endpt(0:1)=(/0,1/)
+   real(kind=8)                            :: val=0.d0
+   character( len=80 )                     :: labelD,labelN
+   
+   labelD = 'Dirichlet'
+   labelN = 'Neumann'
+   
+   !!X dimension, start, Dirichlet, homogeneous
+    call NewBoundaryOperator  &
+            (labelD,order,dim(1),endpt(0),Grid,DataMap,val,BdryOp_X0DH)
+   
+   !!X dimension, end, Dirichlet, homogeneous
+    call NewBoundaryOperator  &
+            (labelD,order,dim(1),endpt(1),Grid,DataMap,val,BdryOp_X1DH)
+                
+   !!X dimension, start, Neumann, homogeneous
+    call NewBoundaryOperator  &
+           (labelN,order,dim(1),endpt(0),Grid,DataMap,val,BdryOp_X0NH)
+   
+   !!X dimension, end, Neumann, homogeneous
+    call NewBoundaryOperator  &
+            (labelN,order,dim(1),endpt(1),Grid,DataMap,val,BdryOp_X1NH)
+                           
+   
+   !!Y dimension, start, Dirichlet, homogeneous
+    call NewBoundaryOperator  &
+            (labelD,order,dim(2),endpt(0),Grid,DataMap,val,BdryOp_Y0DH)
+   
+   !!Y dimension, end, Dirichlet, homogeneous
+    call NewBoundaryOperator  &
+            (labelD,order,dim(2),endpt(1),Grid,DataMap,val,BdryOp_Y1DH)
+              
+   !!Y dimension, start, Neumann, homogeneous
+    call NewBoundaryOperator  &
+            (labelN,order,dim(2),endpt(0),Grid,DataMap,val,BdryOp_Y0NH)
+   
+   !!Y dimension, end, Neumann, homogeneous
+    call NewBoundaryOperator  &
+            (labelN,order,dim(2),endpt(1),Grid,DataMap,val,BdryOp_Y1NH)
+     
+    !!Z dimension, start, Dirichlet, homogeneous   
+    call NewBoundaryOperator  &
+            (labelD,order,dim(3),endpt(0),Grid,DataMap,val,BdryOp_Z0DH)
+   
+   !!Z dimension, end, Dirichlet, homogeneous
+    call NewBoundaryOperator  &
+            (labelD,order,dim(3),endpt(1),Grid,DataMap,val,BdryOp_Z1DH)
+           
+   !!Z dimension, start, Neumann, homogeneous
+    call NewBoundaryOperator  &
+            (labelN,order,dim(3),endpt(0),Grid,DataMap,val,BdryOp_Z0NH)
+   
+   !!Z dimension, end, Neumann, homogeneous
+    call NewBoundaryOperator  &
+            (labelN,order,dim(3),endpt(1),Grid,DataMap,val,BdryOp_Z1NH)  
+  end subroutine MakeStdBdryOps
+  
+
+
+  
+  subroutine ApplyBCs(phi,B)
+  use class_ScalarVariable
+  use class_BoundaryOperator
+  implicit none 
+  
+  type( ScalarVariable ),intent(inout)   :: phi
+  type( BoundaryOperator ),intent(inout) :: B(3,2)
+  integer                                :: i,j
+  integer,SAVE                           :: myid
+  integer,SAVE                           :: numprocs
+  integer                                :: ierr
+  logical,SAVE                           :: first_entry=.TRUE.
+
+  
+  include 'mpif.h'
+  if( first_entry ) then
+   call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)     
+   call mpi_comm_size (MPI_COMM_WORLD,numprocs,ierr) 
+   first_entry=.FALSE.
+  endif
+  
+  !!Apply BCs to both ends of coordinates x & y
+  !!Operators for endpts "0" and "1" are 
+  !!stored in B(:,1) and B(:,2). The coordinate
+  !!dimensions 1,2,3 correspond to B(1,:),B(2,:),B(3,:).
+  do i=1,2
+    do j=1,2
+      call ApplyBdryOp( B(i,j), phi )
+    enddo
+  enddo  
+  
+  !!Apply BCs in x and y
+  !!Only top/bottom processors impose top/bottom bcs
+  i=3   !! dimension along which data is distributed
+   if(myid==0) then
+     j = 1
+     call ApplyBdryOp( B(i,j), phi )
+   endif
+   
+   if(myid==numprocs-1) then
+     j = 2
+     call ApplyBdryOp( B(i,j), phi )
+   endif
+ end subroutine ApplyBCs
+ 
+ 
+ subroutine ApplyBdryOp(B,phi)
+  use class_ScalarVariable
+  use class_BoundaryOperator
+  
+  implicit none 
+  type( BoundaryOperator ),intent(in) :: B
+  type( ScalarVariable ),intent(inout):: phi
+  character( len=80 )                 :: label  
+  real(kind=8)             :: ds,h
+  real(kind=8),allocatable :: F(:,:,:)
+  real(kind=8),allocatable :: C(:,:,:)
+  real(kind=8),allocatable :: ones(:,:)
+  real(kind=8),allocatable :: factor(:,:)
+  integer                  :: dim
+  integer                  :: endpt
+  integer                  :: i,j
+  integer                  :: n1,n2
+  integer                  :: N
+  integer                  :: isign
+  integer                  :: idx
+  integer                  :: order,adj_order    
+  integer,SAVE             :: myid
+  integer,SAVE             :: numprocs
+  integer                  :: ierr
+  logical,SAVE             :: first_entry=.TRUE.
+
+  
+  include 'mpif.h'
+  if( first_entry ) then
+   call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)     
+   call mpi_comm_size (MPI_COMM_WORLD,numprocs,ierr) 
+   first_entry=.FALSE.
+  endif
+  
+  n1=B%n1
+  n2=B%n2
+  dim=B%DimId
+  endpt=B%EndId  !!convention: 0 / 1 for start / end  
+  order=B%order
+  N=phi%DataMap%SlabDims(dim,myid)  
+  label=B%label
+    
+  
+  !!Deal w/ trigonometric BCs first. Nothing needs to be done
+  !!when the derivs are type fourier, sin or cos as these
+  !!are explicitly enforced via the basis functions. If, for
+  !!some reason, periodicity is required but Fourier methods
+  !!are not being used, we apply the pde constraint to both
+  !!endpoints independently and then set as boundary conditions
+  !!the average of the two independently computed values.
+  if( label == 'Fourier' .or. label == 'fourier' ) return
+  if( label == 'Cos' .or. label == 'cos' ) return
+  if( label == 'Sin' .or. label == 'sin' ) return
+  
+  if( .NOT. allocated(F) ) allocate( F(n1,n2,1:order) )
+  if( .NOT. allocated(C) ) allocate( C(n1,n2,0:order) )
+  if( .NOT. allocated(ones) ) allocate( ones(n1,n2) )
+  if( .NOT. allocated(factor) ) allocate( factor(n1,n2) )
+  ones=1.d0
+  
+  if( label == 'Periodic' ) then
+    select case(dim)
+         case(1)  
+            phi%SlabVals(n1,:,:) =  &
+              ( phi%SlabVals(n1-1,:,:) + phi%SlabVals(1,:,:) )/2.
+         case(2)  
+            phi%SlabVals(:,n2,:) =  &
+              ( phi%SlabVals(:,n2-1,:) + phi%SlabVals(:,1,:) )/2.     
+         case(3)
+            F(1:n1,1:n2,0) = ( phi%SlabVals(1:n1,1:n2,1)      &
+                           +   phi%SlabVals(1:n1,1:n2,N) )/2.
+            phi%SlabVals(1:n1,1:n2,1) = F(1:n1,1:n2,0)
+            phi%SlabVals(1:n1,1:n2,N) = F(1:n1,1:n2,0)  
+         case default
+     end select   
+   endif
+  
+   !! Set up coefficients for mixed bc representation
+   !! Same discretizations used at each end, except forward/backward
+   !! property which introduces a sign change to the coefficients
+    if( endpt == 0 ) then  
+     idx=1     !! *START* of coord. range 
+     isign=1  
+    elseif( endpt == 1 ) then
+     idx=N     !! *END* of coord. range
+     isign=-1
+    else
+     stop 'Error in designating endpoint in ApplyBdryOp (B%endpt)'
+    endif
+    
+     !! Reduce order as needed for small grid sizes
+     adj_order=minval( (/order,N-2/) )
+     
+     !! Discrete derivatives are expressed w/ respect to the uniformly
+     !! spaced parameter s. What's really needed (for Neumann) are derivatives
+     !! with respect to x. The stretching factor dx/ds is used to convert the
+     !! s derivative to an x derivative. I need to think a bit about endpt
+     !! singularities in mappings.
+     if( phi%Grid%SpaceDims(dim)%label == 'StandardCheby' ) then
+     !! use unevenly spaced formula in x, bypass x<->s altogether 
+     !! as the transformation dx/ds is singular at the ends
+       select case(adj_order)
+        case(1)
+       end select
+       
+       h=phi%Grid%SpaceDims(dim)%ds
+      
+     else
+     
+       h=phi%Grid%SpaceDims(dim)%ds * phi%Grid%SpaceDims(dim)%dxds(idx)
+      
+     endif
+
+     !! Set up the discretization coefficients for the Neumann
+     !! part of the boundary operator: B[f] = alpha*f + beta*df/dx
+     !! Convention: the Neumann part is the derivative with respect
+     !! to the coordinate, say x,y,z, not the parameter s and not the
+     !! "outward facing unit normal".
+     !! Mixed form for alpha f + beta df/dx = Data
+     !! dfdx(0) = (1/h)(-f0 + f1) + O(h) 
+     !! ---> f0 = c0 + c1*f1 + c2*f2 + ...
+     
+     !!  DOUBLE CHECK SIGNS for d/dn IN THIS SECTION
+     
+     select case(adj_order)
+      case(1) 
+      
+         factor = isign*ones / (h*B%alpha - B%beta)
+         C(1:n1,1:n2,0) =  h*B%BoundaryData*factor 
+         C(1:n1,1:n2,1) = -B%beta*factor
+         
+      case(2)
+         !! Mixed form for alpha f + beta df/dx = Data
+         !! dfdx(0) = (1/2h)(-3f0 + 4f1 -f2) + O(h^2)
+         
+         factor = isign*ones / (2.*h*B%alpha -3.*B%beta)
+         C(1:n1,1:n2,0) =  2.*h*B%BoundaryData*factor 
+         C(1:n1,1:n2,1) = -4.*B%beta*factor
+         C(1:n1,1:n2,2) =  B%beta*factor
+      
+      case(3)
+         !! Mixed form for alpha f + beta df/dx = Data
+         !! dfdx(0) = (1/6h)(-11f0 + 18f1 -9f2 +2f3) + O(h^3)
+         
+         factor = isign*ones / (6.*h*B%alpha -11.*B%beta)
+         C(1:n1,1:n2,0) =  6.*h*B%BoundaryData*factor 
+         C(1:n1,1:n2,1) =  -18.*B%beta*factor
+         C(1:n1,1:n2,2) =   9.*B%beta*factor
+         C(1:n1,1:n2,3) =  -2.*B%beta*factor
+      
+      case(4)
+         !! Mixed form for alpha f + beta df/dx = Data
+         !! dfdx(0) = (1/24h)(-50f0 + 96f1 -72f2 +32f3 -6f4) + O(h^4)
+         factor = isign*ones / (24.*h*B%alpha -50.*B%beta)
+         C(1:n1,1:n2,0) =  24.*h*B%BoundaryData*factor 
+         C(1:n1,1:n2,1) =  -96.*B%beta*factor
+         C(1:n1,1:n2,2) =   72.*B%beta*factor
+         C(1:n1,1:n2,3) =  -32.*B%beta*factor
+         C(1:n1,1:n2,4) =    6.*B%beta*factor
+         
+       case(5)
+         !! Mixed form for alpha f + beta df/dx = Data
+         !! dfdx(0) = (1/120h)(-274f0 + 600f1 -600f2 +400f3 -150f4 + 24f5) + O(h^4)
+         factor = isign*ones / (120.*h*B%alpha -274.*B%beta)
+         C(1:n1,1:n2,0) =  120.*h*B%BoundaryData*factor 
+         C(1:n1,1:n2,1) =  -600.*B%beta*factor
+         C(1:n1,1:n2,2) =   600.*B%beta*factor
+         C(1:n1,1:n2,3) =  -400.*B%beta*factor
+         C(1:n1,1:n2,4) =   150.*B%beta*factor
+         C(1:n1,1:n2,5) =   -24.*B%beta*factor
+      end select    
+    
+    
+      !!Use the discretization coefficients to form the
+      !!linear combination f0 = c0 + c1*f1  + c2*f2 ....
+      !! idx+j = 2,3,4 ...        left end, idx=1
+      !!         N-1,N-2,N-3 ...  right end idx=N
+      select case(dim)
+       case(1) 
+        phi%SlabVals(idx,:,:)=C(:,:,0)
+        do i=1,order
+          j=isign*i
+          F(1:n1,1:n2,i) = phi%SlabVals(idx+j,1:n1,1:n2)
+          phi%SlabVals(idx,1:n1,1:n2) = phi%SlabVals(idx,1:n1,1:n2)    &
+                                    + C(1:n1,1:n2,i)*F(1:n1,1:n2,i)
+        enddo 
+       case(2) 
+        phi%SlabVals(:,idx,:)=C(:,:,0)
+        do i=1,order
+          j=isign*i
+          F(1:n1,1:n2,i) = phi%SlabVals(1:n1,idx+j,1:n2)          
+          phi%SlabVals(1:n1,idx,1:n2) = phi%SlabVals(1:n1,idx,1:n2)    &
+                                      + C(1:n1,1:n2,i)*F(1:n1,1:n2,i)
+        enddo 
+       case(3)
+         phi%SlabVals(:,:,idx)=C(:,:,0)
+         do i=1,order
+          j=isign*i
+          F(1:n1,1:n2,i) = phi%SlabVals(1:n1,1:n2,idx+j)
+          phi%SlabVals(1:n1,1:n2,idx) = phi%SlabVals(1:n1,1:n2,idx)    &
+                                      + C(1:n1,1:n2,i)*F(1:n1,1:n2,i)
+         enddo
+       case default
+        
+      end select
+       
+100 if(allocated( F ))      deallocate( F )
+    if(allocated( C ))      deallocate( C )
+    if(allocated( ones ))   deallocate( ones )
+    if(allocated( factor )) deallocate( factor )
+ end subroutine ApplyBdryOp
+ 
+ end Module class_BoundaryConditions
Index: /trunk/00FlowSolve_KW/src/class/ClassBoundaryOperator.f90
===================================================================
--- /trunk/00FlowSolve_KW/src/class/ClassBoundaryOperator.f90	(revision 6)
+++ /trunk/00FlowSolve_KW/src/class/ClassBoundaryOperator.f90	(revision 6)
@@ -0,0 +1,366 @@
+Module class_BoundaryOperator  
+  use class_DataDecomposition
+  use class_TensorProductGrid
+  use class_CoordinateMap
+  use class_ScalarVariable
+  
+  implicit none
+  public  :: NewBoundaryOperator
+  public  :: UpdateBoundaryOperator
+  public  :: DeleteBoundaryOperator
+  public  :: ApplyB
+  public  :: SwitchType
+
+ 
+ !!A class containing data and algorithms for applying
+ !!boundary conditions to 3d data "cube" at a specified boundary.
+ 
+ type BoundaryOperator   
+  character(len=80)        :: label             !! Dirichlet,Neumann,Mixed,Periodic
+  integer                  :: order             !! order of 1-sided deriv operator
+  integer                  :: DimId             !! Which coordinate boundary operator B acts on (1,2,3)
+  integer                  :: EndId             !! Whether B acts at initial(0) or final(1)  point of coord. range
+  real(kind=8),pointer     :: alpha(:,:)        !! alpha --> B(phi) = alpha*phi * beta * phi'  
+  real(kind=8),pointer     :: beta(:,:)         !! beta  --> B(phi) = alpha*phi * beta * phi'  
+  real(kind=8),pointer     :: BoundaryData(:,:) !! data such that the boundary condition is B(phi) = data
+  integer                  :: n1,n2             !! (n1,n2) --> array size for alpha,beta,BoundaryData
+  type( CoordinateMap )    :: CoordMap          !! CoordMap associated with dimension DimId  
+  logical                  :: initialized
+ end type BoundaryOperator
+  
+Contains                      ! member functionality
+
+ subroutine DeleteBoundaryOperator(B)
+  type( BoundaryOperator ),intent(inout)  :: B
+  deallocate(B%alpha)
+  deallocate(B%beta)
+  deallocate(B%BoundaryData)
+  call DeleteCoordinateMap( B%CoordMap )
+ end subroutine DeleteBoundaryOperator
+ 
+ subroutine NewBoundaryOperator  &
+           (label,order,DimId,EndId,Grid,DataMap,Val,B)
+  use class_DataDecomposition
+  use class_TensorProductGrid
+  use class_CoordinateMap
+  implicit none
+  
+  type( BoundaryOperator ),intent(inout)  :: B
+  type( TensorProductGrid ),intent(in)    :: Grid
+  type( DataDecomposition ),intent(in)    :: DataMap
+  real(kind=8),intent(in)                 :: Val
+  integer,intent(in)                      :: order
+  integer,intent(in)                      :: DimId,EndId
+  character( len=80 ),intent(inout)       :: label
+  integer                                 :: n1,n2
+  integer                                 :: myid,numprocs
+  integer                                 :: ierr,rcode(3)=0
+  
+  include 'mpif.h'
+  
+  call mpi_comm_rank(MPI_COMM_WORLD,myid,ierr)      
+  call mpi_comm_size(MPI_COMM_WORLD,numprocs,ierr)
+  
+  if(trim(label)=='Dirichlet') label='dirichlet'
+  if(trim(label)=='Dirchlet') label='dirichlet'
+  if(trim(label)=='dirchlet') label='dirichlet'
+  if(trim(label)=='Neumann') label='neumann'
+  if(trim(label)=='Neuman') label='neumann'
+  if(trim(label)=='neuman') label='neumann'
+  if(trim(label)=='Periodic') label='periodic'
+  if(trim(label)=='Mixed') label='mixed'
+  
+  if( B%initialized ) then
+   !if(myid==0) write(0,*) ' Boundary operator exists -- immediate return'
+   !if(myid==0) write(0,*) ' dim, end ===>',B%DimId,B%EndId
+   !if(myid==0) write(0,*) ' label ===> ',B%label
+   return !! operator already exixts
+  endif
+  
+  if( EndId==2 ) then
+   write(0,*) ' Convention for dimension endids is 0/1 for start/end '
+   write(0,*) ' NewBoundaryOperator called w/ EndId=2,  STOPPING NOW '
+   stop
+  endif
+    
+  B%label=label
+  B%order=order
+  B%EndId=EndId 
+  B%DimId=DimId
+  B%CoordMap  =     &
+     NewCoordinateMap(Grid%SpaceDims(DimId)%npts, &
+                      Grid%SpaceDims(DimId)%label,&
+                      Grid%SpaceDims(DimId)%x,    &
+                      Grid%SpaceDims(DimId)%s,    &
+                      Grid%SpaceDims(DimId)%dxds, &
+                      Grid%SpaceDims(DimId)%d2xds2,&
+                      Grid%SpaceDims(DimId)%L)
+     
+  select case(DimId)
+   case(1)
+    n1=DataMap%SlabDims(2,myid)
+    n2=DataMap%SlabDims(3,myid)
+   case(2)
+    n1=DataMap%SlabDims(1,myid)
+    n2=DataMap%SlabDims(3,myid)
+   case(3)
+    n1=DataMap%SlabDims(1,myid)
+    n2=DataMap%SlabDims(2,myid)
+  end select
+  
+  B%n1=n1
+  B%n2=n2
+  
+  allocate( B%alpha(n1,n2), stat=rcode(1) )
+  allocate( B%beta(n1,n2), stat=rcode(2) )
+  allocate( B%BoundaryData(n1,n2), stat=rcode(3) )
+  if( any( rcode /= 0 ) ) Stop 'Allocation failed: NewBoundaryOperator'
+  
+   if(label == 'dirichlet') then
+    B%alpha(:,:)=1.
+    B%beta(:,:)=0.
+    B%BoundaryData(:,:)=Val !! simple init, set data to constant
+     
+   elseif(label == 'neumann') then
+    B%alpha(:,:)=0.
+    B%beta(:,:)=1.
+    B%BoundaryData(:,:)=Val !! simple init, set data to constant
+        
+   elseif(label == 'mixed') then
+    B%alpha(:,:)=1.
+    B%beta(:,:)=1.
+    B%BoundaryData(:,:)=Val !! simple init, set data to constant
+     
+   elseif(label == 'periodic') then
+     !! no values
+   else
+    write(0,*) 'Boundary operator incorrectly specified'
+    stop    
+   endif  
+  B%initialized=.TRUE.
+ end subroutine NewBoundaryOperator
+ 
+ subroutine UpdateBoundaryOperator(B,ArrayName,vals,n1,n2)
+ !!Use this function to change values associated with an existing
+ !!boundary operator. Legal values of label are 'alpha','beta','data'.
+ !!This function can be called to enable nontrivial, inhomogeneous conditions.
+ !!The BoundaryData could be changed at each time step if, for example, a boundary 
+ !!condition were to be time dependent.
+  implicit none
+  
+  integer                  :: n1,n2
+  type( BoundaryOperator ) :: B
+  character( len=80 )      :: ArrayName
+  real(kind=8)             :: vals(n1,n2)
+    
+  if( B%n1 .ne. n1 .or. B%n2 .ne. n2 ) then
+   write(0,*) 'UpdateBoundaryOperator: input array inconsistent with input operator'
+   stop
+  endif
+  
+  select case(ArrayName)
+   case('alpha')
+    B%alpha=vals
+   case('beta')
+    B%beta=vals
+   case('data')
+    B%BoundaryData=vals
+  end select  
+    
+ end subroutine UpdateBoundaryOperator
+ 
+ subroutine SwitchType(B,newtype)
+ !!Use this function to change values associated with an existing
+ !!boundary operator. Legal values of label are 'alpha','beta','data'.
+ !!This function can be called to enable nontrivial, inhomogeneous conditions.
+ !!The BoundaryData could be changed at each time step if, for example, a boundary 
+ !!condition were to be time dependent.
+  implicit none
+  character(len=80)   :: newtype
+  
+  type( BoundaryOperator ) :: B
+      
+  select case(trim(newtype))
+   case('neumann')      !! switch to neumann
+    B%alpha=0.d0
+    B%beta =1.d0
+    B%label='neumann'
+   case('dirichlet')    !! switch to dirichlet
+    B%alpha=1.d0
+    B%beta =0.d0
+    B%label='dirichlet'
+   case('periodic')    !! switch to periodic 
+    B%label='periodic'
+  end select  
+    
+ end subroutine SwitchType
+ 
+ 
+ 
+ 
+ subroutine ApplyB(B,phi,B_of_Phi)  
+  use class_ScalarVariable
+  implicit none 
+  type( BoundaryOperator ),intent(in) :: B
+  type( ScalarVariable ),intent(inout):: phi
+  type( ScalarVariable ),intent(inout):: B_of_phi
+  real(kind=8)              :: ds,h,xx
+  real(kind=8), allocatable :: Vals(:,:) 
+  real(kind=8), allocatable :: A(:)
+  integer                   :: dim
+  integer                   :: endpt
+  integer                   :: i,j,k
+  integer                   :: n1,n2
+  integer                   :: N
+  integer                   :: idx(0:5),jdx
+  integer                   :: order,adj_order    
+  integer                   :: myid
+  integer                   :: ierr
+  integer                   :: numprocs
+  
+  include 'mpif.h'
+  call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)     
+  call mpi_comm_size (MPI_COMM_WORLD,numprocs,ierr)
+  
+  n1=B%n1
+  n2=B%n2
+  dim=B%DimId
+  endpt=B%EndId  !!convention: 0 / 1 for start / end  
+  order=B%order
+  N=phi%DataMap%SlabDims(dim,myid)     
+  
+  !! Reduce order as needed for small grid sizes
+  adj_order=minval( (/order,N-2/) )   !!  adjusted order
+    
+  allocate( A(0:adj_order) )
+  allocate( Vals(n1,n2) )   
+  
+  !! See Abramowitz & Stegun p. 914 
+   select case(adj_order)
+    case(1) 
+     A(0)=-1.0 ; A(1)=1.0
+    case(2)
+     A(0)=-3.; A(1)=4.; A(2)=-1.
+    case(3)
+     A(0)=-11.; A(1)=18.; A(2)=-9.; A(3)=2.          
+    case(4)
+     A(0)=-50.; A(1)=96.; A(2)=-72.; A(3)=32.; A(4)=-6.   
+    case(5)
+     A(0)=-274.; A(1)=600.; A(2)=-600.; A(3)=400.; A(4)=-150.; A(5)=24.
+   end select
+
+  !! Set up coefficients for general, mixed bc representation
+  !! Same discretizations used at each end, except forward/backward
+  !! property which introduces a reversal of order & a 
+  !! sign change to the coefficients
+  if( endpt == 0 ) then  
+   jdx=1     !! *START* of coord. range 
+   idx(0:5)=(/1,2,3,4,5,6/)
+   if( dim==3 .and. myid .ne. 0 ) stop 'wrong processor applying z=0 bdry operator'
+  elseif( endpt == 1 ) then
+   jdx=N     !! *END* of coord. range
+   idx(0:5)=(/N,N-1,N-2,N-3,N-4,N-5/)
+   A=-A
+   if( dim==3 .and. myid .ne. numprocs-1 ) stop 'wrong processor applying z=Lz bdry operator'
+  else
+   stop 'Error in designating endpoint in ApplyB (B%endpt)'
+  endif
+    
+  !! Discrete derivatives are expressed w/ respect to the uniformly
+  !! spaced parameter s. What's really needed (for Neumann) are derivatives
+  !! with respect to x. The stretching factor dx/ds is used to convert the
+  !! s derivative to an x derivative. I need to think a bit about endpt
+  !! singularities in mappings.
+     
+  if( phi%Grid%SpaceDims(dim)%label == 'StandardCheby' ) then
+  !! use unevenly spaced formula in x, bypass x<->s altogether 
+  !! as the transformation dx/ds is singular at the ends
+       
+    h=phi%Grid%SpaceDims(dim)%ds
+    stop 'bdry formulas for case cheby not yet implemented in ClassBoundaryOperator'
+      
+  else
+     
+    !! h = ds*dx/ds  ---> results are Neumann BCs expressed in x not parameter s       
+    h=phi%Grid%SpaceDims(dim)%ds * phi%Grid%SpaceDims(dim)%dxds(jdx)
+      
+  endif
+
+  if(adj_order==1) xx=1./(h)
+  if(adj_order==2) xx=1./(2.*h)
+  if(adj_order==3) xx=1./(3.*2.*h)
+  if(adj_order==4) xx=1./(4.*3.*2.*h)
+  if(adj_order==5) xx=1./(5.*4.*3.*2.*h)
+
+  !! Set up the discretization coefficients for the Neumann
+  !! part of the boundary operator: B[f] = alpha*f + beta*df/dx
+  !! Convention: the Neumann part is the derivative with respect
+  !! to the coordinate, say x,y,z, not the parameter s and not the
+  !! "outward facing unit normal".
+  !! Mixed form B_of_Phi = alpha f + beta df/dx 
+  !! dfdx(0) = (1/h)(-f0 + f1) + O(h2) 
+     
+  Vals(:,:)=0.0
+  if( dim==1 ) then
+   Vals=0.0  
+   do i=1,adj_order+1
+    do j=1,n1
+     do k=1,n2
+      Vals(j,k) = Vals(j,k) + A(i-1)*Phi%SlabVals(idx(i-1),j,k)
+     enddo
+    enddo
+   enddo
+
+   
+   do j=1,n1
+    do k=1,n2
+      B_of_Phi%SlabVals(jdx,j,k) = B%alpha(j,k) * Phi%SlabVals(jdx,j,k)  &
+                                 + B%beta(j,k) * Vals(j,k) * xx
+    enddo
+   enddo
+   
+  elseif( dim==2 ) then
+   Vals=0.0  
+   do j=1,adj_order+1
+    do i=1,n1
+     do k=1,n2
+      Vals(i,k) = Vals(i,k) + A(j-1)*Phi%SlabVals(i,idx(j-1),k)
+     enddo
+    enddo
+   enddo
+   
+   do i=1,n1
+    do k=1,n2
+      B_of_Phi%SlabVals(i,jdx,k) = B%alpha(i,k) * Phi%SlabVals(i,jdx,k)  &
+                                 + B%beta(i,k) * Vals(i,k) * xx
+    enddo
+   enddo
+   
+                                     
+  elseif( dim==3 ) then
+  
+   Vals=0.0  
+   do k=1,adj_order+1
+    do i=1,n1
+     do j=1,n2
+      Vals(i,j) = Vals(i,j) + A(k-1)*Phi%SlabVals(i,j,idx(k-1))
+     enddo
+    enddo
+   enddo
+   
+   do i=1,n1
+    do j=1,n2
+      B_of_Phi%SlabVals(i,j,jdx) = B%alpha(i,j) * Phi%SlabVals(i,j,jdx)  &
+                                 + B%beta(i,j) * Vals(i,j) * xx
+    enddo
+   enddo
+
+  endif
+  deallocate( Vals )
+  deallocate( A )
+  
+  end subroutine ApplyB
+ 
+end Module class_BoundaryOperator
+
+
Index: /trunk/00FlowSolve_KW/src/class/ClassCoordinateMap.f90
===================================================================
--- /trunk/00FlowSolve_KW/src/class/ClassCoordinateMap.f90	(revision 6)
+++ /trunk/00FlowSolve_KW/src/class/ClassCoordinateMap.f90	(revision 6)
@@ -0,0 +1,105 @@
+Module class_CoordinateMap     
+!! Coordinate maps describe the distribution of
+!! gridpoint locations along a coordinate axis.
+!! Notation: The coordinate x is parameterized by s, 
+!! i.e. x = x(s). The discrete arrays [x] [s] [dxds] 
+!! etc. are related through a discrete sampling of
+!! an analytically (generally) defined mapping. 
+
+ implicit none
+ public         :: NewCoordinateMap
+ public         :: DescribeCoordinateMap
+ public         :: DeleteCoordinateMap
+ 
+ type CoordinateMap
+    character (len=80)                      :: label  
+    integer                                 :: npts
+    real(kind=8), pointer, dimension(:)     :: x      
+    real(kind=8), pointer, dimension(:)     :: s      
+    real(kind=8), pointer, dimension(:)     :: dxds   
+    real(kind=8), pointer, dimension(:)     :: d2xds2 
+    real(kind=8)                            :: ds,L     
+    real(kind=8), dimension(2)              :: xlimits
+    logical                                 :: uniform_dx
+ end type CoordinateMap
+ 
+
+Contains
+
+ function NewCoordinateMap              &
+           (N,label,x,s,dxds,d2xds2,L)   &
+  result(map)
+  
+  implicit none 
+  type( CoordinateMap )             :: map
+  integer            ,intent(in)    :: N
+  integer                           :: i
+  character (len=80 ),intent(in)    :: label
+  real(kind=8)       ,intent(in)    :: x     (N)
+  real(kind=8)       ,intent(in)    :: s     (N)
+  real(kind=8)       ,intent(in)    :: dxds  (N)
+  real(kind=8)       ,intent(in)    :: d2xds2(N)
+  real(kind=8)       ,intent(in)    :: L
+    
+  !! Allocate CoordinateMap arrays
+  allocate( map%x     (N) ) 
+  allocate( map%s     (N) ) 
+  allocate( map%dxds  (N) )
+  allocate( map%d2xds2(N) )
+  
+  map%npts        = N
+  map%label       = label
+  map%x(1:N)      = x(1:N)
+  map%s(1:N)      = s(1:N)
+  map%xlimits(1)  = x(1)
+  map%xlimits(2)  = x(N)
+  if(N>1) then
+   map%ds          = s(2)-s(1)
+  else
+   map%ds=1.d0
+  endif
+  map%dxds(1:N)   = dxds  (1:N)
+  map%d2xds2(1:N) = d2xds2(1:N)
+  map%L = L  !! dimensionless
+  
+  map%uniform_dx = .TRUE.
+  do i=2,N
+   if( dxds(i) /= dxds(1) ) map%uniform_dx = .FALSE.
+  enddo
+  
+ end function NewCoordinateMap
+  
+  
+ subroutine DescribeCoordinateMap(map,docfile)
+  implicit none
+  type( CoordinateMap ), intent(in)   :: map
+  character (len=80),    intent(in)   :: docfile
+  integer                             :: i
+  
+   open(1,file=docfile,position='append')
+    write(1,*) 'Map Label: ',trim(map%label)
+    write(1,*) 'uniform_dx: ',map%uniform_dx
+    write(1,*) '=================================================================================================================='
+    write(1,*) '                   s                              x                           dx/ds                    d2x/ds2    '
+    write(1,*) '=================================================================================================================='
+    do i=1,map%npts
+     write(1,100) i,map%s(i),map%x(i),map%dxds(i),map%d2xds2(i)
+    enddo
+    write(1,*) '   '
+    write(1,*) '   '  
+   close(1)
+ 100 format(1x,i3,4e22.10)
+ end subroutine DescribeCoordinateMap
+ 
+ 
+ subroutine DeleteCoordinateMap(map)
+  implicit none
+  type( CoordinateMap ),intent(inout) :: map
+  deallocate(map%x)
+  deallocate(map%s)
+  deallocate(map%dxds)
+  deallocate(map%d2xds2)
+ end subroutine DeleteCoordinateMap
+ 
+end Module class_CoordinateMap
+
Index: /trunk/00FlowSolve_KW/src/class/ClassDataDecomposition.f90
===================================================================
--- /trunk/00FlowSolve_KW/src/class/ClassDataDecomposition.f90	(revision 6)
+++ /trunk/00FlowSolve_KW/src/class/ClassDataDecomposition.f90	(revision 6)
@@ -0,0 +1,315 @@
+Module class_DataDecomposition    !============================================
+ use class_TensorProductGrid
+ implicit none
+ public  :: NewDataDecomposition
+ public  :: DeleteDataDecomposition
+ public  :: DescribeDecomposition
+ 
+ type DataDecomposition 
+  integer                            :: level         !!multigrid level 0=fine grid
+  integer                            :: nx            !!global data size, dim 1
+  integer                            :: ny            !!global data size, dim 2
+  integer                            :: nz            !!global data size, dim 3
+  integer                            :: numprocs            !!number of processors
+  integer,pointer,dimension(:,:)     :: SlabDims,ColDims    !!size of local storage arrays
+  integer,pointer,dimension(:,:)     :: SlabVals,ColVals    !!num of data vals held 
+  integer,pointer,dimension(:)       :: my_global_kvals     !!global indexing of local data
+  integer,pointer,dimension(:)       :: my_global_ivals     !!global indexing of local data
+  integer                            :: locnz
+  integer                            :: locnx
+  character (len=80 )                :: DerivTypes(6)
+  character (len=80 )                :: label
+ end type DataDecomposition
+ 
+ interface assignment (=)
+  module procedure EqualDataDecompositions
+ end interface
+ 
+Contains         
+
+ subroutine DeleteDataDecomposition(DataMap)
+ type( DataDecomposition ),intent(inout)  :: DataMap
+  deallocate( DataMap%SlabDims )
+  deallocate( DataMap%ColDims )
+  deallocate( DataMap%SlabVals )
+  deallocate( DataMap%ColVals )
+  deallocate( DataMap%my_global_kvals )
+  deallocate( DataMap%my_global_ivals )
+ end subroutine DeleteDataDecomposition
+ 
+ 
+ subroutine EqualDataDecompositions(new,old)
+  implicit none
+  type( DataDecomposition ),intent(inout):: new
+  type( DataDecomposition ),intent(in)   :: old
+  integer                                :: numprocs,rcode(6)=0
+  
+  numprocs=old%numprocs
+  
+   if( associated(new%SlabDims) ) call DeleteDataDecomposition(new)
+   
+   new%level = old%level
+   new%nx = old%nx
+   new%ny = old%ny
+   new%nz = old%nz
+   new%numprocs = old%numprocs
+   new%DerivTypes = old%DerivTypes
+   new%label = old%label
+   new%locnz = old%locnz
+   new%locnx = old%locnx
+   
+   allocate( new%SlabDims(3,-1:numprocs-1), stat=rcode(1) )
+   allocate( new%SlabVals(3,-1:numprocs-1), stat=rcode(2) )
+   allocate( new%ColDims(3,-1:numprocs-1), stat=rcode(3) )
+   allocate( new%ColVals(3,-1:numprocs-1), stat=rcode(4) )
+   allocate( new%my_global_kvals(new%locnz), stat=rcode(5) ) 
+   allocate( new%my_global_ivals(new%locnx), stat=rcode(6) ) 
+   if( any( rcode /= 0 ) ) Stop 'Allocation failed: EqualDataDecompositions'   
+     
+   new%SlabDims = old%SlabDims
+   new%ColDims = old%ColDims
+   new%SlabVals = old%SlabVals
+   new%ColVals = old%ColVals  
+   new%my_global_kvals = old%my_global_kvals
+   new%my_global_ivals = old%my_global_ivals
+ end subroutine EqualDataDecompositions
+ 
+ subroutine NewDataDecomposition(label,grid,level,DerivTypes,DataMap)
+  use class_TensorProductGrid
+  implicit none
+   
+  type( DataDecomposition ),intent(inout)      :: DataMap
+  type( TensorProductGrid ),intent(in)         :: grid
+  character (len=80 )                          :: DerivTypes(6)
+  character (len=80 ),intent(in)               :: label
+  integer                                      :: level
+  integer                                      :: numnodes
+  integer                                      :: i,k0,rem
+  integer                                      :: myid,ierr,rcode(6)=0
+  include 'mpif.h'
+  
+  call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)     
+  call mpi_comm_size (MPI_COMM_WORLD,numnodes,ierr) 
+  
+  rem = mod(DataMap%nx,numnodes)
+  if( rem /= 0 .and. rem /= 1 ) then
+   if(myid==0) &
+   write(0,*) ' nx should be evenly divisible by np or have remainder 1'
+   stop
+  endif
+  
+  rem = mod(DataMap%nz,numnodes)
+  if( rem /= 0 .and. rem /= 1 ) then
+   if(myid==0) &
+   write(0,*) ' nz should be evenly divisible by np or have remainder 1'
+   stop
+  endif
+  
+  DataMap%level=level
+  DataMap%label=label
+  DataMap%DerivTypes(1:3) = DerivTypes(1:3)
+  DataMap%nx=grid%DataDims(1)
+  DataMap%ny=grid%DataDims(2)
+  DataMap%nz=grid%DataDims(3)
+  DataMap%numprocs=numnodes
+  
+  do i=1,3
+   if( trim( DerivTypes(i) ) == 'cos' ) then
+    DataMap%DerivTypes(i+3)='sin'
+   elseif( trim( DerivTypes(i) ) == 'sin' ) then
+    DataMap%DerivTypes(i+3)='cos'
+   else
+    DataMap%DerivTypes(i+3)=DerivTypes(i)
+   endif
+  enddo
+ 
+  if( .not. associated(DataMap%SlabDims) ) then
+   allocate( DataMap%SlabDims(3,-1:numnodes-1), stat=rcode(1) )
+   allocate( DataMap%SlabVals(3,-1:numnodes-1), stat=rcode(2) )
+   allocate( DataMap%ColDims(3,-1:numnodes-1), stat=rcode(3) )
+   allocate( DataMap%ColVals(3,-1:numnodes-1), stat=rcode(4) )
+   if( any( rcode /= 0 ) ) Stop 'Allocation failed: NewDataDecomposition A'
+  endif
+  
+  i=1    
+   if( DerivTypes(i) == 'fourier' ) then
+    DataMap%SlabVals(i,:) = DataMap%nx
+    DataMap%SlabDims(i,:) = DataMap%nx + 0        !! DON"T accomodate conjugate symmetry
+    DataMap%ColDims(i,:)  = (DataMap%nx)/numnodes !! size counted in real words, but the
+    DataMap%ColVals(i,:)  = (DataMap%nx)/numnodes !! storage is for local part of kx wavenumber space
+   else
+    select case ( mod(DataMap%nx,2) )  
+     case(0)              ! nx is even
+      DataMap%SlabVals(i,:) = DataMap%nx
+      DataMap%SlabDims(i,:) = DataMap%nx
+      DataMap%ColDims(i,:)  = DataMap%nx/numnodes
+      DataMap%ColVals(i,:)  = DataMap%nx/numnodes
+ 
+     case(1)              ! nx is odd
+      DataMap%SlabVals(i,:) = DataMap%nx
+      DataMap%SlabDims(i,:) = DataMap%nx
+      DataMap%ColDims(i,:)  = (DataMap%nx-1)/numnodes
+      DataMap%ColVals(i,:)  = (DataMap%nx-1)/numnodes
+      DataMap%ColDims(i,numnodes-1) = (DataMap%nx-1)/numnodes + 1
+      DataMap%ColVals(i,numnodes-1) = (DataMap%nx-1)/numnodes + 1
+     end select
+   endif
+   
+   i=2    
+   DataMap%SlabVals(i,:) = DataMap%ny
+   DataMap%SlabDims(i,:) = DataMap%ny
+   DataMap%ColDims(i,:)  = DataMap%ny
+   DataMap%ColVals(i,:)  = DataMap%ny
+       
+   i=3
+    select case ( mod(DataMap%nz,2) )  
+     case(0)              ! nz is even
+      DataMap%SlabVals(i,:) = DataMap%nz/numnodes
+      DataMap%SlabDims(i,:) = DataMap%nz/numnodes
+      DataMap%ColDims(i,:) = DataMap%nz
+      DataMap%ColVals(i,:) = DataMap%nz
+     case(1)              ! nz is odd
+      DataMap%SlabVals(i,:) = (DataMap%nz-1)/numnodes
+      DataMap%SlabDims(i,:) = (DataMap%nz-1)/numnodes
+      DataMap%ColDims(i,:)  = DataMap%nz
+      DataMap%ColVals(i,:)  = DataMap%nz
+      DataMap%SlabDims(i,numnodes-1) = (DataMap%nz-1)/numnodes + 1
+      DataMap%SlabVals(i,numnodes-1) = (DataMap%nz-1)/numnodes + 1
+     end select
+     
+   !! determine the global k indices for processor myid
+   !! first, I already know how many planes are allocated to myid
+     DataMap%locnz = DataMap%SlabDims(3,myid)
+     
+   !! next, add up the k locations below myid
+     k0=0
+     do i=0,myid-1  
+      k0=k0+DataMap%SlabDims(3,i)  !! num of k planes assigned to processor i
+     enddo     
+     
+     allocate(DataMap%my_global_kvals( DataMap%locnz ), stat=rcode(1) )
+     if( rcode(1) /= 0  ) Stop 'Allocation failed: NewDataDecomposition B'
+   !!fill the array w/ the k values
+     do i=1,DataMap%locnz
+       DataMap%my_global_kvals(i) = k0+i
+     enddo
+    
+   !! determine the global i indices for processor myid (Column orientation)
+   !! first, I already know how many planes are allocated to myid
+     DataMap%locnx = DataMap%ColDims(1,myid)
+     
+   !! next, add up the i locations left of myid
+     k0=0
+     do i=0,myid-1  
+      k0=k0+DataMap%ColDims(1,i)  !! num of X planes assigned to processor i
+     enddo     
+     
+     allocate(DataMap%my_global_ivals( DataMap%locnx ), stat=rcode(1) )
+     if( rcode(1) /= 0  ) Stop 'Allocation failed: NewDataDecomposition C'
+   !!fill the array w/ the i values
+     do i=1,DataMap%locnx
+       DataMap%my_global_ivals(i) = k0+i
+     enddo
+
+    if(myid==0) write(0,*) '......creating MPI derived data types'
+    call create_MPI_data_types(DataMap)
+    if(myid==0) write(0,*) '....... data types done'
+    
+  end subroutine NewDataDecomposition
+ 
+  subroutine DescribeDecomposition(DataMap,docfile)
+  implicit none
+  
+  type( DataDecomposition )   :: DataMap
+  character(len=80)           :: docfile
+  integer                     :: myid
+  integer                     :: numprocs
+  integer                     :: ierr
+  
+  include 'mpif.h'
+  
+  call mpi_comm_rank(MPI_COMM_WORLD,myid,ierr) 
+  call mpi_comm_size(MPI_COMM_WORLD,numprocs,ierr)  
+  
+  if(myid .ne. 0 ) return
+  open(1,file=docfile,position='append')
+  write(1,*) '============================================================'
+  write(1,*) ' Data Decomposition ',trim(DataMap%label),' for : ',DataMap%numprocs,'   processors'
+  write(1,*) '============================================================'
+
+  write(1,*) ' Grid Level: ',DataMap%level
+  write(1,*) ' Global number of data points in the '
+  write(1,*) ' (x,y,z)<-->(1,2,3)<-->(i,j,k) directions:'
+  write(1,*) '        nx = ',DataMap%nx
+  write(1,*) '        ny = ',DataMap%ny
+  write(1,*) '        nz = ',DataMap%nz
+  write(1,*) ' Derivative types specified for each dimension: '
+  write(1,*) '        in x ', trim(DataMap%DerivTypes(1))
+  write(1,*) '        in y ', trim(DataMap%DerivTypes(2))
+  write(1,*) '        in z ', trim(DataMap%DerivTypes(3))
+  write(1,*) ' In {slab} format, each processor is allocated '
+  write(1,*) ' nx*ny*locnz data values per variable, where'
+  write(1,*) '        nx = ',DataMap%SlabVals(1,0)
+  write(1,*) '        ny = ',DataMap%SlabVals(2,0)
+  write(1,*) '        locnz = ',DataMap%SlabVals(3,0)
+  if(DataMap%SlabVals(3,0) .ne. DataMap%SlabVals(3,DataMap%numprocs-1)) then
+   write(1,*) ' except for processor ',DataMap%numprocs-1
+   write(1,*) ' which is allocated 1 extra plane. '
+   write(1,*) '       locnz = ',DataMap%SlabVals(3,DataMap%numprocs-1)
+  endif
+  write(1,*) '  '
+  write(1,*) ' The local {slab} data arrays should be dimensioned                '
+  write(1,*) '        nx = ',DataMap%SlabDims(1,0)
+  write(1,*) '        ny = ',DataMap%SlabDims(2,0)
+  write(1,*) '        locnz = ',DataMap%SlabDims(3,0)
+  if(DataMap%SlabDims(3,0) .ne. DataMap%SlabDims(3,DataMap%numprocs-1)) then
+   write(1,*) ' except for processor ',DataMap%numprocs-1
+   write(1,*) ' which is allocated 1 extra plane. '
+   write(1,*) '       locnz = ',DataMap%SlabVals(3,DataMap%numprocs-1)
+   write(1,*) '  '
+   write(1,*) ' myid = ',myid
+   write(1,*) '   DataMap%SlabDims(1,myid) =     nx = ',DataMap%SlabDims(1,myid)
+   write(1,*) '   DataMap%SlabDims(2,myid) =     ny = ',DataMap%SlabDims(2,myid)
+   write(1,*) '   DataMap%SlabDims(3,myid) =     locnz = ',DataMap%SlabDims(3,myid)
+   write(1,*) '   DataMap%locnz            =     locnz = ',DataMap%locnz
+   write(1,*) '   DataMap%my_global_kvals  =             ',DataMap%my_global_kvals
+   
+   
+  endif
+  write(1,*) ' '
+  write(1,*) '=========== '
+  write(1,*) ' '
+  write(1,*) ' In {column} format, measured in REAL words,'
+  write(1,*) ' (even though the col arrays are sometimes complex),'
+  write(1,*) ' each processor is allocated locnx*ny*nz '
+  write(1,*) ' REAL data values per variable, where '
+  write(1,*) '        locnx = ',DataMap%ColVals(1,0)
+  write(1,*) '        ny = ',DataMap%ColVals(2,0)
+  write(1,*) '        nz = ',DataMap%ColVals(3,0)
+  if(DataMap%ColVals(1,0) .ne. DataMap%ColVals(1,DataMap%numprocs-1)) then
+   write(1,*) ' except for processor ',DataMap%numprocs-1
+   write(1,*) ' which is allocated 1 extra slot. '
+   write(1,*) '       locnx = ',DataMap%ColVals(1,DataMap%numprocs-1)
+  endif
+  write(1,*) '  '
+  write(1,*) ' The local {Col} data arrays should be dimensioned                '
+  write(1,*) '        locnx = ',DataMap%ColVals(1,0)
+  write(1,*) '        ny = ',DataMap%ColVals(2,0)
+  write(1,*) '        nz = ',DataMap%ColVals(3,0)
+  if(DataMap%ColVals(1,0) .ne. DataMap%ColVals(1,DataMap%numprocs-1)) then
+   write(1,*) ' except for processor ',DataMap%numprocs-1
+   write(1,*) ' which is allocated 1 extra plane. '
+   write(1,*) '       locnx = ',DataMap%ColVals(1,DataMap%numprocs-1)
+   write(1,*) '  '
+   write(1,*) ' myid = ',myid
+   write(1,*) '   DataMap%ColDims(1,myid) =     nx = ',DataMap%ColDims(1,myid)
+   write(1,*) '   DataMap%ColDims(2,myid) =     ny = ',DataMap%ColDims(2,myid)
+   write(1,*) '   DataMap%ColDims(3,myid) =     locnx = ',DataMap%ColDims(3,myid)
+  endif
+   write(1,*) '============================================================'
+  write(1,*) '   '
+  close(1) 
+ end subroutine DescribeDecomposition
+ 
+
+end Module class_DataDecomposition  
Index: /trunk/00FlowSolve_KW/src/class/ClassDerivative.f90
===================================================================
--- /trunk/00FlowSolve_KW/src/class/ClassDerivative.f90	(revision 6)
+++ /trunk/00FlowSolve_KW/src/class/ClassDerivative.f90	(revision 6)
@@ -0,0 +1,812 @@
+Module class_Derivative         !============================================
+  implicit none
+  public  :: NewDerivative
+  public  :: DeleteDerivative
+  public  :: EqualDerivs
+  private :: CreatePlan
+  private :: SetupAndFactor
+  private :: DefineCompactScheme   
+ 
+ !!==========================================================================
+ !! A class containing data and algorithms for differentiating
+ !! a 3d data "cube" in a single specified direction.
+ !!==========================================================================
+ type Derivative                      
+  integer                                :: DimIndex     !! Dimension to be differentiated
+  integer                                :: StorageDim   !! Size of array in differentiation dimension.
+  integer                                :: DataDim      !! Corresponding number of data values.
+  real(kind=8)                           :: h            !! Grid spacing w/ respect to coordinate's parameter.  
+  character (len=80)                     :: MethodLabel  !! Label defining differentiion algorithm.
+  character (len=80)                     :: Order        !! Order of convergence.
+  integer(kind=8)                        :: forward_plan !! FFTW3 plan for forward "MethodLabel" transform.
+  integer(kind=8)                        :: inverse_plan !! FFTW3 plan for inverse "MethodLabel" transform.
+  integer                                :: rank_trans
+  integer                                :: n_trans
+  integer                                :: howmany_rank
+  integer                                :: is_trans
+  integer                                :: is_loop
+  integer                                :: os_trans
+  integer                                :: os_loop
+  integer                                :: n_loop
+  integer                                :: fft_kind
+  integer                                :: sign,myflag  !! keep enough info to regenerate plan  
+  real(kind=8), pointer, dimension(:)    :: kx           !! Wavenumber array used for spectral differentiation.
+  real(kind=8), pointer, dimension(:)    :: kfilter      !! Wavenumber array used for spectral smoothing filter.
+  
+  real(kind=8), pointer, dimension(:,:)  :: A_Diff       !! Compact differentiation matrix, LAPACK format.
+  integer,      pointer, dimension(:)    :: ipiv         !! LU pivot array, LAPACK format.  
+  real(kind=8)                           :: a1,b1,c1     !! compact scheme coefficients
+  
+  real(kind=8), pointer, dimension(:,:)  :: A_Filt       !! Compact filtering matrix, LAPACK format.
+  integer,      pointer, dimension(:)    :: jpiv         !! LU pivot array, LAPACK format.  
+  real(kind=8)                           :: alpha,beta   !! compact filter scheme coefficients
+  real(kind=8)                           :: a,b,c,d      !! compact filter scheme coefficients  
+ end type Derivative
+ !!==========================================================================
+ !!==========================================================================
+ 
+ 
+ !!==========================================================================
+ interface assignment (=)
+  module procedure EqualDerivs
+ end interface
+ !!==========================================================================
+ 
+Contains           
+
+ subroutine DeleteDerivative(Deriv)
+  implicit none
+  type( Derivative ),intent(inout)  :: Deriv
+  if( associated(Deriv%kx) ) deallocate(Deriv%kx)
+  if( associated(Deriv%kfilter) ) deallocate(Deriv%kfilter)
+  if( associated(Deriv%A_Diff) ) deallocate(Deriv%A_Diff)
+  if( associated(Deriv%ipiv) ) deallocate(Deriv%ipiv)
+  if( associated(Deriv%A_Filt) ) deallocate(Deriv%A_Filt)
+  if( associated(Deriv%jpiv) ) deallocate(Deriv%jpiv)
+ end subroutine DeleteDerivative
+ 
+ subroutine EqualDerivs(new,old)
+ implicit none
+  type( Derivative ), intent(inout) :: new
+  type( Derivative ), intent(in)    :: old  
+  integer                           :: n
+  
+  call DeleteDerivative(new)
+   
+  n=old%DataDim
+  new%DimIndex = old%DimIndex
+  new%StorageDim = old%StorageDim
+  new%DataDim = old%DataDim
+  new%h = old%h
+  new%MethodLabel = old%MethodLabel
+  new%Order = old%Order
+  new%forward_plan = old%forward_plan
+  new%inverse_plan = old%inverse_plan
+  new%rank_trans = old%rank_trans
+  new%n_trans = old%n_trans
+  new%is_trans = old%is_trans
+  new%os_trans = old%os_trans
+  new%howmany_rank = old%howmany_rank
+  new%n_loop = old%n_loop
+  new%is_loop = old%is_loop
+  new%os_loop = old%os_loop
+  new%fft_kind = old%fft_kind
+  new%sign = old%sign
+  new%myflag = old%myflag
+  new%a1 = old%a1
+  new%b1 = old%b1
+  new%c1 = old%c1
+  new%a = old%a
+  new%b = old%b
+  new%c = old%c
+  new%d = old%d
+
+  if(old%MethodLabel=='fourier') then     !! Set Fourier wavenumber array, complex-->complex storage format.
+   allocate( new%kx(n) )
+   allocate( new%kfilter(n) )
+   new%kx=old%kx
+   new%kfilter=old%kfilter
+  elseif(old%MethodLabel=='cos' .or. old%MethodLabel=='sin' ) then   !! sin/cos real-->real format
+   allocate( new%kx(n) )
+   allocate( new%kfilter(n) )
+   new%kx=old%kx
+   new%kfilter=old%kfilter
+  elseif( old%MethodLabel=='compact' ) then
+   allocate( new%A_diff(7,n), new%ipiv(n) ) 
+   allocate( new%A_filt(7,n), new%jpiv(n) )
+   new%A_Diff = old%A_Diff
+   new%ipiv = old%ipiv
+   new%A_Filt = old%A_Filt
+   new%jpiv = old%jpiv
+  endif 
+ end subroutine EqualDerivs
+
+
+ subroutine NewDerivative(DimIndex,DataMap,Grid,Deriv,second_deriv)
+  use class_DataDecomposition
+  use class_TensorProductGrid
+  implicit none
+   
+  type( Derivative ),intent(inout)      :: Deriv
+  type( TensorProductGrid ),intent(in)  :: Grid
+  type( DataDecomposition ),intent(in)  :: DataMap
+  
+   
+  character (len=80 )        :: MethodLabel,InvLabel,MapLabel
+  character (len=80 )        :: docfile
+  integer                    :: StorageDims(3),DataDims(3)
+  integer                    :: DimIndex,i,j,k,Sign,n,nb2
+  integer                    :: myid,numprocs,ierr
+  real(kind=8)               :: dk,pi,kstar,kmax,taper
+  logical                    :: second_deriv
+  include 'mpif.h'
+  
+  pi=4.d0*atan(1.d0)
+  docfile='classlog'
+  call mpi_comm_rank(MPI_COMM_WORLD,myid,ierr)      
+  call mpi_comm_size(MPI_COMM_WORLD,numprocs,ierr)
+  
+  if( associated( Deriv%kx ) .or.       &
+      associated( Deriv%A_Diff ) .or.   &
+      associated( Deriv%ipiv ) )        &   
+      call DeleteDerivative( Deriv )  
+   
+  Deriv%DimIndex = DimIndex
+  Deriv%h = Grid%SpaceDims(DimIndex)%ds
+  
+  !!==========================================
+  !! Parse the requested deriv method label
+  !! for a given variable, this depends on
+  !! whether 1 first or second deriv object
+  !! is being constructed.
+  !!===========================================
+  if( .NOT. second_deriv ) then
+   Deriv%MethodLabel = DataMap%DerivTypes(DimIndex)
+  elseif( second_deriv ) then
+   Deriv%MethodLabel = DataMap%DerivTypes(DimIndex+3)
+  endif
+  MethodLabel=deriv%MethodLabel
+  
+  
+  !!===================================================
+  !! Storage and Data dimensions as local variables, 
+  !! all 3 dimensions. Needed to pass to create_plans.
+  !!===================================================
+  do i=1,3
+   if(DimIndex==3) then   
+    StorageDims(i)= DataMap%ColDims(i,myid)
+    DataDims(i)   = DataMap%ColVals(i,myid)
+   else
+    StorageDims(i)= DataMap%SlabDims(i,myid)
+    DataDims(i)   = DataMap%SlabVals(i,myid)
+   endif
+  enddo
+  
+  !!===================================================
+  !! Derivative object only retains info about 
+  !! the differentiation dimension.
+  !!===================================================
+  if(DimIndex==3) then
+   Deriv%StorageDim = DataMap%ColDims(DimIndex,myid)
+   Deriv%DataDim =    DataMap%ColVals(DimIndex,myid)
+  else
+   Deriv%StorageDim = DataMap%SlabDims(DimIndex,myid)
+   Deriv%DataDim =    DataMap%SlabVals(DimIndex,myid)
+  endif
+  n=deriv%DataDim
+  nb2=n/2
+  
+  !!=======================================
+  !! Forward and Inverse transform labels.
+  !!=======================================
+  if( MethodLabel=='fourier' )  then
+          InvLabel='fourier'
+  elseif( MethodLabel=='cheby') then
+          InvLabel='cheby'
+  elseif( MethodLabel=='cos' )  then
+          InvLabel='sin'
+  elseif( MethodLabel=='sin' )  then
+          InvLabel='cos'
+  endif
+  
+  !!=======================================
+  !! convergence character
+  !!=======================================
+  if(    MethodLabel=='fourier' .or.        &
+         MethodLabel=='sin'     .or.        &
+         MethodLabel=='cos'     .or.        &
+         MethodLabel=='cheby'    ) Deriv%Order='exponential'
+  if(    MethodLabel=='compact'  ) Deriv%Order='SixthCompact'
+    
+        
+    Sign=1 
+    !!======================================================================
+    !! For sin, the for/inv data/storage arrays passed to fftw are 
+    !! slightly smaller (end zeros not needed).
+    !! Adjust the sizes in the transform direction, make the plan, 
+    !! then adjust back to original size.
+    !!======================================================================
+    if( trim(MethodLabel)=='sin' ) then
+      DataDims(DimIndex) = DataDims(DimIndex) - 2   
+      StorageDims(DimIndex) = StorageDims(DimIndex) - 2
+      
+      call CreatePlan(DataDims,StorageDims,Sign,DimIndex,  &
+                      MethodLabel,deriv%forward_plan,deriv,docfile)
+       
+      StorageDims(DimIndex) = StorageDims(DimIndex) + 2
+      DataDims(DimIndex) = DataDims(DimIndex) + 2
+    else
+       call CreatePlan(DataDims,StorageDims,Sign,DimIndex,  &
+                       MethodLabel,deriv%forward_plan,deriv,docfile)
+    endif
+                  
+    Sign=-1 
+    !!======================================================================
+    !! For sin, the for/inv data/storage arrays passed to fftw are 
+    !! slightly smaller (end zeros not needed).
+    !! Adjust the sizes in the transform direction, make the plan, 
+    !! then adjust back to original size.
+    !!======================================================================     
+    if(trim(InvLabel)=='sin') then
+      DataDims(DimIndex) = DataDims(DimIndex) - 2   
+      StorageDims(DimIndex) = StorageDims(DimIndex) - 2
+          call CreatePlan(DataDims,StorageDims,Sign,DimIndex,  &
+                          InvLabel,deriv%inverse_plan,deriv,docfile)
+
+      StorageDims(DimIndex) = StorageDims(DimIndex) + 2
+      DataDims(DimIndex) = DataDims(DimIndex) + 2    
+    else
+          call CreatePlan(DataDims,StorageDims,Sign,DimIndex,  &
+                          InvLabel,deriv%inverse_plan,deriv,docfile)
+    endif
+  
+  if( MethodLabel=='compact' ) then
+  
+   allocate( deriv%A_diff(7,n), deriv%ipiv(n) )
+   allocate( deriv%A_filt(7,n), deriv%jpiv(n) )
+   if(n>=4)then
+    call DefineCompactScheme(deriv%h,n,deriv%A_diff,deriv%ipiv, &
+                             deriv%a1,deriv%b1,deriv%c1)  
+    call DefineCompactFilter(n,deriv%A_filt,deriv%jpiv,deriv%alpha, &
+                             deriv%beta,deriv%a,deriv%b,deriv%c,deriv%d)
+   else
+    write(0,*) 'skipping construction of compact diff matrices, n<4 ',n
+   endif
+   
+  endif
+  
+  if(MethodLabel=='fourier' ) then
+  
+    pi=4.d0*atan(1.)
+    dk = 2.d0*pi   !! assume s in [0,1]  i.e. 2.d0*pi/L w/ L=1    
+    kmax = nb2+1
+    kstar = (8./9.)*kmax
+    allocate( deriv%kx(n) )
+    allocate( deriv%kfilter(n) )
+    
+    do k=1,nb2+1     
+     if(k>=kstar) then
+      taper = 0.5*(1. + cos(pi*(i-kstar)/(kmax-kstar)))
+     else
+      taper=1.d0
+     endif
+     deriv%kx(k)=(k-1.)*dk
+     deriv%kfilter(k) = taper
+    enddo
+     
+    do k=2*nb2,nb2+2,-1
+     deriv%kx(k) = -deriv%kx( n-k+2 )     
+     deriv%kfilter(k) = deriv%kfilter(n-k+2)
+    enddo
+    
+    if(n==1) then
+     deriv%kx(1)=0.d0
+     deriv%kfilter(1)=1.d0
+    endif
+       
+  elseif(MethodLabel=='cos' .or. MethodLabel=='sin') then 
+    
+    allocate( deriv%kx(n) )
+    allocate( deriv%kfilter(n) )
+    dk = pi/1.  !! assume s in [0,1] 
+    kmax = n
+    kstar = (8./9.)*kmax  
+    do i=1,n
+     if(i>=kstar) then
+      taper = 0.5*(1. + cos(pi*(i-kstar)/(kmax-kstar)))
+     else
+      taper=1.d0
+     endif
+     deriv%kx(i)=(i-1.)*dk
+     deriv%kfilter(i) = taper
+    enddo
+    
+    if(n==1) then
+     deriv%kx(1)=0.d0
+     deriv%kfilter(1)=1.d0
+    endif
+        
+  elseif( MethodLabel=='cheby') then
+   !! we use recursion, wavenumber arrays not needed
+  endif 
+ end subroutine NewDerivative
+ 
+! 
+!=========================================================
+ subroutine CreatePlan(DataDims,StorageDims,Sign,  &
+                       Dir,TransType,plan,deriv,docfile)
+ !!=======================================================
+ !!Assumes in and out arrays are reduced in size by 2 
+ !!in the transform direction for sin transforms
+ !!=======================================================
+      implicit none                
+      include 'fftw3.f'
+      include 'mpif.h'
+      
+      type( Derivative )                     :: deriv
+      real(kind=8)    , allocatable          :: in(:,:,:)
+      real(kind=8)    , allocatable          :: out(:,:,:)
+      real(kind=8)    , allocatable          :: testin(:,:,:)
+      real(kind=8)    , allocatable          :: testout(:,:,:)
+      real(kind=8)    , allocatable          :: kx(:)
+      real(kind=8)                           :: tmax(2)
+      integer*8                              :: plan
+      integer                                :: DataDims(3)
+      integer                                :: StorageDims(3)
+      integer                                :: Sign,Dir
+      integer                                :: rank_trans
+      integer                                :: howmany_rank
+      integer                                :: n_trans,n_loop
+      integer                                :: fft_kind,myflag
+      integer                                :: is_trans,is_loop
+      integer                                :: os_trans,os_loop
+      integer                                :: i,nx,ny,nz,n,nb2 
+      integer                                :: myid,numprocs,ierr 
+      character (len=80)                     :: TransType
+      character (len=80)                     :: label,kind_label
+      character (len=80)                     :: reality_in
+      character (len=80)                     :: reality_out
+      character (len=80)                     :: docfile
+      
+      call mpi_comm_rank(MPI_COMM_WORLD,myid,ierr)      
+      call mpi_comm_size(MPI_COMM_WORLD,numprocs,ierr)
+      
+      rank_trans=1      !! Transforms work on 1 dimension at a time.
+      howmany_rank=1    !! Loops over the other 2 dimensions treated as 1d in memory
+      n = DataDims(Dir) !! Data size in transform direction, measured in real words.
+      nb2 = n/2 
+            
+      if(TransType=='fourier') then
+      
+        if(Sign==1) then
+         reality_in='real'
+         reality_out='halfcomplex'
+        elseif(Sign==-1) then
+         reality_in='halfcomplex'
+         reality_out='real'
+        endif
+        call get_kind(reality_in,reality_out,TransType,fft_kind,label) 
+                     
+       if(Dir==1) then  
+     
+            !!describe the transforms  in dim 1
+            n_trans=DataDims(1)      ! length of transforms
+            is_trans=1               ! stride btwn elements in a single transform
+            os_trans=is_trans
+        
+            !!describe the loops over dims 2,3
+            n_loop=DataDims(2)*DataDims(3)   ! 
+            is_loop=DataDims(1)              ! stride betwn transforms
+            os_loop=is_loop
+
+       elseif(Dir==2) then !! must loop over k because stride 
+                           !! is not constant otherwise      
+                        
+            !!describe the transforms in dim 2
+            n_trans=DataDims(2)            !! transform length = ny
+            is_trans=StorageDims(1)        !! stride of 1d transform 
+            os_trans=is_trans
+        
+            !!describe the loop over dim 1
+            n_loop=DataDims(1)             !! loop over i direction only
+            is_loop=1                      !! idim defined by a stride of 1
+            os_loop=is_loop
+                                
+       elseif(Dir==3) then  
+            
+            !!describe the transforms in dim 3
+            n_trans=DataDims(3)              !! length of 1d transforms
+            is_trans= StorageDims(1) *     & !! stride of 1d transform --> 
+                      StorageDims(2)         !! xy plane counted in real words
+            os_trans=is_trans
+         
+            !!describe the loops over dims 1,2
+            n_loop=DataDims(1)*DataDims(2)  ! loop over i,j directions (real)
+            is_loop=1                       ! which is defined by a stride of 1
+            os_loop=os_loop
+            
+       endif
+  
+     elseif(TransType=='cos' .or. TransType=='sin' .or. TransType=='cheby') then    
+      reality_in=  'real'
+      reality_out= 'real'
+      call get_kind(reality_in,reality_out,TransType,fft_kind,label)
+  
+      if(Dir==1) then                               
+          !!describe the transforms  in dim 1
+          n_trans=DataDims(1)            !! length of transform in real words     
+          is_trans=1                     !! stride of 1d transform --> in x
+          os_trans=is_trans
+        
+          !!describe the loops over dims 2,3
+          n_loop=DataDims(2)*DataDims(3)  !! loop over j/k directions 
+          is_loop=StorageDims(1)          !! defined by a stride of StorageDims(1)
+          os_loop=is_loop
+    
+       elseif(Dir==2) then              
+         !!describe the transforms in dim 2, SET UP FOR 1 K PLANE AT A TIME
+         n_trans=DataDims(2)        
+         is_trans=StorageDims(1)    ! stride of 1d transform --> StorageDims(1)
+         os_trans=is_trans
+        
+        !!describe the loop over dim 1
+         n_loop=DataDims(1)         ! loop over i direction (len=DataDims(1))
+         is_loop=1                  !   which is defined by a stride of 1
+         os_loop=is_loop
+                 
+       elseif(Dir==3) then
+         !!describe the transforms
+         n_trans=DataDims(3)            ! length of transforms
+         is_trans=StorageDims(1) *  &
+                  StorageDims(2)        ! stride=size of xy planes, in real words
+         os_trans=is_trans
+         
+         !!describe the loops
+         n_loop=DataDims(1)*DataDims(2)  ! loop over i/j directions
+         is_loop=1                       ! which is defined by a stride of 1
+         os_loop=is_loop
+         
+      endif
+         
+         
+     endif
+     
+     !!================================
+     !! Keep fftw info in deriv object
+     !!================================
+     deriv%rank_trans = rank_trans
+     deriv%n_trans = n_trans
+     deriv%is_trans = is_trans
+     deriv%os_trans = os_trans
+     deriv%howmany_rank = howmany_rank
+     deriv%n_loop = n_loop
+     deriv%is_loop = is_loop
+     deriv%os_loop = os_loop
+     deriv%fft_kind = fft_kind
+     deriv%myflag = myflag
+     
+     kind_label=label
+     label = 'FFTW_EXHAUSTIVE'
+          
+     !! FFTW_PATIENT+FFTW_UNALIGNED  !! in Fortran  p.50 6.2 of manual     
+     myflag = FFTW_EXHAUSTIVE   !! the integer parameter
+      
+          
+  !! Allocate arrays 
+     allocate(  in(StorageDims(1),StorageDims(2),StorageDims(3)) )
+     allocate( out(StorageDims(1),StorageDims(2),StorageDims(3)) )
+     !!allocate(  testin(StorageDims(1),StorageDims(2),StorageDims(3)) )
+     !!allocate( testout(StorageDims(1),StorageDims(2),StorageDims(3)) )
+           
+     call dfftw_plan_guru_r2r(plan,              &
+                              rank_trans,        &
+                              n_trans,           &
+                              is_trans,          &
+                              os_trans,          &
+                              howmany_rank,      &
+                              n_loop,            &
+                              is_loop,           &
+                              os_loop,           &
+                              in,                &
+                              out,               &
+                              fft_kind,          &
+                              myflag)
+                                                                           
+     deallocate(in)
+     deallocate(out)
+     !!deallocate(testin)
+     !!deallocate(testout)
+       
+          
+     if(myid==0) then
+     open (1,file=docfile,position='append')
+      write(1,*) ' '
+      write(1,*) ' '
+      write(1,*) '=================================================================' 
+      write(1,*) ' Transform for dimension ',Dir,' isign = ',sign,' transform type:   ',TransType
+      write(1,*) '  The following parameters are counts in terms of real words.               '
+      write(1,*) '  The number of data pts in the transform dimension                     n = ',n_trans
+      write(1,*) '  Number of words btwn successive elements in transform direction         = ',is_trans
+      write(1,*) '  Number of words btwn successive 1st elements in loops over transforms   = ',is_loop
+      write(1,*) '  Number of 1d transforms in single call, i.e. product of loop lengths    = ',n_loop
+      write(1,*) '  StorageDims, i.e. array size for in/out                                   ',StorageDims
+      write(1,*) '  DataDims,    i.e. how much of it is filled w/ data                        ',DataDims
+      write(1,*) '  FFTW3 plan quality                                                        ',trim(label)
+      write(1,*) '  FFT_KIND , label                                                          ',fft_kind,trim(kind_label)
+      write(1,*) '  FFTW3 plan                                                                ',plan
+      write(1,*) '  Actual Bounds on in/out arrays used by fftw3 to define plan '
+      write(1,*) '  i dimension-- in    : ',LBOUND(in,1), UBOUND(in,1)
+      write(1,*) '               out    : ',LBOUND(out,1), UBOUND(out,1)
+      write(1,*) '  j dimension-- in    : ',LBOUND(in,2), UBOUND(in,2)
+      write(1,*) '               out    : ',LBOUND(out,2), UBOUND(out,2)
+      write(1,*) '  k dimension-- in    : ',LBOUND(in,3), UBOUND(in,3)
+      write(1,*) '               out    : ',LBOUND(out,3), UBOUND(out,3)
+      write(1,*) '  in,out arrays have KINDs of ',KIND(in),KIND(out)
+      write(1,*) '================================================================='
+      write(1,*) ' '
+      write(1,*) ' ' 
+     close(1)
+     endif
+       
+    end subroutine CreatePlan
+    
+    !======================================================================================
+      subroutine get_kind(in,out,type,fft_kind,label)
+       implicit none                
+       include 'fftw3.f'
+       integer,intent(out)               :: fft_kind
+       character (len=80),intent(out)    :: label
+       character (len=11)                :: in
+       character (len=11)                :: out
+       character (len=11)                :: type
+       
+       
+       if( trim(type)=='fourier' ) then
+        if( in=='real' .and. out=='complex') then
+         fft_kind=FFTW_R2HC
+         label='no flag needed'
+        elseif( in=='complex' .and. out=='real') then
+         fft_kind=FFTW_HC2R
+         label='no flag needed'
+        elseif( in=='real' .and. out=='halfcomplex') then
+         fft_kind=FFTW_R2HC
+         label='FFTW_R2HC'
+        elseif( in=='halfcomplex' .and. out=='real') then
+         fft_kind=FFTW_HC2R
+         label='FFTW_HC2R'
+        elseif( in=='complex' .and. out=='complex') then
+         fft_kind=-999
+         label='no flag needed'
+        else
+         write(0,*) 'problem getting kind of fourier transform',in,out
+         stop
+        endif        
+       endif
+       
+       if( trim(type)=='sin' ) then
+        if( in=='real' .and. out=='real') then
+         fft_kind=FFTW_RODFT00
+         label='FFTW_RODFT00'
+        elseif( in=='complex' .and. out=='complex') then
+         fft_kind=-999
+         label='no label needed'
+        else
+         write(0,*) 'problem getting kind of fourier transform',in,out
+         stop
+        endif        
+       endif
+       
+       if( trim(type)=='cos' .or. trim(type)=='cheby' ) then
+        if( in=='real' .and. out=='real') then
+         fft_kind=FFTW_REDFT00
+         label='FFTW_REDFT00'
+        elseif( in=='complex' .and. out=='complex') then
+         fft_kind=-999
+         label='no label needed'
+        else
+         write(0,*) 'problem getting kind of fourier transform',in,out
+         stop
+        endif        
+       endif         
+      
+      end subroutine get_kind
+      
+    subroutine DefineCompactScheme(dx,nx,A_diff,ipiv,a1,b1,c1)
+    !! Routine to create & factor the various differentiation matrices
+    !! corresponding to the optimized 6th order compact difference 
+    !! operators from Lui & Lele 2001.
+    implicit none
+
+    integer,intent(inout)               :: ipiv(nx)
+    real(kind=8),intent(inout)          :: A_diff(7,nx)
+    real(kind=8)                        :: dx
+    real(kind=8)                        :: alpha_1,beta_1,a1,b1,c1
+    real(kind=8)                        :: alpha
+    integer                             :: nx
+    integer                             :: scheme
+    
+    alpha=0.4975        ! filtering parameter
+    scheme=1
+
+   if(scheme==1) then
+   ! set parameters of the 6th order scheme described in
+   ! the Lui & Lele 2001 conference paper
+    alpha_1 = 0.5381301
+    beta_1  = 0.0666332
+    a1=1.3675777
+    b1=0.8234282
+    c1=0.0185208
+   elseif(scheme==2) then
+   ! spectral like scheme of Lele 1992
+   ! formally 4th order but supposedly superior resolution characteristics
+    alpha_1 = 0.5771439
+    beta_1  = 0.0896406
+    a1=1.3025166
+    b1=0.9935500
+    c1=0.03750245
+  endif
+
+! 1st derivative operator
+  call SetupAndFactor(nx,A_diff,ipiv,alpha_1,beta_1)
+
+end subroutine DefineCompactScheme
+
+subroutine SetupAndFactor(nx,AB,ipiv,alpha_1,beta_1)
+ !! SetupAndFactor uses double precision LAPACK routine DGBTRF.
+  implicit none
+  
+  integer                    :: nx,i,j,ierr,KL,KU
+  integer,intent(inout)      :: ipiv(nx)
+  real(kind=8),intent(inout) :: AB(7,nx)
+  real(kind=8)               :: alpha_1,beta_1
+
+  KL=2
+  KU=2
+  AB=0.
+! 1st 2 rows of banded matrix array AB are reserved for fill in
+! 1st/last k elements for the kth super/sub diagonal are not accessed
+! superdiagonal 2
+   AB(3,3:5)=0.0
+   AB(3,6:nx-1)=beta_1
+   AB(3,nx)=0.0
+! superdiagonal 1
+   AB(4,2)= 2.     !!!! had 0
+   AB(4,3)=1./2.   
+   AB(4,4)=1./3.
+   AB(4,5:nx-2)=alpha_1
+   AB(4,nx-1)=1./3.
+   AB(4,nx)=1./6.   
+! diagonal 
+   AB(5,1:nx)=1.0
+! subdiagonal 1
+  do i=1,nx
+   AB(6,i)=AB(4,nx-i+1)
+  enddo
+! subdiagonal 2
+  do i=1,nx
+   AB(7,i)=AB(3,nx-i+1)
+  enddo
+
+! factor the banded matrix AB using LAPACK routine DGBTRF
+! AB is overwritten with its LU factorization
+
+     call DGBTRF(nx,nx,KL,KU,AB,7,ipiv,ierr)
+
+! check error condition
+  if( ierr .ne. 0 ) then
+    write(0,*) ' factorization error ',ierr, ' size: ',nx
+    write(0,*) alpha_1, beta_1
+    if(ierr > 0 ) then
+     write(0,*) ' EXACT SINGULARITY DETECTED,'  
+     write(0,*) ' CHECK INPUT TO DGBTRF CALL IN SUBROUTINE SetupAndFactor'
+    endif
+    if(ierr < 0 ) then
+     write(0,*) ierr ,'th input argument to DGBTRF'
+     write(0,*) ' in subroutine SetupAndFactor illegal'
+    endif
+    STOP
+  endif
+
+end subroutine SetupAndFactor
+
+subroutine DefineCompactFilter(nx,A_filt,jpiv,alpha,beta,a,b,c,d)
+    !! Routine to create & factor the various differentiation matrices
+    !! corresponding to the optimized 6th order compact difference 
+    !! operators from Lui & Lele 2001.
+    implicit none
+
+    integer,intent(inout)               :: jpiv(nx)
+    real(kind=8),intent(inout)          :: A_filt(7,nx)
+    real(kind=8)                        :: alpha,beta,a,b,c,d
+    integer                             :: nx, scheme=3
+    
+   if( scheme==1) then
+   ! set parameters of the scheme described in
+   ! the Lui & Lele JCP paper Fig 20 c
+    alpha = 0.6522474
+    beta  = 0.1702929
+    a=0.9891856
+    b=1.321180
+    c=0.3333548
+    d=.00135985
+   elseif(scheme==2) then
+   ! set parameters of the scheme described in
+   ! the Lui & Lele JCP paper Fig 20 b
+    alpha = 0.4627507
+    beta  = 0.2265509
+    a=0.847063
+    b=1.166845
+    c=0.3422386
+    d=.02245659
+   elseif(scheme==3) then
+   ! set parameters of the scheme described in
+   ! the Lui & Lele JCP paper Fig 20 a
+    alpha = 0.450
+    beta  = (3.-2.*alpha)/10.
+    a=(2.+3.*alpha)/4.
+    b=(6.+7.*alpha)/8.
+    c=(6.+alpha)/20.
+    d=(2.-3.*alpha)/40.
+   endif
+
+  call SetupAndFactorFilter(nx,A_filt,jpiv,alpha,beta)
+end subroutine DefineCompactFilter
+ 
+subroutine SetupAndFactorFilter(nx,AB,jpiv,alpha,beta)
+ !! SetupAndFactorFilter uses double precision LAPACK routine DGBTRF.
+  implicit none
+  
+  integer                    :: nx,i,j,ierr,KL,KU,seven=7
+  integer,intent(inout)      :: jpiv(nx)
+  real(kind=8),intent(inout) :: AB(7,nx)
+  real(kind=8)               :: alpha,beta
+
+  KL=2
+  KU=2
+  AB=0.
+! 1st 2 rows of banded matrix array AB are reserved for fill in
+! 1st/last k elements for the kth super/sub diagonal are not accessed
+! superdiagonal 2
+   AB(3,3:5)=0.0
+   AB(3,6:nx-1)=beta
+   AB(3,nx)=0.0
+! superdiagonal 1
+   AB(4,2:4)= 0.
+   AB(4,5:nx-2)=alpha
+   AB(4,nx-1:nx)=0.
+! diagonal 
+   AB(5,1:nx)=1.0
+! subdiagonal 1
+  do i=1,nx
+   AB(6,i)=AB(4,nx-i+1)
+  enddo
+! subdiagonal 2
+  do i=1,nx
+   AB(7,i)=AB(3,nx-i+1)
+  enddo
+! factor the banded matrix AB using LAPACK routine DGBTRF
+! AB is overwritten with its LU factorization
+
+     call DGBTRF(nx,nx,KL,KU,AB,seven,jpiv,ierr)
+
+! check error condition
+  if( ierr .ne. 0 ) then
+    write(0,*) ' factorization error ',ierr, ' size: ',nx
+    if(ierr > 0 ) then
+     write(0,*) ' EXACT SINGULARITY DETECTED,'  
+     write(0,*) ' CHECK INPUT TO DGBTRF CALL IN SUBROUTINE SetupAndFactorFilter'
+    endif
+    if(ierr < 0 ) then
+     write(0,*) ierr ,'th input argument to DGBTRF'
+     write(0,*) ' in subroutine SetupAndFactor illegal'
+    endif
+    STOP
+  endif
+
+end subroutine SetupAndFactorFilter
+end Module class_Derivative   !============================================
+
+
+
+
+
Index: /trunk/00FlowSolve_KW/src/class/ClassSAOperator.f90
===================================================================
--- /trunk/00FlowSolve_KW/src/class/ClassSAOperator.f90	(revision 6)
+++ /trunk/00FlowSolve_KW/src/class/ClassSAOperator.f90	(revision 6)
@@ -0,0 +1,251 @@
+Module class_SAOperator  !! Self-Adjoint Operator
+use class_TensorProductGrid
+use class_DataDecomposition
+use class_BoundaryOperator
+use class_Derivative
+use class_ScalarVariable
+
+!! L[f] = {d/dx( A(x,y,z) df/dx ) + d/dy( B(x,y,z) df/dy ) +  d/dz( C(x,y,z) df/dz )}
+!!        in interior
+!! B[f] = g on boundaries
+implicit none
+public   ::    NewSAOperator      !! constructor
+public   ::    DeleteSAOperator   !! destructor
+public   ::    ApplySAOperator
+public   ::    SAGetSizes
+
+type SAOperator 
+  type( BoundaryOperator  )   :: BdryOps(3,2)
+  integer                     :: level    !! 0 is finest level
+  integer                     :: nlevels  
+  integer                     :: nrows    !! global number of grdpoints/rows/eqns
+  type( TensorProductGrid )   :: Grid
+  type( DataDecomposition )   :: DataMap         !! decomposition map
+  character (len=80)          :: DerivTypes(6)   !! labels defining differentiation methods
+  type( Derivative )          :: Derivs(6)       !! initialized derivatives for each dim
+end type SAOperator
+
+
+Contains            
+
+ subroutine NewSAOperator(f,BdryOps,L,mglevels)
+  use class_ScalarVariable
+  use class_BoundaryOperator
+  use class_TensorProductGrid
+  use class_Derivative
+  use class_DataDecomposition
+  
+  implicit none
+  type( ScalarVariable ),intent(in)      :: f
+  type( TensorProductGrid )              :: Grid
+  type( BoundaryOperator  ),intent(in)   :: BdryOps(3,2)
+  type( SAOperator ),intent(inout)       :: L
+  
+  integer                                :: n1,n2,n3
+  integer                                :: i,j,k
+  integer                                :: mglevels
+  integer                                :: myid,ierr
+  
+  include 'mpif.h'
+  call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr) 
+  
+  
+  n1 = f%DataMap%SlabDims(1,myid)
+  n2 = f%DataMap%SlabDims(2,myid)
+  n3 = f%DataMap%SlabDims(3,myid)
+    
+  L%level = f%DataMap%level
+  L%nlevels = mglevels
+  L%nrows = n1*n2*n3       !! ====> save myid's allocated rows
+  do i=1,3
+   do j=1,2
+    L%BdryOps(i,j) = BdryOps(i,j)
+   enddo
+  enddo
+  L%DataMap = f%DataMap
+  L%DerivTypes =  f%DerivTypes
+  L%Derivs =  f%Derivs
+  L%Grid =  f%Grid
+  
+ end subroutine NewSAOperator
+
+
+subroutine DeleteSAOperator(L)
+  use class_BoundaryOperator
+  use class_TensorProductGrid
+  use class_Derivative
+  use class_DataDecomposition
+  
+  type( SAOperator ),intent(inout)       :: L
+  integer                                :: i,j
+    
+  do i=1,3
+   do j=1,2
+    call DeleteBoundaryOperator( L%BdryOps(i,j) )
+   enddo
+  enddo
+  
+  call DeleteDataDecomposition(L%DataMap)
+  call DeleteDerivative(L%Derivs(1))
+  call DeleteDerivative(L%Derivs(2))
+  call DeleteDerivative(L%Derivs(3))
+  call DeleteTensorProductGrid(L%Grid)
+    
+ end subroutine DeleteSAOperator
+ 
+ 
+ subroutine SAGetSizes(L,nx_local,ny_local,nz_local,  &
+                         nx_global,ny_global,nz_global) 
+  type( SAOperator ),intent(in)       :: L
+  integer     :: nx_local,ny_local,nz_local
+  integer     :: nx_global,ny_global,nz_global
+  integer     :: myid,ierr
+  
+  include 'mpif.h'
+  call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)
+  
+  nx_local = L%DataMap%SlabDims(1,myid)
+  ny_local = L%DataMap%SlabDims(2,myid) 
+  nz_local = L%DataMap%SlabDims(3,myid) 
+  nx_global= L%Grid%SpaceDims(1)%npts
+  ny_global= L%Grid%SpaceDims(2)%npts
+  nz_global= L%Grid%SpaceDims(3)%npts  
+ end subroutine SAGetSizes
+  
+  
+ subroutine ApplySAOperator(L,f,L_of_f,temp1,temp2,c1,c2,c3,grad)
+  use class_ScalarVariable
+  
+  implicit none
+  type( SAOperator )                   :: L
+  type( ScalarVariable )               :: f,L_of_f
+  type( ScalarVariable )               :: temp1,temp2
+  type( ScalarVariable ),optional      :: grad(3)
+  integer                     :: dim,ierr,i,j,k
+  real(kind=8)                :: c1,c2,c3
+  integer,SAVE                :: myid,numprocs,nx,ny,locnz
+  logical                     :: forward,inverse
+  logical,SAVE                :: first_entry=.TRUE.  
+  include 'mpif.h'
+  
+  !!=====================================================
+  if( first_entry ) then
+   call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)
+   call mpi_comm_size (MPI_COMM_WORLD,numprocs,ierr)
+   nx = L%DataMap%SlabDims(1,myid) 
+   ny = L%DataMap%SlabDims(2,myid) 
+   locnz = L%DataMap%SlabDims(3,myid)
+   first_entry=.FALSE.
+  endif
+  !!=====================================================
+  
+  !!=====================================================
+  !! If the input is given as expansion coefficients, 
+  !! do an inverse transform3d of f to get grdpt values.
+  !! Always begin the differentiations from physical
+  !! space. Scale and add helmholtz term as necessary.
+  !! Return gridpoint values of L[f].
+  !!=====================================================
+  if( f%wavenumber_values .and. .NOT. f%gridpoint_values ) then
+   forward=.FALSE.
+   inverse=.TRUE.
+   call Transform3D(f,f,temp1,temp2,forward,inverse)
+   !! now reset flags before differentiating
+   f%gridpoint_values=.TRUE.
+   f%wavenumber_values=.FALSE.
+   f%forward_transform_only=.FALSE.
+   f%inverse_transform_only=.FALSE.
+  endif
+      
+    
+  !!==============================================
+  !! keep separate copies of boundary values
+  !! this step requires that f be in phys. space
+  !!==============================================
+  f%DirichletWest=f%SlabVals(1,:,:)
+  f%DirichletEast=f%SlabVals(nx,:,:)
+  if(ny>1) f%DirichletFront=f%SlabVals(:,1,:)
+  if(ny>1) f%DirichletBack=f%SlabVals(:,ny,:)
+  if(myid==numprocs-1) f%DirichletTop=f%SlabVals(:,:,locnz)
+  if(myid==0) f%DirichletBottom=f%SlabVals(:,:,1)
+  
+  !!===============================================================
+  !! Set the flags & derivative types for the 2nd derivatives of f
+  !!===============================================================
+  temp1%Derivs(1)=f%Derivs(4)              ! method for d/dx (df/dx)
+  !temp1%DerivTypes(1)=f%DerivTypes(4)      ! type for d/dx (df/dx)
+  
+  temp1%Derivs(2)=f%Derivs(5)              ! method for d/dy (df/dy)
+  !temp1%DerivTypes(2)=f%DerivTypes(5)      ! type for d/dy (df/dy)
+  
+  temp1%Derivs(3)=f%Derivs(6)              ! method for d/dz (df/dz)
+  !temp1%DerivTypes(3)=f%DerivTypes(6)      ! type for d/dz (df/dz)
+    
+  temp1%gridpoint_values=.TRUE.
+  temp1%wavenumber_values=.FALSE.
+  temp1%forward_transform_only=.FALSE.
+  temp1%inverse_transform_only=.FALSE.
+    
+  !!=======================================================
+  !! Now take first derivs of f wrt x,y,z storing results
+  !! in tmp1. Then take second derivs of temp1 wrt x,y,z,
+  !! accumulating the results in L_of_f.
+  !!=======================================================
+  dim=1
+  !!=======================================================
+  call Differentiate(f,dim,temp1)
+   f%NeumannWest=temp1%SlabVals(1,:,:)
+   f%NeumannEast=temp1%SlabVals(nx,:,:)
+  call Differentiate(temp1,dim,L_of_f)
+  if( present(grad) ) call CopySlabData_a2b(temp1,grad(1)) 
+  
+  
+  !!=======================================================
+  dim=2
+  !!=======================================================
+  if(ny>1) then
+   call Differentiate(f,dim,temp1) 
+    f%NeumannFront=temp1%SlabVals(:,1,:)
+    f%NeumannBack =temp1%SlabVals(:,ny,:)
+   call Differentiate(temp1,dim,temp2) 
+   L_of_f%SlabVals = L_of_f%SlabVals + temp2%SlabVals
+   if( present(grad) ) call CopySlabData_a2b(temp1,grad(2))
+  else
+   if( present(grad) ) grad(2)%SlabVals=0.d0
+  endif
+    
+  !!=======================================================
+  dim=3
+  !!=======================================================
+  call Differentiate(f,dim,temp1)
+   if(myid==numprocs-1) f%NeumannTop=temp1%SlabVals(:,:,locnz)
+   if(myid==0)          f%NeumannBottom=temp1%SlabVals(:,:,1)   
+  call Differentiate(temp1,dim,temp2)  
+  L_of_f%SlabVals = L_of_f%SlabVals + temp2%SlabVals
+  if( present(grad) ) call CopySlabData_a2b(temp1,grad(3))
+  
+    
+  !!=================================================================
+  !! At this point, we have (f_xx + f_yy + f_zz)
+  !! stored in L_of_f  (s<->x transformations completed).
+  !! The actual operator L_of_f, however is defined as
+  !!
+  !!      L_of_f = c3*c1*(f_xx + f_yy + f_zz) + c3*c2*f
+  !!
+  !!=================================================================
+  if( c3*c1 .ne. 1.d0 ) then
+   L_of_f%SlabVals = (c3*c1) * L_of_f%SlabVals
+  endif
+  if( c3*c2 .ne. 0.d0 ) then
+   L_of_f%SlabVals = L_of_f%SlabVals + c3*c2*f%SlabVals
+  endif
+  !!=================================================================
+  !! Return the result as gridpoint values in L_of_f.
+  !!=================================================================
+    
+  return      
+ end subroutine ApplySAOperator
+
+   
+ 
+end Module class_SAOperator
Index: /trunk/00FlowSolve_KW/src/class/ClassScalarVariable.f90
===================================================================
--- /trunk/00FlowSolve_KW/src/class/ClassScalarVariable.f90	(revision 6)
+++ /trunk/00FlowSolve_KW/src/class/ClassScalarVariable.f90	(revision 6)
@@ -0,0 +1,3234 @@
+Module class_ScalarVariable         !============================================
+use class_TensorProductGrid
+use class_Derivative
+use class_DataDecomposition
+  
+implicit none
+public   ::    NewScalar             !! constructor, only allocates array for Slab
+public   ::    DeleteScalarVariable  !! destructor
+public   ::    NewVector             !! merge 3 scalars into a ScalarVariable array
+public   ::    DeleteVector          !! destructor
+public   ::    Norm2                 !! rms
+public   ::    NormInf               !! inf norm
+public   ::    Differentiate         !! differentiate ScalarVariable
+public   ::    Gradient              !! gradient of ScalarVariable
+public   ::    Divergence            !! divergence of vector { ScalarVariable(3) }
+public   ::    Curl                  !! curl of vector { ScalarVariable(3) }
+public   ::    Laplacian             !! gradient of ScalarVariable
+public   ::    Transform3D           !! do trigonometric transforms w/ derivs
+
+public   ::    AddSlabs              !! c = a + b 
+public   ::    SubtractSlabs         !! c = a - b 
+public   ::    MultSlabs             !! c = a * b
+public   ::    MultSlabsByConstR     !! c = a * b,  b=scalar constant
+public   ::    MultSlabsByConstL     !! c = a * b,  a=scalar constant
+public   ::    SlabDotProduct        !! dp = [a,b,c] . [d,e,f]   (Slab arrays)
+public   ::    ScalarDotProduct      !! dp = [a,b,c] . [d,e,f]   (ScalarVariables)
+public   ::    MyAxpy                !! y <-- alpha*x + y w/ ScalarVariable inputs
+public   ::    MyScal                !! x <-- alpha*x     w/ ScalarVariable inputs
+public   ::    AddRConst              !! S.V. = S.V. + scalar_constant (real,kind=8)
+public   ::    AddIConst              !! S.V. = S.V. + scalar_constant (integer)
+
+private  ::    NewScalarSC           !! allocates arrays for both Slabs and Cols
+private  ::    ApplyDerivative       !! low level utility routine
+public   ::    CopySlabData_a2b      !! low level copy using blas
+public   ::    AllocateCol           !! allocate array to hold vals in Col storage mode
+public   ::    DeallocateCol         !! deallocate Col storage array
+private  ::    ChebyRecursion        !! recursion to get Cheby coeffs of derivative given coeffs of function
+ 
+type ScalarVariable 
+  character (len=80)          :: Name            !! Descriptive name
+  type( TensorProductGrid )   :: Grid            !! Grid over which scalar is defined
+  type( DataDecomposition )   :: DataMap         !! decomposition map
+  character (len=80)          :: DerivTypes(6)   !! labels defining differentiation methods
+  type( Derivative )          :: Derivs(6)       !! initialized derivatives for each dim
+  real(kind=8),pointer        :: SlabVals(:,:,:) !! data values for scalar in "slab" storage
+  real(kind=8),pointer        :: ColVals(:,:,:)  !! data values for scalar in "col" storage
+  real(kind=8),pointer        :: Ghost_x(:,:,:)  !! ny*nz*2 for left/right planes of ghost values 
+  real(kind=8),pointer        :: Ghost_y(:,:,:)  !! etc
+  real(kind=8),pointer        :: Ghost_z(:,:,:)  !!
+  real(kind=8),pointer        :: DirichletEast(:,:)  !! array of data values
+  real(kind=8),pointer        :: DirichletWest(:,:)
+  real(kind=8),pointer        :: DirichletFront(:,:)
+  real(kind=8),pointer        :: DirichletBack(:,:)
+  real(kind=8),pointer        :: DirichletTop(:,:)
+  real(kind=8),pointer        :: DirichletBottom(:,:)
+  real(kind=8),pointer        :: NeumannEast(:,:)  !! array of deriv values
+  real(kind=8),pointer        :: NeumannWest(:,:)
+  real(kind=8),pointer        :: NeumannFront(:,:)
+  real(kind=8),pointer        :: NeumannBack(:,:)
+  real(kind=8),pointer        :: NeumannTop(:,:)
+  real(kind=8),pointer        :: NeumannBottom(:,:)
+  
+  real(kind=8)                :: ScaleFactor             !! scale used to nondimensionalize scalar
+  logical                     :: initialized             !! to tell whether data arrays are allocated
+  logical                     :: gridpoint_values        !! these can be useful under some circumstances
+  logical                     :: wavenumber_values       !! to control behavior of "differentiate" method
+  logical                     :: forward_transform_only  !!  ""
+  logical                     :: inverse_transform_only  !!  ""
+end type ScalarVariable
+
+
+!! overload assignment operator =
+interface assignment (=)
+ module procedure EqualScalars
+end interface
+
+interface operator(+)
+ module procedure AddSlabs
+end interface
+
+interface operator(-)
+ module procedure SubtractSlabs
+end interface
+
+interface operator(*)
+ module procedure MultSlabs, MultSlabsByConstR, MultSlabsByConstL
+end interface
+
+interface operator(/)
+ module procedure DivideSlabs
+end interface
+
+Contains    
+ !!======================================
+ !
+ ! ASSIGNMENT OPERATOR: new = old
+ !
+ !!======================================
+ subroutine EqualScalars(new,old)
+  use etc
+  implicit none
+  type( ScalarVariable ),intent(in)    :: old
+  type( ScalarVariable ),intent(out)   :: new
+  integer                              :: npts(3)
+  integer                              :: myid
+  include 'mpif.h'
+  
+  call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)     
+      
+  if( new%initialized ) then 
+   new%SlabVals=old%SlabVals     
+  else 
+   npts(1)  = old%DataMap%SlabDims(1,myid)
+   npts(2)  = old%DataMap%SlabDims(2,myid)
+   npts(3)  = old%DataMap%SlabDims(3,myid)
+   allocate( new%SlabVals(npts(1),npts(2),npts(3)), stat=ierr )
+   if( ierr /= 0  ) Stop 'Allocation failed: EqualScalars'
+   if(myid==0) then
+    NewAllocationGB=npts(1)*npts(2)*npts(3)*8*GBperByte
+    AllocatedMemoryGB = AllocatedMemoryGB + NewAllocationGB
+    open(2,file='output/MemoryLog')
+    write(2,*) '  equal scalars old-->new        ...........',old%name,'--->',new%name
+    write(2,*) '  New allocation (Column storage)  .........',NewAllocationGB
+    write(2,*) '  Total Allocated Memory in GB .............',AllocatedMemoryGB
+    write(2,*) '   '
+    close(2)
+  endif
+   call CopySlabData_a2b(old,new)
+  endif
+  
+  new%Name = old%Name
+  new%Grid = old%Grid 
+  new%DataMap = old%DataMap
+  new%DerivTypes = old%DerivTypes
+  new%ScaleFactor = old%ScaleFactor
+  new%Ghost_x = old%Ghost_x
+  new%Ghost_y = old%Ghost_y
+  new%Ghost_z = old%Ghost_z
+  new%DirichletEast = old%DirichletEast
+  new%DirichletWest = old%DirichletWest
+  new%DirichletFront = old%DirichletFront
+  new%DirichletBack = old%DirichletBack
+  new%DirichletTop = old%DirichletTop
+  new%DirichletBottom = old%DirichletBottom
+  new%NeumannEast = old%NeumannEast
+  new%NeumannWest = old%NeumannWest
+  new%NeumannFront = old%NeumannFront
+  new%NeumannBack = old%NeumannBack
+  new%NeumannTop = old%NeumannTop
+  new%NeumannBottom = old%NeumannBottom
+  new%gridpoint_values = old%gridpoint_values
+  new%wavenumber_values = old%wavenumber_values
+  new%forward_transform_only=old%forward_transform_only
+  new%inverse_transform_only=old%inverse_transform_only
+  
+  !!Duplicate deriv objects, dont compute new ones
+  do i=1,6 
+   call EqualDerivs(new%Derivs(i),old%Derivs(i))
+  enddo 
+  
+  new%initialized=.TRUE.
+ end subroutine EqualScalars
+
+
+ !!======================================
+ !
+ ! ADDITION OPERATOR: c=a+b
+ !
+ !!======================================
+ function AddSlabs(a,b) result(c)
+ !! c = a+b
+  implicit none
+  type( ScalarVariable),intent(in)     :: a,b
+  type( ScalarVariable)                :: c  
+  if( c%initialized ) then
+   c%SlabVals = a%SlabVals + b%SlabVals
+  else
+   c=a  !! use overloaded assignment
+   c%SlabVals = c%SlabVals + b%SlabVals
+  endif
+ end function AddSlabs
+ 
+ 
+ !!======================================
+ !
+ ! SUBTRACTION OPERATOR: c=a-b
+ !
+ !!======================================
+ function SubtractSlabs(a,b) result(c)
+  !! c = a-b
+  implicit none
+  type( ScalarVariable),intent(in)     :: a,b
+  type( ScalarVariable)                :: c  
+  if( c%initialized ) then
+   c%SlabVals = a%SlabVals - b%SlabVals
+  else
+   c=a  !! use overloaded assignment
+   c%SlabVals = c%SlabVals - b%SlabVals
+  endif
+ end function SubtractSlabs
+  
+  
+ !!======================================
+ !
+ ! ELEMENTWISE MULTIPLICATION OPERATORs: c=a*b
+ !
+ !!======================================
+ function MultSlabs(a,b) result(c)
+  !! c = a*b
+  implicit none
+  type( ScalarVariable),intent(in)     :: a,b
+  type( ScalarVariable)                :: c  
+  if( c%initialized ) then
+   c%SlabVals = a%SlabVals * b%SlabVals
+  else
+   c=a  !! use overloaded assignment
+   c%SlabVals = c%SlabVals * b%SlabVals
+  endif    
+ end function MultSlabs
+
+ function MultSlabsByConstR(a,b) result(c) 
+ !! c = a*b, b=scalar constant
+ implicit none
+  type( ScalarVariable),intent(in)      :: a
+  real(kind=8),intent(in)               :: b
+  type( ScalarVariable)                 :: c  
+  if( c%initialized ) then
+   c%SlabVals = a%SlabVals * b
+  else
+   c=a  !! use overloaded assignment
+   c%SlabVals = c%SlabVals * b
+  endif    
+end function MultSlabsByConstR
+
+function MultSlabsByConstL(a,b) result(c) 
+ !! c = a*b, a=scalar constant
+ implicit none  
+  real(kind=8),intent(in)              :: a
+  type( ScalarVariable),intent(in)     :: b
+  type( ScalarVariable)                :: c  
+  if( c%initialized ) then
+   c%SlabVals = a * b%SlabVals
+  else
+   c=b  !! use overloaded assignment
+   c%SlabVals = c%SlabVals * a
+  endif    
+end function MultSlabsByConstL
+
+
+ !!======================================
+ !
+ ! ELEMENTWISE DIVISION OPERATOR: c=a/b
+ !
+ !!======================================
+ function DivideSlabs(a,b) result(c) 
+ !! c = a/b
+ implicit none
+  type( ScalarVariable),intent(in)     :: a,b
+  type( ScalarVariable)                :: c  
+  if( c%initialized ) then
+   c%SlabVals = a%SlabVals / b%SlabVals
+  else
+   c=a  !! use overloaded assignment
+   c%SlabVals = c%SlabVals / b%SlabVals
+  endif    
+ end function DivideSlabs
+
+
+ !!======================================
+ !
+ ! CONSTRUCTORS
+ !
+ !!======================================
+ subroutine NewScalar(Name,Grid,DataMap,ScaleFactor,var) 
+  use class_TensorProductGrid
+  use class_DataDecomposition
+  use class_Derivative
+  use etc
+  
+  implicit none
+  type( ScalarVariable )                    :: var
+  type( TensorProductGrid )                 :: Grid
+  type( DataDecomposition )                 :: DataMap
+  real(kind=8)                              :: ScaleFactor
+  integer                                   :: npts(3)
+  character (len=80 )                       :: Name
+  integer                                   :: myid,numprocs
+  logical                                   :: second_deriv
+  include 'mpif.h'
+  
+  call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)     
+  call mpi_comm_size (MPI_COMM_WORLD,numprocs,ierr) 
+  
+  if(myid==0) then
+   open(2,file=memoryfile,position='append')
+  endif
+  
+  if( var%initialized ) call DeleteScalarVariable(var) 
+  
+  var%Name = Name
+  var%Grid = Grid 
+  var%DataMap = DataMap
+  var%DerivTypes = DataMap%DerivTypes
+  !var%DerivTypes = var%DataMap%DerivTypes 
+  
+  
+  !!Create the new derivatives objects given details in DataMap
+  !!Second_deriv is a logical arg telling NewDeriv to
+  !!look at DataMap%DerivType(i) or at DataMap%DerivType(i+3)
+  !!to determine what type of derivative object to construct.
+  do i=1,3 
+   second_deriv=.FALSE.
+   call NewDerivative(i,DataMap,Grid,var%Derivs(i),second_deriv)
+   second_deriv=.TRUE.
+   call NewDerivative(i,DataMap,Grid,var%Derivs(i+3),second_deriv)
+  enddo  
+  
+  
+  var%ScaleFactor = ScaleFactor 
+  !!Allocate and zero out an array for slab storage. 
+  npts(1)  = DataMap%SlabDims(1,myid)
+  npts(2)  = DataMap%SlabDims(2,myid)
+  npts(3)  = DataMap%SlabDims(3,myid)
+      
+  allocate( var%SlabVals(npts(1),npts(2),npts(3)), stat=ierr )   !! this is the actual data array
+  if( ierr /= 0 ) Stop 'Allocation failed: NewScalar'
+  var%SlabVals=0.d0 
+  
+  if(myid==0) then
+   NewAllocationGB=npts(1)*npts(2)*npts(3)*8*GBperByte
+   AllocatedMemoryGB = AllocatedMemoryGB + NewAllocationGB
+   write(2,*) '  Variable        ..........................',var%name
+   write(2,*) '  New allocation  ..........................',NewAllocationGB
+   write(2,*) '  Total Allocated Memory in GB .............',AllocatedMemoryGB
+   write(2,*) '   '
+  endif
+     
+  !! Allow for ghost data in periodic directions
+  if( trim(var%DerivTypes(1)) == 'fourier'   &
+     .or. trim(var%DerivTypes(1)) == 'zeroderiv' ) then
+     
+   allocate( var%Ghost_x(npts(2),npts(3),2), stat=ierr )
+   if( ierr /= 0 ) Stop 'Ghost_x allocation failed: NewScalar'
+   var%Ghost_x=0.d0
+   
+   if(myid==0) then
+    NewAllocationGB=2*npts(2)*npts(3)*8*GBperByte
+    AllocatedMemoryGB = AllocatedMemoryGB + NewAllocationGB
+    write(2,*) '  x ghost data    ..........................'
+    write(2,*) '  New allocation  ..........................',NewAllocationGB
+    write(2,*) '  Total Allocated Memory in GB .............',AllocatedMemoryGB
+    write(2,*) '   '
+   endif
+   
+  endif
+  
+  if( trim(var%DerivTypes(2)) == 'fourier'    &
+     .or. trim(var%DerivTypes(1)) == 'zeroderiv' ) then
+   allocate( var%Ghost_y(npts(1),npts(3),2), stat=ierr )
+   if( ierr /= 0 ) Stop 'Ghost_y allocation failed: NewScalar'
+   var%Ghost_y=0.d0
+      
+   if(myid==0) then
+    NewAllocationGB=2*npts(1)*npts(3)*8*GBperByte
+    AllocatedMemoryGB = AllocatedMemoryGB + NewAllocationGB
+    write(2,*) '  y ghost data    ..........................'
+    write(2,*) '  New allocation  ..........................',NewAllocationGB
+    write(2,*) '  Total Allocated Memory in GB .............',AllocatedMemoryGB
+    write(2,*) '   '
+   endif
+
+  endif
+  
+  !! Allow for ghost data in vertical direction
+  allocate( var%Ghost_z(npts(1),npts(2),2), stat=ierr )
+  if( ierr /= 0 ) Stop 'Ghost_z allocation failed: NewScalar'
+  var%Ghost_z=0.d0
+     
+   if(myid==0) then
+    NewAllocationGB=2*npts(2)*npts(1)*8*GBperByte
+    AllocatedMemoryGB = AllocatedMemoryGB + NewAllocationGB
+    write(2,*) '  z ghost data    ..........................'
+    write(2,*) '  New allocation  ..........................',NewAllocationGB
+    write(2,*) '  Total Allocated Memory in GB .............',AllocatedMemoryGB
+    write(2,*) '   '
+   endif
+   
+
+  
+  allocate( var%DirichletEast(npts(2),npts(3)), stat=ierr )   !! this is the actual data array
+  if( ierr /= 0 ) Stop 'DirichletEast allocation failed: NewScalar'
+  var%DirichletEast=0.d0
+  allocate( var%DirichletWest(npts(2),npts(3)), stat=ierr )   !! this is the actual data array
+  if( ierr /= 0 ) Stop 'DirichletWest allocation failed: NewScalar'
+  var%DirichletWest=0.d0
+  allocate( var%DirichletFront(npts(1),npts(3)), stat=ierr )   !! this is the actual data array
+  if( ierr /= 0 ) Stop 'DirichletFront allocation failed: NewScalar'
+  var%DirichletFront=0.d0
+  allocate( var%DirichletBack(npts(1),npts(3)), stat=ierr )   !! this is the actual data array
+  if( ierr /= 0 ) Stop 'DirichletBack allocation failed: NewScalar'
+  var%DirichletBack=0.d0
+  allocate( var%DirichletTop(npts(1),npts(2)), stat=ierr )   !! this is the actual data array
+  if( ierr /= 0 ) Stop 'DirichletTop allocation failed: NewScalar'
+  var%DirichletTop=0.d0
+  allocate( var%DirichletBottom(npts(1),npts(2)), stat=ierr )   !! this is the actual data array
+  if( ierr /= 0 ) Stop 'DirichletBottom allocation failed: NewScalar'
+  var%DirichletBottom=0.d0
+  
+  allocate( var%NeumannEast(npts(2),npts(3)), stat=ierr )   !! this is the actual data array
+  if( ierr /= 0 ) Stop 'NeumannEast allocation failed: NewScalar'
+  var%NeumannEast=0.d0
+  allocate( var%NeumannWest(npts(2),npts(3)), stat=ierr )   !! this is the actual data array
+  if( ierr /= 0 ) Stop 'NeumannWest allocation failed: NewScalar'
+  var%NeumannWest=0.d0
+  allocate( var%NeumannFront(npts(1),npts(3)), stat=ierr )   !! this is the actual data array
+  if( ierr /= 0 ) Stop 'NeumannFront allocation failed: NewScalar'
+  var%NeumannFront=0.d0
+  allocate( var%NeumannBack(npts(1),npts(3)), stat=ierr )   !! this is the actual data array
+  if( ierr /= 0 ) Stop 'NeumannBack allocation failed: NewScalar'
+  var%NeumannBack=0.d0
+  allocate( var%NeumannTop(npts(1),npts(2)), stat=ierr )   !! this is the actual data array
+  if( ierr /= 0 ) Stop 'NeumannTop allocation failed: NewScalar'
+  var%NeumannTop=0.d0
+  allocate( var%NeumannBottom(npts(1),npts(2)), stat=ierr )   !! this is the actual data array
+  if( ierr /= 0 ) Stop 'NeumannBottom allocation failed: NewScalar'
+  var%NeumannBottom=0.d0
+  
+    
+   if(myid==0) then
+    open(1,file=docfile,position='append')
+     write(1,*) ' '
+     write(1,*) 'ScalarVariable ----> ',trim(var%Name),' <---- created. '
+     write(1,*) 'Data storage array has (slab) size             ',(npts(i),i=1,3)
+     write(1,*) 'Derivative types :  ',var%DerivTypes
+     write(1,*) 'Array globally initialized to zero. '
+     write(1,*) ' '
+    close(1)
+   endif
+   
+      
+   if(myid==0) then
+    NewAllocationGB=2*2*(npts(1)*npts(2)+npts(2)*npts(3)+npts(1)*npts(3))*8*GBperByte
+    AllocatedMemoryGB = AllocatedMemoryGB + NewAllocationGB
+    write(2,*) '  Dirichlet & Neumann data    ..............'
+    write(2,*) '  New allocation  ..........................',NewAllocationGB
+    write(2,*) '  Total Allocated Memory in GB .............',AllocatedMemoryGB
+    write(2,*) '   '
+    close(2)
+   endif
+
+  var%gridpoint_values = .TRUE.
+  var%wavenumber_values = .FALSE.
+  var%forward_transform_only = .FALSE.
+  var%inverse_transform_only = .FALSE.
+  var%initialized=.TRUE.
+  
+ end subroutine NewScalar
+ 
+ subroutine NewVector(s1,s2,s3,v)  
+  type( ScalarVariable ),intent(inout)  :: v(3)
+  type( ScalarVariable ),intent(in)     :: s1,s2,s3  
+  call EqualScalars(v(1),s1)            !! v(1) <-- s1
+  call EqualScalars(v(2),s2)            !! v(2) <-- s2
+  call EqualScalars(v(3),s3)            !! v(3) <-- s3
+ end subroutine NewVector
+  
+ subroutine NewScalarSC(Name,Grid,DataMap,ScaleFactor,var) 
+  use class_TensorProductGrid
+  use class_DataDecomposition
+  use class_Derivative
+  use etc
+  
+  implicit none
+  type( ScalarVariable ),intent(inout)      :: var
+  type( TensorProductGrid ),intent(in)      :: Grid
+  type( DataDecomposition ),intent(in)      :: DataMap
+  real(kind=8),intent(in)                   :: ScaleFactor
+  character (len=80 ),intent(in)            :: Name
+  integer                                   :: npts(3)
+  integer                                   :: myid,numprocs
+  include 'mpif.h'
+   
+  call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)      !!  ====> myid
+  call mpi_comm_size (MPI_COMM_WORLD,numprocs,ierr)  !!  ====> numprocs
+  
+  call NewScalar(Name,Grid,DataMap,ScaleFactor,var)
+  
+  !! Now allocate and zero out an additional array for col storage. 
+  npts(:) = DataMap%ColDims(:,myid)
+  
+  allocate( var%ColVals(npts(1),npts(2),npts(3)) )   !! this is the actual data array
+  var%ColVals=0.d0 
+  
+  if(myid==0) then
+   NewAllocationGB=npts(1)*npts(2)*npts(3)*8*GBperByte
+   AllocatedMemoryGB = AllocatedMemoryGB + NewAllocationGB
+   open(2,file='output/MemoryLog')
+   write(2,*) '  Variable        ..........................',Name
+   write(2,*) '  New allocation (Column storage)  .........',NewAllocationGB
+   write(2,*) '  Total Allocated Memory in GB .............',AllocatedMemoryGB
+   write(2,*) '   '
+   close(2)
+  endif
+  
+  var%initialized=.TRUE.
+ end subroutine NewScalarSC
+ 
+ !!======================================
+ !
+ ! DESTRUCTORS
+ !
+ !!======================================
+ subroutine DeleteScalarVariable(var)
+  use etc
+  use class_TensorProductGrid
+  use class_Derivative
+  use class_DataDecomposition  
+  type( ScalarVariable )   :: var
+  integer                              :: nx 
+  integer                              :: ny
+  integer                              :: nz  
+  integer, SAVE                        :: myid,numprocs
+  logical, SAVE                        :: first_entry=.TRUE.
+   
+  include 'mpif.h'
+  if( first_entry ) then
+   call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)      
+   call mpi_comm_size (MPI_COMM_WORLD,numprocs,ierr) 
+   first_entry=.FALSE.
+  endif
+  
+  nx=var%DataMap%SlabDims(1,myid)
+  ny=var%DataMap%SlabDims(2,myid)
+  nz=var%DataMap%SlabDims(3,myid)
+    
+  !!Delete Slab & Col storage arrays
+  if( associated(var%SlabVals) ) deallocate( var%SlabVals )
+  if( associated(var%ColVals) )  deallocate( var%ColVals ) 
+  
+  if(myid==0) then
+    NewAllocationGB = -nx*ny*nz*8*GBperByte
+    AllocatedMemoryGB = AllocatedMemoryGB + NewAllocationGB
+    open(2,file='output/MemoryLog')
+    write(2,*) '  Variable        ..........................',var%name
+    write(2,*) '  New allocation (Column storage)  .........',NewAllocationGB
+    write(2,*) '  Total Allocated Memory in GB .............',AllocatedMemoryGB
+    write(2,*) '   '
+    close(2)
+   endif
+      
+  !!Delete derived type members
+  call DeleteDataDecomposition(var%DataMap)
+     !! --> deletes arrays containing the sizes of the data arrays
+  call DeleteDerivative(var%Derivs(1))
+     !! --> deallocates  {kx} or {A_diff,ipiv} for dim 1, depending on type
+  call DeleteDerivative(var%Derivs(2))
+     !! --> deallocates  {kx} or {A_diff,ipiv} for dim 2, depending on type
+  call DeleteDerivative(var%Derivs(3))
+     !! --> deallocates  {kx} or {A_diff,ipiv} for dim 3, depending on type
+  call DeleteDerivative(var%Derivs(4))
+     !! --> deallocates  {kx} or {A_diff,ipiv} for dim 1, depending on type
+  call DeleteDerivative(var%Derivs(5))
+     !! --> deallocates  {kx} or {A_diff,ipiv} for dim 2, depending on type
+  call DeleteDerivative(var%Derivs(6))
+     !! --> deallocates  {kx} or {A_diff,ipiv} for dim 3, depending on type
+  call DeleteTensorProductGrid(var%Grid) !!!this is the bad one
+  
+ end subroutine DeleteScalarVariable
+ 
+ subroutine DeleteVector(v)
+  implicit none
+  type( ScalarVariable ), intent(inout)   :: v(3)  
+  integer                                 :: i  
+   do i=1,3
+    if( v(i)%initialized ) call DeleteScalarVariable( v(i) )
+   enddo
+ end subroutine DeleteVector
+ 
+ !!======================================
+ !
+ ! UTILITY
+ !
+ !!======================================
+ subroutine AllocateCol(var)
+  use etc
+  implicit none
+  type( ScalarVariable ),intent(inout) :: var
+  integer                              :: nx 
+  integer                              :: ny
+  integer                              :: nz  
+  integer, SAVE                        :: myid,numprocs
+  logical, SAVE                        :: first_entry=.TRUE.
+   
+  include 'mpif.h'
+  if( first_entry ) then
+   call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)      
+   call mpi_comm_size (MPI_COMM_WORLD,numprocs,ierr) 
+   first_entry=.FALSE.
+  endif
+  
+  call DeAllocateCol(var)
+  nx=var%DataMap%ColDims(1,myid)
+  ny=var%DataMap%ColDims(2,myid)
+  nz=var%DataMap%ColDims(3,myid) 
+  allocate(var%ColVals(nx,ny,nz), stat=ierr)
+  if( ierr /= 0  ) Stop 'Allocation failed: AllocateCol'
+  
+  if(myid==0) then
+   NewAllocationGB=nx*ny*nz*8*GBperByte
+   AllocatedMemoryGB = AllocatedMemoryGB + NewAllocationGB
+   open(2,file='output/MemoryLog')
+   write(2,*) '  Variable        ..........................',var%name
+   write(2,*) '  New allocation (Column storage)  .........',NewAllocationGB
+   write(2,*) '  Total Allocated Memory in GB .............',AllocatedMemoryGB
+   write(2,*) '   '
+   close(2)
+  endif
+  
+ end subroutine AllocateCol
+ 
+ subroutine DeAllocateCol(var)
+  use etc
+  implicit none
+  type( ScalarVariable ),intent(inout) :: var
+  integer                              :: nx 
+  integer                              :: ny
+  integer                              :: nz  
+  integer, SAVE                        :: myid,numprocs
+  logical, SAVE                        :: first_entry=.TRUE.
+   
+  include 'mpif.h'
+  if( first_entry ) then
+   call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)      
+   call mpi_comm_size (MPI_COMM_WORLD,numprocs,ierr) 
+   first_entry=.FALSE.
+  endif
+  
+  nx=var%DataMap%ColDims(1,myid)
+  ny=var%DataMap%ColDims(2,myid)
+  nz=var%DataMap%ColDims(3,myid)
+  
+   deallocate( var%ColVals )
+   if(myid==0) then
+    NewAllocationGB = -nx*ny*nz*8*GBperByte
+    AllocatedMemoryGB = AllocatedMemoryGB + NewAllocationGB
+    open(2,file='output/MemoryLog')
+    write(2,*) '  Variable        ..........................',var%name
+    write(2,*) '  New allocation (Column storage)  .........',NewAllocationGB
+    write(2,*) '  Total Allocated Memory in GB .............',AllocatedMemoryGB
+    write(2,*) '   '
+    close(2)
+   endif
+ end subroutine DeAllocateCol
+ 
+ subroutine CopySlabData_a2b(a,b)
+ implicit none
+ type( ScalarVariable ), intent(in)     :: a
+ type( ScalarVariable ), intent(inout)  :: b
+ integer                                :: N
+ integer                                :: ierr,inc=1
+ integer, SAVE                          :: myid
+ logical, SAVE                          :: first_entry=.TRUE.
+    
+  include 'mpif.h'
+  if( first_entry ) then
+   call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)      
+   first_entry=.FALSE.
+  endif
+  
+ N = a%DataMap%SlabDims(1,myid)   &
+   * a%DataMap%SlabDims(2,myid)   &
+   * a%DataMap%SlabDims(3,myid)
+     call DCOPY( N, a%SlabVals, inc, b%SlabVals, inc )  !! b<--a 
+ end subroutine CopySlabData_a2b
+ 
+ subroutine GetLocalArraySize(f,n1,n2,n3)
+ implicit none
+ type( ScalarVariable )     :: f 
+ integer                    :: n1,n2,n3
+!!Get extents of local part of array
+ n1= ubound( f%SlabVals,1 )
+ n2= ubound( f%SlabVals,2 )
+ n3= ubound( f%SlabVals,3 )
+end subroutine GetLocalArraySize
+
+subroutine GetCoordVal(f,idim,i,x)
+ implicit none
+ integer                    :: idim,i,i0
+ real(kind=8)               :: x
+ type( ScalarVariable )     :: f 
+ i0=0
+ if(idim==3) call GetOffset(f,i0) !!Need offset for x3 dimension
+ x = f%Grid%SpaceDims(idim)%x(i0+i)  
+end subroutine GetCoordVal
+
+subroutine GetDimlessCoordVal(f,idim,i,x,L0)
+ implicit none
+ integer                    :: idim,i,i0
+ real(kind=8)               :: x,L0
+ type( ScalarVariable )     :: f 
+ i0=0
+ if(idim==3) call GetOffset(f,i0) !!Need offset for x3 dimension
+ x = ( f%Grid%SpaceDims(idim)%x(i0+i) )/L0 
+end subroutine GetDimlessCoordVal
+
+subroutine GetOffset(f,k0) 
+ implicit none
+ type( ScalarVariable )     :: f
+ integer                    :: k0,ierr 
+ integer, SAVE              :: myid,numprocs
+ logical, SAVE              :: first_entry=.TRUE.
+   
+  include 'mpif.h'
+  if( first_entry ) then
+   call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)      
+   call mpi_comm_size (MPI_COMM_WORLD,numprocs,ierr) 
+   first_entry=.FALSE.
+  endif
+ 
+  select case ( mod(f%DataMap%nz,2) )  
+   case(0)              ! nz is even
+    k0 = myid*(f%DataMap%nz/numprocs) 
+   case(1)              ! nz is odd
+    k0 = myid*((f%DataMap%nz-1)/numprocs) 
+  end select 
+  
+end subroutine GetOffset
+
+ 
+ 
+ 
+ !!======================================
+ !
+ ! OPERATORS
+ !
+ !!======================================
+ 
+ subroutine Norm2(phi,rms)
+  implicit none  
+  integer                   :: n1,n2,n3,i,j,k,ierr
+  integer                   :: nlocal,nglobal,one=1
+  type( ScalarVariable )    :: phi
+  real(kind=8)              :: rms,local_sum,global_sum
+  integer, SAVE             :: myid
+  logical, SAVE             :: first_entry=.TRUE.
+   
+  include 'mpif.h'
+  if( first_entry ) then
+   call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)      
+   first_entry=.FALSE.
+  endif
+  
+  n1=phi%DataMap%SlabDims(1,myid)
+  n2=phi%DataMap%SlabDims(2,myid)
+  n3=phi%DataMap%SlabDims(3,myid)
+  local_sum=0.d0
+  nlocal=n1*n2*n3
+  
+  ! get total number of elements in vector ==> nglobal
+  call mpi_allreduce(nlocal,nglobal,one,MPI_INTEGER,MPI_SUM,MPI_COMM_WORLD,ierr)
+  
+  do k=1,n3
+   do j=1,n2
+    do i=1,n1
+     local_sum = local_sum + phi%SlabVals(i,j,k)**2
+    enddo
+   enddo
+  enddo
+  
+  call mpi_allreduce(local_sum,global_sum,one,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,ierr)
+  rms = sqrt( global_sum/nglobal )
+ end subroutine Norm2
+ 
+  subroutine NormInf(phi,ans)
+  implicit none  
+  integer                   :: ierr
+  integer                   :: one=1
+  type( ScalarVariable )    :: phi
+  real(kind=8)              :: ans,local_max,global_max
+  include 'mpif.h'
+   
+  local_max = MAXVAL( abs(phi%SlabVals) )
+  call mpi_allreduce(local_max,global_max,one,MPI_DOUBLE_PRECISION,MPI_MAX,MPI_COMM_WORLD,ierr)
+  ans = global_max
+  
+ end subroutine NormInf
+
+ 
+ subroutine Differentiate(phi,idim,d_phi,call_id)
+  use class_Derivative
+  implicit none  
+  logical, SAVE                         :: first_entry = .TRUE.
+  integer,intent(in)                    :: idim
+  type( ScalarVariable ),intent(inout)  :: phi
+  type( ScalarVariable ),intent(inout)  :: d_phi
+  real(kind=8),allocatable,SAVE         :: col_array(:,:,:,:)
+  integer,SAVE                          :: n1,n2,n3,myid,ny
+  integer                               :: ierr,k
+  character(len=80),optional            :: call_id
+  character(len=80)                     :: caller
+  include 'mpif.h'
+  
+  !!==================================================
+  !!==================================================
+  !! I'm assuming here w/ SAVE that each processor 
+  !! will only be differentiating
+  !! one array shape repeatedly. If not, 
+  !! return to allocate-deallocate logic.
+  !!==================================================
+  !!==================================================
+  if( first_entry ) then
+   call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)
+   n1=phi%DataMap%ColDims(1,myid)
+   n2=phi%DataMap%ColDims(2,myid)
+   n3=phi%DataMap%ColDims(3,myid)
+   ny=phi%DataMap%SlabDims(2,myid)
+   allocate( col_array(n1,n2,n3,2),stat=ierr )
+   if(ierr .ne. 0)  &
+    stop 'Problem allocating col_array: Differentiate'
+   if( ubound(phi%SlabVals,2) /= n2 )  &
+    stop 'ny problem btwn slabs & cols: Differentiate'
+   first_entry=.FALSE.
+  endif
+  !!==================================================
+  !!==================================================
+  if( .not. present(call_id) ) then
+   caller='unknown'
+  else
+   caller=call_id
+  endif
+  
+  !!==================================================
+  !!  if 2d in y, then ddy=0 
+  !!==================================================
+  if(idim==2 .and. ny==1) then
+   d_phi%SlabVals=0.d0
+   return
+  endif
+  !!==================================================
+  !!==================================================
+  
+  !!==================================================
+  !!  if derivs in some direction defined to be zero ...
+  !!==================================================
+  if( trim( phi%Derivs(idim)%MethodLabel ) == 'zeroderiv') then
+   d_phi%SlabVals=0.d0
+   return
+  endif
+  !!==================================================
+  !!==================================================
+  
+  
+  !!==================================================
+  !!  for z derivs, shuffle data then differentiate
+  !!  and unshuffle....
+  !!==================================================
+  if(idim==3) then
+     call slabs_to_columns(phi,col_array(1,1,1,1),n1,n2,n3)
+     
+     call ApplyDerivativeToArray(phi,  &
+            col_array(1,1,1,1),        &
+            col_array(1,1,1,2),        &
+            phi%Derivs(idim),n1,n2,n3,caller)
+                                  
+     call columns_to_slabs(d_phi,col_array(1,1,1,2),n1,n2,n3)
+     
+  elseif(idim<3) then 
+  !!==================================================
+  !!  no need for data swaps...
+  !!==================================================
+   call ApplyDerivative(phi,d_phi,phi%Derivs(idim),caller) 
+   
+  endif 
+  
+  return
+ end subroutine Differentiate
+
+
+ subroutine Gradient(scalar,grad)
+  implicit none  
+  type( ScalarVariable )                :: scalar
+  type( ScalarVariable ),intent(inout)  :: grad(3) 
+  
+   call Differentiate(scalar,1,grad(1))
+   call Differentiate(scalar,2,grad(2))
+   call Differentiate(scalar,3,grad(3))   
+ end subroutine Gradient 
+ 
+ 
+ 
+ subroutine Transform3D(in,out,tmp1,tmp2,forward,inverse)
+  implicit none  
+  type( ScalarVariable ),intent(inout)  ::  in,out
+  type( ScalarVariable ),intent(inout)  ::  tmp1,tmp2
+  logical                               ::  forward,inverse
+  integer                               ::  i,nx,ny,nz
+  character(len=80)                     ::  name1,name2
+  
+  nx=ubound( in%SlabVals,1 )
+  ny=ubound( in%SlabVals,2 )
+  nz=ubound( in%SlabVals,3 )
+  
+  if( forward .and. .not. inverse ) then
+   in%gridpoint_values = .TRUE.
+   in%wavenumber_values = .FALSE.
+   in%forward_transform_only = .TRUE.
+   in%inverse_transform_only = .FALSE.
+   
+   tmp1%gridpoint_values = .TRUE.
+   tmp1%wavenumber_values = .FALSE.
+   tmp1%forward_transform_only = .TRUE.
+   tmp1%inverse_transform_only = .FALSE.
+   
+   tmp2%gridpoint_values = .TRUE.
+   tmp2%wavenumber_values = .FALSE.
+   tmp2%forward_transform_only = .TRUE.
+   tmp2%inverse_transform_only = .FALSE.
+   
+  elseif( inverse .and. .not. forward ) then
+   in%gridpoint_values = .FALSE.
+   in%wavenumber_values = .TRUE.
+   in%forward_transform_only = .FALSE.
+   in%inverse_transform_only = .TRUE.
+   
+   tmp1%gridpoint_values = .FALSE.
+   tmp1%wavenumber_values = .TRUE.
+   tmp1%forward_transform_only = .FALSE.
+   tmp1%inverse_transform_only = .TRUE.
+   
+   tmp2%gridpoint_values = .FALSE.
+   tmp2%wavenumber_values = .TRUE.
+   tmp2%forward_transform_only = .FALSE.
+   tmp2%inverse_transform_only = .TRUE.
+  else
+   stop 'problem in Transform3D, forward and inverse cant both be true!!'
+  endif
+  
+  
+  name1=tmp1%Name
+  name2=tmp2%Name
+  tmp1%Name=in%Name
+  tmp2%Name=in%Name
+  
+  !! Duplicate deriv objects, dont compute new ones
+  do i=1,3
+   tmp1%Derivs(i)=in%Derivs(i)
+   if(ny>1) tmp2%Derivs(i)=in%Derivs(i)
+  enddo
+  
+  
+  if(forward) then
+   call Differentiate(in,1,tmp1)      !! transform only in x
+   if( ny > 1 ) then
+    call Differentiate(tmp1,2,tmp2)   !! transform only in y
+    call Differentiate(tmp2,3,out)    !! transform only in z
+   elseif( ny==1 ) then
+    call Differentiate(tmp1,3,out)    !! transform only in z
+   endif
+  elseif(inverse) then
+   call Differentiate(in,3,tmp1)      !! transform only in z
+   if( ny > 1 ) then
+    call Differentiate(tmp1,2,tmp2)   !! transform only in y
+    call Differentiate(tmp2,1,out)    !! transform only in x
+   elseif( ny==1 ) then
+    call Differentiate(tmp1,1,out)    !! transform only in x
+   endif
+  endif
+  
+                                     
+  !! cleanup
+  in%forward_transform_only = .FALSE.
+  in%inverse_transform_only = .FALSE.
+  out%forward_transform_only = .FALSE.
+  out%inverse_transform_only = .FALSE.
+  tmp1%forward_transform_only = .FALSE.
+  tmp1%inverse_transform_only = .FALSE.
+  tmp2%forward_transform_only = .FALSE.
+  tmp2%inverse_transform_only = .FALSE.
+  tmp1%Name=name1
+  tmp2%Name=name2
+  
+  if( forward .and. .not. inverse ) then
+   out%gridpoint_values = .FALSE.
+   out%wavenumber_values = .TRUE.
+  elseif( inverse .and. .not. forward ) then
+   out%gridpoint_values = .TRUE.
+   out%wavenumber_values = .FALSE.
+  endif
+   
+ end subroutine Transform3D
+!!====================================================================== 
+!!====================================================================== 
+
+
+
+ 
+!!====================================================================== 
+!!====================================================================== 
+ subroutine Divergence(v,div,temp,components) 
+  use class_Derivative
+  implicit none  
+  integer                                        :: idim(3),ny,i
+  character(len=80)                              :: text_string
+  type( ScalarVariable ),intent(inout)           :: v(3) 
+  type( ScalarVariable ),intent(inout)           :: div
+  type( ScalarVariable )                         :: temp
+  type( ScalarVariable ),optional,intent(inout)  :: components(3)
+  
+  idim(:)=(/1,2,3/)
+  ny = ubound(v(1)%SlabVals,2)
+  text_string='Divergence'    !! id the calling routine
+  
+  if( .not. div%initialized ) then
+   write(0,*) 'the result of a Vector divergence must be'
+   write(0,*) 'a previously existing ScalarVariable'
+   stop
+  endif
+  
+  !!=======================================================
+  !! always start divergence calc from physical space ...
+  !!=======================================================
+  do i=1,3
+   v(i)%gridpoint_values      =.TRUE. 
+   v(i)%wavenumber_values     =.FALSE.
+   v(i)%inverse_transform_only=.FALSE. 
+   v(i)%forward_transform_only=.FALSE. 
+  enddo
+  
+  !!==================================================
+  !! if we are storing the individual derivatives....
+  !!==================================================
+  if( present(components) ) then
+  
+   call Differentiate(v(1),idim(1),components(1),text_string)     !! d/dx   
+   call Differentiate(v(3),idim(3),components(3),text_string)     !! d/dz
+   div%SlabVals = components(1)%SlabVals  &
+                + components(3)%SlabVals  
+                
+   if( ny > 1 ) then
+    call Differentiate(v(2),idim(2),components(2),text_string)    !! d/dy
+    div%SlabVals = div%SlabVals + components(2)%SlabVals 
+   endif
+   
+  else 
+  !!=====================================================
+  !! if we don't need to keep the individual derivatives
+  !!=====================================================
+  
+   call Differentiate(v(1),idim(1),div,text_string)      !! d/dx
+   call Differentiate(v(3),idim(3),temp,text_string)     !! d/dz
+   div%SlabVals = div%SlabVals + temp%SlabVals
+   
+   if( ny > 1 ) then
+    call Differentiate(v(2),idim(2),temp,text_string)    !! d/dy
+    div%SlabVals = div%SlabVals  + temp%SlabVals
+   endif
+      
+  endif
+
+ end subroutine Divergence
+!!====================================================================== 
+!!====================================================================== 
+
+
+
+!!====================================================================== 
+!!====================================================================== 
+ subroutine Laplacian(phi,grad,Lphi,temp)
+ !!Computes and returns both the gradient and the laplacian of phi
+  implicit none 
+  type( ScalarVariable )     :: phi
+  type( ScalarVariable )     :: grad(3) 
+  type( ScalarVariable )     :: Lphi
+  type( ScalarVariable )     :: temp
+  
+  !!===============================================================
+  !! Set the flags & derivative types for the 2nd derivatives of phi
+  !! i.e. assign the correct derivative objects to the vector SV grad
+  !!===============================================================
+  grad(1)%Derivs(1)=phi%Derivs(4)              ! method for d/dx (dphi/dx)  
+  grad(2)%Derivs(2)=phi%Derivs(5)              ! method for d/dy (dphi/dy)  
+  grad(3)%Derivs(3)=phi%Derivs(6)              ! method for d/dz (dphi/dz)
+    
+  call Gradient(phi,grad)
+  call Divergence(grad,Lphi,temp) 
+ end subroutine Laplacian
+!!====================================================================== 
+!!====================================================================== 
+ 
+  
+ subroutine Curl(s,curlv,temp)
+  use class_Derivative
+  implicit none  
+  type( ScalarVariable ),intent(inout) :: s(3)
+  type( ScalarVariable ),intent(inout) :: curlv(3)
+  type( ScalarVariable )               :: temp(2)
+  character( len=80 )                  :: Name
+  character( len=4 )                   :: flag  
+   !! needs to be redone     
+ end subroutine Curl 
+ 
+ subroutine MyAxpy(alpha,x,y) !!  y <== alpha*x + y
+  implicit none
+  type( ScalarVariable ), intent(in)     :: x
+  type( ScalarVariable ), intent(inout)  :: y
+  real(kind=8)                           :: alpha
+  integer                                :: N,n1,n2,n3
+  integer                                :: inc=1
+  call GetLocalArraySize(y,n1,n2,n3)
+  N=n1*n2*n3
+  call daxpy(N, alpha, x%SlabVals, inc, y%SlabVals, inc)
+ end subroutine MyAxpy
+ 
+ subroutine MyScal(alpha,x) !!  x <== alpha*x 
+  implicit none
+  type( ScalarVariable ), intent(inout)  :: x
+  real(kind=8)                           :: alpha
+  integer                                :: N,n1,n2,n3
+  integer                                :: inc=1
+  call GetLocalArraySize(x,n1,n2,n3)
+  N=n1*n2*n3
+  call dscal(N, alpha, x%SlabVals, inc)
+ end subroutine MyScal
+ 
+ subroutine AddRConst(alpha,x) !!  x <== x + alpha
+  implicit none
+  type( ScalarVariable ), intent(inout)  :: x
+  real(kind=8)                           :: alpha
+  x%SlabVals = x%SlabVals + alpha
+ end subroutine AddRConst
+ 
+ subroutine AddIConst(alpha,x) !!  x <== x + alpha
+  implicit none
+  type( ScalarVariable ), intent(inout)  :: x
+  integer                                :: alpha
+  x%SlabVals = x%SlabVals + alpha
+ end subroutine AddIConst
+ 
+ 
+ 
+ 
+subroutine SlabDotProduct(dp,sign,a,b,c,d,e,f,m1,m2,m3)
+ implicit none
+ integer                                         :: sign
+ integer                                         :: m1,m2,m3
+ real(kind=8), dimension(m1,m2,m3), intent(out)  :: dp
+ real(kind=8), dimension(m1,m2,m3), intent(in)   :: a,b,c
+ real(kind=8), dimension(m1,m2,m3), intent(in)   :: d,e,f
+ dp = sign*(a*d + b*e + c*f)
+end subroutine SlabDotProduct
+
+subroutine SlabDotSaxpy(dp,sign,a,b,c,d,e,f)
+ implicit none
+ integer                                      :: sign
+ real(kind=8), dimension(:,:,:), intent(out)  :: dp
+ real(kind=8), dimension(:,:,:), intent(in)   :: a,b,c
+ real(kind=8), dimension(:,:,:), intent(in)   :: d,e,f
+ dp = dp + sign*(a*d + b*e + c*f)
+end subroutine SlabDotSaxpy
+
+subroutine ScalarDotProduct(dp,sign,a,b,c,d,e,f)
+ implicit none
+ integer                 :: sign
+ integer                 :: m1,m2,m3
+ type( ScalarVariable )  :: dp
+ type( ScalarVariable )  :: a,b,c
+ type( ScalarVariable )  :: d,e,f
+ call GetLocalArraySize(dp,m1,m2,m3)
+ call SlabDotProduct( dp%SlabVals,   &
+                             sign,   &      
+                       a%SlabVals,   &
+                       b%SlabVals,   &
+                       c%SlabVals,   &
+                       d%SlabVals,   &
+                       e%SlabVals,   &
+                       f%SlabVals,   &
+                       m1,m2,m3)
+end subroutine ScalarDotProduct
+
+subroutine ScalarDotSaxpy(dp,sign,a,b,c,d,e,f)
+ implicit none
+ integer                             :: sign
+ type( ScalarVariable ), intent(out) :: dp
+ type( ScalarVariable ), intent(in)  :: a,b,c
+ type( ScalarVariable ), intent(in)  :: d,e,f
+ call SlabDotSaxpy(   dp%SlabVals,   &
+                             sign,   &
+                       a%SlabVals,   &
+                       b%SlabVals,   &
+                       c%SlabVals,   &
+                       d%SlabVals,   &
+                       e%SlabVals,   &
+                       f%SlabVals )
+end subroutine ScalarDotSaxpy
+ 
+ subroutine ApplyDerivative(phi,d_phi,deriv,call_id) 
+ !! all derivatives are taken wrt equally spaced parameter s
+ !! each result is then mult by the appropriate 1/dx/ds vector
+  use class_Derivative
+  use class_DataDecomposition
+  
+  implicit none  
+  include 'fftw3.f'
+  
+  character(len=80),optional         :: call_id
+  type(ScalarVariable),intent(in)    :: phi
+  type(ScalarVariable),intent(inout) :: d_phi
+  type(Derivative),intent(in)        :: deriv
+  integer*8                          :: plan
+  integer, dimension(3)              :: SlabDims
+  integer, dimension(3)              :: SlabVals
+  integer, dimension(3)              :: ColDims
+  integer, dimension(3)              :: ColVals
+  integer                            :: idim,ierr
+  integer                            :: n,nb2,nsmall
+  integer                            :: i,j,k,kend
+  complex(kind=8),save               :: cmplxi,xx
+  real(kind=8),allocatable,save      :: temp(:,:,:)
+  real(kind=8),allocatable,save      :: small_x(:,:,:)
+  real(kind=8),allocatable,save      :: small2_x(:,:,:) 
+  real(kind=8),allocatable,save      :: small_y(:,:,:)
+  real(kind=8),allocatable,save      :: small2_y(:,:,:) 
+  real(kind=8),allocatable,save      :: dsdx(:)
+  real(kind=8),allocatable,save      :: dsdy(:)
+  real(kind=8)                       :: NormFactor
+  integer, save                      :: myid,numprocs,nx,ny,nz
+  logical, save                      :: first_entry=.TRUE.
+  
+   
+  include 'mpif.h'
+  if( first_entry ) then
+   call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)      
+   call mpi_comm_size (MPI_COMM_WORLD,numprocs,ierr)
+   cmplxi=cmplx(0.d0,1.d0)
+   nx=phi%DataMap%SlabVals(1,myid)
+   ny=phi%DataMap%SlabVals(2,myid)
+   nz=phi%DataMap%SlabVals(3,myid)
+
+   allocate( dsdx(nx), dsdy(ny) ) 
+   allocate(temp(nx,ny,nz))
+   allocate( small_x(nx-2,ny,nz),small2_x(nx-2,ny,nz) )
+   allocate( small_y(nx,ny-2,nz),small2_y(nx,ny-2,nz) )
+
+   dsdx(:) = 1.d0/phi%Grid%SpaceDims(1)%dxds(:)
+   dsdy(:) = 1.d0/phi%Grid%SpaceDims(2)%dxds(:)
+
+   first_entry=.FALSE.
+  endif 
+      
+  idim=deriv%DimIndex
+  n = deriv%DataDim
+  nb2 = n/2
+
+  
+  if( deriv%MethodLabel=='fourier' ) then
+   
+   NormFactor=1.d0/n
+
+   if(idim==1) then 
+     !!=======================================================
+     !! If we are starting out in physical space, do the
+     !! forward transform in x use fftw3 real to halfcomplex
+     !!=======================================================
+     if( phi%gridpoint_values ) then
+      
+      if( phi%forward_transform_only ) then
+       call dfftw_execute_r2r(deriv%forward_plan,phi%SlabVals,d_phi%SlabVals)
+       return
+      else
+       call dfftw_execute_r2r(deriv%forward_plan,phi%SlabVals,temp )
+      endif
+            
+     endif
+     
+     !!=======================================================
+     !! provided we are not doing the inv transform only,
+     !! do wavenumber multiplication and phase shift
+     !!=======================================================
+     if( .NOT. phi%inverse_transform_only ) then
+      
+      !!================================================
+      !! Multiply by (-) wavenunmbers and normalize
+      !!===========================================
+      if( phi%gridpoint_values ) then  !! transforms done here, data is in temp 
+      
+      !! we do a  "-ik_x" multiply:
+      !! here is the "i":
+      !! phase (location)  shift necessary for real--> 1/2 complex transform
+       do k=1,nz
+        do j=1,ny
+         do i=2,nb2
+          xx = temp(i,j,k)* deriv%kfilter(i)
+          temp(i,j,k) = temp(n-i+2,j,k)* deriv%kfilter(i)
+          temp(n-i+2,j,k)=xx
+         enddo
+        enddo
+       enddo
+       
+       !! here is the "-k_x":
+       do k=1,nz
+        do j=1,ny                        
+         temp(:,j,k) = - deriv%kx(:)*NormFactor    &
+                       * temp(:,j,k)
+        enddo
+       enddo
+       temp(nb2+1,:,:) = 0.d0    !! nyquist
+       
+      elseif(phi%wavenumber_values) then  !! data not in temp
+      !! same procedure but w/ data starting in phi rather than in temp
+      
+      !! we do a  "-ik_x" multiply:
+      !! here is the "i":
+      !! phase (location)  shift necessary for real--> 1/2 complex transform
+       do k=1,nz
+        do j=1,ny
+         do i=2,nb2
+          xx = phi%SlabVals(i,j,k) * deriv%kfilter(i)
+          phi%SlabVals(i,j,k) = phi%SlabVals(n-i+2,j,k) * deriv%kfilter(i)
+          phi%SlabVals(n-i+2,j,k)=xx
+         enddo
+        enddo
+       enddo
+       
+       !! here is the "-k_x":
+       do k=1,nz
+        do j=1,ny                        
+         temp(:,j,k) = deriv%kx(:)*NormFactor    &
+                       * phi%SlabVals(:,j,k)
+        enddo
+       enddo
+       temp(nb2+1,:,:) = 0.d0    !! nyquist
+       
+      endif
+            
+     endif
+     
+     !!==================================================================
+     !! Now do the inverse transform, fftw3 halfcomplex to real
+     !! if inverse_transform only, we need to normalize 
+     !! and return before applying ds/dz
+     !!=======================================================
+     if( .NOT. phi%inverse_transform_only ) then
+      call dfftw_execute_r2r( deriv%inverse_plan,temp,d_phi%SlabVals)
+     elseif(phi%inverse_transform_only ) then
+      call dfftw_execute_r2r( deriv%inverse_plan,phi%SlabVals,d_phi%SlabVals)
+      d_phi%SlabVals=d_phi%SlabVals*NormFactor
+      return
+     endif
+     
+     
+     !!======================================
+     !! deal w/ x<-->s transformation
+     !! dfdx = (df/ds * ds/dx) 
+     !!======================================
+      do k=1,nz
+       do j=1,ny 
+        d_phi%SlabVals(:,j,k) = d_phi%SlabVals(:,j,k) * dsdx
+       enddo
+      enddo
+           
+     return
+   elseif(idim==2) then !! must loop over k because stride is not constant   
+     !!===================================================================
+     !! If we are starting out in physical space, do the
+     !! forward transforms, this time organized as complex to complex dft
+     !! regarding the data along the i dimension as nx/2 complex elements
+     !!===================================================================
+     
+     if( phi%gridpoint_values ) then
+        
+       if( phi%forward_transform_only ) then  !! result===> d_phi
+        do k=1,nz
+         call dfftw_execute_r2r(deriv%forward_plan,phi%SlabVals(1,1,k),d_phi%SlabVals(1,1,k))
+        enddo
+        return
+       else           !! result===> temp
+        do k=1,nz
+         call dfftw_execute_r2r(deriv%forward_plan,phi%SlabVals(1,1,k),temp(1,1,k))
+        enddo
+       endif
+       
+     endif
+     
+     !!=======================================================
+     !! provided we are not doing the inv transform only,
+     !! multiply by data by (-ik) and normalize
+     !!=======================================================
+     if( .NOT. phi%inverse_transform_only ) then
+     
+      if( phi%gridpoint_values ) then  !! we did transform, data in temp
+
+      !! we do a  "-ik_y" multiply:
+      !! here is the "i":
+      !! phase (location)  shift necessary for real--> 1/2 complex transform
+       do k=1,nz
+        do i=1,nx
+         do j=2,nb2
+          xx = temp(i,j,k) * deriv%kfilter(j)
+          temp(i,j,k) = temp(i,n-j+2,k) * deriv%kfilter(j)
+          temp(i,n-j+2,k)=xx
+         enddo
+        enddo
+       enddo
+       
+       !! and here is the "-k_y":
+       do k=1,nz
+        do j=1,ny 
+         do i=1,nx    !!/2
+          temp(i,j,k) = -deriv%kx(j)*temp(i,j,k)*NormFactor
+         enddo
+        enddo
+       enddo
+       temp(:,nb2+1,:) = 0.d0    !! nyquist
+       
+      elseif( phi%wavenumber_values ) then  !! we didnt transform, data not in temp
+      !! same procedure but with data in phi
+      
+      !! we do a  "-ik_y" multiply:
+      !! here is the "i":
+      !! phase (location)  shift necessary for real--> 1/2 complex transform
+       do k=1,nz
+        do i=1,nx
+         do j=2,nb2
+          xx = phi%SlabVals(i,j,k) * deriv%kfilter(j)
+          phi%SlabVals(i,j,k) = phi%SlabVals(i,n-j+2,k) * deriv%kfilter(j)
+          phi%SlabVals(i,n-j+2,k)=xx
+         enddo
+        enddo
+       enddo
+       
+       !! and here is the "-k_y":
+       do k=1,nz
+        do j=1,ny 
+         do i=1,nx 
+           temp(i,j,k) = -deriv%kx(j)*phi%SlabVals(i,j,k)*NormFactor
+         enddo
+        enddo
+       enddo
+       temp(:,nb2+1,:) = 0.d0    !! nyquist
+       
+      endif
+     endif
+     
+     !!=========================================================
+     !! do inverse transforms, again as complex to complex dft
+     !! if inverse_transform only, we need to normalize 
+     !! and return before applying ds/dz
+     !!=======================================================
+     if( .NOT. phi%inverse_transform_only ) then  !! data in ctemp
+      do k=1,nz
+        call dfftw_execute_r2r(deriv%inverse_plan,temp(1,1,k),d_phi%SlabVals(1,1,k))
+      enddo
+     elseif(phi%inverse_transform_only ) then   !! data in phi
+      do k=1,nz
+        call dfftw_execute_r2r(deriv%inverse_plan,phi%SlabVals(1,1,k),d_phi%SlabVals(1,1,k))
+      enddo
+      d_phi%SlabVals=d_phi%SlabVals*NormFactor
+      return
+     endif
+     
+     !!======================================
+     !! deal w/ y<-->s transformation
+     !! dfdy = (df/ds * ds/dy) 
+     !!======================================
+     do k=1,nz
+      do j=1,ny
+       do i=1,nx 
+        d_phi%SlabVals(i,j,k) = d_phi%SlabVals(i,j,k) * dsdy(j)
+       enddo
+      enddo
+     enddo
+  
+    return
+   endif
+  endif   !! end Fourier block
+   
+  
+  if( deriv%MethodLabel=='cos' )  then 
+    
+   NormFactor = 1./(2.*(n-1.))
+   
+   if(idim==1) then
+                   
+     nsmall = nx-2
+
+     !!=======================================================
+     !! If we are starting out in physical space, or if we
+     !! only need to do an inverse transform, then cos transform
+     !! the input data
+     !!=======================================================
+     if( phi%gridpoint_values .or. phi%inverse_transform_only ) then
+
+       if( phi%forward_transform_only ) then
+        call dfftw_execute_r2r(deriv%forward_plan,phi%SlabVals,d_phi%SlabVals)
+        return
+       elseif(phi%inverse_transform_only) then
+        call dfftw_execute_r2r(deriv%forward_plan,phi%SlabVals,d_phi%SlabVals)
+        d_phi%SlabVals=d_phi%SlabVals*NormFactor
+        return
+       else
+        call dfftw_execute_r2r(deriv%forward_plan,phi%SlabVals,temp)
+       endif 
+       
+     endif
+    
+     !!=======================================================
+     !! multiply by (-1)* wavenumbers and by normalization factor
+     !!=======================================================
+     
+      !! if we skipped the transform so data NOT in temp...
+      if(phi%wavenumber_values) then 
+       do k=1,nz
+        do j=1,ny
+         do i=1,nsmall
+          small_x(i,j,k) = - deriv%kx(i+1)*deriv%kfilter(i+1)   &
+                           * phi%SlabVals(i+1,j,k)*NormFactor
+         enddo
+        enddo
+       enddo
+      !! else we did the transform so data IS in temp...
+      elseif(phi%gridpoint_values) then
+       do k=1,nz
+        do j=1,ny
+         do i=1,nsmall
+          small_x(i,j,k) = - deriv%kx(i+1)*deriv%kfilter(i+1)  &
+                           * temp(i+1,j,k)*NormFactor
+         enddo
+        enddo
+       enddo
+      endif
+      
+     
+     !!=======================================================
+     !! do the inverse transform (sin) on the smaller array
+     !! zero out endpts (mean & nyquist) for sin expansions
+     !!=======================================================
+      call dfftw_execute_r2r( deriv%inverse_plan,small_x,small2_x) 
+      do k=1,nz
+       do j=1,ny
+        d_phi%SlabVals(2:nx-1,j,k)=small2_x(1:nsmall,j,k)        
+        d_phi%SlabVals(1,j,k)=0.d0
+        d_phi%SlabVals(nx,j,k)=0.d0
+       enddo
+      enddo
+      
+
+     !!======================================
+     !! deal w/ x<-->s transformation
+     !! dfdx = (df/ds * ds/dx) 
+     !!======================================
+     do k=1,nz
+      do j=1,ny 
+       d_phi%SlabVals(:,j,k) = d_phi%SlabVals(:,j,k) * dsdx
+      enddo
+     enddo
+     
+    return
+   elseif(idim==2) then !! must loop over k because stride is not constant
+                   
+     nsmall = ny-2
+     
+     !!=======================================================
+     !! If we are starting out in physical space, or if we
+     !! only need to do an inverse transform, then cos transform
+     !! the input data
+     !!=======================================================
+     if( phi%gridpoint_values .or. phi%inverse_transform_only ) then
+        
+       if( phi%forward_transform_only ) then
+        do k=1,nz
+         call dfftw_execute_r2r(deriv%forward_plan,phi%SlabVals(1,1,k),d_phi%SlabVals(1,1,k))
+        enddo
+        return
+       elseif(phi%inverse_transform_only) then
+        do k=1,nz
+         call dfftw_execute_r2r(deriv%forward_plan,phi%SlabVals(1,1,k),d_phi%SlabVals(1,1,k))
+        enddo
+        d_phi%SlabVals=d_phi%SlabVals*NormFactor
+        return
+       else
+        do k=1,nz
+         call dfftw_execute_r2r(deriv%forward_plan,phi%SlabVals(1,1,k),temp(1,1,k))
+        enddo
+       endif
+       
+     endif
+               
+     !!=======================================================
+     !! multiply by (-1)* wavenumbers and by normalization factor
+     !!=======================================================
+     
+      !! if we didn't do transform, data is NOT in temp
+      if(phi%wavenumber_values) then
+       do k=1,nz
+        do j=1,nsmall
+         do i=1,nx      
+          small_y(i,j,k) = - deriv%kx(j+1)*deriv%kfilter(j+1)   &
+                           * phi%SlabVals(i,j+1,k) * NormFactor
+         enddo
+        enddo
+       enddo
+      !! else if we did do transform, data IS in temp
+      elseif(phi%gridpoint_values) then
+       do k=1,nz
+        do j=1,nsmall
+         do i=1,nx      
+          small_y(i,j,k) = - deriv%kx(j+1)*deriv%kfilter(j+1)   &
+                           * temp(i,j+1,k) * NormFactor
+         enddo
+        enddo
+       enddo
+      endif
+      
+     
+     !!=======================================================
+     !! do the inverse transforms
+     !!=======================================================
+      do k=1,nz
+       call dfftw_execute_r2r(deriv%inverse_plan,small_y(1,1,k),d_phi%SlabVals(1,2,k))
+      enddo
+      d_phi%SlabVals(:,1,:)=0.d0
+      d_phi%SlabVals(:,nsmall+2,:)=0.d0 !! endpts always zero for sin expansions
+          
+          
+     !!======================================
+     !! deal w/ y<-->s transformation
+     !! dfdy = (df/ds * ds/dy) 
+     !!======================================
+     do k=1,nz
+      do j=1,ny
+       do i=1,nx 
+        d_phi%SlabVals(i,j,k) = d_phi%SlabVals(i,j,k) * dsdy(j)
+       enddo
+      enddo
+     enddo
+          
+    return
+   endif     
+  endif
+  
+  if( deriv%MethodLabel=='sin' ) then 
+   
+   NormFactor = 1./(2.*(n-1.))
+   
+   if(idim==1) then 
+     nsmall = nx-2
+     
+     !!=======================================================
+     !! If we are starting out in physical space, or if we
+     !! only need to do an inverse transform, then sin transform
+     !! the input data
+     !!=======================================================
+     if( phi%gridpoint_values .or. phi%inverse_transform_only ) then
+
+      !! extract the data w/o the zero endpts
+      do i=1,nsmall
+       small_x(i,:,:) = phi%SlabVals(i+1,:,:)
+      enddo
+     
+      if( phi%forward_transform_only ) then
+       call dfftw_execute_r2r(deriv%forward_plan,small_x,small2_x)
+       do i=1,nsmall
+        d_phi%SlabVals(i+1,:,:)=small2_x(i,:,:)
+       enddo
+       d_phi%SlabVals(1,:,:)=0.d0
+       d_phi%SlabVals(nx,:,:)=0.d0
+       return
+      elseif(phi%inverse_transform_only) then
+       call dfftw_execute_r2r(deriv%forward_plan,small_x,small2_x)
+       do i=1,nsmall
+        d_phi%SlabVals(i+1,:,:)=small2_x(i,:,:)*NormFactor
+       enddo
+       d_phi%SlabVals(1,:,:)=0.d0
+       d_phi%SlabVals(nx,:,:)=0.d0
+       return
+      else
+       call dfftw_execute_r2r(deriv%forward_plan,small_x,small2_x)
+      endif
+      
+     endif
+     
+     
+     !!=======================================================
+     !! multiply by (+1)* wavenumbers and by normalization factor
+     !!=======================================================
+     
+      !! if we didn't do transform, data is NOT in small2_x
+      if(phi%wavenumber_values) then
+       do k=1,nz
+        do j=1,ny
+         do i=1,nx
+          temp(i,j,k) = deriv%kx(i)*deriv%kfilter(i)   &
+                       * phi%SlabVals(i,j,k) * NormFactor
+         enddo
+        enddo
+       enddo
+      !! if we did do transform, data IS in small2_x
+      elseif(phi%gridpoint_values) then
+       do k=1,nz
+        do j=1,ny
+         do i=1,nsmall
+          temp(i+1,j,k) = deriv%kx(i+1)*deriv%kfilter(i+1)   &
+                        * small2_x(i,j,k) * NormFactor
+         enddo
+        enddo
+       enddo
+      endif
+      temp(1,:,:)=0.d0        !! derivative of a sin expansion has no mean
+      temp(nsmall+2,:,:)=0.d0 !! nyquist
+    
+     !!=======================================================
+     !! do the inverse transforms
+     !!=======================================================
+     call dfftw_execute_r2r( deriv%inverse_plan,temp,d_phi%SlabVals ) 
+     
+     !!======================================
+     !! deal w/ x<-->s transformation
+     !! dfdx = (df/ds * ds/dx) 
+     !!======================================
+     do k=1,nz
+      do j=1,ny
+       d_phi%SlabVals(:,j,k) = d_phi%SlabVals(:,j,k) * dsdx
+      enddo
+     enddo
+     
+    return
+    
+   elseif(idim==2) then !! must loop over k because stride is not constant
+     nsmall = ny-2
+     
+     !!=======================================================
+     !! If we are starting out in physical space, or if we
+     !! only need to do an inverse transform, then sin transform
+     !! the input data
+     !!=======================================================
+     if( phi%gridpoint_values .or. phi%inverse_transform_only ) then
+         
+       !! extract the data w/o the zero endpts
+       do j=1,nsmall
+        small_y(:,j,:) = phi%SlabVals(:,j+1,:)
+       enddo
+       !! do the forward transform (requires loop due to stride issues)
+       
+       if( phi%forward_transform_only ) then
+        do k=1,nz
+         call dfftw_execute_r2r( deriv%forward_plan, small_y(1,1,k), small2_y(1,1,k) )
+        enddo
+        do j=1,nsmall
+         d_phi%SlabVals(:,j+1,:)=small2_y(:,j,:)
+        enddo
+        d_phi%SlabVals(:,1,:)=0.d0
+        d_phi%SlabVals(:,ny,:)=0.d0
+        return
+       elseif(phi%inverse_transform_only) then
+        do k=1,nz
+         call dfftw_execute_r2r( deriv%forward_plan, small_y(1,1,k), small2_y(1,1,k) )
+        enddo
+        do j=1,nsmall
+         d_phi%SlabVals(:,j+1,:)=small2_y(:,j,:)*NormFactor
+        enddo
+        d_phi%SlabVals(:,1,:)=0.d0
+        d_phi%SlabVals(:,ny,:)=0.d0
+        return
+       else
+        do k=1,nz
+         call dfftw_execute_r2r( deriv%forward_plan, small_y(1,1,k), small2_y(1,1,k) )
+        enddo
+       endif
+       
+     endif
+      
+    
+     !!=======================================================
+     !! multiply by (+1)* wavenumbers and by normalization factor
+     !!=======================================================
+     
+      !! if we didn't do transform, data is NOT in small2_y
+      if(phi%wavenumber_values) then
+       do k=1,nz
+        do j=1,nsmall
+         do i=1,nx
+          temp(i,j+1,k) = deriv%kx(j+1)*deriv%kfilter(j+1)   &
+                        * phi%SlabVals(i,j+1,k) * NormFactor
+         enddo
+        enddo
+       enddo
+      !! if we did do transform, data IS in small2_y
+      elseif(phi%gridpoint_values) then
+       do k=1,nz
+        do j=1,nsmall
+         do i=1,nx
+          temp(i,j+1,k) = deriv%kx(j+1)*deriv%kfilter(j+1)   &
+                        * small2_y(i,j,k) * NormFactor
+         enddo
+        enddo
+       enddo
+       temp(:,1,:)=0.d0           !! derivative of a sin expansion has no mean
+       temp(:,nsmall+2,:)=0.d0    !! nyquist
+      endif
+      
+     
+     !!=======================================================
+     !! do the inverse transforms
+     !!=======================================================
+      do k=1,phi%DataMap%SlabDims(3,myid)
+       call dfftw_execute_r2r(deriv%inverse_plan,temp(1,1,k),d_phi%SlabVals(1,1,k))
+      enddo
+     
+     !!======================================
+     !! deal w/ x<-->s transformation
+     !! dfdy = (df/ds * ds/dy) 
+     !!======================================
+     do k=1,nz
+      do j=1,ny
+       do i=1,nx 
+        d_phi%SlabVals(i,j,k) = d_phi%SlabVals(i,j,k) * dsdy(j)
+       enddo
+      enddo
+     enddo
+          
+    return
+   endif
+  endif
+  
+  if( deriv%MethodLabel=='cheby' )  then      
+     if( idim==1 ) then
+      !!=======================================================
+      !! If we are starting out in physical space, do the
+      !! forward transform (requires loop due to stride issues)
+      !!=======================================================
+     if( phi%gridpoint_values        .and.   &
+         .NOT. phi%wavenumber_values .and.   &
+         .NOT. phi%inverse_transform_only)   then
+         
+      !! constant strides, can do all the transforms in a single call
+      !! do cosine transform(s)
+      call dfftw_execute_r2r(deriv%forward_plan,  &
+                             phi%SlabVals, &
+                             d_phi%SlabVals )
+      if( phi%forward_transform_only ) return
+     endif
+     
+     
+     !!=======================================================
+     !! provided we are not doing the inv transform only,
+     !! get normalized expansion coefficients for deriv from
+     !! coeffs of the function recursively
+     !!=======================================================
+     if( .NOT. phi%inverse_transform_only ) then
+      if(phi%wavenumber_values) then
+       call ChebyRecursion( idim,phi%DataMap%SlabDims,phi%SlabVals,temp)
+      elseif(phi%gridpoint_values) then
+       call ChebyRecursion( idim,phi%DataMap%SlabDims,d_phi%SlabVals,temp)
+      endif
+     endif
+     
+     !!=======================================================
+     !! inverse transform, i.e. another round of cosine transform(s)
+     !! if inverse_transform only, ***we need to normalize???***
+     !! and return before applying ds/dz
+     !!=======================================================
+     if( .NOT. phi%inverse_transform_only ) then 
+      call dfftw_execute_r2r(deriv%forward_plan,temp,d_phi%SlabVals)
+     elseif( phi%inverse_transform_only ) then
+      call dfftw_execute_r2r(deriv%forward_plan,phi%SlabVals,d_phi%SlabVals)
+      return
+     endif
+    
+     !!======================================
+     !! deal w/ x<-->s transformation
+     !! dfdz = (df/ds * ds/dz) 
+     !!======================================
+     do k=1,nz
+      do j=1,ny 
+       d_phi%SlabVals(:,j,k) = d_phi%SlabVals(:,j,k) * dsdx
+      enddo
+     enddo
+    return
+    
+   elseif( idim==2 ) then 
+      !!=======================================================
+      !! If we are starting out in physical space, do the
+      !! forward transform (requires loop due to stride issues)
+      !!=======================================================
+      if( phi%gridpoint_values        .and.   &
+         .NOT. phi%wavenumber_values .and.   &
+         .NOT. phi%inverse_transform_only)   then
+         
+       !!here we must loop over k planes 
+       !!because memory stride is not constant
+       kend=phi%DataMap%ColVals(3,myid)
+       !! do cosine transform(s)
+       do k=1,kend
+        call dfftw_execute_r2r( deriv%forward_plan,  &
+                                phi%SlabVals(1,1,k), &
+                                d_phi%SlabVals(1,1,k) )
+       enddo
+       if( phi%forward_transform_only ) return
+      endif
+      
+      !!=======================================================
+      !! provided we are not doing the inv transform only,
+      !! get normalized expansion coefficients for deriv from
+      !! coeffs of the function recursively
+      !!=======================================================
+      if( .NOT. phi%inverse_transform_only ) then
+       if(phi%wavenumber_values) then
+        call ChebyRecursion( idim,phi%DataMap%SlabDims,phi%SlabVals,temp)
+       elseif(phi%gridpoint_values) then
+        call ChebyRecursion( idim,phi%DataMap%SlabDims,d_phi%SlabVals,temp)
+       endif
+      endif
+     
+     !!=======================================================
+     !! inverse transform, i.e. another round of cosine transform(s)
+     !! if inverse_transform only, ***we need to normalize???***
+     !! and return before applying ds/dz
+     !!=======================================================
+     if( .NOT. phi%inverse_transform_only ) then
+      do k=1,kend
+       call dfftw_execute_r2r(deriv%forward_plan,  &
+                             temp(1,1,k),d_phi%SlabVals(1,1,k))
+      enddo
+     elseif(phi%inverse_transform_only) then
+      do k=1,kend
+       call dfftw_execute_r2r(deriv%forward_plan,  &
+                             phi%SlabVals(1,1,k),d_phi%SlabVals(1,1,k))
+      enddo
+      return
+     endif
+        
+    !!======================================
+    !! deal w/ x<-->s transformation
+    !! dfdz = (df/ds * ds/dz) 
+    !!======================================
+    do k=1,nz
+     do j=1,ny
+      do i=1,nx 
+       d_phi%SlabVals(i,j,k) = d_phi%SlabVals(i,j,k) * dsdy(j)
+      enddo
+     enddo
+    enddo
+    
+    return
+   endif
+  endif
+  
+  if( deriv%MethodLabel=='compact' )  then
+  
+   if( phi%wavenumber_values        .or.   &
+       .NOT. phi%gridpoint_values ) then
+      if(myid==0)   &
+      write(0,*) 'method = compact but flag says data in wavenumber space'
+      stop ' stopping in ApplyDerivative '
+   endif
+         
+    if(idim==1) then
+     call compact_ddx(phi,d_phi)
+    elseif(idim==2) then
+     call compact_ddy(phi,d_phi)
+    elseif(idim==3) then
+     call compact_ddz(phi,d_phi)
+    endif
+  endif  
+
+ end subroutine ApplyDerivative
+ 
+ 
+ 
+ subroutine ApplyDerivativeToArray(SV,phi,d_phi,deriv,nx,ny,nz,call_id) 
+ !! all derivatives are taken wrt equally spaced parameter s
+ !! each result needs to be mult by the appropriate 1/dx/ds vector
+  use class_Derivative
+  use class_DataDecomposition
+  
+  implicit none  
+  include 'fftw3.f'
+  
+  type(ScalarVariable),intent(in):: SV
+  character(len=80),optional     :: call_id
+  integer                        :: nx,ny,nz
+  real(kind=8)                   :: phi(nx,ny,nz)
+  real(kind=8)                   :: d_phi(nx,ny,nz)
+  
+  type( Derivative ), intent(in):: deriv
+  integer                       :: ierr
+  integer                       :: i,j,k
+  real(kind=8)                  :: NormFactor,alpha
+  integer, SAVE                 :: myid,numprocs,idim,n
+  integer, SAVE                 :: nb2,npts,nsmall
+  logical, SAVE                 :: first_entry=.TRUE.
+  complex(kind=8), SAVE         :: cmplxi
+  complex(kind=8),allocatable,SAVE    :: ctemp(:,:,:)
+  real(kind=8),allocatable, SAVE      :: temp(:,:,:)
+  real(kind=8),allocatable, SAVE      :: small(:,:,:)
+  real(kind=8),allocatable, SAVE      :: small2(:,:,:) 
+  real(kind=8),allocatable, SAVE      :: dsdz(:)
+   
+  include 'mpif.h'
+  if( first_entry ) then
+   call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)      
+   call mpi_comm_size (MPI_COMM_WORLD,numprocs,ierr)
+   cmplxi=cmplx(0.d0,1.d0)  
+   idim=deriv%DimIndex
+   n = deriv%DataDim
+   nb2 = n/2
+   npts = nx*ny
+   nsmall = nz-2
+   allocate( temp(nx,ny,nz) )
+   allocate( ctemp(nx,ny,nz) )
+   allocate( small(nx,ny,nz-2) )
+   allocate( small2(nx,ny,nz-2) )
+   allocate( dsdz(nz) )
+   dsdz(:) = 1.d0/SV%Grid%SpaceDims(idim)%dxds(:)
+   first_entry = .FALSE.
+  endif 
+  
+  
+  if( deriv%MethodLabel=='fourier' ) then
+   
+    NormFactor=1.d0/n
+
+     !!=======================================================
+     !! If we are starting out in physical space, do the
+     !! forward transforms, organized as complex to complex dfts
+     !!=======================================================
+     if( SV%gridpoint_values )   then
+       if(SV%forward_transform_only) then
+        call dfftw_execute_dft( deriv%forward_plan, phi, d_phi )
+        return
+       else
+        call dfftw_execute_dft( deriv%forward_plan, phi, ctemp )
+       endif
+     endif
+     
+     if(.NOT. SV%inverse_transform_only)   then
+      !!=========================================
+      !! Multiply by data by (-ik) and normalize
+      !!=========================================
+      if( SV%wavenumber_values ) then !!no forward transform in this call
+       do k=1,nz
+        !!ctemp(:,:,k) = -cmplxi * deriv%kx(k)*phi(:,:,k)*NormFactor
+        alpha = -cmplxi * deriv%kx(k) * deriv%kfilter(k) * NormFactor
+        call DSCAL(npts,alpha,phi(1,1,k),1)  !! input data in phi
+       enddo
+      elseif(SV%gridpoint_values) then !!I did the forward transform in this call
+       do k=1,nz
+        !!ctemp(:,:,k) = -cmplxi * deriv%kx(k)*ctemp(:,:,k)*NormFactor
+        alpha = -cmplxi * deriv%kx(k) * deriv%kfilter(k) * NormFactor
+        call DSCAL(npts,alpha,ctemp(1,1,k),1)   !! data in ctemp
+       enddo
+      endif
+      
+     endif
+     
+     !!=======================================================
+     !! do inverse transforms, again as complex to complex dft
+     !! if inverse_transform only, we need to normalize 
+     !! and return before applying ds/dz
+     !!=======================================================
+     if(.NOT. SV%inverse_transform_only)   then      
+      call dfftw_execute_dft( deriv%inverse_plan, ctemp, d_phi )
+     elseif(SV%inverse_transform_only)   then
+      alpha = NormFactor
+      call DSCAL(nz*npts,alpha,phi(1,1,1),1)
+      call dfftw_execute_dft( deriv%inverse_plan, phi, d_phi )
+      return
+     endif
+     
+     !!======================================
+     !! dfdz = (df/ds * ds/dz) 
+     !!======================================
+     do k=1,nz  
+       !!d_phi(:,:,k) = d_phi(:,:,k) * dsdz(k)
+       alpha = dsdz(k)
+       call DSCAL(npts,alpha,d_phi(1,1,k),1)
+     enddo
+      
+    return
+    
+  endif   !! end Fourier block
+   
+  
+  if( deriv%MethodLabel=='cos' )  then 
+             
+    NormFactor = 1./(2.*(n-1.))
+      
+     !!=======================================================
+     !! If we are starting out in physical space, or if we
+     !! only need to do an inverse transform, then cos transform
+     !! the input data
+     !!=======================================================
+     if( SV%gridpoint_values .or. SV%inverse_transform_only ) then
+      
+      if(SV%forward_transform_only) then
+       call dfftw_execute_r2r(deriv%forward_plan,phi,d_phi)
+       return
+      elseif( SV%inverse_transform_only ) then 
+       !! cos transform is its own inverse
+       call dfftw_execute_r2r(deriv%forward_plan,phi,d_phi)
+       d_phi=d_phi*NormFactor
+       return
+      else
+       call dfftw_execute_r2r(deriv%forward_plan,phi,temp)
+      endif
+      
+     endif
+           
+      !!=========================================
+      !! Multiply by data by (-ik) and normalize
+      !!=========================================
+      if( SV%wavenumber_values ) then !! input data in phi
+       do k=1,nsmall
+        small(:,:,k) = - deriv%kx(k+1)*deriv%kfilter(k+1)   &
+                       * phi(:,:,k+1) * NormFactor
+       enddo
+      elseif(SV%gridpoint_values) then !! data now in temp
+       do k=1,nsmall
+        small(:,:,k) = - deriv%kx(k+1)*deriv%kfilter(k+1)   &
+                       * temp(:,:,k+1) * NormFactor
+       enddo
+      endif
+      
+          
+     !!=======================================================
+     !! do inverse transforms
+     !!=======================================================
+     
+      call dfftw_execute_r2r(deriv%inverse_plan,small,d_phi(1,1,2))
+      !! set top & bottom planes to zero
+      alpha = 0.d0
+      call DSCAL(npts,alpha,d_phi(1,1,1),1)
+      call DSCAL(npts,alpha,d_phi(1,1,nsmall+2),1)
+     
+     
+     !!======================================
+     !! dfdz = (df/ds * ds/dz) 
+     !!======================================
+     do k=2,nz-1  !!d_phi(:,:,k) = d_phi(:,:,k) * dsdz(k)
+       alpha = dsdz(k)
+       call DSCAL(npts,alpha,d_phi(1,1,k),1)
+     enddo
+          
+   return
+  endif
+
+
+  
+  if( deriv%MethodLabel=='sin' ) then 
+   
+    NormFactor = 1./(2.*(n-1.))
+ 
+     !!=======================================================
+     !! If we are starting out in physical space, or if we
+     !! only need to do an inverse transform, then sin transform
+     !! the input data
+     !!=======================================================
+     if( SV%gridpoint_values .or. SV%inverse_transform_only ) then
+         
+      !! extract the data w/o the zero endpts
+      do k=1,nsmall
+       !!small(:,:,k) = phi(:,:,k+1)
+       call DCOPY(npts,phi(1,1,k+1),1,small(1,1,k),1)
+      enddo
+      
+      call dfftw_execute_r2r( deriv%forward_plan, small, small2 )
+      
+      if( SV%forward_transform_only) then
+       do k=1,nsmall
+        d_phi(:,:,k+1)=small2(:,:,k)
+       enddo
+       d_phi(:,:,1)=0.d0    !! mean
+       d_phi(:,:,nz)=0.d0   !! nyquist
+       return
+      elseif(SV%inverse_transform_only) then
+       do k=1,nsmall
+        d_phi(:,:,k+1)=small2(:,:,k)*NormFactor
+       enddo
+       d_phi(:,:,1)=0.d0    !! bottom
+       d_phi(:,:,nz)=0.d0   !! top
+       return
+      endif      
+     endif
+     
+      !!=========================================
+      !! Multiply by data by (kz) and normalize
+      !!=========================================
+      if( SV%wavenumber_values ) then !! data is in phi
+       do k=2,nz-1
+        temp(:,:,k) = deriv%kx(k)*deriv%kfilter(k)   &
+                    * phi(:,:,k) * NormFactor
+       enddo
+       alpha = 0.d0
+       call DSCAL(npts,alpha,temp(1,1,1),1)
+       call DSCAL(npts,alpha,temp(1,1,nz),1)
+
+      elseif(SV%gridpoint_values) then  !! data is in small2
+      
+       do k=1,nsmall
+        temp(:,:,k+1) = deriv%kx(k+1)*deriv%kfilter(k+1)   &
+                      * small2(:,:,k) * NormFactor
+       enddo
+       
+       
+       alpha = 0.d0
+       call DSCAL(npts,alpha,temp(1,1,1),1)
+       call DSCAL(npts,alpha,temp(1,1,nz),1)
+      endif
+            
+     !!=======================================================
+     !! do inverse transforms
+     !!=======================================================
+     call dfftw_execute_r2r(deriv%inverse_plan,temp,d_phi)
+     
+     !!======================================
+     !! dfdz = (df/ds * ds/dz) 
+     !!======================================
+     do k=1,nz  
+       !!d_phi(:,:,k) = d_phi(:,:,k) * dsdz(k)
+       alpha = dsdz(k)
+       call DSCAL(npts,alpha,d_phi(1,1,k),1)
+     enddo  
+          
+   return
+  endif
+  
+  if( deriv%MethodLabel=='cheby' )  then      
+   
+     !!=======================================================
+     !! If we are starting out in physical space, do the
+     !! forward transforms
+     !!=======================================================
+     if( SV%gridpoint_values        .and.   &
+         .NOT. SV%wavenumber_values .and.   &
+         .NOT. SV%inverse_transform_only)   then
+      !! constant strides, can do all the transforms in a single call
+      !! do cosine transform(s)
+      call dfftw_execute_r2r( deriv%forward_plan,phi,d_phi )
+      if( SV%forward_transform_only) return
+     endif
+    
+    if(.NOT. SV%inverse_transform_only)   then
+     !! get normalized expansion coefficients for deriv 
+     !! from coeffs of the function recursively
+     if( SV%wavenumber_values ) then
+      call ChebyRecursion( idim, SV%DataMap%ColDims, phi,temp)
+     elseif(SV%gridpoint_values) then
+      call ChebyRecursion( idim, SV%DataMap%ColDims, d_phi,temp)
+     endif
+    endif
+    
+    !!=======================================================
+    !! inverse transform, i.e. another round of cosine transform(s)
+    !! if inverse_transform only, ***we need to normalize???***
+    !! and return before applying ds/dz
+    !!=======================================================
+    if(.NOT. SV%inverse_transform_only)   then
+     call dfftw_execute_r2r(deriv%forward_plan,temp,d_phi)
+    elseif(SV%inverse_transform_only)   then
+     call dfftw_execute_r2r(deriv%forward_plan,phi,d_phi)
+     return
+    endif
+     
+    !!======================================
+    !! dfdz = (df/ds * ds/dz) 
+    !!======================================
+    do k=1,nz  
+      !!d_phi(:,:,k) = d_phi(:,:,k) * dsdz(k)
+      alpha = dsdz(k)
+      call DSCAL(npts,alpha,d_phi(1,1,k),1)
+    enddo
+   
+   return        
+  endif
+  
+  if( deriv%MethodLabel=='compact' )  then
+  
+   if( SV%wavenumber_values        .or.   &
+       .NOT. SV%gridpoint_values ) then
+      if(myid==0)   &
+      write(0,*) 'method = compact but flag says data in wavenumber space'
+      stop ' stopping in ApplyDerivativeToArray '
+   endif
+   
+   call compact_ddz_array(SV,phi,d_phi,nx,ny,nz)
+  endif
+  
+ end subroutine ApplyDerivativeToArray
+ 
+ 
+ subroutine ChebyRecursion( idim, dims, a, b )
+  implicit none
+  
+  integer                    :: idim, dims(3),i,k,N
+  real(kind=8),intent(inout) :: a(dims(1),dims(2),dims(3))    ! cheby coeffs for function f
+  real(kind=8),intent(inout) :: b(dims(1),dims(2),dims(3))    ! cheby coeffs for function f' in idim direction
+  
+  N=dims(idim)  !! length in requested direction
+  
+  !!The recursion relation here assumes a map from s in [-1,1] --> theta in [0,pi]
+  
+  if( idim==1 ) then
+    
+    a(1,:,:)=0.5*a(1,:,:)
+    a(N,:,:)=0.5*a(N,:,:)
+    a=a/(N-1.)
+    b(N,:,:)=a(N,:,:)
+
+    b(N-1,:,:) = 2.d0*(N-1)*a(N-1+1,:,:)
+    do k=N-1-2,1,-1
+     b(k+1,:,:) = b(k+3,:,:) + 2.*(k+1)*a(k+2,:,:)
+    enddo
+    b(1,:,:)=a(2,:,:)+0.5*b(3,:,:)
+    
+    b(1,:,:) = 2.*b(1,:,:)
+    b(N,:,:) = 2.*b(N,:,:)
+ 
+  elseif( idim==2 ) then
+  
+    a(:,1,:)=0.5*a(:,1,:)
+    a(:,N,:)=0.5*a(:,N,:)
+    a=a/(N-1.)
+    b(:,N,:)=a(:,N,:)
+
+    b(:,N-1,:) = 2.d0*(N-1)*a(:,N-1+1,:)
+    do k=N-1-2,1,-1
+     b(:,k+1,:) = b(:,k+3,:) + 2.*(k+1)*a(:,k+2,:)
+    enddo
+    b(:,1,:)=a(:,2,:)+0.5*b(:,3,:)
+    
+    b(:,1,:) = 2.*b(:,1,:)
+    b(:,N,:) = 2.*b(:,N,:)
+    
+  elseif( idim==3 ) then
+  
+    a(:,:,1)=0.5*a(:,:,1)
+    a(:,:,N)=0.5*a(:,:,N)
+    a=a/(N-1.)
+    b(:,:,N)=a(:,:,N)
+
+    b(:,:,N-1) = 2.d0*(N-1)*a(:,:,N-1+1)
+    do k=N-1-2,1,-1
+     b(:,:,k+1) = b(:,:,k+3) + 2.*(k+1)*a(:,:,k+2)
+    enddo
+    b(:,:,1)=a(:,:,2)+0.5*b(:,:,3)
+    
+    b(:,:,1) = 2.*b(:,:,1)
+    b(:,:,N) = 2.*b(:,:,N)
+        
+  endif
+  
+ end subroutine ChebyRecursion
+ 
+
+subroutine compact_ddx(F,dF)
+ use class_CoordinateMap
+ implicit none
+ type( ScalarVariable ), intent(inout)   :: dF
+ type( ScalarVariable ), intent(in)      :: F
+ type( CoordinateMap )                   :: CoordMap
+ integer                                 :: idim=1
+ integer                                 :: i,j,k,ierr
+ integer, SAVE                           :: myid,numprocs
+ integer,SAVE                            :: m1,m2,m3
+ real(kind=8),SAVE                       :: h,a1,b1,c1
+ real(kind=8),allocatable,SAVE           :: work(:,:)
+ real(kind=8),allocatable,SAVE           :: dsdx(:)
+ logical, SAVE                           :: first_entry=.TRUE.
+   
+  include 'mpif.h'
+  if( first_entry ) then
+   call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)      
+   call mpi_comm_size (MPI_COMM_WORLD,numprocs,ierr)
+   !!===================================================================
+   !! m1,m2,m3    dimensions of array with data to be differentiated
+   !! h           x grid spacing
+   !! a1,b1,c1    coefficients of method, assigned to Derivative object
+   !!===================================================================
+   m1=F%DataMap%SlabDims(1,myid)
+   m2=F%DataMap%SlabDims(2,myid)
+   m3=F%DataMap%SlabDims(3,myid)
+   allocate(work(m1,m2))
+   allocate(dsdx(m1))
+   CoordMap = F%Grid%SpaceDims(idim)
+   h = CoordMap%ds
+   dsdx = 1.d0/CoordMap%dxds  
+   a1 = F%Derivs(idim)%a1
+   b1 = F%Derivs(idim)%b1
+   c1 = F%Derivs(idim)%c1
+   first_entry = .FALSE.
+  endif 
+ 
+
+  
+!!loop through each xy horizontal plane       
+ do k=1,m3
+ 
+ !Create rhs vectors, store in work(:,:)
+ work(1,:)=( -(5./2.)*F%SlabVals(1,:,k)+(2.)*F%SlabVals(2,:,k)   &
+                           +(1./2.)*F%SlabVals(3,:,k) )/h
+                           
+ work(2,:)=( -(5./9.)*F%SlabVals(1,:,k)-(1./2.)*F%SlabVals(2,:,k)   &
+                           +(1.)*F%SlabVals(3,:,k)+(1./18.)*F%SlabVals(4,:,k) )/h
+
+ work(3,:)= ( (1./36.)*(F%SlabVals(5,:,k)-F%SlabVals(1,:,k))   &
+             + (7./9.)*(F%SlabVals(4,:,k)-F%SlabVals(2,:,k)) )/h  
+
+ do i=4,m1-3
+  work(i,:)= ( (c1/6.)*(F%SlabVals(i+3,:,k)-F%SlabVals(i-3,:,k))   &
+             + (b1/4.)*(F%SlabVals(i+2,:,k)-F%SlabVals(i-2,:,k))   & 
+             + (a1/2.)*(F%SlabVals(i+1,:,k)-F%SlabVals(i-1,:,k)) )/h  
+ enddo
+
+ work(m1-2,:)= (-(1./36.)*(F%SlabVals(m1-4,:,k)-F%SlabVals(m1,:,k))   &
+                - (7./9.)*(F%SlabVals(m1-3,:,k)-F%SlabVals(m1-1,:,k)) )/h  
+                
+ work(m1-1,:)=( (5./9.)*F%SlabVals(m1,:,k)+(1./2.)*F%SlabVals(m1-1,:,k)  &
+                         -(1)*F%SlabVals(m1-2,:,k)-(1./18.)*F%SlabVals(m1-3,:,k) )/h
+                         
+ work(m1,:) = ( (5./2.)*F%SlabVals(m1,:,k)-(2.)*F%SlabVals(m1-1,:,k)  &
+                         -(1./2.)*F%SlabVals(m1-2,:,k) )/h
+
+!!Compute the x derivatives for plane k, overwriting the array work
+  call DGBTRS('N',m1,2,2,m2,F%Derivs(idim)%A_Diff,7,F%Derivs(idim)%ipiv,work,m1,ierr)
+
+      
+!!store the results in deriv(:,:,k) and apply metric from s <--> x
+!! i.e. dF/dx = dF/ds *ds/dx
+   do j=1,m2
+    dF%SlabVals(:,j,k)=work(:,j) * dsdx(:)
+   enddo
+
+!!Go on to the next k plane
+ enddo
+
+ return
+end subroutine compact_ddx
+
+
+subroutine compact_ddy(F,dF)
+ use class_CoordinateMap
+ implicit none
+ type( ScalarVariable ), intent(inout)   :: dF
+ type( ScalarVariable ), intent(in)      :: F
+ type( CoordinateMap )                   :: CoordMap
+ integer                                 :: idim=2
+ integer                                 :: i,j,k,ierr
+ integer, SAVE                           :: myid,numprocs
+ integer,SAVE                            :: m1,m2,m3
+ real(kind=8),SAVE                       :: h,a1,b1,c1
+ real(kind=8),allocatable,SAVE           :: work(:,:)
+ real(kind=8),allocatable,SAVE           :: dsdy(:) 
+ logical, SAVE                           :: first_entry=.TRUE.
+   
+  include 'mpif.h'
+  if( first_entry ) then
+   call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)      
+   call mpi_comm_size (MPI_COMM_WORLD,numprocs,ierr)
+   !!===================================================================
+   !! m1,m2,m3    dimensions of array with data to be differentiated
+   !! h           x grid spacing
+   !! a1,b1,c1    coefficients of method, assigned to Derivative object
+   !!=================================================================== 
+   m1=F%DataMap%SlabDims(1,myid)
+   m2=F%DataMap%SlabDims(2,myid)
+   m3=F%DataMap%SlabDims(3,myid)
+   allocate(work(m2,m1))
+   allocate(dsdy(m2))
+   CoordMap = F%Grid%SpaceDims(idim)
+   h = CoordMap%ds
+   dsdy = 1.d0/CoordMap%dxds  !! remember, all low level notation uses "x"
+   a1 = F%Derivs(idim)%a1
+   b1 = F%Derivs(idim)%b1
+   c1 = F%Derivs(idim)%c1
+   first_entry=.FALSE.
+  endif 
+ 
+ 
+
+!!loop through each xy horizontal plane       
+ do k=1,m3
+
+!! These are high order one sided formula, to use, 
+!! the setup matrix need needs to be adjusted
+! work(1,:)=( -(274.)*F%SlabVals(:,1,k)+(600.)*F%SlabVals(:,2,k)   &
+!             -(600.)*F%SlabVals(:,3,k)+(400.)*F%SlabVals(:,4,k)   &
+!             -(150.)*F%SlabVals(:,5,k)+ (24.)*F%SlabVals(:,6,k) )/(120.*h)  
+             
+!work(2,:)=( -(24.)*F%SlabVals(:,1,k)-(130.)*F%SlabVals(:,2,k)   &
+!             +(240.)*F%SlabVals(:,3,k)-(120.)*F%SlabVals(:,4,k)   &
+!             +(40.)*F%SlabVals(:,5,k)- (6.)*F%SlabVals(:,6,k) )/(120.*h)  
+
+!      create rhs vectors, store in work(:,:,1)
+ work(1,:)=( -(5./2.)*F%SlabVals(:,1,k)+(2.)*F%SlabVals(:,2,k)   &
+             +(1./2.)*F%SlabVals(:,3,k) )/h
+             
+ work(2,:)=( -(5./9.)*F%SlabVals(:,1,k)-(1./2.)*F%SlabVals(:,2,k)   &
+             +(1.)*F%SlabVals(:,3,k)+(1./18.)*F%SlabVals(:,4,k) )/h
+
+
+ work(3,:) = ( (1./36.)*( F%SlabVals(:,5,k) - F%SlabVals(:,1,k) )   &
+              + (7./9.)*( F%SlabVals(:,4,k) - F%SlabVals(:,2,k) ) )/h  
+              
+ do j=4,m2-3
+  work(j,:) = (  (c1/6.)*( F%SlabVals(:,j+3,k) - F%SlabVals(:,j-3,k) )   &
+               + (b1/4.)*( F%SlabVals(:,j+2,k) - F%SlabVals(:,j-2,k) )   &
+               + (a1/2.)*( F%SlabVals(:,j+1,k) - F%SlabVals(:,j-1,k) ) )/h  
+ enddo
+
+ work(m2-2,:) = (-(1./36.)*( F%SlabVals(:,m2-4,k) - F%SlabVals(:,m2,k) )   &
+              - (7./9.)*( F%SlabVals(:,m2-3,k) - F%SlabVals(:,m2-1,k) ) )/h  
+              
+ work(m2-1,:)= ( (5./9.)*F%SlabVals(:,m2,k)+(1./2.)*F%SlabVals(:,m2-1,k)   &
+               -(1.)*F%SlabVals(:,m2-2,k)-(1./18.)*F%SlabVals(:,m2-3,k) )/h
+               
+ work(m2,:)= ( (5./2.)*F%SlabVals(:,m2,k)-(2.)*F%SlabVals(:,m2-1,k)   &
+               -(1./2.)*F%SlabVals(:,m2-2,k) )/h
+
+!! These are high order one sided formula, to use, 
+!! the setup matrix need needs to be adjusted
+ !work(m2-1,:)=( (24.)*F%SlabVals(:,m2,k)+(130.)*F%SlabVals(:,m2-1,k)   &
+ !            -(240.)*F%SlabVals(:,m2-2,k)+(120.)*F%SlabVals(:,m2-3,k)   &
+ !            -(40.)*F%SlabVals(:,m2-4,k)+ (6.)*F%SlabVals(:,m2-5,k) )/(120.*h) 
+             
+ !work(m2,:)=(  (274.)*F%SlabVals(:,m2,k)-(600.)*F%SlabVals(:,m2-1,k)   &
+ !            +(600.)*F%SlabVals(:,m2-2,k)-(400.)*F%SlabVals(:,m2-3,k)   &
+ !            +(150.)*F%SlabVals(:,m2-4,k)- (24.)*F%SlabVals(:,m2-5,k) )/(120.*h)  
+             
+             
+!Compute the y derivatives for plane k, overwriting the array work
+  call DGBTRS('N',m2,2,2,m1,F%Derivs(idim)%A_Diff,7,F%Derivs(idim)%ipiv,work,m2,ierr)
+        
+!!store the results in deriv(:,:,k) and apply metric from s <--> y
+!! i.e. dF/dy = dF/ds *ds/dy
+ dF%SlabVals(1:m1,1:m2,k)=transpose( work(1:m2,1:m1)  )
+ do i=1,m1
+  dF%SlabVals(i,:,k) = dF%SlabVals(i,:,k) * dsdy(:) 
+ enddo                                               
+
+!Go on to the next k plane
+ enddo
+
+ return
+end subroutine compact_ddy
+
+
+subroutine compact_ddz(F,dF)
+ use class_CoordinateMap
+ implicit none
+ type( ScalarVariable ), intent(inout)   :: dF
+ type( ScalarVariable ), intent(in)      :: F
+ integer                                 :: idim=3
+ integer                                 :: i,j,k
+ integer,save                                 :: m1,m2,m3
+ real(kind=8),save                            :: h,a1,b1,c1
+ real(kind=8),allocatable,save                :: work(:,:)
+ real(kind=8),allocatable,save                :: dsdz(:)
+ integer                                 :: ierr
+ integer, SAVE                           :: myid,numprocs
+ logical, SAVE                           :: first_entry=.TRUE.
+   
+  include 'mpif.h'
+ !!=================================================================== 
+ !! m1,m2,m3    dimensions of array with data to be differentiated
+ !! h           x grid spacing
+ !! a1,b1,c1    coefficients of method, assigned to Derivative object
+ !!===================================================================
+ 
+  if( first_entry ) then
+   call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)      
+   call mpi_comm_size (MPI_COMM_WORLD,numprocs,ierr)
+   !! in idim=3 case, we work w/ data stord in "Column" format
+   m1=F%DataMap%ColDims(1,myid)
+   m2=F%DataMap%ColDims(2,myid)
+   m3=F%DataMap%ColDims(3,myid)
+   allocate(work(m3,m1))
+   allocate(dsdz(m3))
+   h = F%Grid%SpaceDims(idim)%ds
+   dsdz = 1.d0/F%Grid%SpaceDims(idim)%dxds
+   a1 = F%Derivs(idim)%a1
+   b1 = F%Derivs(idim)%b1
+   c1 = F%Derivs(idim)%c1
+   first_entry=.FALSE.
+  endif 
+ 
+ 
+ 
+!loop through each xz plane       
+ do j=1,m2
+
+!! These are high order one sided formula, to use, 
+!! the setup matrix need needs to be adjusted
+ !work(1,:)=( -(274.)*F%ColVals(:,j,1)+(600.)*F%ColVals(:,j,2)   &
+ !            -(600.)*F%ColVals(:,j,3)+(400.)*F%ColVals(:,j,4)   &
+ !            -(150.)*F%ColVals(:,j,5)+(24.)*F%ColVals(:,j,6) )/(120.*h)  
+ !work(2,:)=( -(24.)*F%ColVals(:,j,1)-(130.)*F%ColVals(:,j,2)   &
+ !            +(240.)*F%ColVals(:,j,3)-(120.)*F%ColVals(:,j,4)   &
+ !            +(40.)*F%ColVals(:,j,5)-(6.)*F%ColVals(:,j,6) )/(120.*h)   
+ 
+ !create rhs vectors, store in work(:,:,1)
+ work(1,:)=(-(5./2.)*F%ColVals(:,j,1)+(2.)*F%ColVals(:,j,2)   &
+          +(1./2.)*F%ColVals(:,j,3) )/h
+          
+ work(2,:)=(-(5./9.)*F%ColVals(:,j,1)-(1./2.)*F%ColVals(:,j,2)   &
+          +(1.)*F%ColVals(:,j,3)+(1./18.)*F%ColVals(:,j,4) )/h
+             
+ work(3,:)=( (1./36.)* ( F%ColVals(:,j,5) - F%ColVals(:,j,1) )  &
+            + (7./9.)* ( F%ColVals(:,j,4) - F%ColVals(:,j,2) ) )/h
+            
+ do k=4,m3-3
+  work(k,:)=( (c1/6.)* ( F%ColVals(:,j,k+3) - F%ColVals(:,j,k-3) )  &
+             + (b1/4.)* ( F%ColVals(:,j,k+2) - F%ColVals(:,j,k-2) )  &
+             + (a1/2.)* ( F%ColVals(:,j,k+1) - F%ColVals(:,j,k-1) ) )/h
+ enddo
+ 
+ work(m3-2,:)=(-(1./36.)* ( F%ColVals(:,j,m3-4) - F%ColVals(:,j,m3) )  &
+            - (7./9.)* ( F%ColVals(:,j,m3-3) - F%ColVals(:,j,m3-1) ) )/h
+ work(m3-1,:)= ( (5./9.)*F%ColVals(:,j,m3)+(1./2.)*F%ColVals(:,j,m3-1)   &
+                   -(1.)*F%ColVals(:,j,m3-2)-(1./18.)*F%ColVals(:,j,m3-3) )/h                   
+ work(m3 ,:)= ( (5./2.)*F%ColVals(:,j,m3)-(2.)*F%ColVals(:,j,m3-1)   &
+                   -(1./2.)*F%ColVals(:,j,m3-2) )/h
+!! These are high order one sided formula, to use, 
+!! the setup matrix need needs to be adjusted
+ !work(m3-1,:)=( (24.)*F%ColVals(:,j,m3)+(130.)*F%ColVals(:,j,m3-1)   &
+ !             -(240.)*F%ColVals(:,j,m3-2)+(120.)*F%ColVals(:,j,m3-3)   &
+ !              -(40.)*F%ColVals(:,j,m3-4)+(6.)*F%ColVals(:,j,m3-5) )/(120.*h)   
+ !work(m3,:)=( (274.)*F%ColVals(:,j,m3)-(600.)*F%ColVals(:,j,m3-1)   &
+ !            +(600.)*F%ColVals(:,j,m3-2)-(400.)*F%ColVals(:,j,m3-3)   &
+ !            +(150.)*F%ColVals(:,j,m3-4)-(24.)*F%ColVals(:,j,m3-5) )/(120.*h)  
+             
+             
+!Compute the z derivatives for plane j, overwriting the array work
+  call DGBTRS('N',m3,2,2,m1,F%Derivs(idim)%A_Diff,7,F%Derivs(idim)%ipiv,work(1,1),m3,ierr)
+
+!!store the results in deriv(:,j,:) and apply metric from s <--> z
+!! i.e. dF/dz = dF/ds *ds/dz
+ do i=1,m1
+  dF%ColVals(i,j,:)=work(:,i) * dsdz(:)
+ enddo
+      
+!Go on to the next j plane
+ enddo
+
+end subroutine compact_ddz
+
+subroutine compact_ddz_array(SV,F,dF,n1,n2,n3)
+ use class_CoordinateMap
+ implicit none
+ type(ScalarVariable),intent(in)         :: SV
+ integer                                 :: n1,n2,n3
+ real(kind=8), intent(inout)             :: dF(n1,n2,n3)
+ real(kind=8), intent(inout)             :: F(n1,n2,n3)
+ integer                                 :: idim=3
+ integer                                 :: i,j,k,ierr
+ integer, SAVE                           :: myid,numprocs
+ integer,SAVE                            :: m1,m2,m3
+ real(kind=8),SAVE                       :: h,a1,b1,c1
+ real(kind=8),allocatable,SAVE           :: work(:,:)
+ real(kind=8),allocatable,SAVE           :: dsdz(:)
+ logical, SAVE                           :: first_entry=.TRUE.
+   
+  include 'mpif.h'
+  if( first_entry ) then
+   call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)      
+   call mpi_comm_size (MPI_COMM_WORLD,numprocs,ierr)
+   !!=================================================================== 
+   !! m1,m2,m3    dimensions of array with data to be differentiated
+   !! h           x grid spacing
+   !! a1,b1,c1    coefficients of method, assigned to Derivative object
+   !!=================================================================== 
+   !! in idim=3 case, we work w/ data stored in "Column" format
+   m1=SV%DataMap%ColDims(1,myid)
+   m2=SV%DataMap%ColDims(2,myid)
+   m3=SV%DataMap%ColDims(3,myid)
+   allocate(work(m3,m1))
+   allocate(dsdz(m3))
+   h = SV%Grid%SpaceDims(idim)%ds
+   dsdz = 1.d0/SV%Grid%SpaceDims(idim)%dxds
+   a1 = SV%Derivs(idim)%a1
+   b1 = SV%Derivs(idim)%b1
+   c1 = SV%Derivs(idim)%c1
+   first_entry=.FALSE.
+  endif  
+ 
+!loop through each xz plane       
+ do j=1,m2
+ 
+ !create rhs vectors, store in work(:,:,1)
+ work(1,:)=(-(5./2.)*F(:,j,1)+(2.)*F(:,j,2)   &
+          +(1./2.)*F(:,j,3) )/h
+          
+ work(2,:)=(-(5./9.)*F(:,j,1)-(1./2.)*F(:,j,2)   &
+          +(1.)*F(:,j,3)+(1./18.)*F(:,j,4) )/h
+             
+ work(3,:)=( (1./36.)* ( F(:,j,5) - F(:,j,1) )  &
+            + (7./9.)* ( F(:,j,4) - F(:,j,2) ) )/h
+            
+ do k=4,m3-3
+  work(k,:)=( (c1/6.)* ( F(:,j,k+3) - F(:,j,k-3) )  &
+             + (b1/4.)* ( F(:,j,k+2) - F(:,j,k-2) )  &
+             + (a1/2.)* ( F(:,j,k+1) - F(:,j,k-1) ) )/h
+ enddo
+ 
+ work(m3-2,:)=(-(1./36.)* ( F(:,j,m3-4) - F(:,j,m3) )  &
+            - (7./9.)* ( F(:,j,m3-3) - F(:,j,m3-1) ) )/h
+ work(m3-1,:)= ( (5./9.)*F(:,j,m3)+(1./2.)*F(:,j,m3-1)   &
+                   -(1.)*F(:,j,m3-2)-(1./18.)*F(:,j,m3-3) )/h                   
+ work(m3 ,:)= ( (5./2.)*F(:,j,m3)-(2.)*F(:,j,m3-1)   &
+                   -(1./2.)*F(:,j,m3-2) )/h             
+             
+!Compute the z derivatives for plane j, overwriting the array work
+ call DGBTRS('N',m3,2,2,m1,SV%Derivs(idim)%A_Diff,7,SV%Derivs(idim)%ipiv,work(1,1),m3,ierr)
+
+!!store the results in deriv(:,j,:) and apply metric from s <--> z
+!! i.e. dF/dz = dF/ds *ds/dz
+ do i=1,m1
+  dF(i,j,:)=work(:,i) * dsdz(:)
+ enddo
+      
+!Go on to the next j plane
+ enddo
+
+end subroutine compact_ddz_array
+
+subroutine filter_x(F,FF)
+ implicit none
+ type( ScalarVariable ), intent(inout)   :: FF
+ type( ScalarVariable ), intent(inout)   :: F
+ integer                                 :: idim=1
+ integer                                 :: m1,m2,m3
+ integer                                 :: i,j,k
+ real(kind=8)                            :: a,b,c,d
+ real(kind=8),allocatable                :: work(:,:)
+ integer                                 :: ierr
+ integer, SAVE                           :: myid,numprocs
+ logical, SAVE                           :: first_entry=.TRUE.
+   
+  include 'mpif.h'
+  if( first_entry ) then
+   call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)      
+   call mpi_comm_size (MPI_COMM_WORLD,numprocs,ierr)
+   first_entry=.FALSE.
+  endif 
+ 
+!!===================================================================
+ !! m1,m2,m3    dimensions of array with data to be differentiated
+ !! a,b,c,d     coefficients of method, assigned to deriv object
+!!===================================================================
+ 
+ m1=F%DataMap%SlabDims(1,myid)
+ m2=F%DataMap%SlabDims(2,myid)
+ m3=F%DataMap%SlabDims(3,myid)
+ allocate(work(m1,m2))
+ 
+ a = F%Derivs(idim)%a
+ b = F%Derivs(idim)%b
+ c = F%Derivs(idim)%c
+ d = F%Derivs(idim)%d
+
+!!loop through each xy horizontal plane       
+ do k=1,m3
+ 
+ !Create rhs vectors, store in work(:,:)
+ work(1,:)=  (15./16.)*F%SlabVals(1,:,k)                             & 
+            +(1./16)*( 4.*F%SlabVals(2,:,k) - 6.*F%SlabVals(3,:,k)   &
+                      +4.*F%SlabVals(4,:,k) - F%SlabVals(5,:,k) )   
+                           
+ work(2,:)=  (3./4.)*F%SlabVals(2,:,k)                             & 
+            +(1./16)*( F%SlabVals(1,:,k) + 6.*F%SlabVals(3,:,k)   &
+                      -4.*F%SlabVals(4,:,k) + F%SlabVals(5,:,k) )
+
+ work(3,:)=  (5./8.)*F%SlabVals(3,:,k)                             & 
+            +(1./16)*(-F%SlabVals(1,:,k) + 4.*F%SlabVals(2,:,k)   &
+                      +4.*F%SlabVals(4,:,k) - F%SlabVals(5,:,k) )
+
+ do i=4,m1-3
+  work(i,:)= ( a*(F%SlabVals(i,:,k))   & 
+             + b*(F%SlabVals(i+1,:,k)+F%SlabVals(i-1,:,k))   & 
+             + c*(F%SlabVals(i+2,:,k)+F%SlabVals(i-2,:,k))   &
+             + d*(F%SlabVals(i+3,:,k)+F%SlabVals(i-3,:,k))  )
+ enddo
+
+ work(m1,:)=  (15./16.)*F%SlabVals(m1,:,k)                             & 
+            +(1./16)*( 4.*F%SlabVals(m1-1,:,k) - 6.*F%SlabVals(m1-2,:,k)   &
+                      +4.*F%SlabVals(m1-3,:,k) - F%SlabVals(m1-4,:,k) )   
+                           
+ work(m1-1,:)=  (3./4.)*F%SlabVals(m1-1,:,k)                             & 
+            +(1./16)*( F%SlabVals(m1,:,k) + 6.*F%SlabVals(m1-2,:,k)   &
+                      -4.*F%SlabVals(m1-3,:,k) + F%SlabVals(m1-4,:,k) )
+
+ work(m1-2,:)=  (5./8.)*F%SlabVals(m1-2,:,k)                             & 
+            +(1./16)*(-F%SlabVals(m1,:,k) + 4.*F%SlabVals(m1-1,:,k)   &
+                      +4.*F%SlabVals(m1-3,:,k) - F%SlabVals(m1-4,:,k) )
+
+!!Compute the filtered for plane k, overwriting the array work
+  call DGBTRS('N',m1,2,2,m2,F%Derivs(idim)%A_filt,7,F%Derivs(idim)%jpiv,work,m1,ierr)
+
+  do j=1,m2
+   FF%SlabVals(:,j,k)=work(:,j)
+  enddo
+
+!!Go on to the next k plane
+ enddo
+
+ if(allocated(work)) deallocate(work)
+ return
+end subroutine filter_x
+
+subroutine filter_y(F,FF)
+ implicit none
+ type( ScalarVariable ), intent(inout)   :: FF
+ type( ScalarVariable ), intent(inout)   :: F
+ integer                                 :: idim=2
+ integer                                 :: m1,m2,m3
+ integer                                 :: i,j,k
+ real(kind=8)                            :: a,b,c,d
+ real(kind=8),allocatable                :: work(:,:)
+ integer                                 :: ierr
+ integer, SAVE                           :: myid,numprocs
+ logical, SAVE                           :: first_entry=.TRUE.
+   
+  include 'mpif.h'
+  if( first_entry ) then
+   call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)      
+   call mpi_comm_size (MPI_COMM_WORLD,numprocs,ierr)
+   first_entry=.FALSE.
+  endif 
+ 
+!!===================================================================
+ !! m1,m2,m3    dimensions of array with data to be differentiated
+ !! a,b,c,d     coefficients of method, assigned to deriv object
+!!===================================================================
+ 
+ m1=F%DataMap%SlabDims(1,myid)
+ m2=F%DataMap%SlabDims(2,myid)
+ m3=F%DataMap%SlabDims(3,myid)
+ allocate(work(m2,m1))
+ 
+ a = F%Derivs(idim)%a
+ b = F%Derivs(idim)%b
+ c = F%Derivs(idim)%c
+ d = F%Derivs(idim)%d
+
+!!loop through each xy horizontal plane       
+ do k=1,m3
+
+ work(1,:)=  (15./16.)*F%SlabVals(:,1,k)                             & 
+            +(1./16)*( 4.*F%SlabVals(:,2,k) - 6.*F%SlabVals(:,3,k)   &
+                      +4.*F%SlabVals(:,4,k) - F%SlabVals(:,5,k) )   
+                           
+ work(2,:)=  (3./4.)*F%SlabVals(:,2,k)                             & 
+            +(1./16)*( F%SlabVals(:,1,k) + 6.*F%SlabVals(:,3,k)   &
+                      -4.*F%SlabVals(:,4,k) + F%SlabVals(:,5,k) )
+
+ work(3,:)=  (5./8.)*F%SlabVals(:,3,k)                             & 
+            +(1./16)*(-F%SlabVals(:,1,k) + 4.*F%SlabVals(:,2,k)   &
+                      +4.*F%SlabVals(:,4,k) - F%SlabVals(:,5,k) ) 
+              
+ do j=4,m2-3
+  work(j,:)= ( a*(F%SlabVals(:,j,k))   & 
+             + b*(F%SlabVals(:,j+1,k)+F%SlabVals(:,j-1,k))   & 
+             + c*(F%SlabVals(:,j+2,k)+F%SlabVals(:,j-2,k))   &
+             + d*(F%SlabVals(:,j+3,k)+F%SlabVals(:,j-3,k))  ) 
+ enddo
+
+ work(m2,:)=  (15./16.)*F%SlabVals(:,m2,k)                             & 
+             +(1./16)*( 4.*F%SlabVals(:,m2-1,k) - 6.*F%SlabVals(:,m2-2,k)   &
+                      +4.*F%SlabVals(:,m2-3,k) - F%SlabVals(:,m2-4,k) )   
+                           
+ work(m2-1,:)=  (3./4.)*F%SlabVals(:,m2-1,k)                             & 
+             +(1./16)*( F%SlabVals(:,m2,k) + 6.*F%SlabVals(:,m2-2,k)   &
+                      -4.*F%SlabVals(:,m2-3,k) + F%SlabVals(:,m2-4,k) )
+
+ work(m2-2,:)=  (5./8.)*F%SlabVals(:,m2-2,k)                             & 
+             +(1./16)*(-F%SlabVals(:,m2,k) + 4.*F%SlabVals(:,m2-1,k)   &
+                      +4.*F%SlabVals(:,m2-3,k) - F%SlabVals(:,m2-4,k) ) 
+
+             
+  call DGBTRS('N',m2,2,2,m1,F%Derivs(idim)%A_filt,7,F%Derivs(idim)%jpiv,work,m2,ierr)
+          
+!!store the results in deriv(:,:,k) 
+ FF%SlabVals(1:m1,1:m2,k)=transpose( work(1:m2,1:m1)  )
+                                              
+!Go on to the next k plane
+ enddo
+
+ if(allocated(work)) deallocate(work)
+ return
+end subroutine filter_y
+
+subroutine filter_z(F,FF)
+ implicit none
+ type( ScalarVariable ), intent(inout)   :: FF
+ type( ScalarVariable ), intent(inout)   :: F
+ integer                                 :: idim=3
+ integer                                 :: m1,m2,m3
+ integer                                 :: i,j,k
+ real(kind=8)                            :: a,b,c,d
+ real(kind=8),allocatable                :: work(:,:)
+ integer                                 :: ierr
+ integer, SAVE                           :: myid,numprocs
+ logical, SAVE                           :: first_entry=.TRUE.
+   
+  include 'mpif.h'
+  if( first_entry ) then
+   call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)      
+   call mpi_comm_size (MPI_COMM_WORLD,numprocs,ierr)
+   first_entry=.FALSE.
+  endif 
+ 
+ !!===================================================================
+ !! m1,m2,m3    dimensions of array with data to be differentiated
+ !! a,b,c,d     coefficients of method, assigned to deriv object
+!!===================================================================
+ 
+ !! in idim=3 case, we work w/ data stord in "Column" format
+ m1=F%DataMap%ColDims(1,myid)
+ m2=F%DataMap%ColDims(2,myid)
+ m3=F%DataMap%ColDims(3,myid)
+ allocate(work(m3,m1))
+  
+ a = F%Derivs(idim)%a
+ b = F%Derivs(idim)%b
+ c = F%Derivs(idim)%c
+ d = F%Derivs(idim)%d
+ 
+!loop through each xz plane       
+ do j=1,m2
+
+ !create rhs vectors, store in work(:,:,1)
+ work(1,:)=  (15./16.)*F%SlabVals(:,j,1)                             & 
+            +(1./16)*( 4.*F%SlabVals(:,j,2) - 6.*F%SlabVals(:,j,3)   &
+                      +4.*F%SlabVals(:,j,4) - F%SlabVals(:,j,5) )   
+                           
+ work(2,:)=  (3./4.)*F%SlabVals(:,j,2)                             & 
+            +(1./16)*( F%SlabVals(:,j,1) + 6.*F%SlabVals(:,j,3)   &
+                      -4.*F%SlabVals(:,j,4) + F%SlabVals(:,j,5) )
+
+ work(3,:)=  (5./8.)*F%SlabVals(:,j,3)                             & 
+            +(1./16)*(-F%SlabVals(:,j,1) + 4.*F%SlabVals(:,j,2)   &
+                      +4.*F%SlabVals(:,j,4) - F%SlabVals(:,j,5) ) 
+            
+ do k=4,m3-3
+  work(k,:)= ( a*(F%SlabVals(:,j,k))   & 
+             + b*(F%SlabVals(:,j,k+1)+F%SlabVals(:,j,k-1))   & 
+             + c*(F%SlabVals(:,j,k+2)+F%SlabVals(:,j,k-2))   &
+             + d*(F%SlabVals(:,j,k+3)+F%SlabVals(:,j,k-3))  ) 
+ enddo
+ 
+ work(m3,:)=  (15./16.)*F%SlabVals(:,j,m3)                             & 
+            +(1./16)*( 4.*F%SlabVals(:,j,m3-1) - 6.*F%SlabVals(:,j,m3-2)   &
+                      +4.*F%SlabVals(:,j,m3-3) - F%SlabVals(:,j,m3-4) )   
+                           
+ work(m3-1,:)=  (3./4.)*F%SlabVals(:,j,m3-1)                             & 
+            +(1./16)*( F%SlabVals(:,j,m3) + 6.*F%SlabVals(:,j,m3-2)   &
+                      -4.*F%SlabVals(:,j,m3-3) + F%SlabVals(:,j,m3-4) )
+
+ work(m3-2,:)=  (5./8.)*F%SlabVals(:,j,m3-2)                             & 
+            +(1./16)*(-F%SlabVals(:,j,m3) + 4.*F%SlabVals(:,j,m3-1)   &
+                      +4.*F%SlabVals(:,j,m3-3) - F%SlabVals(:,j,m3-4) )
+                      
+  call DGBTRS('N',m3,2,2,m1,F%Derivs(idim)%A_filt,7,F%Derivs(idim)%jpiv,work(1,1),m3,ierr)
+
+!!store the results in FF(:,j,:)
+ do i=1,m1
+  FF%ColVals(i,j,:)=work(:,i)
+ enddo
+      
+!Go on to the next j plane
+ enddo
+
+ if(allocated(work)) deallocate(work)
+end subroutine filter_z
+
+!=============================================================== 
+!===============================================================
+ subroutine get_ghost_data(xdim_periodic,ydim_periodic,F)
+  
+  implicit none
+  include 'mpif.h'
+  type( ScalarVariable ) :: F
+  logical                :: xdim_periodic,ydim_periodic
+  integer                :: status_array(mpi_status_size,1024)
+  integer                :: nreqs,reqs(1024),ierr
+  integer                :: nx,ny,locnz
+  integer, SAVE          :: myid,numprocs
+  logical, SAVE          :: first_entry=.TRUE.
+   
+  if( first_entry ) then
+   call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)      
+   call mpi_comm_size (MPI_COMM_WORLD,numprocs,ierr)
+   first_entry=.FALSE.
+  endif 
+
+ 
+  
+  !!============================================================================
+  !! for x periodic case
+  !!============================================================================
+  if( xdim_periodic ) then
+   nx = F%DataMap%SlabDims(1,myid)
+   F%Ghost_x(:,:,1) = F%SlabVals(nx,:,:)  !! left
+   F%Ghost_x(:,:,2) = F%SlabVals(1,:,:)   !! right
+  endif
+  
+  !!============================================================================
+  !! for y periodic case
+  !!============================================================================
+  if( ydim_periodic ) then
+   ny = F%DataMap%SlabDims(2,myid)
+   F%Ghost_y(:,:,1) = F%SlabVals(:,ny,:)  !! front
+   F%Ghost_y(:,:,2) = F%SlabVals(:,1,:)   !! back
+  endif
+  !!============================================================================
+  !!============================================================================
+   
+  if(numprocs==1) return 
+  !!============================================================================
+  !!============================================================================
+  
+  
+  !!============================================================================
+  !!MULTI-PROCESSOR CASE: INTERIOR NODES  ======================================
+  !!============================================================================
+  if( numprocs>1 .and. myid > 0 .and. myid < numprocs-1 ) then  
+  
+   nreqs=0
+   !get data from north neighbor
+   call get_gvals_from_north(nreqs,reqs,F)
+   nreqs=nreqs+1
+   
+   !get data from south neighbor
+   call get_gvals_from_south(nreqs,reqs,F)
+   nreqs=nreqs+1
+   
+   !send data to north
+   call send_gvals_north(nreqs,reqs,F)
+   nreqs=nreqs+1
+   
+   !send data to south
+   call send_gvals_south(nreqs,reqs,F)
+   nreqs=nreqs+1
+   
+   call mpi_waitall(nreqs,reqs,status_array,ierr)
+  
+  !!============================================================================
+  !!MULTI-PROCESSOR CASE:  TOP NODE  ===========================================
+  !!============================================================================
+  elseif( numprocs>1 .and. myid==numprocs-1 ) then 
+   nreqs=0
+   
+   !get data from south neighbor
+   call get_gvals_from_south(nreqs,reqs,F)
+   nreqs=nreqs+1
+   
+   call send_gvals_south(nreqs,reqs,F)   !!
+   nreqs=nreqs+1
+   
+   call mpi_waitall(nreqs,reqs,status_array,ierr)
+  
+  !!============================================================================
+  !!MULTI-PROCESSOR CASE:  BOTTOM NODE  ========================================
+  !!============================================================================
+  elseif( numprocs>1 .and. myid==0 ) then  !! bottom node
+   
+   nreqs=0
+   call get_gvals_from_north(nreqs,reqs,F)  !!get data from north
+   nreqs=nreqs+1
+   
+   !send data to north
+   call send_gvals_north(nreqs,reqs,F)
+   nreqs=nreqs+1
+      
+   call mpi_waitall(nreqs,reqs,status_array,ierr)
+      
+  endif  
+  
+ end subroutine get_ghost_data
+!=============================================================== 
+!===============================================================
+
+
+!!===========================================================
+subroutine get_gvals_from_north(numreqs,reqs,F)
+  implicit none
+  include 'mpif.h'
+  type( ScalarVariable ) :: F
+  integer                :: comm,status_array(mpi_status_size,1024)
+  integer                :: numreqs,reqs(1024),myid,ierr,numprocs
+  integer                :: nx,ny,locnz,source,dest,tag,numwords,j
+  
+  call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)      !!  ====> myid
+  call mpi_comm_size (MPI_COMM_WORLD,numprocs,ierr)  !!  ====> numprocs
+       
+  if(numprocs==1) then
+   write(0,*) 'myid  numprocs ',myid,numprocs
+   write(0,*) 'I dont have a north neighbor!!'
+   stop ' stopping in get_vals_from_north'
+  endif
+  
+  nx = F%DataMap%SlabDims(1,myid)
+  ny = F%DataMap%SlabDims(2,myid)
+  locnz = F%DataMap%SlabDims(3,myid)
+       
+  source=myid+1!! NORTH neighbor
+  dest=myid   !! me
+  numwords=(nx)*(ny)  
+  tag=100
+    
+  j=numreqs+1
+  call MPI_IRECV(F%Ghost_z(1,1,2),numwords,    &
+                 MPI_DOUBLE_PRECISION,source,tag,comm,  &
+                 reqs(j),ierr )
+                  
+   return
+  end subroutine get_gvals_from_north
+  !!===========================================================
+  
+!!===========================================================
+subroutine get_gvals_from_south(numreqs,reqs,F)
+  implicit none
+  include 'mpif.h'
+  type( ScalarVariable ) :: F
+  integer                :: comm,status_array(mpi_status_size,1024)
+  integer                :: numreqs,reqs(1024),myid,ierr,numprocs
+  integer                :: nx,ny,locnz,source,dest,tag,numwords,j
+  
+  call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)      !!  ====> myid
+  call mpi_comm_size (MPI_COMM_WORLD,numprocs,ierr)  !!  ====> numprocs
+       
+  if(numprocs==1) then
+   write(0,*) 'myid  numprocs ',myid,numprocs
+   write(0,*) 'I dont have a south neighbor!!'
+   stop ' stopping in get_vals_from_south'
+  endif
+  
+  nx = F%DataMap%SlabDims(1,myid)
+  ny = F%DataMap%SlabDims(2,myid)
+  locnz = F%DataMap%SlabDims(3,myid)
+       
+  source=myid-1!! SOUTH neighbor
+  dest=myid   !! me
+  numwords=(nx)*(ny)  
+  tag=100
+    
+  j=numreqs+1
+  call MPI_IRECV(F%Ghost_z(1,1,1),numwords,    &
+                 MPI_DOUBLE_PRECISION,source,tag,comm,  &
+                 reqs(j),ierr )
+                  
+   return
+  end subroutine get_gvals_from_south
+  !!===========================================================
+  
+  
+!!=========================================================== 
+!!===========================================================
+ subroutine send_gvals_south(numreqs,reqs,F)
+  implicit none
+  include 'mpif.h'
+  type( ScalarVariable ) :: F
+  integer                :: comm,status_array(mpi_status_size,1024)
+  integer                :: numreqs,reqs(1024),myid,ierr,numprocs
+  integer                :: nx,ny,locnz,source,dest,tag,numwords,j
+  
+  call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)      !!  ====> myid
+  call mpi_comm_size (MPI_COMM_WORLD,numprocs,ierr)  !!  ====> numprocs
+       
+  if(numprocs==1) then
+   write(0,*) 'myid  numprocs ',myid,numprocs
+   write(0,*) 'I dont have a south neighbor!!'
+   stop ' stopping in send_vals_south'
+  endif
+  
+  nx = F%DataMap%SlabDims(1,myid)
+  ny = F%DataMap%SlabDims(2,myid)
+  locnz = F%DataMap%SlabDims(3,myid)
+               
+  source=myid  !! me
+  dest=myid-1  !! SOUTH neighbor
+  numwords=(nx)*(ny) 
+  tag=100
+   
+  !! send lowest data to south
+  j=numreqs+1   !! nreqs is the number of previous requests for myid
+  call MPI_ISEND(F%SlabVals(1,1,1),numwords,   &
+                 MPI_DOUBLE_PRECISION,dest,tag,comm, &
+                 reqs(j),ierr)
+          
+  return
+ end subroutine send_gvals_south
+  !!===========================================================
+  
+!!=========================================================== 
+!!===========================================================
+ subroutine send_gvals_north(numreqs,reqs,F)
+  implicit none
+  include 'mpif.h'
+  type( ScalarVariable ) :: F
+  integer                :: comm,status_array(mpi_status_size,1024)
+  integer                :: numreqs,reqs(1024),myid,ierr,numprocs
+  integer                :: nx,ny,locnz,source,dest,tag,numwords,j
+  
+  call mpi_comm_rank (MPI_COMM_WORLD,myid,ierr)      !!  ====> myid
+  call mpi_comm_size (MPI_COMM_WORLD,numprocs,ierr)  !!  ====> numprocs
+       
+  if(numprocs==1) then
+   write(0,*) 'myid  numprocs ',myid,numprocs
+   write(0,*) 'I dont have a south neighbor!!'
+   stop ' stopping in send_vals_south'
+  endif
+  
+  nx = F%DataMap%SlabDims(1,myid)
+  ny = F%DataMap%SlabDims(2,myid)
+  locnz = F%DataMap%SlabDims(3,myid)
+               
+  source=myid  !! me
+  dest=myid+1  !! NORTH neighbor
+  numwords=(nx)*(ny) 
+  tag=100
+   
+  !! send top data to north
+  j=numreqs+1   !! nreqs is the number of previous requests for myid
+  call MPI_ISEND(F%SlabVals(1,1,locnz),numwords,   &
+                 MPI_DOUBLE_PRECISION,dest,tag,comm, &
+                 reqs(j),ierr)
+          
+  return
+ end subroutine send_gvals_north
+  !!===========================================================
+
+
+
+end Module class_ScalarVariable
Index: /trunk/00FlowSolve_KW/src/class/ClassSpaceDimension.f90.bk
===================================================================
--- /trunk/00FlowSolve_KW/src/class/ClassSpaceDimension.f90.bk	(revision 6)
+++ /trunk/00FlowSolve_KW/src/class/ClassSpaceDimension.f90.bk	(revision 6)
@@ -0,0 +1,126 @@
+Module class_SpaceDimension
+!!=====================================================
+!!=====================================================
+!! A SpaceDimension is simply a CoordinateMap 
+!! combined with a spatial index 1,2 or 3.
+!! Recall...
+!! Coordinate maps describe the sampling distribution 
+!! associated with a coordinate.
+!!
+!! Notation: coordinate x is parameterized via s, 
+!! i.e. x=x(s). The discrete arrays [x] [s] and [dxds] 
+!! define the mapping. Particular maps are specified  
+!! via their "label". Some maps require parameters, 
+!! which are specified via the 2 vector params.
+!!
+!! Currently implemented maps: 
+!!        unit, identity, cheby, periodic
+!!=====================================================
+!!=====================================================
+ use class_CoordinateMap
+ implicit none
+ public  :: Map2SpaceDimension
+ public  :: DeleteSpaceDimension
+ public  :: DescribeSpaceDimension
+ !public  :: MergeDimensions
+ 
+ type SpaceDimension  
+  integer                    :: DirIndex
+  type( CoordinateMap )      :: map
+ end type SpaceDimension
+ 
+ interface assignment (=)
+  module procedure EqualSpaceDimensions
+ end interface
+ 
+Contains      
+  
+  subroutine Map2SpaceDimension(map,id,spacedim)   
+   use class_CoordinateMap
+   implicit none  
+   type( CoordinateMap ),intent(in)       :: map
+   type( SpaceDimension ),intent(inout)   :: spacedim
+   integer                                :: id
+   spacedim%DirIndex=id !! i.e. 1,2 or 3   
+   spacedim%map = map   
+  end subroutine Map2SpaceDimension
+  
+  
+  
+  
+  subroutine DeleteSpaceDimension(dim)
+   use class_CoordinateMap
+   type( SpaceDimension )  :: dim
+   call DeleteCoordinateMap( dim%map )  !!DeleteCoordinateMap checks allocation first
+  end subroutine DeleteSpaceDimension
+   
+   
+   
+   
+  subroutine EqualSpaceDimensions(new,old)
+   use class_CoordinateMap
+   type( SpaceDimension ),intent(inout) :: new
+   type( SpaceDimension ),intent(in)    :: old 
+   new%map = NewCoordinateMap(old%map%npts,       &
+                              old%map%label,      &
+                              old%map%x,          &
+                              old%map%s,          &
+                              old%map%dxds,       &
+                              old%map%d2xds2 )
+   new%DirIndex = old%DirIndex
+  end subroutine EqualSpaceDimensions
+
+
+  
+
+  
+!  function MergeDimensions(xdim,ydim,zdim) result(AllSpaceDims)
+!   type( SpaceDimension ),intent(in)   :: xdim
+!   type( SpaceDimension ),intent(in)   :: ydim
+!   type( SpaceDimension ),intent(in)   :: zdim
+!   type( SpaceDimension )   :: AllSpaceDims(3)
+!    !! type SpaceDimension has an overloaded assignment operator
+!     AllSpaceDims(1) = xdim
+!     AllSpaceDims(2) = ydim
+!     AllSpaceDims(3) = zdim    
+!  end function MergeDimensions
+    
+  
+  subroutine DescribeSpaceDimension(dim,docfile)
+   use class_CoordinateMap
+   implicit none
+   type( SpaceDimension ), intent(in):: dim
+   character (len=80 )               :: coordlabel
+   character (len=80 )               :: coordname
+   character (len=80 )               :: docfile
+   integer                           :: myid
+   integer                           :: ierr
+   include 'mpif.h'
+   
+   call mpi_comm_rank(MPI_COMM_WORLD,myid,ierr) 
+   
+   select case( dim%DirIndex )
+    case(1)
+     coordlabel='x  (or x1 or xsi), parameterized by s -----> x(s)'
+     coordname=' x '
+    case(2)
+     coordlabel='y  (or y1 or eta), parameterized by s -----> y(s)'
+     coordname=' y '
+    case(3)
+     coordlabel='z  (or z1 or zeta), parameterized by s -----> z(s)'
+     coordname=' z '
+   end select
+   
+   if(myid==0) then
+    open(1,file=docfile,position='append')
+    write(1,*) ' '
+    write(1,*) '============================================================'
+    write(1,*) 'SpaceDimension  ',dim%DirIndex
+    write(1,*)  trim(coordlabel)   
+    call DescribeCoordinateMap(dim%map,coordname,docfile,myid)
+    write(1,*) '  '
+    close(1)
+   endif
+  end subroutine DescribeSpaceDimension
+    
+end Module class_SpaceDimension !============================================
Index: /trunk/00FlowSolve_KW/src/class/ClassTensorProductGrid.f90
===================================================================
--- /trunk/00FlowSolve_KW/src/class/ClassTensorProductGrid.f90	(revision 6)
+++ /trunk/00FlowSolve_KW/src/class/ClassTensorProductGrid.f90	(revision 6)
@@ -0,0 +1,43 @@
+Module class_TensorProductGrid  
+ use class_CoordinateMap
+ implicit none
+ public  :: NewTensorProductGrid
+ public  :: DeleteTensorProductGrid
+ 
+ type TensorProductGrid  
+  integer                    :: DataDims(3)   !! npts along each coord. axis
+  type( CoordinateMap )      :: SpaceDims(3)  !! triplet of coordinate maps 
+ end type TensorProductGrid
+ 
+Contains           
+ 
+ subroutine NewTensorProductGrid(CoordMaps,Grid)
+  use class_CoordinateMap
+  implicit none 
+  type( CoordinateMap ),       intent(in)  :: CoordMaps(3)
+  type( TensorProductGrid ),intent(inout)  :: Grid
+  
+  Grid%SpaceDims(1) = CoordMaps(1)
+  Grid%SpaceDims(2) = CoordMaps(2)
+  Grid%SpaceDims(3) = CoordMaps(3)
+  
+  Grid%DataDims(1)  = CoordMaps(1)%npts 
+  Grid%DataDims(2)  = CoordMaps(2)%npts
+  Grid%DataDims(3)  = CoordMaps(3)%npts
+ end subroutine NewTensorProductGrid
+
+
+ 
+ subroutine DeleteTensorProductGrid(Grid)
+  use class_CoordinateMap
+  implicit none      
+  type( TensorProductGrid ),intent(inout)  :: Grid
+  
+  call DeleteCoordinateMap( Grid%SpaceDims(1) )
+  call DeleteCoordinateMap( Grid%SpaceDims(2) )
+  call DeleteCoordinateMap( Grid%SpaceDims(3) )
+ end subroutine DeleteTensorProductGrid
+
+
+
+end Module class_TensorProductGrid  !======================================
Index: /trunk/00FlowSolve_KW/src/class/Makefile
===================================================================
--- /trunk/00FlowSolve_KW/src/class/Makefile	(revision 6)
+++ /trunk/00FlowSolve_KW/src/class/Makefile	(revision 6)
@@ -0,0 +1,50 @@
+SHELL=/bin/sh
+include Make.inc
+
+LIBNAME=	libscalarvariable.a
+LIBDIR =	${BASE}/lib/
+
+SRCS = 		etc.f90                       \
+			ClassCoordinateMap.f90        \
+			ClassTensorProductGrid.f90    \
+			ClassDataDecomposition.f90    \
+			ClassDerivative.f90           \
+			ClassScalarVariable.f90       \
+			ClassBoundaryOperator.f90     \
+			ClassBoundaryConditions.f90   \
+			ClassSAOperator.f90           
+			
+
+OBJS = 		${SRCS:.f90=.o}
+
+all:		$(OBJS)
+			$(AR) $(AR_FLAGS) ${LIBNAME} ${OBJS}
+			ranlib ${LIBNAME}
+			mv -f *.mod ${BASE}/src/utils
+			mv -f ${LIBNAME} ${LIBDIR}
+
+clean:
+		@echo
+		@echo "class:"
+		rm -f *.o *.mod Make.inc OOFlowSolve.h
+	
+.SUFFIXES: $(SUFFIXES) .f90
+
+.f90.o:
+	${F90} $(FOPTFLAGS) \
+	 $(ALL_INCLUDES) -c $<
+	
+	
+
+# Module dependencies:	
+ClassCoordinateMap.o: 		etc.o
+ClassTensorProductGrid.o: 	ClassCoordinateMap.o
+ClassDataDecomposition.o: 	ClassTensorProductGrid.o 
+ClassDerivative.o: 		ClassDataDecomposition.o
+ClassScalarVariable.o: 		ClassDerivative.o  
+ClassBoundaryOperator.o: 	ClassScalarVariable.o 
+ClassBoundaryConditions.o: 	ClassBoundaryOperator.o   
+ClassSAOperator.o: 		ClassBoundaryConditions.o
+
+
+
Index: /trunk/00FlowSolve_KW/src/class/etc.f90
===================================================================
--- /trunk/00FlowSolve_KW/src/class/etc.f90	(revision 6)
+++ /trunk/00FlowSolve_KW/src/class/etc.f90	(revision 6)
@@ -0,0 +1,50 @@
+!!====================================================================================  
+  module etc
+!!====================================================================================
+   
+   character(len=80)             :: comment
+   character(len=80)             :: step_flag
+   character(len=80)             :: docfile
+   character(len=80)             :: memoryfile
+   character(len=80)             :: optionfile
+   
+   integer                       :: N=1,   NM1=2
+   integer                       :: MM0=1, MM1=2, MM2=3, MM3=4
+   integer                       :: PM0=1, PM1=2, PM2=3, PM3=4
+   integer                       :: N_oldest,M_oldest,P_oldest
+   
+   integer                       :: i, j, k, ierr
+   integer                       :: istep,istart,iend
+   integer                       :: numcalls
+   integer                       :: advance_particles_id
+   integer                       :: field_id
+      
+   integer,allocatable           :: numzplanes(:)
+   integer,allocatable           :: numzplanes_below(:)
+   integer,allocatable           :: numxplanes(:)
+   integer,allocatable           :: numxplanes_left(:)
+   integer,allocatable           :: my_klocal(:)
+   integer,allocatable           :: my_ilocal(:)
+   integer,allocatable           :: my_kglobal(:)
+   integer,allocatable           :: my_iglobal(:)
+   
+   real(kind=8),allocatable      :: numprocs_xy_planes(:,:,:,:)
+   real(kind=8),allocatable      :: int_weights_x(:)
+   real(kind=8),allocatable      :: int_weights_y(:)
+   real(kind=8),allocatable      :: int_weights_z(:)
+   
+   real(kind=8)                  :: t_secs,secs,cum_secs
+   real(kind=8)                  :: clock_start,rate
+   real(kind=8)                  :: my_z_limits(2)
+   real(kind=8)                  :: div_norm
+   real(kind=8)                  :: div_threshold
+   
+   real(kind=8)                  :: AllocatedMemoryGB = 0.d0
+   real(kind=8)                  :: NewAllocationGB = 0.d0
+   real(kind=8)                  :: NewDeletionGB = 0.d0
+   real(kind=8), parameter       :: Bytes_per_GB = 1024*1024*1024 
+   real(kind=8), parameter       :: GBperByte = 1.d0/Bytes_per_GB
+   
+!!====================================================================================  
+  end module etc
+!!====================================================================================
Index: /trunk/00FlowSolve_KW/src/flow_solve.f90
===================================================================
--- /trunk/00FlowSolve_KW/src/flow_solve.f90	(revision 6)
+++ /trunk/00FlowSolve_KW/src/flow_solve.f90	(revision 6)
@@ -0,0 +1,1496 @@
+!!=============================================================!!
+!!    Statified flow solver in in 2 or 3 space dimensions,     !!
+!!    defined over a tensor product grid. [i.e. 2 or 3         !!
+!!    independent vectors, each uniformly spaced wrt           !!
+!!    computational coordinates s, but arbitrarily mapped      !!
+!!    (x<-->s) to physical space coordinates completeley       !!
+!!    define the gridpoints.]                                  !!
+!!=============================================================!!
+!!    Features:                                                !!
+!!                                                             !!
+!!    Distributed memory parallel version using MPI, f90/95.   !!
+!!                                                             !!
+!!    Two scalars, which can be configured as combinations of  !!
+!!    density, temperature, salinity or passive tracers.       !!
+!!                                                             !!
+!!    Lagrangian particle tracking based on cubic spline       !!
+!!    interpolation.                                           !!
+!!                                                             !!
+!!    Spatial differentiation via fourier, sin, cos, or        !!
+!!    Chebyshev expansion methods or using 6th order compact   !!
+!!    differencing.                                            !!
+!!                                                             !!
+!!    Depending on boundary conditions and whether the grid    !!
+!!    is stretched or not, the pressure solves prior to the    !!
+!!    projection step are done in wavenumber space when        !!
+!!    possible, either exactly for uniform gridding or         !!
+!!    iteratively for stretched grids. For inhomogeneous       !!
+!!    BCs, a matrix free iterative scheme, preconditioned      !!
+!!    by incomplete factorization of the associated 2nd order  !!
+!!    FD operator is used. All outer iterations are based on   !!
+!!    Krylov methods implemented using Petsc.                  !!
+!!                                                             !!
+!!    2nd, 3rd or 4th order Adams Bashforth time stepping      !!
+!!    for the inertia, buoyancy and rotation terms.            !!
+!!                                                             !!
+!!    3rd or 4th order Adams Moulton implicit time stepping    !!
+!!    for the diffusion terms.                                 !!
+!!                                                             !!
+!!                                                             !!
+!!    Immersed boundary at non-gridpoint surface z=h(x,y)      !!
+!!                                                             !!
+!!=============================================================!!
+!!    Heavy lifting done using FFTW3, PETSC & LAPACK/BLAS.     !!
+!!    Output data written in NETCDF format. Browse w/ ncview.  !!
+!!=============================================================!!
+!!                                                             !!
+!!    Author: K. B. Winters                                    !!
+!!            Scripps Institution of Oceanography              !!
+!!                         &                                   !!
+!!            Mechanical and Aerospace Engineering             !!
+!!            University of California, San Diego              !!
+!!=============================================================!!  
+program flow_solve
+use etc
+implicit none
+
+call initialize
+do istep=istart,iend 
+ call write_results
+  call ibrd   
+   call apply_forcing        
+    call explicit_time_step
+     call implicit_time_step
+      call pressure_rhs
+       call pressure_solve
+        call project
+         call immersed_bdry
+          call advance_particles 
+           call toggle
+            enddo 
+             call finalize
+              stop 
+end program flow_solve
+
+!!=================================================================
+!!=================================================================
+subroutine ibrd
+ use mpi_params
+ use user_data, only: do_immersed_boundary
+ use etc,       only: MM0,N
+ use intermediate_variables
+ use immersed_boundary
+ implicit none 
+ integer  :: i
+ 
+ if(myid==0) write(0,*) '... calculating rhs functions '
+  call eos
+  call ibrd_1
+  call ibrd_2
+  call ibrd_3
+  call ibrd_4
+  call ibrd_5
+  
+  !! zero out any accelerations beneath IB surface
+  if( do_immersed_boundary ) then
+   do i=1,5
+    explicit_rhs(i,MM0)%SlabVals =                          &
+                  explicit_rhs(i,MM0)%SlabVals*IB_Filter
+    implicit_rhs(i,N)%SlabVals =                            &
+                  implicit_rhs(i,N)%SlabVals*IB_Filter
+   enddo
+  endif
+  
+end subroutine ibrd
+!!=================================================================
+!!=================================================================
+
+
+!!=================================================================
+!!=================================================================
+subroutine ibrd_1
+!! Routine to calculate the inertia and rotation terms for the 
+!! x momentum equation.
+!!
+!! N.B. beta_tilde is the dimensionless value of beta, the linear rate
+!! of change of the coriolis parameter f (d'less f=Rot) with latitude.
+!! When beta is nonzero, interpret positive {x,u} as northward, 
+!! {y,v} as westward. This is not standard, but is more convenient
+!! given the data decomposition in x and z and the convention that
+!! in 2d, the y dimension is suppressed.
+!! 
+!! For constant f, i.e. beta=0, positive {x,u} can be taken as east
+!! positive {y,v} can be taken as north in the usual way.
+!!=================================================================
+ use class_ScalarVariable   
+ use dependent_variables      
+ use intermediate_variables
+ use user_data,          only: Rot,beta_tilde,Re,nx,Lx,Lz         
+ use etc           
+ use operators
+ use mpi_params
+ implicit none 
+ logical,save               :: first_entry=.TRUE.
+ integer                    :: sign=-1, id=1, istat
+ real(kind=8),pointer,save  :: x(:)
+ real(kind=8)               :: x0, xx
+ 
+!!=================================================================
+!!=================================================================
+ if( first_entry .and. beta_tilde /= 0 ) then
+  allocate( x(nx), stat=istat )
+  if( istat /= 0  ) then
+   write(0,*) 'Allocating x(nx) in ibrd_1'
+   stop       'Allocation failed:  ibrd_1'
+  endif
+  x(:) = velocity(1)%Grid%SpaceDims(1)%x(:)  ! dimensionless x values
+  x0 = 0.5*(Lx/Lz)                           ! dimensionless x0 
+  first_entry=.FALSE.
+ endif
+!!=================================================================
+if(myid==0) write(0,*) '..............................',id
+!!=================================================================
+ 
+!!=================================================================
+!!=================================================================
+!! Compute gradient of (u), using `implicit_rhs' for storing results.
+!! Compute the dot product -( u dot grad(u) ).
+!!=================================================================
+!!================================================================= 
+   call gradient(velocity(id),implicit_rhs(1,N))
+  
+   !! -u dot grad(u)
+   call ScalarDotProduct( explicit_rhs(id,MM0),sign,           &
+                          velocity(1),                         &
+                          velocity(2),                         &
+                          velocity(3),                         &
+                          implicit_rhs(1,N),                   &
+                          implicit_rhs(2,N),                   &
+                          implicit_rhs(3,N) ) 
+   
+!!=================================================================
+!!=================================================================
+!! Add in  rotation term:  
+!!     explicit_rhs(1,MM0) <=== explicit_rhs(1,MM0) + Rot*(v)
+!!
+!! or  explicit_rhs(1,MM0) <=== explicit_rhs(1,MM0) 
+!!                              + (Rot + beta_tilde*(x-x0))*(v)
+!!=================================================================
+!!=================================================================    
+   
+   if( Rot /= 0 .and. beta_tilde == 0 ) then
+   
+    !! explicit_rhs <== Rot*v + explicit_rhs
+    call MyAxpy(Rot,velocity(2),explicit_rhs(id,MM0))
+   
+   elseif( Rot /= 0 .and. beta_tilde /= 0 ) then
+   
+    do i=1,nx
+     explicit_rhs(id,MM0)%SlabVals(i,:,:) =                      &
+                          explicit_rhs(id,MM0)%SlabVals(i,:,:)   &
+                      + ( Rot + beta_tilde*(x(i)-x0) )           &
+                      *   velocity(2)%SlabVals(i,:,:)
+    enddo
+    
+   endif
+  
+     
+!!============================================================
+!! Since we have grad(u) stored in implicit_rhs(1-3,N)
+!! we can take its divergence and store the resulting
+!! Laplacian for later use in the implicit time step.
+!! Set the deriv objects w/ the correct 2nd derivs wrt x,y,z.
+!!============================================================
+   do i=1,3
+    implicit_rhs(i,N)%Derivs(i) = velocity(id)%Derivs(i+3)
+    implicit_rhs(i,N)%gridpoint_values =     .TRUE.
+    implicit_rhs(i,N)%wavenumber_values =    .FALSE.
+    implicit_rhs(i,N)%forward_transform_only=.FALSE.
+    implicit_rhs(i,N)%inverse_transform_only=.FALSE.
+   enddo
+   
+!!==========================================
+!! Calculate Div Grad(u), store result in
+!! implicit_rhs(id,N)
+!! scratch(1) is work space
+!!========================================== 
+   call Divergence(implicit_rhs(1,N),implicit_rhs(id,N),scratch(1))
+         
+!!=============================================
+!! mult by 1/Re  
+!!=============================================
+   xx = 1./(Re)
+   call MyScal(xx,implicit_rhs(id,N))
+   
+end subroutine ibrd_1
+!!=================================================================
+!!=================================================================
+
+
+
+!!=================================================================
+!!=================================================================
+subroutine ibrd_2
+!! See comments for ibrd_1.
+!!=================================================================
+ use class_ScalarVariable 
+ use dependent_variables   
+ use intermediate_variables 
+ use user_data,          only: Rot,beta_tilde,Re,nx,Lx,Lz      
+ use etc   
+ use mpi_params
+ implicit none
+ logical,save               :: first_entry=.TRUE.
+ integer                    :: sign=-1, id=2, istat
+ real(kind=8),pointer,save  :: x(:)
+ real(kind=8)               :: x0,xx
+ 
+ if( first_entry .and. beta_tilde /= 0 ) then
+  allocate( x(nx), stat=istat )
+  if( istat /= 0  ) then
+   write(0,*) 'Allocating x(nx) in ibrd_2'
+   stop       'Allocation failed:  ibrd_2'
+  endif
+  x(:) = velocity(1)%Grid%SpaceDims(1)%x(:)  ! dimensionless x values
+  x0 = 0.5*(Lx/Lz)                           ! dimensionless x0 
+  first_entry=.FALSE.
+ endif
+
+!!=================================================================
+if(myid==0) write(0,*) '..............................',id
+!!=================================================================
+!! Compute gradient of (v), using `implicit_rhs' for storing results.
+!! Compute the dot product -( u dot grad(v) ).
+!!=================================================================
+!!================================================================= 
+   call gradient(velocity(id),implicit_rhs(1,N))
+  
+   !! -u dot grad(v)
+   call ScalarDotProduct( explicit_rhs(id,MM0),sign,           &
+                          velocity(1),                         &
+                          velocity(2),                         &
+                          velocity(3),                         &
+                          implicit_rhs(1,N),                   &
+                          implicit_rhs(2,N),                   &
+                          implicit_rhs(3,N) ) 
+
+
+!!=================================================================
+!!=================================================================
+!! Add in  rotation term:  
+!!     explicit_rhs(2,MM0) <=== explicit_rhs(2,MM0) - Rot*(u)
+!!
+!! or  explicit_rhs(2,MM0) <=== explicit_rhs(2,MM0) 
+!!                              - (Rot + beta_tilde*(x-x0))*(u)
+!!=================================================================
+!!=================================================================    
+   
+   if( Rot /= 0 .and. beta_tilde == 0 ) then
+   
+    !! explicit_rhs <== -Rot*u + explicit_rhs
+    xx = -Rot
+    call MyAxpy(xx,velocity(1),explicit_rhs(id,MM0))
+   
+   elseif( Rot /= 0 .and. beta_tilde /= 0 ) then
+   
+    do i=1,nx
+     explicit_rhs(id,MM0)%SlabVals(i,:,:) =  &
+                                 explicit_rhs(id,MM0)%SlabVals(i,:,:)   &
+                                 - ( Rot + beta_tilde*(x(i)-x0) )       &
+                                 * velocity(1)%SlabVals(i,:,:)
+    enddo
+    
+   endif
+ 
+   !!============================================================
+   !! since we have grad(v) stored in implicit_rhs(1-3,N)
+   !! we can take its divergence and store the resulting
+   !! Laplacian for later use in the implicit time step
+   !! Set the derivs for the correct 2nd derivs wrt x,y,z
+   !!============================================================
+   do i=1,3
+    implicit_rhs(i,N)%Derivs(i) = velocity(id)%Derivs(i+3)
+    implicit_rhs(i,N)%gridpoint_values =     .TRUE.
+    implicit_rhs(i,N)%wavenumber_values =    .FALSE.
+    implicit_rhs(i,N)%forward_transform_only=.FALSE.
+    implicit_rhs(i,N)%inverse_transform_only=.FALSE.
+   enddo
+   
+   !!==========================================
+   !! Calculate Div Grad(v), store result in
+   !! implicit_rhs(id,N)
+   !! scratch(1) is work space
+   !!========================================== 
+   call Divergence(implicit_rhs(1,N),implicit_rhs(id,N),scratch(1))
+         
+   !!=============================================
+   !! mult by 1/Re  
+   !!=============================================
+   xx = 1./(Re)
+   call MyScal(xx,implicit_rhs(id,N))
+     
+end subroutine ibrd_2
+!!=================================================================
+!!=================================================================
+
+
+!!=================================================================
+!!=================================================================
+subroutine ibrd_3
+!! Routine to calculate the inertia and buoyancy and dissipation  
+!! terms for the z momentum equation. 
+!!=================================================================
+ use class_ScalarVariable    
+ use dependent_variables     
+ use intermediate_variables  
+ use user_data,                 only: Ri,Re,Pr           
+ use etc,                       only: N,MM0  
+ use mpi_params
+ implicit none 
+ integer      :: sign=-1, id=3, i
+ real(kind=8) :: alpha
+!!=================================================================
+!!=================================================================
+!! Compute gradient of (w), using `implicit_rhs' for storing results.
+!! Compute the dot product -( u dot grad(w) ).
+!! Add in -(Ri pd)  
+!!  ---> explicit_rhs(1,MM0) <= -(u dot grad(w)) - Ri(pd)
+!!=================================================================
+if(myid==0) write(0,*) '..............................',id
+!!================================================================= 
+   call gradient(velocity(id),implicit_rhs(1,N))
+  
+   !! -u dot grad(w)
+   call ScalarDotProduct( explicit_rhs(id,MM0),sign,           &
+                          velocity(1),                         &
+                          velocity(2),                         &
+                          velocity(3),                         &
+                          implicit_rhs(1,N),                   &
+                          implicit_rhs(2,N),                   &
+                          implicit_rhs(3,N) ) 
+                          
+   !!=================================================================                         
+   !! add in buoyancy term
+   !! explicit_rhs <== -Ri*pd + explicit_rhs
+   !!=================================================================
+   alpha = -Ri
+   if( Ri /= 0 ) &
+    call MyAxpy(alpha,pd,explicit_rhs(id,MM0))     
+   
+   !!============================================================
+   !! since we have grad(w) stored in implicit_rhs(1-3,N)
+   !! we can take its divergence and store the resulting
+   !! Laplacian for later use in the implicit time step
+   !! Set the derivs for the correct 2nd derivs wrt x,y,z
+   !!============================================================
+   do i=1,3
+    implicit_rhs(i,N)%Derivs(i) = velocity(id)%Derivs(i+3)
+    implicit_rhs(i,N)%gridpoint_values =     .TRUE.
+    implicit_rhs(i,N)%wavenumber_values =    .FALSE.
+    implicit_rhs(i,N)%forward_transform_only=.FALSE.
+    implicit_rhs(i,N)%inverse_transform_only=.FALSE.
+   enddo
+   
+   !!==========================================
+   !! Calculate Div Grad(v), store result in
+   !! implicit_rhs(id,N)
+   !! scratch(1) is work space
+   !!========================================== 
+   call Divergence(implicit_rhs(1,N),implicit_rhs(id,N),scratch(1))
+         
+   !!=============================================
+   !! mult by 1/Re  
+   !!=============================================
+   alpha = 1./(Re)
+   call MyScal(alpha,implicit_rhs(id,N))
+   
+end subroutine ibrd_3
+!!=================================================================
+!!=================================================================
+
+
+
+!!=================================================================
+!!=================================================================
+subroutine ibrd_4
+ use class_ScalarVariable    
+ use dependent_variables    
+ use intermediate_variables 
+ use user_data,                 only: Re,Pr           
+ use etc,                       only: N,MM0  
+ use mpi_params
+ implicit none 
+ integer      :: sign=-1, id=4, i, k
+ real(kind=8) :: alpha
+ 
+!!=================================================================
+!!=================================================================
+!! Compute gradient of (s1), using `implicit_rhs' for storing results.
+!! Compute the dot product -( u dot grad(s1) ).
+!!=================================================================
+if(myid==0) write(0,*) '..............................',id
+!!================================================================= 
+   call gradient(scalars(1),implicit_rhs(1,N))
+  
+   !! -u dot grad(s1)
+   call ScalarDotProduct( explicit_rhs(id,MM0),sign,           &
+                          velocity(1),                         &
+                          velocity(2),                         &
+                          velocity(3),                         &
+                          implicit_rhs(1,N),                   &
+                          implicit_rhs(2,N),                   &
+                          implicit_rhs(3,N) ) 
+      
+   !!==============================================================
+   !! Now add in -w * d/dz (s1_bar) to finish off the explicit RHS
+   !!==============================================================
+   do k=1,scalars(1)%DataMap%locnz
+    explicit_rhs(id,MM0)%SlabVals(:,:,k)                       &
+        = explicit_rhs(id,MM0)%SlabVals(:,:,k)                 &
+        - velocity(3)%SlabVals(:,:,k)*ddz_s1_bar(k)
+   enddo 
+   
+   
+   !!============================================================
+   !! since we have grad(s1) stored in implicit_rhs(1-3,N)
+   !! we can take its divergence and store the resulting
+   !! Laplacian for later use in the implicit time step
+   !! Set the derivs for the correct 2nd derivs wrt x,y,z
+   !!============================================================
+   do i=1,3
+    implicit_rhs(i,N)%Derivs(i) = scalars(id-3)%Derivs(i+3)
+    implicit_rhs(i,N)%gridpoint_values =     .TRUE.
+    implicit_rhs(i,N)%wavenumber_values =    .FALSE.
+    implicit_rhs(i,N)%forward_transform_only=.FALSE.
+    implicit_rhs(i,N)%inverse_transform_only=.FALSE.
+   enddo
+   
+   !!==========================================
+   !! Calculate Div Grad(s1), store result in
+   !! implicit_rhs(id,N)
+   !! scratch(1) is work space
+   !!========================================== 
+   call Divergence(implicit_rhs(1,N),implicit_rhs(id,N),scratch(1))
+         
+   !!=============================================
+   !! mult by 1/PrRe  
+   !!=============================================
+   alpha = 1./(Pr(id-3)*Re)
+   call MyScal(alpha,implicit_rhs(id,N))
+
+   
+end subroutine ibrd_4
+!!=================================================================
+!!=================================================================
+
+
+!!=================================================================
+!!=================================================================
+subroutine ibrd_5
+ use class_ScalarVariable    
+ use dependent_variables     
+ use intermediate_variables  
+ use user_data,                 only: Re,Pr           
+ use etc,                       only: N,MM0  
+ use mpi_params
+ implicit none 
+ integer      :: sign=-1, id=5, i, k
+ real(kind=8) :: alpha
+ 
+!!=================================================================
+!!=================================================================
+!! Compute gradient of (s2), using `implicit_rhs' for storing results.
+!! Compute the dot product -( u dot grad(s2) ).
+!!=================================================================
+if(myid==0) write(0,*) '..............................',id
+!!================================================================= 
+   call gradient(scalars(2),implicit_rhs(1,N))
+  
+   !! -u dot grad(s2)
+   call ScalarDotProduct( explicit_rhs(id,MM0),sign,           &
+                          velocity(1),                         &
+                          velocity(2),                         &
+                          velocity(3),                         &
+                          implicit_rhs(1,N),                   &
+                          implicit_rhs(2,N),                   &
+                          implicit_rhs(3,N) ) 
+                          
+   !!==============================================================
+   !! Now add in -w * d/dz (s2_bar) to finish off the explicit RHS
+   !!==============================================================
+   do k=1,scalars(2)%DataMap%locnz
+    explicit_rhs(id,MM0)%SlabVals(:,:,k)                         &
+        = explicit_rhs(id,MM0)%SlabVals(:,:,k)                   &
+        - velocity(3)%SlabVals(:,:,k)*ddz_s2_bar(k)
+   enddo 
+   
+     
+   !!============================================================
+   !! since we have grad(s2) stored in implicit_rhs(1-3,N)
+   !! we can take its divergence and store the resulting
+   !! Laplacian for later use in the implicit time step
+   !! Set the derivs for the correct 2nd derivs wrt x,y,z
+   !!============================================================
+   do i=1,3
+    implicit_rhs(i,N)%Derivs(i) = scalars(id-3)%Derivs(i+3)
+    implicit_rhs(i,N)%gridpoint_values =     .TRUE.
+    implicit_rhs(i,N)%wavenumber_values =    .FALSE.
+    implicit_rhs(i,N)%forward_transform_only=.FALSE.
+    implicit_rhs(i,N)%inverse_transform_only=.FALSE.
+   enddo
+   
+   !!==========================================
+   !! Calculate Div Grad(s1), store result in
+   !! implicit_rhs(id,N)
+   !! scratch(1) is work space
+   !!========================================== 
+   call Divergence(implicit_rhs(1,N),implicit_rhs(id,N),scratch(1))
+         
+   !!=============================================
+   !! mult by 1/PrRe  
+   !!=============================================
+   alpha = 1./(Pr(id-3)*Re)
+   call MyScal(alpha,implicit_rhs(id,N))
+   
+end subroutine ibrd_5
+!!=================================================================
+!!=================================================================
+
+
+!!========================================================
+!!========================================================
+ subroutine apply_forcing
+ !!Routine to (optionally) call user_forcing to 
+ !!evaluate the any inhomogeneous terms as functions
+ !!of position & time.
+ !!========================================================
+ !!========================================================
+  use user_routines
+  use user_data,              only: u0,Lz,s1_scale,      &
+                                    s2_scale,do_forcing, &
+                                    do_immersed_boundary
+  use dependent_variables,    only: velocity
+  use intermediate_variables, only: explicit_rhs,scratch  
+  use etc
+  use mpi_params
+  use immersed_boundary,      only: IB_Filter
+  
+  implicit none  
+  real(kind=8), save               :: scale_factor(5)
+  real(kind=8), pointer, save      :: xvals(:),yvals(:),zvals(:)
+  integer, save                    :: m1,m2,m3,k0,k1,npts,id
+  logical, save                    :: first_entry = .TRUE.
+  
+  if( .not. do_forcing ) return
+  if(myid==0) write(0,*) '... applying user forcing '
+!!========================================================
+!!========================================================
+  if( first_entry ) then
+   m1=velocity(1)%DataMap%SlabDims(1,myid)
+   m2=velocity(1)%DataMap%SlabDims(2,myid)
+   m3=velocity(1)%DataMap%SlabDims(3,myid)
+   npts=m1*m2*m3
+   allocate( xvals(m1) )
+   allocate( yvals(m2) )
+   allocate( zvals(m3) )
+           
+   k0 = velocity(1)%DataMap%my_global_kvals(1)
+   k1 = k0+m3-1
+   !! dimensional positions to pass to user
+   zvals(:)=velocity(1)%Grid%SpaceDims(3)%x(k0:k1)*Lz
+   xvals(:)=velocity(1)%Grid%SpaceDims(1)%x(:)*Lz
+   yvals(:)=velocity(1)%Grid%SpaceDims(2)%x(:)*Lz
+      
+   !! scale factors to nondimensionalize the rhs
+   !! terms supplied by the user
+   scale_factor(1:3) = 1./(U0**2/Lz)
+   scale_factor(4)   = 1./(s1_scale*U0/Lz)
+   scale_factor(5)   = 1./(s2_scale*U0/Lz)
+   first_entry = .FALSE.
+  endif
+  !!========================================================
+  !!========================================================
+  
+  !!==========================================================
+  !!==========================================================
+  !! call user forcing routine providing the dimensional
+  !! local spatial coordinates, the current time in seconds,
+  !! a Fortran array to fill with values and an integer
+  !! indicator as to which field's forcing is being requested
+  !! explicit_rhs(i,MM0)%SlabVals = 
+  !!    explicit_rhs(id,MM0)%SlabVals + scratch*scale_factor(i)
+  !!==========================================================
+  !!==========================================================
+  do id=1,5 
+    if(myid==0) write(0,*) '..............................',id
+    call user_forcing(xvals,yvals,zvals,t_secs,                &
+                      scratch(1)%SlabVals,id,m1,m2,m3)
+    
+    !! I'll zero out forces beneath IB so user doesn't have to bother
+    if(do_immersed_boundary) then
+     scratch(1)%SlabVals=scratch(1)%SlabVals*IB_Filter
+    endif
+    
+    call daxpy(npts,scale_factor(id),scratch(1)%SlabVals,1,    &
+                             explicit_rhs(id,MM0)%SlabVals,1)
+  enddo
+
+  return
+ end subroutine apply_forcing
+!=============================================================== 
+!===============================================================
+
+
+
+
+
+!!=================================================================
+!!=================================================================
+subroutine explicit_time_step
+!!  Routine to take an explicit time step via Euler,
+!!  2nd or third order Adams Bashforth method. The differential
+!!  equations are as follows:
+!!
+!!  d/dt u   = rhs1
+!!  d/dt v   = rhs2
+!!  d/dt w   = rhs3
+!!  d/dt s1  = rhs4
+!!  d/dt s2  = rhs5
+!!
+!!  notation:
+!!  dt   time increment
+!!  MM0   integer index identifying the time t    storage locations
+!!  MM1   integer index identifying the time t-dt storage locations
+!!  MM2   integer index identifying the time t-2*dt storage locations
+!!  MM3   integer index identifying the time t-3*dt storage locations
+!!
+!!  explicit_rhs(1,MM0),
+!!  explicit_rhs(1,MM1),
+!!  explicit_rhs(1,MM2),
+!!  explicit_rhs(1,MM3)  
+!!       ====>   rhs for u at t,t-dt,t-2*dt,,t-3*dt
+!!  etc for explicit_rhs(2,:),
+!!          explicit_rhs(3,:),
+!!          explicit_rhs(4,:) 
+!!      and explicit_rhs(5,:)
+
+!!
+!!  outputs:
+!!  u_star(1) calculated values of u at time t+dt
+!!  u_star(2) calculated values of v at time t+dt
+!!  u_star(3) calculated values of w at time t+dt
+!!  scalar(1) calculated values of scalar(1) at time t+dt (overwrite)
+!!  scalar(2) calculated values of scalar(1) at time t+dt (overwrite)
+!!=======================================================================
+!!=======================================================================
+
+ use dependent_variables
+ use intermediate_variables
+ use user_data
+ use etc
+ use operators 
+ use mpi_params
+ 
+ implicit none
+
+ real(kind=8), save     :: dt2,dt12,dt24
+ logical, save          :: first_entry = .TRUE.
+
+ if( first_entry ) then
+  dt2=dt/2.d0
+  dt12=dt/12.d0
+  dt24=dt/24.d0
+  first_entry = .FALSE.
+ endif
+  
+!!=================================================================
+!!=================================================================
+ if( step_flag == 'euler') then
+ 
+  if(myid==0) write(0,*) '... 1st order Euler step '
+ 
+  velocity(1)%SlabVals = velocity(1)%SlabVals      &
+                       + dt*explicit_rhs(1,MM0)%SlabVals
+                  
+  velocity(2)%SlabVals = velocity(2)%SlabVals      &
+                       + dt*explicit_rhs(2,MM0)%SlabVals
+                  
+  velocity(3)%SlabVals = velocity(3)%SlabVals      &
+                       + dt*explicit_rhs(3,MM0)%SlabVals
+                  
+  scalars(1)%SlabVals  = scalars(1)%SlabVals        &
+                       + dt*explicit_rhs(4,MM0)%SlabVals
+                  
+  scalars(2)%SlabVals  = scalars(2)%SlabVals        &
+                       + dt*explicit_rhs(5,MM0)%SlabVals
+
+!!=================================================================
+!!=================================================================                     
+  if(AB_order>1) step_flag='AB2'
+  
+ elseif( step_flag == 'AB2' ) then
+  
+  if(myid==0) write(0,*) '... 2nd order AB step '
+  
+  velocity(1)%SlabVals = velocity(1)%SlabVals          &
+                  + dt2*( 3.*explicit_rhs(1,MM0)%SlabVals       &
+                          -  explicit_rhs(1,MM1)%SlabVals )
+ 
+  velocity(2)%SlabVals = velocity(2)%SlabVals          &
+                  + dt2*( 3.*explicit_rhs(2,MM0)%SlabVals       &
+                          -  explicit_rhs(2,MM1)%SlabVals )
+ 
+  velocity(3)%SlabVals = velocity(3)%SlabVals          &
+                  + dt2*( 3.*explicit_rhs(3,MM0)%SlabVals       &
+                          -  explicit_rhs(3,MM1)%SlabVals )
+ 
+  scalars(1)%SlabVals = scalars(1)%SlabVals            &
+                     + dt2*( 3.*explicit_rhs(4,MM0)%SlabVals    &
+                             -  explicit_rhs(4,MM1)%SlabVals )
+                          
+  scalars(2)%SlabVals = scalars(2)%SlabVals            &
+                     + dt2*( 3.*explicit_rhs(5,MM0)%SlabVals    &
+                             -  explicit_rhs(5,MM1)%SlabVals ) 
+                             
+  if(AB_order>2) step_flag='AB3'
+
+!!=================================================================
+!!=================================================================  
+ elseif( step_flag == 'AB3' ) then
+ 
+  if(myid==0) write(0,*) '... 3rd order AB step '
+  
+  velocity(1)%SlabVals = velocity(1)%SlabVals             &
+                  + dt12*( 23.*explicit_rhs(1,MM0)%SlabVals        &
+                          -16.*explicit_rhs(1,MM1)%SlabVals        &
+                          +5.0*explicit_rhs(1,MM2)%SlabVals )
+                          
+  velocity(2)%SlabVals = velocity(2)%SlabVals             &
+                  + dt12*( 23.*explicit_rhs(2,MM0)%SlabVals        &
+                          -16.*explicit_rhs(2,MM1)%SlabVals        &
+                          +5.0*explicit_rhs(2,MM2)%SlabVals )
+                          
+  velocity(3)%SlabVals = velocity(3)%SlabVals             &
+                  + dt12*( 23.*explicit_rhs(3,MM0)%SlabVals        &
+                          -16.*explicit_rhs(3,MM1)%SlabVals        &
+                          +5.0*explicit_rhs(3,MM2)%SlabVals )
+                          
+  scalars(1)%SlabVals = scalars(1)%SlabVals               &
+                  + dt12*( 23.*explicit_rhs(4,MM0)%SlabVals        &
+                          -16.*explicit_rhs(4,MM1)%SlabVals        &
+                          +5.0*explicit_rhs(4,MM2)%SlabVals )
+                          
+  scalars(2)%SlabVals = scalars(2)%SlabVals               &
+                  + dt12*( 23.*explicit_rhs(5,MM0)%SlabVals        &
+                          -16.*explicit_rhs(5,MM1)%SlabVals        &
+                          +5.0*explicit_rhs(5,MM2)%SlabVals )
+                          
+  if(AB_order>3) step_flag='AB4'
+
+!!=================================================================
+!!=================================================================  
+ elseif( step_flag == 'AB4' ) then
+
+  if(myid==0) write(0,*) '... 4th order AB step '
+    
+  velocity(1)%SlabVals =  velocity(1)%SlabVals            &
+                  + dt24*( 55.*explicit_rhs(1,MM0)%SlabVals        &
+                          -59.*explicit_rhs(1,MM1)%SlabVals        &
+                          +37.*explicit_rhs(1,MM2)%SlabVals        &
+                          -9.0*explicit_rhs(1,MM3)%SlabVals)
+ 
+  velocity(2)%SlabVals =  velocity(2)%SlabVals            &
+                  + dt24*( 55.*explicit_rhs(2,MM0)%SlabVals        &
+                          -59.*explicit_rhs(2,MM1)%SlabVals        &
+                          +37.*explicit_rhs(2,MM2)%SlabVals        &
+                          -9.0*explicit_rhs(2,MM3)%SlabVals)
+ 
+  velocity(3)%SlabVals =  velocity(3)%SlabVals            &
+                  + dt24*( 55.*explicit_rhs(3,MM0)%SlabVals        &
+                          -59.*explicit_rhs(3,MM1)%SlabVals        &
+                          +37.*explicit_rhs(3,MM2)%SlabVals        &
+                          -9.0*explicit_rhs(3,MM3)%SlabVals)
+ 
+  scalars(1)%SlabVals =       scalars(1)%SlabVals         &
+                     + dt24*( 55.*explicit_rhs(4,MM0)%SlabVals     &
+                             -59.*explicit_rhs(4,MM1)%SlabVals     &
+                             +37.*explicit_rhs(4,MM2)%SlabVals     &
+                             -9.0*explicit_rhs(4,MM3)%SlabVals)
+ 
+  scalars(2)%SlabVals =       scalars(2)%SlabVals         &
+                     + dt24*( 55.*explicit_rhs(5,MM0)%SlabVals     &
+                             -59.*explicit_rhs(5,MM1)%SlabVals     &
+                             +37.*explicit_rhs(5,MM2)%SlabVals     &
+                             -9.0*explicit_rhs(5,MM3)%SlabVals)
+ 
+ endif
+ 
+ !!=================================================================
+ !!=================================================================
+ !! Handle the (1/PrRe) d2/dz2 ( s_bar ) terms analytically
+ !! since they are time independent and shouldn't be advanced
+ !! using an explicit method. Another way would be to add the
+ !! terms to the Diffusive terms before doing the implicit solves,
+ !! but again, since we can do them analytically, why not?
+ !!=================================================================
+ !!=================================================================
+  do k=1,scalars(1)%DataMap%locnz
+    scalars(1)%SlabVals(:,:,k) = scalars(1)%SlabVals(:,:,k)   &
+                               + dt * ddzz_s1_bar(k)/(Re*Pr(1))
+  enddo
+ 
+  do k=1,scalars(1)%DataMap%locnz
+    scalars(2)%SlabVals(:,:,k) = scalars(2)%SlabVals(:,:,k)   &
+                               + dt * ddzz_s2_bar(k)/(Re*Pr(2))
+  enddo  
+  
+  
+ return
+end subroutine explicit_time_step
+!!=================================================================
+!!=================================================================
+
+
+!!=================================================================
+!!=================================================================
+subroutine implicit_time_step
+ use mpi_params
+ implicit none 
+ integer  :: id
+ 
+ if(myid==0) write(0,*) '... implicit (diffusion) time steps'
+ do id=1,5
+  if(myid==0) write(0,*) '..............................',id
+  call implicit_step(id)
+ enddo
+    
+end subroutine implicit_time_step
+!!=================================================================
+!!=================================================================
+
+
+!!=================================================================
+!!=================================================================
+subroutine implicit_step(id)
+  use class_ScalarVariable 
+  use dependent_variables,     only: velocity,scalars
+  use intermediate_variables,  only: implicit_rhs,rhs_b
+  use immersed_boundary
+  use operators,               only: h2_scale_factor
+  use user_data,               only:do_immersed_boundary, &
+                                    usolve_exp_coeffs,    &
+                                    vsolve_exp_coeffs,    &
+                                    wsolve_exp_coeffs,    &
+                                    s1solve_exp_coeffs,   &
+                                    s2solve_exp_coeffs,   &
+                                    AM_order,dt
+  use etc,                     only:field_id,N,NM1
+  implicit none 
+  integer            :: i,id
+  logical,save       :: p_space(5),w_space(5),            &
+                        uniform_spacing=.FALSE.,          &
+                        stretched_grid=.TRUE.,            &
+                        first_entry=.TRUE.
+  real(kind=8),save  :: h2(5)
+
+!!===============================================================  
+!!=============================================================== 
+  if(first_entry) then
+  
+   !! change default as needed
+   if( velocity(1)%Grid%SpaceDims(1)%uniform_dx  .and.      &
+       velocity(1)%Grid%SpaceDims(2)%uniform_dx  .and.      &
+       velocity(1)%Grid%SpaceDims(3)%uniform_dx  ) then
+    uniform_spacing = .TRUE.
+    stretched_grid  = .FALSE.
+   endif
+    
+   do i=1,5      
+    h2(i) = h2_scale_factor
+    p_space(i)=.TRUE.
+    w_space(i)=.FALSE.
+    !! change as needed
+    if( i==1 .and. usolve_exp_coeffs )  w_space(i)=.TRUE.   
+    if( i==2 .and. vsolve_exp_coeffs )  w_space(i)=.TRUE.   
+    if( i==3 .and. wsolve_exp_coeffs )  w_space(i)=.TRUE.   
+    if( i==4 .and. s1solve_exp_coeffs ) w_space(i)=.TRUE.   
+    if( i==5 .and. s2solve_exp_coeffs ) w_space(i)=.TRUE. 
+ 
+    if(w_space(i)) then
+     h2(i)=1.d0
+     p_space(i)=.FALSE.
+    endif
+   enddo
+         
+   first_entry=.FALSE.
+  endif
+ !!=============================================================== 
+ !!=============================================================== 
+  !! On entry the implicit_rhs terms are filled with
+  !!  1/Re grad^2 field(id) at t_n etc
+  !!  first, form the rhs for the implicit AM step 
+  !!....
+  !! rhs_b for 3rd order Adams Moulton ...
+  !! rhs = h2*( -(2./dt)*f -invRe*grad^2 f ) 
+  !!  
+  !!
+  !!  OR.....  
+  !!
+  !! rhs_b for 4th order Adams Moulton ...
+  !! rhs = h2*(-12/(5*dt)*f -8/5*invRe*grad^2 f 
+  !!                        + 1/5*invRe*grad^2 f_n-1 )
+  !!  
+  !! ==>    ** (scaled by h2) and using invPrRe for scalars
+  !!            
+  !!=========================================================
+  !!===============================================================
+  
+   if( p_space(id) .or. stretched_grid .or. do_immersed_boundary ) then
+    !!==========================================================
+    !! we CANNOT do an analytical solve in wavenumber space...
+    !! ===> set up the rhs for the AM implicit step...
+    !!==========================================================
+    if( id <= 3 ) then
+ 
+     if(AM_order==3) then
+      rhs_b%SlabVals = ( (-2./dt)*velocity(id)%SlabVals                 &
+                     -   implicit_rhs(id,N)%SlabVals )*h2(id)
+     elseif(AM_order==4) then
+      rhs_b%SlabVals = ( (-12./(5.*dt))*velocity(id)%SlabVals           &
+                     -   (8./5.)*implicit_rhs(id,N)%SlabVals            &
+                     +   (1./5.)*implicit_rhs(id,NM1)%SlabVals )*h2(id)
+     endif
+ 
+    elseif( id > 3 ) then
+ 
+     if(AM_order==3) then
+      rhs_b%SlabVals = ( (-2./dt)*scalars(id-3)%SlabVals                &
+                   -   implicit_rhs(id,N)%SlabVals )*h2(id)
+     elseif(AM_order==4) then
+      rhs_b%SlabVals = ( (-12./(5.*dt))*scalars(id-3)%SlabVals          &
+                   -   (8./5.)*implicit_rhs(id,N)%SlabVals              & 
+                   +   (1./5.)*implicit_rhs(id,NM1)%SlabVals )*h2(id)
+     endif
+
+    endif 
+    
+   elseif( w_space(id) .and. uniform_spacing   &
+              .and. .not. do_immersed_boundary ) then
+   !! for this one special case, we can do the diffusion update
+   !! analytically in wavenumber space, operating on the transform
+   !! of the dependent variable directly ===> put it in rhs_b
+    
+     if( id <= 3 ) then
+      call CopySlabData_a2b(velocity(id),rhs_b)
+     elseif( id > 3 ) then
+      call CopySlabData_a2b(scalars(id-3),rhs_b)
+     endif
+     
+   endif
+    
+    
+  !!======================================================
+  !! Solve the Ax=b implicit systems 
+  !! setting the BC values if necessary
+  !!======================================================
+   field_id=id
+   call SetBCs(id)
+   call Diffusion_Solve
+   
+end subroutine implicit_step
+!!======================================================
+!!======================================================
+
+
+!!============================================================
+!!============================================================
+subroutine pressure_rhs
+!!The velocity [u,v,w] is the intermediate velocity u*
+!!The eqn for pressure is L[p]=(1/dt)Div(u*) in interior
+!!with Neumann conditions on all boundaries (except periodic).
+!!============================================================
+ use class_ScalarVariable
+ use operators
+ use user_data 
+ use immersed_boundary
+ use mpi_params
+ use dependent_variables,     only: velocity
+ use intermediate_variables,  only: rhs_b,                   &
+                                    div_u,                   &
+                                    scratch,                 &
+                                    phi
+ use etc,                     only: field_id,                &
+                                    numzplanes_below,        &
+                                    int_weights_x,           &
+                                    int_weights_y,           &
+                                    int_weights_z,istep
+ 
+ implicit none 
+ integer                      :: jerr,idim,id
+ integer                      :: i,j,k,kglobal
+ integer                      :: npts,mval
+ integer,save                 :: locnz,one=1
+ real(kind=8),save            :: h2,xx
+ real(kind=8)                 :: S(2)
+ real(kind=8)                 :: local_value,global_value
+ logical,save                 :: first_entry=.TRUE.
+ !!============================================================
+ 
+ !!============================================================
+ if( first_entry ) then
+  locnz=velocity(1)%DataMap%SlabVals(3,myid)
+  !! get the global scale factor used to define
+  !! the elliptic operator L[]
+  h2 = h2_scale_factor
+  xx=h2*(1./dt)
+  if( psolve_exp_coeffs ) xx=1.d0/dt
+  first_entry=.FALSE.
+ endif
+ 
+ 
+ !!============================================================
+ !! take div of u in physical space
+ !!============================================================
+ do id=1,3
+  velocity(id)%gridpoint_values =     .TRUE.
+  velocity(id)%wavenumber_values =    .FALSE.
+  velocity(id)%forward_transform_only=.FALSE.
+  velocity(id)%inverse_transform_only=.FALSE.
+ enddo
+   
+ !!==========================================
+ !! Calculate Div u*
+ !! scratch(1) is work space
+ !!========================================== 
+ call Divergence(velocity,div_u,scratch(1))
+         
+ !!=============================================
+ !! Scale RHS ===>>  h2 * (1/dt) Div u* 
+ !!=============================================
+  call CopySlabData_a2b(div_u,rhs_b)
+  call MyScal(xx,rhs_b)
+    
+ !!=============================================
+ !! if solving for p in wavenumber space, don't 
+ !! need to remove the mean or impose explicit
+ !! boundary constraints here
+ !! ====> exit w/ rhs_b filled w/ grdpt values
+ !!============================================= 
+ if( psolve_exp_coeffs ) return 
+  
+   
+ !!==========================================
+ !! do boundary values separately....
+ !!==========================================
+ idim=1
+ if( xdim_implicit_bcs ) goto 100  
+  
+ !! if normal velocity is to be specified, assume rigid wall
+ !! and set pressure gradient in terms of ustar dot n
+ if(BCtype(idim,idim,1)=='dirichlet' .and. BCtype(6,idim,1)=='neumann') then
+  rhs_b%SlabVals(1,:,:)  = (1./dt)*velocity(idim)%SlabVals(1,:,:)
+ elseif(BCtype(idim,idim,1)=='neumann' .and. BCtype(6,idim,1)=='neumann') then
+  rhs_b%SlabVals(1,:,:)  = 0.d0
+ else
+  if(myid==0) write(0,*) 'p bc: ',trim( BCtype(6,idim,1) )
+  if(myid==0) write(0,*) 'u bc: ',trim( BCtype(1,idim,1) )
+  stop 'x pressure bcs confusion, pressure_rhs'
+ endif
+    
+ 
+100 idim=2
+ if( ydim_implicit_bcs ) goto 101
+
+ !! if normal velocity is to be specified, assume rigid wall
+ !! and set pressure gradient in terms of ustar dot n
+ if(BCtype(idim,idim,1)=='dirichlet' .and. BCtype(6,idim,1)=='neumann') then
+  rhs_b%SlabVals(:,1,:)  = (1./dt)*velocity(idim)%SlabVals(:,1,:)
+ elseif(BCtype(idim,idim,1)=='neumann' .and. BCtype(6,idim,1)=='neumann') then
+  rhs_b%SlabVals(:,1,:)  = 0.d0
+ else
+  stop 'y pressure bcs confusion, pressure_rhs'
+ endif
+  
+ 
+101 idim=3
+ if(myid==0) then
+  if( zdim_implicit_bcs .or. phi_deriv_types(idim)=='cos' ) goto 102
+  
+  !! if normal velocity is to be specified, assume rigid wall
+  !! and set pressure gradient in terms of ustar dot n
+  if(BCtype(idim,idim,1)=='dirichlet' .and. BCtype(6,idim,1)=='neumann') then
+   rhs_b%SlabVals(:,:,1) = (1./dt)*velocity(idim)%SlabVals(:,:,1)
+  else
+   stop 'z pressure bcs confusion, pressure_rhs bottom'
+  endif
+   
+ endif
+
+ 
+102 if(myid==numprocs-1) then
+  if( zdim_implicit_bcs .or. phi_deriv_types(idim)=='cos' ) return
+
+  !! if normal velocity is to be specified, assume rigid wall
+  !! and set pressure gradient in terms of ustar dot n
+  if(BCtype(idim,idim,1)=='dirichlet' .and. BCtype(6,idim,1)=='neumann') then
+   rhs_b%SlabVals(:,:,locnz) = (1./dt)*velocity(idim)%SlabVals(:,:,locnz)
+  else
+   stop 'z pressure bcs confusion, pressure_rhs top'
+  endif
+     
+  endif
+  
+end subroutine pressure_rhs
+!!=====================================================
+!!=====================================================
+
+
+!!=====================================================
+!!=====================================================
+subroutine project
+!!==============================================
+!!  Grad Phi stored in explicit_rhs(1:3,M_oldest)
+!!  (we just used these in explicit step and will
+!!  overwrite them next step w/o using em again)
+!!   u <- u* -dt*GradPhi(1)  
+!!   v <- v* -dt*GradPhi(2)
+!!   w <- w* -dt*GradPhi(3)
+!!===============================================
+ use class_ScalarVariable 
+ use dependent_variables,       only: velocity
+ use intermediate_variables,    only: GradPhi => explicit_rhs
+ use user_data,                 only: dt,do_immersed_boundary
+ use etc,                       only: m => M_oldest
+ use immersed_boundary
+ implicit none
+ integer       :: k
+ 
+ !!  velocity(k) <== (-dt)*GradPhi + velocity(k) 
+ do k=1,3
+  if( do_immersed_boundary)    &
+   GradPhi(k,m)%SlabVals=GradPhi(k,m)%SlabVals*IB_Filter
+  call MyAxpy(-dt,GradPhi(k,m),velocity(k)) 
+ enddo
+ 
+
+end subroutine project
+!!=====================================================
+!!=====================================================
+
+
+
+
+
+
+
+
+!!=====================================================
+!!=====================================================
+subroutine diffusion(id)
+ use class_ScalarVariable
+ use dependent_variables,     only: velocity,scalars
+ use intermediate_variables,  only: implicit_rhs,rhs_b,   &
+                                    scratch
+ use user_data,               only: Re,Pr,                &
+                                    do_immersed_boundary, &
+                                    usolve_exp_coeffs,    &
+                                    vsolve_exp_coeffs,    &
+                                    wsolve_exp_coeffs,    &
+                                    s1solve_exp_coeffs,   &
+                                    s2solve_exp_coeffs 
+ use etc,                     only: N 
+ implicit none 
+ integer,optional         :: id
+ integer                  :: i,istart,iend
+ real(kind=8), SAVE       :: invRe,invPrRe(2)
+ logical, SAVE            :: p_space(5), w_space(5)
+ logical, SAVE            :: uniform_spacing=.FALSE.
+ logical, SAVE            :: stretched_grid=.TRUE.
+ logical, SAVE            :: first_entry = .TRUE.
+
+!!=====================================================
+!!=====================================================
+ if( first_entry ) then
+  invRe=1./Re
+  invPrRe(1)=1./(Re*Pr(1))
+  invPrRe(2)=1./(Re*Pr(2))  
+  !! check any variable for stretched grid
+  if( velocity(1)%Grid%SpaceDims(1)%uniform_dx  .and.      &
+      velocity(1)%Grid%SpaceDims(2)%uniform_dx  .and.      &
+      velocity(1)%Grid%SpaceDims(3)%uniform_dx  ) then
+    uniform_spacing = .TRUE.
+    stretched_grid  = .FALSE.
+  endif
+  
+  do i=1,5
+   p_space(i)=.TRUE.
+   w_space(i)=.FALSE.
+   !! change as needed
+   if( i==1 .and. usolve_exp_coeffs )  w_space(i)=.TRUE.   
+   if( i==2 .and. vsolve_exp_coeffs )  w_space(i)=.TRUE.   
+   if( i==3 .and. wsolve_exp_coeffs )  w_space(i)=.TRUE.   
+   if( i==4 .and. s1solve_exp_coeffs ) w_space(i)=.TRUE.   
+   if( i==5 .and. s2solve_exp_coeffs ) w_space(i)=.TRUE.  
+   if(w_space(i)) then
+    p_space(i)=.FALSE.
+   endif
+  enddo
+  
+  first_entry = .FALSE.
+ endif
+!!=====================================================
+!!=====================================================
+
+ if( present(id) ) then  !! just do the selected scalar
+   istart=id
+   iend=id
+  else                   !! do the three vel components
+   istart=1
+   iend=3
+  endif
+  
+ !!=====================================================
+ !!=====================================================
+ do i=istart,iend
+ 
+  if(w_space(i) .and. uniform_spacing .and. .not. do_immersed_boundary) then
+    !! in this case, exact solve is possible in w_space 
+    !! ====> put field values in the rhs vector
+    if( i <= 3 ) call CopySlabData_a2b(velocity(i), rhs_b)
+    if( i > 3 )  call CopySlabData_a2b(scalars(i-3),rhs_b)    
+  else  
+   !!======================================================
+   !!  compute Grad^2 of the dependent variable &
+   !!  multiply by (1/Re) or (1/Pr(i)Re)
+   !!    grad^2 f ==> implicit_rhs(i,N), N toggled w/ NM1
+   !!    grad(f)==>implicit_rhs(1-3), scratch(4)=work
+   !!======================================================
+   if( i <= 3 ) then
+    velocity(i)%gridpoint_values =     .TRUE.
+    velocity(i)%wavenumber_values =    .FALSE.
+    velocity(i)%forward_transform_only=.FALSE.
+    velocity(i)%inverse_transform_only=.FALSE.
+    
+    call Laplacian(velocity(i),scratch,implicit_rhs(i,N),scratch(4))
+    call MyScal(invRe,implicit_rhs(i,N)) !!  x <== alpha*x 
+  
+   elseif( i > 3 ) then
+    scalars(i-3)%gridpoint_values =     .TRUE.
+    scalars(i-3)%wavenumber_values =    .FALSE.
+    scalars(i-3)%forward_transform_only=.FALSE.
+    scalars(i-3)%inverse_transform_only=.FALSE.
+  
+    call Laplacian(scalars(i-3),scratch,implicit_rhs(i,N),scratch(4))
+    call MyScal(invPrRe(i-3),implicit_rhs(i,N))
+   endif
+  
+ endif  
+enddo    !! end loop over each variable i
+
+end subroutine diffusion
+!!=====================================================
+!!=====================================================
+ 
+
+
+ 
+ 
+subroutine SetBCs(id)
+ use class_ScalarVariable
+ use intermediate_variables,  only: rhs_b
+ use operators 
+ use user_data,               only: nx,ny,                &
+                                    xdim_implicit_bcs,    &
+                                    ydim_implicit_bcs,    &
+                                    zdim_implicit_bcs,    &
+                                    usolve_exp_coeffs,    &
+                                    vsolve_exp_coeffs,    &
+                                    wsolve_exp_coeffs,    &
+                                    s1solve_exp_coeffs,   &
+                                    s2solve_exp_coeffs    
+ use etc,                     only: numzplanes_below                                   
+ use mpi_params,              only: myid,numprocs
+  
+ implicit none 
+ integer                  :: id,i,j,k,idim,endid 
+ real(kind=8)             :: S
+ integer, SAVE            :: locnz
+ logical, SAVE            :: p_space(5), w_space(5)
+ logical, SAVE            :: first_entry = .TRUE.
+
+!!=====================================================
+!!=====================================================
+ if( first_entry ) then
+  
+  locnz = ubound( rhs_b%SlabVals,3 )
+  do i=1,5
+   p_space(i)=.TRUE.
+   w_space(i)=.FALSE.
+   !! change as needed
+   if( i==1 .and. usolve_exp_coeffs )  w_space(i)=.TRUE.   
+   if( i==2 .and. vsolve_exp_coeffs )  w_space(i)=.TRUE.   
+   if( i==3 .and. wsolve_exp_coeffs )  w_space(i)=.TRUE.   
+   if( i==4 .and. s1solve_exp_coeffs ) w_space(i)=.TRUE.   
+   if( i==5 .and. s2solve_exp_coeffs ) w_space(i)=.TRUE. 
+ 
+   if(w_space(i)) then
+    p_space(i)=.FALSE.
+   endif
+  enddo
+  
+  first_entry = .FALSE.
+ endif
+
+!!======================================================  
+!!======================================================
+!! If the solves are carried out in wavenumber space,
+!! the BCs will be handled implicitly via the expansions
+!! ====> just return
+   if( w_space(id) )  return
+!!======================================================
+!!======================================================
+   
+  
+ !!=========================
+ !!  EAST FACE
+ !!=========================
+ if(xdim_implicit_bcs) goto 100
+ 
+ idim=1
+ endid=1
+ i=1
+ 
+ do j=1,ny
+  do k=1,locnz
+  
+   call GetSval(id,idim,endid,j,k,S)
+   rhs_b%SlabVals(i,j,k) = S
+          
+  enddo
+ enddo
+ 
+ !!=========================
+ !!  WEST FACE
+ !!=========================
+ idim=1
+ endid=2
+ i=nx
+ 
+ do j=1,ny
+  do k=1,locnz
+  
+   call GetSval(id,idim,endid,j,k,S)
+   rhs_b%SlabVals(i,j,k) = S
+          
+  enddo
+ enddo
+100 continue
+ 
+ !!=========================
+ !!  FRONT FACE
+ !!=========================
+ if(ydim_implicit_bcs) goto 101
+ 
+ idim=2
+ endid=1
+ j=1
+ 
+ do i=1,nx
+  do k=1,locnz
+  
+   call GetSval(id,idim,endid,i,k,S)
+   rhs_b%SlabVals(i,j,k) = S
+     
+  enddo
+ enddo  
+ !!=========================
+ !!  BACK FACE
+ !!=========================
+ idim=2
+ endid=2
+ j=ny
+ 
+ do i=1,nx
+  do k=1,locnz
+  
+   call GetSval(id,idim,endid,i,k,S)
+   rhs_b%SlabVals(i,j,k) = S
+          
+  enddo
+ enddo  
+101 continue
+ 
+ !!=========================
+ !!  BOTTOM
+ !!=========================
+ if(zdim_implicit_bcs) goto 102
+ if( myid==0 ) then
+  idim=3
+  endid=1
+  k=1
+ 
+  do i=1,nx
+   do j=1,ny
+   
+    call GetSval(id,idim,endid,i,j,S)
+    rhs_b%SlabVals(i,j,k) = S
+          
+   enddo
+  enddo  
+ endif
+
+ !!=========================
+ !!  TOP
+ !!=========================
+ if( myid==numprocs-1 ) then
+  idim=3
+  endid=2
+  k=locnz
+ 
+  do i=1,nx
+   do j=1,ny
+   
+    call GetSval(id,idim,endid,i,j,S)
+    rhs_b%SlabVals(i,j,k) = S
+          
+   enddo
+  enddo  
+  endif
+102 continue
+ 
+end subroutine SetBCs
+!!=====================================================
+!!=====================================================
+
+
+
+!!=====================================================
+!!=====================================================
+subroutine immersed_bdry
+ use mpi_params
+ use user_data,               only: do_immersed_boundary
+ use immersed_boundary
+ implicit none 
+  
+ if( .not. do_immersed_boundary ) return
+ if(myid==0) write(0,*) '... interpolating projected velocity onto IB surface'
+ 
+ !!====================================================
+ !! interpolate the projected, div free velocity field
+ !! to the IB surface, mult by -1/dt and store in SS
+ !!====================================================
+ call IB_SourceStrength
+ 
+ !!====================================================
+ !! update the velocity with the IB correction
+ !!====================================================
+ call IB_Update
+   
+   
+end subroutine immersed_bdry
+!!=====================================================
+!!=====================================================
+
+
+
+
Index: /trunk/00FlowSolve_KW/src/immersed_boundary.f90
===================================================================
--- /trunk/00FlowSolve_KW/src/immersed_boundary.f90	(revision 6)
+++ /trunk/00FlowSolve_KW/src/immersed_boundary.f90	(revision 6)
@@ -0,0 +1,400 @@
+
+
+!!=====================================================================
+  module immersed_boundary 
+!!====================================================================
+   implicit none
+   
+   public  :: InitializeImmersedBoundary
+   public  :: IB_SourceStrength
+   public  :: IB_Update
+   public  :: ForcingFilter
+   public  :: ij_from_count
+   public  :: count_from_ij
+   public  :: unit_normal
+   
+   real(kind=8)                  :: eps(3),d_inf(3),delta_min
+   real(kind=8),allocatable      :: x_IB(:,:),y_IB(:,:),h_IB(:,:)
+   real(kind=8),allocatable      :: nhat(:,:,:),SS(:,:),f_IB(:,:,:)
+   real(kind=8),allocatable      :: IB_Filter(:,:,:)
+   integer                       :: n_i,n_j,n_k
+   integer,allocatable           :: labels(:,:),kplus(:,:)
+
+  Contains 
+  
+!===================================================================
+!===================================================================
+subroutine InitializeImmersedBoundary
+ use class_DataDecomposition
+ use independent_variables
+ use dependent_variables
+ use intermediate_variables
+ use user_data
+ use user_routines
+ use etc
+ use mpi_params
+ 
+ implicit none
+ integer          :: idim,locnz
+ real(kind=8)     :: x(3),ds(3),h_x,h_y
+ real(kind=8)     :: s1,s2,s3,ans(3)
+ real(kind=8)     :: x_s,y_s,z_s
+ real(kind=8)     :: dx,dy,dz,xx,acosh2
+ real(kind=8),allocatable  :: work(:)
+ external            acosh2
+  
+ if( .not. do_immersed_boundary ) return
+        
+  !! get 'ds' in each of the x y z directions ==> ds(1-3)
+  if(ny==1) then
+   ds(2)=0.d0
+  else
+   ds(2)=Grid(0)%SpaceDims(2)%s(2)-Grid(0)%SpaceDims(2)%s(1)
+  endif
+  ds(1)=Grid(0)%SpaceDims(1)%s(2)-Grid(0)%SpaceDims(1)%s(1)  
+  ds(3)=Grid(0)%SpaceDims(3)%s(2)-Grid(0)%SpaceDims(3)%s(1)
+  locnz = ubound(velocity(1)%SlabVals,3)
+ 
+  allocate( x_IB(nx,ny),y_IB(nx,ny),h_IB(nx,ny) )
+  allocate( nhat(nx,ny,3),IB_Filter(nx,ny,locnz) )
+  allocate( f_IB(nx,ny,3) )
+  allocate( SS(nx,ny))
+  allocate( labels(nx,ny),kplus(nx,ny) )
+  labels(:,:)=1
+  
+  
+  
+  do j=1,ny
+   do i=1,nx
+   
+   x(1)=Grid(0)%SpaceDims(1)%x(i)
+   x(2)=Grid(0)%SpaceDims(2)%x(j)
+   
+   call eval_surface(x,x(3),h_x,h_y)
+   call unit_normal(x,ans)
+   
+   !! x,y,z on IB surface
+   x_IB(i,j)=x(1)
+   y_IB(i,j)=x(2)
+   h_IB(i,j)=x(3)
+
+   !! unit normal vector
+   nhat(i,j,1)=ans(1)
+   nhat(i,j,2)=ans(2)
+   nhat(i,j,3)=ans(3)
+      
+   !! find first globally indexed k value ABOVE surface
+   do k=1,nz
+    kplus(i,j)=k
+    if( Grid(0)%SpaceDims(3)%x(k) > h_IB(i,j) ) goto 99
+   enddo
+99 continue
+   
+   
+   if( i==1 .and. j==1 ) then
+   
+   !! Get the param values s in each direction -> (s1,s2,s3)
+   !! corresponding too the surface point x(1:3).
+   !! Remember, this user routine has DIMENSIONAL inputs
+   call point_map_x2s(x(1)*Lz,1,xdim_periodic,Lx,nx,s1)
+   call point_map_x2s(x(2)*Lz,2,ydim_periodic,Ly,ny,s2)
+   call point_map_x2s(x(3)*Lz,3,zdim_periodic,Lz,nz,s3)
+    
+   !! now get the corresponding dx/ds,dy/ds,dz/ds values -> (x_s,y_s,z_s)
+   !! Remember, this user routine has DIMENSIONAL outputs
+   idim=1
+   call point_map_s2x(s1,idim,xdim_periodic,Lx,nx,xx,x_s)
+    
+   idim=2
+   call point_map_s2x(s2,idim,ydim_periodic,Ly,ny,xx,y_s)
+    
+   idim=3
+   call point_map_s2x(s3,idim,zdim_periodic,Lz,nz,xx,z_s)
+    
+   dx = (x_s/Lz) * ds(1)   !! local dxds * ds
+   dy = (y_s/Lz) * ds(2)   !! local dyds * ds
+   dz = (z_s/Lz) * ds(3)   !! local dzds * ds
+   if(ny==1) dy=1.d0
+     
+    delta_min = 1.e-6
+    eps(1) = 3.*dx
+    eps(2) = 3.*dy
+    eps(3) = 3.*dz
+    
+    d_inf(:) =  4.  !acosh2( 1./sqrt(2.*eps(:)*delta_min) )
+    n_i = eps(1)*d_inf(1)/dx
+    n_j = eps(2)*d_inf(2)/dy
+    n_k = eps(3)*d_inf(3)/dz
+   endif   
+             
+  enddo
+ enddo
+ 
+ !! construct spatial filter so user forcing can be specified
+ !! more easily, i.e. globally w/o worrying about IB location
+ call ForcingFilter
+      
+ return
+end subroutine InitializeImmersedBoundary
+!=================================================================
+!=================================================================
+
+
+  
+  !!==============================================================
+  !!==============================================================
+  subroutine IB_SourceStrength
+   use user_data,  only: nx,ny,dt
+   use dependent_variables
+   use intermediate_variables
+   use etc, only: istep,N,MM0,M_oldest
+   implicit none
+   integer           :: i,j,k,m(3),npts
+   real(kind=8)      :: dtinv
+
+   npts=nx*ny
+   m(:)=0
+   dtinv=1.d0/dt
+   
+                      
+   !!====================================================
+   !! do the 3 interpolations
+   !!====================================================
+   do k=1,3                                          
+                                          
+    call spline_interp_value( x_IB,                 &    !x'
+                              y_IB,                 &    !y'
+                              h_IB,                 &    !z' on surface
+                              npts,velocity(k),m,   &    !field to interp
+                              f_IB(1,1,k),          &    ! ans
+                              labels,               &    !==1
+                              scratch(2)%SlabVals,  &    !work
+                              scratch(3)%SlabVals,  &    !work
+                              scratch(4)%SlabVals )      !work
+   enddo
+   
+   !! now fill in the SS w/ dot product with nhat
+   SS(:,:) = (f_IB(:,:,1)*nhat(:,:,1)  &
+           +  f_IB(:,:,2)*nhat(:,:,2)  &
+           +  f_IB(:,:,3)*nhat(:,:,3))*dtinv
+   
+   return
+  end subroutine IB_SourceStrength
+  !!====================================================================
+  !!====================================================================
+  
+  
+  
+  !!====================================================================
+  !!==================================================================== 
+   subroutine IB_Update
+    use user_data,              only: nx,ny,dt
+    use etc,                    only: numzplanes_below,N,istep                                  
+    use mpi_params,             only: myid
+    use independent_variables
+    use dependent_variables
+    implicit none
+    integer           :: i,j,k,ii,jj,kk,idim
+    integer,save      :: locnz,npts,k0
+    integer           :: istart,iend
+    integer           :: jstart,jend
+    real(kind=8),save :: ds(3)
+    real(kind=8)      :: x(3),dxds,dyds,dzds
+    real(kind=8)      :: dx,dy,dz,delta
+    real(kind=8)      :: d1,d2,d3,xx
+    logical,save      :: first_entry=.TRUE.
+    external          delta
+   
+  !!====================================================================
+  !!====================================================================
+   if( first_entry ) then
+    locnz=ubound(velocity(1)%SlabVals,3)
+    npts=nx*ny
+    k0=numzplanes_below(myid)
+    if(ny==1) then
+     ds(2)=0.d0
+    else
+     ds(2)=Grid(0)%SpaceDims(2)%s(2)-Grid(0)%SpaceDims(2)%s(1)
+    endif
+    ds(1)=Grid(0)%SpaceDims(1)%s(2)-Grid(0)%SpaceDims(1)%s(1)  
+    ds(3)=Grid(0)%SpaceDims(3)%s(2)-Grid(0)%SpaceDims(3)%s(1)
+    first_entry=.FALSE.
+   endif
+  !!====================================================================
+  !!==================================================================== 
+    
+    !! loop over "all" the grid points on myid (ii,jj,kk)
+    do kk=1,locnz
+     x(3)=Grid(0)%SpaceDims(3)%x(k0+kk) !; write(0,*) 'K = ',kk
+      do jj=1,ny
+       x(2)=Grid(0)%SpaceDims(2)%x(jj) 
+        do ii=1,nx       
+         x(1)=Grid(0)%SpaceDims(1)%x(ii)
+    
+         !!========================================================
+         !! if x(ii,jj,kk) is 'near' IB surface, compute integral, 
+         !! otherwise, if x is too far from surface, do nothing
+         !!========================================================
+         if( abs( ( x(3) - h_IB(ii,jj) ) ) < d_inf(3)*eps(3) ) then
+    
+          !!================================================
+          !! above/below x(ii,jj,kk), define a range of i,j
+          !! values where d1 and d2 could be nonzero
+          !!================================================
+          istart = maxval( (/1,  ii - n_i/) )
+          iend   = minval( (/nx, ii + n_i/) )
+    
+          jstart = maxval( (/1,  jj - n_j/) )
+          jend   = minval( (/ny, jj + n_j/) )
+    
+          !!================================================
+          !! loop over this portion of the surface
+          !! and accumulate any contributions to F(x)
+          !!================================================
+          do j=jstart,jend
+           dyds= Grid(0)%SpaceDims(2)%dxds(j) 
+            dy = dyds*ds(2)
+            if(ny==1) dy=1.
+      
+            do i=istart,iend
+             dxds= Grid(0)%SpaceDims(1)%dxds(i) 
+             dx = dxds*ds(1)
+       
+              k=kplus(i,j)
+              dzds= Grid(0)%SpaceDims(3)%dxds(k) 
+              dz = dzds*ds(3)
+       
+              d1 = delta( (x(1)-x_IB(i,j)),eps(1) )
+              d2 = delta( (x(2)-y_IB(i,j)),eps(2) )
+              d3 = delta( (x(3)-h_IB(i,j)),eps(3) )
+              xx = SS(i,j)*d1*d2*d3*dx*dy*dz
+       
+              !! acumulate terms for the "idim" velocity component
+              do idim=1,3
+               velocity(idim)%SlabVals(ii,jj,kk)                         &
+                                 =  velocity(idim)%SlabVals(ii,jj,kk)    &
+                                 -  nhat(i,j,idim)*xx*dt
+              enddo
+       
+            enddo
+          enddo     !! end loop over section of surface for x(i,j)
+         
+         endif  !!  end process or no process for x(ii,jj,kk)
+         
+       enddo    !! next ii
+      enddo     !! next jj     
+     enddo      !! next kk, i.e. end loop over grid points on myid
+       
+   return
+  end subroutine IB_Update
+  !!====================================================================
+  !!====================================================================
+  
+  !!====================================================================
+  !!==================================================================== 
+   subroutine ForcingFilter
+    use user_data,              only: nx,ny
+    use etc,                    only: numzplanes_below                                  
+    use mpi_params,             only: myid
+    use intermediate_variables, only: scratch
+    use independent_variables,  only: Grid
+    implicit none
+    integer           :: i,j,k
+    integer,save      :: locnz,k0
+    real(kind=8)      :: x(3),step,delta,XX,YY,ZZ
+    external             step,delta
+   
+  !!====================================================================
+  !!====================================================================
+    locnz=ubound(scratch(1)%SlabVals,3)
+    k0=numzplanes_below(myid)
+    
+    !! loop over "all" the grid points on myid (i,j,k)
+    do k=1,locnz
+     x(3)=Grid(0)%SpaceDims(3)%x(k0+k) 
+      do j=1,ny
+       x(2)=Grid(0)%SpaceDims(2)%x(j) 
+        do i=1,nx       
+         x(1)=Grid(0)%SpaceDims(1)%x(i)
+    
+         
+          !! assuming the vector from x(:), that intersects
+          !! the IB surface normally, is not too far from
+          !! the surface point just above or below x(:). 
+          !! Use that point and it's unit normal to to get
+          !! the x,y and z distances from x(:) to the
+          !! actual closest point on IB to x(:).
+          XX = (x(3) - h_IB(i,j))*nhat(i,j,1)/(3.*eps(1))
+          YY = (x(3) - h_IB(i,j))*nhat(i,j,2)/(3.*eps(2))
+          ZZ = (x(3) - h_IB(i,j))*nhat(i,j,3)/(3.*eps(3))
+         
+          if(ZZ>=0.d0)  then
+           IB_Filter(i,j,k) = 1.d0 
+          else
+           IB_Filter(i,j,k) = exp(-XX**2) * exp(-YY**2) * exp(-ZZ**2)
+          endif
+       
+                           
+       enddo    
+      enddo       
+     enddo    
+     
+    
+       
+   return
+  end subroutine ForcingFilter
+  !!====================================================================
+  !!====================================================================
+   
+
+  !!====================================================================
+  !!====================================================================
+   subroutine ij_from_count(i,j,count)
+    use user_data, only: nx
+    implicit none
+    integer   :: i,j,count
+    j = (count-1)/nx + 1
+    i = count - (j-1)/nx
+    return
+   end subroutine ij_from_count
+  !!====================================================================
+  !!====================================================================
+   
+  !!====================================================================
+  !!====================================================================    
+   subroutine count_from_ij(i,j,count)
+    use user_data, only: nx
+    implicit none
+    integer   :: i,j,count
+    count = (j-1)/nx + i
+    return
+   end subroutine count_from_ij
+  !!====================================================================
+  !!====================================================================
+  
+  
+!======================================================================
+!======================================================================
+subroutine unit_normal(x,n)
+ use user_routines, only: eval_surface
+ implicit none
+ real(kind=8) :: x(2),n(3),h,h_x,h_y
+ real(kind=8) :: mag
+ 
+   call eval_surface(x,h,h_x,h_y)
+   mag = sqrt( h_x**2 + h_y**2 + 1. )
+   n(1)=-h_x/mag
+   n(2)=-h_y/mag
+   n(3)=1.d0/mag
+   
+ return
+end subroutine unit_normal  ! end of function unit_normal
+!======================================================================
+!======================================================================
+
+
+
+  
+!!====================================================================================  
+  end module immersed_boundary 
+!!====================================================================================
Index: /trunk/00FlowSolve_KW/src/initialize.f90
===================================================================
--- /trunk/00FlowSolve_KW/src/initialize.f90	(revision 6)
+++ /trunk/00FlowSolve_KW/src/initialize.f90	(revision 6)
@@ -0,0 +1,1573 @@
+subroutine initialize
+   
+ use mpi_params
+ use operators
+ use etc
+ use io_params 
+ use particles
+ use user_data
+ use dependent_variables
+ use intermediate_variables
+ use immersed_boundary
+   
+ implicit none  
+ character(len=80) :: message
+ real(kind=8)      :: ds,dxds,h1(3),xx
+
+ docfile='output/DetailsLog'
+ memoryfile='output/MemoryLog'
+ optionfile='input/PetscOptions'
+
+!!===========================================================
+!! Initialize mpi & petsc libraries
+!!===========================================================
+ call StartMPI(myid,numprocs,docfile,comm)
+ call PetscInitialize(optionfile,ierr)
+
+ if(myid==0) then
+  write(0,*) 'Creating log file : ',trim(docfile)
+  write(0,*) 'Using ',trim(optionfile),' for petsc user options.'
+  open(1,file=trim(docfile),position='rewind')
+   write(1,*) '============================================================ '
+   write(1,*) '============================================================ '
+   write(1,*) '                  INITIALIZATION REPORTS:'
+   write(1,*) '============================================================ '
+   write(1,*) '============================================================ '
+   write(1,*) '  '
+  close(1)
+  
+  open(2,file=trim(memoryfile),position='rewind')
+   write(2,*) ' =========================================================== '
+   write(2,*) ' =========================================================== '
+   write(2,*) '                  Memory Usage Reports:'
+   write(2,*) ' =========================================================== '
+   write(2,*) ' =========================================================== '
+   write(2,*) '  '
+   write(2,*) '  time step ................................', istep
+   write(2,*) '  Total Allocated Memory in GB .............',AllocatedMemoryGB
+  close(2)
+ endif
+ 
+ 
+ !!===========================================================
+ !! Read in user supplied parameter values 
+ !!===========================================================
+ if(myid==0) then
+  message = '...  Calling Read_UserData...'
+  write(0,*) message
+  call LogMessage(message,docfile)
+ endif
+ call Read_UserData 
+ 
+
+ !!===========================================================
+ !! Misc. preliminaries
+ !!===========================================================
+ if(myid==0) then
+  message =  '...  Calling PreliminaryTasks...'
+  write(0,*) message
+  call LogMessage(message,docfile)
+ endif
+ call PreliminaryTasks
+ 
+
+ 
+ !!===========================================================
+ !! Define
+ !!   3 space dimensions, 
+ !!   3 coordinate maps,
+ !!   1 tensor product grid
+ !!===========================================================
+ if(myid==0) then
+  message = '...  Calling SetupDomain ...'
+  write(0,*) message
+  call LogMessage(message,docfile)
+ endif
+ call SetupDomain(myid)
+ 
+ !!===========================================================
+ !! Create {CFD} scalar variables 
+ !!              velocity=[u,v,w] 
+ !!               scalars=[s1,s2]
+ !!       pressure variable [phi]
+ !!===========================================================
+ if(myid==0) then
+  message = '...  Calling CreateScalarVariables ...'
+  write(0,*) message
+  call LogMessage(message,docfile)
+ endif
+ call CreateScalarVariables 
+
+
+ !!===========================================================
+ !! Initialize the {CFD} dependent variables
+ !!===========================================================
+ if(myid==0) then
+  message = '...  Calling InitialConditions ...'
+  write(0,*) message
+  call LogMessage(message,docfile)
+ endif
+ call InitialConditions
+ call eos                !! so pd will be written out in t=0 fields
+                         !! choose the Divergence option to have 
+                         !! ux,vy,wz returned in
+                         !! scratch (2),(3) and (4)
+ 
+ !!===========================================================
+ !! Sanity: check divergence of ics
+ !!===========================================================
+ call Divergence(velocity,div_u,scratch(1),scratch(2))
+ 
+ if(myid==0) write(0,*)   &
+    '...  max u on myid=0 (m/s)',maxval(abs(velocity(1)%SlabVals))*U0
+ if(myid==0) write(0,*)   &
+    '...  max v on myid=0 (m/s)',maxval(abs(velocity(2)%SlabVals))*U0
+ if(myid==0) write(0,*)   &
+    '...  max w on myid=0 (m/s)',maxval(abs(velocity(3)%SlabVals))*U0
+  
+ if(myid==0) write(0,*) '... checking initial divergence '
+  
+ if(myid==0) write(0,*)   &
+    '...  max div on myid=0 (1/s)',maxval(abs(div_u%SlabVals))*(U0/Lz)
+ 
+ 
+ !!===========================================================
+ !! Initialize particles
+ !!===========================================================
+ if(myid==0) then
+  message = '... Calling InitializeParticles ...'
+  write(0,*) message
+  call LogMessage(message,docfile)
+ endif 
+ call InitializeParticles
+ 
+ !!===========================================================
+ !! Initialize the immersed boundary
+ !!===========================================================
+ if(myid==0) then
+  message = '... Calling InitializeImmersedBoundary ...'
+  write(0,*) message
+  call LogMessage(message,docfile)
+ endif 
+ call InitializeImmersedBoundary
+ 
+ !!===========================================================
+ !! Construct the petsc operators for iterative solves
+ !!===========================================================
+ if(myid==0) then
+  message = '... Calling ConstructOperators ...'
+  write(0,*) message
+  call LogMessage(message,docfile)
+ endif 
+ call ConstructOperators
+ 
+ 
+ !!===========================================================
+ !! Preliminaries....  
+ !!===========================================================
+ 
+ !!=====================================
+ !! Eqns all have the general form...
+ !! alpha(i) grad^2 [f]  + beta(i) * f  = rhs
+ !! for i=1,2...6
+ !! (though slightly modified if LES is chosen)
+ !! Set the constants defining the eqns.
+ !!=====================================
+ !!
+    alpha(1:3)=1.d0/Re       !! u,v,w viscous terms
+    alpha(4)=1.d0/(Pr(1)*Re) !! s1 diffusive term
+    alpha(5)=1.d0/(Pr(2)*Re) !! s2 diffusive term
+    alpha(6)=1.d0            !! pressure (Laplacian)
+ 
+    if(AM_order==3) then
+     beta(1:5)=(-2.d0/dt)      !! helmholtz term for 3nd order AdamsMoulton
+    elseif(AM_order==4) then
+     beta(1:5)=-12.d0/(5.*dt)  !! helmholtz term for 4rd order AdamsMoulton
+    else
+     stop 'problem w/ AM_order: must be 3 or 4 ... initialize.f90'
+    endif
+ 
+    beta(6)=0.d0              !! pressure  (Laplacian)
+ 
+ !!===========================================================
+ !! Use a scaling factor like dx^2 for
+ !! scaling A_FD if its needed
+ !!===========================================================
+   do i=1,3                     
+    ds=L(0)%Grid%SpaceDims(i)%ds
+    dxds= minval( L(0)%Grid%SpaceDims(i)%dxds(:) )
+    h1(i) = dxds*ds
+   enddo 
+   h2_scale_factor = minval(h1)**2
+ 
+  
+ !!===========================================================
+ !!==== PRESSURE ===> Matrix free L[f] 
+ !!===========================================================
+   field_id = 6 
+   if(myid==0) then
+    message = '... Building pressure solver: Create_L_Solver ...'
+    write(0,*) message
+    call LogMessage(message,docfile)
+   endif  
+   call Create_L_Solver ( ksp(field_id) )
+ 
+ 
+ !!===========================================================
+ !!==== VEL & SCALARS ===> Matrix free L[f]
+ !!=========================================================== 
+   if(myid==0) then
+    message = '... other variables... Create_L_Solvers '
+    write(0,*) message
+    call LogMessage(message,docfile)
+   endif 
+  
+ !!==========================================
+ !! u,v,w can generally share an L operator
+ !! scalars need their own if Pr is not 1,
+ !! otherwise they can share as well.
+ !!==========================================
+   field_id=1
+   call Create_L_Solver(ksp(field_id))
+   ksp(2)=ksp(1)
+   ksp(3)=ksp(1)
+    
+   if( Pr(1)==1 ) then
+    ksp(4)=ksp(1)
+   else
+    field_id=4
+    call Create_L_Solver(ksp(field_id))
+   endif
+  
+   if( Pr(2)==Pr(1) ) then
+    ksp(5)=ksp(4)
+   else
+    field_id=5
+    call Create_L_Solver(ksp(field_id))
+   endif
+    
+ if(myid==0) then
+   message = ' -----> routine Initialize exiting normally <---------- '
+   write(0,*) message
+   call LogMessage(message,docfile)
+  endif 
+     
+ !!===========================================================
+ call mpi_barrier(comm,ierr)
+ !!===========================================================
+ 
+end subroutine initialize
+!!===========================================================
+!!===========================================================
+
+
+!!===========================================================
+!!===========================================================
+subroutine PreliminaryTasks
+ use user_data
+ use etc
+ use particles
+ use io_params
+ use mpi_params
+ 
+ implicit none
+ 
+ if(myid==0) then
+  open(1,file=docfile,position='append')
+  write(1,*) ' =========================================================== '
+  write(1,*) ' =========================================================== '
+  write(1,*) '                  PreliminaryTasks Report:'
+  write(1,*) '============================================================ '
+  write(1,*) '============================================================ '
+  write(1,*) '  '
+ endif
+ 
+ 
+!!=========================================================== 
+!! Pressure boundary conditions are
+!! not meant to be a user option, set 
+!! them here
+!!===========================================================
+!! First, set pressure assuming walls in each direction
+ BCtype(6,:,:)='neumann'
+ 
+ !! if periodic, ALL variables will be periodic
+ if( xdim_periodic ) then
+  BCtype(:,1,:)='periodic'
+ endif
+ 
+ if( ydim_periodic ) then
+  BCtype(:,2,:)='periodic'
+ endif
+ 
+ if( zdim_periodic ) then
+  BCtype(:,3,:)='periodic'
+ endif
+ 
+!!===========================================================
+!! check to see whether pressure solve is in physical
+!! or wavenumber space
+!!===========================================================
+!! assume wavenumber space soln is ok to begin
+psolve_at_gridpoints=.FALSE.
+psolve_exp_coeffs=.TRUE.
+do_explicit_hydrostatic = .FALSE.
+
+!!===========================================================
+!! now see if there is reason to change these flags 
+!! transform soln only allowable for trig expansions
+!!===========================================================
+ do idim=1,3
+  if( trim(phi_deriv_types(idim)) .ne. 'sin' .and.    &
+      trim(phi_deriv_types(idim)) .ne. 'cos' .and.    &
+      trim(phi_deriv_types(idim)) .ne. 'fourier' ) then      
+      psolve_at_gridpoints=.TRUE.
+      psolve_exp_coeffs=.FALSE.
+  endif
+ enddo
+ 
+!!===========================================================
+!! spit out decision for pressure treatment 
+!!===========================================================
+ i=6
+ if(myid==0) then
+  write(1,*) '... psolve_at_gridpoints ',psolve_at_gridpoints
+  write(1,*) '... psolve_exp_coeffs    ',psolve_exp_coeffs
+  idim=1
+  write(1,*) '... phi   x direction at 0,Lx  :  ',  &
+     trim(BCtype(i,idim,1)),' ',trim(BCtype(i,idim,2)),' ', &
+     trim(phi_deriv_types(idim))
+  idim=2
+  write(1,*) '... phi   y direction at 0,Ly  :  ',  &
+     trim(BCtype(i,idim,1)),' ',trim(BCtype(i,idim,2)),' ', &
+     trim(phi_deriv_types(idim))
+  idim=3
+  write(1,*) '... phi   z direction at 0,Lz  :  ',  &
+     trim(BCtype(i,idim,1)),' ',trim(BCtype(i,idim,2)),' ', &
+     trim(phi_deriv_types(idim))
+ endif
+ 
+!!===========================================================
+!! check to see whether u solve is in physical
+!! or wavenumber space
+!!===========================================================
+!! assume wavenumber space soln is ok to begin
+ usolve_at_gridpoints=.FALSE.
+ usolve_exp_coeffs=.TRUE.
+
+!! now see if there is reason to switch 
+ do idim=1,3
+  if( trim(u_deriv_types(idim)) .ne. 'sin' .and.    &
+      trim(u_deriv_types(idim)) .ne. 'cos' .and.    &
+      trim(u_deriv_types(idim)) .ne. 'fourier' ) then
+      
+      usolve_at_gridpoints=.TRUE.
+      usolve_exp_coeffs=.FALSE.
+  endif
+ enddo
+ 
+ if(myid==0) then
+  i=1
+  write(1,*) '... usolve_at_gridpoints ',usolve_at_gridpoints
+  write(1,*) '... usolve_exp_coeffs    ',usolve_exp_coeffs
+  idim=1
+  write(1,*) '... u   x direction at 0,Lx  :  ',  &
+    trim(BCtype(i,idim,1)),' ',trim(BCtype(i,idim,2)),' ', &
+    trim(u_deriv_types(idim))
+  idim=2
+  write(1,*) '... u   y direction at 0,Ly  :  ',  &
+    trim(BCtype(i,idim,1)),' ',trim(BCtype(i,idim,2)),' ', &
+    trim(u_deriv_types(idim))
+  idim=3
+  write(1,*) '... u   z direction at 0,Lz  :  ',  &
+    trim(BCtype(i,idim,1)),' ',trim(BCtype(i,idim,2)),' ', &
+    trim(u_deriv_types(idim))
+ endif
+ 
+!!===========================================================
+!! check to see whether v solve is in physical
+!! or wavenumber space
+!!===========================================================
+!! assume wavenumber space soln is ok to begin
+vsolve_at_gridpoints=.FALSE.
+vsolve_exp_coeffs=.TRUE.
+
+!! now see if there is reason to switch 
+ do idim=1,3
+  if( trim(v_deriv_types(idim)) .ne. 'sin' .and.    &
+      trim(v_deriv_types(idim)) .ne. 'cos' .and.    &
+      trim(v_deriv_types(idim)) .ne. 'fourier' ) then
+      
+      vsolve_at_gridpoints=.TRUE.
+      vsolve_exp_coeffs=.FALSE.
+  endif
+ enddo
+  
+!!===========================================================
+!! check to see whether w solve is in physical
+!! or wavenumber space
+!!===========================================================
+!! assume wavenumber space soln is ok to begin
+wsolve_at_gridpoints=.FALSE.
+wsolve_exp_coeffs=.TRUE.
+
+!! now see if there is reason to switch 
+ do idim=1,3
+  if( trim(w_deriv_types(idim)) .ne. 'sin' .and.    &
+      trim(w_deriv_types(idim)) .ne. 'cos' .and.    &
+      trim(w_deriv_types(idim)) .ne. 'fourier' ) then
+      
+      wsolve_at_gridpoints=.TRUE.
+      wsolve_exp_coeffs=.FALSE.
+  endif
+ enddo
+ 
+ 
+!!===========================================================
+!! check to see whether s1 solve is in physical
+!! or wavenumber space
+!!===========================================================
+!! assume wavenumber space soln is ok to begin
+s1solve_at_gridpoints=.FALSE.
+s1solve_exp_coeffs=.TRUE.
+
+!! now see if there is reason to switch 
+ do idim=1,3
+  if( trim(s1_deriv_types(idim)) .ne. 'sin' .and.    &
+      trim(s1_deriv_types(idim)) .ne. 'cos' .and.    &
+      trim(s1_deriv_types(idim)) .ne. 'fourier' ) then
+      
+      s1solve_at_gridpoints=.TRUE.
+      s1solve_exp_coeffs=.FALSE.
+  endif
+ enddo
+  
+!!===========================================================
+!! check to see whether s2 solve is in physical
+!! or wavenumber space
+!!===========================================================
+!! assume wavenumber space soln is ok to begin
+s2solve_at_gridpoints=.FALSE.
+s2solve_exp_coeffs=.TRUE.
+
+!! now see if there is reason to switch 
+ do idim=1,3
+  if( trim(s2_deriv_types(idim)) .ne. 'sin' .and.    &
+      trim(s2_deriv_types(idim)) .ne. 'cos' .and.    &
+      trim(s2_deriv_types(idim)) .ne. 'fourier' ) then
+      
+      s2solve_at_gridpoints=.TRUE.
+      s2solve_exp_coeffs=.FALSE.
+  endif
+ enddo
+ 
+
+ if(myid==0) then
+  write(1,*) ' =========================================================== '
+  write(1,*) ' =========================================================== '
+  write(1,*) '                  Boundary Conditions Flags etc :'
+  write(1,*) '============================================================ '
+  write(1,*) '============================================================ '
+  idim=1
+  write(1,*) '  '
+  write(1,*) 'u   x direction at 0,Lx  :  ',  trim(BCtype(1,idim,1)),' ',  &
+     trim(BCtype(1,idim,2)),' ',trim(u_deriv_types(idim))
+  write(1,*) 'v   x direction at 0,Lx  :  ',  trim(BCtype(2,idim,1)),' ',  &
+     trim(BCtype(2,idim,2)),' ',trim(v_deriv_types(idim))
+  write(1,*) 'w   x direction at 0,Lx  :  ',  trim(BCtype(3,idim,1)),' ',  &
+     trim(BCtype(3,idim,2)),' ',trim(w_deriv_types(idim))
+  write(1,*) 's1  x direction at 0,Lx  :  ',  trim(BCtype(4,idim,1)),' ',  &
+     trim(BCtype(4,idim,2)),' ',trim(s1_deriv_types(idim))
+  write(1,*) 's2  x direction at 0,Lx  :  ',  trim(BCtype(5,idim,1)),' ',  &
+     trim(BCtype(5,idim,2)),' ',trim(s2_deriv_types(idim))
+  write(1,*) ' xdim_periodic ',xdim_periodic
+  write(1,*) '  '
+  idim=2
+  write(1,*) 'u   y direction at 0,Lx  :  ',  trim(BCtype(1,idim,1)),' ',  &
+     trim(BCtype(1,idim,2)),' ',trim(u_deriv_types(idim))
+  write(1,*) 'v   y direction at 0,Lx  :  ',  trim(BCtype(2,idim,1)),' ',  &
+     trim(BCtype(2,idim,2)),' ',trim(v_deriv_types(idim))
+  write(1,*) 'w   y direction at 0,Lx  :  ',  trim(BCtype(3,idim,1)),' ',  &
+     trim(BCtype(3,idim,2)),' ',trim(w_deriv_types(idim))
+  write(1,*) 's1  y direction at 0,Lx  :  ',  trim(BCtype(4,idim,1)),' ',  &
+     trim(BCtype(4,idim,2)),' ',trim(s1_deriv_types(idim))
+  write(1,*) 's2  y direction at 0,Lx  :  ',  trim(BCtype(5,idim,1)),' ',  &
+     trim(BCtype(5,idim,2)),' ',trim(s2_deriv_types(idim))
+  write(1,*) ' ydim_periodic ',ydim_periodic
+  write(1,*) '  '
+  idim=3
+  write(1,*) 'u   z direction at 0,Lx  :  ',  trim(BCtype(1,idim,1)),' ',  &
+     trim(BCtype(1,idim,2)),' ',trim(u_deriv_types(idim))
+  write(1,*) 'v   z direction at 0,Lx  :  ',  trim(BCtype(2,idim,1)),' ',  &
+     trim(BCtype(2,idim,2)),' ',trim(v_deriv_types(idim))
+  write(1,*) 'w   z direction at 0,Lx  :  ',  trim(BCtype(3,idim,1)),' ',  &
+     trim(BCtype(3,idim,2)),' ',trim(w_deriv_types(idim))
+  write(1,*) 's1  z direction at 0,Lx  :  ',  trim(BCtype(4,idim,1)),' ',  &
+     trim(BCtype(4,idim,2)),' ',trim(s1_deriv_types(idim))
+  write(1,*) 's2  z direction at 0,Lx  :  ',  trim(BCtype(5,idim,1)),' ',  &
+     trim(BCtype(5,idim,2)),' ',trim(s2_deriv_types(idim))
+  write(1,*) ' zdim_periodic ',zdim_periodic
+  write(1,*) '  '
+  write(1,*) '  '
+  write(1,*) '  '
+ endif
+ 
+
+!!===========================================================
+!! explicit methods start @ 1st order
+!!===========================================================
+ step_flag='euler'
+ particle_step_flag='euler'
+
+!!===========================================================
+!! create mpi derived types
+!! set to 'no' once all types
+!! created
+!!===========================================================
+ DoMPITypes(:)='yes'
+
+!!===========================================================
+!! I'll set the explicit & implicit
+!! timestepping orders for now
+!!===========================================================
+ AB_order=3         !! k=3 step method error=O(h^4)
+ AM_order=AB_order  !! k=2 step method error=O(h^4)
+
+!!===========================================================
+!! initial values for cyclic counters
+!!===========================================================
+ MM0=1;MM1=2;MM2=3;MM3=4  !! for AB timestepping
+ PM0=1;PM1=2;PM2=3;PM3=4  !! for AB stepping particles
+ N=1;NM1=2                !! for AM timestepping
+ M_oldest=AB_order
+ P_oldest=PM3
+ N_oldest=AM_order-2
+ time_counter(:)=1
+ iend = nint( (t_end-t_start)/dt )
+ t_secs = t_start
+ 
+ !!===========================================================
+ !!Dimensional scales
+ !!===========================================================
+ time_scale = Lz/u0
+ p_scale = rho_0*u0**2
+ bfreq = sqrt((g/rho_0)*DGRAD)
+ 
+ !!===========================================================
+ !!Dimensionless parameters.
+ !!
+ !! N.B.
+ !! if a scalar is pd, scale it consistently with
+ !! how I do the perturbation density in the w eqn, 
+ !! ====> in this case, ignore user supplied scale
+ !!===========================================================
+ if( scalar_kind(1)=='r' ) then
+  s1_scale=Lz*dgrad
+ endif
+ if( scalar_kind(2)=='r' ) then
+  s2_scale=Lz*dgrad
+ endif
+ if( scalar_kind(1)=='r' .and. scalar_kind(2)=='r' ) then
+  stop 'cant have both scalars set to density'
+ endif
+ Rot= f*Lz/U0
+ beta_tilde = beta_dimensional*(Lz*Lz/u0)
+ N2 = (g/rho_0)*dgrad
+ Ri = N2*Lz**2/(U0**2)
+ Re = U0*Lz/nu
+ Pr(1) = nu/kappa_1
+ Pr(2) = nu/kappa_2
+ 
+ !!===========================================================
+ !!   ===> from here on... dt is DIMENSIONLESS
+ !!===========================================================
+ dt = dt/time_scale   !! time step now dimensionless
+ !!===========================================================
+ !!===========================================================
+ 
+ !!===========================================================
+ !!    Write out parameters characterizing simulation.
+ !!===========================================================
+ if( myid == 0 ) then  
+  write(1,*) ' bulk velocity scale U                   [m/s]:  ',U0
+  write(1,*) ' characteristic density gradient scale [kg/m4]:  ',dgrad
+  write(1,*) ' characteristic range of scalar 1 [e.g. deg C]:  ',s1_scale
+  write(1,*) ' characteristic range of scalar 2   [e.g. psu]:  ',s2_scale
+  write(1,*) ' characteristic density                [kg/m3]:  ',rho_0
+  write(1,*) ' coriolis parameter f                    [1/s]:  ',f
+  write(1,*) ' gravitational acceleration g           [m/s2]:  ',g
+  write(1,*) ' molecular diffusivity of scalar 1      [m2/s]:  ',kappa_1
+  write(1,*) ' molecular diffusivity of scalar 2      [m2/s]:  ',kappa_2
+  write(1,*) ' viscosity                              [m2/s]:  ',nu
+  write(1,*) ' '
+  write(1,*) ' '
+  write(1,*) ' time step dt                             [s] :  ',dt*time_scale
+  write(1,*) ' initial time                             [s] :  ',t_start
+  write(1,*) ' final time                               [s] :  ',t_end
+  write(1,*) ' Lz/U0                                    [s] :  ',time_scale
+  write(1,*) ' number of steps                              :  ',iend-istart+1
+  write(1,*) ' '
+  write(1,*) ' '
+  write(1,*) ' inverse Rossby number                fL/U    :  ',Rot
+  write(1,*) ' bulk Richardson number (NL/U)^               :  ',Ri
+  write(1,*) ' bulk Reynolds number UL/nu                   :  ',Re
+  write(1,*) ' Prandtl number  nu/kappa_1                   :  ',Pr(1)
+  write(1,*) ' Prandtl number  nu/kappa_2                   :  ',Pr(2)
+  write(1,*) ' N/f                                          :  ',sqrt(N2)/f
+  write(1,*) ' sqrt(nu/f)                               [m] :  ',sqrt(nu)/f
+  write(1,*) ' '
+  write(1,*) ' '
+  write(1,*) ' -----> PreliminaryTasks routine exiting normally  <---------- '
+  write(0,*) ' -----> PreliminaryTasks routine exiting normally  <---------- '
+ close(1)
+ endif 
+ 
+!!===========================================================
+!!===========================================================
+!! this needs to be thought through again...
+!!===========================================================
+!!===========================================================
+ if( LES ) then
+  p_les(:) = 3  !! i.e. k^6
+  T_les = 2.*pi * minval( (/ 1./Rot, 1./Ri, 1.d0 /) )  
+ 
+  !! require eg. that alpha_les(1) * k^2p * t = O(1) when
+  !!   k = .85*k_max  and 
+  !!   t = T_les, the shortest time scale I find w/ scaling
+  !!   (everything dimensionless here)
+ 
+  alpha_les(1) = 1./( T_les * (pi*(nx)*(Lz/Lx) )**(2.*p_les(1)) ) !! x direction
+  alpha_les(2) = 1./( T_les * (pi*(ny)*(Lz/Ly) )**(2.*p_les(2)) ) !! y direction
+  alpha_les(3) = 1./( T_les * (pi*(nz)*(Lz/Lz) )**(2.*p_les(3)) ) !! z direction
+ 
+  if(ny==1) alpha_les(2)=0.d0
+ elseif( DNS ) then
+  alpha_les(:)=0.d0
+  p_les=0.d0
+ endif
+!!===========================================================
+!!===========================================================
+ 
+end subroutine PreliminaryTasks
+!!===========================================================
+!!===========================================================
+
+
+
+!!===========================================================
+!!===========================================================
+subroutine SetupDomain
+ use class_CoordinateMap
+ use class_TensorProductGrid
+ use independent_variables
+ use etc
+ use mpi_params
+ use user_data
+ use user_routines
+
+ implicit none
+ type( CoordinateMap )      :: CoordMap(3)
+ character (len=80)         :: MapLabel
+ character (len=80)         :: CoordName
+ integer                    :: level,job,rem,nmax,idim
+ integer,dimension(5)       :: jerr
+ integer,dimension(3)       :: npts,npts_coarse=5
+ integer,dimension(3)       :: DirIndex=(/1,2,3/)
+ real(kind=8)               :: limits(2)
+ real(kind=8)               :: ds,Lvals(3)
+ real(kind=8),allocatable   :: x(:),s(:),dxds(:),d2xds2(:)
+ logical,dimension(3)       :: periodic
+!=========================================================================== 
+!=========================================================================== 
+   
+ if(myid==0) then
+  open(1,file=docfile,position='append')
+  write(1,*) ' =========================================================== '
+  write(1,*) ' =========================================================== '
+  write(1,*) '                  SetupDomain Report:'
+  write(1,*) ' =========================================================== '
+  write(1,*) ' =========================================================== '
+  write(1,*) '  '
+  
+  open(2,file=memoryfile,position='append')
+  write(2,*) ' =========================================================== '
+  write(2,*) ' =========================================================== '
+  write(2,*) '                  Memory Usage SetupDomain:'
+  write(2,*) ' =========================================================== '
+  write(2,*) ' =========================================================== '
+  write(2,*) '  '
+  write(2,*) '  time step ................................', istep
+  write(2,*) '  Total Allocated Memory in GB .............',AllocatedMemoryGB
+ endif
+
+!!===========================================================  
+!!Construct coordinate maps and grid at each multigrid level.
+!!This coarsening algorithm should match petsc's refine/coarsen.
+!!===========================================================
+ npts=(/nx,ny,nz/)
+ nmax=MAXVAL( (/nx,ny,nz/) )
+ periodic=(/xdim_periodic,ydim_periodic,zdim_periodic/)
+ Lvals=(/Lx,Ly,Lz/)
+
+ if(myid==0) write(1,*) ' Constructing coordinate maps, space dimensions, ' 
+ if(myid==0) write(1,*) ' & grids for each level of the multigrid heirarchy.'
+
+ allocate( mgrefine(3,0:1-1) ) 
+ mgrefine(:,:) = -999 
+ if( xdim_periodic ) npts_coarse(1)=-999
+ if( ydim_periodic ) npts_coarse(2)=-999
+
+do level=0,1-1   
+  
+!!===================================================================
+!! scaled x dimension:         x in [0,Lx/Lz] ----> CoordMap(1)
+!! scaled y dimension:         y in [0,Ly/Lz] ----> CoordMap(2)
+!! scaled, global z dimension: z in [0,Lz/Lz] ----> CoordMap(3)
+!!===================================================================
+
+
+do idim=1,3
+
+ allocate(      x(npts(idim)), stat=jerr(1) )
+ allocate(      s(npts(idim)), stat=jerr(2) )
+ allocate(   dxds(npts(idim)), stat=jerr(3) )
+ allocate( d2xds2(npts(idim)), stat=jerr(4) )
+ 
+ !!===========================================================
+ !! Check for allocation errors
+ !!===========================================================
+ if(jerr(1)/=0)   &
+  stop 'problem allocating memory for ...x in SetupDomain/initialize.f90'
+ if(jerr(2)/=0)   &
+  stop 'problem allocating memory for ...s in SetupDomain/initialize.f90'
+ if(jerr(3)/=0)   &
+  stop 'problem allocating memory for .x_s in SetupDomain/initialize.f90'
+ if(jerr(4)/=0)   &
+  stop 'problem allocating memory for x_ss in SetupDomain/initialize.f90'
+
+ !!===========================================================
+ !! Call user routine to get gridpoint values via s-->x map
+ !!===========================================================
+ call map_s2x_at_gridpoints(idim,periodic(idim),s,Lvals(idim), &
+                            x,dxds,d2xds2,MapLabel)
+ if(npts(idim)==1) then
+  x=0.d0
+  s=0.d0
+  dxds=1.d0  !! I divide by dxds to get dsdx
+  d2xds2=0.d0
+ endif
+  
+ !!===========================================================
+ !! Scale the results using Lz [m], s is dimensionless
+ !!===========================================================
+ x=x/Lz   
+ dxds=dxds/Lz 
+ d2xds2=d2xds2/Lz
+ 
+ CoordMap(idim)    &
+   = NewCoordinateMap(npts(idim),MapLabel,x,s,      &
+                      dxds,d2xds2,Lvals(idim)/Lz)
+ 
+ !!======================================================== 
+ !! Record details
+ !!======================================================== 
+ if( level==0 .and. myid==0 ) then
+  close(1)
+  call DescribeCoordinateMap(CoordMap(idim),docfile)
+  open(1,file=docfile,position='append')
+ endif
+ 
+ !!======================================================== 
+ !! Output 1d gridpoint & stretching vectors
+ !!========================================================
+ if(idim==1) open(10,file='output/xvec',position='rewind')
+ if(idim==2) open(10,file='output/yvec',position='rewind')
+ if(idim==3) open(10,file='output/zvec',position='rewind')
+ do k=1,npts(idim)
+  write(10,*) k,x(k)*Lz,dxds(k)*Lz,d2xds2(k)*Lz
+ enddo
+ close(10)
+ 
+ !!========================================================
+ !! coarsen grid in dimension idim for next level
+ !!  ... historical really, we're fixed at 1 level
+ !!========================================================
+ rem        = mod( npts(idim),mgrefine(idim,level) )
+ npts(idim) = ( npts(idim)-rem)/(mgrefine(idim,level) ) + rem
+ npts(idim) = maxval( (/npts_coarse(idim),npts(idim)/) ) 
+ 
+ deallocate(     x)
+ deallocate(     s)
+ deallocate(  dxds)
+ deallocate(d2xds2)
+ 
+enddo
+
+!!======================================================== 
+!! Link the coordinate maps together to form a T.P. grid
+!!======================================================== 
+ call NewTensorProductGrid(CoordMap,Grid(level))
+  
+enddo    !! end loop over multigrid levels
+ 
+!!=================================================================
+!! setup weightings for easy spatial integration
+!! first, set all weights to dz = dz/ds * ds  etc
+!!=================================================================
+allocate( int_weights_x(nx) )
+allocate( int_weights_y(ny) )
+allocate( int_weights_z(nz) )
+
+idim=1
+int_weights_x(:) = CoordMap(idim)%dxds(:) * CoordMap(idim)%ds
+idim=2
+int_weights_y(:) = CoordMap(idim)%dxds(:) * CoordMap(idim)%ds
+idim=3
+int_weights_z(:) = CoordMap(idim)%dxds(:) * CoordMap(idim)%ds
+
+!!=================================================================
+!! now incorporate the numerical weights for Simpsons
+!! closed extended rule w/ error O(1/N^4)
+!! except for periodic directions where weights are all equal
+!!=================================================================
+if( .not. xdim_periodic .and. nx>3) then
+ int_weights_x(1) = int_weights_x(1) * (3.d0/8.d0)
+ int_weights_x(2) = int_weights_x(2) * (7.d0/6.d0)
+ int_weights_x(3) = int_weights_x(3) * (23.d0/24.d0)
+
+ int_weights_x(nx-2) = int_weights_x(nx-2) * (23.d0/24.d0)
+ int_weights_x(nx-1) = int_weights_x(nx-1) * (7.d0/6.d0)
+ int_weights_x(nx) = int_weights_x(nx) * (3.d0/8.d0)
+endif
+
+if( .not. ydim_periodic .and. ny>3) then
+ int_weights_y(1) = int_weights_y(1) * (3.d0/8.d0)
+ int_weights_y(2) = int_weights_y(2) * (7.d0/6.d0)
+ int_weights_y(3) = int_weights_y(3) * (23.d0/24.d0)
+
+ int_weights_y(ny-2) = int_weights_y(ny-2) * (23.d0/24.d0)
+ int_weights_y(ny-1) = int_weights_y(ny-1) * (7.d0/6.d0)
+ int_weights_y(ny) = int_weights_y(ny) * (3.d0/8.d0)
+endif
+
+if( ny==1 ) int_weights_y=1.d0
+
+if( .not. zdim_periodic .and. nz>3 ) then
+ int_weights_z(1) = int_weights_z(1) * (3.d0/8.d0)
+ int_weights_z(2) = int_weights_z(2) * (7.d0/6.d0)
+ int_weights_z(3) = int_weights_z(3) * (23.d0/24.d0)
+
+ int_weights_z(nz-2) = int_weights_z(nz-2) * (23.d0/24.d0)
+ int_weights_z(nz-1) = int_weights_z(nz-1) * (7.d0/6.d0)
+ int_weights_z(nz) = int_weights_z(nz) * (3.d0/8.d0)
+endif
+
+deallocate(mgrefine)
+if(myid==0) then
+ write(1,*) ' -----> SetupDomain routine exiting normally  <---------- '
+ write(0,*) ' -----> SetupDomain routine exiting normally  <---------- '
+ close(1)
+endif
+end subroutine SetupDomain
+!!===========================================================
+!!===========================================================
+
+
+
+
+
+subroutine CreateScalarVariables
+!===========================================================================
+!===========================================================================
+!Classes
+ use class_TensorProductGrid
+ use class_DataDecomposition
+ use class_ScalarVariable
+ use class_CoordinateMap
+
+!!Modules
+ use mpi_params 
+ use user_data
+ use etc
+ use dependent_variables
+ use independent_variables
+ use intermediate_variables
+ use operators
+!=========================================================================== 
+!===========================================================================
+ implicit none
+ 
+ character(len=80)    :: label
+ character(len=80)    :: scalarname
+ 
+ integer              :: level,jerr(5),islice
+ real(kind=8)         :: scale
+ integer,allocatable  :: numplanes(:)
+!===========================================================================
+!===========================================================================
+
+
+
+ if(myid==0) then
+  open(1,file=docfile,position='append')
+  write(1,*) ' =========================================================== '
+  write(1,*) ' =========================================================== '
+  write(1,*) '              CreateScalarVariables Report:'
+  write(1,*) ' =========================================================== '
+  write(1,*) ' =========================================================== '
+  write(1,*) '  '
+  close(1)
+  open(2,file=memoryfile,position='append')
+  write(2,*) ' =========================================================== '
+  write(2,*) ' =========================================================== '
+  write(2,*) '                  Memory Usage CreateScalarVariables:'
+  write(2,*) ' =========================================================== '
+  write(2,*) ' =========================================================== '
+  write(2,*) '  '
+  write(2,*) '  time step ................................', istep
+  write(2,*) '  Total Allocated Memory in GB .............',AllocatedMemoryGB
+ endif
+
+!!=========================================================================== 
+!!Use the number of processors, the grid parameters and the derivative types
+!!to layout the distributed data arrays. Give each variable its own data
+!!decomposition map.
+!!===========================================================================
+ level=0 !! finest level
+ if(myid==0) write(0,*) '... creating NewDataDecompositions'
+ 
+ label='U'
+ call NewDataDecomposition(label,Grid(0),level,U_deriv_types,U_DataMap)
+ label='V'
+ call NewDataDecomposition(label,Grid(0),level,V_deriv_types,V_DataMap)
+ label='W'
+ call NewDataDecomposition(label,Grid(0),level,W_deriv_types,W_DataMap)
+ label='S1'
+ call NewDataDecomposition(label,Grid(0),level,S1_deriv_types,S1_DataMap)
+ label='S2'
+ call NewDataDecomposition(label,Grid(0),level,S2_deriv_types,S2_DataMap)
+ label='Div_U'
+  
+ !! deriv types for divergence don't really matter since we won't
+ !! ever differentiate div(u*)
+ div_deriv_types=U_deriv_types
+ label='Div_U'
+ call NewDataDecomposition(label,Grid(0),level,div_deriv_types,DIV_DataMap)
+  
+ call DescribeDecomposition(U_DataMap,docfile)
+ call DescribeDecomposition(V_DataMap,docfile)
+ call DescribeDecomposition(W_DataMap,docfile)
+ call DescribeDecomposition(S1_DataMap,docfile)
+ call DescribeDecomposition(S2_DataMap,docfile)
+  
+ allocate( numzplanes(0:numprocs-1), stat=jerr(1) )
+ allocate( numzplanes_below(0:numprocs-1), stat=jerr(2) )
+ allocate( numplanes(0:numprocs-1), stat=jerr(3) )
+ 
+ if(jerr(1)/=0)  &
+   stop 'problem allocating numzplanes in CreateScalarVariables'
+ if(jerr(2)/=0)  &
+   stop 'problem allocating numzplanes_below in CreateScalarVariables'
+ if(jerr(3)/=0)  &
+   stop 'problem allocating numplanes in CreateScalarVariables'
+ 
+ !!=====================================================
+ !! count numbewr of grid points below processor myid
+ !! in 'column' orientation and to the left for 'slabs'
+ !!=====================================================
+ numzplanes=0; numzplanes_below=0; numplanes=0
+
+ if(myid==0) write(0,*) '... MPI AllReduce ...',myid,numprocs
+ if(U_DataMap%locnz .ne. DIV_DataMap%locnz)    &
+   stop 'datamaps are different u & div_u locnz'
+   
+ numzplanes(myid) = U_DataMap%locnz
+ call mpi_allreduce(numzplanes,numplanes,numprocs,         &
+                    mpi_integer,mpi_sum,comm,ierr )
+ numzplanes=numplanes
+
+ numzplanes_below(myid) = U_DataMap%my_global_kvals(1)-1
+ call mpi_allreduce(numzplanes_below,numplanes,numprocs,   &
+                    mpi_integer,mpi_sum,comm,ierr )
+ numzplanes_below=numplanes
+ 
+ allocate( numxplanes(0:numprocs-1), numxplanes_left(0:numprocs-1) )
+ numxplanes=0; numxplanes_left=0; numplanes=0
+
+ if(U_DataMap%locnx .ne. DIV_DataMap%locnx)    &
+   stop 'datamaps are different u & div_u locnx'
+   
+ numxplanes(myid) = U_DataMap%locnx
+ call mpi_allreduce(numxplanes,numplanes,numprocs,         &
+                    mpi_integer,mpi_sum,comm,ierr )
+ numxplanes=numplanes
+
+ numxplanes_left(myid) = U_DataMap%my_global_ivals(1)-1
+ call mpi_allreduce(numxplanes_left,numplanes,numprocs,   &
+                    mpi_integer,mpi_sum,comm,ierr )
+ numxplanes_left=numplanes
+ deallocate(numplanes)
+ 
+ !!===========================================================================
+ !!allocate arrays for ambient scalar profiles
+ !!each processor stores its local portion only
+ !!===========================================================================
+ allocate( s1_bar(numzplanes(myid)) )
+ allocate( s2_bar(numzplanes(myid)) )
+ allocate( ddz_s1_bar(numzplanes(myid)) )
+ allocate( ddz_s2_bar(numzplanes(myid)) )
+ allocate( ddzz_s1_bar(numzplanes(myid)) )
+ allocate( ddzz_s2_bar(numzplanes(myid)) )
+ 
+ if(myid==0) then
+  NewAllocationGB = 4*numzplanes(myid)*8*GBperByte
+  AllocatedMemoryGB = AllocatedMemoryGB + NewAllocationGB
+  write(2,*) '  New allocations s1_bar,s2_bar etc ........',NewAllocationGB
+  write(2,*) '  Total Allocated Memory in GB .............',AllocatedMemoryGB
+  write(2,*) '   '
+  close(2)
+endif
+
+!!=========================================================================== 
+!!Create ScalarVariable objects that exist only on the finest gridlevel=0
+!!===========================================================================
+
+ if(myid==0) open(1,file=docfile,position='append')
+ if(myid==0) write(1,*) ' Creating ScalarVariables on fine grid level for '
+ if(myid==0) write(1,*) ' velocity(:), scalars(:) '
+ if(myid==0) write(0,*) '... creating scalars velocity[],s1,s2,pd,rhs_b'
+ if(myid==0) close(1)
+ 
+ 
+ do i=1,1          
+  scalarname = 'u'
+  if(myid==0) write(0,*) '... creating scalar u'
+  call NewScalar(scalarname,Grid(0),U_DataMap,u0,velocity(1))  
+ 
+  scalarname = 'v'
+  if(myid==0) write(0,*) '... creating scalar v'
+  call NewScalar(scalarname,Grid(0),V_DataMap,u0,velocity(2))
+ 
+  scalarname = 'w'
+  if(myid==0) write(0,*) '... creating scalar w'
+  call NewScalar(scalarname,Grid(0),W_DataMap,u0,velocity(3))
+ 
+  scalarname = 's1'
+  if(myid==0) write(0,*) '... creating scalar s1'
+  call NewScalar(scalarname,Grid(0),S1_DataMap,s1_scale,scalars(1)) 
+ 
+  scalarname = 's2'
+  if(myid==0) write(0,*) '... creating scalar s2'
+  call NewScalar(scalarname,Grid(0),S2_DataMap,s2_scale,scalars(2))
+ enddo
+ 
+  scalarname = 'pd'
+   if(myid==0) write(0,*) '... creating scalar pd'
+  call NewScalar(scalarname,Grid(0),S2_DataMap,s2_scale,pd)
+ 
+  scalarname = 'div_u'
+  if(myid==0) write(0,*) '... creating scalar div_u'
+  scale=1/time_scale
+  call NewScalar(scalarname,Grid(0),DIV_DataMap,scale,div_u)
+ 
+  do j=1,AM_order-2  
+   scalarname = 'implicit_rhs_u'
+   if(myid==0) write(0,*) '... creating scalar implicit_rhs(1)'
+   scale=1/time_scale
+   call NewScalar(scalarname,Grid(0),U_DataMap,scale,implicit_rhs(1,j))
+ 
+   scalarname = 'implicit_rhs_v'
+   if(myid==0) write(0,*) '... creating scalar implicit_rhs(2)'
+   scale=1/time_scale
+   call NewScalar(scalarname,Grid(0),U_DataMap,scale,implicit_rhs(2,j))
+ 
+   scalarname = 'implicit_rhs_w'
+   if(myid==0) write(0,*) '... creating scalar implicit_rhs(3)'
+   scale=1/time_scale
+   call NewScalar(scalarname,Grid(0),U_DataMap,scale,implicit_rhs(3,j))
+ 
+   scalarname = 'implicit_rhs_s1'
+   if(myid==0) write(0,*) '... creating scalar implicit_rhs(4)'
+   scale=1/time_scale
+   call NewScalar(scalarname,Grid(0),U_DataMap,scale,implicit_rhs(4,j))
+ 
+   scalarname = 'implicit_rhs_s2'
+   if(myid==0) write(0,*) '... creating scalar implicit_rhs(5)'
+   scale=1/time_scale
+   call NewScalar(scalarname,Grid(0),U_DataMap,scale,implicit_rhs(5,j))
+  enddo
+
+   
+  if(myid==0) write(0,*) '... creating ScalarVariable explicit_rhsx5x',AB_ORDER
+  scale=(u0**2/Lz)
+  do islice=1,AB_order
+   scalarname = 'explicit_rhs_1'
+   call NewScalar(scalarname,Grid(0),U_DataMap,scale,explicit_rhs(1,islice))
+   scalarname = 'explicit_rhs_2'
+   call NewScalar(scalarname,Grid(0),V_DataMap,scale,explicit_rhs(2,islice))
+   scalarname = 'explicit_rhs_3'
+   call NewScalar(scalarname,Grid(0),W_DataMap,scale,explicit_rhs(3,islice))
+   scalarname = 'explicit_rhs_4'
+   call NewScalar(scalarname,Grid(0),S1_DataMap,scale,explicit_rhs(4,islice))
+   scalarname = 'explicit_rhs_5'
+   call NewScalar(scalarname,Grid(0),S2_DataMap,scale,explicit_rhs(5,islice))
+  enddo
+
+!!===========================================================================  
+!! Create DataDecomposition and 
+!! ScalarVariable Phi for each grid level:
+!!===========================================================================
+ label = 'phi'
+ do level=0,mglevels-1
+  call NewDataDecomposition( label, Grid(level), level,            &
+                             Phi_deriv_types, Phi_DataMap(level) )
+  scalarname = 'Phi'
+  if(myid==0) write(0,*) '... creating scalar Phi at grid level ',level
+  
+  call NewScalar( scalarname, Grid(level),            &
+                  Phi_DataMap(level), U0, Phi(level) )  
+  call DescribeDecomposition(Phi_DataMap(level),docfile)
+  
+  if(myid==0)  &
+    write(0,*) '... Phi_deriv_types(1): ',trim( Phi(level)%DerivTypes(1) )
+  if(myid==0)  &
+    write(0,*) '... Phi_deriv_types(2): ',trim( Phi(level)%DerivTypes(2) )
+  if(myid==0)  &
+    write(0,*) '... Phi_deriv_types(3): ',trim( Phi(level)%DerivTypes(3) )
+ enddo
+ 
+ scalarname = 'rhs_b'
+  if(myid==0) write(0,*) '... creating scalar rhs b'
+  scale=(u0/Lz)**2   !! [p]=rho_0 u0^2  --> 1/rho_0 grad^2 p
+  call NewScalar(scalarname,Grid(0),Phi_DataMap(0),scale,rhs_b)
+  if(myid==0)  &
+    write(0,*) '... rhs_b_deriv_types(1): ',trim( rhs_b%DerivTypes(1) )
+  if(myid==0)  &
+    write(0,*) '... rhs_b_deriv_types(2): ',trim( rhs_b%DerivTypes(2) )
+  if(myid==0)  &
+    write(0,*) '... rhs_b_deriv_types(3): ',trim( rhs_b%DerivTypes(3) )
+ 
+ if(myid==0) write(0,*) '... creating scalar scratch x 4'
+ scale=1
+ scalarname = 'scratch(1)'
+ call NewScalar(scalarname,Grid(0),Phi_DataMap(0),scale,scratch(1))
+ scalarname = 'scratch(2)'
+ call NewScalar(scalarname,Grid(0),Phi_DataMap(0),scale,scratch(2))
+ scalarname = 'scratch(3)'
+ call NewScalar(scalarname,Grid(0),Phi_DataMap(0),scale,scratch(3))
+ scalarname = 'scratch(4)'
+ call NewScalar(scalarname,Grid(0),Phi_DataMap(0),scale,scratch(4))
+   
+ !!call TestGatherScatter(velocity(1))
+
+if(myid==0) then
+ open(1,file=docfile,position='append')
+ write(0,*) ' -----> CreateScalarVariables routine exiting normally  <---------- '
+ write(1,*) ' -----> CreateScalarVariables routine exiting normally  <---------- '
+ open(2,file=memoryfile,position='append')
+  write(2,*) ' -----> CreateScalarVariables routine exiting normally  <---------- '
+ close(2)
+ close(1)
+endif 
+end subroutine CreateScalarVariables
+
+
+!!=================================================================
+!!=================================================================
+ subroutine InitialConditions      
+  !!Routine to call user_ics to initialize
+  !!the dependent variables  
+  use user_routines
+  use user_data
+  use etc
+  use mpi_params
+  use dependent_variables
+  use independent_variables,  only: Grid
+  use intermediate_variables
+  
+  implicit none
+      
+  real(kind=8)                     :: scale_factor(5),zpos
+  real(kind=8)                     :: kx,kz,ff,dsdx,dsdz
+  integer                          :: kg,xx
+  integer                          :: m1,m2,m3,k0,k1,my_k
+  character(len=80)                :: for_inv_flag
+  
+  if(myid==0) then
+   open(1,file=docfile,position='append')
+   write(1,*) ' =========================================================== '
+   write(1,*) ' =========================================================== '
+   write(1,*) '              InitialConditions Report:'
+   write(1,*) ' =========================================================== '
+   write(1,*) ' =========================================================== '
+   write(1,*) '  '
+  endif
+ 
+  scale_factor(1:3) = 1./(U0)
+  scale_factor(4)   = 1./(s1_scale)
+  scale_factor(5)   = 1./(s2_scale)
+  if(myid==0) then
+   write(1,*) 'Scale factor for u ',scale_factor(1) 
+   write(1,*) 'Scale factor for v ',scale_factor(2) 
+   write(1,*) 'Scale factor for w ',scale_factor(3) 
+   write(1,*) 'Scale factor for s1 ',scale_factor(4) 
+   write(1,*) 'Scale factor for s2 ',scale_factor(5)
+  endif
+              
+  m1=velocity(1)%DataMap%SlabDims(1,myid)
+  m2=velocity(1)%DataMap%SlabDims(2,myid)
+  m3=velocity(1)%DataMap%SlabDims(3,myid)
+  
+  !!=====================================================
+  !! figure out which portion of the global 
+  !! z vector is allocated to processor myid
+  !!=====================================================
+  k0 = velocity(1)%DataMap%my_global_kvals(1)
+  k1 = k0+m3-1
+  
+  !!=====================================================
+  !! use s1_bar(:) as a temp array here, its not set yet
+  !!=====================================================
+  s1_bar(:) = velocity(1)%Grid%SpaceDims(3)%x(k0:k1)
+
+      
+  !!==========================================================
+  !! call user_ics routine providing the dimensional
+  !! local spatial coordinates, the current time in seconds
+  !! a Fortran array to fill with values and an integer
+  !! indicator as to which field's ics are being requested
+  !!==========================================================
+  if(myid==0) write(0,*) '... Calling user_ics for u,v,w',m1,m2,m3
+
+  
+  do i=1,3
+    call user_ics(Lz*velocity(1)%Grid%SpaceDims(1)%x,      &
+                  Lz*velocity(1)%Grid%SpaceDims(2)%x,      &
+                  Lz*s1_bar,  &
+                  velocity(i)%SlabVals,i,m1,m2,m3)   
+    velocity(i)%SlabVals = velocity(i)%SlabVals*scale_factor(i)  
+  enddo
+  
+  
+  if(myid==0) write(0,*) '... Calling user_ics again for scalars'
+  do i=4,5
+    call user_ics(Lz*velocity(1)%Grid%SpaceDims(1)%x,      &
+                  Lz*velocity(1)%Grid%SpaceDims(2)%x,      &
+                  Lz*s1_bar,  &
+                  scalars(i-3)%SlabVals,i,m1,m2,m3)                          
+    scalars(i-3)%SlabVals = scalars(i-3)%SlabVals*scale_factor(i)  
+  enddo
+  
+  call eval_s1_bar(s1_bar,ddz_s1_bar,ddzz_s1_bar)
+  call eval_s2_bar(s2_bar,ddz_s2_bar,ddzz_s2_bar)
+  
+  !!nondimensionalize
+  s1_bar=s1_bar/(s1_scale)
+  s2_bar=s2_bar/(s2_scale)
+  ddz_s1_bar=ddz_s1_bar/(s1_scale/Lz)
+  ddz_s2_bar=ddz_s2_bar/(s2_scale/Lz)
+  ddzz_s1_bar=ddzz_s1_bar/(s1_scale/Lz**2)
+  ddzz_s2_bar=ddzz_s2_bar/(s2_scale/Lz**2)
+  
+  !!Compute dimensionless z limits for each processor
+  !!get k index of myid's lowest z gridpoint
+  k = velocity(1)%DataMap%my_global_kvals(1)  
+  my_z_limits(1) = Grid(0)%SpaceDims(3)%x(k)
+
+  !!get k index of myid's uppermost z gridpoint
+  k = velocity(1)%DataMap%my_global_kvals(velocity(1)%DataMap%locnz)
+  
+  !!if possible, extend region of responsibility
+  !!(for particles, immersed bdry) upward 1 grdpoint
+  if(myid<numprocs-1) k=k+1
+  my_z_limits(2) = Grid(0)%SpaceDims(3)%x(k)
+        
+  if(myid==0) then
+   open(1,file=docfile,position='append')
+   write(1,*) ' -----> InitialConditions routine exiting normally  <---------- '
+   write(0,*) ' -----> InitialConditions routine exiting normally  <---------- '
+   close(1)
+  endif
+  return
+ end subroutine InitialConditions
+!=============================================================== 
+!===============================================================
+
+
+
+ 
+subroutine ConstructOperators
+!=============================================================== 
+!!    need to check & see how much of this is still used
+!===============================================================
+ use class_SAOperator
+ use class_BoundaryOperator
+ use class_BoundaryConditions
+ use class_ScalarVariable
+ use operators
+ use dependent_variables
+ use intermediate_variables
+ use independent_variables
+ use user_data
+ use user_routines
+ use etc
+ use mpi_params
+!===========================================================================
+!===========================================================================
+ implicit none
+ integer, parameter        :: order=2  !! up to 5th order operators possible
+ integer                   :: level,_n1,_n2,k0
+ integer                   :: idim,jpos,rcode(2)=0
+ integer                   :: locnx,locny,locnz
+ character(len=80)         :: label,bdry_type
+ real(kind=8),allocatable  :: vals(:,:)
+ real(kind=8),allocatable  :: x1(:),x2(:)
+ real(kind=8)              :: XX
+
+ if(myid==0) then
+   open(1,file=docfile,position='append')
+   write(1,*) ' =========================================================== '
+   write(1,*) ' =========================================================== '
+   write(1,*) '              ConstructOperators Report:'
+   write(1,*) ' =========================================================== '
+   write(1,*) ' =========================================================== '
+   write(1,*) '  '
+  endif
+ 
+ locnx=velocity(1)%DataMap%SlabDims(1,myid)
+ locny=velocity(1)%DataMap%SlabDims(2,myid)
+ locnz=velocity(1)%DataMap%SlabDims(3,myid)
+ _n1=MAXVAL( (/nx,ny,nz/) )
+ allocate( x1(_n1), stat=rcode(1) )
+ allocate( x2(_n1), stat=rcode(2) )
+ if( any( rcode /= 0 ) ) Stop 'Allocation failed:  ConstructOperators 1'
+ 
+ do level=0,mglevels -1
+ 
+   !!Get a set of homogeneous bdry operators, both D & N
+   call InitializeBoundaryConditions(     &
+        Grid(level),Phi_DataMap(level),   &
+        order,DirBdryOps,PhiBdryOps  )
+   
+   !! Correct labels for periodic dimensions
+   if( xdim_periodic ) then
+    do i=1,2
+     DirBdryOps(1,i)%label='periodic'
+     PhiBdryOps(1,i)%label='periodic'
+    enddo
+   endif
+   
+   if( ydim_periodic ) then
+    do i=1,2
+     DirBdryOps(2,i)%label='periodic'
+     PhiBdryOps(2,i)%label='periodic'
+    enddo
+   endif
+           
+   !!Create new SAOperator at each level, attach boundary operators
+   call NewSAOperator(Phi(level),PhiBdryOps,L(level),mglevels)
+   if(myid==0)  &
+     write(1,*) '   SA operator L(i) created & linked w/ PhiBdryOps '
+   if(myid==0)  &
+     write(0,*) '   SA operator L(i) mg level, nrows ',level,L(level)%nrows
+         
+   !!Delete the BdryOps before re-initializing them at next coarser level
+   if( level > 0 ) then
+    do i=1,3
+     do j=1,2
+      call DeleteBoundaryOperator(DirBdryOps(i,j))
+      call DeleteBoundaryOperator(NeuBdryOps(i,j))
+     enddo
+    enddo 
+   endif
+   
+ enddo    !! end loop over multigrid levels
+  
+
+!! Construct a set of homogeneous neumann conditions
+!! for each variable. These will then be updated to
+!! conform to the user specifications.
+ level=0
+ call InitializeBoundaryConditions(      &
+        Grid(level),Phi_DataMap(level),  &
+        order,DirBdryOps,u_BdryOps )
+        
+ call InitializeBoundaryConditions(      &
+        Grid(level),Phi_DataMap(level),  &
+        order,DirBdryOps,v_BdryOps )
+        
+ call InitializeBoundaryConditions(      &
+        Grid(level),Phi_DataMap(level),  &
+        order,DirBdryOps,w_BdryOps )
+        
+ call InitializeBoundaryConditions(      &
+        Grid(level),Phi_DataMap(level),  &
+        order,DirBdryOps,s1_BdryOps )
+        
+ call InitializeBoundaryConditions(      &
+        Grid(level),Phi_DataMap(level),  &
+        order,DirBdryOps,s2_BdryOps )
+ 
+!! update labels for periodic dimensions
+if( xdim_periodic ) then
+   BCtype(:,1,:)='periodic'
+   u_BdryOps(1,1)%label='periodic'
+   u_BdryOps(1,2)%label='periodic'
+   v_BdryOps(1,1)%label='periodic'
+   v_BdryOps(1,2)%label='periodic'
+   w_BdryOps(1,1)%label='periodic'
+   w_BdryOps(1,2)%label='periodic'
+   s1_BdryOps(1,1)%label='periodic'
+   s1_BdryOps(1,2)%label='periodic'
+   s2_BdryOps(1,1)%label='periodic'
+   s2_BdryOps(1,2)%label='periodic'
+ endif
+ if( ydim_periodic ) then
+   BCtype(:,2,:)='periodic'
+   u_BdryOps(2,1)%label='periodic'
+   u_BdryOps(2,2)%label='periodic'
+   v_BdryOps(2,1)%label='periodic'
+   v_BdryOps(2,2)%label='periodic'
+   w_BdryOps(2,1)%label='periodic'
+   w_BdryOps(2,2)%label='periodic'
+   s1_BdryOps(2,1)%label='periodic'
+   s1_BdryOps(2,2)%label='periodic'
+   s2_BdryOps(2,1)%label='periodic'
+   s2_BdryOps(2,2)%label='periodic'
+ endif
+ 
+!! Now loop through all the operators and update
+!! as necessary using data specified in user_bdry_data.
+k0 = velocity(1)%DataMap%my_global_kvals(1)
+label='data'
+do field_id=1,5
+ do idim=1,3
+ 
+  if(idim==1) then
+   _n1=velocity(1)%DataMap%SlabDims(2,myid)
+   _n2=velocity(1)%DataMap%SlabDims(3,myid)  !! YZ
+   x1(1:_n1)=velocity(1)%Grid%SpaceDims(2)%x
+   x2(1:_n2)=velocity(1)%Grid%SpaceDims(3)%x(k0:k0+locnz-1)
+  elseif(idim==2) then
+   _n1=velocity(1)%DataMap%SlabDims(1,myid)
+   _n2=velocity(1)%DataMap%SlabDims(3,myid)  !! XZ
+   x1(1:_n1)=velocity(1)%Grid%SpaceDims(1)%x
+   x2(1:_n2)=velocity(1)%Grid%SpaceDims(3)%x(k0:k0+locnz-1)
+  elseif(idim==3) then
+   _n1=velocity(1)%DataMap%SlabDims(1,myid)
+   _n2=velocity(1)%DataMap%SlabDims(2,myid)  !! XY
+   x1(1:_n1)=velocity(1)%Grid%SpaceDims(1)%x
+   x2(1:_n2)=velocity(1)%Grid%SpaceDims(2)%x
+  endif
+  !! use dimensional values to pass to user routines
+  x1(:)=x1*Lz
+  x2(:)=x2*Lz
+  
+  allocate( vals(_n1,_n2), stat=rcode(1) )
+  if( rcode(1) /= 0  ) then
+   write(0,*) 'allocating vals(:,:) ',_n1,_n2
+   Stop 'Allocation failed:  ConstructOperators  2'
+  endif
+ 
+  do jpos=1,2
+   !! determine user requested bdry type and switch 
+   !! from default neumann to user type if necessary
+   bdry_type=BCtype(field_id,idim,jpos)
+   if( trim(bdry_type) .ne. 'neumann' ) then
+     if(field_id==1) call SwitchType( u_BdryOps(idim,jpos),bdry_type )
+     if(field_id==2) call SwitchType( v_BdryOps(idim,jpos),bdry_type )
+     if(field_id==3) call SwitchType( w_BdryOps(idim,jpos),bdry_type )
+     if(field_id==4) call SwitchType( s1_BdryOps(idim,jpos),bdry_type )
+     if(field_id==5) call SwitchType( s2_BdryOps(idim,jpos),bdry_type )
+   endif
+   
+   !! get the user specified boundary values ==> vals
+   call UserBdryData(field_id,idim,jpos,bdry_type,_n1,_n2,x1,x2,vals)
+   
+   !! nondimensionalize these values (depends on field_id and bc_type)
+   if( field_id < 4 ) then
+   
+     if( trim(bdry_type)=='neumann' .or. trim(bdry_type)=='Neumann' ) then
+       XX = Lz/U0
+     elseif( trim(bdry_type)=='dirichlet' .or. trim(bdry_type)=='Dirichlet' ) then
+       XX = 1./U0
+     endif
+     vals=XX*vals
+     
+     !! update the operator
+     if(field_id==1) &
+       call UpdateBoundaryOperator(u_BdryOps(idim,jpos),label,vals,_n1,_n2)
+     if(field_id==2) &
+       call UpdateBoundaryOperator(v_BdryOps(idim,jpos),label,vals,_n1,_n2)
+     if(field_id==3) &
+       call UpdateBoundaryOperator(w_BdryOps(idim,jpos),label,vals,_n1,_n2)
+       
+    elseif( field_id==4) then
+    
+     if( trim(bdry_type)=='neumann' .or. trim(bdry_type)=='Neumann' ) then
+       XX = Lz/s1_scale
+     elseif( trim(bdry_type)=='dirichlet' .or. trim(bdry_type)=='Dirichlet' ) then
+       XX = 1./s1_scale
+     endif
+     vals=XX*vals
+     
+     !! update the operator
+     call UpdateBoundaryOperator(s1_BdryOps(idim,jpos),label,vals,_n1,_n2)
+     
+    elseif( field_id==5) then
+        
+     if( trim(bdry_type)=='neumann' .or. trim(bdry_type)=='Neumann' ) then
+       XX = Lz/s2_scale
+     elseif( trim(bdry_type)=='dirichlet' .or. trim(bdry_type)=='Dirichlet' ) then
+       XX = 1./s2_scale
+     endif
+     vals=XX*vals
+     
+     !! update the operator
+     call UpdateBoundaryOperator(s2_BdryOps(idim,jpos),label,vals,_n1,_n2)
+     
+    endif
+   
+  enddo  !!end loop over jpos
+  
+  deallocate( vals )
+  
+ enddo  !! end loop over dimensions
+
+enddo  !! end field_id loop
+
+deallocate( x1,x2 )
+!! keep a fresh set of homogeneous dirichlet & neumann for fine grid
+level=0
+call InitializeBoundaryConditions(      &
+        Grid(level),Phi_DataMap(level),  &
+        order,DirBdryOps,NeuBdryOps )
+
+ 
+!! Correct labels for periodic dimensions
+if( xdim_periodic ) then
+ do i=1,2
+  DirBdryOps(1,i)%label='periodic'
+  PhiBdryOps(1,i)%label='periodic'
+ enddo
+endif
+   
+if( ydim_periodic ) then
+ do i=1,2
+  DirBdryOps(2,i)%label='periodic'
+  PhiBdryOps(2,i)%label='periodic'
+ enddo
+endif
+   
+if(myid==0) then
+  write(1,*) ' -----> ConstructOperators routine exiting normally  <---------- '
+  write(0,*) ' -----> ConstructOperators routine exiting normally  <---------- '
+ close(1)
+endif
+end subroutine ConstructOperators
+
+
+
+
+
+
Index: /trunk/00FlowSolve_KW/src/particle_routines.f90
===================================================================
--- /trunk/00FlowSolve_KW/src/particle_routines.f90	(revision 6)
+++ /trunk/00FlowSolve_KW/src/particle_routines.f90	(revision 6)
@@ -0,0 +1,771 @@
+!!====================================================================================   
+  module particles   
+!!==================================================================================== 
+   logical                       :: user_defines_particles=.TRUE.
+   character(len=80)             :: particle_step_flag
+   
+   real(kind=8),allocatable      :: positions(:,:)
+   real(kind=8),allocatable      :: uvels    (:,:)
+   real(kind=8),allocatable      :: vvels    (:,:)
+   real(kind=8),allocatable      :: wvels    (:,:)
+   
+   integer                       :: nparticles
+   integer                       :: j_particle_time
+   integer                       :: istart_trajectories=0
+   
+ !!==================================================================================== 
+  end module particles
+ !!==================================================================================== 
+
+
+subroutine InitializeParticles
+ use user_routines
+ use particles
+ use user_data
+ use mpi_params
+ use etc,      only: docfile
+    
+ implicit none
+ integer        :: i, j, npts         
+ real(kind=8)   :: urv
+ real(kind=8)   :: sides(3) 
+ 
+ call random_seed  !! I'm using the f90 intrinsic functions
+                   !! random_seed, random_number here
+ j_particle_time = 1
+ npts = nparticles
+      
+ allocate( positions(npts,3) )
+ allocate( uvels(npts,4) )     !! 4 time levels
+ allocate( vvels(npts,4) )
+ allocate( wvels(npts,4) )
+    
+ sides(:)=(/Lx,Ly,Lz/)
+ user_defines_particles = .TRUE.
+ if (user_defines_particles) then
+ 
+  call user_particle_positions(positions,npts,Lx,Ly,Lz)
+  
+ else !! I'll distribute them uniformly
+ 
+  do i=1,npts
+   do j=1,3
+     call RANDOM_NUMBER( urv )
+     positions(i,j) = sides(j)*urv
+   enddo
+  enddo 
+  
+ endif
+ 
+ positions=positions/Lz
+ uvels(:,:) = 0.d0
+ vvels(:,:) = 0.d0
+ wvels(:,:) = 0.d0
+
+ if(myid==0) then
+   open(1,file=docfile,position='append')
+   write(1,*) ' -----> InitializeParticles routine exiting normally  <---------- '
+   write(0,*) ' -----> InitializeParticles routine exiting normally  <---------- '
+   close(1)
+  endif
+  
+end subroutine InitializeParticles 
+!============================================================================
+!============================================================================
+
+
+
+
+!=============================================================== 
+!===============================================================
+  subroutine advance_particles
+   use etc,                     only: PM0,PM1,PM2,PM3,     &
+                                 my_z_limits,t_secs,       &
+                                 numzplanes_below,M_oldest
+   use dependent_variables,     only: velocity
+   use intermediate_variables,  only: explicit_rhs
+   use user_data,               only: dt,U0,Lx,Ly,Lz,      &
+                                      xdim_periodic,       &
+                                      ydim_periodic,       &
+                                      zdim_periodic,pi,ny
+   use independent_variables
+   use particles
+   use mpi_params
+   implicit none
+   include 'mpif.h'   
+   
+   integer                         :: i,j,k,kk,ngrdpts,ierr
+   real(kind=8)                    :: xx,yy,zz,ans1,ans2,ans3
+   integer, SAVE                   :: m(3)
+   integer, allocatable,SAVE       :: my_labels(:)
+   real(kind=8),allocatable,SAVE   :: tmp(:)
+   real(kind=8), save              :: dt2,dt12,dt24
+   logical,      save              :: first_entry = .TRUE.
+
+   if(nparticles<=0) return
+   
+  !!=================================================================
+  !!=================================================================
+   if( first_entry ) then
+    dt2=dt/2.d0
+    dt12=dt/12.d0
+    dt24=dt/24.d0
+    m(:)=0  !! interpolate function vals, not derivs
+    allocate( my_labels(nparticles),tmp(nparticles) )
+    first_entry = .FALSE.
+   endif
+  !!=================================================================
+  !!=================================================================
+   
+   
+      
+  !!=================================================================
+  !!=================================================================
+  !! periodic wrapping etc
+  !!=================================================================
+  !!=================================================================
+      if(xdim_periodic) then
+       do i=1,nparticles
+         if( positions(i,1) < 0 ) then
+          positions(i,1) = positions(i,1) + Lx/Lz
+         elseif( positions(i,1) > Lx/Lz ) then
+          positions(i,1) = positions(i,1) - Lx/Lz
+         endif
+       enddo
+      endif
+      
+      if(ydim_periodic .and. ny>1) then
+        do i=1,nparticles
+         if( positions(i,2) < 0 ) then
+          positions(i,2) = positions(i,2) + Ly/Lz
+         elseif( positions(i,2) > Ly/Lz ) then
+          positions(i,2) = positions(i,2) - Ly/Lz
+         endif
+       enddo
+      endif
+      
+      if(zdim_periodic) then
+       do i=1,nparticles
+         if( positions(i,3) < 0 ) then
+          positions(i,3) = positions(i,3) + Lz/Lz
+         elseif( positions(i,3) > Lz/Lz ) then
+          positions(i,3) = positions(i,3) - Lz/Lz
+         endif
+       enddo
+      endif
+   !!=================================================================
+   !!=================================================================
+      
+      
+   !!=================================================================
+   !!  mark the indices of particles residing on processor myid
+   !!=================================================================  
+   
+      do i=1,nparticles
+       if( positions(i,3) >= my_z_limits(1) .and.      &
+           positions(i,3) <  my_z_limits(2) ) then
+           
+           my_labels(i) = 1
+           
+       else
+       
+          my_labels(i) = 0
+          positions(i,1:3) = 0.d0
+          
+       endif
+      enddo
+   !!=================================================================
+   !!=================================================================
+   
+      
+   !!=================================================================
+   !!=================================================================
+   !! get the u,v,w values at the positions of the particles on myid
+   !! arrays are dimensioned like 
+   !!                             positions(npts,3)  !! 3 space dims
+   !!                                 uvels(npts,4)  !! 4 time levels
+   !!=================================================================
+   !!=================================================================  
+      
+   !! get interpolated u values ( explicit_rhs are scratch arrays )
+   j=M_oldest  !! oldest of the MM0,MM1,MM2,MM3 set, can be trashed
+   call spline_interp_value(positions(1,1),   &
+                            positions(1,2),   &
+                            positions(1,3),   &
+                            nparticles,       &
+                            velocity(1),      &
+                            m(1),             &
+                            uvels(1,PM0),     &
+                            my_labels,        &
+                            explicit_rhs(1,j)%SlabVals, &
+                            explicit_rhs(2,j)%SlabVals, &
+                            explicit_rhs(3,j)%SlabVals  )
+                       
+   !! get interpolated v values
+   call spline_interp_value(positions(1,1),   &
+                            positions(1,2),   &
+                            positions(1,3),   &
+                            nparticles,       &
+                            velocity(2),      &
+                            m(1),             &
+                            vvels(1,PM0),     &
+                            my_labels,         &
+                            explicit_rhs(1,j)%SlabVals, &
+                            explicit_rhs(2,j)%SlabVals, &
+                            explicit_rhs(3,j)%SlabVals  )
+                       
+   !! get interpolated w values
+   call spline_interp_value(positions(1,1),   &
+                            positions(1,2),   &
+                            positions(1,3),   &
+                            nparticles,       &
+                            velocity(3),      &
+                            m(1),             &
+                            wvels(1,PM0),     &
+                            my_labels,         &
+                            explicit_rhs(1,j)%SlabVals, &
+                            explicit_rhs(2,j)%SlabVals, &
+                            explicit_rhs(3,j)%SlabVals  )
+  
+  
+  !!=================================================================
+  !!=================================================================
+  !! At this point positions(i,:) are nonzero only if
+  !! particle i resides on processor myid. Similarly
+  !! for uvels(i,PM0),vvels(i,PM0) etc. Values for
+  !! PM1, PM2 etc should be identical for all processors.
+  !!=================================================================
+  !!=================================================================
+  
+  !! Integrate forward one time step.   
+  do i=1,nparticles
+  
+  if( my_labels(i)==1 ) then  !! only deal with those on proc. myid
+        
+   if( particle_step_flag .eq. 'euler' ) then
+    positions(i,1)=positions(i,1) + dt*uvels(i,PM0)    
+    positions(i,2)=positions(i,2) + dt*vvels(i,PM0)
+    positions(i,3)=positions(i,3) + dt*wvels(i,PM0)
+    particle_step_flag='AB2'    
+    
+   elseif( particle_step_flag .eq. 'AB2' ) then
+     positions(i,1)=positions(i,1) + dt2*( 3.*uvels(i,PM0)       &
+                                            - uvels(i,PM1) )
+                                            
+     positions(i,2)=positions(i,2) + dt2*( 3.*vvels(i,PM0)       &
+                                            - vvels(i,PM1) )
+                                            
+     positions(i,3)=positions(i,3) + dt2*( 3.*wvels(i,PM0)       &
+                                            - wvels(i,PM1) )
+     particle_step_flag='AB3'
+    
+   elseif( particle_step_flag .eq. 'AB3' ) then   
+     positions(i,1)=positions(i,1) + dt12*(23.*uvels(i,PM0)        &
+                                         - 16.*uvels(i,PM1)        &
+                                         +  5.*uvels(i,PM2) )
+                                         
+     positions(i,2)=positions(i,2) + dt12*(23.*vvels(i,PM0)        &
+                                         - 16.*vvels(i,PM1)        &
+                                         +  5.*vvels(i,PM2) ) 
+                                         
+     positions(i,3)=positions(i,3) + dt12*(23.*wvels(i,PM0)        &
+                                         - 16.*wvels(i,PM1)        &
+                                         +  5.*wvels(i,PM2) )
+     particle_step_flag='AB4'
+   
+   elseif( particle_step_flag .eq. 'AB4' ) then    
+     positions(i,1)=positions(i,1) + dt24*(55.*uvels(i,PM0)        &
+                                         - 59.*uvels(i,PM1)        & 
+                                         + 37.*uvels(i,PM2)        & 
+                                         -  9.*uvels(i,PM3) )
+                                         
+     positions(i,2)=positions(i,2) + dt24*(55.*vvels(i,PM0)        & 
+                                         - 59.*vvels(i,PM1)        & 
+                                         + 37.*vvels(i,PM2)        & 
+                                         -  9.*vvels(i,PM3) )
+                                         
+     positions(i,3)=positions(i,3) + dt24*(55.*wvels(i,PM0)        & 
+                                         - 59.*wvels(i,PM1)        & 
+                                         + 37.*wvels(i,PM2)        & 
+                                         -  9.*wvels(i,PM3) )
+   endif
+   
+  endif
+   
+ enddo
+
+ !!=================================================================
+ !!=================================================================  
+ !! Now globally_update_particle_data 
+ !!=================================================================
+ !!=================================================================
+   tmp(:) = uvels(:,PM0)
+   call mpi_allreduce(tmp,uvels(1,PM0),nparticles,                 &
+                      mpi_double_precision,mpi_sum,comm,ierr )
+              
+   tmp(:) = vvels(:,PM0)
+   call mpi_allreduce(tmp,vvels(1,PM0),nparticles,                 &
+                      mpi_double_precision,mpi_sum,comm,ierr )
+                      
+   tmp(:) = wvels(:,PM0)
+   call mpi_allreduce(tmp,wvels(1,PM0),nparticles,                 &
+                      mpi_double_precision,mpi_sum,comm,ierr )
+   
+   do i=1,3
+    tmp(:) = positions(:,i)
+    call mpi_allreduce(tmp,positions(1,i),nparticles,                 &
+                      mpi_double_precision,mpi_sum,comm,ierr )
+   enddo
+ !!=================================================================
+ !!=================================================================  
+ !! All processors now have updated positions and velocities
+ !! for all particles, whether they reside locally or not
+ !!=================================================================
+ !!=================================================================
+end subroutine advance_particles
+
+
+
+
+
+!=============================================================== 
+!=============================================================== 
+ subroutine spline_interp_value(xvec,yvec,zvec,npts,FF,  &
+                                m,ans,my_labels,         &
+                                s_x,s_y,s_z,             &
+                                nhat_1,nhat_2,nhat_3)
+ !!
+ !! (1) Given a vector of (dimensionless) x-y-z locations
+ !!     calculate the corresponding parameter values s.
+ !!     e.g. x=f(s)  given x* find s* such that f(s*)=x*
+ !!     Do this in each coordinate direction x-y-z.
+ !!
+ !! (2) Call "spline" to get the interpolated field value
+ !!     at each point. This part of the problem is done in
+ !!     the space {s1, s2, s3}, the equally spaced parameters
+ !!     for coordinates x,y,z. The s* values found in (1) define
+ !!     the current particle positions in this space.
+ !! if  
+ !!   m(i) = 0,1,2  return F, F' or F'' wrt the "ith" dimension
+ !!=============================================================
+ 
+  use class_ScalarVariable
+  use user_routines
+  use user_data, only: Lx,Ly,Lz,       &
+                       nx,ny,nz,       &
+                       xdim_periodic,  &
+                       ydim_periodic,  &
+                       zdim_periodic
+  implicit none
+  type( ScalarVariable )        :: FF
+  integer                       :: m(3)
+  integer                       :: npts,i
+  integer                       :: my_labels(npts)
+  real(kind=8)                  :: xvec(npts)
+  real(kind=8)                  :: yvec(npts)
+  real(kind=8)                  :: zvec(npts)
+  real(kind=8)                  :: s_x (npts)
+  real(kind=8)                  :: s_y (npts)
+  real(kind=8)                  :: s_z (npts)
+  real(kind=8),optional         :: nhat_1(npts)
+  real(kind=8),optional         :: nhat_2(npts)
+  real(kind=8),optional         :: nhat_3(npts)
+  real(kind=8)                  :: locs(3)
+  real(kind=8)                  :: svals(3)
+  real(kind=8)                  :: ans(npts)
+  
+  
+ !! Get the parametric (s) values corresponding to xyz positions.
+   do i=1,npts
+   
+    if( my_labels(i)==1 ) then   
+     !! get dimensional x,y,z for trajectory i
+     locs(:)=Lz*(/xvec(i),yvec(i),zvec(i)/) 
+        
+     !! get the corresponding parameter values s_x,s_y,s_z
+     call point_map_x2s(locs(1),1,xdim_periodic,Lx,nx,s_x(i))
+     call point_map_x2s(locs(2),2,ydim_periodic,Ly,ny,s_y(i))
+     call point_map_x2s(locs(3),3,zdim_periodic,Lz,nz,s_z(i))     
+    endif
+        
+   enddo
+    
+   if( present(nhat_1) .and. present(nhat_2) .and. present(nhat_3) ) then
+    call spline(FF,ans,s_x,s_y,s_z,m,npts,my_labels,nhat_1,nhat_2,nhat_3)
+   else
+    call spline(FF,ans,s_x,s_y,s_z,m,npts,my_labels)
+   endif
+   
+
+end subroutine spline_interp_value
+!=============================================================== 
+!===============================================================
+
+!!=============================================================== 
+!!=============================================================== 
+subroutine spline(F,g,x,y,z,m,npts,my_labels,nhat_1,nhat_2,nhat_3)
+!! This function interpolates three-dimensional discrete 
+!! data to a set of arbitary, i.e. non-gridpoint,
+!! locations x(1:npts),y(1:npts),z(1:npts).  
+!! given the discrete gridpoint values F(:,:,:).
+!! Results are returned in g(1:npts).
+!!
+!! m(idim) return m-th derivative, in the idim direction, of F. 
+!!         m can be 0, 1 or 2.
+!!
+!! Required subroutines
+!! db3ink:  computes coefficients of the 3D tensor basis functions
+!! db3val:  evaluates the tensor product spline
+!! db2ink:  computes coefficients of the 2D tensor basis functions
+!! db2val:  evaluates the correspondingtensor product spline
+!!
+!! routine requires no interprocessor communication
+!! but, rather, uses the 'not-a-knot' end conditions
+!! and computes near edge values locally. Similarly,
+!! the spline basis does not explicitly impose periodicity,
+!! again relying on the 'not-a-knot' end condition.
+!!=============================================================== 
+!!===============================================================
+ use Class_ScalarVariable
+ use mpi_params 
+ use independent_variables 
+ use user_routines,                 only: point_map_s2x
+ use user_data,                     only: Lx,Ly,Lz,        &
+                                          xdim_periodic,   &
+                                          ydim_periodic,   &
+                                          zdim_periodic
+ use etc,                           only: numzplanes,      &
+                                          numzplanes_below
+ implicit none
+ type( ScalarVariable )               :: F
+ integer                              :: i,j,k
+ integer,SAVE                         :: n1,n2,n3
+ integer,SAVE                         :: nx,ny,nz,globalnz
+ integer                              :: m(3),npts,k0,k1
+ integer,SAVE                         :: p,order(3),nwrk,iflag,idim
+ integer                              :: my_labels(npts)
+ real(kind=8)                         :: x(npts),xval
+ real(kind=8)                         :: y(npts),yval
+ real(kind=8)                         :: z(npts),zval
+ real(kind=8)                         :: g(npts)
+ real(kind=8),allocatable,SAVE        :: Fext(:,:,:)
+ real(kind=8),allocatable,SAVE        :: xgrid(:)
+ real(kind=8),allocatable,SAVE        :: ygrid(:)
+ real(kind=8),allocatable,SAVE        :: zgrid(:)
+ real(kind=8),allocatable,SAVE        :: tx(:)
+ real(kind=8),allocatable,SAVE        :: ty(:)
+ real(kind=8),allocatable,SAVE        :: tz(:)
+ real(kind=8),allocatable,SAVE        :: e3(:,:,:)
+ real(kind=8),allocatable,SAVE        :: wrk(:)
+ real(kind=8),optional                :: nhat_1(npts)
+ real(kind=8),optional                :: nhat_2(npts)
+ real(kind=8),optional                :: nhat_3(npts)
+ real(kind=8),external                :: db3val,db2val
+ real(kind=8)                         :: dx,dy,dz,h
+ real(kind=8)                         :: f_s,f_x,f_y,f_z,x_s,y_s,z_s
+ real(kind=8)                         :: Fmin,Fmax
+ logical,SAVE                         :: periodic(3)
+ logical,SAVE                         :: limits_test
+ logical,SAVE                         :: first_entry=.TRUE.
+ 
+ if( first_entry ) then
+  limits_test = .FALSE.
+  p=3                              ! cubic
+  order(:)=p+1
+  periodic=(/xdim_periodic,       &
+             ydim_periodic,       &
+             zdim_periodic/)
+ 
+  call GetLocalArraySize(F,n1,n2,n3)     !! i.e. nx,ny,locnz for F
+ 
+  !! determine the size of the data array we'll actually work with
+  if(xdim_periodic) then
+   nx=n1+1
+  else
+   nx=n1
+  endif
+  if(ydim_periodic .and. n2>1) then
+   ny=n2+1
+  else
+   ny=n2
+  endif
+  if(zdim_periodic .and. myid==numprocs-1) then   
+   nz=n3+1
+  elseif( .not. zdim_periodic .and. myid==numprocs-1 ) then
+   nz=n3
+  endif
+  if( myid<numprocs-1 ) then
+   nz=n3+1
+  endif
+  
+ 
+  nwrk = nx*ny*nz + 2*max(order(1)*(nx+1),order(2)*(ny+1),order(3)*(nz+1))
+  !! nwrk=2*nwrk ! I have occaisionally seen errors that go away
+  !!               when the work space is increased, above is adv. size
+  allocate( wrk(nwrk), e3(nx,ny,nz) )
+  allocate( xgrid(nx), ygrid(ny), zgrid(nz) )
+  allocate( tx(nx+order(1)), ty(ny+order(2)), tz(nz+order(3)) )
+  allocate( Fext(nx,ny,nz) )
+  
+  !! Equally spaced s points where gridded data values reside
+  !! assumes s in 0 to 1, and endpts now have values
+  h = 1./(nx-1.)
+  xgrid(1:nx)=(/( (i-1.)*h,i=1,nx )/)
+ 
+  if(ny>1) then
+   h = 1./(ny-1.)
+   ygrid(1:ny)=(/( (i-1.)*h,i=1,ny )/)
+  elseif(ny==1) then
+   ygrid(1)=1.d0
+  endif
+ 
+  !!  these are the s positions on myid 
+  k0 = numzplanes_below(myid) + 1
+  k1 = k0  + numzplanes(myid) - 1
+  zgrid(1:n3) = Grid(0)%SpaceDims(3)%s(k0:k1)
+  globalnz = ubound(Grid(0)%SpaceDims(3)%s,1)
+ 
+  !! if we are extending myid's data upward, get the next value as well
+  if(nz>n3) zgrid(nz) = Grid(0)%SpaceDims(3)%s(k1+1)
+  
+  iflag=0  !! use default knot selection scheme
+  
+  if( order(1) .ge. nx ) order(1)=nx-1
+  if( order(2) .ge. ny ) order(2)=ny-1
+  if( order(3) .ge. nz ) order(3)=nz-1
+  
+  first_entry = .FALSE.
+ endif
+ 
+ 
+ !! fill extended array
+ call AssignFextValues(F,n1,n2,n3,Fext,nx,ny,nz,periodic) 
+   
+ 
+ !!========================================================
+ !! Compute coefficients of the 3D tensor basis functions
+ !! using deBoor routine from nist/gams/cmlib
+ !!========================================================  
+ if(ny>1) then
+  call db3ink(xgrid,nx,ygrid,ny,zgrid,nz,     &
+              Fext(1,1,1),nx,ny,              &
+              order(1),order(2),order(3),     &
+              tx(1),ty(1),tz(1),              &
+              e3,wrk,iflag)   
+   if(iflag .ne. 1 ) stop 'error condition detected by db3ink'
+  elseif(ny==1) then
+   call db2ink(xgrid,nx,zgrid,nz,Fext,nx,order(1),order(3),  &
+               tx(1),tz(1),e3,wrk,iflag)
+   if(iflag .ne. 1 ) stop 'error condition detected by db2ink'
+  endif
+
+ !!===========================================================
+ !! Now loop through each position & interpolate the function 
+ !!===========================================================
+ 
+ !!===========================================================
+ !! CASE 1:  m(:)=0  evaluate function only, 
+ !!                  and only when my_labels = 1
+ !!                  do 2d ny=1 case separately
+ !!===========================================================
+ if( m(1)==0 .and. m(2)==0 .and. m(3)==0 ) then
+  if(ny>1) then
+   do i=1,npts
+    !! note, positions detected as outside the appropriate 
+    !! range will trigger a fatal error
+    if( my_labels(i)==1 ) then
+     g(i) =  db3val(x(i),y(i),z(i),                 &
+                    m(1),m(2),m(3),                 &
+                    tx,ty,tz,                       &
+                    nx,ny,nz,                       &
+                    order(1),order(2),order(3),     &
+                    e3,wrk)
+    else
+     g(i)=0.d0
+    endif
+   enddo
+  elseif(ny==1) then
+   do i=1,npts
+    !! note, positions detected as outside the appropriate 
+    !! range will trigger a fatal error
+    if( my_labels(i)==1 ) then
+     g(i) =  db2val(x(i),z(i),m(1),m(3),tx,tz,nx,nz,    &
+                    order(1),order(3),e3,wrk)                   
+    else
+     g(i)=0.d0
+    endif
+   enddo
+  endif
+ endif
+ 
+ !!===========================================================
+ !! CASE 2:  m(1)=0  evaluate Fx,Fy,Fz and dot result with n_hat
+ !!                  NB don't bother with my_labels here
+ !!                  handle 2d case as above
+ !! Also, note that values returned from point_map_s2x are
+ !! DIMENSIONAL and so need to be scaled by Lz
+ !! Also, though the inputs to point_map_s2x are stored in
+ !! arrays called x,y,z they are really the s values in
+ !! each of the 3 dimensions.
+ !!
+ !!  {x_s}=x_s/Lz   df/dx = {df/ds} * {ds/dx} = {df/ds}/{x_s}
+ !!  etc.
+ !!===========================================================
+ if( m(1)==1 .and. m(2)==1 .and. m(3)==1  .and. present(nhat_1) &
+             .and. present(nhat_2) .and. present(nhat_3)  ) then
+  if(ny>1) then
+   do i=1,npts
+    
+     idim = 1
+     call point_map_s2x(x(i),idim,periodic(idim),Lx,n1,xval,x_s)
+     f_s =   db3val(x(i),y(i),z(i),                 &
+                    1,0,0,                          &
+                    tx,ty,tz,                       &
+                    nx,ny,nz,                       &
+                    order(1),order(2),order(3),     &
+                    e3,wrk)
+     f_x = f_s / (x_s/Lz)            
+      
+     idim = 2
+     call point_map_s2x(y(i),idim,periodic(idim),Ly,n2,yval,y_s) 
+     f_s =   db3val(x(i),y(i),z(i),                 &
+                    0,1,0,                          &
+                    tx,ty,tz,                       &
+                    nx,ny,nz,                       &
+                    order(1),order(2),order(3),     &
+                    e3,wrk)
+     f_y = f_s/(y_s/Lz)
+     
+     idim = 3
+     call point_map_s2x(z(i),idim,periodic(idim),Lz,globalnz,zval,z_s)
+     f_s =   db3val(x(i),y(i),z(i),                 &
+                    0,0,1,                          &
+                    tx,ty,tz,                       &
+                    nx,ny,nz,                       &
+                    order(1),order(2),order(3),     &
+                    e3,wrk)
+     f_z = f_s/(z_s/Lz)
+                    
+     !! dot product
+     g(i) = nhat_1(i)*f_x + nhat_2(i)*f_y + nhat_3(i)*f_z
+                    
+   enddo
+  elseif(ny==1) then
+   do i=1,npts
+    
+     idim = 1
+     call point_map_s2x(x(i),idim,periodic(idim),Lx,n1,xval,x_s)
+     f_s =  db2val(x(i),z(i),1,0,tx,tz,nx,nz,    &
+                   order(1),order(3),e3,wrk) 
+     f_x = f_s/(x_s/Lz)
+     
+     idim = 3
+     call point_map_s2x(z(i),idim,periodic(idim),Lz,globalnz,zval,z_s)
+     f_s =  db2val(x(i),z(i),0,1,tx,tz,nx,nz,    &
+                   order(1),order(3),e3,wrk)
+     f_z = f_s/(z_s/Lz)
+                   
+     !! dot product
+      g(i) = nhat_1(i)*f_x + nhat_3(i)*f_z
+      
+   enddo
+  endif
+ endif
+     
+   
+end subroutine spline
+!=============================================================== 
+!===============================================================
+
+
+!=============================================================== 
+!===============================================================
+subroutine AssignFextValues(F,n1,n2,n3,Fext,nx,ny,nz,periodic)
+
+ use class_ScalarVariable
+ use mpi_params
+ implicit none
+ include 'mpif.h'
+ 
+ type( ScalarVariable )         :: F
+ logical                        :: periodic(3)
+ integer                        :: n1,n2,n3  !! actual local array size of F%SlabVals
+ integer                        :: nx,ny,nz !! size of extended array Fext
+ integer                        :: i,j,k
+ integer                        :: ierr,reqs(2)
+ integer                        :: status_array(mpi_status_size,2)
+ real(kind=8)                   :: Fext(nx,ny,nz)
+ real(kind=8),allocatable,SAVE  :: tmp(:,:)
+ integer, SAVE                  :: src,count
+ logical, SAVE                  :: first_entry=.TRUE.
+ 
+ 
+ if( first_entry ) then
+  allocate( tmp(n1,n2) )
+  first_entry = .FALSE.
+ endif
+ 
+ nreqs=0
+ status_array=0
+ src=myid+1
+ dest=myid-1
+ tag=99
+ count=n1*n2
+ 
+ if(myid /= numprocs-1) then !! all but top processor get ghost data from above
+  ! recv 1 plane from above
+  nreqs=nreqs+1
+  call MPI_IRECV(tmp,count,mpi_double_precision,src,tag,comm,reqs(nreqs),ierr)
+  if( ierr .ne. 0 ) then
+         stop 'MPI IRECV ERROR IN AssignFextValues/particle_routines.f90'
+  endif
+  
+ endif
+ 
+ !call mpi_barrier(comm,ierr)  !! all recvs posted before sends begin
+ 
+ ! Make these ISENDs, don't worry about buffering (2d) & eliminate the barrier
+ if( myid /= 0 ) then  !! all but bottom processor send ghost data below
+  ! send bottom plane of F%SlabVals to myid-1
+  nreqs=nreqs+1
+  call MPI_ISEND(F%SlabVals,count,mpi_double_precision,dest,tag,comm,reqs(nreqs),ierr)
+  if( ierr .ne. 0 ) then
+         stop 'MPI IRSEND ERROR IN AssignFextValues/particle_routines.f90'
+  endif
+  
+ endif
+ 
+ !!==================================================
+ !! do these copies while waiting for
+ !! the messages to complete
+ !!==================================================
+ Fext(1:n1,1:n2,1:n3) = F%SlabVals(1:n1,1:n2,1:n3)
+ 
+ if(periodic(1)) then
+  Fext(nx,1:n2,1:n3)=F%SlabVals(1,1:n2,1:n3)
+ endif
+ 
+ if(periodic(2) .and. n2 > 1) then
+  Fext(1:n1,ny,1:n3)=F%SlabVals(1:n1,1,1:n3)
+ endif
+ 
+ if(periodic(1) .and. periodic(2)) then
+  Fext(nx,ny,1:n3)=F%SlabVals(1,1,1:n3)
+ endif
+ !!==================================================
+ 
+ !!make sure all myid's communications are done before proceeding
+ if(nreqs>0) then
+  call mpi_waitall(nreqs,reqs(1),status_array(1,1),ierr)
+ endif
+ 
+ !!==================================================
+ 
+ if(nz>n3) then
+  Fext(1:n1,1:n2,nz)=tmp(1:n1,1:n2)
+  Fext(nx,:,nz)=Fext(1,:,nz)
+  Fext(:,ny,nz)=Fext(:,1,nz)
+  Fext(nx,ny,nz)=Fext(1,1,nz)
+ endif
+  
+end subroutine AssignFextValues
Index: /trunk/00FlowSolve_KW/src/petsc_solver_code.f90
===================================================================
--- /trunk/00FlowSolve_KW/src/petsc_solver_code.f90	(revision 6)
+++ /trunk/00FlowSolve_KW/src/petsc_solver_code.f90	(revision 6)
@@ -0,0 +1,2374 @@
+!!================================================================
+!!================================================================
+subroutine pressure_solve
+!!================================================================
+!!================================================================
+ use class_ScalarVariable
+ use user_data,               only: psolve_exp_coeffs,    &
+                                    psolve_at_gridpoints, &
+                                    nx,ny
+ use mpi_params,              only: myid
+ use intermediate_variables,  only: Phi,scratch,rhs_b,    &
+                                    implicit_rhs,         &
+                                    explicit_rhs
+ use etc,                     only: field_id,             &
+                                    numzplanes_below,     &
+                                    istep,N,NM1,MM0,M_oldest
+ use dependent_variables,     only: velocity                                    
+ implicit none
+ real(kind=8),save               :: dsdx,dsdy,dsdz
+ real(kind=8)                    :: xx,ff
+ integer                         :: i,j,k,kg
+ integer,save                    :: locnz
+ logical                         :: forward
+ logical                         :: inverse 
+ logical                         :: nonzero_rhs
+ logical,save                    :: uniform_spacing
+ logical,save                    :: first_entry=.TRUE.
+ 
+ !!================================================================
+ if( first_entry ) then
+  locnz=Phi(0)%DataMap%SlabVals(3,myid)
+  dsdx = 1.d0/Phi(0)%Grid%SpaceDims(1)%dxds(1)
+  if(ny>1) then
+   dsdy = 1.d0/Phi(0)%Grid%SpaceDims(2)%dxds(1)
+  else
+   dsdy = 0.d0
+  endif
+  dsdz = 1.d0/Phi(0)%Grid%SpaceDims(3)%dxds(1)
+  uniform_spacing=.FALSE.
+  if( Phi(0)%Grid%SpaceDims(1)%uniform_dx  .and.      &
+      Phi(0)%Grid%SpaceDims(2)%uniform_dx  .and.      &
+      Phi(0)%Grid%SpaceDims(3)%uniform_dx  ) then
+   uniform_spacing=.TRUE.
+  endif
+  first_entry=.FALSE.
+ endif
+ !!================================================================ 
+ field_id=6
+
+ !!================================================================
+ !! Two approaches: solve for expansion coefficients, implicit BCs
+ !!                 solve for gridpoint values, explicit BCs
+ !! In either case, on entry we the have rhs_b gridpoint values.
+ !!================================================================
+ if( psolve_exp_coeffs ) then
+ 
+  if(myid==0)   &
+   write(0,*)'... solving for pressure expansion coefficients'
+    
+  !!============================================================
+  !! transform rhs_b in all three directions, store result back
+  !! into rhs_b, use scratch(1:2) as scratch arrays. Make sure the
+  !! deriv operators for rhs_b match those of phi.
+  !!============================================================
+   forward=.TRUE.
+   inverse=.FALSE.
+   do i=1,3
+    rhs_b%Derivs(i)=Phi(0)%Derivs(i) !!overloaded operator (=)
+   enddo
+   call Transform3D(rhs_b,rhs_b,scratch(1),scratch(2),forward,inverse)
+  
+  
+  !!============================================================
+  !! Now, we solve for the expansion coefficients in one of two
+  !! ways. If ALL grid mappings are uniform, we have a straight-
+  !! forward, analytical solution in wavenumber space. If, any 
+  !! of the "x,y,z" <===> s mappings are nonuniform, then we
+  !! can't explicitly form the soln in wavenumber space but can
+  !! construct a reasonable approximation assuming the grid 
+  !! stretchings don't dominate the transformations of dxx etc.
+  !! Either way, construct the "uniform grid" solution here.
+  !!============================================================
+        
+   if(uniform_spacing) then 
+    if(myid==0) then 
+     write(0,*)   &
+     '...     uniform grid ==> analytical solve in wavenumber space'
+    endif
+   elseif(.NOT. uniform_spacing) then
+    if(myid==0) then 
+     write(0,*)   &
+     '...     nonuniform grid ==> approximate solve in wavenumber space'
+    endif
+   endif
+    
+    do k=1,locnz
+     kg = numzplanes_below(myid) + k
+      do j=1,ny
+       do i=1,nx
+        
+         xx = -( Phi(0)%Derivs(1)%kx(i)  * dsdx )**2  &
+              -( Phi(0)%Derivs(2)%kx(j)  * dsdy )**2  &
+              -( Phi(0)%Derivs(3)%kx(kg) * dsdz )**2 
+              
+         ff = Phi(0)%Derivs(1)%kfilter(i)     &
+             *Phi(0)%Derivs(2)%kfilter(j)     &
+             *Phi(0)%Derivs(3)%kfilter(kg)
+         
+         Phi(0)%SlabVals(i,j,k) =  (rhs_b%SlabVals(i,j,k)/xx) * ff
+               
+                  
+        enddo
+       enddo
+      enddo
+      Phi(0)%SlabVals(1,1,1)=0.d0
+    
+        
+    !!===============================================================
+    !! If Phi(0) is only a first approximation, call the iterative 
+    !! solver with rhs_b in wavenumber space and the approximation 
+    !! of the expansion coefficients used as the initial guess.
+    !!===============================================================
+    if(.NOT. uniform_spacing) then  !! No analytical soln because
+                                    !!(s<-->x) must be done in p space.
+                                    !! But still do iterations in w-n space.    
+     write(0,*)    &
+     '...     nonuniform grid ==> iterative solve in wavenumber space'
+     
+     Phi(0)%wavenumber_values = .TRUE.
+     Phi(0)%gridpoint_values  = .FALSE.     
+     Phi(0)%forward_transform_only=.FALSE.
+     Phi(0)%inverse_transform_only=.FALSE.
+     call DoSolve(Phi(0))
+    
+    endif   
+    
+    !!=====================================================
+    !! Compute the gradient of Phi(0), storing
+    !! the results in the arrays diff(3,4,5) which are
+    !! free prior to the diffusion solves. The values
+    !! of Phi(0)%gridpoint_values & Phi(0)%wavenumber_values
+    !! will be checked in the differentiation routines
+    !! and used to determine whether to do a transform
+    !! before the 1st wavenumber multiply or not.
+    !!=====================================================
+    !Phi(0)%wavenumber_values = .TRUE.
+    !Phi(0)%gridpoint_values  = .FALSE.     
+    !Phi(0)%forward_transform_only=.FALSE.
+    !Phi(0)%inverse_transform_only=.FALSE.
+    !call Gradient(Phi(0),diff(3))    
+        
+    
+    !!========================================================
+    !! 3D inverse transform the pressure. This step could be
+    !! skipped, only the gradient is needed to do the time step.
+    !!========================================================    
+    forward=.FALSE.
+    inverse=.TRUE. 
+    Phi(0)%inverse_transform_only=.TRUE.
+    call Transform3D(Phi(0),Phi(0),scratch(1),scratch(2),forward,inverse)
+    
+    Phi(0)%wavenumber_values = .FALSE.
+    Phi(0)%gridpoint_values  = .TRUE.      
+    Phi(0)%forward_transform_only=.FALSE.
+    Phi(0)%inverse_transform_only=.FALSE.
+    call Gradient(Phi(0),explicit_rhs(1,M_oldest)) 
+    return
+        
+    
+  elseif(  psolve_at_gridpoints ) then
+  !!========================================================
+  !! If solving for the Phi(0) gridpoint values, go straight  
+  !! to the iterative solver, leaving rhs_b in its physical  
+  !! space representation.
+  !!========================================================
+  
+    write(0,*)'...   iterative solve for gridpoint values'
+  
+    Phi(0)%gridpoint_values  = .TRUE.
+    Phi(0)%wavenumber_values = .FALSE.
+    Phi(0)%forward_transform_only=.FALSE.
+    Phi(0)%inverse_transform_only=.FALSE.
+    rhs_b%gridpoint_values  = .TRUE.
+    rhs_b%wavenumber_values = .FALSE.
+    rhs_b%forward_transform_only=.FALSE.
+    rhs_b%inverse_transform_only=.FALSE.
+   
+    call DoSolve(Phi(0))
+    
+    !!===================================================== 
+    !! Store the gradients in explicit_rhs(1,M_oldest) which are
+    !! free until the the next time step. The values
+    !! of Phi%gridpoint_values & Phi%wavenumber_values
+    !! will be checked in the differentiation routines
+    !! and used to determine whether to do a transform
+    !! before the 1st wavenumber multiply or not.
+    !!=====================================================
+ 
+    call Gradient(Phi(0),explicit_rhs(1,M_oldest))
+  
+  endif  
+  if(myid==0) write(0,*)  &
+  '...     pressure and pressure gradient computed'
+        
+end subroutine pressure_solve
+!!=====================================================
+!!=====================================================
+
+
+
+
+!!=====================================================
+!!=====================================================
+subroutine diffusion_solve
+ use class_ScalarVariable
+ use operators,               only: alpha,beta
+ use mpi_params,              only: myid
+ use intermediate_variables,  only: rhs_b,scratch
+ use dependent_variables,     only: velocity,scalars
+ use etc,                     only: field_id,numzplanes_below,N,NM1
+ use user_data,               only: nx,ny,do_immersed_boundary, &
+                                    usolve_exp_coeffs,          &
+                                    vsolve_exp_coeffs,          &
+                                    wsolve_exp_coeffs,          &
+                                    s1solve_exp_coeffs,         &
+                                    s2solve_exp_coeffs,         &
+                                    runlabel,dt,LES,DNS,        &
+                                    alpha_les,p_les
+                                    
+ implicit none
+ integer,save                    :: locnz,i,j,k,id,kg,myexp
+ real(kind=8),save               :: dsdx,dsdy,dsdz,xx_dns,xx_les,ff,pi
+ logical                         :: p_space,w_space
+ logical                         :: forward,inverse
+ logical, save                   :: uniform_spacing
+ logical, save                   :: first_entry=.TRUE.
+ 
+ !!========================================================
+ !!========================================================
+ if( first_entry ) then
+  locnz=velocity(1)%DataMap%SlabVals(3,myid)
+  dsdx = 1.d0/velocity(1)%Grid%SpaceDims(1)%dxds(1)
+  dsdy = 1.d0/velocity(1)%Grid%SpaceDims(2)%dxds(1)
+  dsdz = 1.d0/velocity(1)%Grid%SpaceDims(3)%dxds(1)
+  uniform_spacing=.TRUE.
+  if(.NOT. velocity(1)%Grid%SpaceDims(1)%uniform_dx) uniform_spacing=.FALSE.
+  if(.NOT. velocity(1)%Grid%SpaceDims(2)%uniform_dx) uniform_spacing=.FALSE.
+  if(.NOT. velocity(1)%Grid%SpaceDims(3)%uniform_dx) uniform_spacing=.FALSE.
+  myexp=2
+  if( trim(runlabel)=='longs_IW' ) myexp=6
+  first_entry=.FALSE.
+ endif
+ !!========================================================
+ !!========================================================
+ id=field_id
+ 
+ !!========================================================
+ !!========================================================
+ !! determine whether we solve in physical or wavenumber space
+ !!========================================================
+ !!========================================================
+ p_space=.TRUE.
+ w_space=.FALSE.
+ if(id==1 .and. usolve_exp_coeffs) w_space=.TRUE.
+ if(id==2 .and. vsolve_exp_coeffs) w_space=.TRUE.
+ if(id==3 .and. wsolve_exp_coeffs) w_space=.TRUE.
+ if(id==4 .and. s1solve_exp_coeffs) w_space=.TRUE.
+ if(id==5 .and. s2solve_exp_coeffs) w_space=.TRUE.
+ if( w_space ) p_space=.FALSE.
+  
+ 
+ if( p_space ) then
+ !!=========================================================
+ !! for soln in physical space, make sure flags are correct
+ !! and then do an iterative solve for gridpoint values
+ !!=========================================================
+ 
+  rhs_b%gridpoint_values  = .TRUE.
+  rhs_b%wavenumber_values = .FALSE.
+  rhs_b%forward_transform_only=.FALSE.
+  rhs_b%inverse_transform_only=.FALSE.
+ 
+  if( id <= 3 ) then
+   if(myid==0) write(0,*)'... diffusion update of gridpoint values for velocity: ',id
+   velocity(id)%gridpoint_values      =.TRUE.
+   velocity(id)%wavenumber_values     =.FALSE.
+   velocity(id)%forward_transform_only=.FALSE.
+   velocity(id)%inverse_transform_only=.FALSE.
+   
+   call DoSolve(velocity(id))
+   
+  elseif( id > 3) then
+   if(myid==0) write(0,*)'... diffusion update of gridpoint values for scalar: ',id-3
+   scalars(id-3)%gridpoint_values      =.TRUE.
+   scalars(id-3)%wavenumber_values     =.FALSE.
+   scalars(id-3)%forward_transform_only=.FALSE.
+   scalars(id-3)%inverse_transform_only=.FALSE.
+   
+   call DoSolve(scalars(id-3))
+  
+  else
+   stop 'id problem in DiffusionSolve, physical space'
+  endif 
+ 
+ 
+ elseif( w_space ) then
+ 
+ if( id <= 3 ) then
+   if(myid==0)   &
+     write(0,*)'... diffusion update of expansion coeffs for velocity: ',id
+ elseif( id > 3 .and. id < 6) then
+   if(myid==0)   &
+     write(0,*)'... diffusion update of expansion coeffs for scalar:   ',id-3
+ else
+   stop 'id problem in DiffusionSolve, wavenumber space'
+ endif
+ 
+ !!============================================================
+ !! make sure rhs_b derivs are set correctly
+ !! so that transforms are done properly
+ !!============================================================
+  do i=1,3   !!overloaded operator (=)
+   if( id <= 3 ) then
+    rhs_b%Derivs(i)=velocity(id)%Derivs(i)
+   elseif( id > 3 .and. id < 6) then
+    rhs_b%Derivs(i)=scalars(id-3)%Derivs(i)
+   endif
+  enddo
+ 
+ !!============================================================
+ !! transform rhs_b in all three directions, store result back
+ !! into rhs_b, use scratch(1:2) as scratch arrays.
+ !!============================================================
+  forward=.TRUE.
+  inverse=.FALSE. 
+  call Transform3D(rhs_b,rhs_b,scratch(1),scratch(2),forward,inverse) 
+       
+    
+  !!============================================================
+  !!============================================================
+  !! if we have constant grid spacing in each dimension, 
+  !! (and no IB to worry about) then
+  !! we can do the transformed diffusion update analytically
+  !!
+  !! transformed eqns have the form
+  !!       dy/dt = ( xx_dns + xx_les )y
+  !!                xx_dns = alpha*(k^2 + l^2 + m^2)
+  !!                xx_les = alpha_les(1)*k^(2*p_les) 
+  !!                       + alpha_les(2)*l^(2*p_les)
+  !!                       + alpha_les(3)*m^(2*p_les)
+  !!
+  !!      analytic soln is
+  !!      
+  !!        y = y_n-1 * exp{ -( xx_dns + xx_les )*dt }
+  !!
+  !! where
+  !! alpha = 1/Re  or 1/PrRe
+  !!
+  !!============================================================
+  !!============================================================
+  
+  if(uniform_spacing .and. .not. do_immersed_boundary) then
+   if(myid==0 ) write(0,*)'...  No IB, constant grid spacing, solve is analytical'
+   
+     if( id <= 3 ) then ! velocity components
+          
+      do k=1,locnz
+       kg = numzplanes_below(myid) + k
+       do j=1,ny
+        do i=1,nx
+        
+         xx_dns = alpha(id)*(                                         &
+                    ( velocity(id)%Derivs(1)%kx(i)  * dsdx )**2       &
+                   +( velocity(id)%Derivs(2)%kx(j)  * dsdy )**2       &
+                   +( velocity(id)%Derivs(3)%kx(kg) * dsdz )**2   )    
+         
+         xx_dns = exp(-xx_dns * dt )
+         
+         xx_les = (                                                            &
+           alpha_les(1)*( velocity(id)%Derivs(1)%kx(i) * dsdx )**(2*p_les(1))  &
+          +alpha_les(2)*( velocity(id)%Derivs(2)%kx(j) * dsdy )**(2*p_les(2))  &
+          +alpha_les(3)*( velocity(id)%Derivs(3)%kx(kg) * dsdz )**(2*p_les(3)) )
+                           
+          
+         xx_les = exp(-xx_les * dt )
+         
+         ff = velocity(id)%Derivs(1)%kfilter(i)     &
+             *velocity(id)%Derivs(2)%kfilter(j)     &
+             *velocity(id)%Derivs(3)%kfilter(kg)
+         
+         velocity(id)%SlabVals(i,j,k) = ff * rhs_b%SlabVals(i,j,k)*xx_dns*xx_les   
+                   
+        enddo
+       enddo
+      enddo
+      
+     elseif( id==4 .or. id==5 ) then  ! scalars components
+      do k=1,locnz
+       kg = numzplanes_below(myid) + k
+       do j=1,ny
+        do i=1,nx
+        
+         xx_dns = alpha(id)*(                                         &
+                    ( scalars(id-3)%Derivs(1)%kx(i)  * dsdx )**2       &
+                   +( scalars(id-3)%Derivs(2)%kx(j)  * dsdy )**2       &
+                   +( scalars(id-3)%Derivs(3)%kx(kg) * dsdz )**2   )    
+         
+         xx_dns = exp(-xx_dns * dt )
+         
+         xx_les = (                                                          &
+           alpha_les(1)*( scalars(id-3)%Derivs(1)%kx(i) * dsdx )**(2*p_les(1)) &
+          +alpha_les(2)*( scalars(id-3)%Derivs(2)%kx(j) * dsdy )**(2*p_les(2)) &
+          +alpha_les(3)*( scalars(id-3)%Derivs(3)%kx(kg) * dsdz )**(2*p_les(3)) )
+                           
+          
+         xx_les = exp(-xx_les * dt )
+         
+         ff = scalars(id-3)%Derivs(1)%kfilter(i)     &
+             *scalars(id-3)%Derivs(2)%kfilter(j)     &
+             *scalars(id-3)%Derivs(3)%kfilter(kg)
+         
+         scalars(id-3)%SlabVals(i,j,k) = ff * rhs_b%SlabVals(i,j,k)*xx_dns*xx_les
+         
+         
+        enddo
+       enddo
+      enddo
+     endif  !! end velocity or scalar
+    
+    else  !! either we have a stretched grid or an IB ==> iterative solve
+    
+     !! No analytical soln because
+     !!(s<-->x) must be done in p space
+     !! or there is an additional IB term.
+     !! We still do iterations in w-n space however.    
+     if(myid==0) write(0,*)'... IB and/or non-uniform grid spacing, solve is iterative'
+          
+     if( id <= 3 ) then
+      velocity(id)%gridpoint_values      =.FALSE.
+      velocity(id)%wavenumber_values     =.TRUE.
+      velocity(id)%forward_transform_only=.FALSE.
+      velocity(id)%inverse_transform_only=.FALSE.
+      
+          call DoSolve(velocity(id))
+      
+     else
+      scalars(id-3)%gridpoint_values      =.FALSE.
+      scalars(id-3)%wavenumber_values     =.TRUE.
+      scalars(id-3)%forward_transform_only=.FALSE.
+      scalars(id-3)%inverse_transform_only=.FALSE.
+      
+          call DoSolve(scalars(id-3))
+      
+     endif
+    
+    endif
+      
+  !!=========================================================
+  !!=========================================================
+  !! In either case,
+  !! transform the wavenumber soln back to physical space,
+  !! overwriting the input arrays.
+  !!=========================================================
+  !!========================================================= 
+  forward=.FALSE.
+  inverse=.TRUE.  
+  if(id<=3) then
+   call Transform3D(velocity(id),velocity(id),scratch(1),scratch(2),forward,inverse)
+  elseif(id==4 .or. id==5) then
+   call Transform3D(scalars(id-3),scalars(id-3),scratch(1),scratch(2),forward,inverse)
+  endif
+                  
+ endif   !! end p_space or w_space block
+  
+  
+end subroutine diffusion_solve
+!!=====================================================
+!!=====================================================
+
+
+
+!!=====================================================
+!!=====================================================
+subroutine  EllipticOp(Amat,petsc_x,petsc_y,jerr) 
+!! High Order Approximation to Differential Operator
+!!===============================================
+!! This defines the matrix multiply operation
+!! for the shell matrix A which exists only
+!! on the finest grid level i=0.
+!! Args: compute  petsc_y <-- A petsc_x 
+!!===============================================
+ use class_ScalarVariable
+ use class_SAOperator
+ 
+ use InterfacePetsc        
+ use operators,               only: L,alpha,beta,h2_scale_factor
+ use dependent_variables
+ use mpi_params
+ use immersed_boundary
+ use intermediate_variables,  only: Phi,scratch,rhs_b
+ use etc,                     only: field_id,numzplanes_below
+ use user_data,               only: nx,ny,nz,                &
+                                    dt,Re,Pr,BCtype,         &
+                                    xdim_implicit_bcs,       &
+                                    ydim_implicit_bcs,       &
+                                    zdim_implicit_bcs,       &
+                                    psolve_exp_coeffs,       &
+                                    usolve_exp_coeffs,       &
+                                    vsolve_exp_coeffs,       &
+                                    wsolve_exp_coeffs,       &
+                                    s1solve_exp_coeffs,      &
+                                    s2solve_exp_coeffs,      &
+                                    DNS,LES,alpha_les,p_les, &
+                                    do_immersed_boundary
+                                    
+ implicit none
+#include "finclude/petsc.h"
+#include "finclude/petscvec.h"
+#include "finclude/petscmat.h"
+#include "finclude/petscpc.h"
+#include "finclude/petscda.h"
+#include "finclude/petscksp.h"
+#include "finclude/petscmg.h"
+ Mat    Amat  
+ Vec    petsc_x,petsc_y
+
+  
+ integer                :: jerr,idim,i,j,k,kg,id
+ integer                :: endid
+ real(kind=8)           :: h
+
+ integer, SAVE          :: locnx,locny,locnz,level
+ real(kind=8), SAVE     :: h2,xx,dsdx,dsdy,dsdz
+ logical, SAVE          :: first_entry=.TRUE.
+ logical                :: forward,inverse
+ logical                :: p_solve,w_solve
+
+ 
+ if( first_entry ) then
+  level=0  !! fine grid only 
+  locnx=scratch(1)%DataMap%SlabVals(1,myid)
+  locny=scratch(1)%DataMap%SlabVals(2,myid)
+  locnz=scratch(1)%DataMap%SlabVals(3,myid)
+  dsdx = 1.d0/velocity(1)%Grid%SpaceDims(1)%dxds(1)
+  dsdy = 1.d0/velocity(1)%Grid%SpaceDims(2)%dxds(1)
+  dsdz = 1.d0/velocity(1)%Grid%SpaceDims(3)%dxds(1)
+  first_entry = .FALSE.
+ endif
+ id=field_id
+ 
+ xx=h2_scale_factor
+ p_solve=.TRUE.
+ w_solve=.FALSE.
+ if( psolve_exp_coeffs  .and. field_id==6 ) xx=1.d0
+ if( usolve_exp_coeffs  .and. field_id==1 ) xx=1.d0
+ if( vsolve_exp_coeffs  .and. field_id==2 ) xx=1.d0
+ if( wsolve_exp_coeffs  .and. field_id==3 ) xx=1.d0
+ if( s1solve_exp_coeffs .and. field_id==4 ) xx=1.d0
+ if( s2solve_exp_coeffs .and. field_id==5 ) xx=1.d0
+ if( xx==1.d0 ) then
+  w_solve=.TRUE.
+  p_solve=.FALSE.
+ endif
+
+!!============================================================= 
+!! Make sure scratch(1) has the right derivative types
+!! and labels for both first and second derivatives
+!! scratch(1) should inherit flag values from the variable
+!! being solved for
+!!============================================================= 
+ do i=1,6
+ 
+  if(id<=3) then
+   scratch(1)%Derivs(i)=velocity(id)%Derivs(i)
+   !scratch(1)%DerivTypes(i)=velocity(id)%DerivTypes(i)
+   
+   scratch(1)%gridpoint_values=velocity(id)%gridpoint_values
+   scratch(1)%wavenumber_values=velocity(id)%wavenumber_values
+   scratch(1)%forward_transform_only=velocity(id)%forward_transform_only
+   scratch(1)%inverse_transform_only=velocity(id)%inverse_transform_only
+   
+  elseif(id==4 .or. id==5) then
+  
+   scratch(1)%Derivs(i)=scalars(id-3)%Derivs(i)
+   !scratch(1)%DerivTypes(i)=scalars(id-3)%DerivTypes(i)
+      
+   scratch(1)%gridpoint_values=scalars(id-3)%gridpoint_values
+   scratch(1)%wavenumber_values=scalars(id-3)%wavenumber_values
+   scratch(1)%forward_transform_only=scalars(id-3)%forward_transform_only
+   scratch(1)%inverse_transform_only=scalars(id-3)%inverse_transform_only
+
+  elseif(id==6) then
+  
+   scratch(1)%Derivs(i)=Phi(0)%Derivs(i)
+   !scratch(1)%DerivTypes(i)=Phi(0)%DerivTypes(i)
+   
+   scratch(1)%gridpoint_values=Phi(0)%gridpoint_values
+   scratch(1)%wavenumber_values=Phi(0)%wavenumber_values
+   scratch(1)%forward_transform_only=Phi(0)%forward_transform_only
+   scratch(1)%inverse_transform_only=Phi(0)%inverse_transform_only
+  endif
+  
+ enddo
+    
+
+!!============================================================= 
+!! Store input vector as a ScalarVariable
+!!=============================================================
+ call PetscVec2Scalar(petsc_x,scratch(1))
+
+ 
+ !!=============================================================
+ !! Apply the self-adjoint operator L to f,
+ !! storing the result in the ScalarVariable scratch(2)
+ !!    L_of_f = scratch(2) <====  xx*alpha*(f_xx + f_yy + f_zz)
+ !!                             + xx*beta*f
+ !! (for AM 3 we have beta = -2/dt for velocity & scalars)
+ !! where alpha and beta depend on which variable we're working
+ !! with and xx is simply a scale factor. e.g. beta=0 for pressure.
+ !! An optional SV(3) array can be also filled w/ Grad f values if
+ !! it is added as the last argument to the call to ApplySAOperator.
+ !! Regardless of whether the input is in physical or wavenumber space, 
+ !! the ApplySAOperator routine ALWAYS returns its results in 
+ !! physical space (had to be in pspace for ds/dx metric)
+ !!=============================================================  
+  
+  call ApplySAOperator(L(level),scratch(1),scratch(2),   &
+                                scratch(3),scratch(4),   &
+                                alpha(id),beta(id),xx)
+  
+                            
+ !!=============================================================
+ !!=============================================================
+ !! SAOperator returns result in physical space. 
+ !! (had to apply the final dsdx metric in phys. space)
+ !! ===> need to transform back to wavenumber space before 
+ !! returning control of the iterations to petsc. Make sure
+ !! the transform types for s2 match those of variable "id"
+ !!=============================================================
+ !!=============================================================
+ if( w_solve ) then
+  forward=.TRUE.
+  inverse=.FALSE.
+  do i=1,3
+    scratch(2)%Derivs(i)=scratch(1)%Derivs(i)
+  enddo
+  call Transform3D(scratch(2),scratch(2),scratch(3),scratch(4),forward,inverse)
+  
+  
+  if(LES) then
+   !!=============================================================
+   !! get transform of input field (petsc_x=scratch(1))
+   !!=============================================================
+   call Transform3D(scratch(1),scratch(5),scratch(3),scratch(4),forward,inverse)
+   
+   !!=============================================================   
+   !! loop through wavenumber space & update scratch(2)
+   !! adding in the les terms:  alpha_les(i)*k(i)**(2*p_les(i)) * f^
+   !!=============================================================
+   do k=1,locnz
+    kg = numzplanes_below(myid) + k
+     do j=1,ny
+      do i=1,nx
+          scratch(2)%SlabVals(i,j,k) = scratch(2)%SlabVals(i,j,k)              &
+          +(alpha_les(1)*( scratch(1)%Derivs(1)%kx(i) * dsdx )**(2*p_les(1))   &
+           +alpha_les(2)*( scratch(1)%Derivs(2)%kx(j) * dsdx )**(2*p_les(2))   &
+           +alpha_les(3)*( scratch(1)%Derivs(3)%kx(kg)* dsdx )**(2*p_les(3)) ) &
+           * scratch(5)%SlabVals(i,j,k)
+      enddo
+     enddo
+   enddo
+  endif
+  
+  goto 102  !! don't apply any explicit bdry operators
+ endif
+  
+  
+ !!=========================
+ !!  EAST AND WEST FACES
+ !!=========================
+ idim=1
+ if(xdim_implicit_bcs) goto 100
+ 
+ 
+  endid=1
+  i=1
+  if(BCtype(field_id,idim,endid)=='dirichlet') then
+   scratch(2)%SlabVals(i,:,:) = scratch(1)%DirichletWest(:,:)
+  elseif(BCtype(field_id,idim,endid)=='neumann') then
+   scratch(2)%SlabVals(i,:,:) = scratch(1)%NeumannWest(:,:)
+  endif
+  
+  endid=2
+  i=locnx
+  if(BCtype(field_id,idim,endid)=='dirichlet') then
+   scratch(2)%SlabVals(i,:,:) = scratch(1)%DirichletEast(:,:)
+  elseif(BCtype(field_id,idim,endid)=='neumann') then
+   scratch(2)%SlabVals(i,:,:) = scratch(1)%NeumannEast(:,:)
+  endif
+   
+ 
+ 
+   
+ !!=========================
+ !!  FRONT AND BACK FACES
+ 100 idim=2
+ if(ydim_implicit_bcs) goto 101
+ !!=========================
+  
+  endid=1
+  j=1
+  if(BCtype(field_id,idim,endid)=='dirichlet') then
+   scratch(2)%SlabVals(:,j,:) = scratch(1)%DirichletFront(:,:)
+  elseif(BCtype(field_id,idim,endid)=='neumann') then
+   scratch(2)%SlabVals(:,j,:) = scratch(1)%NeumannFront(:,:)
+  endif
+  
+  endid=2
+  j=locny
+  if(BCtype(field_id,idim,endid)=='dirichlet') then
+   scratch(2)%SlabVals(:,j,:) = scratch(1)%DirichletBack(:,:)
+  elseif(BCtype(field_id,idim,endid)=='neumann') then
+   scratch(2)%SlabVals(:,j,:) = scratch(1)%NeumannBack(:,:)
+  endif
+     
+  
+ !!=========================
+ !!  BOTTOM 
+ !!=========================
+101 idim=3
+  endid=1
+  k=1
+  if(zdim_implicit_bcs) goto 102
+   
+   if(BCtype(field_id,idim,endid)=='dirichlet') then
+    scratch(2)%SlabVals(:,:,k) = scratch(1)%DirichletBottom(:,:)
+   elseif(BCtype(field_id,idim,endid)=='neumann') then
+    scratch(2)%SlabVals(:,:,k) = scratch(1)%NeumannBottom(:,:)
+   endif
+       
+ !!=========================
+ !!  TOP
+ idim=3
+ endid=2
+ k=locnz
+ !!=========================
+ 
+  if(BCtype(field_id,idim,endid)=='dirichlet') then
+   scratch(2)%SlabVals(:,:,k) = scratch(1)%DirichletTop(:,:)
+  elseif(BCtype(field_id,idim,endid)=='neumann') then
+   scratch(2)%SlabVals(:,:,k) = scratch(1)%NeumannTop(:,:)
+  endif
+     
+!! Store final result in petsc vector
+102 continue
+call ScalarVariable2PetscVec(scratch(2),petsc_y)
+
+
+
+end subroutine EllipticOp
+!!=====================================================
+!!=====================================================
+
+
+
+
+!!=====================================================
+!!=====================================================
+ subroutine Create_L_Solver(ksp_L)
+!!=====================================================
+!!=====================================================
+ use class_ScalarVariable
+ use class_SAOperator
+ 
+ use operators, only: L,A,A_PC
+ use user_data, only: xdim_periodic,      &
+                      ydim_periodic,      &
+                      zdim_periodic,      &
+                      usolve_exp_coeffs,  &
+                      vsolve_exp_coeffs,  &
+                      wsolve_exp_coeffs,  &
+                      s1solve_exp_coeffs, &
+                      s2solve_exp_coeffs, &
+                      psolve_exp_coeffs
+                      
+ use etc,       only: field_id
+ use mpi_params
+ implicit none
+#include "finclude/petsc.h"
+#include "finclude/petscvec.h"
+#include "finclude/petscmat.h"
+#include "finclude/petscpc.h"
+#include "finclude/petscda.h"
+#include "finclude/petscksp.h"
+#include "finclude/petscmg.h"
+
+ KSP                   ksp_L
+ PC                    pc_L
+ MatNullSpace          nullsp    
+ Vec                   RHS,X
+ PetscTruth            flag_pcasm
+ PetscTruth            flag_hypre
+ PetscTruth            flag_diag
+ PetscTruth            flag_fgmres
+ PetscTruth            flag_bcgs
+ PetscTruth            flag_guess
+ PetscTruth            flag_PC_pressure
+ PetscTruth            flag_PC_othervars
+  
+ integer,allocatable :: idx(:)
+ integer             :: nx_local,ny_local,nz_local
+ integer             :: nx_global,ny_global,nz_global
+ integer             :: localrows,localcols
+ integer             :: globalrows,globalcols
+ integer             :: i,id,nz,nnz,jerr
+ integer             :: izero=0,ione=1,level=0
+ real(kind=8)        :: spai_tol=0.9d0
+ logical             :: PC_A
+ logical             :: PC_A_PHYSICAL
+ logical             :: PC_A_WAVENUMBER
+ logical,save        :: first_entry=.TRUE.
+ external  EllipticOp
+ 
+ id=field_id
+ if(myid==0 .and. id==1 ) write(0,*) '... Creating KSP Solver: L[f], u '
+ if(myid==0 .and. id==2 ) write(0,*) '... Creating KSP Solver: L[f], v '
+ if(myid==0 .and. id==3 ) write(0,*) '... Creating KSP Solver: L[f], w '
+ if(myid==0 .and. id==4 ) write(0,*) '... Creating KSP Solver: L[f], s1 '
+ if(myid==0 .and. id==5 ) write(0,*) '... Creating KSP Solver: L[f], s2 '
+ if(myid==0 .and. id==6 ) write(0,*) '... Creating KSP Solver: L[f], phi '
+ 
+ !!==========================================================
+ !! Find out whether to create a preconditioner matrix A_PC
+ !!==========================================================
+ PC_A=.FALSE.
+ if(field_id==6) then
+  call PetscOptionsHasName(PETSC_NULL_CHARACTER,'-PC_pressure', &
+                           flag_PC_pressure,jerr)
+  if(flag_PC_pressure == 1) PC_A=.TRUE.
+ else
+  call PetscOptionsHasName(PETSC_NULL_CHARACTER,'-PC_othervars', &
+                           flag_PC_othervars,jerr)
+  if(flag_PC_othervars == 1) PC_A=.TRUE.
+ endif
+ 
+ !!==========================================================
+ !! If preconditioning, do in physical or wavenumber space?
+ !!==========================================================
+ PC_A_WAVENUMBER=.FALSE.
+ PC_A_PHYSICAL=.FALSE.
+ if( PC_A ) then
+  if(id==1 .and. usolve_exp_coeffs)  PC_A_WAVENUMBER=.TRUE.
+  if(id==2 .and. vsolve_exp_coeffs)  PC_A_WAVENUMBER=.TRUE.
+  if(id==3 .and. wsolve_exp_coeffs)  PC_A_WAVENUMBER=.TRUE.
+  if(id==4 .and. s1solve_exp_coeffs) PC_A_WAVENUMBER=.TRUE.
+  if(id==5 .and. s2solve_exp_coeffs) PC_A_WAVENUMBER=.TRUE.
+  if(id==6 .and. psolve_exp_coeffs)  PC_A_WAVENUMBER=.TRUE.
+  if(.NOT. PC_A_WAVENUMBER) PC_A_PHYSICAL=.TRUE.
+ endif
+      
+ 
+!!======================================================================
+!! Create Shell Matrix A & set Operator Routines
+!!======================================================================
+!! determine layout from SA operator at level 0
+ call SAGetSizes(L(level),nx_local,ny_local,nz_local,  &
+                       nx_global,ny_global,nz_global)
+                       
+ localrows=nx_local*ny_local*nz_local   
+ globalrows=nx_global*ny_global*nz_global 
+ localcols=localrows
+ globalcols=globalrows
+ 
+ 
+ !!=============================================================================
+ !!=============================================================================
+ !! shell matrix for higher order self adjoint operator on fine grid
+ !!=============================================================================
+ !!=============================================================================
+ if(myid==0) write(0,*) '... Creating shell matrix A.....',field_id
+ if(myid==0) write(0,*) '... PC_A             .....',PC_A
+ if(myid==0) write(0,*) '... PC_A_PHYSICAL    .....',PC_A_PHYSICAL
+ if(myid==0) write(0,*) '... PC_A_WAVENUMBER  .....',PC_A_WAVENUMBER
+ call MatCreateShell(comm,localrows,localcols,globalrows, &
+                     globalcols,PETSC_NULL_INTEGER,A,jerr) 
+ if( jerr .ne. 0 ) stop 'error in call to MatCreateShell'
+ call MatShellSetOperation(A,MATOP_MULT,EllipticOp,jerr)
+ if( jerr .ne. 0 ) stop 'error in call to MatShellSetOperation' 
+  
+ !!=============================================================================
+ !!=============================================================================
+ !! Explicit matrix for preconditioning. 
+ !! Results stored in petsc Matrix A_PC 
+ !! in module "operators"
+ !!=============================================================================
+ !!=============================================================================
+ if(PC_A) then
+ 
+  if(first_entry) then
+   if(PC_A_PHYSICAL) nnz=5
+   if(PC_A_WAVENUMBER) nnz=1
+   call MatCreateMPIAIJ(comm,localrows,localcols,globalrows,globalcols,   &
+                        nnz,PETSC_NULL_INTEGER,ione,PETSC_NULL_INTEGER,   &
+                        A_PC,jerr)
+   first_entry=.FALSE.
+  endif
+  call MatZeroEntries(A_PC,jerr)
+  if( jerr .ne. 0 ) stop 'error in call to MatZeroEntries'
+  
+  if( PC_A_PHYSICAL ) then
+   if(myid==0) write(0,*) '...  calling FillA_FD (finite difference)'
+   call FillA_FD(myid,localrows,globalrows)
+   
+  elseif(PC_A_WAVENUMBER) then
+   if(myid==0) write(0,*) '...  calling FillA_WS (wavenumber space)'
+   call FillA_WS(myid,localrows,globalrows)
+  endif
+   
+ endif
+ 
+ !!=============================================================================
+ !!=============================================================================
+ !! Create KSP solver object 
+ !!=============================================================================
+ !!=============================================================================
+ call KSPCreate(comm,ksp_L,jerr)
+                          if( jerr .ne. 0 ) stop 'error in call to KSPCreate'
+ if(PC_A) then   
+  call KSPSetOperators(ksp_L,A,A_PC,SAME_PRECONDITIONER,jerr)
+ else
+  call KSPSetOperators(ksp_L,A,A,SAME_PRECONDITIONER,jerr)
+ endif
+ 
+ flag_fgmres=1
+ flag_bcgs=0
+ call PetscOptionsHasName(PETSC_NULL_CHARACTER,'-petsc_fgmres',flag_fgmres,jerr)
+ call PetscOptionsHasName(PETSC_NULL_CHARACTER,'-petsc_bcgs',flag_bcgs,jerr)
+ 
+ 
+ if(myid==0)  &
+ write(0,*) '... Setting KSP type.....(fgmres,bcgs)...',flag_fgmres,flag_bcgs
+ if( flag_fgmres /= 0 ) then
+     call KSPSetType(ksp_L,KSPFGMRES,jerr) 
+     !!call KSPGMRESSetPreAllocateVectors(ksp_L,jerr)
+ endif
+ if( flag_bcgs.ne. 0 )   call KSPSetType(ksp_L,KSPBCGS,jerr) 
+       if( jerr /= 0 ) stop 'error in call to KSPSetType'
+
+ call PetscOptionsHasName(PETSC_NULL_CHARACTER,'-nonzero_guess',flag_guess,jerr)
+ if( flag_guess /= 0 ) call KSPSetInitialGuessNonzero(ksp_L,PETSC_TRUE,jerr)
+       if( jerr /= 0 ) stop 'error in call to KSPSetInitialGuessNonzero'
+       
+ call KSPSetFromOptions(ksp_L,jerr)
+      if( jerr /= 0 ) stop 'error in call to KSPSetFromOptions'
+                          
+ call KSPGetPC(ksp_L,pc_L,jerr)
+      if( jerr /= 0 ) stop 'error in call to KSPGetPC' 
+
+ !!=============================================================================
+ !!=============================================================================
+ !! Create & Attach a PC object 
+ !!=============================================================================
+ !!=============================================================================
+ 
+ flag_pcasm=1
+ flag_hypre=0
+ flag_diag=0
+ call PetscOptionsHasName(PETSC_NULL_CHARACTER,'-petsc_pcasm',flag_pcasm,jerr)
+ call PetscOptionsHasName(PETSC_NULL_CHARACTER,'-petsc_hypre',flag_hypre,jerr)
+ call PetscOptionsHasName(PETSC_NULL_CHARACTER,'-petsc_diag',flag_diag,jerr)
+ 
+ if(PC_A) then  
+  if(myid==0) &
+   write(0,*) '... Setting KSP PC type.....(pcasm,hypre,diag)...',  &
+                   flag_pcasm,flag_hypre,flag_diag
+  if (flag_diag /= 0 )  call PCSetType(pc_L,PCJACOBI,jerr)
+  if (flag_pcasm /= 0)  call PCSetType(pc_L,PCASM,jerr) !
+  if (flag_hypre /= 0)  call PCSetType(pc_L,PCHYPRE,jerr)
+  if( jerr .ne. 0 ) stop 'error in call to PCSetType'
+ elseif(.NOT. PC_A ) then
+  call PCSetType(pc_L,PCNONE,jerr)
+   if( jerr .ne. 0 ) stop 'error in call to PCSetType'
+ endif
+ 
+ call PCSetFromOptions(pc_L,jerr)
+end subroutine Create_L_Solver
+!!=========================================================
+!!=========================================================
+
+
+
+!!=========================================================
+!!=========================================================
+subroutine DoSolve(f)
+!! Solve system Ax=b <===> L[f]=b
+!! The rhs ScalarVariable b is available
+!! via "use intermediate_variables"
+!! ScalarVariable f is the fine grid solution 
+ use InterfacePetsc 
+ use intermediate_variables,  only: rhs_b
+ use etc,                     only: field_id,istep,istart                                    
+ use operators
+ use mpi_params
+ 
+ implicit none
+ PetscTruth               flg
+ type( ScalarVariable )   :: f
+ integer                  :: id,i,k,jerr,maxits(6)
+ integer,save             :: nx_local,ny_local,nz_local
+ integer,save             :: nx_global,ny_global,nz_global
+ integer,save             :: localrows,localcols,locnz
+ integer,save             :: globalrows,globalcols
+ integer                  :: idim,num_its(6)
+ real(kind=8)             :: rtol(6),atol(6),dtol(6),res_norm(6)
+ real(kind=8)             :: xmem(6)
+ logical,save             :: first_entry=.TRUE.
+ 
+  id=field_id
+  if(myid==0)   &
+  write(0,*) ' .......... begining iterative solve for field ......',id
+ 
+ if(first_entry) then
+  !!=====================================================================
+  !! determine layout from my SA operator L
+  !! and create petsc vectors to use during solves
+  !!=====================================================================
+  call SAGetSizes(L(0),nx_local,ny_local,nz_local,  &
+                  nx_global,ny_global,nz_global )
+                       
+  localrows = nx_local*ny_local*nz_local   
+  globalrows= nx_global*ny_global*nz_global
+  localcols=localrows       
+  globalcols=globalrows
+  locnz=f%DataMap%SlabVals(3,myid)
+  first_entry=.FALSE.
+ endif
+  
+  call VecCreateMPI(comm,localrows,globalrows,petsc_soln,jerr)
+  if( jerr .ne. 0 ) stop 'error in call to VecCreateMPI: petsc_soln'
+  call VecDuplicate(petsc_soln,petsc_b,jerr)
+  if( jerr .ne. 0 ) stop 'error in call to VecDuplicate'
+ 
+ !!==========================================================================
+ !! put scalarVariable rhs --> petsc vector
+ !!==========================================================================
+  call ScalarVariable2PetscVec(rhs_b,petsc_b)
+  
+ 
+ 
+ if(id==6 ) then
+ !!==========                         ===========
+ !!              pressure  solve 
+ !!==========                         ===========
+ 
+   
+  !! initial guess
+  call SetGuess(petsc_soln)   
+    
+  !! (re)set tolerances etc
+  rtol(id)=1.e-5     !! 1.e-4
+  atol(id)=1.e-6     !! 1.e-7
+  dtol(id)=1.e15
+  maxits(id) = 1e4
+  !! over-ride with value from PetscOptions
+  call PetscOptionsGetInt(PETSC_NULL_CHARACTER,    &
+            '-pressure_its',maxits(id),flg,jerr)
+  call KSPSetTolerances(     &
+         ksp(id),rtol(id),   &
+         atol(id),dtol(id),  &
+         maxits(id),jerr )
+  if( jerr .ne. 0 ) stop 'error in call to KSPSetTolerances'
+  
+      
+   if(myid==0) write(0,*) '...   calling KSPSolve ksp'
+    call KSPSolve(ksp(id),petsc_b,petsc_soln,jerr)
+    if( jerr .ne. 0 ) stop 'error in call to KSPSolve'
+   if(myid==0) write(0,*) '...   done with KSPSolve ksp'
+   
+   call KSPGetIterationNumber(ksp(id),num_its(id),jerr)
+   call KSPGetResidualNorm(ksp(id),res_norm(id),jerr)
+   !call PetscMemoryGetCurrentUsage(xmem(id),jerr)
+      
+   if(myid==0) then
+    if(istep==istart)open(1,file='output/pressure_iterations',position='rewind')
+    if(istep>istart) open(1,file='output/pressure_iterations',position='append')
+     write(1,*) istep,num_its(id),res_norm(id)   !,xmem(i)
+    close(1)
+   endif
+        
+ 
+ !!==========                  =====================
+ else !!  all other variables (u,v,w,s1,s2)
+ !!==========                  =====================
+ 
+
+  !! set tolerances for the various Helmholtz eqns
+  if(id==1) then      !!!   ============ tolerances for u   ======================
+   rtol(id)=1.e-10
+   atol(id)=1.e-12
+   dtol(id)=1.e15
+   maxits(id)=10
+  elseif(id==2) then  !!!   ============ tolerances for v   ======================
+   rtol(id)=1.e-10
+   atol(id)=1.e-12
+   dtol(id)=1.e15
+   maxits(id)=10
+  elseif(id==3) then  !!!   ============ tolerances for w   ======================
+   rtol(id)=1.e-10
+   atol(id)=1.e-12
+   dtol(id)=1.e15
+   maxits(id)=10
+  elseif(id==4) then  !!!   ============ tolerances for s1  ======================
+   rtol(id)=1.e-10
+   atol(id)=1.e-12
+   dtol(id)=1.e15
+   maxits(id)=10
+  elseif(id==5) then  !!!   ============ tolerances for s2  ======================
+   rtol(id)=1.e-10
+   atol(id)=1.e-12
+   dtol(id)=1.e15
+   maxits(id)=10
+  endif
+  
+  !! over-ride with value from PetscOptions
+  call PetscOptionsGetInt(PETSC_NULL_CHARACTER,    &
+            '-othervars_its',maxits(id),flg,jerr)
+  call KSPSetTolerances(     &
+         ksp(id),rtol(id),   &
+         atol(id),dtol(id),  &
+         maxits(id),jerr )
+  if( jerr .ne. 0 )          &
+  stop 'error in call to KSPSetTolerances'
+  
+  !! set nonzero initial guess
+  call SetGuess(petsc_soln)
+  
+  !! do the solve
+  call KSPSolve(ksp(id),petsc_b,petsc_soln,jerr)
+  if( jerr .ne. 0 ) stop 'error in call to KSPSolve'
+  
+  !! get the iteration count etc
+  call KSPGetIterationNumber(ksp(id),num_its(id),jerr)
+  call KSPGetResidualNorm(ksp(id),res_norm(id),jerr)
+  !call PetscMemoryGetCurrentUsage(xmem(id),jerr)
+   
+  !! write iteration count to text file
+  if(myid==0) then
+   if(istep==istart .and. id== 1) open(1,file='output/u_iterations',position='rewind')
+   if(istep>istart .and. id== 1)  open(1,file='output/u_iterations',position='append')
+   if(istep==istart .and. id== 2) open(1,file='output/v_iterations',position='rewind')
+   if(istep>istart .and. id== 2)  open(1,file='output/v_iterations',position='append')
+   if(istep==istart .and. id== 3) open(1,file='output/w_iterations',position='rewind')
+   if(istep>istart .and. id== 3)  open(1,file='output/w_iterations',position='append')
+   if(istep==istart .and. id== 4) open(1,file='output/s1_iterations',position='rewind')
+   if(istep>istart .and. id== 4)  open(1,file='output/s1_iterations',position='append')
+   if(istep==istart .and. id== 5) open(1,file='output/s2_iterations',position='rewind')
+   if(istep>istart .and. id== 5)  open(1,file='output/s2_iterations',position='append')
+    write(1,*) istep,num_its(id),res_norm(id)   !,xmem(i)
+   close(1)
+  endif
+  
+ endif
+ 
+ 
+!!==================================================================
+!! Store petsc_soln  =======>  ScalarVariable f 
+!!==================================================================
+  call PetscVec2Scalar(petsc_soln,f)
+ 
+!!==================================================================
+!! Release memory used by petsc 
+!!==================================================================
+ call VecDestroy(petsc_b,jerr)
+ call VecDestroy(petsc_soln,jerr) 
+   
+ return
+end subroutine DoSolve 
+!!=========================================================
+!!=========================================================
+
+
+
+
+!===================================================    
+!===================================================
+integer function node_index(i,j,k)
+ use user_data,  only: nx,ny
+ implicit none
+ integer::i,j,k
+ !! 3d natural indexing of nodes/eqns
+ !! i,j,k zero based indices
+ node_index = k*(nx*ny) + j*(nx) + i 
+ return
+end function node_index
+!===================================================    
+!===================================================
+
+
+!!=====================================================
+!!=====================================================
+subroutine FillA_FD(myid,localrows,globalrows)
+ use operators,              only: L,A_PC,alpha,beta,h2_scale_factor
+ use intermediate_variables, only: scratch
+ use user_data
+ use etc,         only:docfile,           &
+                       field_id,          &
+                       numzplanes_below,  &
+                       numzplanes
+ implicit none
+
+#include "finclude/petsc.h"
+#include "finclude/petscvec.h"
+#include "finclude/petscmat.h"
+
+ PetscInt                    mx,my,mz
+ PetscInt                    xs,ys,zs
+ PetscInt                    xm,ym,zm
+ 
+ integer                     :: i,j,k,myid,localrows,globalrows
+ integer                     :: idim,jerr,one=1,MM,level,locnz
+ real(kind=8)                :: h1,h2,h3
+ real(kind=8)                :: dxds(3),ds(3),dx(3),dxdx
+ real(kind=8)                :: scale_factor(2)
+ real(kind=8)                :: diag_val,scaled_diag,x_s(3),x_ss(3)
+ integer,allocatable         :: idx(:)
+ real(kind=8),allocatable    :: vals(:)
+ character(len=80)           :: btype(3,2)
+  
+ !!===============================================
+ !!  size parameters
+ !!===============================================
+ 
+ !! zero based start indices for myid in 3d representation
+ xs=0
+ ys=0
+ zs=numzplanes_below(myid)
+ 
+ !! zero based end indices for myid in 3d representation
+ xm=xs + nx-1
+ ym=ys + ny-1
+ locnz=numzplanes(myid)
+ zm=zs + locnz - 1
+ 
+ !! global number of nodes in each direction
+ mx=nx
+ my=ny
+ mz=nz
+ 
+ level=0
+ if(myid==0) then
+  open(1,file=docfile,position='append')
+  write(1,*) ' '
+  write(1,*) '... Assembling A_FD at level ',level
+ endif
+  
+ do i=1,3
+  ds(i)=L(level)%Grid%SpaceDims(i)%ds
+ enddo
+       
+ !!===============================================
+ !!  scale factors
+ !!===============================================
+  
+ dxdx = h2_scale_factor
+ scale_factor(1) = alpha(field_id)*dxdx  !! for Grad^2 terms
+ scale_factor(2) = dxdx                  !! for neumann bdry terms (inverse)
+ scaled_diag = beta(field_id)*dxdx       !! for xtra helmholtz terms
+ 
+ 
+ !!===============================================
+ !!  BC labels
+ !!===============================================
+ do idim=1,3
+  do j=1,2
+   btype(idim,j) = BCtype(field_id,idim,j)
+  enddo
+ enddo
+ 
+ !!===============================================
+ !!  Fill the main portion of A_FD
+ !!===============================================
+ do k=zs,zm    !! loop through my assigned data using global indexing
+ 
+    if( k > 0 .and. k < mz-1 ) then
+     ds(3)= (L(0)%Grid%SpaceDims(3)%s(k+2) - L(0)%Grid%SpaceDims(3)%s(k))/(2.)
+    elseif( k==0 ) then
+     ds(3)= (L(0)%Grid%SpaceDims(3)%s(2) - L(0)%Grid%SpaceDims(3)%s(1))
+    elseif( k==mz-1 ) then
+     ds(3)= (L(0)%Grid%SpaceDims(3)%s(k+1) - L(0)%Grid%SpaceDims(3)%s(k))/(2.)
+    endif
+    
+    h3=ds(3)*L(0)%Grid%SpaceDims(3)%dxds(k+1)  !! ds*dx/ds
+    x_s(3)=L(0)%Grid%SpaceDims(3)%dxds(k+1)
+    x_ss(3)=L(0)%Grid%SpaceDims(3)%d2xds2(k+1)
+ 
+ 
+   do j=ys,ym
+     
+     if( j > 0 .and. j < my-1 ) then
+      ds(2)= (L(0)%Grid%SpaceDims(2)%s(j+2) - L(0)%Grid%SpaceDims(2)%s(j))/(2.)
+     elseif( j==0 ) then
+      ds(2)=1.d0
+     elseif( j==my-1 ) then
+      ds(2)= (L(0)%Grid%SpaceDims(2)%s(j+1) - L(0)%Grid%SpaceDims(2)%s(j))/(2.)
+     endif
+     
+      h2=ds(2)*L(0)%Grid%SpaceDims(2)%dxds(j+1)
+      x_s(2)=L(0)%Grid%SpaceDims(2)%dxds(j+1)
+      x_ss(2)=L(0)%Grid%SpaceDims(2)%d2xds2(j+1)
+      
+      
+     do i=xs,xm 
+       
+        if( i > 0 .and. i < mx-1 ) then
+         ds(1)= (L(0)%Grid%SpaceDims(1)%s(i+2) - L(0)%Grid%SpaceDims(1)%s(i))/(2.)
+        elseif( i==0 ) then
+         ds(1)= (L(0)%Grid%SpaceDims(1)%s(2) - L(0)%Grid%SpaceDims(1)%s(1))
+        elseif( i==mx-1 ) then
+         ds(1)= (L(0)%Grid%SpaceDims(1)%s(i+1) - L(0)%Grid%SpaceDims(1)%s(i))/(2.)
+        endif
+     
+        h1=ds(1)*L(0)%Grid%SpaceDims(1)%dxds(i+1)
+        x_s(1)=L(0)%Grid%SpaceDims(1)%dxds(i+1)
+        x_ss(1)=L(0)%Grid%SpaceDims(1)%d2xds2(i+1)  
+          
+        if(ny>1) then  
+           call SetMatrixElements  &
+             ( i,j,k,h1,h2,h3,      &
+               x_s,x_ss,btype,      &
+               scale_factor,        &
+               mx,my,mz,            &
+               scaled_diag )
+         elseif(ny==1) then               
+           call SetMatrixElements2D  &
+             ( i,j,k,h1,h3,          &
+               x_s,x_ss,btype,       &
+               scale_factor,         &
+               mx,mz,                &
+               scaled_diag )
+         endif
+               
+              
+                             
+       enddo
+     enddo
+ enddo
+ 
+ !!============================================================
+ !!  Clear cache & leave matrix ready to use
+ !!============================================================
+ call MatAssemblyBegin(A_PC,MAT_FINAL_ASSEMBLY,jerr)
+      if(jerr .ne.0 ) then 
+       write(0,*) 'Error calling MatAssemblyBegin '
+       stop
+      endif
+ call MatAssemblyEnd(A_PC,MAT_FINAL_ASSEMBLY,jerr)
+      if(jerr .ne.0 ) then 
+       write(0,*) 'Error calling MatAssemblyEnd '
+       stop
+      endif
+ 
+  if(myid==0) write(0,*) 'A_FD elements set and matrix object assembled assembled.'
+ return
+end
+!!=====================================================
+!!=====================================================
+
+
+
+!!=====================================================
+!!=====================================================
+subroutine SetMatrixElements(i,j,k,dx,dy,dz,x_s,x_ss,btype, &
+                             scale_factor,mx,my,mz,scaled_diag)
+ use operators,    only: A_PC
+ use user_data,    only: xdim_periodic,  &
+                         ydim_periodic,  &
+                         zdim_periodic,  &
+                         do_immersed_boundary
+ use etc,          only: field_id
+ use immersed_boundary
+ use mpi_params
+ 
+ implicit none
+ integer              :: i,j,k,nnz
+ integer              :: idim,mx,my,mz
+ integer              :: jerr,one=1
+ integer              :: row,col(12),ifor,ibac,jfor,jbac
+ real(kind=8)         :: dx,dy,dz,x_s(3),x_ss(3),hmin,v(12)
+ real(kind=8)         :: scale_factor(2),Gscale,Dscale
+ real(kind=8)         :: scaled_diag,zero=0.d0
+ character(len=80)    :: btype(3,2)
+    
+#include "finclude/petsc.h"
+#include "finclude/petscvec.h"
+#include "finclude/petscmat.h"
+    
+ integer, external   :: node_index
+  
+ Gscale = scale_factor(1)  !! scale for Grad^2 terms
+ Dscale = scale_factor(2)  !! scale for Dirichlet terms
+ 
+ !!  Should never be defining eqns for nodes outside these ranges
+  if( i<0 ) STOP 'i<0 in SetMatrixElements'
+  if( i>mx-1 ) STOP 'i>mx-1 in SetMatrixElements'
+  if( j<0 ) STOP 'j<0 in SetMatrixElements'
+  if( j>my-1 ) STOP 'j>my-1 in SetMatrixElements'
+  if( k<0 ) STOP 'k<0 in SetMatrixElements'
+  if( k>mz-1 ) STOP 'k>mz-1 in SetMatrixElements'
+ 
+  v(:)=0. ; row=0.; col=0.
+ 
+ 
+ !! 3d natural indexing of nodes/eqns
+  row = node_index(i,j,k) 
+    
+ !!==========================================================
+ !!       top and bottom faces, including edges
+ !!========================================================== 
+ 
+ if( k==0 .and. trim(btype(3,1))=='neumann' ) then
+  col(1) = node_index(i,j,k)
+  col(2) = node_index(i,j,k+1)
+  col(3) = node_index(i,j,k+2)
+  v(1) = -(3.d0/(2.*dz)) / x_s(3) 
+  v(2) =  (4.d0/(2.*dz)) / x_s(3)
+  v(3) = -(1.d0/(2.*dz)) / x_s(3)
+  nnz=3
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+ 
+ elseif( k==mz-1 .and. trim(btype(3,2))=='neumann' ) then
+  col(1) = node_index(i,j,k)
+  col(2) = node_index(i,j,k-1)
+  col(3) = node_index(i,j,k-2)
+  v(1) =  (3.d0/(2.*dz)) / x_s(3) 
+  v(2) = -(4.d0/(2.*dz)) / x_s(3)
+  v(3) =  (1.d0/(2.*dz)) / x_s(3)
+  nnz=3
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+  
+ elseif( k==0 .and. trim(btype(3,1))=='dirichlet' ) then
+  col(1) = node_index(i,j,k)
+  v(1) = 1.d0 
+  nnz=1
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+  
+ elseif( k==mz-1 .and. trim(btype(3,2))=='dirichlet' ) then
+  col(1) = node_index(i,j,k)
+  v(1) = 1.d0 
+  nnz=1
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+ endif
+ 
+ !!==========================================================
+ !!       interior points
+ !!==========================================================
+ 
+ if( i>0 .and. i<mx-1  .and. j>0 .and. j<my-1 .and. k>0 .and. k<mz-1 ) then
+  col(1) = node_index(i-1,j,k)
+  col(2) = node_index(i+1,j,k)
+  col(3) = node_index(i,j-1,k)
+  col(4) = node_index(i,j+1,k)
+  col(5) = node_index(i,j,k-1)
+  col(6) = node_index(i,j,k+1)
+  col(7) = node_index(i,j,k)
+  
+  idim=1
+  v(1) =  1./(dx**2) + (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dx)
+  v(2) =  1./(dx**2) - (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dx)
+  idim=2
+  v(3) =  1./(dy**2) + (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dy)
+  v(4) =  1./(dy**2) - (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dy)
+  idim=3
+  v(5) =  1./(dz**2) + (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dz)
+  v(6) =  1./(dz**2) - (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dz)
+  
+  v(7) = -2./(dx**2)  -2./(dy**2) -2./(dz**2)
+  
+  
+  nnz=7
+  v=Gscale*v
+  v(7)=v(7) + scaled_diag
+  
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+   goto 99
+    
+ endif
+ 
+ 
+ 
+ !!==========================================================
+ !!      nonperiodic  left & right faces, including edges
+ !!========================================================== 
+ 
+ if( i==0 .and. trim(btype(1,1))=='neumann' ) then
+  col(1) = node_index(i,j,k)
+  col(2) = node_index(i+1,j,k)
+  col(3) = node_index(i+2,j,k)
+  v(1) = -3.d0/(2.*dx) 
+  v(2) =  4.d0/(2.*dx)
+  v(3) = -1.d0/(2.*dx)
+  nnz=3
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+ 
+ elseif( i==mx-1 .and. trim(btype(1,2))=='neumann' ) then
+  col(1) = node_index(i,j,k)
+  col(2) = node_index(i-1,j,k)
+  col(3) = node_index(i-2,j,k)
+  v(1) =  3.d0/(2.*dx) 
+  v(2) = -4.d0/(2.*dx)
+  v(3) =  1.d0/(2.*dx)
+  nnz=3
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+  
+ elseif( i==0 .and. trim(btype(1,1))=='dirichlet' ) then
+  col(1) = node_index(i,j,k)
+  v(1) = 1.d0 
+  nnz=1
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+  
+ elseif( i==mx-1 .and. trim(btype(1,2))=='dirichlet' ) then
+  col(1) = node_index(i,j,k)
+  v(1) = 1.d0 
+  nnz=1
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+ endif
+ 
+ 
+ 
+ !!==========================================================
+ !!      nonperiodic  front & back faces, including edges
+ !!========================================================== 
+ 
+ 
+ if( j==0 .and. trim(btype(2,1))=='neumann' ) then
+  col(1) = node_index(i,j,k)
+  col(2) = node_index(i,j+1,k)
+  col(3) = node_index(i,j+2,k)
+  v(1) = -3.d0/(2.*dy) 
+  v(2) =  4.d0/(2.*dy)
+  v(3) = -1.d0/(2.*dy)
+  nnz=3
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+ 
+ elseif( j==my-1 .and. trim(btype(2,2))=='neumann' ) then
+  col(1) = node_index(i,j,k)
+  col(2) = node_index(i,j-1,k)
+  col(3) = node_index(i,j-2,k)
+  v(1) =  3.d0/(2.*dy) 
+  v(2) = -4.d0/(2.*dy)
+  v(3) =  1.d0/(2.*dy)
+  nnz=3
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+  
+ elseif( j==0 .and. trim(btype(2,1))=='dirichlet' ) then
+  col(1) = node_index(i,j,k)
+  v(1) = 1.d0 
+  nnz=1
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+  
+ elseif( j==my-1 .and. trim(btype(2,2))=='dirichlet' ) then
+  col(1) = node_index(i,j,k)
+  v(1) = 1.d0 
+  nnz=1
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+ endif
+ 
+ 
+ !!==========================================================
+ !!      x dir periodic, y nonperiodic
+ !!========================================================== 
+ 
+ if( i==0 .and. xdim_periodic .and.      &
+     trim(btype(2,1))=='neumann' .or.    &
+     trim(btype(2,1))=='dirichlet') then
+     
+  col(1) = node_index(mx-1,j,k)
+  col(2) = node_index(i+1,j,k)
+  col(3) = node_index(i,j-1,k)
+  col(4) = node_index(i,j+1,k)
+  col(5) = node_index(i,j,k-1)
+  col(6) = node_index(i,j,k+1)
+  col(7) = node_index(i,j,k)
+  
+  idim=1
+  v(1) =  1./(dx**2) + (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dx)
+  v(2) =  1./(dx**2) - (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dx)
+  idim=2
+  v(3) =  1./(dy**2) + (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dy)
+  v(4) =  1./(dy**2) - (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dy)
+  idim=3
+  v(5) =  1./(dz**2) + (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dz)
+  v(6) =  1./(dz**2) - (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dz)
+  
+  v(7) = -2./(dx**2)  -2./(dy**2) -2./(dz**2)
+  
+  nnz=7
+  v=Gscale*v
+  v(7)=v(7) + scaled_diag
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+  
+ elseif( i==mx-1 .and. xdim_periodic .and.      &
+     trim(btype(2,2))=='neumann' .or.    &
+     trim(btype(2,2))=='dirichlet') then
+     
+  col(1) = node_index(i-1,j,k)
+  col(2) = node_index(0,j,k)
+  col(3) = node_index(i,j-1,k)
+  col(4) = node_index(i,j+1,k)
+  col(5) = node_index(i,j,k-1)
+  col(6) = node_index(i,j,k+1)
+  col(7) = node_index(i,j,k)
+  
+  idim=1
+  v(1) =  1./(dx**2) + (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dx)
+  v(2) =  1./(dx**2) - (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dx)
+  idim=2
+  v(3) =  1./(dy**2) + (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dy)
+  v(4) =  1./(dy**2) - (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dy)
+  idim=3
+  v(5) =  1./(dz**2) + (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dz)
+  v(6) =  1./(dz**2) - (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dz)
+  
+  v(7) = -2./(dx**2)  -2./(dy**2) -2./(dz**2)
+  
+  nnz=7
+  v=Gscale*v
+  v(7)=v(7) + scaled_diag
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+  
+ endif
+ 
+ 
+ !!==========================================================
+ !!      y dir periodic, x nonperiodic
+ !!========================================================== 
+ 
+ if( j==0 .and. ydim_periodic .and.      &
+     trim(btype(1,1))=='neumann' .or.    &
+     trim(btype(1,1))=='dirichlet') then
+     
+  col(1) = node_index(i-1,j,k)
+  col(2) = node_index(i+1,j,k)
+  col(3) = node_index(i,my-1,k)
+  col(4) = node_index(i,j+1,k)
+  col(5) = node_index(i,j,k-1)
+  col(6) = node_index(i,j,k+1)
+  col(7) = node_index(i,j,k)
+  
+  idim=1
+  v(1) =  1./(dx**2) + (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dx)
+  v(2) =  1./(dx**2) - (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dx)
+  idim=2
+  v(3) =  1./(dy**2) + (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dy)
+  v(4) =  1./(dy**2) - (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dy)
+  idim=3
+  v(5) =  1./(dz**2) + (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dz)
+  v(6) =  1./(dz**2) - (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dz)
+  
+  v(7) = -2./(dx**2)  -2./(dy**2) -2./(dz**2)
+  
+  nnz=7
+  v=Gscale*v
+  v(7)=v(7) + scaled_diag
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+  
+ elseif( j==my-1 .and. ydim_periodic .and.      &
+     trim(btype(1,2))=='neumann' .or.    &
+     trim(btype(1,2))=='dirichlet') then
+     
+  col(1) = node_index(i-1,j,k)
+  col(2) = node_index(i+1,j,k)
+  col(3) = node_index(i,j-1,k)
+  col(4) = node_index(i,0,k)
+  col(5) = node_index(i,j,k-1)
+  col(6) = node_index(i,j,k+1)
+  col(7) = node_index(i,j,k)
+  
+  idim=1
+  v(1) =  1./(dx**2) + (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dx)
+  v(2) =  1./(dx**2) - (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dx)
+  idim=2
+  v(3) =  1./(dy**2) + (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dy)
+  v(4) =  1./(dy**2) - (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dy)
+  idim=3
+  v(5) =  1./(dz**2) + (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dz)
+  v(6) =  1./(dz**2) - (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dz)
+  
+  v(7) = -2./(dx**2)  -2./(dy**2) -2./(dz**2)
+  
+  nnz=7
+  v=Gscale*v
+  v(7)=v(7) + scaled_diag
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+  
+ endif
+ 
+ 
+ !!==========================================================
+ !!      periodic in both x and y directions
+ !!==========================================================
+ 
+ if(  xdim_periodic .and.  ydim_periodic ) then
+  !! ok
+ else
+  write(0,*) 'logic descending to xy periodic, but problem detected for field: ',field_id
+  write(0,*) 'x bdry types: ',trim(btype(1,1)),'  ',trim(btype(1,2))
+  write(0,*) 'y bdry types: ',trim(btype(2,1)),'  ',trim(btype(2,2))
+  stop 'logic problem filling A_FD'
+ endif
+ 
+ if( i .ne. 0 .and. i .ne. mx-1 .and. j .ne. 0 .and. j .ne. my-1 ) then
+  write(0,*) 'logic problem filling A_FD',i,j,k
+  stop
+ endif
+ ifor=i+1
+ ibac=i-1
+ jfor=j+1
+ jbac=j-1
+ 
+ if(i==0) ibac=mx-1
+ if(i==mx-1) ifor=0
+ if(j==0) jbac=my-1
+ if(j==my-1) jfor=0
+ 
+  col(1) = node_index(ibac,j,k)
+  col(2) = node_index(ifor,j,k)
+  col(3) = node_index(i,jbac,k)
+  col(4) = node_index(i,jfor,k)
+  col(5) = node_index(i,j,k-1)
+  col(6) = node_index(i,j,k+1)
+  col(7) = node_index(i,j,k)
+  
+  idim=1
+  v(1) =  1./(dx**2) + (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dx)
+  v(2) =  1./(dx**2) - (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dx)
+  idim=2
+  v(3) =  1./(dy**2) + (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dy)
+  v(4) =  1./(dy**2) - (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dy)
+  idim=3
+  v(5) =  1./(dz**2) + (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dz)
+  v(6) =  1./(dz**2) - (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dz)
+       
+  v(7) = -2./(dx**2)  -2./(dy**2) -2./(dz**2)
+  
+  nnz=7
+  v=Gscale*v
+  v(7)=v(7) + scaled_diag
+  
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+      
+
+99 return
+
+end subroutine SetMatrixElements
+
+
+
+
+
+
+
+!!=====================================================
+!!=====================================================
+subroutine SetMatrixElements2D(i,j,k,dx,dz,x_s,x_ss,btype, &
+                             scale_factor,mx,mz,scaled_diag)
+ use operators,    only: A_PC
+ use user_data,    only: xdim_periodic,  &
+                         zdim_periodic,  &
+                         do_immersed_boundary
+ use etc,          only: field_id
+ use immersed_boundary
+ use mpi_params
+ 
+ implicit none
+ integer              :: i,j,k,nnz
+ integer              :: idim,mx,mz
+ integer              :: jerr,one=1
+ integer              :: row,col(12),ifor,ibac,jfor,jbac
+ real(kind=8)         :: dx,dz,x_s(3),x_ss(3),hmin,v(12)
+ real(kind=8)         :: scale_factor(2),Gscale,Dscale
+ real(kind=8)         :: scaled_diag,zero=0.d0
+ character(len=80)    :: btype(3,2)
+    
+#include "finclude/petsc.h"
+#include "finclude/petscvec.h"
+#include "finclude/petscmat.h"
+    
+ integer, external   :: node_index
+  
+ 
+ Gscale = scale_factor(1)  !! scale for Grad^2 terms
+ Dscale = scale_factor(2)  !! scale for Dirichlet terms
+ 
+ !!  Should never be defining eqns for nodes outside these ranges
+  if( i<0 ) STOP 'i<0 in SetMatrixElements'
+  if( i>mx-1 ) STOP 'i>mx-1 in SetMatrixElements'
+  if( k<0 ) STOP 'k<0 in SetMatrixElements'
+  if( k>mz-1 ) STOP 'k>mz-1 in SetMatrixElements'
+ 
+  v(:)=0. ; row=0.; col=0.
+ 
+ 
+ !! 3d natural indexing of nodes/eqns
+  row = node_index(i,j,k) 
+    
+ !!==========================================================
+ !!       top and bottom faces, including edges
+ !!========================================================== 
+ 
+ 
+ if( k==0 .and. trim(btype(3,1))=='neumann' ) then
+  col(1) = node_index(i,j,k)
+  col(2) = node_index(i,j,k+1)
+  col(3) = node_index(i,j,k+2)
+  v(1) = -(3.d0/(2.*dz)) / x_s(3) 
+  v(2) =  (4.d0/(2.*dz)) / x_s(3)
+  v(3) = -(1.d0/(2.*dz)) / x_s(3)
+  nnz=3
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+ 
+ elseif( k==mz-1 .and. trim(btype(3,2))=='neumann' ) then
+  col(1) = node_index(i,j,k)
+  col(2) = node_index(i,j,k-1)
+  col(3) = node_index(i,j,k-2)
+  v(1) =  (3.d0/(2.*dz)) / x_s(3) 
+  v(2) = -(4.d0/(2.*dz)) / x_s(3)
+  v(3) =  (1.d0/(2.*dz)) / x_s(3)
+  nnz=3
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+  
+ elseif( k==0 .and. trim(btype(3,1))=='dirichlet' ) then
+  col(1) = node_index(i,j,k)
+  v(1) = 1.d0 
+  nnz=1
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+  
+ elseif( k==mz-1 .and. trim(btype(3,2))=='dirichlet' ) then
+  col(1) = node_index(i,j,k)
+  v(1) = 1.d0 
+  nnz=1
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+ endif
+ 
+ !!==========================================================
+ !!       interior points
+ !!==========================================================
+ 
+ if( i>0 .and. i<mx-1  .and. k>0 .and. k<mz-1 ) then
+  col(1) = node_index(i-1,j,k)
+  col(2) = node_index(i+1,j,k)
+  col(3) = node_index(i,j,k-1)
+  col(4) = node_index(i,j,k+1)
+  col(5) = node_index(i,j,k)
+  
+  idim=1
+  v(1) =  1./(dx**2) + (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dx)
+  v(2) =  1./(dx**2) - (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dx)
+  idim=3
+  v(3) =  1./(dz**2) + (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dz)
+  v(4) =  1./(dz**2) - (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dz)
+  
+  v(5) = -2./(dx**2) -2./(dz**2)
+  
+  
+  nnz=5
+  v=Gscale*v
+  v(nnz)=v(nnz) + scaled_diag
+  
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+   goto 99
+    
+ endif
+ 
+ 
+ 
+ !!==========================================================
+ !!      nonperiodic (x) left & right faces, including edges
+ !!========================================================== 
+ 
+ if( i==0 .and. trim(btype(1,1))=='neumann' ) then
+  col(1) = node_index(i,j,k)
+  col(2) = node_index(i+1,j,k)
+  col(3) = node_index(i+2,j,k)
+  v(1) = -3.d0/(2.*dx) 
+  v(2) =  4.d0/(2.*dx)
+  v(3) = -1.d0/(2.*dx)
+  nnz=3
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+ 
+ elseif( i==mx-1 .and. trim(btype(1,2))=='neumann' ) then
+  col(1) = node_index(i,j,k)
+  col(2) = node_index(i-1,j,k)
+  col(3) = node_index(i-2,j,k)
+  v(1) =  3.d0/(2.*dx) 
+  v(2) = -4.d0/(2.*dx)
+  v(3) =  1.d0/(2.*dx)
+  nnz=3
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+  
+ elseif( i==0 .and. trim(btype(1,1))=='dirichlet' ) then
+  col(1) = node_index(i,j,k)
+  v(1) = 1.d0 
+  nnz=1
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+  
+ elseif( i==mx-1 .and. trim(btype(1,2))=='dirichlet' ) then
+  col(1) = node_index(i,j,k)
+  v(1) = 1.d0 
+  nnz=1
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+ endif
+ 
+  
+ !!==========================================================
+ !!      x dir periodic
+ !!========================================================== 
+ 
+ if( i==0 .and. xdim_periodic ) then
+     
+  col(1) = node_index(mx-1,j,k)
+  col(2) = node_index(i+1,j,k)
+  col(3) = node_index(i,j,k-1)
+  col(4) = node_index(i,j,k+1)
+  col(5) = node_index(i,j,k)
+  
+  idim=1
+  v(1) =  1./(dx**2) + (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dx)
+  v(2) =  1./(dx**2) - (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dx)
+  idim=3
+  v(3) =  1./(dz**2) + (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dz)
+  v(4) =  1./(dz**2) - (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dz)
+  
+  v(5) = -2./(dx**2) -2./(dz**2)
+  
+  nnz=5
+  v=Gscale*v
+  v(nnz)=v(nnz) + scaled_diag
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+  
+ elseif( i==mx-1 .and. xdim_periodic ) then
+     
+  col(1) = node_index(i-1,j,k)
+  col(2) = node_index(0,j,k)
+  col(3) = node_index(i,j,k-1)
+  col(4) = node_index(i,j,k+1)
+  col(5) = node_index(i,j,k)
+  
+  idim=1
+  v(1) =  1./(dx**2) + (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dx)
+  v(2) =  1./(dx**2) - (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dx)
+  idim=3
+  v(3) =  1./(dz**2) + (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dz)
+  v(4) =  1./(dz**2) - (x_ss(idim)/x_s(idim)**2)*1.d0/(2.*dz)
+  
+  v(5) = -2./(dx**2)-2./(dz**2)
+  
+  nnz=5
+  v=Gscale*v
+  v(nnz)=v(nnz) + scaled_diag
+          
+  call MatSetValues(A_PC,one,row,nnz,col,v,INSERT_VALUES,jerr)
+    if( jerr .ne.0 ) then
+     write(0,*) 'Error calling MatSetValues ',i,j,k
+     write(0,*) 'myid ',myid
+     stop
+    endif
+  goto 99
+  
+ endif
+       
+
+99 return
+
+end subroutine SetMatrixElements2D
+
+
+!!=====================================================
+!!=====================================================
+subroutine GetLabel(id,idim,endid,label)
+ use operators
+ implicit none
+ integer            :: id,idim,endid
+ character(len=80)  :: label
+ if(id==6) then
+   label=PhiBdryOps(idim,endid)%label
+  elseif(id==1) then
+   label=u_BdryOps(idim,endid)%label
+  elseif(id==2) then
+   label=v_BdryOps(idim,endid)%label
+  elseif(id==3) then
+   label=w_BdryOps(idim,endid)%label
+  elseif(id==4) then
+   label=s1_BdryOps(idim,endid)%label
+  elseif(id==5) then
+   label=s2_BdryOps(idim,endid)%label
+  endif
+end subroutine GetLabel
+
+!!=====================================================
+!!=====================================================
+subroutine GetSval(id,idim,endid,i,j,S)
+ use operators
+ implicit none
+ integer            :: id,idim,endid,i,j
+ real(kind=8)       :: S
+ if(id==6) then
+   S=PhiBdryOps(idim,endid)%BoundaryData(i,j)
+  elseif(id==1) then
+   S=u_BdryOps(idim,endid)%BoundaryData(i,j)
+  elseif(id==2) then
+   S=v_BdryOps(idim,endid)%BoundaryData(i,j)
+  elseif(id==3) then
+   S=w_BdryOps(idim,endid)%BoundaryData(i,j)
+  elseif(id==4) then
+   S=s1_BdryOps(idim,endid)%BoundaryData(i,j)
+  elseif(id==5) then
+   S=s2_BdryOps(idim,endid)%BoundaryData(i,j)
+  endif
+end subroutine GetSval
+
+
+
+!!=====================================================
+!!=====================================================
+subroutine SetGuess(petsc_vec)
+ use dependent_variables,    only: velocity,scalars
+ use intermediate_variables, only: Phi,rhs_b  
+ use etc,                    only: field_id
+ use InterfacePetsc
+ 
+ implicit none
+#include "finclude/petsc.h"
+#include "finclude/petscvec.h"  
+ Vec   petsc_vec
+    
+ if( field_id < 4 )    &
+     call ScalarVariable2PetscVec(velocity(field_id),petsc_vec)
+ if( field_id == 4 )   &
+     call ScalarVariable2PetscVec(scalars(1),petsc_vec)
+ if( field_id == 5 )   &
+     call ScalarVariable2PetscVec(scalars(2),petsc_vec)
+ if( field_id == 6 )   &
+     call ScalarVariable2PetscVec(Phi(0),petsc_vec)
+    
+end subroutine SetGuess
+!!=====================================================
+!!=====================================================
+
+
+
+
+
+
+!!============================================================
+!!============================================================
+subroutine FillA_WS(myid,localrows,globalrows)
+!!   fill explicit A for preconditioning in wavenumber space
+!!============================================================
+ use operators,              only: L,A_PC,alpha,beta
+ use dependent_variables,    only: velocity
+ use intermediate_variables, only: scratch
+ use user_data
+ use etc,                    only:docfile,           &
+                                  field_id,          &
+                                  numzplanes_below,  &
+                                  numzplanes
+ implicit none
+
+#include "finclude/petsc.h"
+#include "finclude/petscvec.h"
+#include "finclude/petscmat.h"
+
+ PetscInt                    mx,my,mz
+ PetscInt                    xs,ys,zs
+ PetscInt                    xm,ym,zm
+ 
+ integer                     :: i,j,k,myid
+ integer                     :: localrows,globalrows
+ integer                     :: level,locnz
+ integer                     :: row,col
+ integer                     :: jerr,one=1,nnz,id
+ real(kind=8)                :: dsdx,dsdy,dsdz,mean_value
+ real(kind=8)                :: xx,kx,ky,kz
+ integer, external           :: node_index
+  
+ id=field_id
+ !!===============================================
+ !!  size parameters
+ !!=============================================== 
+ !! zero based start indices for myid in 3d representation
+ xs=0
+ ys=0
+ zs=numzplanes_below(myid)
+ 
+ !! zero based end indices for myid in 3d representation
+ xm=xs + nx-1
+ ym=ys + ny-1
+ locnz=numzplanes(myid)
+ zm=zs + locnz - 1
+ 
+ !! global number of nodes in each direction
+ mx=nx
+ my=ny
+ mz=nz
+ 
+ level=0
+ if(myid==0) then
+  open(1,file=docfile,position='append')
+  write(1,*) ' '
+  write(1,*) '... Assembling A_PC in wavenumber space at level ',level
+ endif
+  
+       
+ !!===============================================
+ !!  scale factors for x<<==>>s, use mean values
+ !!===============================================
+ mean_value=SUM(L(0)%Grid%SpaceDims(1)%dxds(:))/nx
+ dsdx=1.d0/mean_value
+ 
+ mean_value=SUM(L(0)%Grid%SpaceDims(2)%dxds(:))/ny
+ dsdy=1.d0/mean_value
+ 
+ mean_value=SUM(L(0)%Grid%SpaceDims(3)%dxds(:))/nz
+ dsdz=1.d0/mean_value
+ 
+ 
+ !!===============================================
+ !!  Fill the matrix A_PC: the approximation to
+ !!  L = alpha*grad^2 + beta
+ !!  obtained by assuming the s<-->x transformations
+ !!  are constant, using mean values.
+ !!  A_PC is a simple diagonal matrix.
+ !!===============================================
+ do k=zs,zm    !! loop through my assigned data using global indexing
+ 
+    kz = velocity(1)%Derivs(3)%kx(k+1) 
+ 
+   do j=ys,ym
+     
+     ky = velocity(1)%Derivs(2)%kx(j+1)
+            
+     do i=xs,xm 
+       
+        !! 3d natural indexing of nodes/eqns
+        row = node_index(i,j,k)
+        col = row
+        nnz = 1
+  
+        kx = velocity(1)%Derivs(1)%kx(i+1) 
+        
+        xx = -alpha(id)*( (dsdx*kx)**2 + (dsdy*ky)**2 + (dsdz*kz)**2 ) &
+             + beta(id)
+             
+        call MatSetValues(A_PC,one,row,nnz,col,xx,INSERT_VALUES,jerr)
+        if( jerr .ne.0 ) then
+         write(0,*) 'Error calling MatSetValues wavenumber space ',i,j,k
+         write(0,*) 'myid ',myid
+         stop
+        endif
+                             
+     enddo
+   enddo
+ enddo
+ 
+ !!============================================================
+ !!  Clear cache & leave matrix ready to use
+ !!============================================================
+ call MatAssemblyBegin(A_PC,MAT_FINAL_ASSEMBLY,jerr)
+      if(jerr .ne.0 ) then 
+       write(0,*) 'Error calling MatAssemblyBegin '
+       stop
+      endif
+ call MatAssemblyEnd(A_PC,MAT_FINAL_ASSEMBLY,jerr)
+      if(jerr .ne.0 ) then 
+       write(0,*) 'Error calling MatAssemblyEnd '
+       stop
+      endif
+ 
+  if(myid==0) &
+  write(0,*) 'A_PC elements set and matrix object assembled assembled wavenumber space'
+ return
+end
+!!=====================================================
+!!=====================================================
Index: /trunk/00FlowSolve_KW/src/read_userdata.f90
===================================================================
--- /trunk/00FlowSolve_KW/src/read_userdata.f90	(revision 6)
+++ /trunk/00FlowSolve_KW/src/read_userdata.f90	(revision 6)
@@ -0,0 +1,170 @@
+subroutine read_userdata
+ use mpi_params
+ use user_data
+ use io_params
+ use particles
+ use etc
+
+ implicit none  
+ include 'mpif.h'
+ integer           :: processor_doing_reads
+ integer           :: id
+ integer           :: endpt
+ character(len=80) :: file1,file2,file3,file4,file5,runlabel2
+
+ file1='input/problem_params'
+ file2='input/num_filesets'
+ file3='input/io_params'
+ file4='input/BoundaryConditions'
+ file5='input/DifferentiationMethods'
+    
+do processor_doing_reads = 0, numprocs-1
+
+ if( processor_doing_reads == myid ) then  !! my turn
+  
+  open(1,file=file1,position='rewind') 
+  read(1,*) runlabel
+  read(1,*) nx
+  read(1,*) ny
+  read(1,*) nz
+  read(1,*) nparticles
+  read(1,*) dt
+  read(1,*) t_start
+  read(1,*) t_end
+  read(1,*) Lx
+  read(1,*) Ly
+  read(1,*) Lz
+  read(1,*) scalar_kind(1)
+  read(1,*) scalar_kind(2)
+  read(1,*) do_forcing
+  read(1,*) do_immersed_boundary
+  read(1,*) g
+  read(1,*) f
+  read(1,*) beta_dimensional
+  read(1,*) rho_0
+  read(1,*) nu
+  read(1,*) kappa_1
+  read(1,*) kappa_2
+  read(1,*) dgrad
+  read(1,*) s1_scale
+  read(1,*) s2_scale
+  read(1,*) u0
+ close(1)
+ 
+ !! these are hardwired here for now
+ DNS=.TRUE.
+ LES=.FALSE. !! should be read in
+ if( LES ) DNS=.FALSE.
+ 
+ if(myid==0) write(0,*) '... ',trim(file1),' read'
+
+ open(1,file=file2,position='rewind')
+  read(1,*) num_netcdf_files
+ close(1)
+ if(myid==0) write(0,*) '... ',trim(file2),' read'
+ 
+ open(1,file=file3,position='rewind')
+ do i=1,num_netcdf_files
+  read(1,*) filename_root(i)
+  read(1,*) mode(i)
+  read(1,*) nsteps(i)
+  read(1,*) ilocs(1,i)
+  read(1,*) ilocs(2,i)
+  read(1,*) ilocs(3,i)
+  read(1,*) jlocs(1,i)
+  read(1,*) jlocs(2,i)
+  read(1,*) jlocs(3,i)
+  read(1,*) klocs(1,i)
+  read(1,*) klocs(2,i)
+  read(1,*) klocs(3,i)
+  do j=1,5 !! u,v,w,s1,s2
+   read(1,*) variable_key(j,i)
+  enddo
+  if(myid==0) write(0,*) '... fileset ',i,' read'
+  
+  !! set these to 1 during testing
+  variable_key(6,i)=1   ! divustar
+  variable_key(7,i)=1   ! phi
+  
+  !! not pd though
+  variable_key(8,i)=0   ! pd
+  
+  !! quick sanity check ....
+  if(ilocs(2,i) > nx ) stop 'io_params data > nx'
+  if(jlocs(2,i) > ny ) stop 'io_params data > ny'
+  if(klocs(2,i) > nz ) stop 'io_params data > nz'
+ enddo
+ 
+ if(myid==0) write(0,*) '... ',trim(file3),' read'
+ close(1)
+
+ open(1,file=file4,position='rewind')
+ do id=1,5
+  do idim=1,3
+   do endpt=1,2
+    read(1,*) BCtype(id,idim,endpt)
+   enddo
+  enddo
+ enddo
+ if(myid==0) write(0,*) '... ',trim(file4),' read'
+ close(1)
+ 
+ open(1,file=file5,position='rewind')
+  read(1,*) u_deriv_types(1)
+  read(1,*) u_deriv_types(2)
+  read(1,*) u_deriv_types(3)
+
+  read(1,*) v_deriv_types(1)
+  read(1,*) v_deriv_types(2)
+  read(1,*) v_deriv_types(3)
+
+  read(1,*) w_deriv_types(1)
+  read(1,*) w_deriv_types(2)
+  read(1,*) w_deriv_types(3)
+
+  read(1,*) s1_deriv_types(1)
+  read(1,*) s1_deriv_types(2)
+  read(1,*) s1_deriv_types(3)
+
+  read(1,*) s2_deriv_types(1)
+  read(1,*) s2_deriv_types(2)
+  read(1,*) s2_deriv_types(3)
+
+  read(1,*) phi_deriv_types(1)
+  read(1,*) phi_deriv_types(2)
+  read(1,*) phi_deriv_types(3)
+  if(myid==0) write(0,*) '... ',trim(file5),' read'
+ close(1)
+ endif
+ 
+ idim=1
+ if( BCtype(1,idim,1) == 'periodic' ) then
+  BCtype(:,idim,:)='periodic'
+  xdim_periodic=.TRUE.
+ else
+  xdim_periodic=.FALSE.
+ endif
+ 
+ idim=2
+ if( BCtype(1,idim,1) == 'periodic' ) then
+  BCtype(:,idim,:)='periodic'
+  ydim_periodic=.TRUE.
+ else
+  ydim_periodic=.FALSE.
+ endif
+ 
+ idim=3
+ if( BCtype(1,idim,1) == 'periodic' ) then
+  BCtype(:,idim,:)='periodic'
+  zdim_periodic=.TRUE.
+ else
+  zdim_periodic=.FALSE.
+ endif
+
+ !! not my turn, just wait
+ call mpi_barrier(comm,ierr)
+ 
+enddo !! on to next processor
+
+
+end subroutine read_userdata
Index: /trunk/00FlowSolve_KW/src/test_driver.f90
===================================================================
--- /trunk/00FlowSolve_KW/src/test_driver.f90	(revision 6)
+++ /trunk/00FlowSolve_KW/src/test_driver.f90	(revision 6)
@@ -0,0 +1,126 @@
+program test_driver
+!implicit none
+integer             :: ierr,myid,numprocs,ncid
+integer(kind=8)     :: forward_plan ,inverse_plan 
+integer             :: rank_trans,howmany_rank
+integer             :: n,nb2,n_trans,n_loop
+integer             :: fft_kind,myflag
+integer             :: is_trans,is_loop
+integer             :: os_trans,os_loop
+
+real(kind=8), allocatable  :: in(:,:,:),out(:,:,:)
+character(len=80)          :: optionfile
+
+include 'fftw3.f'     
+include 'netcdf.inc'
+#include "finclude/petsc.h"  
+#include "finclude/petscvec.h"
+
+Vec   petsc_vec
+
+write(0,*) ' ................   =========================================== '
+write(0,*) ' ................   Saludos de OOFlowSolve installacion prueba. '
+write(0,*) ' ................   =========================================== '
+
+
+!! (1) MPI
+write(0,*) ' ................   '
+write(0,*) ' ................   Prueba de MPI .....'
+write(0,*) ' ................   '
+call mpi_init(ierr)
+call mpi_comm_rank(MPI_COMM_WORLD,myid,ierr)
+call mpi_comm_size(MPI_COMM_WORLD,numprocs,ierr)
+
+!read user parameter file or use test values
+if( myid .eq. 0 .and. ierr==MPI_SUCCESS ) then
+write(0,*) ' ................        Soy MPI y vivo! '
+write(0,*) ' ................        Tengo ',numprocs,' processero(s).'
+else
+write(0,*) ' ................        Houston, tenemos una problema con MPI... '
+write(0,*) ' ................         ierr   '    ,ierr
+write(0,*) ' ................         myid   '    ,myid
+write(0,*) ' ................         numprocs   ',numprocs
+endif   
+
+!! (2) NETCDF
+write(0,*) ' ................   '
+write(0,*) ' ................   Prueba de NETCDF .....'
+write(0,*) ' ................   '
+ierr=NF_CREATE('install_test.nc',NF_CLOBBER,ncid)
+if(ierr.eq.NF_NOERR) then
+ write(0,*) ' ................        creating a netcdf file: install_test.nc'
+else
+ write(0,*) ' ................        problem creating a netcdf file: ',ierr
+endif
+
+ierr=NF_ENDDEF(ncid)
+if(ierr.eq.NF_NOERR) then
+ write(0,*) ' ................        exit define mode ok'
+else
+ write(0,*) ' ................        error while leaving define mode'
+endif
+
+ierr=NF_CLOSE(ncid)
+if(ierr.ne.NF_NOERR) &
+write(0,*) ' ................        problems closing a netcdf file'
+
+!! (3) FFTW3
+write(0,*) ' ................   '
+write(0,*) ' ................   Prueba de FFTW3 .....'
+write(0,*) ' ................   '
+
+rank_trans=1          !! Transforms work on 1 dimension at a time.
+howmany_rank=1        !! Loop over the other 2 dimensions treated as 1d in memory
+n = 32                !! Data size in transform direction, measured in real words.
+nb2 = n/2
+n_trans=n             !! length of transform in real words     
+is_trans=1            !! stride of 1d transform --> in x
+os_trans=is_trans
+!! describe the loops over dims 2,3
+n_loop=n*n            !! 
+is_loop=n             !! stride between transforms
+os_loop=is_loop
+myflag=FFTW_PATIENT
+fft_kind=FFTW_R2HC
+allocate( in(n,n,n),out(n,n,n) )
+
+call dfftw_plan_guru_r2r(forward_plan,         &
+rank_trans,n_trans,is_trans,os_trans,          &
+howmany_rank,n_loop,is_loop,os_loop,           &
+in,out,fft_kind,myflag)
+write(0,*) ' ................        creating dfftw_plan_guru_r2r ok ..'
+!execute an fftw3 plan
+in(:,:,:) = 0.0
+out(:,:,:)= 0.0
+call dfftw_execute_r2r(forward_plan,in,out)
+write(0,*) ' ................         executing dfftw_execute_r2r ok ..'
+
+
+!! (4) PETSC
+write(0,*) ' ................   '
+write(0,*) ' ................   Initializacion de PETSC .....'
+write(0,*) ' ................   '
+optionfile='PetscOptions'
+call PetscInitialize(optionfile,ierr)
+if(ierr==0) write(0,*) ' ................        opened PETSC options file '
+if(ierr==0) write(0,*) ' ................        PetscInitialize ok .....'
+
+
+!! (5) Read User Specified Parameters
+write(0,*) ' ................   '
+write(0,*) ' ................   Leer datos del usuario .....'
+write(0,*) ' ................   '
+call read_userdata
+
+!! Shut down MPI
+call mpi_finalize(ierr)
+write(0,*) ' ................   '
+write(0,*) ' ................   Shutting down MPI ..... '
+write(0,*) ' ................        MPI esta muerte ahora. ',ierr
+write(0,*) ' ................   '
+
+deallocate(in,out)
+write(0,*) ' ................   =========================================== '
+write(0,*) ' ................   Adios '
+write(0,*) ' ................   =========================================== '
+end program test_driver
Index: /trunk/00FlowSolve_KW/src/utils/MPI_Time.f90
===================================================================
--- /trunk/00FlowSolve_KW/src/utils/MPI_Time.f90	(revision 6)
+++ /trunk/00FlowSolve_KW/src/utils/MPI_Time.f90	(revision 6)
@@ -0,0 +1,246 @@
+!************************************************************************
+!                                                                       !
+!   Module : MPI_Times           (Version : 3.4)                        !
+!                                                                       !
+!   Goal   : Measure and print on stdout CPU and Elapsed user times     !
+!            and the ratio CPU/Elapsed of MPI programs.                 !
+!                                                                       !
+!   Usage  : Insert a "USE MPI_TIMES" instruction inside each MPI       !
+!            Fortran program unit to instrument, then make calls to     !
+!            the MPI_TIME subroutine as shown in the example below :    !
+!                                                                       !
+!           PROGRAM foo                                                 !
+!             USE MPI_TIMES                                             !
+!             ...                                                       !
+!             CALL MPI_INIT(ierr)                                       !
+!                                                                       !
+!             !... Set elapsed and CPU user times                       !
+!             CALL MPI_TIME(0)                                          !
+!             ...                                                       !
+!             ... Instruction block to instrument ...                   !
+!             ...                                                       !
+!             !... Measure and print elapsed and CPU user times         !
+!             CALL MPI_TIME(1)                                          !
+!                                                                       !
+!             CALL MPI_FINALIZE(ierr)                                   !
+!           END PROGRAM foo                                             !
+!                                                                       !
+!  Notes   : 1) Standard Fortran 95 compiler has to be used to compile  !
+!               MPI_TIMES module.                                       !
+!                                                                       !
+!            2) MPI_TIME subroutine is collective over all processes    !
+!               of MPI_COMM_WORLD communicator.                         !
+!                                                                       !
+!            3) On some machines, default CPU user time may also        !
+!               include MPI wait times on communication to complete.    !
+!                                                                       !
+!            4) If Te and Tc respectively denotes the elapsed and CPU   !
+!               user times, then the ratio R=Tc/Te > 0 may lead to      !
+!               different interpretations depending on R<1 or R=1       !
+!               or R>1.                                                 !
+!                                                                       !
+!               a) If R<1, then wait time on communications and/or      !
+!                  system load could be the reason of such performance. !
+!                                                                       !
+!               b) If R is close to 1 and no hybrid parallelization     !
+!                  (e.g. MPI + OpenMP) is implemented, then wait time   !
+!                  on communications and/or system load are far to be   !
+!                  considered unless point 3) and then, one can assume  !
+!                  that 99% of the time, processes are busy performing  !
+!                  useful computations on dedicated processors.         !
+!                                                                       !
+!               c) If R>1, then process might has been multi-threaded   !
+!                  during execution as what would happen in hybrid      !
+!                  parallelization (e.g. MPI + OpenMP) on cluster       !
+!                  of SMP nodes. In such case, R may reflect the speed  !
+!                  up of the process.                                   !
+!                                                                       !
+!            5) On IBM SP machine, do not compile MPI_TIMES module      !
+!               using "-qrealsize=8" switch. This will transform        !
+!               MPI_WTIME function type from 8 to 16 bytes floating     !
+!               point precision.                                        !
+!                                                                       !
+!            6) No special switch is needed to compile this file.       !
+!               The following should be sufficient on many platforms:   !
+!               f90 -c -Ipath_to_MPI_header_file MPI_Time.f90           !
+!                                                                       !
+!   Output : At normal termination of the MPI program, process of       !
+!            rank 0 prints on stdout elapsed time, cpu time and ratio   !
+!            cpu/elapsed of all MPI_COMM_WORLD processes.               !
+!            The following is an output example from an execution       !
+!            with 4 processes:                                          !
+!                                                                       !
+!............                                                           !
+!  MPI_Time (release 3.4) summary report:                               !
+!                                                                       !
+!  Process Rank | Elapsed Time (s) | CPU Time (s) | Ratio CPU/Elapsed   !
+!  -------------|------------------|--------------|------------------   !
+!     0         |     427.098      |     270.393  |      0.633          !
+!     1         |     427.099      |     279.818  |      0.655          !
+!     2         |     427.099      |     276.064  |      0.646          !
+!     3         |     427.182      |     271.001  |      0.634          !
+!  -------------|------------------|--------------|------------------   !
+!  Total        |    1708.477      |    1097.275  |      2.569          !
+!  -------------|------------------|--------------|------------------   !
+!  Minimum      |     427.098      |     270.393  |      0.633          !
+!  -------------|------------------|--------------|------------------   !
+!  Maximum      |     427.182      |     279.818  |      0.655          !
+!  -------------|------------------|--------------|------------------   !
+!  Average      |     427.119      |     274.319  |      0.642          !
+!  -------------|------------------|--------------|------------------   !
+!                                                                       !
+!  MPI_Time started on 13/11/2002 at 16:54:59 MET +01:00 from GMT       !
+!  MPI_Time   ended on 13/11/2002 at 17:02:06 MET +01:00 from GMT       !
+!............                                                           !
+!                                                                       !
+!                                                                       !
+!************************************************************************
+
+MODULE MPI_TIMES
+  IMPLICIT NONE
+  PRIVATE
+
+  !... Shared variables
+  INTEGER, PARAMETER              :: p = SELECTED_REAL_KIND(12)
+  REAL(kind=p)                    :: Eoverhead, Coverhead
+  REAL(kind=p), DIMENSION(2)      :: Etime, Ctime
+  INTEGER, DIMENSION(8)           :: values
+  CHARACTER(LEN=8), DIMENSION(2)  :: date
+  CHARACTER(LEN=10), DIMENSION(2) :: time
+  CHARACTER(LEN=5)                :: zone
+
+  PUBLIC :: MPI_Time
+
+  CONTAINS
+
+  SUBROUTINE MPI_Time(flag)
+    IMPLICIT NONE
+
+    !... MPI Header files
+    INCLUDE "mpif.h"
+
+    !... Input dummy parameter
+    INTEGER, INTENT(IN) :: flag
+
+    !... Local variables
+    INTEGER                                 :: rank, nb_procs, i, code
+    INTEGER, ALLOCATABLE, DIMENSION(:)      :: All_Rank
+    REAL(KIND=p), ALLOCATABLE, DIMENSION(:) :: All_Etime, All_Ctime, All_Ratio
+    REAL(KIND=p)                            :: Total_Etime,Total_Ctime,Total_Ratio,&
+                                               Max_Etime, Max_Ctime, Max_Ratio, &
+                                               Min_Etime, Min_Ctime, Min_Ratio, &
+                                               Avg_Etime, Avg_Ctime, Avg_Ratio, &
+                                               dummy
+    CHARACTER(LEN=128), dimension(8) :: lignes
+    CHARACTER(LEN=128)               :: hline, start_date, final_date
+    CHARACTER(LEN=2048)              :: fmt
+
+    SELECT CASE(flag)
+      CASE(0)
+
+        !... Compute clock overhead
+        Eoverhead = MPI_WTIME()
+        Eoverhead = MPI_WTIME() - Eoverhead
+        CALL CPU_TIME(dummy)
+        CALL CPU_TIME(Coverhead)
+        if (dummy < 0.0_p) &
+          WRITE(0,*) "Warning, MPI_TIME: CPU user time is not available on this machine."
+        Coverhead = Coverhead - dummy
+        CALL MPI_COMM_RANK(MPI_COMM_WORLD, rank, code)
+        !... Start of timings on "date & time"
+        IF ( rank == 0 ) &
+           CALL DATE_AND_TIME(date(1),time(1),zone,values)
+        !... Start elapsed and CPU time counters
+        Etime(1) = MPI_WTIME()
+        CALL CPU_TIME(Ctime(1))
+
+      CASE(1)
+        !... Final CPU and elapsed times
+        CALL CPU_TIME(Ctime(2))
+        Etime(2) = MPI_WTIME() - Etime(1) - Eoverhead - Coverhead
+        Ctime(2) = Ctime(2) - Ctime(1) - Coverhead
+        !... Gather all times
+        CALL MPI_COMM_RANK(MPI_COMM_WORLD, rank, code)
+        CALL MPI_COMM_SIZE(MPI_COMM_WORLD, nb_procs, code)
+        IF ( rank == 0) ALLOCATE(All_Etime(nb_procs), &
+                                 All_Ctime(nb_procs), &
+                                 All_Ratio(nb_procs), &
+                                 All_Rank(nb_procs) )
+        CALL MPI_GATHER(Etime(2), 1, MPI_DOUBLE_PRECISION,  &
+                        All_Etime, 1, MPI_DOUBLE_PRECISION, &
+                        0, MPI_COMM_WORLD, code)
+        CALL MPI_GATHER(Ctime(2), 1, MPI_DOUBLE_PRECISION,  &
+                        All_Ctime, 1, MPI_DOUBLE_PRECISION, &
+                        0, MPI_COMM_WORLD, code)
+        IF ( rank == 0) THEN
+          All_Rank(:) = (/ (i,i=0,nb_procs-1) /)
+
+          !... Compute elapse user time
+          Total_Etime = SUM(All_Etime(:))
+          Avg_Etime   = Total_Etime/REAL(nb_procs,KIND=p)
+          Max_Etime   = MAXVAL(All_Etime(:))
+          Min_Etime   = MINVAL(All_Etime(:))
+          IF( Min_Etime <= 0.0_p ) THEN
+            WRITE(0,*) "Warning, MPI_TIME: Measured elapsed user time seems to be too short"
+            WRITE(0,*) "compared to the clock precision. Timings could be erroneous."
+          END IF
+
+          !... Compute CPU user time
+          Total_Ctime = SUM(All_Ctime(:))
+          Avg_Ctime   = Total_Ctime/REAL(nb_procs,KIND=p)
+          Max_Ctime   = MAXVAL(All_Ctime(:))
+          Min_Ctime   = MINVAL(All_Ctime(:))
+          IF( Min_Ctime <= 0.0_p ) THEN
+            WRITE(0,*) "Warning, MPI_TIME: Measured CPU user time seems to be too short"
+            WRITE(0,*) "compared to the clock precision. Timings could be erroneous."
+          END IF
+
+          !... Compute cpu/elapsed ratio
+          All_Ratio(:) = All_Ctime(:) / All_Etime(:)
+          Total_Ratio  = SUM(All_Ratio(:))
+          Avg_Ratio    = Total_Ratio/REAL(nb_procs,KIND=p)
+          Max_Ratio    = MAXVAL(All_Ratio(:))
+          Min_Ratio    = MINVAL(All_Ratio(:))
+
+          !... End of timings on "date & time"
+          CALL DATE_AND_TIME(date(2),time(2),zone,values)
+
+          !... Output Format
+          hline    ='10X,13("-"),"|",18("-"),"|",14("-"),"|",18("-"),/,'
+          lignes(1)='(//,10X,"(C) May 2006, LOCEAN -  XLV.",/,'
+          lignes(2)='10X,"MPI_Time (release 3.4) summary report:",//,'
+          lignes(3)='10X,"Process Rank |"," Elapsed Time (s) |"," CPU Time (s) |"," Ratio CPU/Elapsed",/,'
+          lignes(4)='    (10X,I4,9(" "),"|",F12.3,6(" "),"|",F12.3,2(" "),"|",4(" "),F7.3,/),'
+          WRITE(lignes(4)(1:4),'(I4)') nb_procs
+          lignes(5)='10X,"Total        |",F12.3,6(" "),"|",F12.3,2(" "),"|",4(" "),F7.3,/,'
+          lignes(6)='10X,"Minimum      |",F12.3,6(" "),"|",F12.3,2(" "),"|",4(" "),F7.3,/,'
+          lignes(7)='10X,"Maximum      |",F12.3,6(" "),"|",F12.3,2(" "),"|",4(" "),F7.3,/,'
+          lignes(8)='10X,"Average      |",F12.3,6(" "),"|",F12.3,2(" "),"|",4(" "),F7.3,/,'
+          start_date='/,10X,"MPI_Time started on ",2(A2,"/"),A4," at ",2(A2,":"),A2," MET ",A3,":",A2," from GMT",/,'
+          final_date='10X,  "MPI_Time   ended on ",2(A2,"/"),A4," at ",2(A2,":"),A2," MET ",A3,":",A2," from GMT",//)'
+          fmt=TRIM(lignes(1))//TRIM(lignes(2))//TRIM(lignes(3))//           &
+            & TRIM(hline)//TRIM(lignes(4))//TRIM(hline)//TRIM(lignes(5))//  &
+            & TRIM(hline)//TRIM(lignes(6))//TRIM(hline)//TRIM(lignes(7))//  &
+            & TRIM(hline)//TRIM(lignes(8))//TRIM(hline)//TRIM(start_date)// &
+            & TRIM(final_date)
+          WRITE(0, TRIM(fmt)) &
+              (All_rank(i),All_Etime(i),All_Ctime(i),All_Ratio(i),i=1, nb_procs), &
+              Total_Etime,  Total_Ctime,  Total_Ratio,  &
+              Min_Etime,    Min_Ctime,    Min_Ratio,    &
+              Max_Etime,    Max_Ctime,    Max_Ratio,    &
+              Avg_Etime,    Avg_Ctime,    Avg_Ratio,    &
+              date(1)(7:8), date(1)(5:6), date(1)(1:4), &
+              time(1)(1:2), time(1)(3:4), time(1)(5:6), &
+              zone(1:3),    zone(4:5),                  &
+              date(2)(7:8), date(2)(5:6), date(2)(1:4), &
+              time(2)(1:2), time(2)(3:4), time(2)(5:6), &
+              zone(1:3),    zone(4:5)
+          DEALLOCATE(All_Etime, All_Ctime, All_Ratio, All_rank)
+        END IF
+
+      CASE DEFAULT
+        WRITE(0,*) "Error, MPI_TIME: Invalid input parameter"
+
+    END SELECT
+  END SUBROUTINE MPI_Time
+END MODULE MPI_TIMES
Index: /trunk/00FlowSolve_KW/src/utils/Makefile
===================================================================
--- /trunk/00FlowSolve_KW/src/utils/Makefile	(revision 6)
+++ /trunk/00FlowSolve_KW/src/utils/Makefile	(revision 6)
@@ -0,0 +1,38 @@
+SHELL=/bin/sh
+include Make.inc	
+
+LIBNAME=libutils.a
+LIBDIR=${BASE}/lib
+
+OBJS =  data_modules.o      \
+	        MPI_Time.o \
+		mpi_utils.o         \
+		flow_solve_utils.o  \
+		interface_petsc.o   \
+		db3.o db2.o
+	
+clean:
+		@echo
+		@echo "utils"
+		rm -f *.o *.mod Make.inc OOFlowSolve.h
+		
+all: 	$(OBJS)
+		$(AR) $(AR_FLAGS)  ${LIBNAME} ${OBJS}
+		ranlib ${LIBNAME}
+		mv -f *.mod ${BASE}/src
+		mv -f ${LIBNAME} ${LIBDIR}
+	
+	 
+#==================
+# Suffix Rules
+#==================
+
+.SUFFIXES: $(SUFFIXES) .f90  .F90 .f
+
+.f.o:
+	${F77} $(FOPTFLAGS) -c $<
+
+
+.f90.o:
+	${F90} $(FOPTFLAGS) \
+	 $(ALL_INCLUDES) -c $<
Index: /trunk/00FlowSolve_KW/src/utils/data_modules.f90
===================================================================
--- /trunk/00FlowSolve_KW/src/utils/data_modules.f90	(revision 6)
+++ /trunk/00FlowSolve_KW/src/utils/data_modules.f90	(revision 6)
@@ -0,0 +1,238 @@
+!!=============================================
+!!   flow_solve Data Modules
+!!=============================================
+
+
+!!====================================================================================
+  module user_data  
+!!====================================================================================
+   include 'OOFlowSolve.h'
+   integer                             :: nx, ny, nz
+   integer                             :: AB_order,AM_order
+   integer,allocatable                 :: mgrefine(:,:)
+   integer,parameter                   :: mglevels=1
+   
+   real(kind=8)                        :: Lx, Ly, Lz
+   real(kind=8)                        :: dt,t_start,t_end
+   real(kind=8)                        :: f,g,rho_0,u0,nu
+   real(kind=8)                        :: beta_dimensional,beta_tilde
+   real(kind=8)                        :: kappa_1,kappa_2
+   real(kind=8)                        :: s1_scale,s2_scale
+   real(kind=8)                        :: p_scale
+   real(kind=8)                        :: Ri,Rot,Re,Pr(NumScalars)
+   real(kind=8)                        :: dgrad,bfreq,N2
+   real(kind=8)                        :: time_scale,t_scale
+   real(kind=8)                        :: MapParams(3,10)  !! for user maps
+   real(kind=8)                        :: alpha_les(3),p_les(3),T_les
+   
+   character(len=1)                    :: scalar_kind(NumScalars)
+   character(len=80)                   :: runlabel
+   character(len=80)                   :: bc_desc(NumDims,2)
+   character(len=80)                   :: u_deriv_types(2*NumDims)!! 1st&2nd derivs
+   character(len=80)                   :: v_deriv_types(2*NumDims)
+   character(len=80)                   :: w_deriv_types(2*NumDims)
+   character(len=80)                   :: s1_deriv_types(2*NumDims)
+   character(len=80)                   :: s2_deriv_types(2*NumDims)
+   character(len=80)                   :: phi_deriv_types(2*NumDims)
+   character(len=80)                   :: GradPhi_deriv_types(2*NumDims)
+   character(len=80)                   :: div_deriv_types(2*NumDims)
+   character(len=80)                   :: tmp_deriv_types(2*NumDims)
+   character(len=80)                   :: BCtype(NumVars,NumDims,2)!! 2 endpts
+   
+   logical                             :: xdim_periodic,xdim_cos,xdim_sin
+   logical                             :: ydim_periodic,ydim_cos,ydim_sin
+   logical                             :: zdim_periodic,zdim_cos,zdim_sin
+   logical                             :: xdim_implicit_bcs
+   logical                             :: ydim_implicit_bcs
+   logical                             :: zdim_implicit_bcs
+   logical                             :: do_forcing
+   logical                             :: LES,DNS
+   logical                             :: do_immersed_boundary
+   logical                             :: do_explicit_hydrostatic
+   logical                             :: psolve_at_gridpoints
+   logical                             :: psolve_exp_coeffs
+   logical                             :: usolve_at_gridpoints
+   logical                             :: usolve_exp_coeffs
+   logical                             :: vsolve_at_gridpoints
+   logical                             :: vsolve_exp_coeffs
+   logical                             :: wsolve_at_gridpoints
+   logical                             :: wsolve_exp_coeffs
+   logical                             :: s1solve_at_gridpoints
+   logical                             :: s1solve_exp_coeffs
+   logical                             :: s2solve_at_gridpoints
+   logical                             :: s2solve_exp_coeffs
+!!====================================================================================
+  end module user_data
+!!====================================================================================
+
+
+
+!!====================================================================================  
+  module dependent_variables
+!!====================================================================================
+   use class_ScalarVariable
+   use user_data,                   only: MaxNumDims,MaxNumScalars
+   type( ScalarVariable )              :: velocity   (MaxNumDims)
+   type( ScalarVariable )              :: scalars (MaxNumScalars)
+!!====================================================================================
+  end module dependent_variables
+!!====================================================================================
+
+
+
+
+
+!!====================================================================================  
+  module independent_variables
+!!====================================================================================
+   use class_DataDecomposition
+   use user_data,              only: MaxMGIndex
+   type( DataDecomposition )      :: U_DataMap
+   type( DataDecomposition )      :: V_DataMap
+   type( DataDecomposition )      :: W_DataMap
+   type( DataDecomposition )      :: S1_DataMap
+   type( DataDecomposition )      :: S2_DataMap
+   type( DataDecomposition )      :: Div_DataMap
+   type( DataDecomposition )      :: Phi_DataMap(0:MaxMGIndex)
+   type( DataDecomposition )      :: GradPhi_DataMap
+   type( DataDecomposition )      :: b_DataMap
+   type( TensorProductGrid )      :: Grid(0:MaxMGIndex)   
+!!====================================================================================
+  end module independent_variables
+!!====================================================================================
+
+
+
+
+
+!!====================================================================================
+  module intermediate_variables
+!!====================================================================================
+   use class_ScalarVariable
+   use user_data,              only: MaxMGIndex,NumVars,MaxABSlices,NumScratchVars
+   type( ScalarVariable )         :: pd
+   type( ScalarVariable )         :: phi(0:MaxMGIndex)
+   type( ScalarVariable )         :: rhs_b,div_u
+   type( ScalarVariable )         :: implicit_rhs(NumVars,MaxABSlices)
+   type( ScalarVariable )         :: explicit_rhs(NumVars,MaxABSlices)
+   type( ScalarVariable )         :: scratch(NumScratchVars)
+   
+   real(kind=8), allocatable,dimension(:)      ::      s1_bar(:)
+   real(kind=8), allocatable,dimension(:)      ::      s2_bar(:)
+   real(kind=8), allocatable,dimension(:)      ::  ddz_s1_bar(:)
+   real(kind=8), allocatable,dimension(:)      ::  ddz_s2_bar(:)
+   real(kind=8), allocatable,dimension(:)      :: ddzz_s1_bar(:)
+   real(kind=8), allocatable,dimension(:)      :: ddzz_s2_bar(:)
+!!====================================================================================
+  end module intermediate_variables
+!!====================================================================================
+
+
+!!====================================================================================  
+  module operators
+!!====================================================================================
+  use class_BoundaryOperator
+  use class_SAOperator
+  use class_Derivative
+  use user_data,              only: MaxMGIndex,NumDims,NumVars
+
+#include "finclude/petsc.h"
+#include "finclude/petscvec.h"
+#include "finclude/petscmat.h"
+#include "finclude/petscda.h"
+#include "finclude/petscksp.h"
+
+  Vec     petsc_b, petsc_soln
+  KSP     ksp(NumVars),kspfd(NumVars)
+  Mat     A_PC,A
+
+  character(len=80)             :: SolverType
+
+  type( SAOperator )            :: L(0:MaxMGIndex)
+
+  type( BoundaryOperator )      :: DirBdryOps(NumDims,2)
+  type( BoundaryOperator )      :: NeuBdryOps(NumDims,2)
+  type( BoundaryOperator )      :: PhiBdryOps(NumDims,2)
+  type( BoundaryOperator )      :: u_BdryOps (NumDims,2)
+  type( BoundaryOperator )      :: v_BdryOps (NumDims,2)
+  type( BoundaryOperator )      :: w_BdryOps (NumDims,2)
+  type( BoundaryOperator )      :: s1_BdryOps(NumDims,2)
+  type( BoundaryOperator )      :: s2_BdryOps(NumDims,2)
+  
+  real(kind=8)                  :: alpha(NumVars)
+  real(kind=8)                  :: beta(NumVars)
+  real(kind=8)                  :: h2_scale_factor
+  
+
+!!====================================================================================  
+  end module operators
+!!====================================================================================
+
+
+
+!!====================================================================================   
+  module mpi_params
+!!====================================================================================
+   use user_data,             only: MaxNumMGLevels,MaxNumProcs
+   character(len=3 )             :: DoMPITypes(0:MaxNumMGLevels)
+   integer                       :: numprocs
+   integer                       :: myid
+   integer                       :: comm
+   integer                       ::    subslab(0:MaxNumProcs-1,0:MaxNumProcs-1)
+   integer                       ::     subcol(0:MaxNumProcs-1,0:MaxNumProcs-1)
+   integer                       :: slab_sheet(0:MaxNumProcs-1,0:MaxNumProcs-1)
+   integer                       ::  col_sheet(0:MaxNumProcs-1,0:MaxNumProcs-1)
+   integer                       :: pencil
+   integer                       :: status
+   integer                       :: iproc
+   integer                       :: numwords
+   integer                       :: source
+   integer                       :: dest
+   integer                       :: tag
+   integer                       :: nreqs
+!!====================================================================================   
+  end module mpi_params
+!!====================================================================================  
+
+
+
+
+!!====================================================================================
+  module io_params
+!!====================================================================================
+   use user_data,             only: MaxNumOutputFileSets
+   integer                       :: num_netcdf_files
+   integer                       :: ncid
+   integer                       :: idim
+   integer                       :: jdim
+   integer                       :: file_id
+   integer                       :: rcode
+   
+   integer                       :: start       (4,MaxNumOutputFileSets)    
+   integer                       :: count       (4,MaxNumOutputFileSets)
+   integer                       :: ilocs       (3,MaxNumOutputFileSets)    
+   integer                       :: jlocs       (3,MaxNumOutputFileSets)    
+   integer                       :: klocs       (3,MaxNumOutputFileSets)
+   integer                       :: variable_key(9,MaxNumOutputFileSets)
+
+   integer                       :: my_kstart     (MaxNumOutputFileSets)
+   integer                       :: my_kend       (MaxNumOutputFileSets)
+   integer                       :: my_kinc       (MaxNumOutputFileSets)
+   integer                       :: nsteps        (MaxNumOutputFileSets)
+   integer                       :: nspace        (MaxNumOutputFileSets)
+   integer                       :: time_counter  (MaxNumOutputFileSets)
+   integer                       :: dimid_x       (MaxNumOutputFileSets)
+   integer                       :: dimid_y       (MaxNumOutputFileSets)
+   integer                       :: dimid_z       (MaxNumOutputFileSets)
+   integer                       :: dimid_t       (MaxNumOutputFileSets)
+   
+   character(len=80)             :: filename_root(MaxNumOutputFileSets)
+   character(len=80)             :: fullname     (MaxNumOutputFileSets)
+   character(len=80)             :: mode         (MaxNumOutputFileSets)
+   
+   character(len=6)              :: cnum
+   character(len=3)              :: cid,dimstr
+!!====================================================================================
+  end module io_params
+!!====================================================================================
+
Index: /trunk/00FlowSolve_KW/src/utils/db2.f
===================================================================
--- /trunk/00FlowSolve_KW/src/utils/db2.f	(revision 6)
+++ /trunk/00FlowSolve_KW/src/utils/db2.f	(revision 6)
@@ -0,0 +1,420 @@
+ 
+      SUBROUTINE DB2INK(X,NX,Y,NY,FCN,LDF,KX,KY,TX,TY,BCOEF,WORK,IFLAG)
+C***BEGIN PROLOGUE  DB2INK
+C***DATE WRITTEN   25 MAY 1982
+C***REVISION DATE  25 MAY 1982
+C***REVISION HISTORY  (YYMMDD)
+C   000330  Modified array declarations.  (JEC)
+C
+C***CATEGORY NO.  E1A
+C***KEYWORDS  INTERPOLATION, TWO-DIMENSIONS, GRIDDED DATA, SPLINES,
+C             PIECEWISE POLYNOMIALS
+C***AUTHOR  BOISVERT, RONALD, NBS
+C             SCIENTIFIC COMPUTING DIVISION
+C             NATIONAL BUREAU OF STANDARDS
+C             WASHINGTON, DC 20234
+C***PURPOSE  DOUBLE PRECISION VERSION OF B2INK.
+C            DB2INK DETERMINES A PIECEWISE POLYNOMIAL FUNCTION THAT
+C            INTERPOLATES TWO-DIMENSIONAL GRIDDED DATA. USERS SPECIFY
+C            THE POLYNOMIAL ORDER (DEGREE+1) OF THE INTERPOLANT AND
+C            (OPTIONALLY) THE KNOT SEQUENCE.
+C***DESCRIPTION
+C
+C   DB2INK determines the parameters of a  function  that  interpolates
+C   the two-dimensional gridded data (X(i),Y(j),FCN(i,j)) for i=1,..,NX
+C   and j=1,..,NY. The interpolating function and its  derivatives  may
+C   subsequently be evaluated by the function DB2VAL.
+C
+C   The interpolating  function  is  a  piecewise  polynomial  function
+C   represented as a tensor product of one-dimensional  B-splines.  The
+C   form of this function is
+C
+C                          NX   NY
+C              S(x,y)  =  SUM  SUM  a   U (x) V (y)
+C                         i=1  j=1   ij  i     j
+C
+C   where the functions U(i)  and  V(j)  are  one-dimensional  B-spline
+C   basis functions. The coefficients a(i,j) are chosen so that
+C
+C         S(X(i),Y(j)) = FCN(i,j)   for i=1,..,NX and j=1,..,NY
+C
+C   Note that  for  each  fixed  value  of  y  S(x,y)  is  a  piecewise
+C   polynomial function of x alone, and for each fixed value of x  S(x,
+C   y) is a piecewise polynomial function of y alone. In one  dimension
+C   a piecewise polynomial may  be  created  by  partitioning  a  given
+C   interval into subintervals and defining a distinct polynomial piece
+C   on each one. The points where adjacent subintervals meet are called
+C   knots. Each of the functions U(i) and V(j)  above  is  a  piecewise
+C   polynomial.
+C
+C   Users of DB2INK choose  the  order  (degree+1)  of  the  polynomial
+C   pieces used to define the piecewise polynomial in each of the x and
+C   y directions (KX and KY). Users also  may  define  their  own  knot
+C   sequence in x and y separately (TX and TY).  If  IFLAG=0,  however,
+C   DB2INK will choose sequences of knots that result  in  a  piecewise
+C   polynomial interpolant with KX-2 continuous partial derivatives  in
+C   x and KY-2 continuous partial derivatives in y. (KX knots are taken
+C   near each endpoint in the x direction,  not-a-knot  end  conditions
+C   are used, and the remaining knots are placed at data points  if  KX
+C   is even or at midpoints between data points if KX  is  odd.  The  y
+C   direction is treated similarly.)
+C
+C   After a call to DB2INK, all information  necessary  to  define  the
+C   interpolating function are contained in the parameters NX, NY,  KX,
+C   KY, TX, TY, and BCOEF. These quantities should not be altered until
+C   after the last call of the evaluation routine DB2VAL.
+C
+C
+C   I N P U T
+C   ---------
+C
+C   X       Double precision 1D array (size NX)
+C           Array of x abcissae. Must be strictly increasing.
+C
+C   NX      Integer scalar (.GE. 3)
+C           Number of x abcissae.
+C
+C   Y       Double precision 1D array (size NY)
+C           Array of y abcissae. Must be strictly increasing.
+C
+C   NY      Integer scalar (.GE. 3)
+C           Number of y abcissae.
+C
+C   FCN     Double precision 2D array (size LDF by NY)
+C           Array of function values to interpolate. FCN(I,J) should
+C           contain the function value at the point (X(I),Y(J))
+C
+C   LDF     Integer scalar (.GE. NX)
+C           The actual leading dimension of FCN used in the calling
+C           calling program.
+C
+C   KX      Integer scalar (.GE. 2, .LT. NX)
+C           The order of spline pieces in x.
+C           (Order = polynomial degree + 1)
+C
+C   KY      Integer scalar (.GE. 2, .LT. NY)
+C           The order of spline pieces in y.
+C           (Order = polynomial degree + 1)
+C
+C
+C   I N P U T   O R   O U T P U T
+C   -----------------------------
+C
+C   TX      Double precision 1D array (size NX+KX)
+C           The knots in the x direction for the spline interpolant.
+C           If IFLAG=0 these are chosen by DB2INK.
+C           If IFLAG=1 these are specified by the user.
+C                      (Must be non-decreasing.)
+C
+C   TY      Double precision 1D array (size NY+KY)
+C           The knots in the y direction for the spline interpolant.
+C           If IFLAG=0 these are chosen by DB2INK.
+C           If IFLAG=1 these are specified by the user.
+C                      (Must be non-decreasing.)
+C
+C
+C   O U T P U T
+C   -----------
+C
+C   BCOEF   Double precision 2D array (size NX by NY)
+C           Array of coefficients of the B-spline interpolant.
+C           This may be the same array as FCN.
+C
+C
+C   M I S C E L L A N E O U S
+C   -------------------------
+C
+C   WORK    Double precision 1D array (size NX*NY + max( 2*KX*(NX+1),
+C                                             2*KY*(NY+1) ))
+C           Array of working storage.
+C
+C   IFLAG   Integer scalar.
+C           On input:  0 == knot sequence chosen by DB2INK
+C                      1 == knot sequence chosen by user.
+C           On output: 1 == successful execution
+C                      2 == IFLAG out of range
+C                      3 == NX out of range
+C                      4 == KX out of range
+C                      5 == X not strictly increasing
+C                      6 == TX not non-decreasing
+C                      7 == NY out of range
+C                      8 == KY out of range
+C                      9 == Y not strictly increasing
+C                     10 == TY not non-decreasing
+C
+C***REFERENCES  CARL DE BOOR, A PRACTICAL GUIDE TO SPLINES,
+C                 SPRINGER-VERLAG, NEW YORK, 1978.
+C               CARL DE BOOR, EFFICIENT COMPUTER MANIPULATION OF TENSOR
+C                 PRODUCTS, ACM TRANSACTIONS ON MATHEMATICAL SOFTWARE,
+C                 VOL. 5 (1979), PP. 173-182.
+C***ROUTINES CALLED  DBTPCF,DBKNOT
+C***END PROLOGUE  DB2INK
+C
+C  ------------
+C  DECLARATIONS
+C  ------------
+C
+C  PARAMETERS
+C
+      INTEGER
+     *        NX, NY, LDF, KX, KY, IFLAG
+      DOUBLE PRECISION
+     *     X(NX), Y(NY), FCN(LDF,NY), TX(*), TY(*), BCOEF(NX,NY),
+     *     WORK(*)
+C
+C  LOCAL VARIABLES
+C
+      INTEGER
+     *        I, IW, NPK
+C
+C  -----------------------
+C  CHECK VALIDITY OF INPUT
+C  -----------------------
+C
+C***FIRST EXECUTABLE STATEMENT
+      IF ((IFLAG .LT. 0) .OR. (IFLAG .GT. 1))  GO TO 920
+      IF (NX .LT. 3)  GO TO 930
+      IF (NY .LT. 3)  GO TO 970
+      IF ((KX .LT. 2) .OR. (KX .GE. NX))  GO TO 940
+      IF ((KY .LT. 2) .OR. (KY .GE. NY))  GO TO 980
+      DO 10 I=2,NX
+         IF (X(I) .LE. X(I-1))  GO TO 950
+   10 CONTINUE
+      DO 20 I=2,NY
+         IF (Y(I) .LE. Y(I-1))  GO TO 990
+   20 CONTINUE
+      IF (IFLAG .EQ. 0)  GO TO 50
+         NPK = NX + KX
+         DO 30 I=2,NPK
+            IF (TX(I) .LT. TX(I-1))  GO TO 960
+   30    CONTINUE
+         NPK = NY + KY
+         DO 40 I=2,NPK
+            IF (TY(I) .LT. TY(I-1))  GO TO 1000
+   40    CONTINUE
+   50 CONTINUE
+C
+C  ------------
+C  CHOOSE KNOTS
+C  ------------
+C
+      IF (IFLAG .NE. 0)  GO TO 100
+         CALL DBKNOT(X,NX,KX,TX)
+         CALL DBKNOT(Y,NY,KY,TY)
+  100 CONTINUE
+C
+C  -------------------------------
+C  CONSTRUCT B-SPLINE COEFFICIENTS
+C  -------------------------------
+C
+      IFLAG = 1
+      IW = NX*NY + 1
+      CALL DBTPCF(X,NX,FCN,LDF,NY,TX,KX,WORK,WORK(IW))
+      CALL DBTPCF(Y,NY,WORK,NY,NX,TY,KY,BCOEF,WORK(IW))
+      GO TO 9999
+C
+C  -----
+C  EXITS
+C  -----
+C
+  920 CONTINUE
+      CALL XERRWV('DB2INK -  IFLAG=I1 IS OUT OF RANGE.',
+     *            36,2,1,1,IFLAG,I2,0,R1,R2)
+      IFLAG = 2
+      GO TO 9999
+C
+  930 CONTINUE
+      IFLAG = 3
+      CALL XERRWV('DB2INK -  NX=I1 IS OUT OF RANGE.',
+     *            32,IFLAG,1,1,NX,I2,0,R1,R2)
+      GO TO 9999
+C
+  940 CONTINUE
+      IFLAG = 4
+      CALL XERRWV('DB2INK -  KX=I1 IS OUT OF RANGE.',
+     *            32,IFLAG,1,1,KX,I2,0,R1,R2)
+      GO TO 9999
+C
+  950 CONTINUE
+      IFLAG = 5
+      CALL XERRWV('DB2INK -  X ARRAY MUST BE STRICTLY INCREASING.',
+     *            46,IFLAG,1,0,I1,I2,0,R1,R2)
+      GO TO 9999
+C
+  960 CONTINUE
+      IFLAG = 6
+      CALL XERRWV('DB2INK -  TX ARRAY MUST BE NON-DECREASING.',
+     *            42,IFLAG,1,0,I1,I2,0,R1,R2)
+      GO TO 9999
+C
+  970 CONTINUE
+      IFLAG = 7
+      CALL XERRWV('DB2INK -  NY=I1 IS OUT OF RANGE.',
+     *            32,IFLAG,1,1,NY,I2,0,R1,R2)
+      GO TO 9999
+C
+  980 CONTINUE
+      IFLAG = 8
+      CALL XERRWV('DB2INK -  KY=I1 IS OUT OF RANGE.',
+     *            32,IFLAG,1,1,KY,I2,0,R1,R2)
+      GO TO 9999
+C
+  990 CONTINUE
+      IFLAG = 9
+      CALL XERRWV('DB2INK -  Y ARRAY MUST BE STRICTLY INCREASING.',
+     *            46,IFLAG,1,0,I1,I2,0,R1,R2)
+      GO TO 9999
+C
+ 1000 CONTINUE
+      IFLAG = 10
+      CALL XERRWV('DB2INK -  TY ARRAY MUST BE NON-DECREASING.',
+     *            42,IFLAG,1,0,I1,I2,0,R1,R2)
+      GO TO 9999
+C
+ 9999 CONTINUE
+      RETURN
+      END
+
+      DOUBLE PRECISION FUNCTION DB2VAL(XVAL,YVAL,IDX,IDY,TX,TY,NX,NY,
+     *  KX,KY,BCOEF,WORK)
+C***BEGIN PROLOGUE  DB2VAL
+C***DATE WRITTEN   25 MAY 1982
+C***REVISION DATE  25 MAY 1982
+C***REVISION HISTORY  (YYMMDD)
+C   000330  Modified array declarations.  (JEC)
+C
+C***CATEGORY NO.  E1A
+C***KEYWORDS  INTERPOLATION, TWO-DIMENSIONS, GRIDDED DATA, SPLINES,
+C             PIECEWISE POLYNOMIALS
+C***AUTHOR  BOISVERT, RONALD, NBS
+C             SCIENTIFIC COMPUTING DIVISION
+C             NATIONAL BUREAU OF STANDARDS
+C             WASHINGTON, DC 20234
+C***PURPOSE  DB2VAL EVALUATES THE PIECEWISE POLYNOMIAL INTERPOLATING
+C            FUNCTION CONSTRUCTED BY THE ROUTINE DB2INK OR ONE OF ITS
+C            PARTIAL DERIVATIVES.
+C            DOUBLE PRECISION VERSION OF B2VAL.
+C***DESCRIPTION
+C
+C   DB2VAL  evaluates   the   tensor   product   piecewise   polynomial
+C   interpolant constructed  by  the  routine  DB2INK  or  one  of  its
+C   derivatives at the point (XVAL,YVAL). To evaluate  the  interpolant
+C   itself, set IDX=IDY=0, to evaluate the first partial  with  respect
+C   to x, set IDX=1,IDY=0, and so on.
+C
+C   DB2VAL returns 0.0E0 if (XVAL,YVAL) is out of range. That is, if
+C            XVAL.LT.TX(1) .OR. XVAL.GT.TX(NX+KX) .OR.
+C            YVAL.LT.TY(1) .OR. YVAL.GT.TY(NY+KY)
+C   If the knots TX  and  TY  were  chosen  by  DB2INK,  then  this  is
+C   equivalent to
+C            XVAL.LT.X(1) .OR. XVAL.GT.X(NX)+EPSX .OR.
+C            YVAL.LT.Y(1) .OR. YVAL.GT.Y(NY)+EPSY
+C   where EPSX = 0.1*(X(NX)-X(NX-1)) and EPSY = 0.1*(Y(NY)-Y(NY-1)).
+C
+C   The input quantities TX, TY, NX, NY, KX, KY, and  BCOEF  should  be
+C   unchanged since the last call of DB2INK.
+C
+C
+C   I N P U T
+C   ---------
+C
+C   XVAL    Double precision scalar
+C           X coordinate of evaluation point.
+C
+C   YVAL    Double precision scalar
+C           Y coordinate of evaluation point.
+C
+C   IDX     Integer scalar
+C           X derivative of piecewise polynomial to evaluate.
+C
+C   IDY     Integer scalar
+C           Y derivative of piecewise polynomial to evaluate.
+C
+C   TX      Double precision 1D array (size NX+KX)
+C           Sequence of knots defining the piecewise polynomial in
+C           the x direction.  (Same as in last call to DB2INK.)
+C
+C   TY      Double precision 1D array (size NY+KY)
+C           Sequence of knots defining the piecewise polynomial in
+C           the y direction.  (Same as in last call to DB2INK.)
+C
+C   NX      Integer scalar
+C           The number of interpolation points in x.
+C           (Same as in last call to DB2INK.)
+C
+C   NY      Integer scalar
+C           The number of interpolation points in y.
+C           (Same as in last call to DB2INK.)
+C
+C   KX      Integer scalar
+C           Order of polynomial pieces in x.
+C           (Same as in last call to DB2INK.)
+C
+C   KY      Integer scalar
+C           Order of polynomial pieces in y.
+C           (Same as in last call to DB2INK.)
+C
+C   BCOEF   Double precision 2D array (size NX by NY)
+C           The B-spline coefficients computed by DB2INK.
+C
+C   WORK    Double precision 1D array (size 3*max(KX,KY) + KY)
+C           A working storage array.
+C
+C***REFERENCES  CARL DE BOOR, A PRACTICAL GUIDE TO SPLINES,
+C                 SPRINGER-VERLAG, NEW YORK, 1978.
+C***ROUTINES CALLED  DINTRV,DBVALU
+C***END PROLOGUE  DB2VAL
+C
+C<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+C
+C   MODIFICATION
+C   ------------
+C
+C   ADDED CHECK TO SEE IF X OR Y IS OUT OF RANGE, IF SO, RETURN 0.0
+C
+C   R.F. BOISVERT, NIST
+C   22 FEB 00
+C
+C<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+C  ------------
+C  DECLARATIONS
+C  ------------
+C
+C  PARAMETERS
+C
+      INTEGER
+     *        IDX, IDY, NX, NY, KX, KY
+      DOUBLE PRECISION
+     *     XVAL, YVAL, TX(*), TY(*), BCOEF(NX,NY), WORK(*)
+C
+C  LOCAL VARIABLES
+C
+      INTEGER
+     *        ILOY, INBVX, INBV, K, LEFTY, MFLAG, KCOL, IW
+      DOUBLE PRECISION
+     *     DBVALU
+C
+      DATA ILOY /1/,  INBVX /1/
+C     SAVE ILOY    ,  INBVX
+C
+C
+C***FIRST EXECUTABLE STATEMENT
+      DB2VAL = 0.0D0
+C  NEXT STATEMENT - RFB MOD
+      IF (XVAL.LT.TX(1) .OR. XVAL.GT.TX(NX+KX) .OR.
+     +    YVAL.LT.TY(1) .OR. YVAL.GT.TY(NY+KY))      GO TO 100
+      CALL DINTRV(TY,NY+KY,YVAL,ILOY,LEFTY,MFLAG)
+      IF (MFLAG .NE. 0)  GO TO 100
+         IW = KY + 1
+         KCOL = LEFTY - KY
+         DO 50 K=1,KY
+            KCOL = KCOL + 1
+            WORK(K) = DBVALU(TX,BCOEF(1,KCOL),NX,KX,IDX,XVAL,INBVX,
+     *                      WORK(IW))
+   50    CONTINUE
+         INBV = 1
+         KCOL = LEFTY - KY + 1
+         DB2VAL = DBVALU(TY(KCOL),WORK,KY,KY,IDY,YVAL,INBV,WORK(IW))
+  100 CONTINUE
+      RETURN
+      END
Index: /trunk/00FlowSolve_KW/src/utils/db3.f
===================================================================
--- /trunk/00FlowSolve_KW/src/utils/db3.f	(revision 6)
+++ /trunk/00FlowSolve_KW/src/utils/db3.f	(revision 6)
@@ -0,0 +1,2112 @@
+      SUBROUTINE DB3INK(X,NX,Y,NY,Z,NZ,FCN,LDF1,LDF2,KX,KY,KZ,TX,TY,TZ,
+     *  BCOEF,WORK,IFLAG)
+C***BEGIN PROLOGUE  DB3INK
+C***DATE WRITTEN   25 MAY 1982
+C***REVISION DATE  25 MAY 1982
+C***REVISION HISTORY  (YYMMDD)
+C   000330  Modified array declarations.  (JEC)
+C
+C***CATEGORY NO.  E1A
+C***KEYWORDS  INTERPOLATION, THREE-DIMENSIONS, GRIDDED DATA, SPLINES,
+C             PIECEWISE POLYNOMIALS
+C***AUTHOR  BOISVERT, RONALD, NBS
+C             SCIENTIFIC COMPUTING DIVISION
+C             NATIONAL BUREAU OF STANDARDS
+C             WASHINGTON, DC 20234
+C***PURPOSE  DOUBLE PRECISION VERSION OF DB3INK
+C            DB3INK DETERMINES A PIECEWISE POLYNOMIAL FUNCTION THAT
+C            INTERPOLATES THREE-DIMENSIONAL GRIDDED DATA. USERS SPECIFY
+C            THE POLYNOMIAL ORDER (DEGREE+1) OF THE INTERPOLANT AND
+C            (OPTIONALLY) THE KNOT SEQUENCE.
+C***DESCRIPTION
+C
+C   DB3INK determines the parameters of a  function  that  interpolates
+C   the three-dimensional gridded data (X(i),Y(j),Z(k),FCN(i,j,k))  for
+C   i=1,..,NX, j=1,..,NY, and k=1,..,NZ. The interpolating function and
+C   its derivatives may  subsequently  be  evaluated  by  the  function
+C   DB3VAL.
+C
+C   The interpolating  function  is  a  piecewise  polynomial  function
+C   represented as a tensor product of one-dimensional  B-splines.  The
+C   form of this function is
+C
+C                      NX   NY   NZ
+C        S(x,y,z)  =  SUM  SUM  SUM  a   U (x) V (y) W (z)
+C                     i=1  j=1  k=1   ij  i     j     k
+C
+C   where the functions U(i), V(j), and  W(k)  are  one-dimensional  B-
+C   spline basis functions. The coefficients a(i,j) are chosen so that
+C
+C   S(X(i),Y(j),Z(k)) = FCN(i,j,k)  for i=1,..,NX, j=1,..,NY, k=1,..,NZ
+C
+C   Note that for fixed values of y  and  z  S(x,y,z)  is  a  piecewise
+C   polynomial function of x alone, for fixed values of x and z  S(x,y,
+C   z) is a piecewise polynomial function of y  alone,  and  for  fixed
+C   values of x and y S(x,y,z)  is  a  function  of  z  alone.  In  one
+C   dimension a piecewise polynomial may be created by  partitioning  a
+C   given interval into subintervals and defining a distinct polynomial
+C   piece on each one. The points where adjacent subintervals meet  are
+C   called knots. Each of the functions U(i), V(j), and W(k) above is a
+C   piecewise polynomial.
+C
+C   Users of DB3INK choose  the  order  (degree+1)  of  the  polynomial
+C   pieces used to define the piecewise polynomial in each of the x, y,
+C   and z directions (KX, KY, and KZ). Users also may define their  own
+C   knot sequence in x, y, and z separately (TX, TY, and TZ). If IFLAG=
+C   0, however, DB3INK will choose sequences of knots that result in  a
+C   piecewise  polynomial  interpolant  with  KX-2  continuous  partial
+C   derivatives in x, KY-2 continuous partial derivatives in y, and KZ-
+C   2 continuous partial derivatives in z. (KX  knots  are  taken  near
+C   each endpoint in x, not-a-knot end conditions  are  used,  and  the
+C   remaining knots are placed at data points  if  KX  is  even  or  at
+C   midpoints between data points if KX is odd. The y and z  directions
+C   are treated similarly.)
+C
+C   After a call to DB3INK, all information  necessary  to  define  the
+C   interpolating function are contained in the parameters NX, NY,  NZ,
+C   KX, KY, KZ, TX, TY, TZ, and BCOEF. These quantities should  not  be
+C   altered until after the last call of the evaluation routine DB3VAL.
+C
+C
+C   I N P U T
+C   ---------
+C
+C   X       Double precision 1D array (size NX)
+C           Array of x abcissae. Must be strictly increasing.
+C
+C   NX      Integer scalar (.GE. 3)
+C           Number of x abcissae.
+C
+C   Y       Double precision 1D array (size NY)
+C           Array of y abcissae. Must be strictly increasing.
+C
+C   NY      Integer scalar (.GE. 3)
+C           Number of y abcissae.
+C
+C   Z       Double precision 1D array (size NZ)
+C           Array of z abcissae. Must be strictly increasing.
+C
+C   NZ      Integer scalar (.GE. 3)
+C           Number of z abcissae.
+C
+C   FCN     Double precision 3D array (size LDF1 by LDF2 by NY)
+C           Array of function values to interpolate. FCN(I,J,K) should
+C           contain the function value at the point (X(I),Y(J),Z(K))
+C
+C   LDF1    Integer scalar (.GE. NX)
+C           The actual first dimension of FCN used in the
+C           calling program.
+C
+C   LDF2    Integer scalar (.GE. NY)
+C           The actual second dimension of FCN used in the calling
+C           program.
+C
+C   KX      Integer scalar (.GE. 2, .LT. NX)
+C           The order of spline pieces in x.
+C           (Order = polynomial degree + 1)
+C
+C   KY      Integer scalar (.GE. 2, .LT. NY)
+C           The order of spline pieces in y.
+C           (Order = polynomial degree + 1)
+C
+C   KZ      Integer scalar (.GE. 2, .LT. NZ)
+C           The order of spline pieces in z.
+C           (Order = polynomial degree + 1)
+C
+C
+C   I N P U T   O R   O U T P U T
+C   -----------------------------
+C
+C   TX      Double precision 1D array (size NX+KX)
+C           The knots in the x direction for the spline interpolant.
+C           If IFLAG=0 these are chosen by DB3INK.
+C           If IFLAG=1 these are specified by the user.
+C                      (Must be non-decreasing.)
+C
+C   TY      Double precision 1D array (size NY+KY)
+C           The knots in the y direction for the spline interpolant.
+C           If IFLAG=0 these are chosen by DB3INK.
+C           If IFLAG=1 these are specified by the user.
+C                      (Must be non-decreasing.)
+C
+C   TZ      Double precision 1D array (size NZ+KZ)
+C           The knots in the z direction for the spline interpolant.
+C           If IFLAG=0 these are chosen by DB3INK.
+C           If IFLAG=1 these are specified by the user.
+C                      (Must be non-decreasing.)
+C
+C
+C   O U T P U T
+C   -----------
+C
+C   BCOEF   Double precision 3D array (size NX by NY by NZ)
+C           Array of coefficients of the B-spline interpolant.
+C           This may be the same array as FCN.
+C
+C
+C   M I S C E L L A N E O U S
+C   -------------------------
+C
+C   WORK    Double precision 1D array (size NX*NY*NZ + max( 2*KX*(NX+1),
+C                             2*KY*(NY+1), 2*KZ*(NZ+1) )
+C           Array of working storage.
+C
+C   IFLAG   Integer scalar.
+C           On input:  0 == knot sequence chosen by B2INK
+C                      1 == knot sequence chosen by user.
+C           On output: 1 == successful execution
+C                      2 == IFLAG out of range
+C                      3 == NX out of range
+C                      4 == KX out of range
+C                      5 == X not strictly increasing
+C                      6 == TX not non-decreasing
+C                      7 == NY out of range
+C                      8 == KY out of range
+C                      9 == Y not strictly increasing
+C                     10 == TY not non-decreasing
+C                     11 == NZ out of range
+C                     12 == KZ out of range
+C                     13 == Z not strictly increasing
+C                     14 == TY not non-decreasing
+C
+C***REFERENCES  CARL DE BOOR, A PRACTICAL GUIDE TO SPLINES,
+C                 SPRINGER-VERLAG, NEW YORK, 1978.
+C               CARL DE BOOR, EFFICIENT COMPUTER MANIPULATION OF TENSOR
+C                 PRODUCTS, ACM TRANSACTIONS ON MATHEMATICAL SOFTWARE,
+C                 VOL. 5 (1979), PP. 173-182.
+C***ROUTINES CALLED  DBTPCF,DBKNOT
+C***END PROLOGUE  DB3INK
+C
+C  ------------
+C  DECLARATIONS
+C  ------------
+C
+C  PARAMETERS
+C
+      INTEGER
+     *        NX, NY, NZ, LDF1, LDF2, KX, KY, KZ, IFLAG
+      DOUBLE PRECISION
+     *     X(NX), Y(NY), Z(NZ), FCN(LDF1,LDF2,NZ), TX(*), TY(*), TZ(*),
+     *     BCOEF(NX,NY,NZ), WORK(*)
+C
+C  LOCAL VARIABLES
+C
+      INTEGER
+     *        I, J, LOC, IW, NPK
+C
+C  -----------------------
+C  CHECK VALIDITY OF INPUT
+C  -----------------------
+C
+C***FIRST EXECUTABLE STATEMENT
+      IF ((IFLAG .LT. 0) .OR. (IFLAG .GT. 1))  GO TO 920
+      IF (NX .LT. 3)  GO TO 930
+      IF (NY .LT. 3)  GO TO 970
+      IF (NZ .LT. 3)  GO TO 1010
+      IF ((KX .LT. 2) .OR. (KX .GE. NX))  GO TO 940
+      IF ((KY .LT. 2) .OR. (KY .GE. NY))  GO TO 980
+      IF ((KZ .LT. 2) .OR. (KZ .GE. NZ))  GO TO 1020
+      DO 10 I=2,NX
+         IF (X(I) .LE. X(I-1))  GO TO 950
+   10 CONTINUE
+      DO 20 I=2,NY
+         IF (Y(I) .LE. Y(I-1))  GO TO 990
+   20 CONTINUE
+      DO 30 I=2,NZ
+         IF (Z(I) .LE. Z(I-1))  GO TO 1030
+   30 CONTINUE
+      IF (IFLAG .EQ. 0)  GO TO 70
+         NPK = NX + KX
+         DO 40 I=2,NPK
+            IF (TX(I) .LT. TX(I-1))  GO TO 960
+   40    CONTINUE
+         NPK = NY + KY
+         DO 50 I=2,NPK
+            IF (TY(I) .LT. TY(I-1))  GO TO 1000
+   50    CONTINUE
+         NPK = NZ + KZ
+         DO 60 I=2,NPK
+            IF (TZ(I) .LT. TZ(I-1))  GO TO 1040
+   60    CONTINUE
+   70 CONTINUE
+C
+C  ------------
+C  CHOOSE KNOTS
+C  ------------
+C
+      
+      IF (IFLAG .NE. 0)  GO TO 100
+         CALL DBKNOT(X,NX,KX,TX)
+         CALL DBKNOT(Y,NY,KY,TY)
+         CALL DBKNOT(Z,NZ,KZ,TZ)
+  100 CONTINUE
+C
+C  -------------------------------
+C  CONSTRUCT B-SPLINE COEFFICIENTS
+C  -------------------------------
+C
+      IFLAG = 1
+      IW = NX*NY*NZ + 1
+C
+C     COPY FCN TO WORK IN PACKED FOR DBTPCF
+C      LOC = 0
+C      DO 510 K=1,NZ
+C         DO 510 J=1,NY
+C            DO 510 I=1,NX
+C               LOC = LOC + 1
+C               WORK(LOC) = FCN(I,J,K)
+C  510 CONTINUE
+C
+C      CALL DBTPCF(X,NX,WORK,NX,NY*NZ,TX,KX,BCOEF,WORK(IW))
+C      CALL DBTPCF(Y,NY,BCOEF,NY,NX*NZ,TY,KY,WORK,WORK(IW))
+C      CALL DBTPCF(Z,NZ,WORK,NZ,NX*NY,TZ,KZ,BCOEF,WORK(IW))
+      
+C  KBW CHANGE ===> eliminate unnecessary copy of FCN to WORK
+      CALL DBTPCF(X,NX,FCN,NX,NY*NZ,TX,KX,BCOEF,WORK(IW))
+      CALL DBTPCF(Y,NY,BCOEF,NY,NX*NZ,TY,KY,WORK,WORK(IW))
+      CALL DBTPCF(Z,NZ,WORK,NZ,NX*NY,TZ,KZ,BCOEF,WORK(IW))
+      
+      
+      GO TO 9999
+C
+C  -----
+C  EXITS
+C  -----
+C
+  920 CONTINUE
+      CALL XERRWV('DB3INK -  IFLAG=I1 IS OUT OF RANGE.',
+     *            35,2,1,1,IFLAG,I2,0,R1,R2)
+      IFLAG = 2
+      GO TO 9999
+C
+  930 CONTINUE
+      IFLAG = 3
+      CALL XERRWV('DB3INK -  NX=I1 IS OUT OF RANGE.',
+     *            32,IFLAG,1,1,NX,I2,0,R1,R2)
+      GO TO 9999
+C
+  940 CONTINUE
+      IFLAG = 4
+      CALL XERRWV('DB3INK -  KX=I1 IS OUT OF RANGE.',
+     *            32,IFLAG,1,1,KX,I2,0,R1,R2)
+      GO TO 9999
+C
+  950 CONTINUE
+      IFLAG = 5
+      CALL XERRWV('DB3INK -  X ARRAY MUST BE STRICTLY INCREASING.',
+     *            46,IFLAG,1,0,I1,I2,0,R1,R2)
+      GO TO 9999
+C
+  960 CONTINUE
+      IFLAG = 6
+      CALL XERRWV('DB3INK -  TX ARRAY MUST BE NON-DECREASING.',
+     *            42,IFLAG,1,0,I1,I2,0,R1,R2)
+      GO TO 9999
+C
+  970 CONTINUE
+      IFLAG = 7
+      CALL XERRWV('DB3INK -  NY=I1 IS OUT OF RANGE.',
+     *            32,IFLAG,1,1,NY,I2,0,R1,R2)
+      GO TO 9999
+C
+  980 CONTINUE
+      IFLAG = 8
+      CALL XERRWV('DB3INK -  KY=I1 IS OUT OF RANGE.',
+     *            32,IFLAG,1,1,KY,I2,0,R1,R2)
+      GO TO 9999
+C
+  990 CONTINUE
+      IFLAG = 9
+      CALL XERRWV('DB3INK -  Y ARRAY MUST BE STRICTLY INCREASING.',
+     *            46,IFLAG,1,0,I1,I2,0,R1,R2)
+      GO TO 9999
+C
+ 1000 CONTINUE
+      IFLAG = 10
+      CALL XERRWV('DB3INK -  TY ARRAY MUST BE NON-DECREASING.',
+     *            42,IFLAG,1,0,I1,I2,0,R1,R2)
+      GO TO 9999
+C
+ 1010 CONTINUE
+      IFLAG = 11
+      CALL XERRWV('DB3INK -  NZ=I1 IS OUT OF RANGE.',
+     *            32,IFLAG,1,1,NZ,I2,0,R1,R2)
+      GO TO 9999
+C
+ 1020 CONTINUE
+      IFLAG = 12
+      write(0,*) '*******************',myid, kz, nz
+      CALL XERRWV('DB3INK -  KZ=I1 IS OUT OF RANGE.',
+     *            32,IFLAG,1,1,KZ,I2,0,R1,R2)
+      GO TO 9999
+C
+ 1030 CONTINUE
+      IFLAG = 13
+      CALL XERRWV('DB3INK -  Z ARRAY MUST BE STRICTLY INCREASING.',
+     *            46,IFLAG,1,0,I1,I2,0,R1,R2)
+      GO TO 9999
+C
+ 1040 CONTINUE
+      IFLAG = 14
+      CALL XERRWV('DB3INK -  TZ ARRAY MUST BE NON-DECREASING.',
+     *            42,IFLAG,1,0,I1,I2,0,R1,R2)
+      GO TO 9999
+C
+ 9999 CONTINUE
+      RETURN
+      END
+      SUBROUTINE DBKNOT(X,N,K,T)
+C***BEGIN PROLOGUE  DBKNOT
+C***REFER TO  DB2INK,DB3INK
+C***ROUTINES CALLED  (NONE)
+C***REVISION HISTORY  (YYMMDD)
+C   000330  Modified array declarations.  (JEC)
+C
+C***END PROLOGUE  DBKNOT
+C
+C  --------------------------------------------------------------------
+C  DBKNOT CHOOSES A KNOT SEQUENCE FOR INTERPOLATION OF ORDER K AT THE
+C  DATA POINTS X(I), I=1,..,N.  THE N+K KNOTS ARE PLACED IN THE ARRAY
+C  T.  K KNOTS ARE PLACED AT EACH ENDPOINT AND NOT-A-KNOT END
+C  CONDITIONS ARE USED.  THE REMAINING KNOTS ARE PLACED AT DATA POINTS
+C  IF N IS EVEN AND BETWEEN DATA POINTS IF N IS ODD.  THE RIGHTMOST
+C  KNOT IS SHIFTED SLIGHTLY TO THE RIGHT TO INSURE PROPER INTERPOLATION
+C  AT X(N) (SEE PAGE 350 OF THE REFERENCE).
+C  DOUBLE PRECISION VERSION OF BKNOT.
+C  --------------------------------------------------------------------
+C
+C  ------------
+C  DECLARATIONS
+C  ------------
+C
+C  PARAMETERS
+C
+      INTEGER
+     *        N, K
+      DOUBLE PRECISION
+     *     X(N), T(*)
+C
+C  LOCAL VARIABLES
+C
+      INTEGER
+     *        I, J, IPJ, NPJ, IP1
+      DOUBLE PRECISION
+     *     RNOT
+C
+C
+C  ----------------------------
+C  PUT K KNOTS AT EACH ENDPOINT
+C  ----------------------------
+C
+C     (SHIFT RIGHT ENPOINTS SLIGHTLY -- SEE PG 350 OF REFERENCE)
+      RNOT = X(N) + 0.10D0*( X(N)-X(N-1) )
+      DO 110 J=1,K
+         T(J) = X(1)
+         NPJ = N + J
+         T(NPJ) = RNOT
+  110 CONTINUE
+C
+C  --------------------------
+C  DISTRIBUTE REMAINING KNOTS
+C  --------------------------
+C
+      IF (MOD(K,2) .EQ. 1)  GO TO 150
+C
+C     CASE OF EVEN K --  KNOTS AT DATA POINTS
+C
+      I = (K/2) - K
+      JSTRT = K+1
+      DO 120 J=JSTRT,N
+         IPJ = I + J
+         T(J) = X(IPJ)
+  120 CONTINUE
+      GO TO 200
+C
+C     CASE OF ODD K --  KNOTS BETWEEN DATA POINTS
+C
+  150 CONTINUE
+      I = (K-1)/2 - K
+      IP1 = I + 1
+      JSTRT = K + 1
+      DO 160 J=JSTRT,N
+         IPJ = I + J
+         T(J) = 0.50D0*( X(IPJ) + X(IPJ+1) )
+  160 CONTINUE
+  200 CONTINUE
+C
+      RETURN
+      END
+      SUBROUTINE DBTPCF(X,N,FCN,LDF,NF,T,K,BCOEF,WORK)
+C***BEGIN PROLOGUE  DBTPCF
+C***REFER TO  DB2INK,DB3INK
+C***ROUTINES CALLED  DBINTK,DBNSLV
+C***REVISION HISTORY  (YYMMDD)
+C   000330  Modified array declarations.  (JEC)
+C
+C***END PROLOGUE  DBTPCF
+C
+C  -----------------------------------------------------------------
+C  DBTPCF COMPUTES B-SPLINE INTERPOLATION COEFFICIENTS FOR NF SETS
+C  OF DATA STORED IN THE COLUMNS OF THE ARRAY FCN. THE B-SPLINE
+C  COEFFICIENTS ARE STORED IN THE ROWS OF BCOEF HOWEVER.
+C  EACH INTERPOLATION IS BASED ON THE N ABCISSA STORED IN THE
+C  ARRAY X, AND THE N+K KNOTS STORED IN THE ARRAY T. THE ORDER
+C  OF EACH INTERPOLATION IS K. THE WORK ARRAY MUST BE OF LENGTH
+C  AT LEAST 2*K*(N+1).
+C  DOUBLE PRECISION VERSION OF BTPCF.
+C  -----------------------------------------------------------------
+C
+C  ------------
+C  DECLARATIONS
+C  ------------
+C
+C  PARAMETERS
+C
+      INTEGER
+     *        N, LDF, K
+      DOUBLE PRECISION
+     *     X(N), FCN(LDF,NF), T(*), BCOEF(NF,N), WORK(*)
+C
+C  LOCAL VARIABLES
+C
+      INTEGER
+     *        I, J, K1, K2, IQ, IW
+C
+C  ---------------------------------------------
+C  CHECK FOR NULL INPUT AND PARTITION WORK ARRAY
+C  ---------------------------------------------
+C
+C***FIRST EXECUTABLE STATEMENT
+      IF (NF .LE. 0)  GO TO 500
+      K1 = K - 1
+      K2 = K1 + K
+      IQ = 1 + N
+      IW = IQ + K2*N+1
+C
+C  -----------------------------
+C  COMPUTE B-SPLINE COEFFICIENTS
+C  -----------------------------
+C
+C
+C   FIRST DATA SET
+C
+      CALL DBINTK(X,FCN,T,N,K,WORK,WORK(IQ),WORK(IW))
+      DO 20 I=1,N
+         BCOEF(1,I) = WORK(I)
+   20 CONTINUE
+C
+C  ALL REMAINING DATA SETS BY BACK-SUBSTITUTION
+C
+      IF (NF .EQ. 1)  GO TO 500
+      DO 100 J=2,NF
+         DO 50 I=1,N
+            WORK(I) = FCN(I,J)
+   50    CONTINUE
+         CALL DBNSLV(WORK(IQ),K2,N,K1,K1,WORK)
+         DO 60 I=1,N
+            BCOEF(J,I) = WORK(I)
+   60    CONTINUE
+  100 CONTINUE
+C
+C  ----
+C  EXIT
+C  ----
+C
+  500 CONTINUE
+      RETURN
+      END
+      SUBROUTINE XERRWV(MESSG,NMESSG,NERR,LEVEL,NI,I1,I2,NR,R1,R2)
+C***BEGIN PROLOGUE  XERRWV
+C***DATE WRITTEN   800319   (YYMMDD)
+C***REVISION DATE  820801   (YYMMDD)
+C***CATEGORY NO.  R3C
+C***KEYWORDS  ERROR,XERROR PACKAGE
+C***AUTHOR  JONES, R. E., (SNLA)
+C***PURPOSE  Processes error message allowing 2 integer and two real
+C            values to be included in the message.
+C***DESCRIPTION
+C     Abstract
+C        XERRWV processes a diagnostic message, in a manner
+C        determined by the value of LEVEL and the current value
+C        of the library error control flag, KONTRL.
+C        (See subroutine XSETF for details.)
+C        In addition, up to two integer values and two real
+C        values may be printed along with the message.
+C
+C     Description of Parameters
+C      --Input--
+C        MESSG - the Hollerith message to be processed.
+C        NMESSG- the actual number of characters in MESSG.
+C        NERR  - the error number associated with this message.
+C                NERR must not be zero.
+C        LEVEL - error category.
+C                =2 means this is an unconditionally fatal error.
+C                =1 means this is a recoverable error.  (I.e., it is
+C                   non-fatal if XSETF has been appropriately called.)
+C                =0 means this is a warning message only.
+C                =-1 means this is a warning message which is to be
+C                   printed at most once, regardless of how many
+C                   times this call is executed.
+C        NI    - number of integer values to be printed. (0 to 2)
+C        I1    - first integer value.
+C        I2    - second integer value.
+C        NR    - number of real values to be printed. (0 to 2)
+C        R1    - first real value.
+C        R2    - second real value.
+C
+C     Examples
+C        CALL XERRWV('SMOOTH -- NUM (=I1) WAS ZERO.',29,1,2,
+C    1   1,NUM,0,0,0.,0.)
+C        CALL XERRWV('QUADXY -- REQUESTED ERROR (R1) LESS THAN MINIMUM (
+C    1R2).,54,77,1,0,0,0,2,ERRREQ,ERRMIN')
+C
+C     Latest revision ---  19 MAR 1980
+C     Written by Ron Jones, with SLATEC Common Math Library Subcommittee
+C***REFERENCES  JONES R.E., KAHANER D.K., "XERROR, THE SLATEC ERROR-
+C                 HANDLING PACKAGE", SAND82-0800, SANDIA LABORATORIES,
+C                 1982.
+C***ROUTINES CALLED  FDUMP,I1MACH,J4SAVE,XERABT,XERCTL,XERPRT,XERSAV,
+C                    XGETUA
+C***END PROLOGUE  XERRWV
+      CHARACTER*(*) MESSG
+      CHARACTER*20 LFIRST
+      CHARACTER*37 FORM
+      DIMENSION LUN(5)
+C     GET FLAGS
+C***FIRST EXECUTABLE STATEMENT  XERRWV
+      LKNTRL = J4SAVE(2,0,.FALSE.)
+      MAXMES = J4SAVE(4,0,.FALSE.)
+C     CHECK FOR VALID INPUT
+      IF ((NMESSG.GT.0).AND.(NERR.NE.0).AND.
+     1    (LEVEL.GE.(-1)).AND.(LEVEL.LE.2)) GO TO 10
+         IF (LKNTRL.GT.0) CALL XERPRT('FATAL ERROR IN...',17)
+         CALL XERPRT('XERROR -- INVALID INPUT',23)
+         IF (LKNTRL.GT.0) CALL FDUMP
+         IF (LKNTRL.GT.0) CALL XERPRT('JOB ABORT DUE TO FATAL ERROR.',
+     1  29)
+         IF (LKNTRL.GT.0) CALL XERSAV(' ',0,0,0,KDUMMY)
+         CALL XERABT('XERROR -- INVALID INPUT',23)
+         RETURN
+   10 CONTINUE
+C     RECORD MESSAGE
+      JUNK = J4SAVE(1,NERR,.TRUE.)
+      CALL XERSAV(MESSG,NMESSG,NERR,LEVEL,KOUNT)
+C     LET USER OVERRIDE
+      LFIRST = MESSG
+      LMESSG = NMESSG
+      LERR = NERR
+      LLEVEL = LEVEL
+      CALL XERCTL(LFIRST,LMESSG,LERR,LLEVEL,LKNTRL)
+C     RESET TO ORIGINAL VALUES
+      LMESSG = NMESSG
+      LERR = NERR
+      LLEVEL = LEVEL
+      LKNTRL = MAX0(-2,MIN0(2,LKNTRL))
+      MKNTRL = IABS(LKNTRL)
+C     DECIDE WHETHER TO PRINT MESSAGE
+      IF ((LLEVEL.LT.2).AND.(LKNTRL.EQ.0)) GO TO 100
+      IF (((LLEVEL.EQ.(-1)).AND.(KOUNT.GT.MIN0(1,MAXMES)))
+     1.OR.((LLEVEL.EQ.0)   .AND.(KOUNT.GT.MAXMES))
+     2.OR.((LLEVEL.EQ.1)   .AND.(KOUNT.GT.MAXMES).AND.(MKNTRL.EQ.1))
+     3.OR.((LLEVEL.EQ.2)   .AND.(KOUNT.GT.MAX0(1,MAXMES)))) GO TO 100
+         IF (LKNTRL.LE.0) GO TO 20
+            CALL XERPRT(' ',1)
+C           INTRODUCTION
+            IF (LLEVEL.EQ.(-1)) CALL XERPRT
+     1('WARNING MESSAGE...THIS MESSAGE WILL ONLY BE PRINTED ONCE.',57)
+            IF (LLEVEL.EQ.0) CALL XERPRT('WARNING IN...',13)
+            IF (LLEVEL.EQ.1) CALL XERPRT
+     1      ('RECOVERABLE ERROR IN...',23)
+            IF (LLEVEL.EQ.2) CALL XERPRT('FATAL ERROR IN...',17)
+   20    CONTINUE
+C        MESSAGE
+         CALL XERPRT(MESSG,LMESSG)
+         CALL XGETUA(LUN,NUNIT)
+         ISIZEI = LOG10(FLOAT(I1MACH(9))) + 1.0
+         ISIZEF = LOG10(FLOAT(I1MACH(10))**I1MACH(11)) + 1.0
+         DO 50 KUNIT=1,NUNIT
+            IUNIT = LUN(KUNIT)
+            IF (IUNIT.EQ.0) IUNIT = I1MACH(4)
+            DO 22 I=1,MIN(NI,2)
+               WRITE (FORM,21) I,ISIZEI
+   21          FORMAT ('(11X,21HIN ABOVE MESSAGE, I',I1,'=,I',I2,')   ')
+               IF (I.EQ.1) WRITE (IUNIT,FORM) I1
+               IF (I.EQ.2) WRITE (IUNIT,FORM) I2
+   22       CONTINUE
+            DO 24 I=1,MIN(NR,2)
+               WRITE (FORM,23) I,ISIZEF+10,ISIZEF
+   23          FORMAT ('(11X,21HIN ABOVE MESSAGE, R',I1,'=,E',
+     1         I2,'.',I2,')')
+               IF (I.EQ.1) WRITE (IUNIT,FORM) R1
+               IF (I.EQ.2) WRITE (IUNIT,FORM) R2
+   24       CONTINUE
+            IF (LKNTRL.LE.0) GO TO 40
+C              ERROR NUMBER
+               WRITE (IUNIT,30) LERR
+   30          FORMAT (15H ERROR NUMBER =,I10)
+   40       CONTINUE
+   50    CONTINUE
+C        TRACE-BACK
+         IF (LKNTRL.GT.0) CALL FDUMP
+  100 CONTINUE
+      IFATAL = 0
+      IF ((LLEVEL.EQ.2).OR.((LLEVEL.EQ.1).AND.(MKNTRL.EQ.2)))
+     1IFATAL = 1
+C     QUIT HERE IF MESSAGE IS NOT FATAL
+      IF (IFATAL.LE.0) RETURN
+      IF ((LKNTRL.LE.0).OR.(KOUNT.GT.MAX0(1,MAXMES))) GO TO 120
+C        PRINT REASON FOR ABORT
+         IF (LLEVEL.EQ.1) CALL XERPRT
+     1   ('JOB ABORT DUE TO UNRECOVERED ERROR.',35)
+         IF (LLEVEL.EQ.2) CALL XERPRT
+     1   ('JOB ABORT DUE TO FATAL ERROR.',29)
+C        PRINT ERROR SUMMARY
+         CALL XERSAV(' ',-1,0,0,KDUMMY)
+  120 CONTINUE
+C     ABORT
+      IF ((LLEVEL.EQ.2).AND.(KOUNT.GT.MAX0(1,MAXMES))) LMESSG = 0
+      CALL XERABT(MESSG,LMESSG)
+      RETURN
+      END
+      SUBROUTINE XERSAV(MESSG,NMESSG,NERR,LEVEL,ICOUNT)
+C***BEGIN PROLOGUE  XERSAV
+C***DATE WRITTEN   800319   (YYMMDD)
+C***REVISION DATE  820801   (YYMMDD)
+C***CATEGORY NO.  Z
+C***KEYWORDS  ERROR,XERROR PACKAGE
+C***AUTHOR  JONES, R. E., (SNLA)
+C***PURPOSE  Records that an error occurred.
+C***DESCRIPTION
+C     Abstract
+C        Record that this error occurred.
+C
+C     Description of Parameters
+C     --Input--
+C       MESSG, NMESSG, NERR, LEVEL are as in XERROR,
+C       except that when NMESSG=0 the tables will be
+C       dumped and cleared, and when NMESSG is less than zero the
+C       tables will be dumped and not cleared.
+C     --Output--
+C       ICOUNT will be the number of times this message has
+C       been seen, or zero if the table has overflowed and
+C       does not contain this message specifically.
+C       When NMESSG=0, ICOUNT will not be altered.
+C
+C     Written by Ron Jones, with SLATEC Common Math Library Subcommittee
+C     Latest revision ---  19 Mar 1980
+C***REFERENCES  JONES R.E., KAHANER D.K., "XERROR, THE SLATEC ERROR-
+C                 HANDLING PACKAGE", SAND82-0800, SANDIA LABORATORIES,
+C                 1982.
+C***ROUTINES CALLED  I1MACH,S88FMT,XGETUA
+C***END PROLOGUE  XERSAV
+      INTEGER LUN(5)
+      CHARACTER*(*) MESSG
+      CHARACTER*20 MESTAB(10),MES
+      DIMENSION NERTAB(10),LEVTAB(10),KOUNT(10)
+      SAVE MESTAB,NERTAB,LEVTAB,KOUNT,KOUNTX
+C     NEXT TWO DATA STATEMENTS ARE NECESSARY TO PROVIDE A BLANK
+C     ERROR TABLE INITIALLY
+      DATA KOUNT(1),KOUNT(2),KOUNT(3),KOUNT(4),KOUNT(5),
+     1     KOUNT(6),KOUNT(7),KOUNT(8),KOUNT(9),KOUNT(10)
+     2     /0,0,0,0,0,0,0,0,0,0/
+      DATA KOUNTX/0/
+C***FIRST EXECUTABLE STATEMENT  XERSAV
+      IF (NMESSG.GT.0) GO TO 80
+C     DUMP THE TABLE
+         IF (KOUNT(1).EQ.0) RETURN
+C        PRINT TO EACH UNIT
+         CALL XGETUA(LUN,NUNIT)
+         DO 60 KUNIT=1,NUNIT
+            IUNIT = LUN(KUNIT)
+            IF (IUNIT.EQ.0) IUNIT = I1MACH(4)
+C           PRINT TABLE HEADER
+            WRITE (IUNIT,10)
+   10       FORMAT (32H0          ERROR MESSAGE SUMMARY/
+     1      51H MESSAGE START             NERR     LEVEL     COUNT)
+C           PRINT BODY OF TABLE
+            DO 20 I=1,10
+               IF (KOUNT(I).EQ.0) GO TO 30
+               WRITE (IUNIT,15) MESTAB(I),NERTAB(I),LEVTAB(I),KOUNT(I)
+   15          FORMAT (1X,A20,3I10)
+   20       CONTINUE
+   30       CONTINUE
+C           PRINT NUMBER OF OTHER ERRORS
+            IF (KOUNTX.NE.0) WRITE (IUNIT,40) KOUNTX
+   40       FORMAT (41H0OTHER ERRORS NOT INDIVIDUALLY TABULATED=,I10)
+            WRITE (IUNIT,50)
+   50       FORMAT (1X)
+   60    CONTINUE
+         IF (NMESSG.LT.0) RETURN
+C        CLEAR THE ERROR TABLES
+         DO 70 I=1,10
+   70       KOUNT(I) = 0
+         KOUNTX = 0
+         RETURN
+   80 CONTINUE
+C     PROCESS A MESSAGE...
+C     SEARCH FOR THIS MESSG, OR ELSE AN EMPTY SLOT FOR THIS MESSG,
+C     OR ELSE DETERMINE THAT THE ERROR TABLE IS FULL.
+      MES = MESSG
+      DO 90 I=1,10
+         II = I
+         IF (KOUNT(I).EQ.0) GO TO 110
+         IF (MES.NE.MESTAB(I)) GO TO 90
+         IF (NERR.NE.NERTAB(I)) GO TO 90
+         IF (LEVEL.NE.LEVTAB(I)) GO TO 90
+         GO TO 100
+   90 CONTINUE
+C     THREE POSSIBLE CASES...
+C     TABLE IS FULL
+         KOUNTX = KOUNTX+1
+         ICOUNT = 1
+         RETURN
+C     MESSAGE FOUND IN TABLE
+  100    KOUNT(II) = KOUNT(II) + 1
+         ICOUNT = KOUNT(II)
+         RETURN
+C     EMPTY SLOT FOUND FOR NEW MESSAGE
+  110    MESTAB(II) = MES
+         NERTAB(II) = NERR
+         LEVTAB(II) = LEVEL
+         KOUNT(II)  = 1
+         ICOUNT = 1
+         RETURN
+      END
+      SUBROUTINE XGETUA(IUNITA,N)
+C***BEGIN PROLOGUE  XGETUA
+C***DATE WRITTEN   790801   (YYMMDD)
+C***REVISION DATE  820801   (YYMMDD)
+C***CATEGORY NO.  R3C
+C***KEYWORDS  ERROR,XERROR PACKAGE
+C***AUTHOR  JONES, R. E., (SNLA)
+C***PURPOSE  Returns unit number(s) to which error messages are being
+C            sent.
+C***DESCRIPTION
+C     Abstract
+C        XGETUA may be called to determine the unit number or numbers
+C        to which error messages are being sent.
+C        These unit numbers may have been set by a call to XSETUN,
+C        or a call to XSETUA, or may be a default value.
+C
+C     Description of Parameters
+C      --Output--
+C        IUNIT - an array of one to five unit numbers, depending
+C                on the value of N.  A value of zero refers to the
+C                default unit, as defined by the I1MACH machine
+C                constant routine.  Only IUNIT(1),...,IUNIT(N) are
+C                defined by XGETUA.  The values of IUNIT(N+1),...,
+C                IUNIT(5) are not defined (for N .LT. 5) or altered
+C                in any way by XGETUA.
+C        N     - the number of units to which copies of the
+C                error messages are being sent.  N will be in the
+C                range from 1 to 5.
+C
+C     Latest revision ---  19 MAR 1980
+C     Written by Ron Jones, with SLATEC Common Math Library Subcommittee
+C***REFERENCES  JONES R.E., KAHANER D.K., "XERROR, THE SLATEC ERROR-
+C                 HANDLING PACKAGE", SAND82-0800, SANDIA LABORATORIES,
+C                 1982.
+C***ROUTINES CALLED  J4SAVE
+C***END PROLOGUE  XGETUA
+      DIMENSION IUNITA(5)
+C***FIRST EXECUTABLE STATEMENT  XGETUA
+      N = J4SAVE(5,0,.FALSE.)
+      DO 30 I=1,N
+         INDEX = I+4
+         IF (I.EQ.1) INDEX = 3
+         IUNITA(I) = J4SAVE(INDEX,0,.FALSE.)
+   30 CONTINUE
+      RETURN
+      END
+      INTEGER FUNCTION I1MACH(I)
+C***BEGIN PROLOGUE  I1MACH
+C***DATE WRITTEN   750101   (YYMMDD)
+C***REVISION DATE  840405   (YYMMDD)
+C***CATEGORY NO.  R1
+C***KEYWORDS  MACHINE CONSTANTS
+C***AUTHOR  FOX, P. A., (BELL LABS)
+C           HALL, A. D., (BELL LABS)
+C           SCHRYER, N. L., (BELL LABS)
+C***PURPOSE  Returns integer machine dependent constants
+C***DESCRIPTION
+C
+C     This is the CMLIB version of I1MACH, the integer machine
+C     constants subroutine originally developed for the PORT library.
+C
+C     I1MACH can be used to obtain machine-dependent parameters
+C     for the local machine environment.  It is a function
+C     subroutine with one (input) argument, and can be called
+C     as follows, for example
+C
+C          K = I1MACH(I)
+C
+C     where I=1,...,16.  The (output) value of K above is
+C     determined by the (input) value of I.  The results for
+C     various values of I are discussed below.
+C
+C  I/O unit numbers.
+C    I1MACH( 1) = the standard input unit.
+C    I1MACH( 2) = the standard output unit.
+C    I1MACH( 3) = the standard punch unit.
+C    I1MACH( 4) = the standard error message unit.
+C
+C  Words.
+C    I1MACH( 5) = the number of bits per integer storage unit.
+C    I1MACH( 6) = the number of characters per integer storage unit.
+C
+C  Integers.
+C    assume integers are represented in the S-digit, base-A form
+C
+C               sign ( X(S-1)*A**(S-1) + ... + X(1)*A + X(0) )
+C
+C               where 0 .LE. X(I) .LT. A for I=0,...,S-1.
+C    I1MACH( 7) = A, the base.
+C    I1MACH( 8) = S, the number of base-A digits.
+C    I1MACH( 9) = A**S - 1, the largest magnitude.
+C
+C  Floating-Point Numbers.
+C    Assume floating-point numbers are represented in the T-digit,
+C    base-B form
+C               sign (B**E)*( (X(1)/B) + ... + (X(T)/B**T) )
+C
+C               where 0 .LE. X(I) .LT. B for I=1,...,T,
+C               0 .LT. X(1), and EMIN .LE. E .LE. EMAX.
+C    I1MACH(10) = B, the base.
+C
+C  Single-Precision
+C    I1MACH(11) = T, the number of base-B digits.
+C    I1MACH(12) = EMIN, the smallest exponent E.
+C    I1MACH(13) = EMAX, the largest exponent E.
+C
+C  Double-Precision
+C    I1MACH(14) = T, the number of base-B digits.
+C    I1MACH(15) = EMIN, the smallest exponent E.
+C    I1MACH(16) = EMAX, the largest exponent E.
+C
+C  To alter this function for a particular environment,
+C  the desired set of DATA statements should be activated by
+C  removing the C from column 1.  Also, the values of
+C  I1MACH(1) - I1MACH(4) should be checked for consistency
+C  with the local operating system.
+C***REFERENCES  FOX P.A., HALL A.D., SCHRYER N.L.,*FRAMEWORK FOR A
+C                 PORTABLE LIBRARY*, ACM TRANSACTIONS ON MATHEMATICAL
+C                 SOFTWARE, VOL. 4, NO. 2, JUNE 1978, PP. 177-188.
+C***ROUTINES CALLED  (NONE)
+C***END PROLOGUE  I1MACH
+C
+      INTEGER IMACH(16),OUTPUT
+      EQUIVALENCE (IMACH(4),OUTPUT)
+
+C***FIRST EXECUTABLE STATEMENT  I1MACH
+C
+      I1MACH=IMACH(I)
+      RETURN
+      END
+      
+      SUBROUTINE DBINTK(X,Y,T,N,K,BCOEF,Q,WORK)
+C***BEGIN PROLOGUE  DBINTK
+C***DATE WRITTEN   800901   (YYMMDD)
+C***REVISION DATE  820801   (YYMMDD)
+C***REVISION HISTORY  (YYMMDD)
+C   000330  Modified array declarations.  (JEC)
+C
+C***CATEGORY NO.  E1A
+C***KEYWORDS  B-SPLINE,DATA FITTING,DOUBLE PRECISION,INTERPOLATION,
+C             SPLINE
+C***AUTHOR  AMOS, D. E., (SNLA)
+C***PURPOSE  Produces the B-spline coefficients, BCOEF, of the
+C            B-spline of order K with knots T(I), I=1,...,N+K, which
+C            takes on the value Y(I) at X(I), I=1,...,N.
+C***DESCRIPTION
+C
+C     Written by Carl de Boor and modified by D. E. Amos
+C
+C     References
+C
+C         A Practical Guide to Splines by C. de Boor, Applied
+C         Mathematics Series 27, Springer, 1979.
+C
+C     Abstract    **** a double precision routine ****
+C
+C         DBINTK is the SPLINT routine of the reference.
+C
+C         DBINTK produces the B-spline coefficients, BCOEF, of the
+C         B-spline of order K with knots T(I), I=1,...,N+K, which
+C         takes on the value Y(I) at X(I), I=1,...,N.  The spline or
+C         any of its derivatives can be evaluated by calls to DBVALU.
+C
+C         The I-th equation of the linear system A*BCOEF = B for the
+C         coefficients of the interpolant enforces interpolation at
+C         X(I), I=1,...,N.  Hence, B(I) = Y(I), for all I, and A is
+C         a band matrix with 2K-1 bands if A is invertible.  The matrix
+C         A is generated row by row and stored, diagonal by diagonal,
+C         in the rows of Q, with the main diagonal going into row K.
+C         The banded system is then solved by a call to DBNFAC (which
+C         constructs the triangular factorization for A and stores it
+C         again in Q), followed by a call to DBNSLV (which then
+C         obtains the solution BCOEF by substitution).  DBNFAC does no
+C         pivoting, since the total positivity of the matrix A makes
+C         this unnecessary.  The linear system to be solved is
+C         (theoretically) invertible if and only if
+C                 T(I) .LT. X(I) .LT. T(I+K),        for all I.
+C         Equality is permitted on the left for I=1 and on the right
+C         for I=N when K knots are used at X(1) or X(N).  Otherwise,
+C         violation of this condition is certain to lead to an error.
+C
+C         DBINTK calls DBSPVN, DBNFAC, DBNSLV, XERROR
+C
+C     Description of Arguments
+C
+C         Input       X,Y,T are double precision
+C           X       - vector of length N containing data point abscissa
+C                     in strictly increasing order.
+C           Y       - corresponding vector of length N containing data
+C                     point ordinates.
+C           T       - knot vector of length N+K
+C                     Since T(1),..,T(K) .LE. X(1) and T(N+1),..,T(N+K)
+C                     .GE. X(N), this leaves only N-K knots (not nec-
+C                     essarily X(I) values) interior to (X(1),X(N))
+C           N       - number of data points, N .GE. K
+C           K       - order of the spline, K .GE. 1
+C
+C         Output      BCOEF,Q,WORK are double precision
+C           BCOEF   - a vector of length N containing the B-spline
+C                     coefficients
+C           Q       - a work vector of length (2*K-1)*N, containing
+C                     the triangular factorization of the coefficient
+C                     matrix of the linear system being solved.  The
+C                     coefficients for the interpolant of an
+C                     additional data set (X(I),yY(I)), I=1,...,N
+C                     with the same abscissa can be obtained by loading
+C                     YY into BCOEF and then executing
+C                         CALL DBNSLV(Q,2K-1,N,K-1,K-1,BCOEF)
+C           WORK    - work vector of length 2*K
+C
+C     Error Conditions
+C         Improper input is a fatal error
+C         Singular system of equations is a fatal error
+C***REFERENCES  C. DE BOOR, *A PRACTICAL GUIDE TO SPLINES*, APPLIED
+C                 MATHEMATICS SERIES 27, SPRINGER, 1979.
+C               D.E. AMOS, *COMPUTATION WITH SPLINES AND B-SPLINES*,
+C                 SAND78-1968,SANDIA LABORATORIES,MARCH,1979.
+C***ROUTINES CALLED  DBNFAC,DBNSLV,DBSPVN,XERROR
+C***END PROLOGUE  DBINTK
+C
+C
+      INTEGER IFLAG, IWORK, K, N, I, ILP1MX, J, JJ, KM1, KPKM2, LEFT,
+     1 LENQ, NP1
+      DOUBLE PRECISION BCOEF(N), Y(N), Q(*), T(*), X(N), XI, WORK(*)
+C     DIMENSION Q(2*K-1,N), T(N+K)
+C***FIRST EXECUTABLE STATEMENT  DBINTK
+      IF(K.LT.1) GO TO 100
+      IF(N.LT.K) GO TO 105
+      JJ = N - 1
+      IF(JJ.EQ.0) GO TO 6
+      DO 5 I=1,JJ
+      IF(X(I).GE.X(I+1)) GO TO 110
+    5 CONTINUE
+    6 CONTINUE
+      NP1 = N + 1
+      KM1 = K - 1
+      KPKM2 = 2*KM1
+      LEFT = K
+C                ZERO OUT ALL ENTRIES OF Q
+      LENQ = N*(K+KM1)
+      DO 10 I=1,LENQ
+        Q(I) = 0.0D0
+   10 CONTINUE
+C
+C  ***   LOOP OVER I TO CONSTRUCT THE  N  INTERPOLATION EQUATIONS
+      DO 50 I=1,N
+        XI = X(I)
+        ILP1MX = MIN0(I+K,NP1)
+C        *** FIND  LEFT  IN THE CLOSED INTERVAL (I,I+K-1) SUCH THAT
+C                T(LEFT) .LE. X(I) .LT. T(LEFT+1)
+C        MATRIX IS SINGULAR IF THIS IS NOT POSSIBLE
+        LEFT = MAX0(LEFT,I)
+        IF (XI.LT.T(LEFT)) GO TO 80
+   20   IF (XI.LT.T(LEFT+1)) GO TO 30
+        LEFT = LEFT + 1
+        IF (LEFT.LT.ILP1MX) GO TO 20
+        LEFT = LEFT - 1
+        IF (XI.GT.T(LEFT+1)) GO TO 80
+C        *** THE I-TH EQUATION ENFORCES INTERPOLATION AT XI, HENCE
+C        A(I,J) = B(J,K,T)(XI), ALL J. ONLY THE  K  ENTRIES WITH  J =
+C        LEFT-K+1,...,LEFT ACTUALLY MIGHT BE NONZERO. THESE  K  NUMBERS
+C        ARE RETURNED, IN  BCOEF (USED FOR TEMP.STORAGE HERE), BY THE
+C        FOLLOWING
+   30   CALL DBSPVN(T, K, K, 1, XI, LEFT, BCOEF, WORK, IWORK)
+C        WE THEREFORE WANT  BCOEF(J) = B(LEFT-K+J)(XI) TO GO INTO
+C        A(I,LEFT-K+J), I.E., INTO  Q(I-(LEFT+J)+2*K,(LEFT+J)-K) SINCE
+C        A(I+J,J)  IS TO GO INTO  Q(I+K,J), ALL I,J,  IF WE CONSIDER  Q
+C        AS A TWO-DIM. ARRAY , WITH  2*K-1  ROWS (SEE COMMENTS IN
+C        DBNFAC). IN THE PRESENT PROGRAM, WE TREAT  Q  AS AN EQUIVALENT
+C        ONE-DIMENSIONAL ARRAY (BECAUSE OF FORTRAN RESTRICTIONS ON
+C        DIMENSION STATEMENTS) . WE THEREFORE WANT  BCOEF(J) TO GO INTO
+C        ENTRY
+C            I -(LEFT+J) + 2*K + ((LEFT+J) - K-1)*(2*K-1)
+C                   =  I-LEFT+1 + (LEFT -K)*(2*K-1) + (2*K-2)*J
+C        OF  Q .
+        JJ = I - LEFT + 1 + (LEFT-K)*(K+KM1)
+        DO 40 J=1,K
+          JJ = JJ + KPKM2
+          Q(JJ) = BCOEF(J)
+   40   CONTINUE
+   50 CONTINUE
+C
+C     ***OBTAIN FACTORIZATION OF  A  , STORED AGAIN IN  Q.
+      CALL DBNFAC(Q, K+KM1, N, KM1, KM1, IFLAG)
+      GO TO (60, 90), IFLAG
+C     *** SOLVE  A*BCOEF = Y  BY BACKSUBSTITUTION
+   60 DO 70 I=1,N
+        BCOEF(I) = Y(I)
+   70 CONTINUE
+      CALL DBNSLV(Q, K+KM1, N, KM1, KM1, BCOEF)
+      RETURN
+C
+C
+   80 CONTINUE
+      CALL XERROR( ' DBINTK,  SOME ABSCISSA WAS NOT IN THE SUPPORT OF TH
+     1E CORRESPONDING BASIS FUNCTION AND THE SYSTEM IS SINGULAR.',109,2,
+     21)
+      RETURN
+   90 CONTINUE
+      CALL XERROR( ' DBINTK,  THE SYSTEM OF SOLVER DETECTS A SINGULAR SY
+     1STEM ALTHOUGH THE THEORETICAL CONDITIONS FOR A SOLUTION WERE SATIS
+     2FIED.',123,8,1)
+      RETURN
+  100 CONTINUE
+      CALL XERROR( ' DBINTK,  K DOES NOT SATISFY K.GE.1', 35, 2, 1)
+      RETURN
+  105 CONTINUE
+      CALL XERROR( ' DBINTK,  N DOES NOT SATISFY N.GE.K', 35, 2, 1)
+      RETURN
+  110 CONTINUE
+      CALL XERROR( ' DBINTK,  X(I) DOES NOT SATISFY X(I).LT.X(I+1) FOR S
+     1OME I', 57, 2, 1)
+      RETURN
+      END
+      SUBROUTINE DBNFAC(W,NROWW,NROW,NBANDL,NBANDU,IFLAG)
+C***BEGIN PROLOGUE  DBNFAC
+C***REFER TO  DBINT4,DBINTK
+C
+C  DBNFAC is the BANFAC routine from
+C        * A Practical Guide to Splines *  by C. de Boor
+C
+C  DBNFAC is a double precision routine
+C
+C  Returns in  W  the LU-factorization (without pivoting) of the banded
+C  matrix  A  of order  NROW  with  (NBANDL + 1 + NBANDU) bands or diag-
+C  onals in the work array  W .
+C
+C *****  I N P U T  ****** W is double precision
+C  W.....Work array of size  (NROWW,NROW)  containing the interesting
+C        part of a banded matrix  A , with the diagonals or bands of  A
+C        stored in the rows of  W , while columns of  A  correspond to
+C        columns of  W . This is the storage mode used in  LINPACK  and
+C        results in efficient innermost loops.
+C           Explicitly,  A  has  NBANDL  bands below the diagonal
+C                            +     1     (main) diagonal
+C                            +   NBANDU  bands above the diagonal
+C        and thus, with    MIDDLE = NBANDU + 1,
+C          A(I+J,J)  is in  W(I+MIDDLE,J)  for I=-NBANDU,...,NBANDL
+C                                              J=1,...,NROW .
+C        For example, the interesting entries of A (1,2)-banded matrix
+C        of order  9  would appear in the first  1+1+2 = 4  rows of  W
+C        as follows.
+C                          13 24 35 46 57 68 79
+C                       12 23 34 45 56 67 78 89
+C                    11 22 33 44 55 66 77 88 99
+C                    21 32 43 54 65 76 87 98
+C
+C        All other entries of  W  not identified in this way with an en-
+C        try of  A  are never referenced .
+C  NROWW.....Row dimension of the work array  W .
+C        must be  .GE.  NBANDL + 1 + NBANDU  .
+C  NBANDL.....Number of bands of  A  below the main diagonal
+C  NBANDU.....Number of bands of  A  above the main diagonal .
+C
+C *****  O U T P U T  ****** W is double precision
+C  IFLAG.....Integer indicating success( = 1) or failure ( = 2) .
+C     If  IFLAG = 1, then
+C  W.....contains the LU-factorization of  A  into a unit lower triangu-
+C        lar matrix  L  and an upper triangular matrix  U (both banded)
+C        and stored in customary fashion over the corresponding entries
+C        of  A . This makes it possible to solve any particular linear
+C        system  A*X = B  for  X  by a
+C              CALL DBNSLV ( W, NROWW, NROW, NBANDL, NBANDU, B )
+C        with the solution X  contained in  B  on return .
+C     If  IFLAG = 2, then
+C        one of  NROW-1, NBANDL,NBANDU failed to be nonnegative, or else
+C        one of the potential pivots was found to be zero indicating
+C        that  A  does not have an LU-factorization. This implies that
+C        A  is singular in case it is totally positive .
+C
+C *****  M E T H O D  ******
+C     Gauss elimination  W I T H O U T  pivoting is used. The routine is
+C  intended for use with matrices  A  which do not require row inter-
+C  changes during factorization, especially for the  T O T A L L Y
+C  P O S I T I V E  matrices which occur in spline calculations.
+C     The routine should NOT be used for an arbitrary banded matrix.
+C***ROUTINES CALLED  (NONE)
+C***END PROLOGUE  DBNFAC
+C
+      INTEGER IFLAG, NBANDL, NBANDU, NROW, NROWW, I, IPK, J, JMAX, K,
+     1 KMAX, MIDDLE, MIDMK, NROWM1
+      DOUBLE PRECISION W(NROWW,NROW), FACTOR, PIVOT
+C
+C***FIRST EXECUTABLE STATEMENT  DBNFAC
+      IFLAG = 1
+      MIDDLE = NBANDU + 1
+C                         W(MIDDLE,.) CONTAINS THE MAIN DIAGONAL OF  A .
+      NROWM1 = NROW - 1
+      IF (NROWM1) 120, 110, 10
+   10 IF (NBANDL.GT.0) GO TO 30
+C                A IS UPPER TRIANGULAR. CHECK THAT DIAGONAL IS NONZERO .
+      DO 20 I=1,NROWM1
+        IF (W(MIDDLE,I).EQ.0.0D0) GO TO 120
+   20 CONTINUE
+      GO TO 110
+   30 IF (NBANDU.GT.0) GO TO 60
+C              A IS LOWER TRIANGULAR. CHECK THAT DIAGONAL IS NONZERO AND
+C                 DIVIDE EACH COLUMN BY ITS DIAGONAL .
+      DO 50 I=1,NROWM1
+        PIVOT = W(MIDDLE,I)
+        IF (PIVOT.EQ.0.0D0) GO TO 120
+        JMAX = MIN0(NBANDL,NROW-I)
+        DO 40 J=1,JMAX
+          W(MIDDLE+J,I) = W(MIDDLE+J,I)/PIVOT
+   40   CONTINUE
+   50 CONTINUE
+      RETURN
+C
+C        A  IS NOT JUST A TRIANGULAR MATRIX. CONSTRUCT LU FACTORIZATION
+   60 DO 100 I=1,NROWM1
+C                                  W(MIDDLE,I)  IS PIVOT FOR I-TH STEP .
+        PIVOT = W(MIDDLE,I)
+        IF (PIVOT.EQ.0.0D0) GO TO 120
+C                 JMAX  IS THE NUMBER OF (NONZERO) ENTRIES IN COLUMN  I
+C                     BELOW THE DIAGONAL .
+        JMAX = MIN0(NBANDL,NROW-I)
+C              DIVIDE EACH ENTRY IN COLUMN  I  BELOW DIAGONAL BY PIVOT .
+        DO 70 J=1,JMAX
+          W(MIDDLE+J,I) = W(MIDDLE+J,I)/PIVOT
+   70   CONTINUE
+C                 KMAX  IS THE NUMBER OF (NONZERO) ENTRIES IN ROW  I  TO
+C                     THE RIGHT OF THE DIAGONAL .
+        KMAX = MIN0(NBANDU,NROW-I)
+C                  SUBTRACT  A(I,I+K)*(I-TH COLUMN) FROM (I+K)-TH COLUMN
+C                  (BELOW ROW  I ) .
+        DO 90 K=1,KMAX
+          IPK = I + K
+          MIDMK = MIDDLE - K
+          FACTOR = W(MIDMK,IPK)
+          DO 80 J=1,JMAX
+            W(MIDMK+J,IPK) = W(MIDMK+J,IPK) - W(MIDDLE+J,I)*FACTOR
+   80     CONTINUE
+   90   CONTINUE
+  100 CONTINUE
+C                                       CHECK THE LAST DIAGONAL ENTRY .
+  110 IF (W(MIDDLE,NROW).NE.0.0D0) RETURN
+  120 IFLAG = 2
+      RETURN
+      END
+      SUBROUTINE DBNSLV(W,NROWW,NROW,NBANDL,NBANDU,B)
+C***BEGIN PROLOGUE  DBNSLV
+C***REFER TO  DBINT4,DBINTK
+C
+C  DBNSLV is the BANSLV routine from
+C        * A Practical Guide to Splines *  by C. de Boor
+C
+C  DBNSLV is a double precision routine
+C
+C  Companion routine to  DBNFAC . It returns the solution  X  of the
+C  linear system  A*X = B  in place of  B , given the LU-factorization
+C  for  A  in the work array  W from DBNFAC.
+C
+C *****  I N P U T  ****** W,B are DOUBLE PRECISION
+C  W, NROWW,NROW,NBANDL,NBANDU.....Describe the LU-factorization of a
+C        banded matrix  A  of order  NROW  as constructed in  DBNFAC .
+C        For details, see  DBNFAC .
+C  B.....Right side of the system to be solved .
+C
+C *****  O U T P U T  ****** B is DOUBLE PRECISION
+C  B.....Contains the solution  X , of order  NROW .
+C
+C *****  M E T H O D  ******
+C     (With  A = L*U, as stored in  W,) the unit lower triangular system
+C  L(U*X) = B  is solved for  Y = U*X, and  Y  stored in  B . Then the
+C  upper triangular system  U*X = Y  is solved for  X  . The calcul-
+C  ations are so arranged that the innermost loops stay within columns.
+C***ROUTINES CALLED  (NONE)
+C***END PROLOGUE  DBNSLV
+C
+      INTEGER NBANDL, NBANDU, NROW, NROWW, I, J, JMAX, MIDDLE, NROWM1
+      DOUBLE PRECISION W(NROWW,NROW), B(NROW)
+C***FIRST EXECUTABLE STATEMENT  DBNSLV
+      MIDDLE = NBANDU + 1
+      IF (NROW.EQ.1) GO TO 80
+      NROWM1 = NROW - 1
+      IF (NBANDL.EQ.0) GO TO 30
+C                                 FORWARD PASS
+C            FOR I=1,2,...,NROW-1, SUBTRACT  RIGHT SIDE(I)*(I-TH COLUMN
+C            OF  L )  FROM RIGHT SIDE  (BELOW I-TH ROW) .
+      DO 20 I=1,NROWM1
+        JMAX = MIN0(NBANDL,NROW-I)
+        DO 10 J=1,JMAX
+          B(I+J) = B(I+J) - B(I)*W(MIDDLE+J,I)
+   10   CONTINUE
+   20 CONTINUE
+C                                 BACKWARD PASS
+C            FOR I=NROW,NROW-1,...,1, DIVIDE RIGHT SIDE(I) BY I-TH DIAG-
+C            ONAL ENTRY OF  U, THEN SUBTRACT  RIGHT SIDE(I)*(I-TH COLUMN
+C            OF  U)  FROM RIGHT SIDE  (ABOVE I-TH ROW).
+   30 IF (NBANDU.GT.0) GO TO 50
+C                                A  IS LOWER TRIANGULAR .
+      DO 40 I=1,NROW
+        B(I) = B(I)/W(1,I)
+   40 CONTINUE
+      RETURN
+   50 I = NROW
+   60 B(I) = B(I)/W(MIDDLE,I)
+      JMAX = MIN0(NBANDU,I-1)
+      DO 70 J=1,JMAX
+        B(I-J) = B(I-J) - B(I)*W(MIDDLE-J,I)
+   70 CONTINUE
+      I = I - 1
+      IF (I.GT.1) GO TO 60
+   80 B(1) = B(1)/W(MIDDLE,1)
+      RETURN
+      END
+      SUBROUTINE DBSPVN(T,JHIGH,K,INDEX,X,ILEFT,VNIKX,WORK,IWORK)
+C***BEGIN PROLOGUE  DBSPVN
+C***DATE WRITTEN   800901   (YYMMDD)
+C***REVISION DATE  820801   (YYMMDD)
+C***REVISION HISTORY  (YYMMDD)
+C   000330  Modified array declarations.  (JEC)
+C
+C***CATEGORY NO.  E3,K6
+C***KEYWORDS  B-SPLINE,DATA FITTING,DOUBLE PRECISION,INTERPOLATION,
+C             SPLINE
+C***AUTHOR  AMOS, D. E., (SNLA)
+C***PURPOSE  Calculates the value of all (possibly) nonzero basis
+C            functions at X.
+C***DESCRIPTION
+C
+C     Written by Carl de Boor and modified by D. E. Amos
+C
+C     Reference
+C         SIAM J. Numerical Analysis, 14, No. 3, June, 1977, pp.441-472.
+C
+C     Abstract    **** a double precision routine ****
+C         DBSPVN is the BSPLVN routine of the reference.
+C
+C         DBSPVN calculates the value of all (possibly) nonzero basis
+C         functions at X of order MAX(JHIGH,(J+1)*(INDEX-1)), where T(K)
+C         .LE. X .LE. T(N+1) and J=IWORK is set inside the routine on
+C         the first call when INDEX=1.  ILEFT is such that T(ILEFT) .LE.
+C         X .LT. T(ILEFT+1).  A call to DINTRV(T,N+1,X,ILO,ILEFT,MFLAG)
+C         produces the proper ILEFT.  DBSPVN calculates using the basic
+C         algorithm needed in DBSPVD.  If only basis functions are
+C         desired, setting JHIGH=K and INDEX=1 can be faster than
+C         calling DBSPVD, but extra coding is required for derivatives
+C         (INDEX=2) and DBSPVD is set up for this purpose.
+C
+C         Left limiting values are set up as described in DBSPVD.
+C
+C     Description of Arguments
+C
+C         Input      T,X are double precision
+C          T       - knot vector of length N+K, where
+C                    N = number of B-spline basis functions
+C                    N = sum of knot multiplicities-K
+C          JHIGH   - order of B-spline, 1 .LE. JHIGH .LE. K
+C          K       - highest possible order
+C          INDEX   - INDEX = 1 gives basis functions of order JHIGH
+C                          = 2 denotes previous entry with work, IWORK
+C                              values saved for subsequent calls to
+C                              DBSPVN.
+C          X       - argument of basis functions,
+C                    T(K) .LE. X .LE. T(N+1)
+C          ILEFT   - largest integer such that
+C                    T(ILEFT) .LE. X .LT.  T(ILEFT+1)
+C
+C         Output     VNIKX, WORK are double precision
+C          VNIKX   - vector of length K for spline values.
+C          WORK    - a work vector of length 2*K
+C          IWORK   - a work parameter.  Both WORK and IWORK contain
+C                    information necessary to continue for INDEX = 2.
+C                    When INDEX = 1 exclusively, these are scratch
+C                    variables and can be used for other purposes.
+C
+C     Error Conditions
+C         Improper input is a fatal error.
+C***REFERENCES  C. DE BOOR, *PACKAGE FOR CALCULATING WITH B-SPLINES*,
+C                 SIAM JOURNAL ON NUMERICAL ANALYSIS, VOLUME 14, NO. 3,
+C                 JUNE 1977, PP. 441-472.
+C***ROUTINES CALLED  XERROR
+C***END PROLOGUE  DBSPVN
+C
+C
+      INTEGER ILEFT, IMJP1, INDEX, IPJ, IWORK, JHIGH, JP1, JP1ML, K, L
+      DOUBLE PRECISION T, VM, VMPREV, VNIKX, WORK, X
+C     DIMENSION T(ILEFT+JHIGH)
+      DIMENSION T(*), VNIKX(K), WORK(*)
+C     CONTENT OF J, DELTAM, DELTAP IS EXPECTED UNCHANGED BETWEEN CALLS.
+C     WORK(I) = DELTAP(I), WORK(K+I) = DELTAM(I), I = 1,K
+C***FIRST EXECUTABLE STATEMENT  DBSPVN
+      IF(K.LT.1) GO TO 90
+      IF(JHIGH.GT.K .OR. JHIGH.LT.1) GO TO 100
+      IF(INDEX.LT.1 .OR. INDEX.GT.2) GO TO 105
+      IF(X.LT.T(ILEFT) .OR. X.GT.T(ILEFT+1)) GO TO 110
+      GO TO (10, 20), INDEX
+   10 IWORK = 1
+      VNIKX(1) = 1.0D0
+      IF (IWORK.GE.JHIGH) GO TO 40
+C
+   20 IPJ = ILEFT + IWORK
+      WORK(IWORK) = T(IPJ) - X
+      IMJP1 = ILEFT - IWORK + 1
+      WORK(K+IWORK) = X - T(IMJP1)
+      VMPREV = 0.0D0
+      JP1 = IWORK + 1
+      DO 30 L=1,IWORK
+        JP1ML = JP1 - L
+        VM = VNIKX(L)/(WORK(L)+WORK(K+JP1ML))
+        VNIKX(L) = VM*WORK(L) + VMPREV
+        VMPREV = VM*WORK(K+JP1ML)
+   30 CONTINUE
+      VNIKX(JP1) = VMPREV
+      IWORK = JP1
+      IF (IWORK.LT.JHIGH) GO TO 20
+C
+   40 RETURN
+C
+C
+   90 CONTINUE
+      CALL XERROR( ' DBSPVN,  K DOES NOT SATISFY K.GE.1', 35, 2, 1)
+      RETURN
+  100 CONTINUE
+      CALL XERROR( ' DBSPVN,  JHIGH DOES NOT SATISFY 1.LE.JHIGH.LE.K',
+     1 48, 2, 1)
+      RETURN
+  105 CONTINUE
+      CALL XERROR( ' DBSPVN,  INDEX IS NOT 1 OR 2',29,2,1)
+      RETURN
+  110 CONTINUE
+      CALL XERROR( ' DBSPVN,  X DOES NOT SATISFY T(ILEFT).LE.X.LE.T(ILEF
+     1T+1)', 56, 2, 1)
+      RETURN
+      END
+      SUBROUTINE FDUMP
+C***BEGIN PROLOGUE  FDUMP
+C***DATE WRITTEN   790801   (YYMMDD)
+C***REVISION DATE  820801   (YYMMDD)
+C***CATEGORY NO.  Z
+C***KEYWORDS  ERROR,XERROR PACKAGE
+C***AUTHOR  JONES, R. E., (SNLA)
+C***PURPOSE  Symbolic dump (should be locally written).
+C***DESCRIPTION
+C        ***Note*** Machine Dependent Routine
+C        FDUMP is intended to be replaced by a locally written
+C        version which produces a symbolic dump.  Failing this,
+C        it should be replaced by a version which prints the
+C        subprogram nesting list.  Note that this dump must be
+C        printed on each of up to five files, as indicated by the
+C        XGETUA routine.  See XSETUA and XGETUA for details.
+C
+C     Written by Ron Jones, with SLATEC Common Math Library Subcommittee
+C     Latest revision ---  23 May 1979
+C***ROUTINES CALLED  (NONE)
+C***END PROLOGUE  FDUMP
+C***FIRST EXECUTABLE STATEMENT  FDUMP
+      RETURN
+      END
+      FUNCTION J4SAVE(IWHICH,IVALUE,ISET)
+C***BEGIN PROLOGUE  J4SAVE
+C***REFER TO  XERROR
+C     Abstract
+C        J4SAVE saves and recalls several global variables needed
+C        by the library error handling routines.
+C
+C     Description of Parameters
+C      --Input--
+C        IWHICH - Index of item desired.
+C                = 1 Refers to current error number.
+C                = 2 Refers to current error control flag.
+C                 = 3 Refers to current unit number to which error
+C                    messages are to be sent.  (0 means use standard.)
+C                 = 4 Refers to the maximum number of times any
+C                     message is to be printed (as set by XERMAX).
+C                 = 5 Refers to the total number of units to which
+C                     each error message is to be written.
+C                 = 6 Refers to the 2nd unit for error messages
+C                 = 7 Refers to the 3rd unit for error messages
+C                 = 8 Refers to the 4th unit for error messages
+C                 = 9 Refers to the 5th unit for error messages
+C        IVALUE - The value to be set for the IWHICH-th parameter,
+C                 if ISET is .TRUE. .
+C        ISET   - If ISET=.TRUE., the IWHICH-th parameter will BE
+C                 given the value, IVALUE.  If ISET=.FALSE., the
+C                 IWHICH-th parameter will be unchanged, and IVALUE
+C                 is a dummy parameter.
+C      --Output--
+C        The (old) value of the IWHICH-th parameter will be returned
+C        in the function value, J4SAVE.
+C
+C     Written by Ron Jones, with SLATEC Common Math Library Subcommittee
+C    Adapted from Bell Laboratories PORT Library Error Handler
+C     Latest revision ---  23 MAY 1979
+C***REFERENCES  JONES R.E., KAHANER D.K., "XERROR, THE SLATEC ERROR-
+C                 HANDLING PACKAGE", SAND82-0800, SANDIA LABORATORIES,
+C                 1982.
+C***ROUTINES CALLED  (NONE)
+C***END PROLOGUE  J4SAVE
+      LOGICAL ISET
+      INTEGER IPARAM(9)
+      SAVE IPARAM
+      DATA IPARAM(1),IPARAM(2),IPARAM(3),IPARAM(4)/0,2,0,10/
+      DATA IPARAM(5)/1/
+      DATA IPARAM(6),IPARAM(7),IPARAM(8),IPARAM(9)/0,0,0,0/
+C***FIRST EXECUTABLE STATEMENT  J4SAVE
+      J4SAVE = IPARAM(IWHICH)
+      IF (ISET) IPARAM(IWHICH) = IVALUE
+      RETURN
+      END
+      SUBROUTINE XERABT(MESSG,NMESSG)
+C***BEGIN PROLOGUE  XERABT
+C***DATE WRITTEN   790801   (YYMMDD)
+C***REVISION DATE  820801   (YYMMDD)
+C***CATEGORY NO.  R3C
+C***KEYWORDS  ERROR,XERROR PACKAGE
+C***AUTHOR  JONES, R. E., (SNLA)
+C***PURPOSE  Aborts program execution and prints error message.
+C***DESCRIPTION
+C     Abstract
+C        ***Note*** machine dependent routine
+C        XERABT aborts the execution of the program.
+C        The error message causing the abort is given in the calling
+C        sequence, in case one needs it for printing on a dayfile,
+C        for example.
+C
+C     Description of Parameters
+C        MESSG and NMESSG are as in XERROR, except that NMESSG may
+C        be zero, in which case no message is being supplied.
+C
+C     Written by Ron Jones, with SLATEC Common Math Library Subcommittee
+C     Latest revision ---  19 MAR 1980
+C***REFERENCES  JONES R.E., KAHANER D.K., "XERROR, THE SLATEC ERROR-
+C                 HANDLING PACKAGE", SAND82-0800, SANDIA LABORATORIES,
+C                 1982.
+C***ROUTINES CALLED  (NONE)
+C***END PROLOGUE  XERABT
+      CHARACTER*(*) MESSG
+C***FIRST EXECUTABLE STATEMENT  XERABT
+      STOP
+      END
+      SUBROUTINE XERCTL(MESSG1,NMESSG,NERR,LEVEL,KONTRL)
+C***BEGIN PROLOGUE  XERCTL
+C***DATE WRITTEN   790801   (YYMMDD)
+C***REVISION DATE  820801   (YYMMDD)
+C***CATEGORY NO.  R3C
+C***KEYWORDS  ERROR,XERROR PACKAGE
+C***AUTHOR  JONES, R. E., (SNLA)
+C***PURPOSE  Allows user control over handling of individual errors.
+C***DESCRIPTION
+C     Abstract
+C        Allows user control over handling of individual errors.
+C        Just after each message is recorded, but before it is
+C        processed any further (i.e., before it is printed or
+C        a decision to abort is made), a call is made to XERCTL.
+C        If the user has provided his own version of XERCTL, he
+C        can then override the value of KONTROL used in processing
+C        this message by redefining its value.
+C        KONTRL may be set to any value from -2 to 2.
+C        The meanings for KONTRL are the same as in XSETF, except
+C        that the value of KONTRL changes only for this message.
+C        If KONTRL is set to a value outside the range from -2 to 2,
+C        it will be moved back into that range.
+C
+C     Description of Parameters
+C
+C      --Input--
+C        MESSG1 - the first word (only) of the error message.
+C        NMESSG - same as in the call to XERROR or XERRWV.
+C        NERR   - same as in the call to XERROR or XERRWV.
+C        LEVEL  - same as in the call to XERROR or XERRWV.
+C        KONTRL - the current value of the control flag as set
+C                 by a call to XSETF.
+C
+C      --Output--
+C        KONTRL - the new value of KONTRL.  If KONTRL is not
+C                 defined, it will remain at its original value.
+C                 This changed value of control affects only
+C                 the current occurrence of the current message.
+C***REFERENCES  JONES R.E., KAHANER D.K., "XERROR, THE SLATEC ERROR-
+C                 HANDLING PACKAGE", SAND82-0800, SANDIA LABORATORIES,
+C                 1982.
+C***ROUTINES CALLED  (NONE)
+C***END PROLOGUE  XERCTL
+      CHARACTER*20 MESSG1
+C***FIRST EXECUTABLE STATEMENT  XERCTL
+      RETURN
+      END
+      SUBROUTINE XERPRT(MESSG,NMESSG)
+C***BEGIN PROLOGUE  XERPRT
+C***DATE WRITTEN   790801   (YYMMDD)
+C***REVISION DATE  820801   (YYMMDD)
+C***CATEGORY NO.  Z
+C***KEYWORDS  ERROR,XERROR PACKAGE
+C***AUTHOR  JONES, R. E., (SNLA)
+C***PURPOSE  Prints error messages.
+C***DESCRIPTION
+C     Abstract
+C        Print the Hollerith message in MESSG, of length NMESSG,
+C        on each file indicated by XGETUA.
+C     Latest revision ---  19 MAR 1980
+C***REFERENCES  JONES R.E., KAHANER D.K., "XERROR, THE SLATEC ERROR-
+C                 HANDLING PACKAGE", SAND82-0800, SANDIA LABORATORIES,
+C                 1982.
+C***ROUTINES CALLED  I1MACH,S88FMT,XGETUA
+C***END PROLOGUE  XERPRT
+      INTEGER LUN(5)
+      CHARACTER*(*) MESSG
+C     OBTAIN UNIT NUMBERS AND WRITE LINE TO EACH UNIT
+C***FIRST EXECUTABLE STATEMENT  XERPRT
+      CALL XGETUA(LUN,NUNIT)
+      LENMES = LEN(MESSG)
+      DO 20 KUNIT=1,NUNIT
+         IUNIT = LUN(KUNIT)
+         IF (IUNIT.EQ.0) IUNIT = I1MACH(4)
+         DO 10 ICHAR=1,LENMES,72
+            LAST = MIN0(ICHAR+71 , LENMES)
+            WRITE (IUNIT,'(1X,A)') MESSG(ICHAR:LAST)
+   10    CONTINUE
+   20 CONTINUE
+      RETURN
+      END
+      SUBROUTINE XERROR(MESSG,NMESSG,NERR,LEVEL)
+C***BEGIN PROLOGUE  XERROR
+C***DATE WRITTEN   790801   (YYMMDD)
+C***REVISION DATE  820801   (YYMMDD)
+C***CATEGORY NO.  R3C
+C***KEYWORDS  ERROR,XERROR PACKAGE
+C***AUTHOR  JONES, R. E., (SNLA)
+C***PURPOSE  Processes an error (diagnostic) message.
+C***DESCRIPTION
+C     Abstract
+C        XERROR processes a diagnostic message, in a manner
+C        determined by the value of LEVEL and the current value
+C        of the library error control flag, KONTRL.
+C        (See subroutine XSETF for details.)
+C
+C     Description of Parameters
+C      --Input--
+C        MESSG - the Hollerith message to be processed, containing
+C                no more than 72 characters.
+C        NMESSG- the actual number of characters in MESSG.
+C        NERR  - the error number associated with this message.
+C                NERR must not be zero.
+C        LEVEL - error category.
+C                =2 means this is an unconditionally fatal error.
+C                =1 means this is a recoverable error.  (I.e., it is
+C                   non-fatal if XSETF has been appropriately called.)
+C                =0 means this is a warning message only.
+C                =-1 means this is a warning message which is to be
+C                   printed at most once, regardless of how many
+C                   times this call is executed.
+C
+C     Examples
+C        CALL XERROR('SMOOTH -- NUM WAS ZERO.',23,1,2)
+C        CALL XERROR('INTEG  -- LESS THAN FULL ACCURACY ACHIEVED.',
+C                    43,2,1)
+C        CALL XERROR('ROOTER -- ACTUAL ZERO OF F FOUND BEFORE INTERVAL F
+C    1ULLY COLLAPSED.',65,3,0)
+C        CALL XERROR('EXP    -- UNDERFLOWS BEING SET TO ZERO.',39,1,-1)
+C
+C     Latest revision ---  19 MAR 1980
+C     Written by Ron Jones, with SLATEC Common Math Library Subcommittee
+C***REFERENCES  JONES R.E., KAHANER D.K., "XERROR, THE SLATEC ERROR-
+C                 HANDLING PACKAGE", SAND82-0800, SANDIA LABORATORIES,
+C                 1982.
+C***ROUTINES CALLED  XERRWV
+C***END PROLOGUE  XERROR
+      CHARACTER*(*) MESSG
+C***FIRST EXECUTABLE STATEMENT  XERROR
+      CALL XERRWV(MESSG,NMESSG,NERR,LEVEL,0,0,0,0,0.,0.)
+      RETURN
+      END
+
+
+      DOUBLE PRECISION FUNCTION DB3VAL(XVAL,YVAL,ZVAL,IDX,IDY,IDZ,
+     *  TX,TY,TZ,NX,NY,NZ,KX,KY,KZ,BCOEF,WORK)
+C***BEGIN PROLOGUE  DB3VAL
+C***DATE WRITTEN   25 MAY 1982
+C***REVISION DATE  25 MAY 1982
+C***REVISION HISTORY  (YYMMDD)
+C   000330  Modified array declarations.  (JEC)
+C
+C***CATEGORY NO.  E1A
+C***KEYWORDS  INTERPOLATION, THREE-DIMENSIONS, GRIDDED DATA, SPLINES,
+C             PIECEWISE POLYNOMIALS
+C***AUTHOR  BOISVERT, RONALD, NBS
+C             SCIENTIFIC COMPUTING DIVISION
+C             NATIONAL BUREAU OF STANDARDS
+C             WASHINGTON, DC 20234
+C***PURPOSE  DB3VAL EVALUATES THE PIECEWISE POLYNOMIAL INTERPOLATING
+C            FUNCTION CONSTRUCTED BY THE ROUTINE B3INK OR ONE OF ITS
+C            PARTIAL DERIVATIVES.
+C            DOUBLE PRECISION VERSION OF B3VAL.
+C***DESCRIPTION
+C
+C   DB3VAL  evaluates   the   tensor   product   piecewise   polynomial
+C   interpolant constructed  by  the  routine  DB3INK  or  one  of  its
+C   derivatives  at  the  point  (XVAL,YVAL,ZVAL).  To   evaluate   the
+C   interpolant  itself,  set  IDX=IDY=IDZ=0,  to  evaluate  the  first
+C   partial with respect to x, set IDX=1,IDY=IDZ=0, and so on.
+C
+C   DB3VAL returns 0.0D0 if (XVAL,YVAL,ZVAL) is out of range. That is,
+C            XVAL.LT.TX(1) .OR. XVAL.GT.TX(NX+KX) .OR.
+C            YVAL.LT.TY(1) .OR. YVAL.GT.TY(NY+KY) .OR.
+C            ZVAL.LT.TZ(1) .OR. ZVAL.GT.TZ(NZ+KZ)
+C   If the knots TX, TY, and TZ were chosen by  DB3INK,  then  this  is
+C   equivalent to
+C            XVAL.LT.X(1) .OR. XVAL.GT.X(NX)+EPSX .OR.
+C            YVAL.LT.Y(1) .OR. YVAL.GT.Y(NY)+EPSY .OR.
+C            ZVAL.LT.Z(1) .OR. ZVAL.GT.Z(NZ)+EPSZ
+C   where EPSX = 0.1*(X(NX)-X(NX-1)), EPSY =  0.1*(Y(NY)-Y(NY-1)),  and
+C   EPSZ = 0.1*(Z(NZ)-Z(NZ-1)).
+C
+C   The input quantities TX, TY, TZ, NX, NY, NZ, KX, KY, KZ, and  BCOEF
+C   should remain unchanged since the last call of DB3INK.
+C
+C
+C   I N P U T
+C   ---------
+C
+C   XVAL    Double precision scalar
+C           X coordinate of evaluation point.
+C
+C   YVAL    Double precision scalar
+C           Y coordinate of evaluation point.
+C
+C   ZVAL    Double precision scalar
+C           Z coordinate of evaluation point.
+C
+C   IDX     Integer scalar
+C           X derivative of piecewise polynomial to evaluate.
+C
+C   IDY     Integer scalar
+C           Y derivative of piecewise polynomial to evaluate.
+C
+C   IDZ     Integer scalar
+C           Z derivative of piecewise polynomial to evaluate.
+C
+C   TX      Double precision 1D array (size NX+KX)
+C           Sequence of knots defining the piecewise polynomial in
+C           the x direction.  (Same as in last call to DB3INK.)
+C
+C   TY      Double precision 1D array (size NY+KY)
+C           Sequence of knots defining the piecewise polynomial in
+C           the y direction.  (Same as in last call to DB3INK.)
+C
+C   TZ      Double precision 1D array (size NZ+KZ)
+C           Sequence of knots defining the piecewise polynomial in
+C           the z direction.  (Same as in last call to DB3INK.)
+C
+C   NX      Integer scalar
+C           The number of interpolation points in x.
+C           (Same as in last call to DB3INK.)
+C
+C   NY      Integer scalar
+C           The number of interpolation points in y.
+C           (Same as in last call to DB3INK.)
+C
+C   NZ      Integer scalar
+C           The number of interpolation points in z.
+C           (Same as in last call to DB3INK.)
+C
+C   KX      Integer scalar
+C           Order of polynomial pieces in x.
+C           (Same as in last call to DB3INK.)
+C
+C   KY      Integer scalar
+C           Order of polynomial pieces in y.
+C           (Same as in last call to DB3INK.)
+C
+C   KZ      Integer scalar
+C           Order of polynomial pieces in z.
+C           (Same as in last call to DB3INK.)
+C
+C   BCOEF   Double precision 2D array (size NX by NY by NZ)
+C           The B-spline coefficients computed by DB3INK.
+C
+C   WORK    Double precision 1D array (size KY*KZ+3*max(KX,KY,KZ)+KZ)
+C           A working storage array.
+C
+C***REFERENCES  CARL DE BOOR, A PRACTICAL GUIDE TO SPLINES,
+C                 SPRINGER-VERLAG, NEW YORK, 1978.
+C***ROUTINES CALLED  DINTRV,DBVALU
+C***END PROLOGUE  DB3VAL
+C
+C<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+C
+C   MODIFICATION
+C   ------------
+C
+C   ADDED CHECK TO SEE IF X OR Y IS OUT OF RANGE, IF SO, RETURN 0.0
+C
+C   R.F. BOISVERT, NIST
+C   22 FEB 00
+C
+C<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+C  ------------
+C  DECLARATIONS
+C  ------------
+C
+C  PARAMETERS
+C
+      INTEGER
+     *        IDX, IDY, IDZ, NX, NY, NZ, KX, KY, KZ
+      DOUBLE PRECISION
+     *     XVAL, YVAL, ZVAL, TX(*), TY(*), TZ(*), BCOEF(NX,NY,NZ),
+     *     WORK(*)
+C
+C  LOCAL VARIABLES
+C
+      INTEGER
+     *        ILOY, ILOZ, INBVX, INBV1, INBV2, LEFTY, LEFTZ, MFLAG,
+     *        KCOLY, KCOLZ, IZ, IZM1, IW, I, J, K
+      DOUBLE PRECISION
+     *     DBVALU
+C
+      DATA ILOY /1/,  ILOZ /1/,  INBVX /1/
+C     SAVE ILOY    ,  ILOZ    ,  INBVX
+C
+C
+C***FIRST EXECUTABLE STATEMENT
+      DB3VAL = 0.0D0
+C  NEXT STATEMENT - RFB MOD
+      IF (XVAL.LT.TX(1) .OR. XVAL.GT.TX(NX+KX) .OR.
+     +    YVAL.LT.TY(1) .OR. YVAL.GT.TY(NY+KY) .OR.
+     +    ZVAL.LT.TZ(1) .OR. ZVAL.GT.TZ(NZ+KZ)) then
+      write(0,*) 'db3.f LINE 1785, NX,NY,NZ: ',NX,NY,NZ
+      write(0,*) 'db3.f LINE 1785, KX,KY,KZ: ',KX,KY,KZ
+      write(0,*) 'db3.f LINE 1785, X,Y,Z: ',XVAL,YVAL,ZVAL
+      write(0,*) '1786, TX(1),TY(1),TZ(1): ',TX(1),TY(1),TZ(1)
+      write(0,*) '1787, TX(end),TY(end),TZ(end): ',
+     +                  TX(NX+KX),TY(NY+KY),TZ(NZ+KZ)
+      stop 'DB3VAL value out of range -- stopping'
+      ENDIF
+      
+      CALL DINTRV(TY,NY+KY,YVAL,ILOY,LEFTY,MFLAG)
+      IF (MFLAG .NE. 0)  stop 'problem calling DINTRV TY '
+      CALL DINTRV(TZ,NZ+KZ,ZVAL,ILOZ,LEFTZ,MFLAG)
+      IF (MFLAG .NE. 0)  stop 'problem calling DINTRV TZ '
+         IZ = 1 + KY*KZ
+         IW = IZ + KZ
+         KCOLZ = LEFTZ - KZ
+         I = 0
+         DO 50 K=1,KZ
+            KCOLZ = KCOLZ + 1
+            KCOLY = LEFTY - KY
+            DO 50 J=1,KY
+               I = I + 1
+               KCOLY = KCOLY + 1
+               WORK(I) = DBVALU(TX,BCOEF(1,KCOLY,KCOLZ),NX,KX,IDX,XVAL,
+     *                           INBVX,WORK(IW))
+   50    CONTINUE
+         INBV1 = 1
+         IZM1 = IZ - 1
+         KCOLY = LEFTY - KY + 1
+         DO 60 K=1,KZ
+            I = (K-1)*KY + 1
+            J = IZM1 + K
+            WORK(J) = DBVALU(TY(KCOLY),WORK(I),KY,KY,IDY,YVAL,
+     *                           INBV1,WORK(IW))
+  60     CONTINUE
+         INBV2 = 1
+         KCOLZ = LEFTZ - KZ + 1
+         DB3VAL = DBVALU(TZ(KCOLZ),WORK(IZ),KZ,KZ,IDZ,ZVAL,INBV2,
+     *                  WORK(IW))
+  100 CONTINUE
+      RETURN
+      END
+      DOUBLE PRECISION FUNCTION DBVALU(T,A,N,K,IDERIV,X,INBV,WORK)
+C***BEGIN PROLOGUE  DBVALU
+C***DATE WRITTEN   800901   (YYMMDD)
+C***REVISION DATE  820801   (YYMMDD)
+C***REVISION HISTORY  (YYMMDD)
+C   000330  Modified array declarations.  (JEC)
+C
+C***CATEGORY NO.  E3,K6
+C***KEYWORDS  B-SPLINE,DATA FITTING,DOUBLE PRECISION,INTERPOLATION,
+C             SPLINE
+C***AUTHOR  AMOS, D. E., (SNLA)
+C***PURPOSE  Evaluates the B-representation of a B-spline at X for the
+C            function value or any of its derivatives.
+C***DESCRIPTION
+C
+C     Written by Carl de Boor and modified by D. E. Amos
+C
+C     Reference
+C         SIAM J. Numerical Analysis, 14, No. 3, June, 1977, pp.441-472.
+C
+C     Abstract   **** a double precision routine ****
+C         DBVALU is the BVALUE function of the reference.
+C
+C         DBVALU evaluates the B-representation (T,A,N,K) of a B-spline
+C         at X for the function value on IDERIV=0 or any of its
+C         derivatives on IDERIV=1,2,...,K-1.  Right limiting values
+C         (right derivatives) are returned except at the right end
+C         point X=T(N+1) where left limiting values are computed.  The
+C         spline is defined on T(K) .LE. X .LE. T(N+1).  DBVALU returns
+C         a fatal error message when X is outside of this interval.
+C
+C         To compute left derivatives or left limiting values at a
+C         knot T(I), replace N by I-1 and set X=T(I), I=K+1,N+1.
+C
+C         DBVALU calls DINTRV
+C
+C     Description of Arguments
+C
+C         Input      T,A,X are double precision
+C          T       - knot vector of length N+K
+C          A       - B-spline coefficient vector of length N
+C          N       - number of B-spline coefficients
+C                    N = sum of knot multiplicities-K
+C          K       - order of the B-spline, K .GE. 1
+C          IDERIV  - order of the derivative, 0 .LE. IDERIV .LE. K-1
+C                    IDERIV = 0 returns the B-spline value
+C          X       - argument, T(K) .LE. X .LE. T(N+1)
+C          INBV    - an initialization parameter which must be set
+C                    to 1 the first time DBVALU is called.
+C
+C         Output     WORK,DBVALU are double precision
+C          INBV    - INBV contains information for efficient process-
+C                    ing after the initial call and INBV must not
+C                    be changed by the user.  Distinct splines require
+C                    distinct INBV parameters.
+C          WORK    - work vector of length 3*K.
+C          DBVALU  - value of the IDERIV-th derivative at X
+C
+C     Error Conditions
+C         An improper input is a fatal error
+C***REFERENCES  C. DE BOOR, *PACKAGE FOR CALCULATING WITH B-SPLINES*,
+C                 SIAM JOURNAL ON NUMERICAL ANALYSIS, VOLUME 14, NO. 3,
+C                 JUNE 1977, PP. 441-472.
+C***ROUTINES CALLED  DINTRV,XERROR
+C***END PROLOGUE  DBVALU
+C
+C
+      INTEGER I,IDERIV,IDERP1,IHI,IHMKMJ,ILO,IMK,IMKPJ, INBV, IPJ,
+     1 IP1, IP1MJ, J, JJ, J1, J2, K, KMIDER, KMJ, KM1, KPK, MFLAG, N
+      DOUBLE PRECISION A, FKMJ, T, WORK, X
+      DIMENSION T(*), A(N), WORK(*)
+C***FIRST EXECUTABLE STATEMENT  DBVALU
+      DBVALU = 0.0D0
+      IF(K.LT.1) GO TO 102
+      IF(N.LT.K) GO TO 101
+      IF(IDERIV.LT.0 .OR. IDERIV.GE.K) GO TO 110
+      KMIDER = K - IDERIV
+C
+C *** FIND *I* IN (K,N) SUCH THAT T(I) .LE. X .LT. T(I+1)
+C     (OR, .LE. T(I+1) IF T(I) .LT. T(I+1) = T(N+1)).
+      KM1 = K - 1
+      CALL DINTRV(T, N+1, X, INBV, I, MFLAG)
+      IF (X.LT.T(K)) GO TO 120
+      IF (MFLAG.EQ.0) GO TO 20
+      IF (X.GT.T(I)) GO TO 130
+   10 IF (I.EQ.K) GO TO 140
+      I = I - 1
+      IF (X.EQ.T(I)) GO TO 10
+C
+C *** DIFFERENCE THE COEFFICIENTS *IDERIV* TIMES
+C     WORK(I) = AJ(I), WORK(K+I) = DP(I), WORK(K+K+I) = DM(I), I=1.K
+C
+   20 IMK = I - K
+      DO 30 J=1,K
+        IMKPJ = IMK + J
+        WORK(J) = A(IMKPJ)
+   30 CONTINUE
+      IF (IDERIV.EQ.0) GO TO 60
+      DO 50 J=1,IDERIV
+        KMJ = K - J
+        FKMJ = DBLE(FLOAT(KMJ))
+        DO 40 JJ=1,KMJ
+          IHI = I + JJ
+          IHMKMJ = IHI - KMJ
+          WORK(JJ) = (WORK(JJ+1)-WORK(JJ))/(T(IHI)-T(IHMKMJ))*FKMJ
+   40   CONTINUE
+   50 CONTINUE
+C
+C *** COMPUTE VALUE AT *X* IN (T(I),(T(I+1)) OF IDERIV-TH DERIVATIVE,
+C     GIVEN ITS RELEVANT B-SPLINE COEFF. IN AJ(1),...,AJ(K-IDERIV).
+   60 IF (IDERIV.EQ.KM1) GO TO 100
+      IP1 = I + 1
+      KPK = K + K
+      J1 = K + 1
+      J2 = KPK + 1
+      DO 70 J=1,KMIDER
+        IPJ = I + J
+        WORK(J1) = T(IPJ) - X
+        IP1MJ = IP1 - J
+        WORK(J2) = X - T(IP1MJ)
+        J1 = J1 + 1
+        J2 = J2 + 1
+   70 CONTINUE
+      IDERP1 = IDERIV + 1
+      DO 90 J=IDERP1,KM1
+        KMJ = K - J
+        ILO = KMJ
+        DO 80 JJ=1,KMJ
+          WORK(JJ) = (WORK(JJ+1)*WORK(KPK+ILO)+WORK(JJ)
+     1              *WORK(K+JJ))/(WORK(KPK+ILO)+WORK(K+JJ))
+          ILO = ILO - 1
+   80   CONTINUE
+   90 CONTINUE
+  100 DBVALU = WORK(1)
+      RETURN
+C
+C
+  101 CONTINUE
+      CALL XERROR( ' DBVALU,  N DOES NOT SATISFY N.GE.K',35,2,1)
+      RETURN
+  102 CONTINUE
+      CALL XERROR( ' DBVALU,  K DOES NOT SATISFY K.GE.1',35,2,1)
+      RETURN
+  110 CONTINUE
+      CALL XERROR( ' DBVALU,  IDERIV DOES NOT SATISFY 0.LE.IDERIV.LT.K',
+     1 50, 2, 1)
+      RETURN
+  120 CONTINUE
+      CALL XERROR( ' DBVALU,  X IS N0T GREATER THAN OR EQUAL TO T(K)',
+     1 48, 2, 1)
+      RETURN
+  130 CONTINUE
+      CALL XERROR( ' DBVALU,  X IS NOT LESS THAN OR EQUAL TO T(N+1)',
+     1 47, 2, 1)
+      RETURN
+  140 CONTINUE
+      CALL XERROR( ' DBVALU,  A LEFT LIMITING VALUE CANN0T BE OBTAINED A
+     1T T(K)',    58, 2, 1)
+      RETURN
+      END
+      SUBROUTINE DINTRV(XT,LXT,X,ILO,ILEFT,MFLAG)
+C***BEGIN PROLOGUE  DINTRV
+C***DATE WRITTEN   800901   (YYMMDD)
+C***REVISION DATE  820801   (YYMMDD)
+C***CATEGORY NO.  E3,K6
+C***KEYWORDS  B-SPLINE,DATA FITTING,DOUBLE PRECISION,INTERPOLATION,
+C             SPLINE
+C***AUTHOR  AMOS, D. E., (SNLA)
+C***PURPOSE  Computes the largest integer ILEFT in 1.LE.ILEFT.LE.LXT
+C            such that XT(ILEFT).LE.X where XT(*) is a subdivision of
+C            the X interval.
+C***DESCRIPTION
+C
+C     Written by Carl de Boor and modified by D. E. Amos
+C
+C     Reference
+C         SIAM J.  Numerical Analysis, 14, No. 3, June 1977, pp.441-472.
+C
+C     Abstract    **** a double precision routine ****
+C         DINTRV is the INTERV routine of the reference.
+C
+C         DINTRV computes the largest integer ILEFT in 1 .LE. ILEFT .LE.
+C         LXT such that XT(ILEFT) .LE. X where XT(*) is a subdivision of
+C         the X interval.  Precisely,
+C
+C                      X .LT. XT(1)                1         -1
+C         if  XT(I) .LE. X .LT. XT(I+1)  then  ILEFT=I  , MFLAG=0
+C           XT(LXT) .LE. X                         LXT        1,
+C
+C         That is, when multiplicities are present in the break point
+C         to the left of X, the largest index is taken for ILEFT.
+C
+C     Description of Arguments
+C
+C         Input      XT,X are double precision
+C          XT      - XT is a knot or break point vector of length LXT
+C          LXT     - length of the XT vector
+C          X       - argument
+C          ILO     - an initialization parameter which must be set
+C                    to 1 the first time the spline array XT is
+C                    processed by DINTRV.
+C
+C         Output
+C          ILO     - ILO contains information for efficient process-
+C                    ing after the initial call and ILO must not be
+C                    changed by the user.  Distinct splines require
+C                    distinct ILO parameters.
+C          ILEFT   - largest integer satisfying XT(ILEFT) .LE. X
+C          MFLAG   - signals when X lies out of bounds
+C
+C     Error Conditions
+C         None
+C***REFERENCES  C. DE BOOR, *PACKAGE FOR CALCULATING WITH B-SPLINES*,
+C                 SIAM JOURNAL ON NUMERICAL ANALYSIS, VOLUME 14, NO. 3,
+C                 JUNE 1977, PP. 441-472.
+C***ROUTINES CALLED  (NONE)
+C***END PROLOGUE  DINTRV
+C
+C
+      INTEGER IHI, ILEFT, ILO, ISTEP, LXT, MFLAG, MIDDLE
+      DOUBLE PRECISION X, XT
+      DIMENSION XT(LXT)
+C***FIRST EXECUTABLE STATEMENT  DINTRV
+      IHI = ILO + 1
+      IF (IHI.LT.LXT) GO TO 10
+      IF (X.GE.XT(LXT)) GO TO 110
+      IF (LXT.LE.1) GO TO 90
+      ILO = LXT - 1
+      IHI = LXT
+C
+   10 IF (X.GE.XT(IHI)) GO TO 40
+      IF (X.GE.XT(ILO)) GO TO 100
+C
+C *** NOW X .LT. XT(IHI) . FIND LOWER BOUND
+      ISTEP = 1
+   20 IHI = ILO
+      ILO = IHI - ISTEP
+      IF (ILO.LE.1) GO TO 30
+      IF (X.GE.XT(ILO)) GO TO 70
+      ISTEP = ISTEP*2
+      GO TO 20
+   30 ILO = 1
+      IF (X.LT.XT(1)) GO TO 90
+      GO TO 70
+C *** NOW X .GE. XT(ILO) . FIND UPPER BOUND
+   40 ISTEP = 1
+   50 ILO = IHI
+      IHI = ILO + ISTEP
+      IF (IHI.GE.LXT) GO TO 60
+      IF (X.LT.XT(IHI)) GO TO 70
+      ISTEP = ISTEP*2
+      GO TO 50
+   60 IF (X.GE.XT(LXT)) GO TO 110
+      IHI = LXT
+C
+C *** NOW XT(ILO) .LE. X .LT. XT(IHI) . NARROW THE INTERVAL
+   70 MIDDLE = (ILO+IHI)/2
+      IF (MIDDLE.EQ.ILO) GO TO 100
+C     NOTE. IT IS ASSUMED THAT MIDDLE = ILO IN CASE IHI = ILO+1
+      IF (X.LT.XT(MIDDLE)) GO TO 80
+      ILO = MIDDLE
+      GO TO 70
+   80 IHI = MIDDLE
+      GO TO 70
+C *** SET OUTPUT AND RETURN
+   90 MFLAG = -1
+      ILEFT = 1
+      RETURN
+  100 MFLAG = 0
+      ILEFT = ILO
+      RETURN
+  110 MFLAG = 1
+      ILEFT = LXT
+      RETURN
+      END
+
+
+
Index: /trunk/00FlowSolve_KW/src/utils/flow_solve_utils.f90
===================================================================
--- /trunk/00FlowSolve_KW/src/utils/flow_solve_utils.f90	(revision 6)
+++ /trunk/00FlowSolve_KW/src/utils/flow_solve_utils.f90	(revision 6)
@@ -0,0 +1,505 @@
+subroutine toggle
+ use user_data
+ use etc
+ use mpi_params
+ use operators
+ implicit none
+  
+ integer  :: itmp
+  
+ if( myid .eq. 0 ) then
+  write(0,*) '..........................................................'
+  write(0,*) '............................     Toggling, istep  ',istep
+  write(0,*) '..........................................................'
+ endif
+  
+ t_secs = t_secs + dt*time_scale
+ 
+!!Toggle 2-cycle pointer for AM solves (N,NM1).
+ if( AM_order .eq. 4 ) then
+  itmp=NM1
+  NM1=N  
+  N=itmp
+  N_oldest=NM1
+ elseif( AM_order .eq. 3 ) then
+  N=1
+  N_oldest=N
+ endif
+ 
+!!Toggle M cycle pointers for AB rhs fields
+ if( AB_order .eq. 4 ) then
+  itmp=MM3
+  MM3=MM2
+  MM2=MM1
+  MM1=MM0
+  MM0=itmp
+  M_oldest=MM3
+ elseif( AB_order .eq. 3 ) then
+  itmp=MM2
+  MM2=MM1
+  MM1=MM0
+  MM0=itmp
+  M_oldest=MM2
+ elseif( AB_order .eq. 2 ) then
+  itmp=MM1
+  MM1=MM0
+  MM0=itmp
+  M_oldest=MM1
+ endif
+ 
+!! Counters for Particle Trajectories
+!! (always 4th order AB)
+  itmp=PM3
+  PM3=PM2
+  PM2=PM1
+  PM1=PM0
+  PM0=itmp
+  P_oldest=PM3
+
+end subroutine toggle
+
+
+
+subroutine finalize
+  use dependent_variables
+  use intermediate_variables
+  use user_data
+  use etc
+  use operators
+  use mpi_params
+  use mpi_times
+ 
+!!! xlv no skipping deallocations
+!!! if(myid==0) STOP 'skipping deallocations...just quit'
+
+!!! xlv smart stop job 
+!===============================!
+ call PetscFinalize(ierr)
+ if ( myid == 0 ) then
+      print*,' '
+      print*,'   ... Good Job !'
+      print*,' '
+ endif
+ call MPI_TIME(1)
+ call quit_mpi(ierr)
+!===============================!
+
+  if(myid==0) STOP 'skipping deallocations...just quit'
+  
+  call DeleteVector(velocity)
+  
+  do i=0,mglevels-1
+   call DeleteScalarVariable(Phi(i))
+  enddo
+  
+  call DeleteScalarVariable(pd)
+  call DeleteScalarVariable(rhs_b)
+  
+  do i=1,5
+   do j=1,AB_order
+    call DeleteScalarVariable(explicit_rhs(i,j))
+   enddo
+   call DeleteScalarVariable(implicit_rhs(i,1))
+   if(AM_order>3) call DeleteScalarVariable(implicit_rhs(i,2))
+  enddo
+ 
+  do i=1,4
+   call DeleteScalarVariable(scratch(i))
+  enddo
+  
+  if(myid==0) write(0,*) '... ScalarVariables etc deallocated... skipping PetscFinalize'
+  !call PetscFinalize(ierr)
+
+end subroutine finalize
+ 
+ 
+!!===========================================================
+!!===========================================================
+ subroutine LogMessage(msg,logfile)
+  character(len=80)  :: msg,logfile
+  open(1,file=logfile,position='append')
+   write(1,*) msg
+  close(1)
+ end subroutine LogMessage
+!!===========================================================
+!!===========================================================
+
+
+
+!=============================================================== 
+!===============================================================
+        !   "rho.f"
+
+        !   Parameter   :   equation of state
+        !   Source      :   MILLERO et.al. (1980) DEEP-SEA RES.
+        !                   Vol 27A, pp 255-264
+        !   Units       :   Kg / m**3
+        !   Input       :   s (concentration units), t (deg C), p (MPa)
+        !   Range       :   s (0 to 0.040), t (-2 to 40), p (MPa)
+        !   Ck value    :   K (0, 0, 100)      = 2.297721e4
+        !                   K (0.035, 0, 100)  = 2.499200e4
+        !                   K (0, 25, 100)     = 2.54051e4
+        !                   K (0.035, 25, 100) = 2.710895e4
+        !   Coded       :   Ngoc Dang, July 1982
+
+        subroutine rho (s, t, p, density)
+
+        real(kind=8) s, t, p
+        real(kind=8) a, b, c, d, e, k, t1, t2, t3, t4, ta, tb
+        real(kind=8) k0, k0w, alpha0, alpha, rho0, aw, bw, density 
+
+
+        !  convert input units
+
+        s = 1000.0d0 * s
+        p = 10.0d0 * p
+
+        !  compute alpha0 = alpha (s, t, 0)
+
+        t1 = 9.99841594d-1 + t * (6.793952d-5 + t * (-9.095290d-6 + t * &
+             (1.001685d-7 + t * (-1.120083d-9 + t * 6.536332d-12))))
+     
+        t2 = 8.25917d-4 + t * (-4.4490d-6 + t * (1.0485d-7 + t *    &   
+             (-1.258d-9 + t * 3.315d-12)))
+             
+        t3 = -6.33761d-6 + t * (2.8441d-7 + t * (-1.6871d-8 + t *   &   
+             2.83258d-10))
+             
+        t4 = 5.4705d-7 + t * (-1.97975d-8 + t * (1.6641d-9 - t *    &   
+             3.1203d-11))
+     
+        rho0 = t1 + t2 * s + t3 * s**(1.5) + t4 * s**2
+        alpha0 = 1.0d0 / rho0
+
+        !  compute the pressure coefficient
+
+        !   the first term
+        k0w = 1.965221d4 + t * (1.484206d2 + t * (-2.327105d0 + t *   &  
+              (1.360477d-2 - t * 5.155288d-5)))
+              
+        ta = 5.46746d1 + t * (-6.03459d-1 + t * (1.09987d-2 - t *     &    
+             6.167d-5))
+             
+        tb = 7.944d-2 + t * (1.6483d-2 - t * 5.3009d-4)
+        k0 = k0w + ta * s + tb * s**(1.5)
+
+        !   the second term
+        aw = 3.239908d0 + t * (1.43713d-3 + t * (1.16092d-4 - t *  &     
+             5.77905d-7))
+     
+        c = 2.2838d-3 + t * (-1.0981d-5 - t * 1.6078d-6)
+        d = 1.9107d-4
+        a = aw + c * s + d * s**(1.5)
+
+        !   the third term
+        bw = 8.50935d-5 + t * (-6.12293d-6 + t * 5.2787d-8)
+        e = -9.9348d-7 + t * (2.0816d-8 + t * 9.1697d-10)
+        b = bw + e * s
+
+        k = k0 + a * p + b * p**2
+
+        !  compute density
+        alpha = alpha0 * (1.0d0 - p / k)
+        density = 1.0d0 / alpha
+
+        !  convert to kg / m**3
+        density = 1000.0d0 * density
+        s = s / 1000.0d0
+        p = p / 10.0d0
+
+        return
+        end
+!=============================================================== 
+!===============================================================
+
+ 
+
+!================================================================== 
+!==================================================================
+     subroutine eos
+!!=================================================================
+!!=================================================================
+!     Routine to calculate d'less pd from values of d'less s1 and s2
+!     and their reference profiles s1_bar(x,z) and s2_bar(x,z)
+!     The "perturbation" density is defined relative to the reference
+!     profile rho_bar(z) which is determined by s1_bar and s2_bar.
+!======================================================================
+!     scalars='TS'
+!     EOS from MILLERO et.al. (1980) DEEP-SEA RES.
+!     The scalar s1=temparature in deg C and 
+!     the scalar s2 is salinity in psu (i.e. ~ 36)
+!======================================================================
+      !use user_routines
+      use user_data
+      use independent_variables
+      use dependent_variables
+      use intermediate_variables
+      use mpi_params
+      use etc
+      
+      implicit none
+      real(kind=8)          :: xx,yy,PMpa
+      real(kind=8)          :: rho_bar,total_density
+      real(kind=8)          :: temperature,salinity
+      
+      PMpa = 0.0   !   compute potential density, not in situ density
+
+      if(        trim(scalar_kind(1)) .eq. 't'              &
+           .and. trim(scalar_kind(2)) .eq. 's' ) then
+           
+            xx=1.0    ! use this to keep  Salinity
+            yy=1.0    ! use this to keep Temperature
+            
+      elseif(    trim(scalar_kind(1)) .eq. 't'              &
+           .and. trim(scalar_kind(2)) .ne. 's' ) then
+           
+            yy=1.0    ! use this to keep Temperature
+            xx=0.0    ! use this to neglect Salinity
+            
+      elseif(    trim(scalar_kind(1)) .ne. 't'              &
+           .and. trim(scalar_kind(2)) .eq. 's' ) then
+           
+            xx=1.0    ! use this to keep  Salinity
+            yy=0.0    ! use this to neglect Temperature
+            
+      elseif( trim(scalar_kind(1)) .eq. 'r' ) then
+      
+            pd%SlabVals = scalars(1)%SlabVals
+            return
+        
+      elseif( trim(scalar_kind(2)) .eq. 'r' ) then
+      
+            pd%SlabVals = scalars(2)%SlabVals
+            return
+            
+      elseif(       trim(scalar_kind(2)) .eq. 'p'         &
+              .and. trim(scalar_kind(1)) .eq. 'p' ) then
+              
+            return    ! pd remains zero
+            
+      else
+      
+            stop 'problem parsing scalars code: eos in flow_solve.f90'
+       
+      endif
+
+      xx = xx/1000.d0  ! for units consistency w/ fortran routine rho
+      
+      do k=1,scalars(1)%DataMap%locnz
+         
+        Temperature = yy*(s1_bar(k)*s1_scale)         !! [deg C]
+        Salinity =    xx*(s2_bar(k)*s2_scale)         !! [psu]
+        call rho(Salinity,Temperature,Pmpa,rho_bar)   !! ambient density [kg/m3]                    
+        
+        do j=1,ny
+          do i=1,nx
+           
+           !!now repeat the calculations for total s1 & s2(x,y,z)
+           Temperature = yy*( (s1_bar(k)  +  &
+                               scalars(1)%SlabVals(i,j,k))*s1_scale ) ! dimensional, total Temp.
+ 
+           Salinity    = xx*( (s2_bar(k)  +  &
+                               scalars(2)%SlabVals(i,j,k))*s2_scale ) ! dimensional, total Salinity                        
+
+           call rho(Salinity,Temperature,PMpa,total_density) ! total density [kg/m3]
+           
+
+           pd%SlabVals(i,j,k) = (total_density - rho_bar)/(Lz*DGRAD)
+           
+
+         enddo
+        enddo
+       enddo  
+
+      end subroutine eos
+
+
+function acosh2 ( x )
+
+!*******************************************************************************
+!
+!! ACOSH2 returns the inverse hyperbolic cosine of a number.
+!
+!  Discussion:
+!
+!    Since a library function ACOSH may be available on some systems,
+!    this routine is named ACOSH2 to avoid name conflicts.
+!
+!    One formula is:
+!
+!      ACOSH2 = LOG ( X + SQRT ( X**2 - 1.0 ) )
+!
+!    but this formula suffers from roundoff and overflow problems.
+!    The formula used here was recommended by W Kahan, as discussed
+!    by Moler.
+!
+!    Applying the inverse function
+!
+!      Y = ACOSH2(X)
+!
+!    implies that
+!
+!      X = COSH(Y) = 0.5 * ( EXP(Y) + EXP(-Y) ).
+!
+!    For every X greater than or equal to 1, there are two possible
+!    choices Y such that X = COSH(Y), differing only in sign.  It
+!    is usual to resolve this choice by taking the value of ACOSH2(X)
+!    to be nonnegative.
+!
+!  Modified:
+!
+!    06 April 1999
+!
+!  Author:
+!
+!    John Burkardt
+!
+!  Reference:
+!
+!    Cleve Moler,
+!    Trigonometry is a Complex Subject,
+!    MATLAB News and Notes,
+!    Summer 1998.
+!
+!  Parameters:
+!
+!    Input, real ( kind = 8 ) X, the number whose inverse hyperbolic 
+!    cosine is desired.  X should be greater than or equal to 1.
+!
+!    Output, real ( kind = 8 ) ACOSH2, the inverse hyperbolic cosine of 
+!    X.  The principal value (that is, the positive value of the two ) 
+!    is returned.
+!
+  implicit none
+
+  real ( kind = 8 ) acosh2
+  real ( kind = 8 ) x
+
+  if ( x < 1.0D+00 ) then
+    write ( *, '(a)' ) ' '
+    write ( *, '(a)' ) 'ACOSH2 - Fatal error!'
+    write ( *, '(a)' ) '  Argument X must satisfy 1 <= X.'
+    write ( *, '(a,g14.6)' ) '  The input X = ', x
+    stop
+  end if
+
+  acosh2 = 2.0D+00 * log ( &
+    sqrt ( 0.5D+00 * ( x + 1.0D+00 ) ) + sqrt ( 0.5D+00 * ( x - 1.0D+00 ) ) )
+
+  return
+end
+
+
+
+
+
+subroutine AdjustDerivTypes(id,SV)
+ use Class_ScalarVariable
+ use dependent_variables
+ use etc
+ implicit none
+ integer                :: id
+ type( ScalarVariable ) :: SV(3)
+ 
+ !! Reset the deriv types for vector SV
+ !! On input, the three components of SV are:
+ !!   u_x, u_y, u_z   if id=1
+ !!   v_x, v_y, v_z   if id=2
+ !!   w_x, w_y, w_z   if id=3
+ !! the derivatives need to be set properly
+ !! so that div(SV) can be done correctly
+ 
+ if( id > 0 .and. id < 4 ) then
+ 
+  do i=1,3
+   if( velocity(id)%DataMap%DerivTypes(i)=='sin' ) then
+     SV(id)%DataMap%DerivTypes(i)='cos'
+   elseif( velocity(id)%DataMap%DerivTypes(i)=='cos' ) then
+     SV(id)%DataMap%DerivTypes(i)='sin'
+   else
+     SV(id)%DataMap%DerivTypes(i)=velocity(id)%DataMap%DerivTypes(i)
+   endif
+  enddo
+   
+  elseif( id == 4 ) then
+  
+   do i=1,3
+    if( scalars(1)%DataMap%DerivTypes(i)=='sin' ) then
+      SV(id)%DataMap%DerivTypes(i)='cos'
+    elseif( scalars(1)%DataMap%DerivTypes(i)=='cos' ) then
+      SV(id)%DataMap%DerivTypes(i)='sin'
+    else
+      SV(id)%DataMap%DerivTypes(i)=scalars(1)%DataMap%DerivTypes(i)
+    endif
+   enddo
+   
+  elseif( id == 5 ) then
+  
+   do i=1,3
+    if( scalars(2)%DataMap%DerivTypes(i)=='sin' ) then
+      SV(id)%DataMap%DerivTypes(i)='cos'
+    elseif( scalars(2)%DataMap%DerivTypes(i)=='cos' ) then
+      SV(id)%DataMap%DerivTypes(i)='sin'
+    else
+      SV(id)%DataMap%DerivTypes(i)=scalars(2)%DataMap%DerivTypes(i)
+    endif
+   enddo
+   
+  endif
+end subroutine AdjustDerivTypes
+
+!===================================================    
+!===================================================
+integer function factorial(k)
+integer::ans,n,k
+ ans=1
+ n=k
+ do while (n.GT.1)
+  ans=ans*n
+  n=n-1
+ enddo
+ factorial=ans
+ return
+end function factorial
+!===================================================    
+!===================================================
+
+
+
+!======================================================================
+!======================================================================
+function delta(x,eps)
+ implicit none
+ real(kind=8) :: delta,x,eps,recip
+ 
+ !!=================================
+ !! delta = (1/2eps) sech^2(x/eps)
+ !!  (a) in lim eps-->0, delta-->inf
+ !!  (b) int delta(x;eps) dx = 1
+ !!=================================
+ recip = 2.*eps*cosh(x/eps)**2
+ delta = 1.d0/recip
+                                 
+ return
+end function delta  
+!======================================================================
+!======================================================================
+
+
+!======================================================================
+!======================================================================
+function step(x,eps)
+ implicit none
+ real(kind=8) :: step,x,eps
+ 
+ !!=================================
+ !! step = (1/2){ tanh(x/eps) + 1. }
+ !!  [H] = 1. 
+ !!  d/dx(H) = step 
+ !!=================================
+ step = (0.5d0)*( tanh(x/eps) + 1.d0 )
+                                 
+ return
+end function step  
+!======================================================================
+!======================================================================
Index: /trunk/00FlowSolve_KW/src/utils/fminsi.f
===================================================================
--- /trunk/00FlowSolve_KW/src/utils/fminsi.f	(revision 6)
+++ /trunk/00FlowSolve_KW/src/utils/fminsi.f	(revision 6)
@@ -0,0 +1,1010 @@
+      SUBROUTINE FMINSI ( N, X, FU, EPS, FMIN, IER )
+C
+C Minimization of a function of N variables with a polytope method,
+C using only function values.
+C
+C   FMINSI - Fortran subroutines for unconstrained function minimization
+C   Copyright (C) 1992, 2001  Hugo Pfoertner
+C
+C   This library is free software; you can redistribute it and/or
+C   modify it under the terms of the GNU Lesser General Public
+C   License as published by the Free Software Foundation; either
+C   version 2.1 of the License, or (at your option) any later version.
+C
+C   This library is distributed in the hope that it will be useful,
+C   but WITHOUT ANY WARRANTY; without even the implied warranty of
+C   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+C   Lesser General Public License for more details.
+C
+C   You should have received a copy of the GNU Lesser General Public
+C   License along with this library; if not, write to the Free Software
+C   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
+C   USA
+C
+C   Contact info: mailto:hugo@pfoertner.org
+C   or use the information provided at http://www.pfoertner.org/
+C
+C Author: Hugo Pfoertner, Oberhaching, Germany
+C
+C Version History (German Language kept for authenticity ;-)
+C
+C 03.06.01 Translation finished, additional comments added, LGPL
+C 21.04.01 Start English translation of comments
+C 30.11.92 KOMPLETTE KONTRAKTION NUR BEI VERSAGEN DES EINFACHEN
+C          KONTRAKTIONSSCHRITTES
+C 27.11.92 KLEINSTER STARTSCHRITT: RMULT * EPS(I)
+C 16.11.92 MAXIMALE ITERATIONSZAHL = 400*N + N**3/2,
+C          ABFRAGE FUER WAHL DES EXPANDIERTEN PUNKTES GEAENDERT,
+C          MITTELPUNKTSBERECHNUNG UEBER AKTUALISIERUNG, REDUKTION DES
+C          EXPANSIONSFAKTORS BEI MEHRFACHER ERFOLGLOSER EXPANSION.
+C 16.01.91 BESCHRAENKUNG DER STARTSCHRITTEXPANSION AUF 10MAL
+C 15.01.91 BEI STARTWERTSUCHE MITTELS RANSTA WIRD NUR NOCH
+C          NACH VERAENDERTEM, NICHT MEHR NACH KLEINEREM F GESUCHT.
+C 13.06.89 EPSI-BERECHNUNG MODIFIZIERT, VERSUCH EINER WIEDERHERSTELLUNG
+C          DER VOM ANWENDER ANGEGEBENEN GENAUIGKEITSSCHRANKEN,
+C          ZUSAETZLICHES KONVERGENZKRITERIUM : 3*(N+1) ERFOLGLOSE
+C          KONTRAKTIONSVERSUCHE.
+C 09.06.89 EXPANSIONSFAKTOR GAMMA = 1 + 3/N
+C 28.10.87 ZUSAETZLICHE DIAGNOSEMELDUNGEN BEI GRADIENTENBERECHNUNG
+C          FUER STARTSCHRITT
+C 10.04.86 RANDOM-STARTWERTSUCHE UND DIAGNOSEMELDUNGEN
+C 1982     DIVERSE ERGAENZUNGEN (BUCH GILL/MURRAY),
+C          VERBESSERTE KONVERGENZKRITERIEN (EINFUEHRUNG EPSI)
+C 1978     BASISVERSION (ORIGINAL NELDER/MEAD ALGORITHMUS)
+C
+C References:
+C NELDER J.A., MEAD R.: A SIMPLEX METHOD FOR FUNCTION MINIMIZATION.
+C COMPUTER JOURNAL 7, 308-313, 1965
+C GILL G.E., MURRAY W., WRIGHT M.H.: PRACTICAL OPTIMIZATION.
+C ACADEMIC PRESS, LONDON, 1981 (S. 94-96)
+C BARABINO G.P. ET AL : A STUDY ON THE PERFORMANCE OF SIMPLEX METHODS
+C FOR FUNCTION MINIMIZATION. IN PROCEEDINGS OF THE IEEE INTERNATIONAL
+C CONFERENCE ON CIRCUITS AND COMPUTERS ICCC80, IEEE, NEW YORK, 1980
+C (S. 1150-1153)
+C SMITH J.D., HOLLOMAN M.E., OTTO W.E.: SIMMIN - A PROGRAM FOR
+C MINIMIZING FUNCTIONS BY SIMPLEX METHODS FOR IBM PC.
+C U.S. ARMY MISSILE COMMAND, REDSTONE ARSENAL, ALABAMA, DIRECTED
+C ENERGY DIRECTORATE,  TECHNICAL REPORT RD-DE-87-4, JULY 1987
+C
+C Description of parameters:
+C
+      INTEGER N, IER
+      REAL FU, FMIN, X(N), EPS(N)
+      EXTERNAL FU
+C N ... Number of variables.
+C       Local dimensions currently require N <= 128
+C X(N) ... vector of variables. When calling FMINSI the user has to
+C       provide the starting point of the minimization, i.e. an
+C       assumed or previously determined estimate of the location
+C       of a mimimum.
+C       After completion of FMINSI X contains the best approximation
+C       found for the loacation of a local minimum of the objective
+C       function.
+C FU(N,X) ... REAL FUNCTION, ojective function to be miminized,
+C       need neither be differentiable nor steady.
+C       FU has to declared as "EXTERNAL" in the calling program.
+C EPS ... vector of desired absolute accuracy for the single components
+C       of the result vector. The minimization is terminated, when the
+C       change of all components of the variable vector drops below
+C       the respective EPSI(I) in one optimization step. EPSI(I) is
+C       derived from the input vector EPS(I) by applying some
+C       plausibility checks to avoid using convergence limits not
+C       attainable with single precision arithmetic.
+C FMIN ... Lowest function value found at termination
+C IER ... "Return code", when FMINSI is terminated regularly, i.e. if
+C       a minimum has been found satisfying the convergence criterion,
+C       IER=0 is set on return.
+C       Situations returning IER>0:
+C       IER=1: N greater than max allowable dimension NMAX
+C       IER=2: No convergence reached within ITMAX (see below) steps.
+C              X contains the best approximation to the location of
+C              the minimum found when the iteration was terminated.
+C       IER=3: Objective function constant in the vicinity of the start
+C              location. Sometimes this situation is simply caused by
+C              the programmers failure to assign a value to the
+C              objective function
+C  The input value of IER is used to activate a printout of an
+C  execution trace to standard output using write (*,...) ...
+C  For a full visibility of the execution flow it is advisable to
+C  include printouts of the variable vector and of the computed
+C  function value into the source of the objective function.
+C  As FMINSI overwrites IER on exit, it is necessary to restore IER
+C  to a negative value before calling FMINSI again, when trace output
+C  is required for consecutive executions.
+C
+C Declaration of local variables (undeclared variables use the
+C Fortran standard implicit type convention (I..N Integer), else Real
+C
+C FMINSI uses single precision reals, which I've found to be always
+C sufficient within the optimization routine in 25 years of optimization
+C experience, also with "industrial grade" problems.
+C Double precision is usually only needed for some intermediate 
+C calculations within the objective functions. With the spreading use of
+C 64 bit processors this problem gradually vanishes in the long term
+C
+      LOGICAL TEST, MODEPS, AVGUPD
+C
+C
+C This limits the problem dimension, using the method for higher N 
+C requires a corresponding modification of NMAX.
+C It is not recommended to use FMINSI for such high problem dimensions, 
+C mainly due to the inevitable progressive collapse of the search
+C polytope during the iteration (currently there is no mechanism to
+C restore the polytope to full rank other than restarting by a new call)
+C
+      PARAMETER ( NMAX=128, NMP1=NMAX+1 )
+      DIMENSION EPSI(NMAX), SIM(NMAX,NMP1), F(NMP1)
+     &         ,XAV(NMAX), XST(NMAX), XSTST(NMAX)
+C
+C The function name is also passed into the call sequence of
+C subroutine RANSTA, therefore
+C**** EXTERNAL FU (declaration already made above)
+C
+C Factors for shape adjustment of the search polytope
+C
+      DATA ALPHA, BETA, GAMM0, GAMM1 / 1.0, 0.5, 1.0, 3.0 /,
+     &     RMULT / 8.0 /,  ISTMAX / 10 /
+C
+C Some other real constants
+C
+      DATA ZERO, ONE, HALF / 0.0, 1.0, 0.5 /
+     &    ,SMALL, VSMALL / 1.E-6, 1.E-30 /
+C
+C Activate printout of execution trace
+      TEST = IER .LT. 0
+C
+C Maximum number of iterations, found to be a good compromise except
+C for really pathological problems
+C
+      ITMAX = 400 * N  +  N**3 / 2
+C
+C Check for admissible range of problem dimension
+C
+      IER = 0
+      IF ( TEST ) WRITE (*,*) ' START FMINSI, VERSION 1992/11/30'
+      IF ( N .LT. 1 ) THEN
+        WRITE ( *, 1003 ) N
+1003    FORMAT (' +++++FMINSI : N =',I3,' ILLEGAL')
+        IER = 1
+        GOTO 999
+      ENDIF
+C
+      IF ( N .GT. NMAX ) THEN
+        WRITE ( *, 1000 ) N
+1000    FORMAT(' +++++FMINSI: DIMENSION N =',I4,' TOO LARGE')
+        IER = 1
+        GOTO 999
+      ENDIF
+C
+C Expansion factor variable and dependent on problem dimension:
+C This is the most important enhancement of the original method.
+C The idea is due to Barabino et al. (see references above),
+C but they did not provide a method to determine the factor.
+C The formula used here was found to be the best compromise in
+C a parameter study performed in 1989 with quadratic problems for N up 
+C to 100, using random coefficients plus a modification of the diagonal
+C elements to get a prescribed problem condition number.
+C
+      GAMMA = GAMM0 + GAMM1 / REAL ( N )
+      IF ( TEST ) WRITE (*,*) ' EXPANSION FACTOR GAMMA = ', GAMMA
+C
+C Starting value of the expansion factor. The factor is dynamically
+C adjusted. It is reduced if successive expansion steps fail.
+C Following successul expansion steps it is restored.
+C
+      GAMMD = GAMMA
+C
+C Number of vertices of the simplex
+      NP = N + 1
+C
+C Auxiliary value 1 / N
+      EDN = 1.0 / REAL(N)
+C
+C Initial choice of the method to determine average of simplex points
+      AVGUPD = .FALSE.
+C
+C Check plausibility of user supplied absolute accuracy vector.
+C Internally a (modified if necessary) vector EPSI is used.
+C
+      MODEPS = .FALSE.
+      DO 305 I = 1, N
+      EPSI(I) = MAX ( ABS (EPS(I)), 1.0E-5 * ABS (X(I)) )
+      IF ( EPSI(I) .LT. VSMALL ) EPSI(I) = MAX (SMALL,ABS(X(I)*SMALL))
+      IF ( EPS(I) .NE. EPSI(I) ) MODEPS = .TRUE.
+305   CONTINUE
+      IF ( TEST .AND. MODEPS )
+     &      WRITE (*,*) ' CONVERGENCE LIMITS MODIFIED'
+C
+C Use a heuristic method to determine step sizes to compute
+C an approximation of the gradient direction at the starting point
+      DO 306 I = 1, N
+      XAV(I) = MAX ( 0.001*ABS(X(I)), EPSI(I) )
+306   CONTINUE
+      IF ( TEST ) WRITE (*,*)
+     & ' STEP SIZE TO ESTIMATE GRADIENT : ', (XAV(K),K=1,N)
+C
+C Determine the possible expansion of an EPSI sized simplex
+C by performing an approximate steepest descent step
+C
+C Difference approximation of -G at starting point, stored on XSTST
+      IF ( TEST ) WRITE (*,*) ' DIFFERENCE APPROXIMATION FOR -G :'
+      F0 = FU ( N, X(1) )
+      IF ( TEST ) WRITE (*,*) ' FUNCTION VALUE AT STARTING POINT : ', F0
+      DO 310 I = 1, N
+      DO 320 J = 1, N
+320   XST(J) = X(J)
+      XST(I) = XST(I) + XAV(I)
+      IF ( TEST ) WRITE (*,*) ' COMPONENT ', I,
+     &            ' X = ', (XST(K),K=1,N)
+      H = FU ( N, XST(1) )
+      IF ( TEST ) WRITE (*,*) ' FUNCTION VALUE : ', H
+      F(I) = XAV(I)
+C
+C Determine positive or negative direction along co-ordinate axes
+C changed 27.11.92, old version:
+C***  IF ( F0 .LT. H ) F(I) = -HALF*F(I)
+      IF ( F0 .LT. H ) F(I) = - F(I)
+      XSTST(I) = ( F0 - H ) / XAV(I)
+310   CONTINUE
+C
+C Normalize G to the maximum norm of EPS
+      HG = ZERO
+      HE = ZERO
+      DO 330 I = 1, N
+      HG = AMAX1 ( HG, ABS(XSTST(I)) )
+      HE = AMAX1 ( HE, XAV(I) )
+330   CONTINUE
+C
+C If the norm of the gradient is too small, i.e. the function
+C is approximately constant in the vicinity of the user supplied
+C starting point, then a random search with repeated increase
+C of variance is tried around the starting point, with the aim
+C of to get away from the flat region.
+C
+      IF ( HG .LT. VSMALL ) THEN
+        IF ( TEST )
+     &  WRITE (*,*) ' RANDOM SEARCH FOR BETTER STARTING POINT'
+        DO 333 I = 1, N
+333     XAV(I)= X(I)
+C
+C The search is performed by a separate subroutine RANSTA.
+C It either returns a point with a different function value
+C or IER=3 if the search failed.
+C
+        CALL RANSTA ( N, XAV, FU, EPSI, F1, IER )
+        IF ( IER .EQ. 0 ) THEN
+          IF ( TEST )
+     &    WRITE (*,*) ' SEARCH FOR START POINT SUCCESSFUL, F1 = ', F1
+C
+C Check for increase of F1
+C
+      IF ( F1 .GT. F0 ) THEN
+        IF ( TEST ) 
+     &  WRITE (*,*) ' SEARCH DIRECTION REVERSED'
+        DO 336 I = 1, N
+        F(I) = X(I)
+        X(I) = XAV(I)
+        XAV(I) = F(I)
+336     CONTINUE
+        H = F1
+        F1 = F0
+        F0 = H
+      ENDIF
+C
+C Difference vector from starting point
+C
+          DO 337 I = 1, N
+          XSTST(I) = XAV(I) - X(I)
+C
+C Steps along the co-ordinate axes are  limited to a minimum
+C size of EPSI(i)
+C
+          IF ( ABS (XSTST(I)) .LT. EPSI(I) ) THEN
+            F(I) = SIGN ( EPSI(I), XSTST(I) )
+          ELSE
+            F(I) = XSTST(I)
+          ENDIF
+337       CONTINUE
+C
+C Skip forward, if starting steps have been successfully determined
+C by the random search (Label 345 approx 16 lines below)
+C
+C A short note on software quality:
+C Sorry to all those software gurus for the GOTOs, but the roots 
+C of FMINSI date back to the mid seventies, using Fortran IV.
+C You know "IF(I-J)10,20,10" ....
+C At that time I didn't bother about maintainability of software.
+C BTW, I have written Ada programs used in aircraft on-board systems,
+C where software quality assurance would have sent me to hell for using 
+C only 5% of the control flow complexity of this program.
+C I never tried to determine the McCabe of this code ;-)
+C
+          GOTO 345
+        ENDIF
+CKW       WRITE ( *, 1002 ) F0
+1002    FORMAT(' +++++FMINSI: Function approximately constant',
+     &         ' around starting point',/,14X,'F= ', E13.6 )
+        FMIN = F0
+        GOTO 999
+      ENDIF
+C
+      HG = HE / HG
+C
+      DO 340 I = 1, N
+340   XSTST(I) = XSTST(I) * HG
+C
+C Label 345 is the target location, if the first search direction
+C was the result of a random search
+C
+345   CONTINUE
+C
+C Perform a quasi steepest descent step
+      START = ONE / RMULT
+      J = 0
+C
+C Start of expansion loop
+C
+350   CONTINUE
+C
+C Increase counter J for the number of expansion steps
+C
+      J = J + 1
+      START = START * RMULT
+      DO 360 I = 1, N
+360   X(I) = X(I) + START * XSTST(I)
+      F1 = FU ( N, X(1) )
+C
+C Expansion is terminated after ISTMAX steps (skip downwards)
+C
+      IF ( F1 .GT. F0  .OR.  J .GT. ISTMAX ) GOTO 370
+C
+C Size of starting step can be increased further
+C
+      F0 = F1
+C
+C Skip back to the next expansion step
+C
+      GOTO 350
+C
+C The point before the last one was the best
+C
+370   CONTINUE
+      F(NP) = F0
+C
+C Restore the corresponding location
+C
+      DO 380 I = 1, N
+380   X(I) = X(I) - START * XSTST(I)
+      H = RMULT
+      START = START / H
+C
+      START = MAX ( START, RMULT )
+C
+390   CONTINUE
+C
+      IF ( TEST )
+     &  WRITE (*,*) ' MULT=',START,' EPSI:',(EPSI(I),I=1,N)
+C
+C Create initial simplex, using the start expansion factor START
+C and the co-ordinate step sizes stored in vector F
+C
+      DO 10 I = 1, N
+      SIM(I,NP) = X(I)
+10    CONTINUE
+C
+      DO 20 I = 1, N
+      DO 25 J = 1, N
+25    SIM(J,I) = X(J)
+      SIM(I,I) = SIM(I,I) + START * F(I)
+20    CONTINUE
+C
+C Compute function values at vertices of simplex
+C
+      DO 30 I = 1, N
+30    F(I) = FU ( N, SIM(1,I) )
+C
+C Initialize iteration count L
+C
+      L = 0
+C
+C Initialize no-success counters for expansion and contraction steps
+C
+      NSUCC = 0
+      NOXSUC = 0
+C
+C Start of main iteration loop
+C ============================
+C
+35    CONTINUE
+C
+      L = L + 1
+C
+C Test for termination due to exceeding the maximum iteration count
+C
+      IF ( L .GT. ITMAX ) THEN
+        IER = 2
+        WRITE (*,1001) L
+1001    FORMAT(' +++++FMINSI: STOPPED AFTER',I7,' ITERATIONS',
+     &  /      '              NO CONVERGENCE REACHED')
+C
+C Copy best approximation to output and jump to exit
+C
+        DO 34 I = 1, N
+34      X(I) = SIM(I,1)
+        FMIN = F(1)
+        GOTO 999
+      ENDIF
+C
+C Search for minimum and maximum function value
+C
+36    CONTINUE
+      ILO = 1
+      IHI = 1
+      FLO = F(1)
+      FHI = F(1)
+C
+      DO 50 I = 2, NP
+      IF ( F(I) .LT. FLO ) THEN
+        FLO = F(I)
+        ILO = I
+      ELSE IF ( F(I) .GT. FHI ) THEN
+        FHI = F(I)
+        IHI = I
+      ENDIF
+50    CONTINUE
+      IF ( TEST )
+     & WRITE (*,*) ' FLO=',FLO, ' IHI=',IHI, ' FHI=',FHI
+C
+C Convergence is assumed if function is constant within simplex
+C
+      IF ( ILO .EQ. IHI ) THEN
+        DO 55 I = 1, N
+55      X(I) = SIM(I,ILO)
+        FMIN = F(ILO)
+        IF ( TEST ) WRITE (*,*) ' FUNCTION CONSTANT =', FMIN
+        GOTO 999
+      ENDIF
+C
+C Move point with highest function value to index NP
+C
+      IF ( ILO .EQ. NP ) ILO = IHI
+      IF ( IHI .NE. NP ) THEN
+        DO 60 I = 1, N
+        H = SIM(I,NP)
+        SIM(I,NP) = SIM(I,IHI)
+        SIM(I,IHI) = H
+60      CONTINUE
+        H = F(NP)
+        F(NP) = FHI
+        F(IHI) = H
+C
+C Update location of center of gravity
+C (recomputing has been found to be the most expensive loop for
+C higher N in a performance analysis of the program)
+C
+        IF ( AVGUPD ) THEN
+          DO 65 I = 1, N
+          XAV(I) = XAV(I) + EDN * ( SIM(I,IHI) - SIM(I,NP) )
+65        CONTINUE
+        ENDIF
+      ENDIF
+C
+C Move point with lowest function value to index 1
+C
+      IF ( ILO .NE. 1 ) THEN
+        DO 70 I = 1, N
+        H = SIM(I,1)
+        SIM(I,1) = SIM(I,ILO)
+        SIM(I,ILO) = H
+70      CONTINUE
+        H = F(1)
+        F(1) = FLO
+        F(ILO) = H
+      ENDIF
+C
+C Auxiliary convergence test
+C (proposed by Smith et al., see references above)
+C Check for many unsuccessful contraction steps
+C
+      IF ( NSUCC .GT. 3*NP ) THEN
+        IF ( TEST ) WRITE (*,*) ' STOPPED AFTER ', NSUCC,
+     &    ' FAILED CONTRACTION STEPS'
+        GOTO 712
+      ENDIF
+C
+C Target label for repeating the convergence test, if the
+C user supplied EPS has been modified during the initial
+C plausibility check.
+C
+701   CONTINUE
+C
+C Test for convergence: Assume convergence, if all components
+C of the difference vector between the maximum and minimum points
+C of the simplex have an absolute value less than EPSI(i)
+C
+      DO 71 I = 1, N
+      IF ( ABS ( SIM(I,NP)-SIM(I,1) ) .GT. EPSI(I) ) GOTO 75
+71    CONTINUE
+C
+C Check if the convergence test was passed against modified limits
+C
+      IF ( MODEPS ) THEN
+C
+C Try to restore user supplied limits, unless too demanding
+C for single precision arithmetic
+C
+        DO 711 I = 1, N
+        EPSI(I) = MAX ( ABS(EPS(I)), ABS(SIM(I,1))*1.0E-5 )
+711     CONTINUE
+        MODEPS = .FALSE.
+        IF ( TEST ) WRITE (*,*) ' CONVERGENCE LIMITS RESTORED'
+        GOTO 701
+      ENDIF
+C
+C Target label after exceeding NSUCC
+C
+712   CONTINUE
+C
+C Convergence reached
+C
+      IF ( TEST )
+     &    WRITE (*,*) ' CONVERGENCE ACHIEVED, FMIN=', F(1)
+      DO 72 I = 1, N
+72    X(I) = SIM(I,1)
+      FMIN = F(1)
+      GOTO 999
+C
+75    CONTINUE
+C
+C Compute the center of gravity of all points, but
+C omitting the point with the highest function value.
+C Normally this is done by an update formula, but after
+C a contraction of the whole simplex it is necessary to
+C recompute the whole sum.
+C
+      IF ( .NOT. AVGUPD ) THEN
+C
+        DO 80 I = 1, N
+        H = ZERO
+        DO 85 J = 1, N
+85      H = H + SIM(I,J)
+        XAV(I) = H * EDN
+80      CONTINUE
+C
+C Reset state to "use update formula"
+        AVGUPD = .TRUE.
+      ENDIF
+C
+C Reflexion: Reverse the principal search direction
+C
+      DO 90 I = 1, N
+90    XST(I) = ( ONE + ALPHA ) * XAV(I) - ALPHA * SIM(I,NP)
+      FST = FU ( N, XST(1) )
+C
+C Check if the reflected point is a new minimum (skip forward)
+C
+      IF ( FST .GE. FLO ) GOTO 110
+C
+C Reset counter for unsuccessful contractions
+C
+      NSUCC = 0
+      IF ( TEST )
+     &  WRITE (*,*) ' REFLEXION SUCCESSFUL, FST =',FST
+C
+C Try an expansion into the direction of the reflected point
+C
+      DO 120 I = 1, N
+120   XSTST(I) = ( ONE - GAMMD ) * XAV(I) + GAMMD * XST(I)
+      FSTST = FU ( N, XSTST(1) )
+C
+C Changed 16.11.92 : Result of expansion is compared against
+C result of reflexion and not against minimum
+C Instead of:  IF ( FSTST .GE. FLO ) THEN
+C New:
+      IF ( FSTST .GT. FST ) THEN
+C
+C Increase counter for unsuccessful expansions
+C
+        NOXSUC = NOXSUC + 1
+        IF ( NOXSUC .GT. N ) THEN
+C
+C Reduce expansion factor
+C
+          GAMMD = HALF * ( GAMM0 + GAMMD )
+          IF ( TEST )
+     &      WRITE (*,*) ' EXPANSION FACTOR REDUCED TO ', GAMMD
+        ENDIF
+C Skip forward
+        GOTO 140
+      ENDIF
+C
+C A new minimum was found by the expansion step
+C
+      IF ( TEST )
+     &  WRITE (*,*) ' EXPANSION SUCCESSFUL, FSTST =', FSTST
+C
+C Reset all non-success counters
+C
+      NSUCC = 0
+      NOXSUC = 0
+C
+C Restore expansion factor to the (dimension dependent)
+C default value
+C
+      GAMMD = GAMMA
+C
+C Target label after successful contraction
+C
+130   CONTINUE
+C
+      DO 150 I = 1, N
+150   SIM(I,NP) = XSTST(I)
+      F(NP) = FSTST
+C
+C Jump back to the next iteration step
+C ====================================
+C
+      GOTO 35
+C
+C Reflexion did not find a new minimum
+C 
+110   CONTINUE
+C
+C Check if reflexion result is at least better than one of the
+C remaining points
+C
+      DO 170 I = 2, N
+      IF ( FST .LT. F(I) ) GOTO 140
+170   CONTINUE
+C
+C Reflected point does not lead to an exchange of maximum
+C
+      GOTO 171
+C
+C Target label, if the reflexion result can be used to replace
+C the worst point
+C
+140   CONTINUE
+C
+C Replace worst point by XST
+C
+      DO 220 I = 1, N
+220   SIM(I,NP) = XST(I)
+      F(NP) = FST
+C Reset counter for unsuccessful contractions
+      NSUCC = 0
+C
+C Skip back to next iteration step
+C ================================
+C
+      GOTO 35
+C
+C Target label, if reflected point did not lead to an exchange
+C of the worst point
+C
+171   CONTINUE
+C
+C Check if reflected point is at least better than the previous
+C maximum
+C
+      IF ( FST .LT. FHI ) THEN
+        DO 173 I = 1, N
+173     SIM(I,NP) = XST(I)
+        F(NP) = FST
+        FHI = FST
+      ENDIF
+C
+C Reflected point could not replace maximum.
+C Try to contract point with highest F towards center of gravity.
+C
+      IF ( TEST )
+     & WRITE (*,*) ' CONTRACTION TOWARDS CENTER'
+      DO 180 I = 1, N
+180   XSTST(I) = BETA * SIM(I,NP) + ( ONE - BETA ) * XAV(I)
+      FSTST = FU ( N, XSTST(1) )
+C Changed 30.11.92, Instead of :
+C***  IF ( FSTST .LT. FHI .AND. FSTST .GT. FLO ) GOTO 130
+      IF ( FSTST .LT. FLO ) THEN
+C
+C Contracted point is new minimum
+C
+        IF ( TEST )
+     &  WRITE (*,*) ' NEW MINIMUM FOUND BY CONTRACTION:', FSTST
+        NSUCC = 0
+      ELSE
+C
+C Increase counter for unsucessful contractions
+C
+        NSUCC = NSUCC + 1
+      ENDIF
+C
+C Check if contracted point is better than maximum (go up)
+C
+      IF ( FSTST .LT. FHI ) GOTO 130
+C
+C After an unsuccessful contraction all points of
+C the simplex are contracted towards the minimum.
+C Set flag indicating the need for a full recomputation
+C of the center of gravity in the next step
+C
+      AVGUPD = .FALSE.
+C
+      IF ( TEST )
+     &   WRITE (*,*) ' SIMPLEX CONTRACTED'
+C
+      IMIN = 1
+C
+      DO 190 I = 2, NP
+      DO 200 J = 1, N
+200   SIM(J,I) = HALF * ( SIM(J,I) + SIM(J,IMIN) )
+      F(I) = FU ( N, SIM(1,I) )
+C
+C Check if contracted point is a new minimum,
+C the remaining points will be moved towards the new target
+C
+      IF ( F(I) .LT. FLO ) THEN
+        NSUCC = 0
+        IF ( TEST )
+     &  WRITE (*,*) ' MINIMUM EXCHANGED, I=',I, ' F=',F(I)
+        FLO = F(I)
+        IMIN = I
+      ENDIF
+C
+190   CONTINUE
+C
+C Skip back to next iteration step
+C ================================
+C
+      GOTO 35
+C
+C End of main iteration loop
+C
+999   RETURN
+C
+C End of subroutine FMINSI
+C
+      END
+      SUBROUTINE RANSTA ( N, X, FU, EPS, F0, IER )
+C
+C Random search to determine a point with a function value that is 
+C different from the one found at the starting point X
+C This is an auxiliary subroutine to support the minimization
+C subroutine FMINSI
+C
+C   FMINSI - Fortran subroutines for unconstrained function minimization
+C   Copyright (C) 1986, 1993, 2001  Hugo Pfoertner
+C
+C   This library is free software; you can redistribute it and/or
+C   modify it under the terms of the GNU Lesser General Public
+C   License as published by the Free Software Foundation; either
+C   version 2.1 of the License, or (at your option) any later version.
+C
+C   This library is distributed in the hope that it will be useful,
+C   but WITHOUT ANY WARRANTY; without even the implied warranty of
+C   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+C   Lesser General Public License for more details.
+C
+C   You should have received a copy of the GNU Lesser General Public
+C   License along with this library; if not, write to the Free Software
+C   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
+C   USA
+C
+C   Contact info: mailto:hugo@pfoertner.org
+C   or use the information provided at http://www.pfoertner.org/
+C
+C Author: Hugo Pfoertner, Oberhaching, Germany
+C
+C Version History (left in German):
+C 02.06.01 English translation of comments, LGPL header added
+C 27.11.93 ZUFALLSZAHLENGENERATOR RANEWR UND INIRAN EINGEBAUT
+C 16.11.92 DIMENSIONIERUNG AUF 128 ERHOEHT
+C 15.01.91 ABFRAGE AUF AENDERUNG STATT AUF VERMINDERUNG DES
+C          FUNKTIONSWERTES
+C 09.04.86 BASISVERSION
+C
+C The meaning of the parameters is the same as in subroutine FMINSI
+      INTEGER N, IER
+      REAL FU, F0, X(N), EPS(N)
+      EXTERNAL FU
+C Output:
+C F0 ...  Changed function value
+C X ...   Variable vector of point with different function value
+C         if such a point has been found, unchanged otherwise
+C IER ... 0, if a point with changed function value has been found
+C         3 otherwise (search stopped without success after 100*N
+C         function evaluations.
+C
+C Dimension of local arrays has to be compliant with corresponding
+C size within FMINSI
+      PARAMETER ( NMAX=128 )
+      REAL RS(NMAX), XS(NMAX)
+C Uniform random number generator and corresponding initialization
+      REAL RANUWH
+      EXTERNAL INIRAN, RANUWH
+C
+C
+C Preset return code with "No success"
+      IER = 3
+C
+C Initialize uniform random number generator
+C
+      CALL INIRAN
+C
+C Set initial step size
+      DO 10 K = 1, N
+      RS(K) = 10. * EPS(K)
+10    CONTINUE
+C
+C After N2 function evaluations, an increase in variance is tried
+      N2 = 2**N
+C
+C Maximum number of function evaluations
+      NT = 100 * N
+C
+C Function value at starting point
+      F0 = FU ( N, X )
+      LL = 0
+C
+C Loop over maximum number of trials
+      DO 20 L = 1, NT
+      DO 30 NN = 1, N
+C
+C Set co-ordinates to starting point + random increment
+C in the range +-RS(i)
+      XS(NN) = X(NN) + RS(NN) * 2. * ( RANUWH() - 0.5 )
+30    CONTINUE
+C
+C Corresponding function value
+      H = FU ( N, XS )
+C
+C Check for change
+      IF ( H .NE. F0 ) THEN
+C
+C Loop is terminated at first occurrence of changed value
+        F0 = H
+        DO 40 K = 1, N
+40      X(K) = XS(K)
+        IER = 0
+        GOTO 999
+      ENDIF
+C
+C After N2 trials without success, the variance is increased
+C
+      LL = LL + 1
+      IF ( LL .GE. N2 ) THEN
+        DO 50 K = 1, N
+50      RS(K) = RS(K) + RS(K)
+        LL = 0
+      ENDIF
+C
+C End of loop over maximum number of trials
+20    CONTINUE
+C
+999   CONTINUE
+      RETURN
+C End of subroutine RANSTA
+      END
+      REAL FUNCTION RANUWH ()
+C
+C Portable uniform random number generator, using the
+C method of Wichmann and Hill. This file contains the program units
+C RANUWH, INIRAN and RAWHIN. These are auxiliary functions for FMINSI,
+C but may also be used separately.
+C
+C   FMINSI - Fortran subroutines for unconstrained function minimization
+C   Copyright (C) 1992, 1995, 2001  Hugo Pfoertner
+C
+C   This library is free software; you can redistribute it and/or
+C   modify it under the terms of the GNU Lesser General Public
+C   License as published by the Free Software Foundation; either
+C   version 2.1 of the License, or (at your option) any later version.
+C
+C   This library is distributed in the hope that it will be useful,
+C   but WITHOUT ANY WARRANTY; without even the implied warranty of
+C   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+C   Lesser General Public License for more details.
+C
+C   You should have received a copy of the GNU Lesser General Public
+C   License along with this library; if not, write to the Free Software
+C   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
+C   USA
+C
+C   Contact info: mailto:hugo@pfoertner.org
+C   or use the information provided at http://www.pfoertner.org/
+C
+C Author: Hugo Pfoertner, Oberhaching, Germany
+C 
+C Uniform random numbers R in the range 0.0 <= R < 1.0 are created
+C This function is written in portable Fortran 77 and does not depend
+C on the implementation of overflow of integers. It should return
+C the same sequence of random numbers on any machine, independent of
+C the machine's architecture. Only standard integer arithmetic is used.
+C
+C
+C Version History (left in German):
+C 02.06.01 English translation of comments, LGPL header added
+C 26.08.95 EXTERNAL RAEWIN ENGEFUEGT, UM UEBER BLOCKDATA-LINK
+C          STARTBELEGUNG AUCH OHNE INIRAN-AUFRUF ZU ERZWINGEN
+C 07.12.92 BASISVERSION
+C
+C Reference: WICHMANN AND HILL: APPL. STATIST. (JRSSC),
+C                               (31) 188-190, (1982)
+C
+C Memory, implemented in Common block RWHRAN
+C Before the first call the memory of the function has to be
+C preset by calling INIRAN
+C
+      INTEGER IX, IY, IZ
+      COMMON /RWHRAN/ IX, IY, IZ
+C
+C The block data program unit is referenced here to assure a
+C proper initialization of the memory, even if the call to
+C INIRAN is forgotten. The EXTERNAL statement forces the linker
+C to include the initial values.
+C
+      EXTERNAL RAWHIN
+C
+C Advance memory
+      IX = 171 * MOD ( IX, 177) -  2 * ( IX / 177 )
+      IY = 172 * MOD ( IY, 176) - 35 * ( IY / 176 )
+      IZ = 170 * MOD ( IZ, 178) - 63 * ( IZ / 178 )
+C
+C Bring into non-negative range
+      IF ( IX .LT. 0 ) IX = IX + 30269
+      IF ( IY .LT. 0 ) IY = IY + 30307
+      IF ( IZ .LT. 0 ) IZ = IZ + 30323
+C
+C Truncate to 0..1 real number
+      RANUWH = MOD ( REAL(IX) / 30269.0
+     &             + REAL(IY) / 30307.0
+     &             + REAL(IZ) / 30323.0,  1.0 )
+C
+      RETURN
+C End of function RANUWH
+      END
+C *******************************************************************
+      SUBROUTINE INIRAN
+C
+C This subroutine is part of the FMINSI program library.
+C Purpose:
+C Set starting values for uniform random number generator RANUWH
+C See copyright notice given in function RANUWH
+C
+C Author: Hugo Pfoertner, Oberhaching
+C
+C Version History:
+C 07.12.92 Initial version
+C
+C Reference: WICHMANN AND HILL: APPL. STATIST. (JRSSC),
+C                               (31) 188-190, (1982)
+C
+C Memory:
+      INTEGER IX, IY, IZ
+      COMMON /RWHRAN/ IX, IY, IZ
+C
+C Set initial values
+      IX = 1974
+      IY = 235
+      IZ = 337
+C
+      RETURN
+C End of subroutine INIRAN
+      END
+C *******************************************************************
+      BLOCKDATA RAWHIN
+C
+C This program unit is part of the FMINSI program library
+C Purpose:
+C Forced setting of initial values (e.g. if call to INIRAN is omitted)
+C See copyright notice given in function RANUWH
+C
+C Author: Hugo Pfoertner, Oberhaching
+C
+C Version History:
+C 26.08.95 Initial version
+C
+      INTEGER IX, IY, IZ
+      COMMON /RWHRAN/ IX, IY, IZ
+      DATA IX, IY, IZ / 1974, 235, 337 /
+C End of blockdata RAWHIN
+      END
Index: /trunk/00FlowSolve_KW/src/utils/interface_petsc.f90
===================================================================
--- /trunk/00FlowSolve_KW/src/utils/interface_petsc.f90	(revision 6)
+++ /trunk/00FlowSolve_KW/src/utils/interface_petsc.f90	(revision 6)
@@ -0,0 +1,149 @@
+module InterfacePetsc
+ use class_ScalarVariable 
+  
+ public  ::  ScalarVariable2PetscVec
+ public  ::  PetscVec2Scalar
+ 
+ Contains
+ 
+subroutine ScalarVariable2PetscVec(f,petsc_vector)
+use class_ScalarVariable
+implicit none
+#include "finclude/petsc.h"
+#include "finclude/petscvec.h"
+
+Vec                       petsc_vector
+type( ScalarVariable ) :: f
+integer,allocatable, SAVE :: indices(:)
+integer                :: ihi,ilo
+integer                :: icount
+integer                :: i,j,k
+integer                :: jerr,myid
+integer, SAVE          :: nlocal
+logical, SAVE          :: first_entry = .TRUE.
+
+if( first_entry ) then
+ call mpi_comm_rank(MPI_COMM_WORLD,myid,jerr)
+  if(jerr .ne. 0 ) &
+  stop 'ScalarVariable2PetscVec: error calling mpi_comm_rank'
+     
+  nlocal = f%DataMap%SlabDims(1,myid)  &
+         * f%DataMap%SlabDims(2,myid)  &
+         * f%DataMap%SlabDims(3,myid)
+   
+  !! set up an "indices" array corresponding to 
+  !! normal fortran array indexing but starting at 0
+  allocate( indices(nlocal) )
+   icount=0
+   do k=1,f%DataMap%SlabDims(3,myid)
+    do j=1,f%DataMap%SlabDims(2,myid)
+     do i=1,f%DataMap%SlabDims(1,myid)
+      indices(icount + 1)=icount
+      icount=icount+1
+    enddo
+   enddo
+  enddo
+  
+  call VecGetOwnershipRange(petsc_vector,ilo,ihi,jerr)
+  if(jerr .ne. 0 ) &
+  stop 'ScalarVariable2PetscVec: error calling VecGetOwnershipRange'
+  indices=indices + (ilo)
+    
+ first_entry = .FALSE.
+endif
+
+!!=================================================
+!!store the values in the petsc vector
+!!=================================================
+ 
+ call VecSetValues(petsc_vector,nlocal,indices,    &
+                   f%SlabVals,Insert_Values,jerr)
+                   
+  if(jerr .ne. 0 ) &
+  stop 'ScalarVariable2PetscVec: error calling VecSetValues'
+  
+ call VecAssemblyBegin(petsc_vector,jerr)
+  if(jerr .ne. 0 ) &
+  stop 'ScalarVariable2PetscVec: error calling VecAssemblyBegin'
+  
+ call VecAssemblyEnd(petsc_vector,jerr) 
+  if(jerr .ne. 0 ) &
+  stop 'ScalarVariable2PetscVec: error calling VecAssemblyEnd'
+ 
+!!=================================================
+!!=================================================
+end subroutine ScalarVariable2PetscVec
+
+
+
+
+
+
+
+
+!!=================================================
+!!=================================================
+subroutine PetscVec2Scalar(petsc_vector,f)
+use class_ScalarVariable
+
+implicit none
+#include "finclude/petsc.h"
+#include "finclude/petscvec.h"
+
+type( ScalarVariable ) :: f
+Vec                       petsc_vector
+
+integer                   :: ilo,ihi
+integer                   :: i,j,k,icount
+integer,allocatable, SAVE :: indices(:)
+integer, SAVE             :: myid,jerr,nlocal
+logical, SAVE             :: first_entry = .TRUE.
+
+if( first_entry ) then
+ call mpi_comm_rank(MPI_COMM_WORLD,myid,jerr)
+  if(jerr .ne. 0 ) &
+  stop 'PetscVec2Scalar: error calling mpi_comm_rank'
+     
+  nlocal = f%DataMap%SlabDims(1,myid)  &
+         * f%DataMap%SlabDims(2,myid)  &
+         * f%DataMap%SlabDims(3,myid)
+   
+  !! set up an "indices" array corresponding to 
+  !! normal fortran array indexing but starting at 0
+  allocate( indices(nlocal) )
+   icount=0
+   do k=1,f%DataMap%SlabDims(3,myid)
+    do j=1,f%DataMap%SlabDims(2,myid)
+     do i=1,f%DataMap%SlabDims(1,myid)
+      indices(icount + 1)=icount
+      icount=icount+1
+    enddo
+   enddo
+  enddo
+  
+  call VecGetOwnershipRange(petsc_vector,ilo,ihi,jerr)
+  if(jerr .ne. 0 ) &
+  stop 'PetscVec2Scalar: error calling VecGetOwnershipRange'
+  indices=indices + (ilo)
+    
+ first_entry = .FALSE.
+endif
+
+ 
+ call VecGetValues(petsc_vector,nlocal,indices,f%SlabVals,jerr)
+  if(jerr .ne. 0 ) &
+  stop 'PetscVec2Scalar: error calling VecGetValues'
+  
+ call VecAssemblyBegin(petsc_vector,jerr)
+  if(jerr .ne. 0 ) &
+  stop 'PetscVec2Scalar: error calling VecAssemblyBegin'
+  
+ call VecAssemblyEnd(petsc_vector,jerr)
+  if(jerr .ne. 0 ) &
+  stop 'PetscVec2Scalar: error calling VecAssemblyEnd' 
+
+end subroutine PetscVec2Scalar
+!!=================================================
+!!=================================================
+
+end module InterfacePetsc 
Index: /trunk/00FlowSolve_KW/src/utils/mpi_utils.f90
===================================================================
--- /trunk/00FlowSolve_KW/src/utils/mpi_utils.f90	(revision 6)
+++ /trunk/00FlowSolve_KW/src/utils/mpi_utils.f90	(revision 6)
@@ -0,0 +1,514 @@
+subroutine StartMPI(myid,numprocs,docfile,comm) 
+  use mpi_times
+  implicit none
+  integer             :: ierr,comm,myid,numprocs
+  character(len=80)   :: docfile
+  include 'mpif.h'
+ 
+  comm=MPI_COMM_WORLD
+  call mpi_init(ierr)
+  call mpi_comm_rank(comm,myid,ierr)
+  call mpi_comm_size(comm,numprocs,ierr)
+      
+  if( myid .eq. 0 .and. ierr==MPI_SUCCESS ) then
+    write(0,*) ' MPI initialized with ',numprocs,' live processors'
+    open(1,file=docfile,position='rewind')
+      write(1,*) ' '
+      write(1,*) ' MPI initialized with ',numprocs,' live processors'
+      write(1,*) '             comm =   ',comm
+      write(1,*) ' MPI error flag   =   ',ierr
+    close(1)
+   endif  
+
+   call MPI_Time(0) 
+   
+ end subroutine StartMPI
+
+ subroutine quit_mpi
+   implicit none
+   integer   :: jerr
+   include 'mpif.h'
+   call mpi_finalize(jerr)
+   print*,' A Bientot ...' 
+   stop ' '
+  end subroutine quit_mpi
+
+      
+ subroutine create_MPI_data_types(DataMap) 
+!! Routine to create a specialized data type for MPI data swaps
+!! between processors. A subslab is a section taken from a data SLAB.
+!! Each processor's SLAB is made up of numprocs subslab. Each processor
+!! will have to export (numprocs-1) subslabs to other processors while
+!! receiving 1 subslab from each of the others. The received subslabs
+!! form a data COLUMN, i.e. an array partitioned in x rather than z. Columns
+!! are necessary to compute transforms in the z direction. Having a special
+!! MPI derived type simplifies coding of the data swaps.
+!! Subslab indexing: 
+!!         subslab(level,i,j) where i,j defined such that
+!!         SlabDims(3,i) defines the number of z planes 
+!!         ColDims(1,j)  defines the number of x planes
+!!                       all subslabs have SlabDims(2,:)=ColDims(2,:) y planes
+!! All processors create and store all possible data types.
+
+!!MPI_TYPE_HVECTOR (count, blocklength, stride, oldtype, newtype, ierr)
+
+      !!IN count Number of blocks to be added
+      !!IN blocklen Number of elements in block
+      !!IN stride Number of BYTES between start of each block
+      !!IN oldtype Datatype of each element
+      !!OUT newtype Handle (pointer) for new derived type
+  
+  use class_DataDecomposition
+  use user_data
+  use mpi_params
+  use etc,  only: docfile
+  implicit none
+      
+  type( DataDecomposition )     :: DataMap
+  integer                       :: ierr,level,i,j
+  integer                       :: numblocks,elements_per_block,stride
+  integer                       :: sizeofrealword, iflag  
+  integer, dimension(3)         :: SlabDims,ColDims !! slab/col array sizes in real words
+  integer, dimension(3)         :: SlabVals,ColVals !! slab/col data sizes in real words
+
+  include 'mpif.h'
+  
+  level = DataMap%level
+  if(DoMPITypes(level)=='no') return
+
+  !if( myid .eq. 0 ) then
+  !  open(1,file=docfile,position='append')
+  !    write(1,*) ' '
+  !    write(1,*) ' Creating specialized MPI data types for level ',DataMap%level
+  !    write(1,*) '       myid, comm : ',myid,comm
+  !  close(1)
+  ! endif
+    
+  call mpi_initialized(iflag,ierr)
+  call mpi_type_extent(mpi_double_precision,sizeofrealword,ierr)
+   
+  do j=0,numprocs-1       !! block id
+   do i=0,numprocs-1      !! process id
+   
+   !! Define sizes of for subslab(j)  
+   SlabDims(3) = DataMap%SlabDims(3,i)   !! # of z values
+   SlabDims(2) = DataMap%SlabDims(2,i)   !! # of y values
+   SlabDims(1) = DataMap%ColDims(1,j)    !! # of x values  in SUB-BLOCK J
+   SlabVals=SlabDims
+       
+   !!Build type for a 1d data "pencil" spanning this "subslab" in the x direction
+   numblocks = SlabDims(1)
+   elements_per_block = 1
+   stride = sizeofrealword
+   call mpi_type_hvector(numblocks,elements_per_block,stride,     &
+                         mpi_double_precision,pencil,ierr)
+
+   !!Type for a 2d section of a subslab :  stack pencils ==> an xz plane ----> sheet
+   !!The num of blocks and the stride (in bytes) between the beginning of 1-pencil blocks 
+   !!depends on the total Slab size on processor i
+   numblocks=SlabDims(3)       !! stack pencils vertically
+   elements_per_block = 1      !! each block = 1 pencil
+   stride = DataMap%SlabDims(1,i)*DataMap%SlabDims(2,i)*sizeofrealword  !! bytes btwn pencils
+   call mpi_type_hvector(numblocks,elements_per_block,stride,  &
+                         pencil,slab_sheet(i,j),ierr)
+      
+   if( ierr .ne. MPI_SUCCESS ) then
+    write(0,*) ' mpi_type_hvector slab sheet failure, myid=',myid
+    stop
+   endif
+   call mpi_type_commit(slab_sheet(i,j),ierr)
+
+   numblocks=SlabDims(2)       !! i.e. ny sheets
+   elements_per_block = 1      !! each block = 1 sheet
+   stride = DataMap%SlabDims(1,i)*sizeofrealword  !! bytes btwn sheets
+   call mpi_type_hvector(numblocks,elements_per_block,stride,      &
+                        slab_sheet(i,j),subslab(i,j),ierr)    
+  
+   if( ierr .ne. MPI_SUCCESS ) then
+    write(0,*) ' mpi_type_hvector subslab failure: myid=',myid
+    stop
+   endif
+   call mpi_type_commit(subslab(i,j),ierr)
+  
+!  if( myid .eq. 0 ) then
+!   open(1,file=docfile,position='append')
+!     write(1,*) ' '
+!     write(1,*) '       type subslab created (level,i,j) (',level,i,j,')'
+!   close(1)
+!  endif
+   
+  enddo
+ enddo
+  
+ 
+  do j=0,numprocs-1       !! block id
+   do i=0,numprocs-1      !! process id
+   
+   !! Define sizes of for subslab(j)  
+   ColDims(3) = DataMap%SlabDims(3,j)   !! # of z values in SUB-BLOCK j
+   ColDims(2) = DataMap%ColDims(2,i)    !! # of y values
+   ColDims(1) = DataMap%ColDims(1,i)    !! # of x values  
+   ColVals=ColDims
+       
+   !!Build type for a 1d data "pencil" spanning this "subslab" in the x direction
+   numblocks = ColDims(1)
+   elements_per_block = 1
+   stride = sizeofrealword
+   call mpi_type_hvector(numblocks,elements_per_block,stride,     &
+                         mpi_double_precision,pencil,ierr)
+
+   !!Type for a 2d section of a subcol :  stack pencils ==> an xz plane ----> sheet
+   numblocks=ColDims(3)        !! stack pencils vertically
+   elements_per_block = 1      !! each block = 1 pencil
+   stride = DataMap%ColDims(1,i)*DataMap%ColDims(2,i)*sizeofrealword  !! bytes btwn pencils
+   call mpi_type_hvector(numblocks,elements_per_block,stride,  &
+                         pencil,col_sheet(i,j),ierr)
+      
+   if( ierr .ne. MPI_SUCCESS ) then
+    write(0,*) ' mpi_type_hvector slab sheet failure, myid=',myid
+    stop
+   endif
+   call mpi_type_commit(col_sheet(i,j),ierr)
+
+   numblocks=ColDims(2)        !! i.e. ny sheets
+   elements_per_block = 1      !! each block = 1 sheet
+   stride = DataMap%ColDims(1,i)*sizeofrealword  !! bytes btwn sheets
+   call mpi_type_hvector(numblocks,elements_per_block,stride,      &
+                        col_sheet(i,j),subcol(i,j),ierr)    
+  
+   if( ierr .ne. MPI_SUCCESS ) then
+    write(0,*) ' mpi_type_hvector subslab failure: myid=',myid
+    stop
+   endif
+   call mpi_type_commit(subcol(i,j),ierr)
+  
+!  if( myid .eq. 0 ) then
+!   open(1,file=docfile,position='append')
+!     write(1,*) ' '
+!     write(1,*) '       type subcol created (i,j) (',i,j,')'
+!   close(1)
+!  endif
+   
+  enddo
+ enddo
+
+ DoMPITypes(level)='no'
+ call mpi_barrier(comm,ierr)
+ return
+ end subroutine create_MPI_data_types
+      
+
+ subroutine columns_to_slabs(x,array,n1,n2,n3)
+!!Routine to swap data from "column" orientation to "slab"  orientation.
+!!See data maps for details. Relies on the specialized data  structures
+!!"subslab" (and could use "sheet") defined in "create_MPI_data_type".
+
+  use mpi_params
+  use class_ScalarVariable
+  use etc, only: numzplanes_below,numxplanes_left,numzplanes
+
+  implicit none
+  include 'mpif.h'
+  type( ScalarVariable ) :: x
+  integer                :: n1,n2,n3
+  integer                :: status_array(mpi_status_size,4*numprocs+1)
+  integer                :: reqs(4*numprocs) 
+  integer                :: kstart,istart,kend,iend,ierr
+  real(kind=8)           :: array(n1,n2,n3)  !! myid's column allocation
+  
+  
+  if(numprocs==1) then
+   x%SlabVals = array
+   return
+  endif
+  
+  
+!!Ship portions of my local data "column" x%ColVals needed by other nodes
+!!and recieve remote data required to construct my local data "slab" x%SlabVals.
+
+!!Post the receives first....immediate mode, ie return before data is actually transferred
+  nreqs=0
+  dest=myid
+  numwords=1
+  tag = 2
+  
+  do iproc=0,numprocs-1
+   source=iproc
+    istart=(numxplanes_left(source))+1  !! start index for receiving "subslab" data  x    
+      
+       if( dest .ne. source ) then !! bypass mpi when source=dest=myid
+       
+        nreqs=nreqs+1
+        call  mpi_irecv(x%SlabVals(istart,1,1),numwords,subslab(dest,source),  &
+                        source,tag,comm,reqs(nreqs),ierr)       
+        if( ierr .ne. 0 ) then
+         stop 'MPI IRECV ERROR IN COLS TO SLABS'
+        endif  
+        
+       endif
+       
+  enddo
+  
+  
+  call mpi_barrier(comm,ierr)
+
+!!All processors have issued all their receives, now the sends can be done w/o buffering.
+!!Use immediate-ready-send  meaning, return before transfer is finished and guarantee that
+!!the target locations on the destination processors are ready for writing. Faster.
+  source=myid
+  numwords=1
+  tag = 2
+
+  do iproc=0,numprocs-1
+  
+   dest=iproc
+    kstart=(numzplanes_below(dest))+1 !! start index for outgoing column data in x%ColVals    
+      
+        if( dest .ne. source ) then !! bypass mpi when source=dest=myid
+        
+         nreqs=nreqs+1
+         call mpi_irsend(array(1,1,kstart),numwords,subcol(source,dest),   &
+                          dest,tag,comm,reqs(nreqs),ierr)
+         if( ierr .ne. 0 ) then
+          stop 'MPI IRSEND ERROR IN COLS TO SLABS'
+         endif
+         
+        endif
+        
+  enddo
+  
+  !! case where source=dest=myid
+  istart = numxplanes_left(myid) + 1
+  iend   = istart + n1 - 1
+  kstart = numzplanes_below(myid) + 1
+  kend   = kstart + numzplanes(myid) - 1
+  x%SlabVals(istart:iend,:,:) = array(:,:,kstart:kend)
+  
+  !!make sure all communications are done before proceeding
+  call mpi_waitall(nreqs,reqs(1),status_array(1,1),ierr)  
+   
+  return
+ end subroutine columns_to_slabs
+
+
+
+
+
+ subroutine slabs_to_columns(x,array,n1,n2,n3)
+!!Routine to swap data from "slab" orientation to "column"  orientation.
+!!See data maps for details. Relies on the specialized mpi data structures
+!!"slab" and "sheet" defined in "create_MPI_data_type".
+
+  use mpi_params
+  use class_ScalarVariable
+  use etc, only: numzplanes_below,numxplanes_left,numzplanes
+
+  implicit none
+  include 'mpif.h'
+  type( ScalarVariable ) :: x
+  integer                :: n1,n2,n3
+  integer                :: status_array(mpi_status_size,4*numprocs+1)
+  integer                :: reqs(4*numprocs)
+  integer                :: kstart,istart,ierr
+  integer                :: iend,kend
+  real(kind=8)           :: array(n1,n2,n3)
+  
+  
+  if(numprocs==1) then
+   array = x%SlabVals
+   return
+  endif
+  
+    
+!!All processors initiate nonblocking receives, establishing  buffers for the sends
+  nreqs=0
+  dest=myid
+  numwords=1                       !! i.e. 1 word of type subslab
+  tag = 1
+
+  do iproc=0,numprocs-1
+   source=iproc
+    kstart=(numzplanes_below(source))+1 !! start index for recieving column data in x%ColVals
+      
+       if( dest .ne. source ) then !! bypass mpi when source=dest=myid
+       
+         nreqs=nreqs+1
+         call mpi_irecv(array(1,1,kstart),numwords,subcol(dest,source),   &
+                        source,tag,comm,reqs(nreqs),ierr )
+         if( ierr .ne. 0 ) then
+          stop 'MPI IRECV ERROR IN SLABS TO COLS'
+         endif 
+         
+       endif
+       
+  enddo
+  
+  
+  call mpi_barrier(comm,ierr)   ! make sure all processors receives are posted to avoid buffering
+
+
+!!All processors now initiate nonblocking ready sends, writing to the pre-established dest locations
+  source=myid
+  numwords=1                       !! i.e. 1 word of type subslab
+  tag = 1
+      
+  do iproc=0,numprocs-1
+  
+   dest=iproc
+    istart=(numxplanes_left(dest))+1  !! start index for sending "subslab" data  x
+      
+        if( dest .ne. source ) then !! bypass mpi when source=dest=myid
+        
+         nreqs=nreqs+1
+         call  mpi_irsend(x%SlabVals(istart,1,1),numwords,subslab(source,dest),  &
+                          dest,tag,comm,reqs(nreqs),ierr)
+         if( ierr .ne. 0 ) then
+          stop 'MPI IRSEND ERROR IN SLABS TO COLS'
+         endif
+         
+        endif
+        
+  enddo
+  
+  !! case where source=dest=myid
+  kstart = numzplanes_below(myid) + 1
+  kend   = kstart + numzplanes(myid) - 1
+  istart = numxplanes_left(myid) + 1
+  iend   = istart + n1 - 1
+  array(:,:,kstart:kend) = x%SlabVals(istart:iend,:,:)
+  
+  call mpi_waitall(nreqs,reqs(1),status_array(1,1),ierr)
+
+  return
+ end subroutine slabs_to_columns
+
+
+ subroutine TestGatherScatter(x)
+  use mpi_params
+  use class_ScalarVariable
+  use etc, only: numzplanes_below,numxplanes_left
+
+  implicit none
+  include 'mpif.h'
+  type( ScalarVariable ) :: x
+  integer                :: s1,s2,s3
+  integer                :: c1,c2,c3
+  integer                :: i,j,k,n,istart,iend,ierr
+  real(kind=8),allocatable   :: slab(:,:,:)
+  real(kind=8),allocatable   :: col(:,:,:)
+
+  s1=x%DataMap%SlabDims(1,myid)
+  s2=x%DataMap%SlabDims(2,myid)
+  s3=x%DataMap%SlabDims(3,myid)
+  
+  c1=x%DataMap%ColDims(1,myid)
+  c2=x%DataMap%ColDims(2,myid)
+  c3=x%DataMap%ColDims(3,myid)
+  
+  call mpi_barrier(comm,ierr)
+  
+  allocate( slab(s1,s2,s3),col(c1,c2,c3) )
+  slab=-999.d0
+  
+  !!Fill slab in sections corresponding to "subslabs"
+  !!with a different integer in each subslab
+  do n=0,numprocs-1
+   istart=numxplanes_left(n)+1
+   iend=istart + x%DataMap%ColDims(1,n) - 1
+   slab(istart:iend,:,:)=n + 0.d0
+  enddo
+  
+  if(myid==0) then
+  do i=1,s1
+   do j=1,s2
+    do k=1,s3
+     if( slab(i,j,k) == -999 ) then
+      do n=0,numprocs-1
+       write(0,*) 'n, numxplanes_left(n) ',n, numxplanes_left(n)
+       write(0,*) ' istart, iend, coldims(n) ',istart, iend,x%DataMap%ColDims(1,n)
+      enddo
+      stop 'part of slab not filled, mpi_utils.f90 426'
+     endif
+    enddo
+   enddo
+  enddo
+  endif
+  
+  
+  
+  do n=0,numprocs-1  
+   if(myid==n) then
+    open(1,file='output/COLS_SLABS_TEST',position='append')
+    write(1,*) ' ==================== '
+    do i=1,s1
+     write(1,*) 'myid=',myid,'row of slab vals: ',i,slab(i,1,1)
+    enddo
+    write(1,*) ' ==================== '
+    do i=1,s3
+     write(1,*) 'myid=',myid,'col of slab vals: ',i,slab(1,1,i)
+    enddo
+    write(1,*) ' ==================== '
+    write(1,*) '  '
+   endif
+   close(1)
+   call mpi_barrier(comm,ierr)  
+  enddo
+  
+  call slabs_to_columns(x,col,c1,c2,c3)
+  call mpi_barrier(comm,ierr)
+  
+  do n=0,numprocs-1  
+   if(myid==n) then
+    open(1,file='output/COLS_SLABS_TEST',position='append')
+    write(1,*) ' ==================== '
+    do i=1,c1
+     write(1,*) 'myid=',myid,'row of col vals: ',i,col(i,1,1)
+    enddo
+    write(1,*) ' ==================== '
+    do i=1,c3
+     write(1,*) 'myid=',myid,'col of col vals: ',i,col(1,1,i)
+    enddo
+    write(1,*) ' ==================== '
+    write(1,*) '   '
+    close(1)
+   endif
+   call mpi_barrier(comm,ierr)  
+  enddo
+  
+  call columns_to_slabs(x,col,c1,c2,c3)
+  
+  do n=0,numprocs-1  
+   if(myid==n) then
+    open(1,file='output/COLS_SLABS_TEST',position='append')
+    write(1,*) ' ==================== '
+    do i=1,s1
+     write(1,*) 'myid=',myid,'row of SV slab vals: ',x%SlabVals(i,1,1)
+    enddo
+    write(1,*) ' ==================== '
+    do i=1,s3
+     write(1,*) 'myid=',myid,'col of SV slab vals: ',x%SlabVals(1,1,i)
+    enddo
+    write(1,*) ' ==================== '
+    write(1,*) '  '
+    close(1)
+   endif
+   call mpi_barrier(comm,ierr)  
+  enddo
+  
+  !!check for nans
+! do i=1,s1
+!  do j=1,s2
+!   do k=1,s3
+!    if( ieee_is_nan(slab(i,j,k)) ) then
+!     write(0,*) 'NaN detected in SLABS_COLS_TEST myid,i,j,k:',myid,i,j,k
+!     stop ' stopped at line 458 mpi_utils.f90 '
+!    endif
+!   enddo
+!  enddo
+! enddo
+
+  
+  
+  deallocate( slab,col )
+  return
+  end
Index: /trunk/00FlowSolve_KW/src/write_results.f90
===================================================================
--- /trunk/00FlowSolve_KW/src/write_results.f90	(revision 6)
+++ /trunk/00FlowSolve_KW/src/write_results.f90	(revision 6)
@@ -0,0 +1,1159 @@
+subroutine write_results
+ use user_data
+ use etc
+ use mpi_params
+ use particles
+ use io_params
+  
+ implicit none
+ integer       :: ifile
+ integer       :: inc_particle_write=16
+ 
+ if( nparticles > 0 .and. mod(istep,inc_particle_write)==0 ) then
+  call write_particle_data
+ endif
+   
+ do ifile=1,num_netcdf_files
+   
+  if( mod( (istep-istart), nsteps(ifile) ) == 0    &
+       .or. istep == istart ) then
+    
+   if( trim(mode(ifile)) == 'new' .or. istep == istart) then      
+    call init_netcdf(ifile) 
+    call write_netcdf(ifile)         
+   elseif( trim(mode(ifile)) == 'append') then
+    call write_netcdf(ifile)
+   endif
+               
+  endif
+    
+ enddo
+       
+ call mpi_barrier(comm,ierr)
+ return
+end subroutine write_results
+  
+  
+ subroutine init_netcdf(fid)
+ use user_data
+ use intermediate_variables,            &
+        global_scratch_space=>scratch
+ use dependent_variables
+ use independent_variables
+ use mpi_params
+ use io_params
+ use etc
+      
+ implicit none
+ include 'netcdf.inc'
+
+ character(len=80)         :: filename,topdir
+ integer                   :: npts,ndims,All_nD_VarSIZE(4)
+ integer                   :: start1D(1),count1D(1),iwrk
+ integer                   :: k0,kend,kinc,kcount,counter
+ real(kind=4),allocatable,save  :: scratch(:)
+     
+ integer      :: fid,iid,jid,kid,timeid
+ integer      :: xVarID,yVarID,zVarID,tVarID,s1VarID,s2VarID   
+ integer      :: divustarVarID,phiVarID,pdVarID
+ integer      :: rhoVarID,uVarID,vVarID,wVarID,pVarID
+
+ character(len=80)   :: s1_name, s2_name, s1_units, s2_units
+ integer             :: s1_name_len, s2_name_len, s1_units_len, s2_units_len
+ 
+ integer             :: count_vals,mymod
+ logical,save        :: ROCKS_STORAGE=.FALSE.
+ logical,save        :: first_entry=.TRUE.
+ external  count_vals
+!!============================================================================ 
+  if( first_entry ) then
+   iwrk=maxval( (/nx,ny,nz/) )
+   allocate( scratch(iwrk+1), stat=rcode )
+   if( rcode /= 0 ) stop 'error allocating scratch in init_netcdf'
+   first_entry=.FALSE.
+  endif
+  
+  npts=numzplanes_below(myid)
+  
+  !! count the number of spatially varying indices up from 1
+  !! if not varying, count down from 4
+  !! nspace is the number of spatially varying indices
+  !! these values are stored in dimid_x,dimid_y,dimid_z,dimid_t
+  
+  idim=1  !! count up for spatially varying dimensions
+  jdim=4  !! count down for dimensions w/ indices held constant
+  count(:,fid)=1
+  nspace(fid)=0    
+  
+   if( ilocs(2,fid).ne.ilocs(1,fid) ) then
+    nspace(fid)=nspace(fid)+1
+    dimid_x(fid) = idim
+    idim = idim + 1
+   else
+    dimid_x(fid) = jdim
+    jdim = jdim - 1
+   endif
+   
+   if( jlocs(2,fid).ne.jlocs(1,fid) ) then
+    nspace(fid)=nspace(fid)+1
+    dimid_y(fid) = idim
+    idim = idim + 1
+   else
+    dimid_y(fid) = jdim
+    jdim = jdim - 1
+   endif
+   
+   if( klocs(2,fid).ne.klocs(1,fid) ) then
+    nspace(fid)=nspace(fid)+1
+    dimid_z(fid) = idim
+    idim = idim + 1
+   else
+    dimid_z(fid) = jdim
+    jdim = jdim - 1
+   endif
+   dimid_t(fid) = idim
+   ndims=idim   !! time + counted number of space dims
+
+   !! given # of space dimensions, decide which directory to write to
+   if( ndims-1==0 ) then
+    dimstr='TS/'
+   elseif( ndims-1==1 ) then
+    dimstr='1D/'
+   elseif( ndims-1==2 ) then
+    dimstr='2D/'
+   elseif( ndims-1==3 ) then
+    dimstr='3D/'
+   endif
+   
+   if( ROCKS_STORAGE ) then
+    mymod=mod(myid,16)
+    if( mymod==0 ) topdir='/home/opti00/output/'
+    if( mymod==1 ) topdir='/home/opti01/output/'
+    if( mymod==2 ) topdir='/home/opti02/output/'
+    if( mymod==3 ) topdir='/home/opti03/output/'
+    if( mymod==4 ) topdir='/home/opti04/output/'
+    if( mymod==5 ) topdir='/home/opti05/output/'
+    if( mymod==6 ) topdir='/home/opti06/output/'
+    if( mymod==7 ) topdir='/home/opti07/output/'
+    if( mymod==8 ) topdir='/home/opti08/output/'
+    if( mymod==9 ) topdir='/home/opti09/output/'
+    if( mymod==10 ) topdir='/home/opti10/output/'
+    if( mymod==11 ) topdir='/home/opti11/output/'
+    if( mymod==12 ) topdir='/home/opti12/output/'
+    if( mymod==13 ) topdir='/home/opti13/output/'
+    if( mymod==14 ) topdir='/home/opti14/output/'
+    if( mymod==15 ) topdir='/home/opti15/output/'
+   else
+    topdir='output/'
+   endif
+   
+  !!Create the filename
+    write(unit = cnum, fmt = 100) istep
+100 format(I6.6)
+    write(unit = cid, fmt = 101) myid
+101 format(I3.3)
+
+  if( trim(mode(fid)) == 'new' ) then
+    if(numprocs .gt. 1) then
+      filename = trim(topdir)//dimstr//trim(filename_root(fid))//'_'//cnum//'_'//cid//'.nc'
+    else
+      filename = trim(topdir)//dimstr//trim(filename_root(fid))//'_'//cnum//'.nc'
+    endif
+  elseif( trim(mode(fid)) == 'append' ) then
+    if(numprocs .gt. 1) then
+      filename = trim(topdir)//dimstr//trim(filename_root(fid))//'_'//cid//'.nc'
+    else
+      filename = trim(topdir)//dimstr//trim(filename_root(fid))//'.nc'
+    endif
+  endif
+  !!save the current full filename
+  fullname(fid)=filename
+ 
+ 
+   !! Store start, end and inc for myid, 
+   !! for this file, and for each direction
+   start(dimid_x(fid),fid)=ilocs(1,fid)
+   count(dimid_x(fid),fid)=count_vals(ilocs(1,fid),ilocs(2,fid),ilocs(3,fid))
+   
+   start(dimid_y(fid),fid)=jlocs(1,fid)                     
+   count(dimid_y(fid),fid)=count_vals(jlocs(1,fid),jlocs(2,fid),jlocs(3,fid))
+
+   !! Calculate k start&ends for
+   !! each processor using Local indexing
+   
+   !! requested data COMPLETELY EXCLUDES myid
+   if( klocs(2,fid) <= numzplanes_below(myid) ) then  !! request ends below my bottom slice
+    my_kstart(fid)=-999  !! use as indicator that myid just waits
+    my_kend(fid)=-999
+    my_kinc(fid)=-999
+    goto 999
+   endif
+   if( klocs(1,fid) > numzplanes(myid)+numzplanes_below(myid) ) then !!starts above my top slice
+    my_kstart(fid)=-999  !! use as indicator that myid just waits
+    my_kend(fid)=-999
+    my_kinc(fid)=-999
+    goto 999
+   endif
+
+   !! if I get this far, I know myid has SOME data, 
+   !! several possibilities for this, deal with them individually
+   
+   !! requested data SPANS all of myid
+   if( klocs(1,fid) <= numzplanes_below(myid) .and.  &
+       klocs(2,fid) > numzplanes_below(myid)+numzplanes(myid) ) then
+    k0=1
+    kend=numzplanes(myid)   !! local indexing for k0/k1
+    kinc=klocs(3,fid)
+    kcount=count_vals(k0,kend,kinc)
+    start(dimid_z(fid),fid)=k0  !! local indexing
+    count(dimid_z(fid),fid)=kcount
+    
+   !! requested data STARTS on myid and ends above (already know myid not excluded)
+   elseif( klocs(1,fid) > numzplanes_below(myid) .and.  &
+           klocs(2,fid) > numzplanes_below(myid)+numzplanes(myid) ) then
+    k0=klocs(1,fid)-numzplanes_below(myid)
+    kend=numzplanes(myid)   !! local indexing for k0/k1
+    kinc=klocs(3,fid)
+    kcount=count_vals(k0,kend,kinc)
+    start(dimid_z(fid),fid)=k0  !! local indexing
+    count(dimid_z(fid),fid)=kcount
+
+   !! requested data ENDS on myid and STARTS somewhere below
+   elseif( klocs(1,fid) < numzplanes_below(myid) .and.  &
+           klocs(2,fid) <= numzplanes_below(myid)+numzplanes(myid) ) then
+    k0=1
+    kend=numzplanes(myid)   !! local indexing for k0/k1
+    kinc=klocs(3,fid)
+    kcount=count_vals(k0,kend,kinc)
+    start(dimid_z(fid),fid)=k0  !! local indexing
+    count(dimid_z(fid),fid)=kcount
+
+   !! requested data STARTS on myid and ENDS on myid
+   elseif( klocs(1,fid) > numzplanes_below(myid) .and. &
+           klocs(2,fid) <= numzplanes_below(myid)+numzplanes(myid) ) then
+    k0=(klocs(1,fid)-numzplanes_below(myid))
+    kend=(klocs(2,fid)-numzplanes_below(myid))
+    kinc=klocs(3,fid)
+    kcount=count_vals(k0,kend,kinc)
+    start(dimid_z(fid),fid)=k0  !! local indexing
+    count(dimid_z(fid),fid)=kcount
+   endif
+  
+  !! keep track of start,end,inc 
+  !! index k LOCALLY i.e. in [1,numzplanes(myid)]
+   my_kstart(fid)=k0
+   my_kend(fid)=kend
+   my_kinc(fid)=kinc
+  
+   !iwrk=maxval( count(:,fid) )
+
+!! Open a netcdf file
+  rcode=NF_CREATE(filename,NF_NOCLOBBER,ncid)
+  if(rcode.ne.NF_NOERR) then
+   write(0,*) '... ERROR OPENING NETCDF FILE: init_netcdf ',trim(filename)
+   write(0,*) '... myid, rcode ',myid, rcode
+   stop
+  endif
+
+!! Spatial Dimensions Definitions
+   rcode=NF_DEF_DIM(ncid,'idimension',count(dimid_x(fid),fid),iid)
+   if (rcode.ne.NF_NOERR) write(0,*) myid,  &
+           ': NetCDF Error: NF_DEF_DIM: idimension', rcode
+    All_nD_VarSIZE(dimid_x(fid))=iid
+
+   rcode=NF_DEF_DIM(ncid,'jdimension',count(dimid_y(fid),fid),jid)
+   if (rcode.ne.NF_NOERR) write(0,*) myid,  &
+           ': NetCDF Error: NF_DEF_DIM: jdimension', rcode
+   All_nD_VarSIZE(dimid_y(fid))=jid
+
+   rcode=NF_DEF_DIM(ncid,'kdimension',count(dimid_z(fid),fid),kid)
+   if (rcode.ne.NF_NOERR) write(0,*) myid,   &
+           ': NetCDF Error: NF_DEF_DIM: kdimension', rcode
+   All_nD_VarSIZE(dimid_z(fid))=kid
+   
+  rcode=NF_DEF_DIM(ncid,'timedimension',NF_UNLIMITED,timeid)
+  if (rcode.ne.NF_NOERR) write(0,*) myid,   &
+          ': NetCDF Error: NF_DEF_DIM: timedimension', rcode
+  All_nD_VarSIZE(dimid_t(fid))=timeid
+
+
+!! Define x,y,z grid position  and time variables
+
+!!**X*****
+      rcode=NF_DEF_VAR(ncid,'xVar',NF_FLOAT,1,iid,xVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_DEF_VAR: xVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,xVarID,'long_name',1,'x')
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: xVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,xVarID,'units',1,'m')
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: xVar', rcode
+
+!!**Y*****
+      rcode=NF_DEF_VAR(ncid,'yVar',NF_FLOAT,1,jid,yVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_DEF_VAR: yVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,yVarID,'long_name',1,'y')
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: yVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,yVarID,'units',1,'m')
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: yVar', rcode
+           
+!!**Z*****
+      rcode=NF_DEF_VAR(ncid,'zVar',NF_FLOAT,1,kid,zVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_DEF_VAR: zVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,zVarID,'long_name',1,'z')
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: zVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,zVarID,'units',1,'m')
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: zVar', rcode
+
+!!**time*****
+      rcode=NF_DEF_VAR(ncid,'tVar',NF_FLOAT,1,timeid,tVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_DEF_VAR: tVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,tVarID,'long_name',4,'time')
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: tVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,tVarID,'units',7,'seconds')
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: tVar', rcode     
+
+
+!!     Set the appropriate labels for s1 and s2.
+      if(trim(scalar_kind(1)) == 't') then
+        s1_name = 'Temperature'
+        s1_name_len = 11
+        s1_units = 'deg C'
+        s1_units_len = 5
+       elseif(trim(scalar_kind(2)) == 't') then
+        s2_name = 'Temperature'
+        s2_name_len = 11
+        s2_units = 'deg C'
+        s2_units_len = 5
+       endif
+
+       if(trim(scalar_kind(1)) == 's') then
+        s1_name = 'Salinity'
+        s1_name_len = 8
+        s1_units = 'psu'
+        s1_units_len = 3
+       elseif(trim(scalar_kind(2)) == 's') then
+        s2_name = 'Salinity'
+        s2_name_len = 8
+        s2_units = 'psu'
+        s2_units_len = 3
+       endif
+       
+       if(trim(scalar_kind(1)) == 'p') then
+        s1_name = 'Passive Tracer'
+        s1_name_len = 14
+        s1_units = 'Concentration'
+        s1_units_len = 13
+       elseif(trim(scalar_kind(2)) == 'p') then
+        s2_name = 'Passive Tracer'
+        s2_name_len = 14
+        s2_units = 'Concentration'
+        s2_units_len = 13
+       endif
+       
+      
+      if(trim(scalar_kind(1)) == 'r') then
+        s1_name = 'Density'
+        s1_name_len = 7
+        s1_units = 'kg/m3'
+        s1_units_len = 5
+       elseif(trim(scalar_kind(2)) == 'r') then
+        s1_name = 'Density'
+        s1_name_len = 7
+        s1_units = 'kg/m3'
+        s1_units_len = 5
+       endif
+
+!!
+! scalar (1)
+!!   
+    if( variable_key(4,fid) == 1 ) then
+      rcode=NF_DEF_VAR(ncid,'s1Var',NF_FLOAT,ndims,All_nD_VarSIZE(1:ndims),s1VarID)
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_DEF_VAR: s1Var', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,s1VarID,'long_name',s1_name_len,s1_name)
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: s1Var', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,s1VarID,'units',s1_units_len,s1_units)
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: s1Var', rcode
+    endif
+
+!!
+!scalar (2)
+!!
+    if( variable_key(5,fid) == 1 ) then
+      rcode=NF_DEF_VAR(ncid,'s2Var',NF_FLOAT,ndims,All_nD_VarSIZE,s2VarID)
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_DEF_VAR: s2Var', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,s2VarID,'long_name',s2_name_len,s2_name)                           
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: s2Var', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,s2VarID,'units',s2_units_len,s2_units)
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: s2Var', rcode
+     endif
+
+!!
+!x velocity = uVar
+!!
+    if( variable_key(1,fid) == 1 ) then
+      rcode=NF_DEF_VAR(ncid,'uVar',NF_FLOAT,ndims,All_nD_VarSIZE,uVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_DEF_VAR: uVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,uVarID,'long_name',1,'u')
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: uVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,uVarID,'units',3,'m/s')
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: uVar', rcode
+    endif
+!!
+!y velocity = vVar
+!! 
+    if( variable_key(2,fid) == 1 ) then
+      rcode=NF_DEF_VAR(ncid,'vVar',NF_FLOAT,ndims,All_nD_VarSIZE,vVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_DEF_VAR: vVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,vVarID,'long_name',1,'v')
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: vVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,vVarID,'units',3,'m/s')
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: vVar', rcode
+    endif
+!!
+!z velocity = wVar
+!!
+    if( variable_key(3,fid) == 1 ) then
+      rcode=NF_DEF_VAR(ncid,'wVar',NF_FLOAT,ndims,All_nD_VarSIZE,wVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_DEF_VAR: wVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,wVarID,'long_name',1,'w')
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: wVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,wVarID,'units',3,'m/s')
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: wVar', rcode
+    endif
+    
+!!
+!pressure = pVar
+!! 
+    if( variable_key(9,fid) == 1 ) then
+      rcode=NF_DEF_VAR(ncid,'pVar',NF_FLOAT,ndims,All_nD_VarSIZE,pVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_DEF_VAR: pVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,pVarID,'long_name',8,'pressure')
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: pVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,pVarID,'units',6,'kg/ms2')
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: pVar', rcode
+    endif
+    
+!!
+!divustar = divustarVar
+!! 
+    if( variable_key(6,fid) == 1 ) then
+      rcode=NF_DEF_VAR(ncid,'divustarVar',NF_FLOAT,ndims,All_nD_VarSIZE,divustarVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_DEF_VAR: divustarVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,divustarVarID,'long_name',9,'div ustar')                            
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: divustarVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,divustarVarID,'units',4,'1/s')
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: divustarVar', rcode
+    endif
+    
+!!
+!pressure variable = phiVar
+!! 
+    if( variable_key(7,fid) == 1 ) then
+      rcode=NF_DEF_VAR(ncid,'phiVar',NF_FLOAT,ndims,All_nD_VarSIZE,phiVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_DEF_VAR: phiVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,phiVarID,'long_name',8,'pressure')                            
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: phiVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,phiVarID,'units',6,'kg/ms2')
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: phiVar', rcode
+    endif
+    
+!!
+!perterbation density = pdVar
+!! 
+    if( variable_key(8,fid) == 1 ) then
+      rcode=NF_DEF_VAR(ncid,'pdVar',NF_FLOAT,ndims,All_nD_VarSIZE,pdVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_DEF_VAR: pdVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,pdVarID,'long_name',20,'perturbation density')                            
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: pdVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,pdVarID,'units',5,'kg/m3')
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+           ': NetCDF Error: NF_PUT_ATT_TEXT: pdVar', rcode
+    endif
+    
+!!
+!End define mode
+!!
+    rcode=NF_ENDDEF(ncid)
+    if(rcode.ne.NF_NOERR) print *,myid,'ERROR  LEAVING DEFINE MODE'
+
+
+!    store x values in temp array
+      counter = 1
+      do i = ilocs(1,fid),ilocs(2,fid),ilocs(3,fid)
+       scratch(counter) = Grid(0)%SpaceDims(1)%x(i)*Lz ! [m]
+       counter = counter + 1
+      enddo
+
+!    Put dimension data in netcdf file
+      start1D(1) = 1
+      count1D(1) = count_vals(ilocs(1,fid),ilocs(2,fid),ilocs(3,fid))
+      rcode=NF_PUT_VARA_REAL(ncid,xVarID,start1D,count1D,scratch)
+      if(rcode.ne.NF_NOERR) print *,myid,'NetCDF ERROR xVarID: ',rcode
+
+
+!    store y values in temp array
+      counter = 1
+      do j = jlocs(1,fid),jlocs(2,fid),jlocs(3,fid)
+       scratch(counter) = Grid(0)%SpaceDims(2)%x(j)*Lz ! [m]
+       counter = counter + 1
+      enddo
+
+!    Put dimension data in netcdf file
+      start1D(1) = 1
+      count1D(1) = count_vals( jlocs(1,fid),jlocs(2,fid),jlocs(3,fid) )
+      rcode=NF_PUT_VARA_REAL(ncid,yVarID,start1D,count1D,scratch)
+      if(rcode.ne.NF_NOERR) print *,myid,'NetCDF ERROR yVarID: ',rcode,filename,count1D(1)
+
+    
+     k0=k0+numzplanes_below(myid)
+     kend=kend+numzplanes_below(myid)
+!    store z values in temp array
+      counter = 1
+      do k = k0,kend,kinc
+       scratch(counter) = Grid(0)%SpaceDims(3)%x(k)*Lz ! [m]
+       counter = counter + 1
+      enddo
+
+!    Put dimension data in netcdf file
+      start1D(1) = 1
+      count1D(1) = count_vals(k0,kend,kinc)  !! had kcount
+      rcode=NF_PUT_VARA_REAL(ncid,zVarID,start1D,count1D,scratch)
+      if(rcode.ne.NF_NOERR) print *,myid,'NetCDF ERROR zVarID: ',rcode
+        
+      rcode=NF_CLOSE(ncid)
+      if(rcode.ne.NF_NOERR) print *,myid,'ERROR CLOSING NETCDF FILE'
+        
+999   call mpi_barrier(comm,ierr)
+     
+      return
+     end
+
+
+
+ subroutine write_netcdf(fid)
+ use user_routines
+ use user_data
+ use etc
+ use dependent_variables
+ use independent_variables
+ use intermediate_variables,    &
+   global_scratch_space=>scratch
+ use mpi_params
+ use io_params
+      
+ implicit none
+ include 'netcdf.inc'
+ !include 'mpif.h'
+
+ character(len=80)         :: filename,err_msg
+ integer                   :: Nd_start(4)=0,Nd_count(4)=0
+ integer                   :: ndims,ii,jj,kk,kend,kinc,my_k
+ integer                   :: icount,jcount,kcount,kstart
+ real(kind=4),allocatable  :: scratch(:,:,:)
+ real(kind=4)              :: xx_4
+ real(kind=8)              :: zpos
+     
+ integer      :: fid,iid,jid,kid,timeid   
+ integer      :: xVarID,yVarID,zVarID,tVarID,s1VarID,s2VarID   
+ integer      :: divustarVarID,phiVarID,pdVarID
+ integer      :: rhoVarID,uVarID,vVarID,wVarID,pVarID
+
+ if( my_kstart(fid) == -999 ) then  !! no data to write
+  goto 999
+ endif
+
+ !!Create the filename, init overwrote filename_root(fid) w/ full name
+ filename = fullname(fid)
+ 
+! Each processor opens netcdf file and gets variable id's.
+  if( myid .eq. 0 ) then
+  endif
+
+  rcode=NF_OPEN(filename,NF_WRITE,ncid)
+  if(rcode.ne.NF_NOERR) then
+   write(0,*) '... ERROR OPENING NETCDF FILE: write_netcdf ',trim(filename)
+   write(0,*) '... myid, rcode ',myid, rcode
+   stop
+  endif
+   
+       rcode=NF_INQ_VARID(ncid,'tVar',tVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+         'NetCDF ERROR INQ_VARID -> tVar: ',rcode
+
+      if( variable_key(4,fid) == 1 ) then
+       rcode=NF_INQ_VARID(ncid,'s1Var',s1VarID)
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+         'NetCDF ERROR INQ_VARID -> s1Var: ',rcode
+      endif
+      
+      if( variable_key(5,fid) == 1 ) then
+       rcode=NF_INQ_VARID(ncid,'s2Var',s2VarID)
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+         'NetCDF ERROR INQ_VARID -> s2Var: ',rcode
+      endif
+      
+      if( variable_key(1,fid) == 1 ) then
+       rcode=NF_INQ_VARID(ncid,'uVar',uVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+         'NetCDF ERROR INQ_VARID -> uVar: ',rcode
+      endif
+      
+      if( variable_key(2,fid) == 1 ) then
+       rcode=NF_INQ_VARID(ncid,'vVar',vVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+         'NetCDF ERROR INQ_VARID -> vVar: ',rcode
+      endif
+      
+      if( variable_key(3,fid) == 1 ) then
+       rcode=NF_INQ_VARID(ncid,'wVar',wVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,   &
+         'NetCDF ERROR INQ_VARID -> wVar: ',rcode
+      endif
+      
+      if( variable_key(6,fid) == 1 ) then        
+        rcode=NF_INQ_VARID(ncid,'divustarVar',divustarVarID)
+        if (rcode.ne.NF_NOERR) print *,myid,   &
+          'NetCDF ERROR INQ_VARID -> divustarVar: ',rcode
+      endif
+      
+      if( variable_key(7,fid) == 1 ) then        
+        rcode=NF_INQ_VARID(ncid,'phiVar',phiVarID)
+        if (rcode.ne.NF_NOERR) print *,myid,   &
+         'NetCDF ERROR INQ_VARID -> phiVar: ',rcode
+      endif
+      
+      if( variable_key(8,fid) == 1 ) then        
+        rcode=NF_INQ_VARID(ncid,'pdVar',pdVarID)
+        if (rcode.ne.NF_NOERR) print *,myid,   &
+          'NetCDF ERROR INQ_VARID -> pdVar: ',rcode
+      endif
+        
+            
+!     Write data to netcdf file. *******************************
+       Nd_start(dimid_x(fid))=1
+       Nd_count(dimid_x(fid))=count(dimid_x(fid),fid)
+       
+       Nd_start(dimid_y(fid))=1
+       Nd_count(dimid_y(fid))=count(dimid_y(fid),fid)
+       
+       Nd_start(dimid_z(fid))=1
+       Nd_count(dimid_z(fid))=count(dimid_z(fid),fid)
+       
+       Nd_start(dimid_t(fid))=time_counter(fid)
+       Nd_count(dimid_t(fid))=1   !! always 1 time slice written per call
+
+!     time in seconds
+      xx_4 = t_secs !! convert to float
+      rcode=NF_PUT_VARA_REAL(ncid,tVarID,Nd_start(dimid_t(fid)),        &
+                                           Nd_count(dimid_t(fid)),xx_4)
+      if(rcode.ne.NF_NOERR) print *,myid,'NetCDF ERROR tVarID: ',rcode
+      if( trim(mode(fid)) == 'append' ) time_counter(fid)=time_counter(fid)+1
+
+      allocate( scratch( Nd_count(dimid_x(fid)), &
+                         Nd_count(dimid_y(fid)), &
+                         Nd_count(dimid_z(fid)) ), stat=rcode )
+      if(rcode /=0 ) stop 'problem allocating scratch in write_netcdf'
+      
+      !write(0,*) '========================='
+      !write(0,*) '========================='
+      !write(0,*) 'myid kstart,kend,kinc ',myid,kstart,kend,kinc
+      !write(0,*) 'Nd_start  ',Nd_start
+      !write(0,*) 'Nd_count  ',Nd_count
+
+!     Scalar 1  in dimensional units.
+      if( variable_key(4,fid)==1 ) then
+       ii=1 ;  
+       do i=ilocs(1,fid),ilocs(2,fid),ilocs(3,fid)
+        jj=1;
+        do j=jlocs(1,fid),jlocs(2,fid),jlocs(3,fid)
+         kk=1;
+         do k=my_kstart(fid),my_kend(fid),my_kinc(fid)
+          
+           scratch(ii,jj,kk) = (s1_bar(k) + scalars(1)%SlabVals(i,j,k))*s1_scale
+          
+          kk=kk+1
+         enddo
+         jj=jj+1
+        enddo
+        ii=ii+1
+       enddo
+
+!      Each processor writes its local data to 
+!      the appropriate locations in the netcdf file.
+       rcode=NF_PUT_VARA_REAL(ncid,s1VarID,Nd_start,Nd_count,scratch)
+       if(rcode.ne.NF_NOERR) then
+         print *,myid,'NetCDF ERROR: PUT_VARA_DOUBLE scalar (1)',rcode
+         err_msg=NF_STRERROR(rcode)
+         print*,myid, err_msg
+        endif
+      endif
+      
+!     Scalar 2  in dimensional units.
+      if( variable_key(5,fid)==1 ) then
+       ii=1 ;  
+       do i=ilocs(1,fid),ilocs(2,fid),ilocs(3,fid)
+        jj=1;
+        do j=jlocs(1,fid),jlocs(2,fid),jlocs(3,fid)
+         kk=1;
+         do k=my_kstart(fid),my_kend(fid),my_kinc(fid)
+         
+          scratch(ii,jj,kk) = (s2_bar(k) + scalars(2)%SlabVals(i,j,k))*s2_scale
+          
+          kk=kk+1
+         enddo
+         jj=jj+1
+        enddo
+        ii=ii+1
+       enddo
+
+!      Each processor writes its local data to 
+!      the appropriate locations in the netcdf file.
+       rcode=NF_PUT_VARA_REAL(ncid,s2VarID,Nd_start,Nd_count,scratch)
+       if(rcode.ne.NF_NOERR) then
+        print *,myid,'NetCDF ERROR: PUT_VARA_DOUBLE scalar (2)',rcode
+        err_msg=NF_STRERROR(rcode)
+        print*,myid, err_msg
+       endif
+      endif
+      
+!     u velocity component in dimensional units.
+      if( variable_key(1,fid)==1 ) then
+       ii=1 ;  
+       do i=ilocs(1,fid),ilocs(2,fid),ilocs(3,fid)
+        jj=1;
+        do j=jlocs(1,fid),jlocs(2,fid),jlocs(3,fid)
+         kk=1;
+         do k=my_kstart(fid),my_kend(fid),my_kinc(fid)
+         
+          scratch(ii,jj,kk) = velocity(1)%SlabVals(i,j,k)*U0
+          
+          kk=kk+1
+         enddo
+         jj=jj+1
+        enddo
+        ii=ii+1
+       enddo
+
+!      Each processor writes its local data to 
+!      the appropriate locations in the netcdf file.
+       rcode=NF_PUT_VARA_REAL(ncid,uVarID,Nd_start,Nd_count,scratch)
+       if(rcode.ne.NF_NOERR) print *,myid,   &
+         'NetCDF ERROR: PUT_VARA_DOUBLE u',rcode
+      endif
+      
+!      v velocity component in dimensional units.
+      if( variable_key(2,fid)==1 ) then
+       ii=1 ;  
+       do i=ilocs(1,fid),ilocs(2,fid),ilocs(3,fid)
+        jj=1;
+        do j=jlocs(1,fid),jlocs(2,fid),jlocs(3,fid)
+         kk=1;
+         do k=my_kstart(fid),my_kend(fid),my_kinc(fid)
+         
+          scratch(ii,jj,kk) = velocity(2)%SlabVals(i,j,k)*U0
+          
+          kk=kk+1
+         enddo
+         jj=jj+1
+        enddo
+        ii=ii+1
+       enddo
+
+!      Each processor writes its local data to 
+!      the appropriate locations in the netcdf file.
+       rcode=NF_PUT_VARA_REAL(ncid,vVarID,Nd_start,Nd_count,scratch)
+       if(rcode.ne.NF_NOERR) print *,myid,   &
+         'NetCDF ERROR: PUT_VARA_DOUBLE v',rcode
+      endif
+      
+!      w velocity component in dimensional units.
+      if( variable_key(3,fid)==1 ) then
+       ii=1 ;  
+       do i=ilocs(1,fid),ilocs(2,fid),ilocs(3,fid)
+        jj=1;
+        do j=jlocs(1,fid),jlocs(2,fid),jlocs(3,fid)
+         kk=1;
+         do k=my_kstart(fid),my_kend(fid),my_kinc(fid)
+         
+          scratch(ii,jj,kk) = velocity(3)%SlabVals(i,j,k)*U0
+           if(fid==8) write(0,*) i,j,k,ii,jj,kk
+                    
+          kk=kk+1
+         enddo
+         jj=jj+1
+        enddo
+        ii=ii+1
+       enddo
+
+!      Each processor writes its local data to 
+!      the appropriate locations in the netcdf file.
+       
+       rcode=NF_PUT_VARA_REAL(ncid,wVarID,Nd_start,Nd_count,scratch)
+       if(rcode.ne.NF_NOERR) print *,myid,   &
+         'NetCDF ERROR PUT_VARA_DOUBLE: w ',rcode
+      endif
+
+!      div ustar in dimensional units.
+      if( variable_key(6,fid)==1 ) then
+       ii=1 ;  
+       do i=ilocs(1,fid),ilocs(2,fid),ilocs(3,fid)
+        jj=1;
+        do j=jlocs(1,fid),jlocs(2,fid),jlocs(3,fid)
+         kk=1;
+         do k=my_kstart(fid),my_kend(fid),my_kinc(fid)
+         
+          scratch(ii,jj,kk) = div_u%SlabVals(i,j,k)/(time_scale)
+          
+          kk=kk+1
+         enddo
+         jj=jj+1
+        enddo
+        ii=ii+1
+       enddo
+
+!      Each processor writes its local data to 
+!      the appropriate locations in the netcdf file.
+       rcode=NF_PUT_VARA_REAL(ncid,divustarVarID,Nd_start,Nd_count,scratch)
+       if(rcode.ne.NF_NOERR) print *,myid,   &
+         'NetCDF ERROR PUT_VARA_DOUBLE: div ustar ',rcode
+      endif
+
+!     pressure soln in dimensional units.
+      if( variable_key(7,fid)==1 ) then
+       ii=1 ;  
+       do i=ilocs(1,fid),ilocs(2,fid),ilocs(3,fid)
+        jj=1;
+        do j=jlocs(1,fid),jlocs(2,fid),jlocs(3,fid)
+         kk=1;
+         do k=my_kstart(fid),my_kend(fid),my_kinc(fid)
+         
+          scratch(ii,jj,kk) = phi(0)%SlabVals(i,j,k)*p_scale
+          
+          kk=kk+1
+         enddo
+         jj=jj+1
+        enddo
+        ii=ii+1
+       enddo
+
+!      Each processor writes its local data to 
+!      the appropriate locations in the netcdf file.
+       rcode=NF_PUT_VARA_REAL(ncid,phiVarID,Nd_start,Nd_count,scratch)
+       if(rcode.ne.NF_NOERR) print *,myid,   &
+         'NetCDF ERROR PUT_VARA_DOUBLE: phi ',rcode
+      endif
+      
+!     perturbation density in dimensional units.
+      if( variable_key(8,fid)==1 ) then
+       ii=1 ;  
+       do i=ilocs(1,fid),ilocs(2,fid),ilocs(3,fid)
+        jj=1;
+        do j=jlocs(1,fid),jlocs(2,fid),jlocs(3,fid)
+         kk=1;
+         do k=my_kstart(fid),my_kend(fid),my_kinc(fid)
+         
+          scratch(ii,jj,kk) = pd%SlabVals(i,j,k)*Lz*DGRAD
+          
+          kk=kk+1
+         enddo
+         jj=jj+1
+        enddo
+        ii=ii+1
+       enddo
+
+!      Each processor writes its local data to 
+!      the appropriate locations in the netcdf file.
+       rcode=NF_PUT_VARA_REAL(ncid,pdVarID,Nd_start,Nd_count,scratch)
+       if(rcode.ne.NF_NOERR) print *,myid,   &
+         'NetCDF ERROR PUT_VARA_DOUBLE: pd ',rcode
+      endif
+
+!      Each processor closes the netcdf file.
+       rcode=NF_CLOSE(ncid)
+       if(rcode.ne.NF_NOERR) print *,myid,   &
+         'NetCDF ERROR: closing file in write3D_mpi_netcdf',rcode
+      deallocate( scratch )
+
+999   call mpi_barrier(comm,rcode)
+      return
+      end
+
+subroutine write_particle_data
+  use particles
+  use etc,                   only: t_secs
+  use user_data,             only: Lz
+  use mpi_params,            only: myid,comm
+      
+  implicit none
+  include 'netcdf.inc'
+  
+  logical, SAVE      :: first_entry=.TRUE.
+  character(len=80)  :: filename
+  integer            :: iid  !!dimension id for particles
+  integer            :: jid  !!dimension id for time
+  integer            :: idimensionSIZE(1) !!arrays for  dimension sizes
+  integer            :: jdimensionSIZE(1) 
+  integer            :: idimensionID !! for dimension variable "float id"
+  integer            :: jdimensionID !! for dimension variable "time"
+  integer            :: rcode, ierr
+  integer            :: ncid
+      
+!!Variables: x(particle id, time),y(particle id, time),z(particle id, time)
+  integer                  :: All2DVarSIZE(2),start2D(2),count2D(2)
+  integer                  :: xVarID,yVarID,zVarID   !! 2D Variable ids
+  integer                  :: istart,jstart,icount,jcount,i
+  integer,allocatable,save      :: idata(:)
+  real(kind=4),allocatable,save :: xdata(:)
+  real(kind=4)                  :: xx_4
+  LOGICAL                       :: ROCKS_STORAGE=.FALSE.
+  
+  call mpi_barrier(comm,ierr)
+  
+  if(myid>0) goto 999  !! and wait there
+
+  if( ROCKS_STORAGE ) THEN
+   filename='/home/opti15/output/particles.nc'
+  else
+   filename='output/particles.nc'
+  endif
+    
+  
+ if( first_entry ) then
+  
+  allocate( idata(nparticles), stat=rcode )
+  if( rcode /= 0 ) &
+   stop 'problem allocating idata in write_particle_data'
+  allocate( xdata(nparticles), stat=rcode  )
+  if( rcode /= 0 ) &
+   stop 'problem allocating idata in write_particle_data'
+ 
+  !!write(0,*) 'creating particle file ',t_secs,init_particle_file
+  rcode = NF_CREATE(filename, NF_NOCLOBBER, ncid) 
+  if(rcode.ne.NF_NOERR) then
+   write(0,*) 'ERROR CREATING NETCDF FILE FOR PARTICLES ',filename
+   stop
+  endif
+
+!!Dimensions Definition
+  rcode = NF_DEF_DIM(ncid, 'idimension', nparticles, iid)
+  if(rcode.ne.NF_NOERR) write(0,*) 'init for particles NetCDF ERROR: ',rcode
+
+  rcode = NF_DEF_DIM(ncid, 'jdimension', NF_UNLIMITED, jid)
+  if(rcode.ne.NF_NOERR) print *,'init for particles NetCDF ERROR: ',rcode
+
+!!Initialize size arrays for dimensions
+  idimensionSIZE(1) = iid
+  jdimensionSIZE(1) = jid
+
+!!Define dimension variables
+  rcode = NF_DEF_VAR(ncid,'idimension',NF_INT,1,idimensionSIZE,idimensionID)
+  if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+  rcode=NF_PUT_ATT_TEXT(ncid,idimensionID,'long_name',11,'particle id')
+  !!rcode=NF_PUT_ATT_TEXT(ncid,idimensionID,'units',3,'[1]')
+
+  rcode = NF_DEF_VAR(ncid,'jdimension',NF_FLOAT,1,jdimensionSIZE,jdimensionID)
+  if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+  rcode=NF_PUT_ATT_TEXT(ncid,jdimensionID,'long_name',4,'time')
+  rcode=NF_PUT_ATT_TEXT(ncid,jdimensionID,'units',7,'seconds')
+
+!! Define 2D position variables
+!!Initialize size arrays for id/time varying variables
+  All2DVarSIZE(1) = iid
+  All2DVarSIZE(2) = jid
+
+
+!! x particle position = xVar
+  rcode = NF_DEF_VAR(ncid,'xVar',NF_FLOAT,2,All2DVarSIZE,xVarID)
+  if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+  rcode=NF_PUT_ATT_TEXT(ncid,xVarID,'long_name',19,'x particle position')                      
+  rcode=NF_PUT_ATT_TEXT(ncid,xVarID,'units',1,'m')
+  
+!! y particle position = yVar
+  rcode = NF_DEF_VAR(ncid,'yVar',NF_FLOAT,2,All2DVarSIZE,yVarID)
+  if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+  rcode=NF_PUT_ATT_TEXT(ncid,yVarID,'long_name',19,'y particle position')                      
+  rcode=NF_PUT_ATT_TEXT(ncid,yVarID,'units',1,'m')
+  
+!! z particle position = zVar
+  rcode = NF_DEF_VAR(ncid,'zVar',NF_FLOAT,2,All2DVarSIZE,zVarID)
+  if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+  rcode=NF_PUT_ATT_TEXT(ncid,zVarID,'long_name',19,'z particle position')                      
+  rcode=NF_PUT_ATT_TEXT(ncid,zVarID,'units',1,'m')
+     
+!!End define mode
+  rcode=NF_ENDDEF(ncid)
+  if(rcode.ne.NF_NOERR) print *,'ERROR  LEAVING DEFINE MODE'
+  
+
+!!Write out dimension variable: particle id
+!!store values in temp array 
+  do i = 1,nparticles
+   idata(i) = i   !!--> integer
+  enddo
+
+!! Put idimension data, i.e. particle id, into netcdf file
+  istart = 1
+  icount = nparticles
+  rcode=NF_PUT_VARA_INT(ncid,idimensionID,istart,icount,idata)
+  if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR storing particle ids: ',rcode
+
+!!Close netcdf file
+  rcode=NF_CLOSE(ncid)
+  if(rcode.ne.NF_NOERR) print *,'ERROR CLOSING particle NETCDF FILE'
+  
+  first_entry=.FALSE.
+
+endif  ! end file initialization 
+
+
+!!=========================================================================
+
+!! Open the previously created netcdf data file
+  rcode=NF_OPEN(filename,NF_WRITE,ncid)
+  if(rcode.ne.NF_NOERR) then 
+   print *,'ERROR OPENING NETCDF FILE: write_netcdf ',filename,ncid
+   stop
+  endif
+   
+
+
+!!Write out current value of dimension variable time
+  jstart = j_particle_time
+  jcount = 1
+  rcode=NF_INQ_VARID(ncid,'jdimension',jdimensionID)
+  if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: NF_INQ_VARID ',rcode
+  
+  xx_4=t_secs  !! convert to float
+  rcode=NF_PUT_VARA_REAL(ncid,jdimensionID,jstart,jcount,xx_4)
+  if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: NF_PUT_VARA_REAL',rcode
+
+!!Write 2D data to netcdf file
+
+!!Initialize size arrays
+  start2D(1) = 1
+  start2D(2) = j_particle_time
+  count2D(1) = nparticles
+  count2D(2) = 1
+
+!!Store x float position variable xVar
+  do  i=1,nparticles
+   xdata(i) = positions(i,1)*Lz
+  enddo
+
+!!Write variable to netcdf file
+  rcode=NF_INQ_VARID(ncid,'xVar',xVarID)
+  rcode=NF_PUT_VARA_REAL(ncid,xVarID,start2D,count2D,xdata)
+  if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+
+!!Store y float position variable yVar
+  do  i=1,nparticles
+   xdata(i) = positions(i,2)*Lz
+  enddo
+
+!!Write variable to netcdf file
+   rcode=NF_INQ_VARID(ncid,'yVar',yVarID)
+   rcode=NF_PUT_VARA_REAL(ncid,yVarID,start2D,count2D,xdata)
+   if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+
+!!Store z float position variable zVar
+  do  i=1,nparticles
+   xdata(i) = positions(i,3)*Lz
+  enddo
+
+!!Write variable to netcdf file
+  rcode=NF_INQ_VARID(ncid,'zVar',zVarID)
+  rcode=NF_PUT_VARA_REAL(ncid,zVarID,start2D,count2D,xdata)
+  if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+
+!! Close netcdf file
+  rcode=NF_CLOSE(ncid)
+  if(rcode.ne.0) print *,'ERROR CLOSING NETCDF FILE'
+  
+!!increment integer time index
+  j_particle_time = j_particle_time + 1 
+
+999 call mpi_barrier(comm,ierr)  !! sync up here, only 0 did the writing
+ return
+end subroutine write_particle_data
+
+
+
+subroutine nondimensionalize_s1(s1,s1_z,s1_zz)
+ use user_data
+ implicit none
+ real(kind=8)    :: s1,s1_z,s1_zz       
+ s1=s1/s1_scale
+ s1_z=s1_z/(s1_scale/Lz)
+ s1_zz=s1_zz/(s1_scale/Lz**2)       
+end subroutine nondimensionalize_s1
+      
+subroutine nondimensionalize_s2(s2,s2_z,s2_zz)
+ use user_data
+ implicit none
+ real(kind=8)    :: s2,s2_z,s2_zz       
+ s2=s2/s2_scale
+ s2_z=s2_z/(s2_scale/Lz)
+ s2_zz=s2_zz/(s2_scale/Lz**2)       
+end subroutine nondimensionalize_s2
+
+integer function count_vals(i0,i1,inc) result(numvals)
+  integer, intent(in)  :: i0,i1,inc
+  integer              :: n
+  numvals = floor( float(i1-i0)/inc ) + 1
+end function count_vals
+ 
+ subroutine tic( start,rate )
+  implicit none
+  integer   :: start  ! current value of system clock
+  integer   :: rate   ! system clock counts/sec
+  call system_clock(start,rate)
+ end subroutine tic
+ 
+ subroutine toc( start,rate,sec )
+  implicit none
+  integer           :: start  ! original value of system clock
+  integer           :: finish ! current value of system clock
+  integer           :: rate   ! system clock counts/sec
+  real(kind=8)      :: sec
+  call system_clock(finish)
+  sec=0.
+  sec=float(finish-start)/float(rate)
+ end subroutine toc
+
Index: /trunk/00FlowSolve_KW/tools
===================================================================
--- /trunk/00FlowSolve_KW/tools	(revision 6)
+++ /trunk/00FlowSolve_KW/tools	(revision 6)
@@ -0,0 +1,8 @@
+
+make clean
+make libs
+make flow.x
+make outdirs
+./flow.x
+
+
Index: /trunk/00FlowSolve_PL/CMD_ODYSSEUS/exec_run.ksh
===================================================================
--- /trunk/00FlowSolve_PL/CMD_ODYSSEUS/exec_run.ksh	(revision 6)
+++ /trunk/00FlowSolve_PL/CMD_ODYSSEUS/exec_run.ksh	(revision 6)
@@ -0,0 +1,12 @@
+
+echo 'PWD='$PWD
+
+ln -s $1 $2 
+
+cd src
+
+./cfd.x 
+
+\rm -rf $2
+
+
Index: /trunk/00FlowSolve_PL/CMD_ODYSSEUS/lanc.ksh
===================================================================
--- /trunk/00FlowSolve_PL/CMD_ODYSSEUS/lanc.ksh	(revision 6)
+++ /trunk/00FlowSolve_PL/CMD_ODYSSEUS/lanc.ksh	(revision 6)
@@ -0,0 +1,166 @@
+#!/usr/bin/ksh
+#######################################################
+#####          LANCEMENT DU RUN                 ####### 
+#######################################################
+#_____________________________________________________
+#
+#       DEFINITION DES VARIABLES
+#_____________________________________________________
+
+MODE=$1
+VERSION=$2
+RUN=$3
+
+
+
+if [ $# -ne 3 ]; then
+  echo ' '
+  echo " *** Mauvais arguments d'entree ! *** "
+  echo '   exemple: ./lanc.ksh mode version numero_run'
+  echo ' '
+  exit 1
+fi
+
+echo ' '
+echo ' '
+case $1 in
+  0)
+   echo '========================'
+   echo '==     MODE BATCH     =='
+   echo '========================'
+  ;;
+  1)
+   echo '========================'
+   echo '==   MODE INTERACTIF  =='
+   echo '========================'
+  ;;
+  *)
+   echo '========================'
+   echo '==     MODE TEST      =='
+   echo '========================'
+  ;;
+esac
+ echo ' '
+ echo ' '
+
+#_____________________________________________________
+#
+# PARAMETRES 
+#_____________________________________________________
+
+DATE=`date '+%Y%m%d'_'%H%M%S'`
+echo `date`
+
+HOME_DIR=/home2/xlvlod/IDRIS
+HOME_PROG=00FlowSolve_PL
+HOME_PROJECT=${HOME_PROG}
+SUB_PROJECT=sub_lelong
+WORK_PROG=${RUN}_ODYSSEUS_${HOME_PROJECT}_${VERSION}_${DATE}
+
+echo ' '
+echo 'Definitions des variables:'
+echo '   HOME_DIR    = '$HOME_DIR
+echo '   HOME_PROG   = '$HOME_PROG
+echo '   HOME_PROJECT= '$HOME_PROJECT'     Version: '$VERSION
+echo '   SUB_PROJECT = '$SUB_PROJECT
+echo '   WORK_DIR    = '$WORK_DIR
+echo '   WORK_PROG   = '$WORK_PROG
+
+
+#_____________________________________________________
+#
+# CREATION DU REPERTOIRE DE COMPILATION SUR LE WORKDIR
+#_____________________________________________________
+
+echo ' '
+echo 'Creation du repertoire de compilation et copie des fichiers'
+if [ ! -d $HOME_DIR/$HOME_PROG/PROJECTS/$VERSION ]; then
+   echo $HOME_DIR/$HOME_PROG/PROJECTS/$VERSION
+   echo ' '
+   echo '   WARNING: le projet '$HOME_PROJECT" dans sa version $VERSION n'existe pas"
+   exit 1
+fi
+
+cd $WORK_DIR
+if  [ -d $WORK_PROG ]; then 
+  rm -rf $WORK_PROG
+fi
+mkdir $WORK_PROG 
+if [ -f $HOME_PROG.tar ]; then
+  rm -f $HOME_PROG.tar
+fi
+cd $WORK_PROG
+mkdir output
+
+echo $DATE > FICH_DATE
+echo ${HOME_PROJECT}_${VERSION}_${DATE} > FICH_RUN
+
+mkdir src
+cp -r $HOME_DIR/$HOME_PROG/SRC/SRC.tar src/.
+cd src
+tar xf SRC.tar 
+cd ..
+chmod 700 src
+cp -r $HOME_DIR/$HOME_PROG/PROJECTS/NEW_SRC/* src/.
+cp -r $HOME_DIR/$HOME_PROG/PROJECTS/$VERSION input
+mv input/*.f90 src/.
+mv input/makefile src/.
+cp input/save_*_0000 output/.
+
+
+#_____________________________________________________
+#
+#       COMPILATION DU PROG SUR LE WORKDIR
+#_____________________________________________________
+
+echo ' '
+echo 'Compilation du code pour le projet: '$HOME_PROJECT
+# Compilation
+cd $WORK_DIR/$WORK_PROG/src
+make clean
+make
+if [ -f cfd.x ]; then
+   echo '   Compilation successful ! Here we go'
+else
+   echo '   WARNING: Compilation failed !'
+   cd $WORK_DIR
+   rm -rf $WORK_PROG
+   exit 1
+fi
+
+echo ' '
+case $1 in
+	0)
+	#_____________________________________________________
+	#
+	#        OFFLINE NOHUP
+	#_____________________________________________________
+	echo ' Soumission du job... offline.'
+	cp $HOME_DIR/$HOME_PROG/exec_run.ksh $WORK_DIR/$WORK_PROG/.
+	cd $WORK_DIR/$WORK_PROG
+	nohup ./exec_run.ksh $WORK_DIR/$WORK_PROG $HOME/$WORK_PROG > $WORK_DIR/$WORK_PROG/nohup.out &
+	;;
+	1)
+        #_____________________________________________________
+        #
+        #        ONLINE 
+        #_____________________________________________________
+        echo ' Mode interactif: execution sur le workdir ...'
+        cd $WORK_DIR/$WORK_PROG
+        cd src
+        ln -s $WORK_DIR/$WORK_PROG $HOME/$WORK_PROG
+        ./cfd.x  #  > job.output.$DATE
+        rm $HOME/$WORK_PROG
+	;;
+	*)
+	#_____________________________________________________
+	#
+	#        TEST COMPILATION
+	#_____________________________________________________
+	echo ' End : successful test !'
+	cd $WORK_DIR
+	rm -rf $WORK_PROG
+	;;
+esac
+echo ' '
+
Index: /trunk/00FlowSolve_PL/CMD_ZAHIR/lanc.ksh
===================================================================
--- /trunk/00FlowSolve_PL/CMD_ZAHIR/lanc.ksh	(revision 6)
+++ /trunk/00FlowSolve_PL/CMD_ZAHIR/lanc.ksh	(revision 6)
@@ -0,0 +1,170 @@
+#######################################################
+#####          LANCEMENT DU RUN                 ####### 
+#######################################################
+
+#_____________________________________________________
+#
+#       DEFINITION DES VARIABLES
+#_____________________________________________________
+
+MODE=$1
+VERSION=$2
+RUN=$3
+
+
+if [ $# -ne 3 ]; then
+  echo ' '
+  echo " *** Mauvais arguments d'entree ! *** "
+  echo '   exemple: ./lanc.ksh mode version numero_run'
+  echo ' '
+  exit 1
+fi
+
+ echo ' '
+ echo ' '
+case $1 in
+  0)
+   echo '========================'
+   echo '==     MODE BATCH     =='
+   echo '========================'
+  ;;
+  1)
+   echo '========================'
+   echo '==   MODE INTERACTIF  =='
+   echo '========================'
+  ;;
+  *)
+   echo '========================'
+   echo '==     MODE TEST      =='
+   echo '========================'
+  ;;
+esac
+ echo ' '
+ echo ' '
+
+DATE=`date '+%Y%m%d'_'%H%M%S'`
+echo `date`
+
+HOME_DIR=/homegpfs/rech/dyc/rdyc711/CODE_PS
+HOME_PROG=00Flow_Solve_lelong
+HOME_PROJECT=${HOME_PROG}
+SUB_PROJECT=sub_lelong
+WORK_DIR=/workdir/rech/dyc/rdyc711
+WORK_PROG=${RUN}_ZAHIR_${HOME_PROJECT}_${VERSION}_${DATE}
+
+
+echo ' '
+echo 'Definitions des variables:'
+echo '   HOME_DIR    = '$HOME_DIR
+echo '   HOME_PROG   = '$HOME_PROG
+echo '   HOME_PROJECT= '$HOME_PROJECT'     Version: '$VERSION
+echo '   SUB_PROJECT = '$SUB_PROJECT
+echo '   WORK_DIR    = '$WORK_DIR
+echo '   WORK_PROG   = '$WORK_PROG
+
+
+#_____________________________________________________
+#
+# CREATION DU REPERTOIRE DE COMPILATION SUR LE WORKDIR
+#_____________________________________________________
+
+
+# Creation du repertoire de compilation et copie des fichiers
+echo ' '
+echo 'Creation du repertoire de compilation et copie des fichiers'
+if [ ! -d $HOME_DIR/$HOME_PROG/PROJECTS/$VERSION ]; then
+   echo $HOME_DIR/$HOME_PROG/PROJECTS/$VERSION
+   echo ' '
+   echo '   WARNING: le projet '$HOME_PROJECT" dans sa version $VERSION n'existe pas"
+   exit 1
+fi
+
+
+cd $WORK_DIR
+if  [ -d $WORK_PROG ]; then 
+  rm -rf $WORK_PROG
+fi
+mkdir $WORK_PROG 
+if [ -f $HOME_PROG.tar ]; then
+  rm -f $HOME_PROG.tar
+fi
+cd $WORK_PROG
+
+echo $DATE > FICH_DATE
+echo ${HOME_PROJECT}_${VERSION}_${DATE} > FICH_RUN
+
+
+mkdir output
+cp -r $HOME_DIR/$HOME_PROG/SRC src
+cp -r $HOME_DIR/$HOME_PROG/PROJECTS/NEW_SRC/* src/.
+cp -r $HOME_DIR/$HOME_PROG/PROJECTS/$VERSION input
+#cp -r $WORK_DIR/pomme_ics_linear_*.ascii input/.
+mv input/*.f90 src/.
+mv input/makefile src/.
+
+NPROCS=`grep 'numprocs' $WORK_DIR/$WORK_PROG/input/problem_size.h | tr -d ' ' | grep 'numprocs=' | cut -c 20-21`
+echo $NPROCS > $WORK_DIR/$WORK_PROG/MP_PROCS
+
+#_____________________________________________________
+#
+#       COMPILATION DU PROG SUR LE WORKDIR
+#_____________________________________________________
+
+
+echo ' '
+echo 'Compilation du code pour le projet: '$HOME_PROJECT
+# Compilation
+cd $WORK_DIR/$WORK_PROG/src
+make clean
+make
+if [ -f cfd.x ]; then
+   echo '   Compilation successful ! Here we go'
+else
+   echo '   WARNING: Compilation failed !'
+   cd $WORK_DIR
+   rm -rf $WORK_PROG
+   exit 1
+fi
+
+if [ $MODE -eq '1' ]; then
+echo ' '
+echo 'Mode interactif: execution sur le workdir ...'
+cd $WORK_DIR/$WORK_PROG
+cd src
+export MP_PROCS=$NPROCS
+./cfd.x | tee ../run.log
+
+### new compress
+make clean
+cd ..
+$HOME/bin/compress $PWD $PWD $MP_PROCS
+
+
+echo ' '
+echo 'End : successful run !'
+
+
+
+else 
+#_____________________________________________________
+#
+#        SOUMISSION DU JOB
+#_____________________________________________________
+if [ $MODE -eq '0' ]; then
+
+echo ' '
+echo 'Soumission du job sur ZAHIR'
+cd $WORK_DIR/$WORK_PROG
+cp $HOME_DIR/$HOME_PROG/$SUB_PROJECT .
+llsubmit $SUB_PROJECT
+
+else
+
+echo ' '
+echo 'End : successful test !'
+cd $WORK_DIR
+rm -rf $WORK_PROG
+
+fi
+
+fi
Index: /trunk/00FlowSolve_PL/CMD_ZAHIR/sub_lelong
===================================================================
--- /trunk/00FlowSolve_PL/CMD_ZAHIR/sub_lelong	(revision 6)
+++ /trunk/00FlowSolve_PL/CMD_ZAHIR/sub_lelong	(revision 6)
@@ -0,0 +1,60 @@
+# Nom arbitraire du travail LoadLeveler
+# @ job_name = run.lelong
+# Type de travail
+# @ job_type = parallel
+# Fichier de sortie standard du travail       
+# @ output = $(job_name).$(jobid)
+# Fichier de sortie d'erreur du travail
+# @ error =  $(job_name).$(jobid)
+# @ notify_user = xlvlod@lodyc.jussieu.fr
+# @ notification = complete
+# Temps CPU max. en seconde par processus
+# @ cpu_limit = 20000
+# Mémoire max. utulisée par processus (ici 700 Megaoctets)
+# @ data_limit = 3.9Gb
+# @ stack_limit = 0.2Gb
+# Nombre de processus demandé (ici 8)
+# @ total_tasks = 8
+# @ queue
+
+### Pour avoir l'écho des commandes
+set -x 
+
+### Variables d'environnement
+export DATE=`date '+%Y%m%d'_'%H%M%S'`
+export COMPIL_DIR=$LOADL_STEP_INITDIR
+
+### Répertoire temporaire de travail
+#cd $TMPDIR
+#export TEMPD=$TMPDIR
+cd $COMPIL_DIR
+rm -rf TEMP
+mkdir TEMP
+export TEMPD=$COMPIL_DIR/TEMP
+cd $TEMPD
+
+### pour la sauvegarde de la sortie de job
+cp $COMPIL_DIR/FICH_RUN .
+export RUN_NAME=`more FICH_RUN`
+export MFDIR=ZAHIR_${RUN_NAME}
+
+cp $COMPIL_DIR/MP_PROCS .
+export MP_PROCS=`more MP_PROCS`
+
+### Prepration des repertoires
+cp -r $COMPIL_DIR/src .
+cp -r $COMPIL_DIR/input .
+mkdir output
+
+#create a directory on gaya
+rsh gaya -n mkdir $MFDIR
+
+### Exécution d'un programme MPI
+cd src
+./cfd.x
+
+#### new compression
+make clean
+cd ..
+$HOME/bin/compress $TEMPD $COMPIL_DIR $MP_PROCS $MFDIR # tar cf all-in-one.tar output input src 
+
Index: /trunk/00FlowSolve_PL/PROJECTS/FORCING/EOS.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/FORCING/EOS.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/FORCING/EOS.f90	(revision 6)
@@ -0,0 +1,184 @@
+subroutine equation_of_state
+
+  ! routine to use the equation of state from
+  ! MILLERO et.al. (1980) DEEP-SEA RES.
+  ! to calculate the dimensionless perturbation density pd(x,y,z) 
+  ! given the scalar values s1(x,y,z), s2(x,y,z), s1_bar(x,z) and s2_bar(x,z).
+  ! The "perturbation" density is defined relative to the ambient state
+  ! rho_bar(x,z) determined by s1_bar and s2_bar. As written, we interpret
+  ! the scalar s1 to be temparature and the scalar s2 to be salinity.
+  ! Salinity in g/kg or equivilently ppt (typical value ~ 35/1000)
+
+  use mpi_parameters
+  use grid_info
+  use dependent_variables
+  use dimensional_scales
+  use counters_flags_etc
+  implicit none
+  include '../input/problem_size.h'
+
+  double precision :: rho,xx,z_surf   ! rho is external function
+  real, dimension(locnz)            ::  zz,rh
+
+  ! local variables
+  ! S,T,P all DOUBLE precision arguments of function rho:  P in MPa, T in deg C, S in ppt
+  double precision, allocatable         :: Temp(:,:),Salinity(:,:),P_Mpa(:,:),density(:,:)
+  allocate( Temp(nx,locnz),Salinity(nx,locnz),P_Mpa(nx,locnz),density(nx,locnz) )
+
+  !   pressure as function of depth, ignoring density perturbations
+  !   formula assumes surface height z is equal to L_scale
+
+!!! z_surf=L_scale  ! surface height in [m]   ! top processor should broadcast value
+!!! P_Mpa(:,:) = g*rho0*( z_surf - Grid(0)%z(:,:)*L_scale )  ! [kg/ms^2=Pa]
+!!! P_Mpa(:,:) = P_Mpa/1.e6                                  ! Mpa
+  P_Mpa(:,:) = 0.                                  ! Mpa
+
+  Temp=0.
+  Salinity=0.
+
+  do j=1,ny
+
+     !declare interpretation of s1 and s2
+     Temp(:,:) = (s1_bar(:,:) + s1(:,j,:)) * s1_scale        ! dimensional quantity: total Temp.
+     Salinity(:,:) = (s2_bar(:,:) + s2(:,j,:)) * s2_scale    ! dimensional quantity: total Salinity
+
+     do k=1,locnz
+        do i=1,nx
+           density(i,k)=rho( Salinity(i,k),Temp(i,k),P_Mpa(i,k) ) ! total density [kg/m3]
+           density(i,k) = (density(i,k)-rho0)/density_scale ! dimensionless "total"(rel. to rho0) density in j plane
+        enddo
+     enddo
+
+     !If not yet initialized, calculate rho_bar, otherwise its available via "dependent_variables" 
+     if( rho_bar(1,1) == -999.9 ) then     
+
+        if ( j == 1) print*,'**** not yet initialized, calculate rho_bar ****'
+
+        Temp(:,:) = s1_bar(:,:) * s1_scale                 ! dimensional background Temp
+        Salinity(:,:) = s2_bar(:,:) * s2_scale             ! dimensional background Salinity
+
+        do k=1,locnz
+           do i=1,nx
+              xx=rho( Salinity(i,k),Temp(i,k),P_Mpa(i,k) )
+              rho_bar(i,k)=(xx-rho0)/density_scale           ! dimensionless ambient profile, rel. to rho0
+           enddo
+           rh(k) = rho_bar(1,k)*density_scale + rho0
+           zz(k) = Grid(0)%z(1,k)*L_scale
+        enddo
+!!!      write(0,'(/A8,I2.2,2F20.5/)') (('DENSPROF',myid,zz(k),rh(k)),k=1,locnz)
+     endif
+
+
+     !store dimensionless values of perturbation densityin jth plane of pd
+     do k=1,locnz
+        do i=1,nx
+           pd(i,j,k) = density(i,k)  - rho_bar(i,k)
+        enddo
+     enddo
+
+  enddo  ! end loop over j
+
+  if ( minval(Salinity) .lt. 0.) then
+     print*,myid,'   ATTENTION Salinity NEGATIF : minval(Salinity)=',minval(Salinity)
+     !STOP
+  endif
+
+
+
+
+  deallocate( Temp,Salinity,density,P_Mpa )
+end subroutine equation_of_state
+
+
+!	"rho.f"
+
+!	Parameter	:	equation of state
+!	Source		:	MILLERO et.al. (1980) DEEP-SEA RES.
+!				Vol 27A, pp 255-264
+!	Units		:	Kg / m**3
+!!! xlv
+!!!    Input            :       s (concentration units), t (deg C), p (MPa)
+!!!    Range            :       s (0 to 0.040), t (-2 to 40), p (MPa)
+!      Input		:	s (psu), t (deg C), p (MPa)
+!      Range		:	s (0 to 40), t (-2 to 40), p (MPa)
+
+!	Ck value	:	K (0, 0, 100)      = 2.297721e4
+!				K (0.035, 0, 100)  = 2.499200e4
+!				K (0, 25, 100)     = 2.54051e4
+!				K (0.035, 25, 100) = 2.710895e4
+!	Coded		:	Ngoc Dang, July 1982
+double precision function rho (s, t, p)
+
+!!! xlv	
+  use user_parameters   , only: alpha_rho,Tmin
+  use dimensional_scales, only: rho0
+
+  double precision s, t, p
+
+!!!  double precision a, b, c, d, e, k, t1, t2, t3, t4, ta, tb
+!!!  double precision k0, k0w, alpha0, alpha, rho00, aw, bw
+
+!!! xlv      
+!!!      if(s .lt. 0.) write(0,*) 's,t,p = ',s,t,p
+
+  !  convert input units
+!!! xlv  s already in psu
+!!!        s = 1000.0d0 * s     
+!!!	p = 10.0d0 * p
+
+!!$!  compute alpha0 = alpha (s, t, 0)
+!!$
+!!$	t1 = 9.99841594d-1 + t * (6.793952d-5 + t * (-9.095290d-6 + t *   &
+!!$           (1.001685d-7 + t * (-1.120083d-9 + t * 6.536332d-12))))
+!!$	t2 = 8.25917d-4 + t * (-4.4490d-6 + t * (1.0485d-7 + t *      &
+!!$           (-1.258d-9 + t * 3.315d-12)))
+!!$	t3 = -6.33761d-6 + t * (2.8441d-7 + t * (-1.6871d-8 + t *     &
+!!$      	     2.83258d-10))
+!!$	t4 = 5.4705d-7 + t * (-1.97975d-8 + t * (1.6641d-9 - t *      &
+!!$           3.1203d-11))
+!!$	rho00 = t1 + t2 * s + t3 * s**(1.5) + t4 * s**2
+!!$	alpha0 = 1.0d0 / rho00
+!!$
+!!$!  compute the pressure coefficient
+!!$
+!!$!	the first term
+!!$	k0w = 1.965221d4 + t * (1.484206d2 + t * (-2.327105d0 + t *     &
+!!$            (1.360477d-2 - t * 5.155288d-5)))
+!!$	ta = 5.46746d1 + t * (-6.03459d-1 + t * (1.09987d-2 - t *       &
+!!$           6.167d-5))
+!!$	tb = 7.944d-2 + t * (1.6483d-2 - t * 5.3009d-4)
+!!$	k0 = k0w + ta * s + tb * s**(1.5)
+!!$
+!!$!	the second term
+!!$	aw = 3.239908d0 + t * (1.43713d-3 + t * (1.16092d-4 - t *       &
+!!$          5.77905d-7))
+!!$	c = 2.2838d-3 + t * (-1.0981d-5 - t * 1.6078d-6)
+!!$	d = 1.9107d-4
+!!$	a = aw + c * s + d * s**(1.5)
+!!$
+!!$!	the third term
+!!$	bw = 8.50935d-5 + t * (-6.12293d-6 + t * 5.2787d-8)
+!!$	e = -9.9348d-7 + t * (2.0816d-8 + t * 9.1697d-10)
+!!$	b = bw + e * s
+!!$
+!!$	k = k0 + a * p + b * p**2
+!!$
+!!$!  compute density
+!!$	alpha = alpha0 * (1.0d0 - p / k)
+!!$	rho = 1.0d0 / alpha
+!!$
+!!$
+!!$!  convert to kg / m**3
+!!$	rho = 1000.0d0 * rho
+!!$!!! xlv
+!!$!!!     s = s / 1000.0d0
+!!$	p = p / 10.0d0
+
+  !=================================================
+  !!! xlv profil de rho dependant de t
+   rho = rho0 + alpha_rho * (t-Tmin)
+  !=================================================
+ 
+  return
+
+end function rho
Index: /trunk/00FlowSolve_PL/PROJECTS/FORCING/flow_solve_user.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/FORCING/flow_solve_user.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/FORCING/flow_solve_user.f90	(revision 6)
@@ -0,0 +1,455 @@
+!!==========================================================
+!!==========================================================
+module user_routines
+!! module for user-customized subroutines and functions
+
+implicit none
+
+public   :: user_ics                 !!routine defining initial conditions
+public   :: user_forcing             !!routine defining any external forcing
+public   :: user_bdry_forcing        !!routine for specifying boundary-condition data
+
+
+!!==========================================================    
+Contains
+!!==========================================================
+
+
+!!==========================================================
+  subroutine user_ics(xval,yval,zval,id,m1,m2,m3,FF)
+    !!===========================================================
+    !!  User defined subroutine to specify initial conditions.
+    !!  Inputs and outputs are all in dimensional units.
+    !!  
+    !!
+    !!  inputs:
+    !!   x,y,z   coordinate arrays (in meters) that define 
+    !!           the region over which forcing functions
+    !!           are to be evaluated
+    !! 
+    !!   id      field id [u,v,w,s1',s2'] <---[1,2,3,4,5]
+    !!             where s1 = s1bar(z) + s1'(x,y,z,t)
+    !!             and   s2 = s2bar(z) + s2'(x,y,z,t)
+    !!
+    !!  outputs:
+    !!          F(:,:,:) the initial conditions for variable id
+    !!          F is to be returned in DIMENSIONAL units 
+    !!          (i.e. m/s or deg C etc )
+    !!   
+    !!===========================================================
+
+    use dimensional_scales ,only: f,DEL,Nsquared,g,rho0,pi,L_scale,density_scale
+    use dependent_variables,only: rho_bar,s1_bar_zeta,s2_bar_zeta
+    use mpi_parameters     ,only: myid,comm,nprocs
+    use counters_flags_etc ,only: ierr
+    use grid_info          ,only: grid,Lx,Ly,Lz
+
+    implicit none
+
+    include '../input/problem_size.h' 
+    include 'mpif.h'
+
+    integer           ::  m1,m2,m3         
+    integer           ::  id
+    real              ::  xval(m1)
+    real              ::  yval(m2)
+    real              ::  zval(m3)
+    real              ::  FF(m1,m2,m3)
+
+    integer           :: i,j,k
+    real              :: xpos,ypos,zpos,arg
+    real              :: A_ics,k_ics,l_ics,m_ics,omega2,omega_ics
+    real,dimension(2,2) :: c 
+
+    integer           :: myproc
+    real              :: ambient_density_gradient,N2_ics
+    real,dimension(m1,m3) :: drhobardz
+    real,dimension(:),allocatable :: drhobardz_tot
+
+    !! Definition du processeur pour l'echange
+    if ( myid == 0 ) then
+            myproc=0
+    else
+            myproc=1
+    endif
+    !! allocation de "rho_bar_tot" pour le processeur "myproc" seulement
+    if ( myid == myproc ) allocate ( drhobardz_tot(m3*nprocs) )
+    !! calculde la derive de rho_bar(-,z) (dimensionne) selon z
+    call compact_ddz_mpi( rho_bar*density_scale+rho0 , drhobardz , 1 , -1e32 , m1 , 1 , m3)
+    !! collecte par le processeur "myproc" de toutes les valeurs de drhobardz
+    call mpi_gather( drhobardz(1,:)/L_scale , m3 , MPI_REAL , drhobardz_tot , m3 , MPI_REAL , myproc , comm , ierr )
+    !! moyenne sur toutes les valeurs
+    if ( myid == myproc ) ambient_density_gradient = sum( drhobardz_tot ) / ( m3*nprocs)
+    !! Diffusion à tous les processeurs la valeur "ambient_density_gradient"
+    call mpi_bcast( ambient_density_gradient , 1 , MPI_REAL , myproc , comm , ierr ) 
+    !! deallocation de "drhobardz_tot"
+    if ( myid == myproc ) deallocate ( drhobardz_tot )
+
+    N2_ics = (-g/rho0) * ambient_density_gradient
+
+    !  Internal wave parameters
+    A_ics=1.                                     ! displacement [m]
+    k_ics=((1)*(2.*pi/Lx))                       ! [1/m]
+    l_ics=((0)*(2.*pi/Ly))                       ! [1/m]
+    m_ics=((1)*(pi/Lz))                          ! [1/m]
+
+    !  Internal wave dispersion relation
+    omega2 = ( ((f)**2)*m_ics**2 + N2_ics*(k_ics**2+l_ics**2) )/ &
+         ( k_ics**2 + l_ics**2 + m_ics**2 )
+    omega_ics=sqrt(omega2)                       ! [1/s]
+
+
+    !  Constants in front of u & v expressions  [m/s]
+    c(1,1)=A_ics*k_ics*m_ics*omega_ics/(k_ics**2+l_ics**2)
+    c(1,2)=A_ics*l_ics*m_ics*f/(k_ics**2+l_ics**2)
+    c(2,1)=A_ics*l_ics*m_ics*omega_ics/(k_ics**2+l_ics**2)
+    c(2,2)=A_ics*k_ics*m_ics*f/(k_ics**2+l_ics**2)
+    
+    if ( id == 1 .and. myid == 0 ) then
+           print*,'m1,m2,m3=',m1,m2,m3
+           print*,'Lx,Ly,Lz=',Lx,Ly,Lz
+           print*,'f,N,ambient_density_gradient=',f,sqrt(N2_ics),ambient_density_gradient
+           print*,'k_ics,l_ics,m_ics=',k_ics,l_ics,m_ics
+           print*,'c(1,1),c(1,2),c(2,1),c(2,2)=',c(1,1),c(1,2),c(2,1),c(2,2)
+           print*,' '
+           write(6,*) ' TEST WAVE FREQUENCY (1/s) :  ',omega_ics
+           write(6,*) ' TEST WAVE PERIOD    (min) : ', (2*pi/omega_ics)/60.
+   endif       
+
+    !     arg=k_ics*x + l_ics*y   ! generally -omega_ics*t but set t=0
+
+    select case(id)
+
+    case(1)        !! ics for u [m/s]
+       do i=1,m1
+          do j=1,m2
+             do k=1,m3        
+                xpos = xval(i)     ! [m]
+                ypos = yval(j)     ! [m]
+                zpos = zval(k)     ! [m] 
+                arg  = k_ics*xpos + l_ics*ypos 
+
+                FF(i,j,k) = c(1,1) * cos(m_ics*zpos)*cos(arg) - c(1,2) * cos(m_ics*zpos)*sin(arg)
+
+             enddo
+          enddo
+       enddo
+
+    case(2)        !! ics for v [m/s]
+       do i=1,m1         
+          do j=1,m2
+             do k=1,m3
+                xpos = xval(i)     ! [m]
+                ypos = yval(j)     ! [m]
+                zpos = zval(k)     ! [m]  
+                arg  = k_ics*xpos + l_ics*ypos
+
+                FF(i,j,k) = c(2,1) * cos(m_ics*zpos)*cos(arg) + c(2,2) * cos(m_ics*zpos)*sin(arg) 
+
+             enddo
+          enddo
+       enddo
+
+    case(3)        !! ics for w [m/s]
+       do i=1,m1
+          do j=1,m2
+             do k=1,m3 
+                xpos = xval(i)     ! [m]
+                ypos = yval(j)     ! [m]
+                zpos = zval(k)     ! [m] 
+                arg  = k_ics*xpos + l_ics*ypos
+
+                FF(i,j,k) = A_ics*omega_ics*sin(m_ics*zpos)*sin(arg)
+
+             enddo
+          enddo
+       enddo
+
+    case(4)        !! ics for s1' [in this case deg C]
+       do i=1,m1
+          do j=1,m2
+             do k=1,m3
+                xpos = xval(i)     ! [m]
+                ypos = yval(j)     ! [m]
+                zpos = zval(k)     ! [m] 
+                arg  = k_ics*xpos + l_ics*ypos
+
+                FF(i,j,k) = -A_ics*s1_bar_zeta(i,k)*sin(m_ics*zpos)*cos(arg)
+
+             enddo
+          enddo
+       enddo
+
+
+    case(5)        !! ics for s2' [concentration units]
+       do i=1,m1
+          do j=1,m2
+             do k=1,m3
+                xpos = xval(i)     ! [m]
+                ypos = yval(j)     ! [m]
+                zpos = zval(k)     ! [m] 
+                arg  = k_ics*xpos + l_ics*ypos
+
+                FF(i,j,k) = -A_ics*s2_bar_zeta(i,k)*sin(m_ics*zpos)*cos(arg)
+
+             enddo
+          enddo
+       enddo
+
+
+    case default
+       stop 'error in calling user_ics: id out of range'
+    end select
+
+    return
+  end subroutine user_ics
+!!========================================================== 
+!!==========================================================
+      
+
+      
+!!==========================================================
+!!==========================================================
+subroutine user_forcing(x,y,z,t,FF,id,m1,m2,m3)
+  !!===========================================================
+  !!  User defined subroutine to add time/space dependent
+  !!  forcing to the equations of motion. Inputs and outputs
+  !!  for this routine are all in dimensional units.
+  !!
+  !!
+  !!  inputs:
+  !!   x,y,z   coordinate arrays [m] that define
+  !!           the region over which forcing
+  !!           functions are to be evaluated
+  !!   t       current time in seconds
+  !!   id      field id [u,v,w,s1',s2'] <---[1,2,3,4,5]
+  !!
+  !!  outputs:
+  !!          FF(:,:,:) the rhs term for equation id
+  !!          FF is to be returned in DIMENSIONAL units
+  !!          (i.e. m/s2 or deg C/s etc )
+  !!
+  !!===========================================================
+  use dependent_variables, only: s1_bar_zeta,s2_bar_zeta
+  use dimensional_scales,  only: f,pi,t_scale
+  use mpi_parameters,      only: myid        
+  use counters_flags_etc,  only: istep
+  use grid_info,           only: Lx,Ly,Lz,dt
+
+  implicit none
+  integer   ::  m1,m2,m3
+  real      ::  x(m1)
+  real      ::  y(m2)
+  real      ::  z(m3)
+  real      ::  t
+  integer   ::  id
+  real,dimension(:,:,:),intent(out)  ::  FF
+
+  real      :: xpos,ypos,zpos
+  integer   :: i,j,k
+  real      :: A_ics,xfreq,arg,G1,G2,sigma1,sigma2,sigma3
+  integer   :: iend_storm
+  real      :: Vt,lt,xt,H,zscale,init,gauss,window
+  
+  iend_storm= floor((0.5*(3600*24))/(dt*t_scale))
+
+  select case(id)
+
+  case(1)   ! u
+
+  if ( istep .le. iend_storm ) then          
+
+!=========FORCAGE TYPE ASARO========
+      Vt=1.e-6
+      lt=400.e3
+      xt=Ly/2
+      H=55.
+      zscale=Lz/50
+      init=atan( (Lz-H) / zscale )
+      do i=1,m1
+      do j=1,m2
+      do k=1,m3
+          gauss=exp(-(y(j)-xt)**2/lt**2)
+          window=init-atan( (Lz-H-z(k)) / zscale )
+          FF(i,j,k)=Vt*gauss*window*sin(y(j)*pi/Ly)
+      enddo
+      enddo
+      enddo
+      if ( Vt .ne. 0. ) then
+        print*,'========='
+        print*,' Forcage, istep=',istep,'  field=',id
+        print*,'========='
+      endif
+!===================================
+ 
+  else
+  
+     FF=0.d0
+
+  endif   
+
+  case(2)   ! v
+     FF=0.d0
+
+  case(3) ! w
+     FF=0.d0
+
+  case(4) ! s1
+     FF=0.d0
+
+  case(5) ! s2
+     FF=0.d0
+
+  case default
+     stop 'error in calling user_forcing: id out of range'
+
+  end select
+
+  return
+
+end subroutine user_forcing
+!!===============================================================
+!!===============================================================
+
+
+
+
+!!==========================================================
+subroutine user_bdry_forcing(x,y,z,t,FF,id,m1,m2,m3)
+!!===========================================================
+!!  User defined subroutine to add time/space dependent
+!!  forcing to the equations of motion. Inputs and outputs
+!!  for this routine are all in dimensional units.
+!!
+!!
+!!  inputs:
+!!   x,y,z   coordinate arrays [m] that define
+!!           the region over which forcing
+!!           functions are to be evaluated
+!!   t       current time in seconds
+!!   id      field id [u,v,w,s1',s2'] <---[1,2,3,4,5]
+!!
+!!  outputs:
+!!          FF(:,:,:) the rhs term for equation id
+!!          FF is to be returned in DIMENSIONAL units
+!!          (i.e. m/s2 or deg C/s etc )
+!!
+!!===========================================================
+ use stress_parameters    !! tau_0, delta, Patch_Radius
+ use dependent_variables, only: s1_bar_zeta,s2_bar_zeta
+ use dimensional_scales , only: pi,f,t_scale, rho0
+ use user_parameters    , only: Km_of_z
+ use counters_flags_etc , only: istep
+ use grid_info          , only: dt,Lx,Ly,Lz
+
+
+implicit none
+  integer   ::  m1,m2,m3
+  real      ::  x(m1)
+  real      ::  y(m2)
+  real      ::  z(m3)
+  real      ::  t
+  real      ::  FF(m1,m2)
+  integer   ::  id
+  real      ::  xpos,ypos,zpos
+  integer   ::  i,j,k,istep_Ti
+
+
+
+  !! surface stress non_zero value just for 1/2 Ti. 
+  !! 0.5 Ti
+  istep_Ti= floor((0.5*(2*pi/f))/(dt*t_scale)) 
+  !! 1 Ti
+  !istep_Ti= floor((1.0*(2*pi/f))/(dt*t_scale))
+
+  select case(id)
+
+    case(1)   ! u
+
+!! xlv
+!========surface stress imposed==========
+ !if ( istep < istep_Ti ) then
+ !        tau_0 = 0.2
+ !elseif ( istep >= istep_Ti .and. istep <= 2*istep_Ti ) then        
+ !        tau_0 = 0.4 * ( 1 - istep / (2*istep_Ti) )
+ !elseif ( istep >= istep_Ti .and. tau_0 /= 0. ) then  
+         tau_0 = 0.
+ !        print*,' '
+ !        print*,' Until now, surface stress is set to zero !'
+ !        print*,' '
+ !else
+ !   print*,' ... '         
+ !endif
+
+ !! stress = tau_0 = rho0*nu*Shear(z=Lz)
+ !! ===> bc for dUdz:  Shear = tau_0/(rho0*nu)
+ !!Shear = tau_0/(rho0*nu) * t_scale
+ Shear = tau_0/(rho0*Km_of_z(m3)) * t_scale
+ print*,'     ... Shear=',tau_0/(rho0*Km_of_z(m3)),'  tau_0=',tau_0
+ print*,'         m3=',m3,'  Km_of_z(locnz)=',Km_of_z(m3)
+ print*,'         Patch_Radius=',Patch_Radius,'  delta=',delta
+
+ do i=1,m1
+ do j=1,m2
+      xpos= x(i)
+      ypos= y(j)
+!!!      FF(i,j)= 1 - tanh( delta*( (xpos-Lx/2)**2 + (ypos-Ly/2)**2 - Patch_Radius**2 ) )
+
+       FF(i,j)= cos(ypos*pi/Ly)*exp( -( (ypos - Ly/2)/20e3)**2 )
+ enddo
+ enddo
+ FF=Shear * FF / maxval(abs(FF))
+
+ open(933,file='../output/stress.data',status='unknown')
+     do i=1,m1
+     do j=1,m2
+        write(933,*) x(i),y(j),FF(i,j)
+     enddo
+     enddo
+ close(933)
+
+ if (tau_0 .ne. 0. ) then
+   print*,'========='
+   print*,' Wind stress, istep=',istep,'  field=',id
+   print*,'========='
+ endif
+!========================================
+
+ case(2) ! v
+   FF=0.d0
+   
+  case(3) ! w
+   FF=0.d0
+  
+  case(4) ! s1
+
+    do j=1,m2
+      FF(:,j)= - s1_bar_zeta(:,m3)
+    enddo
+  
+  case(5) ! s2
+  
+    do j=1,m2
+      FF(:,j)= - s1_bar_zeta(:,m3)
+    enddo
+
+  case default
+   stop 'error in calling user_bdry_forcing: id out of range'
+  
+ end select
+
+return
+
+end subroutine user_bdry_forcing
+!!===============================================================
+!!===============================================================
+
+
+
+
+
+
+
+
+ 
+end module user_routines
Index: /trunk/00FlowSolve_PL/PROJECTS/FORCING/grid_coords
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/FORCING/grid_coords	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/FORCING/grid_coords	(revision 6)
@@ -0,0 +1,770 @@
+  5 129 128   1.000000   1.000000    1.000000
+   0.000000e+00    0.000000e+00    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    7.874016e-03    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    1.574803e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    2.362205e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    3.149606e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    3.937008e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    4.724409e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    5.511811e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    6.299213e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    7.086614e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    7.874016e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    8.661417e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    9.448819e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    1.023622e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    1.102362e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    1.181102e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    5.639933e-14    4.000000e-06    1.000000e+00    0.000000e+00   -6.497203e-14
+   0.000000e+00    1.259843e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   0.000000e+00    1.338583e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.639933e-14    4.000000e-06    1.000000e+00    0.000000e+00    6.497203e-14
+   0.000000e+00    1.417323e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    1.496063e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    1.574803e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    1.653543e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    1.732283e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    1.811024e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    1.889764e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    1.968504e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    2.047244e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    2.125984e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    2.204724e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    2.283465e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    2.362205e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    2.440945e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.127987e-13    4.000000e-06    1.000000e+00    0.000000e+00   -1.155058e-13
+   0.000000e+00    2.519685e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.127987e-13    4.000000e-06    1.000000e-00    0.000000e+00   -1.155058e-13
+   0.000000e+00    2.598425e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e-00    0.000000e+00    4.548042e-13
+   0.000000e+00    2.677165e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   0.000000e+00    2.755906e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.767920e-13    4.000000e-06    1.000000e+00    0.000000e+00   -6.785967e-13
+   0.000000e+00    2.834646e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   0.000000e+00    2.913386e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.767920e-13    4.000000e-06    1.000000e-00    0.000000e+00    6.785967e-13
+   0.000000e+00    2.992126e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   0.000000e+00    3.070866e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.767920e-13    4.000000e-06    1.000000e+00    0.000000e+00   -6.785967e-13
+   0.000000e+00    3.149606e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   0.000000e+00    3.228346e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.767920e-13    4.000000e-06    1.000000e-00    0.000000e+00    6.785967e-13
+   0.000000e+00    3.307087e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   0.000000e+00    3.385827e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.767920e-13    4.000000e-06    1.000000e+00    0.000000e+00   -6.785967e-13
+   0.000000e+00    3.464567e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   0.000000e+00    3.543307e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e-00    0.000000e+00    4.475851e-13
+   0.000000e+00    3.622047e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   0.000000e+00    3.700787e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00   -2.237925e-13
+   0.000000e+00    3.779528e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   0.000000e+00    3.858268e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00    2.237925e-13
+   0.000000e+00    3.937008e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   0.000000e+00    4.015748e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00   -2.237925e-13
+   0.000000e+00    4.094488e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   0.000000e+00    4.173228e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00    2.237925e-13
+   0.000000e+00    4.251969e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   0.000000e+00    4.330709e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00   -2.237925e-13
+   0.000000e+00    4.409449e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   0.000000e+00    4.488189e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00    2.237925e-13
+   0.000000e+00    4.566929e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   0.000000e+00    4.645669e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00   -2.237925e-13
+   0.000000e+00    4.724409e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   0.000000e+00    4.803150e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00    2.237925e-13
+   0.000000e+00    4.881890e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   0.000000e+00    4.960630e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    5.039370e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    5.118110e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    5.196850e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   0.000000e+00    5.275591e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   0.000000e+00    5.354331e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   0.000000e+00    5.433071e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   0.000000e+00    5.511811e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.953394e-13    4.000000e-06    1.000000e-00    0.000000e+00   -8.951702e-13
+   0.000000e+00    5.590551e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   0.000000e+00    5.669291e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e-00    0.000000e+00    4.475851e-13
+   0.000000e+00    5.748031e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   0.000000e+00    5.826772e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   0.000000e+00    5.905512e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   0.000000e+00    5.984252e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   0.000000e+00    6.062992e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   0.000000e+00    6.141732e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.953394e-13    4.000000e-06    1.000000e-00    0.000000e+00   -8.951702e-13
+   0.000000e+00    6.220472e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   0.000000e+00    6.299213e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e-00    0.000000e+00    4.475851e-13
+   0.000000e+00    6.377953e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   0.000000e+00    6.456693e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   0.000000e+00    6.535433e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   0.000000e+00    6.614173e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   0.000000e+00    6.692913e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   0.000000e+00    6.771654e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.953394e-13    4.000000e-06    1.000000e-00    0.000000e+00   -8.951702e-13
+   0.000000e+00    6.850394e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   0.000000e+00    6.929134e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e-00    0.000000e+00    4.475851e-13
+   0.000000e+00    7.007874e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   0.000000e+00    7.086614e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   0.000000e+00    7.165354e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   0.000000e+00    7.244094e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00    4.475851e-13
+   0.000000e+00    7.322835e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   0.000000e+00    7.401575e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   0.000000e+00    7.480315e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    7.559055e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   0.000000e+00    7.637795e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   0.000000e+00    7.716535e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   0.000000e+00    7.795276e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   0.000000e+00    7.874016e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00    4.475851e-13
+   0.000000e+00    7.952756e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   0.000000e+00    8.031496e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   0.000000e+00    8.110236e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    8.188976e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   0.000000e+00    8.267717e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   0.000000e+00    8.346457e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   0.000000e+00    8.425197e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   0.000000e+00    8.503937e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00    4.475851e-13
+   0.000000e+00    8.582677e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   0.000000e+00    8.661417e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   0.000000e+00    8.740157e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    8.818898e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   0.000000e+00    8.897638e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   0.000000e+00    8.976378e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   0.000000e+00    9.055118e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   0.000000e+00    9.133858e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00    4.475851e-13
+   0.000000e+00    9.212598e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   0.000000e+00    9.291339e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   0.000000e+00    9.370079e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    9.448819e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   0.000000e+00    9.527559e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   0.000000e+00    9.606299e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   0.000000e+00    9.685039e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   0.000000e+00    9.763780e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00    4.475851e-13
+   0.000000e+00    9.842520e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   0.000000e+00    9.921260e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   0.000000e+00    1.000000e+00    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -9.023893e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   1.250000e+02    0.000000e+00    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    7.874016e-03    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    1.574803e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    2.362205e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    3.149606e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    3.937008e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    4.724409e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    5.511811e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    6.299213e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    7.086614e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    7.874016e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    8.661417e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    9.448819e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    1.023622e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    1.102362e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    1.181102e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    5.639933e-14    4.000000e-06    1.000000e+00    0.000000e+00   -6.497203e-14
+   1.250000e+02    1.259843e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   1.250000e+02    1.338583e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.639933e-14    4.000000e-06    1.000000e+00    0.000000e+00    6.497203e-14
+   1.250000e+02    1.417323e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    1.496063e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    1.574803e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    1.653543e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    1.732283e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    1.811024e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    1.889764e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    1.968504e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    2.047244e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    2.125984e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    2.204724e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    2.283465e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    2.362205e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    2.440945e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.127987e-13    4.000000e-06    1.000000e+00    0.000000e+00   -1.155058e-13
+   1.250000e+02    2.519685e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.127987e-13    4.000000e-06    1.000000e-00    0.000000e+00   -1.155058e-13
+   1.250000e+02    2.598425e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e-00    0.000000e+00    4.548042e-13
+   1.250000e+02    2.677165e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   1.250000e+02    2.755906e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.767920e-13    4.000000e-06    1.000000e+00    0.000000e+00   -6.785967e-13
+   1.250000e+02    2.834646e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   1.250000e+02    2.913386e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.767920e-13    4.000000e-06    1.000000e-00    0.000000e+00    6.785967e-13
+   1.250000e+02    2.992126e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   1.250000e+02    3.070866e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.767920e-13    4.000000e-06    1.000000e+00    0.000000e+00   -6.785967e-13
+   1.250000e+02    3.149606e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   1.250000e+02    3.228346e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.767920e-13    4.000000e-06    1.000000e-00    0.000000e+00    6.785967e-13
+   1.250000e+02    3.307087e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   1.250000e+02    3.385827e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.767920e-13    4.000000e-06    1.000000e+00    0.000000e+00   -6.785967e-13
+   1.250000e+02    3.464567e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   1.250000e+02    3.543307e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e-00    0.000000e+00    4.475851e-13
+   1.250000e+02    3.622047e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   1.250000e+02    3.700787e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00   -2.237925e-13
+   1.250000e+02    3.779528e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   1.250000e+02    3.858268e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00    2.237925e-13
+   1.250000e+02    3.937008e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   1.250000e+02    4.015748e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00   -2.237925e-13
+   1.250000e+02    4.094488e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   1.250000e+02    4.173228e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00    2.237925e-13
+   1.250000e+02    4.251969e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   1.250000e+02    4.330709e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00   -2.237925e-13
+   1.250000e+02    4.409449e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   1.250000e+02    4.488189e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00    2.237925e-13
+   1.250000e+02    4.566929e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   1.250000e+02    4.645669e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00   -2.237925e-13
+   1.250000e+02    4.724409e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   1.250000e+02    4.803150e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00    2.237925e-13
+   1.250000e+02    4.881890e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   1.250000e+02    4.960630e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    5.039370e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    5.118110e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    5.196850e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   1.250000e+02    5.275591e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   1.250000e+02    5.354331e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   1.250000e+02    5.433071e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   1.250000e+02    5.511811e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.953394e-13    4.000000e-06    1.000000e-00    0.000000e+00   -8.951702e-13
+   1.250000e+02    5.590551e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   1.250000e+02    5.669291e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e-00    0.000000e+00    4.475851e-13
+   1.250000e+02    5.748031e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   1.250000e+02    5.826772e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   1.250000e+02    5.905512e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   1.250000e+02    5.984252e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   1.250000e+02    6.062992e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   1.250000e+02    6.141732e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.953394e-13    4.000000e-06    1.000000e-00    0.000000e+00   -8.951702e-13
+   1.250000e+02    6.220472e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   1.250000e+02    6.299213e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e-00    0.000000e+00    4.475851e-13
+   1.250000e+02    6.377953e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   1.250000e+02    6.456693e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   1.250000e+02    6.535433e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   1.250000e+02    6.614173e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   1.250000e+02    6.692913e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   1.250000e+02    6.771654e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.953394e-13    4.000000e-06    1.000000e-00    0.000000e+00   -8.951702e-13
+   1.250000e+02    6.850394e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   1.250000e+02    6.929134e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e-00    0.000000e+00    4.475851e-13
+   1.250000e+02    7.007874e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   1.250000e+02    7.086614e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   1.250000e+02    7.165354e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   1.250000e+02    7.244094e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00    4.475851e-13
+   1.250000e+02    7.322835e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   1.250000e+02    7.401575e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   1.250000e+02    7.480315e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    7.559055e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   1.250000e+02    7.637795e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   1.250000e+02    7.716535e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   1.250000e+02    7.795276e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   1.250000e+02    7.874016e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00    4.475851e-13
+   1.250000e+02    7.952756e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   1.250000e+02    8.031496e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   1.250000e+02    8.110236e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    8.188976e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   1.250000e+02    8.267717e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   1.250000e+02    8.346457e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   1.250000e+02    8.425197e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   1.250000e+02    8.503937e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00    4.475851e-13
+   1.250000e+02    8.582677e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   1.250000e+02    8.661417e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   1.250000e+02    8.740157e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    8.818898e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   1.250000e+02    8.897638e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   1.250000e+02    8.976378e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   1.250000e+02    9.055118e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   1.250000e+02    9.133858e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00    4.475851e-13
+   1.250000e+02    9.212598e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   1.250000e+02    9.291339e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   1.250000e+02    9.370079e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+02    9.448819e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   1.250000e+02    9.527559e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   1.250000e+02    9.606299e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   1.250000e+02    9.685039e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   1.250000e+02    9.763780e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00    4.475851e-13
+   1.250000e+02    9.842520e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   1.250000e+02    9.921260e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   1.250000e+02    1.000000e+00    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -9.023893e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   2.500000e+02    0.000000e+00    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    7.874016e-03    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    1.574803e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    2.362205e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    3.149606e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    3.937008e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    4.724409e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    5.511811e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    6.299213e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    7.086614e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    7.874016e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    8.661417e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    9.448819e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    1.023622e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    1.102362e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    1.181102e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    5.639933e-14    4.000000e-06    1.000000e+00    0.000000e+00   -6.497203e-14
+   2.500000e+02    1.259843e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   2.500000e+02    1.338583e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.639933e-14    4.000000e-06    1.000000e+00    0.000000e+00    6.497203e-14
+   2.500000e+02    1.417323e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    1.496063e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    1.574803e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    1.653543e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    1.732283e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    1.811024e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    1.889764e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    1.968504e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    2.047244e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    2.125984e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    2.204724e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    2.283465e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    2.362205e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    2.440945e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.127987e-13    4.000000e-06    1.000000e+00    0.000000e+00   -1.155058e-13
+   2.500000e+02    2.519685e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.127987e-13    4.000000e-06    1.000000e-00    0.000000e+00   -1.155058e-13
+   2.500000e+02    2.598425e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e-00    0.000000e+00    4.548042e-13
+   2.500000e+02    2.677165e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   2.500000e+02    2.755906e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.767920e-13    4.000000e-06    1.000000e+00    0.000000e+00   -6.785967e-13
+   2.500000e+02    2.834646e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   2.500000e+02    2.913386e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.767920e-13    4.000000e-06    1.000000e-00    0.000000e+00    6.785967e-13
+   2.500000e+02    2.992126e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   2.500000e+02    3.070866e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.767920e-13    4.000000e-06    1.000000e+00    0.000000e+00   -6.785967e-13
+   2.500000e+02    3.149606e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   2.500000e+02    3.228346e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.767920e-13    4.000000e-06    1.000000e-00    0.000000e+00    6.785967e-13
+   2.500000e+02    3.307087e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   2.500000e+02    3.385827e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.767920e-13    4.000000e-06    1.000000e+00    0.000000e+00   -6.785967e-13
+   2.500000e+02    3.464567e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   2.500000e+02    3.543307e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e-00    0.000000e+00    4.475851e-13
+   2.500000e+02    3.622047e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   2.500000e+02    3.700787e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00   -2.237925e-13
+   2.500000e+02    3.779528e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   2.500000e+02    3.858268e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00    2.237925e-13
+   2.500000e+02    3.937008e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   2.500000e+02    4.015748e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00   -2.237925e-13
+   2.500000e+02    4.094488e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   2.500000e+02    4.173228e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00    2.237925e-13
+   2.500000e+02    4.251969e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   2.500000e+02    4.330709e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00   -2.237925e-13
+   2.500000e+02    4.409449e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   2.500000e+02    4.488189e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00    2.237925e-13
+   2.500000e+02    4.566929e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   2.500000e+02    4.645669e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00   -2.237925e-13
+   2.500000e+02    4.724409e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   2.500000e+02    4.803150e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00    2.237925e-13
+   2.500000e+02    4.881890e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   2.500000e+02    4.960630e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    5.039370e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    5.118110e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    5.196850e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   2.500000e+02    5.275591e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   2.500000e+02    5.354331e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   2.500000e+02    5.433071e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   2.500000e+02    5.511811e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.953394e-13    4.000000e-06    1.000000e-00    0.000000e+00   -8.951702e-13
+   2.500000e+02    5.590551e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   2.500000e+02    5.669291e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e-00    0.000000e+00    4.475851e-13
+   2.500000e+02    5.748031e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   2.500000e+02    5.826772e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   2.500000e+02    5.905512e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   2.500000e+02    5.984252e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   2.500000e+02    6.062992e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   2.500000e+02    6.141732e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.953394e-13    4.000000e-06    1.000000e-00    0.000000e+00   -8.951702e-13
+   2.500000e+02    6.220472e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   2.500000e+02    6.299213e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e-00    0.000000e+00    4.475851e-13
+   2.500000e+02    6.377953e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   2.500000e+02    6.456693e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   2.500000e+02    6.535433e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   2.500000e+02    6.614173e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   2.500000e+02    6.692913e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   2.500000e+02    6.771654e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.953394e-13    4.000000e-06    1.000000e-00    0.000000e+00   -8.951702e-13
+   2.500000e+02    6.850394e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   2.500000e+02    6.929134e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e-00    0.000000e+00    4.475851e-13
+   2.500000e+02    7.007874e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   2.500000e+02    7.086614e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   2.500000e+02    7.165354e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   2.500000e+02    7.244094e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00    4.475851e-13
+   2.500000e+02    7.322835e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   2.500000e+02    7.401575e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   2.500000e+02    7.480315e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    7.559055e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   2.500000e+02    7.637795e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   2.500000e+02    7.716535e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   2.500000e+02    7.795276e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   2.500000e+02    7.874016e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00    4.475851e-13
+   2.500000e+02    7.952756e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   2.500000e+02    8.031496e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   2.500000e+02    8.110236e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    8.188976e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   2.500000e+02    8.267717e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   2.500000e+02    8.346457e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   2.500000e+02    8.425197e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   2.500000e+02    8.503937e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00    4.475851e-13
+   2.500000e+02    8.582677e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   2.500000e+02    8.661417e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   2.500000e+02    8.740157e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    8.818898e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   2.500000e+02    8.897638e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   2.500000e+02    8.976378e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   2.500000e+02    9.055118e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   2.500000e+02    9.133858e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00    4.475851e-13
+   2.500000e+02    9.212598e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   2.500000e+02    9.291339e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   2.500000e+02    9.370079e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+02    9.448819e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   2.500000e+02    9.527559e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   2.500000e+02    9.606299e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   2.500000e+02    9.685039e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   2.500000e+02    9.763780e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00    4.475851e-13
+   2.500000e+02    9.842520e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   2.500000e+02    9.921260e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   2.500000e+02    1.000000e+00    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -9.023893e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   3.750000e+02    0.000000e+00    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    7.874016e-03    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    1.574803e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    2.362205e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    3.149606e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    3.937008e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    4.724409e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    5.511811e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    6.299213e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    7.086614e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    7.874016e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    8.661417e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    9.448819e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    1.023622e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    1.102362e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    1.181102e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    5.639933e-14    4.000000e-06    1.000000e+00    0.000000e+00   -6.497203e-14
+   3.750000e+02    1.259843e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   3.750000e+02    1.338583e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.639933e-14    4.000000e-06    1.000000e+00    0.000000e+00    6.497203e-14
+   3.750000e+02    1.417323e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    1.496063e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    1.574803e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    1.653543e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    1.732283e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    1.811024e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    1.889764e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    1.968504e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    2.047244e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    2.125984e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    2.204724e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    2.283465e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    2.362205e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    2.440945e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.127987e-13    4.000000e-06    1.000000e+00    0.000000e+00   -1.155058e-13
+   3.750000e+02    2.519685e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.127987e-13    4.000000e-06    1.000000e-00    0.000000e+00   -1.155058e-13
+   3.750000e+02    2.598425e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e-00    0.000000e+00    4.548042e-13
+   3.750000e+02    2.677165e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   3.750000e+02    2.755906e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.767920e-13    4.000000e-06    1.000000e+00    0.000000e+00   -6.785967e-13
+   3.750000e+02    2.834646e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   3.750000e+02    2.913386e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.767920e-13    4.000000e-06    1.000000e-00    0.000000e+00    6.785967e-13
+   3.750000e+02    2.992126e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   3.750000e+02    3.070866e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.767920e-13    4.000000e-06    1.000000e+00    0.000000e+00   -6.785967e-13
+   3.750000e+02    3.149606e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   3.750000e+02    3.228346e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.767920e-13    4.000000e-06    1.000000e-00    0.000000e+00    6.785967e-13
+   3.750000e+02    3.307087e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   3.750000e+02    3.385827e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.767920e-13    4.000000e-06    1.000000e+00    0.000000e+00   -6.785967e-13
+   3.750000e+02    3.464567e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   3.750000e+02    3.543307e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e-00    0.000000e+00    4.475851e-13
+   3.750000e+02    3.622047e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   3.750000e+02    3.700787e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00   -2.237925e-13
+   3.750000e+02    3.779528e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   3.750000e+02    3.858268e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00    2.237925e-13
+   3.750000e+02    3.937008e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   3.750000e+02    4.015748e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00   -2.237925e-13
+   3.750000e+02    4.094488e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   3.750000e+02    4.173228e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00    2.237925e-13
+   3.750000e+02    4.251969e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   3.750000e+02    4.330709e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00   -2.237925e-13
+   3.750000e+02    4.409449e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   3.750000e+02    4.488189e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00    2.237925e-13
+   3.750000e+02    4.566929e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   3.750000e+02    4.645669e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00   -2.237925e-13
+   3.750000e+02    4.724409e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   3.750000e+02    4.803150e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00    2.237925e-13
+   3.750000e+02    4.881890e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   3.750000e+02    4.960630e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    5.039370e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    5.118110e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    5.196850e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   3.750000e+02    5.275591e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   3.750000e+02    5.354331e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   3.750000e+02    5.433071e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   3.750000e+02    5.511811e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.953394e-13    4.000000e-06    1.000000e-00    0.000000e+00   -8.951702e-13
+   3.750000e+02    5.590551e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   3.750000e+02    5.669291e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e-00    0.000000e+00    4.475851e-13
+   3.750000e+02    5.748031e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   3.750000e+02    5.826772e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   3.750000e+02    5.905512e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   3.750000e+02    5.984252e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   3.750000e+02    6.062992e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   3.750000e+02    6.141732e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.953394e-13    4.000000e-06    1.000000e-00    0.000000e+00   -8.951702e-13
+   3.750000e+02    6.220472e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   3.750000e+02    6.299213e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e-00    0.000000e+00    4.475851e-13
+   3.750000e+02    6.377953e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   3.750000e+02    6.456693e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   3.750000e+02    6.535433e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   3.750000e+02    6.614173e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   3.750000e+02    6.692913e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   3.750000e+02    6.771654e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.953394e-13    4.000000e-06    1.000000e-00    0.000000e+00   -8.951702e-13
+   3.750000e+02    6.850394e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   3.750000e+02    6.929134e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e-00    0.000000e+00    4.475851e-13
+   3.750000e+02    7.007874e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   3.750000e+02    7.086614e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   3.750000e+02    7.165354e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   3.750000e+02    7.244094e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00    4.475851e-13
+   3.750000e+02    7.322835e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   3.750000e+02    7.401575e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   3.750000e+02    7.480315e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    7.559055e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   3.750000e+02    7.637795e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   3.750000e+02    7.716535e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   3.750000e+02    7.795276e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   3.750000e+02    7.874016e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00    4.475851e-13
+   3.750000e+02    7.952756e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   3.750000e+02    8.031496e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   3.750000e+02    8.110236e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    8.188976e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   3.750000e+02    8.267717e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   3.750000e+02    8.346457e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   3.750000e+02    8.425197e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   3.750000e+02    8.503937e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00    4.475851e-13
+   3.750000e+02    8.582677e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   3.750000e+02    8.661417e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   3.750000e+02    8.740157e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    8.818898e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   3.750000e+02    8.897638e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   3.750000e+02    8.976378e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   3.750000e+02    9.055118e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   3.750000e+02    9.133858e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00    4.475851e-13
+   3.750000e+02    9.212598e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   3.750000e+02    9.291339e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   3.750000e+02    9.370079e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+02    9.448819e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   3.750000e+02    9.527559e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   3.750000e+02    9.606299e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   3.750000e+02    9.685039e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   3.750000e+02    9.763780e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00    4.475851e-13
+   3.750000e+02    9.842520e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   3.750000e+02    9.921260e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   3.750000e+02    1.000000e+00    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -9.023893e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   5.000000e+02    0.000000e+00    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    7.874016e-03    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    1.574803e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    2.362205e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    3.149606e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    3.937008e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    4.724409e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    5.511811e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    6.299213e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    7.086614e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    7.874016e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    8.661417e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    9.448819e-02    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    1.023622e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    1.102362e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    1.181102e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    5.639933e-14    4.000000e-06    1.000000e+00    0.000000e+00   -6.497203e-14
+   5.000000e+02    1.259843e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   5.000000e+02    1.338583e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.639933e-14    4.000000e-06    1.000000e+00    0.000000e+00    6.497203e-14
+   5.000000e+02    1.417323e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    1.496063e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    1.574803e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    1.653543e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    1.732283e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    1.811024e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    1.889764e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    1.968504e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    2.047244e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    2.125984e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    2.204724e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    2.283465e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    2.362205e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    2.440945e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.127987e-13    4.000000e-06    1.000000e+00    0.000000e+00   -1.155058e-13
+   5.000000e+02    2.519685e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.127987e-13    4.000000e-06    1.000000e-00    0.000000e+00   -1.155058e-13
+   5.000000e+02    2.598425e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e-00    0.000000e+00    4.548042e-13
+   5.000000e+02    2.677165e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   5.000000e+02    2.755906e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.767920e-13    4.000000e-06    1.000000e+00    0.000000e+00   -6.785967e-13
+   5.000000e+02    2.834646e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   5.000000e+02    2.913386e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.767920e-13    4.000000e-06    1.000000e-00    0.000000e+00    6.785967e-13
+   5.000000e+02    2.992126e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   5.000000e+02    3.070866e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.767920e-13    4.000000e-06    1.000000e+00    0.000000e+00   -6.785967e-13
+   5.000000e+02    3.149606e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   5.000000e+02    3.228346e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.767920e-13    4.000000e-06    1.000000e-00    0.000000e+00    6.785967e-13
+   5.000000e+02    3.307087e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   5.000000e+02    3.385827e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.767920e-13    4.000000e-06    1.000000e+00    0.000000e+00   -6.785967e-13
+   5.000000e+02    3.464567e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   5.000000e+02    3.543307e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e-00    0.000000e+00    4.475851e-13
+   5.000000e+02    3.622047e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   5.000000e+02    3.700787e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00   -2.237925e-13
+   5.000000e+02    3.779528e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   5.000000e+02    3.858268e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00    2.237925e-13
+   5.000000e+02    3.937008e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   5.000000e+02    4.015748e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00   -2.237925e-13
+   5.000000e+02    4.094488e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   5.000000e+02    4.173228e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00    2.237925e-13
+   5.000000e+02    4.251969e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   5.000000e+02    4.330709e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00   -2.237925e-13
+   5.000000e+02    4.409449e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   5.000000e+02    4.488189e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00    2.237925e-13
+   5.000000e+02    4.566929e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   5.000000e+02    4.645669e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00   -2.237925e-13
+   5.000000e+02    4.724409e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00   -2.237925e-13
+   5.000000e+02    4.803150e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e-00    0.000000e+00    2.237925e-13
+   5.000000e+02    4.881890e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.255973e-13    4.000000e-06    1.000000e+00    0.000000e+00    2.237925e-13
+   5.000000e+02    4.960630e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    5.039370e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    5.118110e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    5.196850e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   5.000000e+02    5.275591e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   5.000000e+02    5.354331e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   5.000000e+02    5.433071e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   5.000000e+02    5.511811e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.953394e-13    4.000000e-06    1.000000e-00    0.000000e+00   -8.951702e-13
+   5.000000e+02    5.590551e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   5.000000e+02    5.669291e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e-00    0.000000e+00    4.475851e-13
+   5.000000e+02    5.748031e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   5.000000e+02    5.826772e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   5.000000e+02    5.905512e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   5.000000e+02    5.984252e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   5.000000e+02    6.062992e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   5.000000e+02    6.141732e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.953394e-13    4.000000e-06    1.000000e-00    0.000000e+00   -8.951702e-13
+   5.000000e+02    6.220472e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   5.000000e+02    6.299213e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e-00    0.000000e+00    4.475851e-13
+   5.000000e+02    6.377953e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   5.000000e+02    6.456693e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   5.000000e+02    6.535433e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   5.000000e+02    6.614173e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   5.000000e+02    6.692913e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   5.000000e+02    6.771654e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.953394e-13    4.000000e-06    1.000000e-00    0.000000e+00   -8.951702e-13
+   5.000000e+02    6.850394e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   5.000000e+02    6.929134e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e-00    0.000000e+00    4.475851e-13
+   5.000000e+02    7.007874e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   5.000000e+02    7.086614e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   5.000000e+02    7.165354e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   5.000000e+02    7.244094e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00    4.475851e-13
+   5.000000e+02    7.322835e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   5.000000e+02    7.401575e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   5.000000e+02    7.480315e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    7.559055e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   5.000000e+02    7.637795e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   5.000000e+02    7.716535e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   5.000000e+02    7.795276e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   5.000000e+02    7.874016e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00    4.475851e-13
+   5.000000e+02    7.952756e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   5.000000e+02    8.031496e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   5.000000e+02    8.110236e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    8.188976e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   5.000000e+02    8.267717e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   5.000000e+02    8.346457e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   5.000000e+02    8.425197e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   5.000000e+02    8.503937e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00    4.475851e-13
+   5.000000e+02    8.582677e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   5.000000e+02    8.661417e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   5.000000e+02    8.740157e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    8.818898e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   5.000000e+02    8.897638e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   5.000000e+02    8.976378e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   5.000000e+02    9.055118e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   5.000000e+02    9.133858e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00    4.475851e-13
+   5.000000e+02    9.212598e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   5.000000e+02    9.291339e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   5.000000e+02    9.370079e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+02    9.448819e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   5.000000e+02    9.527559e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -8.953394e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   5.000000e+02    9.606299e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   5.000000e+02    9.685039e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.441447e-13    4.000000e-06    1.000000e-00    0.000000e+00   -4.475851e-13
+   5.000000e+02    9.763780e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00    4.475851e-13
+   5.000000e+02    9.842520e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    4.511946e-13    4.000000e-06    1.000000e+00    0.000000e+00   -4.475851e-13
+   5.000000e+02    9.921260e-01    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    4.000000e-06    1.000000e-00    0.000000e+00    0.000000e+00
+   5.000000e+02    1.000000e+00    5.000000e+02    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -9.023893e-13    4.000000e-06    1.000000e+00    0.000000e+00    8.951702e-13
+   0.000000e+00    5.000000e+02    0.000000e+00    4.000000e-06
+   3.906250e+00    5.000000e+02    0.000000e+00    4.000000e-06
+   7.812500e+00    5.000000e+02    0.000000e+00    4.000000e-06
+   1.171875e+01    5.000000e+02    0.000000e+00    4.000000e-06
+   1.562500e+01    5.000000e+02    0.000000e+00    4.000000e-06
+   1.953125e+01    5.000000e+02    0.000000e+00    4.000000e-06
+   2.343750e+01    5.000000e+02    0.000000e+00    4.000000e-06
+   2.734375e+01    5.000000e+02    0.000000e+00    4.000000e-06
+   3.125000e+01    5.000000e+02    0.000000e+00    4.000000e-06
+   3.515625e+01    5.000000e+02    0.000000e+00    4.000000e-06
+   3.906250e+01    5.000000e+02    0.000000e+00    4.000000e-06
+   4.296875e+01    5.000000e+02    0.000000e+00    4.000000e-06
+   4.687500e+01    5.000000e+02    0.000000e+00    4.000000e-06
+   5.078125e+01    5.000000e+02    0.000000e+00    4.000000e-06
+   5.468750e+01    5.000000e+02    0.000000e+00    4.000000e-06
+   5.859375e+01    5.000000e+02    0.000000e+00    4.000000e-06
+   6.250000e+01    5.000000e+02    0.000000e+00    4.000000e-06
+   6.640625e+01    5.000000e+02    0.000000e+00    4.000000e-06
+   7.031250e+01    5.000000e+02    0.000000e+00    4.000000e-06
+   7.421875e+01    5.000000e+02    0.000000e+00    4.000000e-06
+   7.812500e+01    5.000000e+02    0.000000e+00    4.000000e-06
+   8.203125e+01    5.000000e+02    0.000000e+00    4.000000e-06
+   8.593750e+01    5.000000e+02    0.000000e+00    4.000000e-06
+   8.984375e+01    5.000000e+02    0.000000e+00    4.000000e-06
+   9.375000e+01    5.000000e+02    0.000000e+00    4.000000e-06
+   9.765625e+01    5.000000e+02    0.000000e+00    4.000000e-06
+   1.015625e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   1.054688e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   1.093750e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   1.132812e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   1.171875e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   1.210938e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   1.250000e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   1.289062e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   1.328125e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   1.367188e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   1.406250e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   1.445312e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   1.484375e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   1.523438e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   1.562500e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   1.601562e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   1.640625e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   1.679688e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   1.718750e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   1.757812e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   1.796875e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   1.835938e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   1.875000e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   1.914062e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   1.953125e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   1.992188e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   2.031250e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   2.070312e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   2.109375e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   2.148438e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   2.187500e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   2.226562e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   2.265625e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   2.304688e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   2.343750e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   2.382812e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   2.421875e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   2.460938e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   2.500000e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   2.539062e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   2.578125e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   2.617188e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   2.656250e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   2.695312e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   2.734375e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   2.773438e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   2.812500e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   2.851562e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   2.890625e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   2.929688e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   2.968750e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.007812e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.046875e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.085938e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.125000e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.164062e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.203125e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.242188e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.281250e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.320312e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.359375e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.398438e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.437500e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.476562e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.515625e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.554688e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.593750e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.632812e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.671875e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.710938e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.750000e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.789062e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.828125e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.867188e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.906250e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.945312e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   3.984375e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   4.023438e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   4.062500e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   4.101562e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   4.140625e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   4.179688e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   4.218750e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   4.257812e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   4.296875e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   4.335938e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   4.375000e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   4.414062e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   4.453125e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   4.492188e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   4.531250e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   4.570312e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   4.609375e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   4.648438e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   4.687500e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   4.726562e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   4.765625e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   4.804688e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   4.843750e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   4.882812e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   4.921875e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   4.960938e+02    5.000000e+02    0.000000e+00    4.000000e-06
+   5.000000e+02    5.000000e+02    0.000000e+00    4.000000e-06
Index: /trunk/00FlowSolve_PL/PROJECTS/FORCING/grid_data.h
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/FORCING/grid_data.h	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/FORCING/grid_data.h	(revision 6)
@@ -0,0 +1,8 @@
+integer       :: nlevels,maxlevels
+parameter(nlevels=1,maxlevels=8)
+integer       :: grid_dimensions(0:maxlevels-1,3)
+
+! global grid dimensions   ! some restrictions, nz>=8 at all levels
+
+grid_file='../input/grid_coords'
+data grid_dimensions(0,1:3) /5,129,128/
Index: /trunk/00FlowSolve_PL/PROJECTS/FORCING/immersed_bdry_locations
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/FORCING/immersed_bdry_locations	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/FORCING/immersed_bdry_locations	(revision 6)
@@ -0,0 +1,1 @@
+   FILE INTENTIONALLY LEFT BLANK
Index: /trunk/00FlowSolve_PL/PROJECTS/FORCING/params.h
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/FORCING/params.h	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/FORCING/params.h	(revision 6)
@@ -0,0 +1,138 @@
+
+!*****************************************************************************
+immersed_bdry_flag='no'        ! yes or no
+closure_flag='DNS'             ! DNS or LES
+psolve_scheme='total_pressure' ! change_in_pressure,total_pressure
+
+restart_flag='no'              ! 'yes' to start from a save/restart file
+save_file=00000                ! ignored if 'no' above
+user_ics_flag='no'             ! yes invokes subroutine user_ics, sets up ics (ignored if 'yes' above)
+                               ! and Km_of_z/Kt_of_z
+ics_flag='homogeneous'         ! homogeneous,user
+
+user_rhs_flag='no'             ! yes invokes execution of user_rhs.f90
+
+user_bcs_flag='yes'             ! yes invokes execution of user_bcs.f90 --> ex: forcage oscillant en surface
+steady_BCS='yes'                ! yes : determines whether set_BCs is re-evaluated each time step
+                               !       our F_of_t is applied in apply_BCs.f90, so treat as 'steady' here
+!*****************************************************************************
+
+
+!*****************************************************************************
+ts_profil='linear'             ! 'interp'/'linear'/'constant'  if 'no' POMME data
+pomme_data_flag='no'           ! 'yes' lecture des champs POMME [T,S] 
+pomme_filename='../input/pomme_break_rho_alpha_T_ics.ascii'
+dTdz= 4*1.4133829e-3
+alpha_rho= -3.105172e-4 / dTdz ! ambiet_density_gradient=-3.105172e-4 [kg/m4] souhaité 
+print*,'alpha_rho=',alpha_rho
+                               ! rho = rho0 + alpha_rho * ( T - T0)
+	                       ! T0 = Tmin set in set_ambient_stratification.f90 
+!*****************************************************************************
+
+
+!************************     Stress parameters     ***************************
+Patch_Radius=50.e3             ! [m]
+Patch_Decay_Scale=50.e3        ! [m]
+delta=1./(Patch_Decay_Scale**2)
+tau_0=0.0                     ! [kg/(ms2)]
+!******************************************************************************
+
+
+!****************  DIMENSIONAL SCALES ****************************************
+pi=acos(-1.0)                          ! definition of pi
+g =9.81                                ! gravitational acceleration [m/s2]
+xlat= 47.5
+xOmega= 2*pi/(24*3600)
+f=2*xOmega*sin(xlat*pi/180)            ! Coriolis parameter [rad/s] Ekman layer scale: delta=sqrt(2nu/f)
+beta_dimensional=2*xOmega*cos(xlat*pi/180)/(6400.e3) ! beta effect [rad/(m.s)]
+L_scale = 4000.                        ! length scale to be used in nondimensionalization [m]
+U_scale = 0.10                         ! characteristic velocity scale [m/s]
+rho0 = 1027.                           ! characteristic fluid density [kg/m3]
+delta_rho=2.50                         ! characteristic density contrast [kg/m3]  (25)
+nu = 1.e-6                             ! eddy viscosity [m2/s]
+kappa1 = nu                            ! scalar 1 diffusivity [m2/s] stored in Kt   (Temp)
+kappa2 = nu                            ! scalar 2 diffusivity [m2/s] stored in Kt   (Salinity)
+kappa = nu                             !  not used
+Kh = 0.02                              ! horizontal diffusivity for [u,v,w,s1,s2] on (x,y) 
+s1_scale=1.                           ! characteristic s1 contrast     (Temp, deg C)
+s2_scale=1.                           ! characteristic s2 contrast     (Salinity, psu)
+HV_RATIO=1.                            ! horizontal/vertical viscosity ratio  (50)
+HV_METHOD = 2
+!*******************************************************************************
+
+
+!************     Derived scales, DO NOT ALTER. *******************************
+t_scale = L_scale/U_scale    
+DEL = (delta_rho)/L_scale  
+density_scale=DEL*L_scale
+pressure_scale=rho0*U_scale**2
+Nsquared = (g/rho0)*DEL     
+N0 = sqrt(Nsquared)    
+if(N0 /= 0 ) then; BV_per = 2.*pi/N0; else; BV_per=-1.e32; endif
+if(f  /= 0 ) then; inertial_per = 2.*pi/f; else; inertial_per=-1.e32; endif
+!*******************************************************************************
+
+
+!*******************  TIME STEP / OUTPUT ***************************************
+dt = (300)/t_scale        ! dimensionless time step
+t_start =  0./t_scale     ! dimensionless starting time
+nsteps =  2000            ! number of timesteps to integrate over
+i_full_fields = 5        ! # of steps between output of full 3d fields
+i_restart = 1000             ! # of steps between output of save/restart files
+i_filter = 1               ! # of steps between compact filtering calls
+i_stat = 90                ! # of steps between executions of energetics
+i_mean_pressure=1          ! # of steps between removal of mean pressure
+!*****************************************************************************
+
+
+!*************  ALLOCATION TABLEAUX BOUNDARY CONDITIONS  *********************
+  allocate ( boundary_type1(ny,locnz),boundary_type2(ny,locnz) )
+  allocate ( boundary_type3(nx,locnz),boundary_type4(nx,locnz) )
+  allocate ( boundary_type5(nx,ny),boundary_type6(nx,ny) )
+  allocate ( BC_pressure1(ny,locnz),BC_pressure2(ny,locnz) )
+  allocate ( BC_pressure3(nx,locnz),BC_pressure4(nx,locnz) )
+  allocate ( BC_pressure5(nx,ny),BC_pressure6(nx,ny) )
+  allocate ( BC_vel1(ny,locnz),BC_vel2(ny,locnz) )
+  allocate ( BC_vel3(nx,locnz),BC_vel4(nx,locnz) )
+  allocate ( BC_vel5(nx,ny),BC_vel6(nx,ny) )
+  allocate ( BC_scalar1(ny,locnz,num_scalars),BC_scalar2(ny,locnz,num_scalars) )
+  allocate ( BC_scalar3(nx,locnz,num_scalars),BC_scalar4(nx,locnz,num_scalars) )
+  allocate ( BC_scalar5(nx,ny,num_scalars),BC_scalar6(nx,ny,num_scalars) )
+!*****************************************************************************
+
+
+!***********************   BOUNDARY TYPE  ************************************
+! periodic in X
+boundary_type1(:,:)='periodic'                   ! solid, permeable or periodic
+BC_pressure1(:,:)  ='N/A'                        ! Neumann, periodic or none
+BC_vel1(:,:)       ='N/A'                        ! specified_stress/gradient or N/A
+BC_scalar1(:,:,:)  ='N/A'                        ! ""
+
+boundary_type2(:,:)='periodic'                   ! solid, permeable or periodic
+BC_pressure2(:,:)  ='N/A'                        ! Neumann, periodic or none
+BC_vel2(:,:)       ='N/A'                        ! specified_stress/gradient or N/A
+BC_scalar2(:,:,:)  ='N/A'                        ! ""
+
+! periodic in Y
+boundary_type3(:,:)='periodic'                   ! solid, permeable or periodic
+BC_pressure3(:,:)  ='n/a'                        ! Neumann, periodic or none
+BC_vel3(:,:)       ='n/a'                        ! specified_stress/gradient or N/A
+BC_scalar3(:,:,:)   ='n/a'                        ! ""
+
+boundary_type4(:,:)='periodic '                  ! solid, permeable or periodic
+BC_pressure4(:,:)  ='n/a'                        ! Neumann, periodic or none
+BC_vel4(:,:)       ='n/a'                        ! specified_stress/gradient or N/A
+BC_scalar4(:,:,:)  ='n/a'                        ! ""
+
+! solid, free-slip, adiabatic bottom boundary
+boundary_type5(:,:)='solid'                      ! solid, permeable or periodic
+BC_pressure5(:,:)  ='Neumann'                    ! Neumann, periodic or none
+BC_vel5(:,:)       ='specified_stress'           ! 
+BC_scalar5(:,:,:)  ='specified_gradient'         ! 
+
+! solid specified stress, adiabatic upper surface 
+boundary_type6(:,:)='solid'                      ! solid, permeable or periodic
+BC_pressure6(:,:)  ='Neumann'                    ! Neumann, periodic or none
+BC_vel6(:,:)       ='specified_stress'           ! specified dv/dz as function of x 
+BC_scalar6(:,:,:)  ='specified_gradient'         ! 
+!***************************************************************************
Index: /trunk/00FlowSolve_PL/PROJECTS/FORCING/problem_size.h
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/FORCING/problem_size.h	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/FORCING/problem_size.h	(revision 6)
@@ -0,0 +1,23 @@
+! header file containing problem size information
+        integer           ::  nx,ny,nz      ! basic problem dimensions
+        integer           ::  num_scalars   ! can be 1 or 2 currently
+        integer           ::  numprocs,locnz
+        integer           ::  bytesperword,numbufs,numbytes
+        integer           ::  AB_order      ! # of time levels required
+        real, allocatable :: mpi_buffer_space(:)
+
+        parameter(nx=1+4,ny=1+128,nz=128)
+        parameter(num_scalars=2)            ! 1-->Temp, 2-->Salinity
+        parameter(numprocs=01)              ! must match specification in machfile
+        parameter(locnz=nz/numprocs)   
+        parameter(AB_order=3)               ! {2,3,4}
+        parameter(bytesperword=8,numbufs=2)
+
+!     mpirun command must actually use numprocs processors
+!     i.e. mpirun -np 4  where 4 matches numprocs parameter
+!
+!     Choose nz such that locnz is an integer. The partitioning
+!     logic requires this condition load balancing is optimized.
+!
+!     nx/numprocs must be an integer in the data partitioning scheme
+
Index: /trunk/00FlowSolve_PL/PROJECTS/FORCING/set_diffusion.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/FORCING/set_diffusion.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/FORCING/set_diffusion.f90	(revision 6)
@@ -0,0 +1,66 @@
+subroutine set_diffusion
+
+! routine to set the diffusivity profiles, Km_of_z and Kt_of_z
+
+use grid_info
+use user_parameters       ! for Km_of_z and Kt_of_z
+use dependent_variables   
+use dimensional_scales    
+use counters_flags_etc
+use mpi_parameters
+implicit none
+include '../input/problem_size.h'
+include 'mpif.h'
+
+! local variables
+ real                :: zpos
+ real,dimension(nz)  :: ztot
+ real                :: max_nu,min_nu,depth,Patch_Decay_Scale,delta 
+ real,dimension(nz)  :: coeff_diff
+ character(len=3)    :: cid
+ character(len=80)   :: filename
+
+!!! real, dimension(locnz)  :: zz
+
+!!! Paramètres du profil de diffusion verticale
+ max_nu=1.e-4   ! valeur du coeff. de diffusion maximal
+ min_nu=1.e-2     ! valeur du coeff. de diffusion minimal 
+ depth=100.      ! profondeur pour un coeff. quasi constant
+ Patch_Decay_Scale=10.
+ delta=1./(Patch_Decay_Scale**2)
+
+ !! Collecte du vecteur profondeur
+ call MPI_GATHER(Grid(0)%z(1,:)*L_scale,locnz,MPI_REAL,ztot,locnz,MPI_REAL,0,comm,ierr)
+
+ print*,'diffusion, Lz',Lz
+
+ !! Calcul du coefficient de diffusion verticale
+ if ( myid == 0 ) then
+  print*,'max_nu=',max_nu,'  min_nu=',min_nu,'  depth=',depth,'  delta=',delta
+  do k=1,nz
+    zpos = ztot(k)     ! [m]
+    coeff_diff(k) = 1 - tanh( delta*(Lz-depth-zpos) )
+  enddo
+  coeff_diff = coeff_diff / maxval(abs(coeff_diff)) 
+  coeff_diff = min_nu  + (max_nu-min_nu) * coeff_diff 
+ endif
+ 
+ !! repartition des données
+ call MPI_SCATTER(coeff_diff,locnz,MPI_REAL,Km_of_z,locnz,MPI_REAL,0,comm,ierr)
+ 
+ !! Meme coeff de diffusion pour le moment et les scalaires
+ Kt_of_z = Km_of_z
+
+!!! Enregistrement de Km_of_z pour chaque processeur (pour vérification)
+ write(unit=cid,fmt=501) myid
+501 format(I3.3)
+ filename='../output/coeff_diffusion.data_'//cid
+ open(905,file=filename,status='unknown')
+ do k=1,locnz
+   write(905,*) Grid(0)%z(1,k)*L_scale,Km_of_z(k)
+ enddo
+ close(905)
+
+ return
+
+end subroutine set_diffusion
Index: /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/EOS.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/EOS.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/EOS.f90	(revision 6)
@@ -0,0 +1,174 @@
+subroutine equation_of_state
+
+! routine to use the equation of state from
+! MILLERO et.al. (1980) DEEP-SEA RES.
+! to calculate the dimensionless perturbation density pd(x,y,z) 
+! given the scalar values s1(x,y,z), s2(x,y,z), s1_bar(x,z) and s2_bar(x,z).
+! The "perturbation" density is defined relative to the ambient state
+! rho_bar(x,z) determined by s1_bar and s2_bar. As written, we interpret
+! the scalar s1 to be temparature and the scalar s2 to be salinity.
+! Salinity in g/kg or equivilently ppt (typical value ~ 35/1000)
+
+use mpi_parameters
+use grid_info
+use dependent_variables
+use dimensional_scales
+use counters_flags_etc
+implicit none
+include '../input/problem_size.h'
+
+double precision :: rho,xx,z_surf   ! rho is external function
+  real, dimension(locnz)            ::  zz,rh
+
+! local variables
+! S,T,P all DOUBLE precision arguments of function rho:  P in MPa, T in deg C, S in ppt
+double precision, allocatable         :: Temp(:,:),Salinity(:,:),P_Mpa(:,:),density(:,:)
+allocate( Temp(nx,locnz),Salinity(nx,locnz),P_Mpa(nx,locnz),density(nx,locnz) )
+
+!   pressure as function of depth, ignoring density perturbations
+!   formula assumes surface height z is equal to L_scale
+
+! z_surf=L_scale  ! surface height in [m]   ! top processor should broadcast value
+!!! P_Mpa(:,:) = g*rho0*( z_surf - Grid(0)%z(:,:)*L_scale )  ! [kg/ms^2=Pa]
+!!! P_Mpa(:,:) = P_Mpa/1.e6                                  ! Mpa
+ P_Mpa(:,:) = 0.                                  ! Mpa
+
+  Temp=0.
+  Salinity=0.
+ 
+do j=1,ny
+
+!declare interpretation of s1 and s2
+ Temp(:,:) = (s1_bar(:,:) + s1(:,j,:)) * s1_scale        ! dimensional quantity: total Temp.
+ Salinity(:,:) = (s2_bar(:,:) + s2(:,j,:)) * s2_scale    ! dimensional quantity: total Salinity
+ 
+  do k=1,locnz
+   do i=1,nx
+    density(i,k)=rho( Salinity(i,k),Temp(i,k),P_Mpa(i,k) ) ! total density [kg/m3]
+    density(i,k) = (density(i,k)-rho0)/density_scale ! dimensionless "total"(rel. to rho0) density in j plane
+   enddo
+  enddo
+
+!If not yet initialized, calculate rho_bar, otherwise its available via "dependent_variables" 
+ if( rho_bar(1,1) == -999.9 ) then     
+
+  if ( j == 1) print*,'**** not yet initialized, calculate rho_bar ****'
+
+  Temp(:,:) = s1_bar(:,:) * s1_scale                 ! dimensional background Temp
+  Salinity(:,:) = s2_bar(:,:) * s2_scale             ! dimensional background Salinity
+
+  do k=1,locnz
+   do i=1,nx
+    xx=rho( Salinity(i,k),Temp(i,k),P_Mpa(i,k) )
+    rho_bar(i,k)=(xx-rho0)/density_scale           ! dimensionless ambient profile, rel. to rho0
+   enddo
+  rh(k) = rho_bar(1,k)*density_scale + rho0
+  zz(k) = Grid(0)%z(1,k)*L_scale
+  enddo
+!!!      write(0,'(/A8,I2.2,2F20.5/)') (('DENSPROF',myid,zz(k),rh(k)),k=1,locnz)
+ endif
+       
+
+!store dimensionless values of perturbation densityin jth plane of pd
+  do k=1,locnz
+   do i=1,nx
+     pd(i,j,k) = density(i,k)  - rho_bar(i,k)
+   enddo
+  enddo
+
+enddo  ! end loop over j
+
+  if ( minval(Salinity) .lt. 0.) then
+      print*,myid,'   ATTENTION Salinity NEGATIF : minval(Salinity)=',minval(Salinity)
+      !STOP
+  endif
+
+
+
+
+deallocate( Temp,Salinity,density,P_Mpa )
+end subroutine equation_of_state
+
+
+!	"rho.f"
+
+!	Parameter	:	equation of state
+!	Source		:	MILLERO et.al. (1980) DEEP-SEA RES.
+!				Vol 27A, pp 255-264
+!	Units		:	Kg / m**3
+!!! xlv
+!!!    Input            :       s (concentration units), t (deg C), p (MPa)
+!!!    Range            :       s (0 to 0.040), t (-2 to 40), p (MPa)
+!      Input		:	s (psu), t (deg C), p (MPa)
+!      Range		:	s (0 to 40), t (-2 to 40), p (MPa)
+!	Ck value	:	K (0, 0, 100)      = 2.297721e4
+!				K (0.035, 0, 100)  = 2.499200e4
+!				K (0, 25, 100)     = 2.54051e4
+!				K (0.035, 25, 100) = 2.710895e4
+!	Coded		:	Ngoc Dang, July 1982
+	
+        double precision function rho (s, t, p)
+
+	double precision s, t, p
+	double precision a, b, c, d, e, k, t1, t2, t3, t4, ta, tb
+	double precision k0, k0w, alpha0, alpha, rho0, aw, bw
+
+      
+!!!      if (s .lt. 0.) stop 'problem s,t,p negatifs'
+!!!      if(s .lt. 0.) write(0,*) 's,t,p = ',s,t,p
+
+!  convert input units
+!!! xlv  s already in psu
+!!!        s = 1000.0d0 * s     
+	p = 10.0d0 * p
+
+!  compute alpha0 = alpha (s, t, 0)
+
+	t1 = 9.99841594d-1 + t * (6.793952d-5 + t * (-9.095290d-6 + t *   &
+           (1.001685d-7 + t * (-1.120083d-9 + t * 6.536332d-12))))
+	t2 = 8.25917d-4 + t * (-4.4490d-6 + t * (1.0485d-7 + t *      &
+           (-1.258d-9 + t * 3.315d-12)))
+	t3 = -6.33761d-6 + t * (2.8441d-7 + t * (-1.6871d-8 + t *     &
+      	     2.83258d-10))
+	t4 = 5.4705d-7 + t * (-1.97975d-8 + t * (1.6641d-9 - t *      &
+           3.1203d-11))
+	rho0 = t1 + t2 * s + t3 * s**(1.5) + t4 * s**2
+	alpha0 = 1.0d0 / rho0
+
+!  compute the pressure coefficient
+
+!	the first term
+	k0w = 1.965221d4 + t * (1.484206d2 + t * (-2.327105d0 + t *     &
+            (1.360477d-2 - t * 5.155288d-5)))
+	ta = 5.46746d1 + t * (-6.03459d-1 + t * (1.09987d-2 - t *       &
+           6.167d-5))
+	tb = 7.944d-2 + t * (1.6483d-2 - t * 5.3009d-4)
+	k0 = k0w + ta * s + tb * s**(1.5)
+
+!	the second term
+	aw = 3.239908d0 + t * (1.43713d-3 + t * (1.16092d-4 - t *       &
+          5.77905d-7))
+	c = 2.2838d-3 + t * (-1.0981d-5 - t * 1.6078d-6)
+	d = 1.9107d-4
+	a = aw + c * s + d * s**(1.5)
+
+!	the third term
+	bw = 8.50935d-5 + t * (-6.12293d-6 + t * 5.2787d-8)
+	e = -9.9348d-7 + t * (2.0816d-8 + t * 9.1697d-10)
+	b = bw + e * s
+
+	k = k0 + a * p + b * p**2
+
+!  compute density
+	alpha = alpha0 * (1.0d0 - p / k)
+	rho = 1.0d0 / alpha
+
+!  convert to kg / m**3
+	rho = 1000.0d0 * rho
+!!! xlv no convertion needed for s
+!!!     s = s / 1000.0d0
+	p = p / 10.0d0
+
+	return
+
+	end
Index: /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/apply_BCs.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/apply_BCs.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/apply_BCs.f90	(revision 6)
@@ -0,0 +1,438 @@
+subroutine apply_BCs
+#define DEBUG_LEVEL 1
+
+! apply BCs to intermediate velocities and pd
+ use grid_info
+ use dependent_variables
+ use intermediate_variables
+ use mpi_parameters
+ use boundary_information
+ use counters_flags_etc
+ use user_parameters   ! for surface_V_of_x
+ use dimensional_scales
+ implicit none
+ include '../input/problem_size.h'
+ include 'mpif.h'
+
+ real, dimension(:,:), allocatable            :: f0,f1,f2,f3,f4
+ real                                         :: h, xval,F_of_t,thresh
+
+#if DEBUG_LEVEL >= 1
+ if(myid==0) write(0,*) 'hello world from apply_BCs'
+#endif
+
+! FACE 1: xi=0
+#if DEBUG_LEVEL >= 2
+ write(0,*) 'apply_BCs, FACE 1',myid
+#endif
+
+ h=Grid(0)%dxi
+ allocate (f0(ny,locnz),f1(ny,locnz),f2(ny,locnz),f3(ny,locnz),f4(ny,locnz))
+ i=1
+ if( BC_vel1(1,1) == 'specified_value' ) then
+  U(i,1:ny,1:locnz)=BC_values1(1:ny,1:locnz,1)
+  v(i,1:ny,1:locnz)=BC_values1(1:ny,1:locnz,2)
+  W(i,1:ny,1:locnz)=BC_values1(1:ny,1:locnz,3)
+ elseif( BC_vel1(1,1) == 'specified_stress' ) then
+  if( boundary_type1(1,1) == 'solid' ) then
+   U(i,1:ny,1:locnz)=BC_values1(1:ny,1:locnz,1)
+  elseif( boundary_type1(1,1) == 'permeable' ) then
+   f1=U(2,:,:)
+   f2=U(3,:,:)
+   f3=U(4,:,:)
+   f4=U(5,:,:)
+   f0=(-24.*h*BC_values1(:,:,1) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+   U(i,1:ny,1:locnz)=f0
+  endif
+
+  f1=v(2,:,:)
+  f2=v(3,:,:)
+  f3=v(4,:,:)
+  f4=v(5,:,:)
+  f0=(-24.*h*BC_values1(:,:,2) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+  v(i,1:ny,1:locnz)=f0
+  f1=w(2,:,:)
+  f2=w(3,:,:)
+  f3=w(4,:,:)
+  f4=w(5,:,:)
+  f0=(-24.*h*BC_values1(:,:,3) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+  w(i,1:ny,1:locnz)=f0
+ endif
+
+! bcs for scalar 1 at face 1
+ if( BC_scalar1(1,1,1) == 'specified_value' ) then
+  s1(i,1:ny,1:locnz)=BC_values1(1:ny,1:locnz,4)
+ elseif( BC_scalar1(1,1,1) == 'specified_gradient' ) then
+  f1=s1(2,:,:)
+  f2=s1(3,:,:)
+  f3=s1(4,:,:)
+  f4=s1(5,:,:)
+  f0=(-24.*h*BC_values1(:,:,4) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+  s1(i,1:ny,1:locnz)=f0
+ endif
+
+! bcs for scalar 2 at face 1
+if(num_scalars>1) then
+ if( BC_scalar1(1,1,2) == 'specified_value' ) then
+  s2(i,1:ny,1:locnz)=BC_values1(1:ny,1:locnz,5)
+ elseif( BC_scalar1(1,1,2) == 'specified_gradient' ) then
+  f1=s2(2,:,:)
+  f2=s2(3,:,:)
+  f3=s2(4,:,:)
+  f4=s2(5,:,:)
+  f0=(-24.*h*BC_values1(:,:,5) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+  s2(i,1:ny,1:locnz)=f0
+ endif
+endif
+
+
+! FACE 2: xi=1
+#if DEBUG_LEVEL >= 2
+ write(0,*) 'apply_BCs, FACE 2',myid
+#endif
+
+ i=nx
+ if( BC_vel2(1,1) == 'specified_value' ) then
+  U(i,1:ny,1:locnz)=BC_values2(1:ny,1:locnz,1)
+  v(i,1:ny,1:locnz)=BC_values2(1:ny,1:locnz,2)
+  W(i,1:ny,1:locnz)=BC_values2(1:ny,1:locnz,3)
+ elseif( BC_vel2(1,1) == 'specified_stress' ) then
+  if( boundary_type2(1,1) == 'solid' ) then
+   U(i,1:ny,1:locnz)=BC_values2(1:ny,1:locnz,1)
+  elseif( boundary_type2(1,1) == 'permeable' ) then
+   f0=U(nx-4,:,:)
+   f1=U(nx-3,:,:)
+   f2=U(nx-2,:,:)
+   f3=U(nx-1,:,:)
+   f4=(24.*h*BC_values2(:,:,1) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+   U(i,1:ny,1:locnz)=f0
+  endif
+
+   f0=v(nx-4,:,:)
+   f1=v(nx-3,:,:)
+   f2=v(nx-2,:,:)
+   f3=v(nx-1,:,:)
+   f4=(24.*h*BC_values2(:,:,2) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+   v(i,1:ny,1:locnz)=f4
+   f0=w(nx-4,:,:)
+   f1=w(nx-3,:,:)
+   f2=w(nx-2,:,:)
+   f3=w(nx-1,:,:)
+   f4=(24.*h*BC_values2(:,:,3) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+   w(i,1:ny,1:locnz)=f4
+ endif
+
+ if( BC_scalar2(1,1,1) == 'specified_value' ) then
+  s1(i,1:ny,1:locnz)=BC_values2(1:ny,1:locnz,4)
+ elseif( BC_scalar2(1,1,1) == 'specified_gradient' ) then
+  f0=s1(nx-4,:,:)
+  f1=s1(nx-3,:,:)
+  f2=s1(nx-2,:,:)
+  f3=s1(nx-1,:,:)
+  f4=(24.*h*BC_values2(:,:,4) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+  s1(i,1:ny,1:locnz)=f4
+ endif
+
+if(num_scalars>1) then
+ if( BC_scalar2(1,1,2) == 'specified_value' ) then
+  s2(i,1:ny,1:locnz)=BC_values2(1:ny,1:locnz,5)
+ elseif( BC_scalar2(1,1,2) == 'specified_gradient' ) then
+  f0=s2(nx-4,:,:)
+  f1=s2(nx-3,:,:)
+  f2=s2(nx-2,:,:)
+  f3=s2(nx-1,:,:)
+  f4=(24.*h*BC_values2(:,:,5) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+  s2(i,1:ny,1:locnz)=f4
+ endif
+endif
+
+ deallocate (f0,f1,f2,f3,f4)
+
+
+! FACE 3: eta=0
+#if DEBUG_LEVEL >= 2
+ write(0,*) 'apply_BCs, FACE 3',myid
+#endif
+
+ h=Grid(0)%deta
+ allocate (f0(nx,locnz),f1(nx,locnz),f2(nx,locnz),f3(nx,locnz),f4(nx,locnz))
+ j=1
+ if( BC_vel3(1,1) == 'specified_value' ) then
+  U(1:nx,j,1:locnz)=BC_values3(1:nx,1:locnz,1)
+  v(1:nx,j,1:locnz)=BC_values3(1:nx,1:locnz,2)
+  W(1:nx,j,1:locnz)=BC_values3(1:nx,1:locnz,3)
+ elseif( BC_vel3(1,1) == 'specified_stress' ) then
+  if( boundary_type3(1,1) == 'solid' ) then
+   v(1:nx,j,1:locnz)=BC_values3(1:nx,1:locnz,2)
+  elseif( boundary_type3(1,1) == 'permeable' ) then
+   f1=v(1:nx,2,1:locnz)
+   f2=v(1:nx,3,1:locnz)
+   f3=v(1:nx,4,1:locnz)
+   f4=v(1:nx,5,1:locnz)
+   f0=(-24.*h*BC_values3(:,:,2) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+   v(1:nx,j,1:locnz)=f0
+  endif
+
+   f1=U(1:nx,2,1:locnz)
+   f2=U(1:nx,3,1:locnz)
+   f3=U(1:nx,4,1:locnz)
+   f4=U(1:nx,5,1:locnz)
+   f0=(-24.*h*BC_values3(:,:,1) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+   U(1:nx,j,1:locnz)=f0
+   f1=W(1:nx,2,1:locnz)
+   f2=W(1:nx,3,1:locnz)
+   f3=W(1:nx,4,1:locnz)
+   f4=W(1:nx,5,1:locnz)
+   f0=(-24.*h*BC_values3(:,:,3) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+   W(1:nx,j,1:locnz)=f0
+ endif
+
+ if( BC_scalar3(1,1,1) == 'specified_value' ) then
+  s1(1:nx,j,1:locnz)=BC_values3(1:nx,1:locnz,4)
+ elseif( BC_scalar3(1,1,1) == 'specified_gradient' ) then
+  f1=s1(1:nx,2,1:locnz)
+  f2=s1(1:nx,3,1:locnz)
+  f3=s1(1:nx,4,1:locnz)
+  f4=s1(1:nx,5,1:locnz)
+  f0=(-24.*h*BC_values3(:,:,4) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+  s1(1:nx,j,1:locnz)=f0
+ endif
+
+if(num_scalars>1) then
+ if( BC_scalar3(1,1,2) == 'specified_value' ) then
+  s2(1:nx,j,1:locnz)=BC_values3(1:nx,1:locnz,5)
+ elseif( BC_scalar3(1,1,2) == 'specified_gradient' ) then
+  f1=s2(1:nx,2,1:locnz)
+  f2=s2(1:nx,3,1:locnz)
+  f3=s2(1:nx,4,1:locnz)
+  f4=s2(1:nx,5,1:locnz)
+  f0=(-24.*h*BC_values3(:,:,5) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+  s2(1:nx,j,1:locnz)=f0
+ endif
+endif
+
+! FACE 4: eta=1
+#if DEBUG_LEVEL >= 2
+ write(0,*) 'apply_BCs, FACE 4',myid
+#endif
+
+ j=ny
+ if( BC_vel4(1,1) == 'specified_value' ) then
+  U(1:nx,j,1:locnz)=BC_values4(1:nx,1:locnz,1)
+  v(1:nx,j,1:locnz)=BC_values4(1:nx,1:locnz,2)
+  W(1:nx,j,1:locnz)=BC_values4(1:nx,1:locnz,3)
+ elseif( BC_vel4(1,1) == 'specified_stress' ) then
+  if( boundary_type4(1,1) == 'solid' ) then
+   v(1:nx,j,1:locnz)=BC_values4(1:nx,1:locnz,2)
+  elseif( boundary_type4(1,1) == 'permeable' ) then
+   f0=v(1:nx,ny-4,1:locnz)
+   f1=v(1:nx,ny-3,1:locnz)
+   f2=v(1:nx,ny-2,1:locnz)
+   f3=v(1:nx,ny-1,1:locnz)
+   f4=(24.*h*BC_values4(:,:,2) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+   v(1:nx,j,1:locnz)=f4
+  endif
+
+   f0=U(1:nx,ny-4,1:locnz)
+   f1=U(1:nx,ny-3,1:locnz)
+   f2=U(1:nx,ny-2,1:locnz)
+   f3=U(1:nx,ny-1,1:locnz)
+   f4=(24.*h*BC_values4(:,:,1) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+   U(1:nx,j,1:locnz)=f4
+   f0=W(1:nx,ny-4,1:locnz)
+   f1=W(1:nx,ny-3,1:locnz)
+   f2=W(1:nx,ny-2,1:locnz)
+   f3=W(1:nx,ny-1,1:locnz)
+   f4=(24.*h*BC_values4(:,:,3) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+   W(1:nx,j,1:locnz)=f4
+ endif
+
+ if( BC_scalar4(1,1,1) == 'specified_value' ) then
+  s1(1:nx,j,1:locnz)=BC_values4(1:nx,1:locnz,4)
+ elseif( BC_scalar4(1,1,1) == 'specified_gradient' ) then
+  f0=s1(1:nx,ny-4,1:locnz)
+  f1=s1(1:nx,ny-3,1:locnz)
+  f2=s1(1:nx,ny-2,1:locnz)
+  f3=s1(1:nx,ny-1,1:locnz)
+  f4=(24.*h*BC_values4(:,:,4) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+  s1(1:nx,j,1:locnz)=f4
+ endif
+
+if(num_scalars>1) then
+ if( BC_scalar4(1,1,2) == 'specified_value' ) then
+  s2(1:nx,j,1:locnz)=BC_values4(1:nx,1:locnz,5)
+ elseif( BC_scalar4(1,1,2) == 'specified_gradient' ) then
+  f0=s2(1:nx,ny-4,1:locnz)
+  f1=s2(1:nx,ny-3,1:locnz)
+  f2=s2(1:nx,ny-2,1:locnz)
+  f3=s2(1:nx,ny-1,1:locnz)
+  f4=(24.*h*BC_values4(:,:,5) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+  s2(1:nx,j,1:locnz)=f4
+ endif
+endif
+
+ deallocate (f0,f1,f2,f3,f4)
+
+
+! FACE 5: zeta=0
+#if DEBUG_LEVEL >= 2
+ write(0,*) 'apply_BCs, FACE 5',myid
+#endif
+
+ if( myid == 0 ) then
+  h=Grid(0)%dzeta
+  allocate (f0(nx,ny),f1(nx,ny),f2(nx,ny),f3(nx,ny),f4(nx,ny))
+  k=1
+  if( BC_vel5(1,1) == 'specified_value' ) then
+   U(1:nx,1:ny,k)=BC_values5(1:nx,1:ny,1)
+   v(1:nx,1:ny,k)=BC_values5(1:nx,1:ny,2)
+   W(1:nx,1:ny,k)=BC_values5(1:nx,1:ny,3)
+  elseif( BC_vel5(1,1) == 'specified_stress' ) then
+   if( boundary_type5(1,1) == 'solid' ) then
+    W(1:nx,1:ny,k)=BC_values5(1:nx,1:ny,3)
+   elseif( boundary_type5(1,1) == 'permeable' ) then
+!!!    f1=W(:,:,2)
+!!!    f2=W(:,:,3)
+!!!    f3=W(:,:,4)
+!!!    f4=W(:,:,5)
+!!!    f0=(-24.*h*BC_values5(:,:,3) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+!!!    W(:,:,k)=f0
+      W(:,:,k)=-9999.
+   endif
+
+    f1=U(:,:,2)
+    f2=U(:,:,3)
+    f0 = (-2.*h*BC_values5(:,:,1) + 4.*f1 - f2) / 3.
+!!!    f3=U(:,:,4)
+!!!    f4=U(:,:,5)
+!!!    f0=(-24.*h*BC_values5(:,:,1) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+    U(:,:,k)=f0
+
+    f1=v(:,:,2)
+    f2=v(:,:,3)
+    f0 = (-2.*h*BC_values5(:,:,2) + 4.*f1 - f2) / 3.
+!!!    f3=v(:,:,4)
+!!!    f4=v(:,:,5)
+!!!    f0=(-24.*h*BC_values5(:,:,2) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+    v(:,:,k)=f0
+  endif
+
+  if( BC_scalar5(1,1,1) == 'specified_value' ) then
+   s1(1:nx,1:ny,k)=BC_values5(1:nx,1:ny,4)
+  elseif( BC_scalar5(1,1,1) == 'specified_gradient' ) then
+   f1=s1(:,:,2)
+   f2=s1(:,:,3)
+   f0 = (-2.*h*BC_values5(:,:,4) + 4.*f1 - f2) / 3.
+!!!   f3=s1(:,:,4)
+!!!   f4=s1(:,:,5)
+!!!   f0=(-24.*h*BC_values5(:,:,4) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+   s1(:,:,k)=f0
+  endif
+
+ if(num_scalars>1) then
+  if( BC_scalar5(1,1,2) == 'specified_value' ) then
+   s2(1:nx,1:ny,k)=BC_values5(1:nx,1:ny,5)
+  elseif( BC_scalar5(1,1,2) == 'specified_gradient' ) then
+   f1=s2(:,:,2)
+   f2=s2(:,:,3)
+   f0 = (-2.*h*BC_values5(:,:,5) + 4.*f1 - f2) / 3.
+!!!   f3=s2(:,:,4)
+!!!   f4=s2(:,:,5)
+!!!   f0=(-24.*h*BC_values5(:,:,5) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+   s2(:,:,k)=f0
+  endif
+ endif
+
+  deallocate (f0,f1,f2,f3,f4)
+ endif ! myid==0 block
+
+! FACE 6: zeta=1
+
+#if DEBUG_LEVEL >= 2
+ write(0,*) 'apply_BCs, FACE 6',myid
+#endif
+
+ if( myid == numprocs-1 ) then
+
+  h=Grid(0)%dzeta
+  allocate (f0(nx,ny),f1(nx,ny),f2(nx,ny),f3(nx,ny),f4(nx,ny))
+  k=locnz
+
+!**** ENFORCE STRESS FREE CONDITION OVER ENTIRE UPPER SURFACE ****************
+  if( BC_vel6(1,1) == 'specified_value' ) then
+   U(1:nx,1:ny,k)=BC_values6(1:nx,1:ny,1)
+   v(1:nx,1:ny,k)=BC_values6(1:nx,1:ny,2)
+   W(1:nx,1:ny,k)=BC_values6(1:nx,1:ny,3)
+  elseif( BC_vel6(1,1) == 'specified_stress' ) then
+   if( boundary_type6(1,1) == 'solid' ) then
+    W(1:nx,1:ny,k)=BC_values6(1:nx,1:ny,3)
+   elseif( boundary_type6(1,1) == 'permeable' ) then
+!!!    f0=W(:,:,k-4)
+!!!    f1=W(:,:,k-3)
+!!!    f2=W(:,:,k-2)
+!!!    f3=W(:,:,k-1)
+!!!    f4=(24.*h*BC_values6(:,:,3) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+!!!    W(:,:,k)=f4
+    W(:,:,k) = -9999.
+   endif
+
+!!!    f0=U(:,:,k-4)
+!!!    f1=U(:,:,k-3)
+!!!    f2=U(:,:,k-2)
+!!!    f3=U(:,:,k-1)
+!!!    f4=(24.*h*BC_values6(:,:,1) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+!!!    U(:,:,k)=f4
+    f0=U(:,:,k-2)
+    f1=U(:,:,k-1)
+    f2 = (2.*h*BC_values6(:,:,1) + 4.*f1 - f0) / 3.
+    U(:,:,k)=f2
+
+!!!    f0=v(:,:,k-4)
+!!!    f1=v(:,:,k-3)
+!!!    f2=v(:,:,k-2)
+!!!    f3=v(:,:,k-1)
+!!!    f4=(24.*h*BC_values6(:,:,2) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+!!!    v(:,:,k)=f4      ! set dV/dz everywhere on top surface
+    f0=v(:,:,k-2)
+    f1=v(:,:,k-1)
+    f2 = (2.*h*BC_values6(:,:,2) + 4.*f1 - f0) / 3.
+    v(:,:,k)=f2
+   endif
+!**********************************************************************
+
+  if( BC_scalar6(1,1,1) == 'specified_value' ) then
+   s1(1:nx,1:ny,k)=BC_values6(1:nx,1:ny,4)
+  elseif( BC_scalar6(1,1,1) == 'specified_gradient' ) then
+!!!   f0=s1(:,:,k-4)
+!!!   f1=s1(:,:,k-3)
+!!!   f2=s1(:,:,k-2)
+!!!   f3=s1(:,:,k-1)
+!!!   f4=(24.*h*BC_values6(:,:,4) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+!!!   s1(:,:,k)=f4
+   f0=s1(:,:,k-2)
+   f1=s1(:,:,k-1)
+   f2 = (2.*h*BC_values6(:,:,4) + 4.*f1 - f0) / 3.
+   s1(:,:,k)=f2
+  endif
+
+ if(num_scalars>1) then
+  if( BC_scalar6(1,1,2) == 'specified_value' ) then
+   s2(1:nx,1:ny,k)=BC_values6(1:nx,1:ny,5)
+  elseif( BC_scalar6(1,1,2) == 'specified_gradient' ) then
+!!!   f0=s2(:,:,k-4)
+!!!   f1=s2(:,:,k-3)
+!!!   f2=s2(:,:,k-2)
+!!!   f3=s2(:,:,k-1)
+!!!   f4=(24.*h*BC_values6(:,:,5) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+!!!   s2(:,:,k)=f4
+   f0=s2(:,:,k-2)
+   f1=s2(:,:,k-1)
+   f2 = (2.*h*BC_values6(:,:,5) + 4.*f1 - f0) / 3.
+   s2(:,:,k)=f2
+  endif
+ endif
+
+  deallocate (f0,f1,f2,f3,f4)
+ endif
+
+end subroutine apply_BCs
Index: /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/cfd.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/cfd.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/cfd.f90	(revision 6)
@@ -0,0 +1,114 @@
+program cfd                                 ! XZ version
+
+#define DEBUG_LEVEL 1
+! Module definitions in cfd_modules.F90
+use  grid_info
+use  mpi_parameters
+use  dimensional_scales
+use  boundary_information
+use  pde_parameters
+use  dependent_variables
+use  intermediate_variables
+use  counters_flags_etc
+use  immersed_boundary
+use  user_parameters
+use  mpi_times
+
+implicit none
+
+include 'mpif.h'
+include '../input/problem_size.h'
+
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ONLY EXECUTABLE STATEMENTS BELOW HERE  %%%%%%%%%%%%%%%%%%%
+
+ include 'start_MPI.h'
+
+ call MPI_Time(0)
+
+!!! LAPACK_FLAG='double'
+ LAPACK_FLAG='single'
+ call initialize_grids(0)              ! initialize spatial grids at all discretization levels
+ call initialize_cfd                   ! basic setup, read input parameters etc.
+ call initialize_user                  ! e.g. user can set nontrivial initial conditions
+
+
+ print*,'loop...'
+ 
+ do istep=istart,iend                ! MAIN TIME STEPPING LOOP
+  t = t_start + (istep-istart)*dt    ! dimensionless time
+
+  call save                          ! write restart files {i_restart}
+!  print*,'...  call save ...'
+!  call maxim
+
+  call write3d_netcdf                ! output 3d fields {i_full_fields}
+!  if ( prob_eos == 'yes' ) then  
+!   print*,'...  call write3d_netcdf ...'
+!   call maxim
+!   print*,' ARRET IMPOSE ! '
+!   call mpi_barrier(comm,ierr)
+!   call MPI_Time(1)
+!   call mpi_finalize(ierr)
+!   STOP
+!  endif
+
+  call rhs                           ! compute rhs for U,v,W & pd neglecting
+  !print*,'...  call rhs ...'
+  !call maxim
+    ! only pressure gradients
+
+  call time_step                     ! time step w/o pressure gradient => u_star
+  !print*,'...  call time_step ...'
+  !call maxim
+  
+  call divergence                    ! compute "divergence" of u_star -> div_u
+  !print*,'...  call divergence ...'
+  !call maxim
+  
+  call set_rhs_for_pressure          ! set the rhs for pressure equation L[p]=b
+  !print*,'...  call set_rhs_for_pressure ...'
+  !call maxim
+
+  call psolve_xy_periodic            ! solve pressure using xyfft & direct solve in z
+  !print*,'...  call psolve_xy_periodic ...'
+  !call maxim
+
+   
+  call gradient                      ! compute pressure "gradient"
+  !print*,'...  call gradient ...'
+  !call maxim
+  
+  call project                       ! project u_star onto div-free subspace =>[U,v,W]
+  !print*,'...  call project ...'
+  !call maxim
+  
+  call filter                        ! compact spatial filtering(i_filter,alpha)
+  !print*,'...  call filter ...'
+  !call maxim
+  
+  call set_BC_values                 ! compute u boundary values for faces 1:6
+  !print*,'...  call set_BC_values ...'
+  !call maxim
+
+  call apply_BCs                     ! impose exact satisfaction of BCs
+  !print*,'...  call apply_BCs ...'
+  !call maxim
+
+  call user_BCs                      ! impose user-defined
+  !print*,'...  call user_BCs ...'
+  !call maxim
+
+  include 'toggle.h'                 ! toggle counters, indices etc
+  !print*,'...  call toggle.h'
+
+  call maxim
+
+enddo
+
+ call mpi_barrier(comm,ierr)
+
+ call MPI_Time(1)
+
+ call mpi_finalize(ierr)
+
+end program cfd
Index: /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/cfd_modules.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/cfd_modules.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/cfd_modules.f90	(revision 6)
@@ -0,0 +1,197 @@
+!!!!    modules used in f90, pim, MG version of cfdXZ code   !!!!
+
+!*****************************************************************
+module grid_info
+
+! define a grid_object to hold information about each spatial grid
+type grid_object
+ integer                                ::  n1,n2,n3,locn3		! dimension sizes, locn3=n3/numprocs
+ integer                                ::  level,n_mg_levels   ! 0 = finest
+ integer     		                ::  n1_it,n2_it,n3_it 	! dimension sizes for U,V in matvec
+ real			                ::  dxi, deta, dzeta	! grid spacings
+ real, dimension(:,:), allocatable	::  x, z 		 	! spatial variables
+ real, dimension(:), allocatable	::  y	 		 	! 
+ real, dimension(:,:), allocatable	::  x_xi, x_zeta, z_xi, z_zeta	! grid metrics
+ real, dimension(:), allocatable	::  y_eta			! grid metric
+ real, dimension(:,:,:,:), allocatable	::  J_matrix	! Jacobian matrix
+ real, dimension(:,:), allocatable	::  det_J			! det of Jacobian matrix
+ real, dimension(:,:), allocatable	::  Cxx,Czz			! pressure coefficients in XZ/13
+ real, dimension(:), allocatable	::  Cyy				! pressure coefficients in Y/2
+
+ real, dimension(:,:,:), allocatable	        ::  v, f, scratch		! solution, rhs  and work vectors
+ double precision, dimension(:,:), allocatable	::  ddx, ddy, ddz		! differentiation matrices, banded
+ integer, dimension(:), allocatable             ::  piv_dx, piv_dy, piv_dz	! corresponding pivot arrays
+ double precision, dimension(:,:), allocatable	::  filt_x, filt_y, filt_z	! filtering matrices, banded
+ integer, dimension(:), allocatable             ::  piv_fx, piv_fy, piv_fz	! corresponding pivot arrays
+ integer, dimension(13)	                        ::  ipar			! PIM integer parameters
+ real, dimension(6)	                        ::  spar                        ! PIM real parameters
+
+end type grid_object
+
+! declare an allocatable array of such objects
+type(grid_object), dimension(:),allocatable	:: Grid              ! each Grid(j) contains the above
+double precision  	                        :: alpha_1, beta_1      ! for compact scheme matrix
+double precision                                :: a1, b1, c1           ! for compact scheme (rhs)
+real   		                                :: alpha                ! filtering parameter
+real, dimension(:), allocatable		        :: wrk		        ! PIM work vector
+real, dimension(:,:,:), allocatable             :: GM_uu, GM_uw, GM_ww  ! metrics for transformed eqns of motion
+real					        :: t, dt
+character(len=80)				:: grid_file,restriction_method
+character(len=7)				:: discrete_scheme             ! compact or FD
+character(len=5)				:: relax_precon                ! none or diagl
+integer                         :: current_grid_level          ! needed by matvec
+real, allocatable,dimension(:)  :: global_Czz,global_Cz,global_det_J
+
+real :: Lx,Ly,Lz
+
+end module grid_info
+!*****************************************************************
+
+!*****************************************************************
+module integration_weights
+
+! weight coefficients in each direction
+  real, allocatable             :: W1(:), W2(:), W3(:)
+
+end module integration_weights
+!*****************************************************************
+
+!*****************************************************************
+module dependent_variables
+! Container for dependent variable arrays
+  real, allocatable             :: U(:,:,:),v(:,:,:),W(:,:,:),s1(:,:,:),s2(:,:,:)
+  real, allocatable             :: pressure(:,:,:,:)
+  real, allocatable             :: s1_bar(:,:), s1_bar_xi(:,:), s1_bar_zeta(:,:)
+  real, allocatable             :: s2_bar(:,:), s2_bar_xi(:,:), s2_bar_zeta(:,:)
+  real, allocatable             :: rho_bar(:,:),pd(:,:,:)
+end module dependent_variables
+!*****************************************************************
+
+!*****************************************************************
+module intermediate_variables
+! Container for intermediate variable arrays
+  real, allocatable             :: div_u(:,:,:,:),L_of_p(:,:,:)
+  real, allocatable             :: b(:,:,:)
+  real, allocatable             :: grad_x(:,:,:)
+  real, allocatable             :: grad_y(:,:,:)
+  real, allocatable             :: grad_z(:,:,:)
+  real, allocatable             :: u_star(:,:,:)
+  real, allocatable             :: v_star(:,:,:)
+  real, allocatable             :: w_star(:,:,:)
+  real, allocatable             :: u_star_old(:,:,:)
+  real, allocatable             :: v_star_old(:,:,:)
+  real, allocatable             :: w_star_old(:,:,:)
+end module intermediate_variables
+!*****************************************************************
+
+!*****************************************************************
+module rhs_variables
+! Container for rhs arrays
+  real, allocatable             :: rhs1(:,:,:,:),rhs2(:,:,:,:)
+  real, allocatable             :: rhs3(:,:,:,:),rhs4(:,:,:,:)
+  real, allocatable             :: rhs5(:,:,:,:)
+end module rhs_variables
+!*****************************************************************
+
+
+!*****************************************************************
+module pde_parameters
+! Container for pde parameter data
+  real                           :: Ri,Rot,Re,Pr1,Pr2
+  real, allocatable              :: K_m(:,:,:)
+end module pde_parameters
+!*****************************************************************
+
+
+!*****************************************************************
+module dimensional_scales
+! Container for scaling data
+  real                           :: delta_rho,rho0
+  real                           :: g,nu,kappa1,kappa2,f
+  real                           :: kappa,Kh
+  real                           :: t_scale,L_scale,U_scale
+  real                           :: s1_scale,s2_scale
+  real                           :: density_scale,pressure_scale
+  real                           :: energy_scale,dissipation_scale
+  real                           :: DEL,Nsquared,N0
+  real                           :: pi
+  real                           :: xlat,xOmega,beta_dimensional,beta_tilde
+  real, allocatable              :: beta_window(:) 
+end module dimensional_scales
+!*****************************************************************
+
+
+!*****************************************************************
+module mpi_parameters
+! Container for MPI data
+  integer                         :: myid,nprocs,comm
+  integer                         :: init_derived_type,subslice
+  integer                         :: oneslice,twoslice
+end module mpi_parameters
+!*****************************************************************
+
+
+!*****************************************************************
+module boundary_information
+! Container for boundary condition arrays
+  integer                     :: BC_flag(5,3)  ! 5 variables, 3 directions
+  character(len=80)           :: steady_BCS, immersed_bdry_flag
+
+! boundary type
+  character(len=80), allocatable     :: boundary_type1(:,:),boundary_type2(:,:)
+  character(len=80), allocatable     :: boundary_type3(:,:),boundary_type4(:,:)
+  character(len=80), allocatable     :: boundary_type5(:,:),boundary_type6(:,:)
+  character(len=80), allocatable     :: BC_pressure1(:,:),BC_pressure2(:,:)
+  character(len=80), allocatable     :: BC_pressure3(:,:),BC_pressure4(:,:)
+  character(len=80), allocatable     :: BC_pressure5(:,:),BC_pressure6(:,:)
+  character(len=80), allocatable     :: BC_vel1(:,:),BC_vel2(:,:)
+  character(len=80), allocatable     :: BC_vel3(:,:),BC_vel4(:,:)
+  character(len=80), allocatable     :: BC_vel5(:,:),BC_vel6(:,:)
+  character(len=80), allocatable     :: BC_scalar1(:,:,:),BC_scalar2(:,:,:)
+  character(len=80), allocatable     :: BC_scalar3(:,:,:),BC_scalar4(:,:,:)
+  character(len=80), allocatable     :: BC_scalar5(:,:,:),BC_scalar6(:,:,:)
+
+! boundary values
+  real, allocatable                  :: BC_values1(:,:,:),BC_values2(:,:,:)
+  real, allocatable                  :: BC_values3(:,:,:),BC_values4(:,:,:)
+  real, allocatable                  :: BC_values5(:,:,:),BC_values6(:,:,:)
+  real, allocatable                  :: phiY(:,:,:,:,:)  
+  real, allocatable                  :: inflow(:,:,:)
+
+end module boundary_information
+!*****************************************************************
+
+!*****************************************************************
+module counters_flags_etc
+! Container for misc scalar data
+  integer                         :: istep,istart,iend,nsteps,write3D_counter
+  integer                         :: i_filter,i_stat,i_full_fields
+  integer                         :: i_mean_pressure,i_restart,save_file
+  integer                         :: new,old,MM0,MM1,MM2,MM3
+  integer                         :: i,j,k,icount,itmp
+  integer                         :: ierr,local_rows,local_cols
+  integer                         :: global_rows,global_cols
+  real                            :: tol,div_rms,div_tol
+  integer                         :: maxits,n_mg_cycles,do_pressure
+  integer                         :: V_sweeps_pre, V_sweeps_post
+  integer, allocatable            :: my_node_indices(:)
+  character(len=80)               :: step_flag,psolve_scheme,closure_flag
+  character(len=80)               :: relaxation_method
+  character(len=80)               :: ics_flag,rho_bar_flag
+  character(len=80)               :: restart_flag,user_subs_flag
+  character(len=80)               :: user_rhs_flag,user_bcs_flag
+  real                            :: inertial_per,BV_per,t_start
+  real                            :: kx_val,ky_val
+  character(len=80)               :: user_ics_flag
+end module counters_flags_etc
+!*****************************************************************
+module multigrid_parameters
+! Container for various constants related to MG preconditioning
+  character(len=80)                  :: mg_preconditioning
+  integer                            :: num_mg_levels
+  integer                            :: dof,s_width
+  integer                            :: nx_coarse,ny_coarse,nz_coarse
+  integer                            :: refine_x,refine_y,refine_z
+  integer,dimension(:),allocatable   :: n1,n2,n3
+end module multigrid_parameters
+
Index: /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/columnslab.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/columnslab.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/columnslab.f90	(revision 6)
@@ -0,0 +1,189 @@
+module columnslab
+
+implicit none
+
+contains
+
+ subroutine slabs_to_columns(slab,col)
+! In the cfd code, data is partitioned across processors in equal
+! sub-blocks in dimension 3, i.e. in horizontal slabs. It is sometimes
+! convenient to exchange data so that it is partitioned along dimension
+! 1, i.e. in vertical columns. This routine redistributes the data
+! array "slab" into column orientation "col".
+
+  use mpi_parameters
+  use boundary_information
+  include '../input/problem_size.h'
+  include 'mpif.h'
+
+  integer              :: tag,ierr,status_array(MPI_STATUS_SIZE,4*numprocs+1)
+  integer              :: dest,source,istart,iend,kstart,kend,reqs(4*numprocs)
+  integer              :: sizeofreal,nreqs
+  integer              :: iproc,numwords
+  integer                               :: m1,m2,m3
+  real,dimension(:,:,:),intent(in)      :: slab 
+  real,dimension(:,:,:),intent(out)     :: col   
+
+  if( boundary_type2(1,1) .ne. 'periodic' .or.  boundary_type4(1,1) .ne. 'periodic' ) then
+   write(0,*) 'myid,boundary_type2(1,1) = ',myid,boundary_type2(1,1)
+   write(0,*) '  USING PERIODIC ENDPOINT LOGIC IN SLABS_TO_COLUMNS W/O PERIODIC BCS !!!'
+   stop
+  endif
+
+ m1=size(col,1)
+ m2=size(slab,2)
+ m3=size(slab,3)
+
+!!*******************************************************************************
+!!*************   DO THE DATA EXCHANGES  ****************************************
+!!*******************************************************************************
+!! Ship portions of my local data "slab" slab needed by other nodes 
+!! and recieve remote data required to construct my local data "column" col .
+
+ !! All processors initiatze nonblocking receives, establishing buffers for the
+ !! sends
+ nreqs=0
+ dest=myid
+ numwords=m1*m2*m3
+ tag=1
+
+  do iproc=0,numprocs-1
+    source=iproc
+    kstart=(iproc*m3)+1
+    if ( dest .ne. source ) then  !! bypass mpi when source=dest=myid 
+            nreqs=nreqs+1
+            call MPI_IRECV(col(1,1,kstart),numwords,MPI_REAL,source,tag,comm,reqs(nreqs),ierr)
+            if ( ierr .ne. 0 ) then
+                 stop 'MPI IRECV ERROR IN SLABS TO COLS'   
+            endif 
+    endif        
+  enddo
+
+  call MPI_BARRIER(comm,ierr)    !! make sure all processors receives are posted
+                                 !! to avoid buffering
+    
+ !! All processors now initiate nonblocking ready sends, writing to the
+ !! pre-established dest locations 
+ source=myid
+ numwords=1 
+ tag = 1
+
+ do iproc=0,numprocs-1
+   dest=iproc
+   istart=(iproc*m1)+1
+   if ( dest .ne. source ) then  !! bypass mpi when source=dest=myid 
+       nreqs=nreqs+1    
+       call MPI_IRSEND(slab(istart,1,1),numwords,subslice,dest,tag,comm,reqs(nreqs),ierr)
+       if ( ierr .ne. 0 ) then
+               stop 'MPI IRSEND ERROR IN SLABS TO COLS'
+       endif
+   endif
+ enddo
+
+ !! case where source=dest=myid
+ kstart=myid*m3+1
+ kend=kstart+m3-1
+ istart=myid*m1+1
+ iend=istart+m1-1
+ col(:,:,kstart:kend)=slab(istart:iend,:,:)
+
+ call MPI_WAITALL(nreqs,reqs(1),status_array,ierr)
+
+end subroutine slabs_to_columns
+
+
+subroutine columns_to_slabs(col,slab)
+! In the cfd code, data is partitioned across processors in equal
+! sub-blocks in dimension 3, i.e. in horizontal slabs. It is sometimes
+! convenient to exchange data so that it is partitioned along dimension
+! 1, i.e. in vertical columns. This routine redistributes the data
+! array "col" into slab orientation "slab".
+
+  use mpi_parameters
+  use boundary_information
+  include '../input/problem_size.h'
+  include 'mpif.h'
+
+  integer              :: tag,ierr,status_array(MPI_STATUS_SIZE,2*numprocs)
+  integer              :: dest,source,istart,iend,kstart,kend,reqs(4*numprocs+1)
+  integer              :: sizeofreal,nreqs,j
+  integer              :: iproc,numwords
+  integer                             :: m1,m2,m3
+  real,dimension(:,:,:),intent(out)   :: slab
+  real,dimension(:,:,:),intent(in)    :: col 
+
+  if( boundary_type2(1,1) .ne. 'periodic' .or.  boundary_type4(1,1) .ne. 'periodic' ) then
+   write(0,*) '  USING PERIODIC ENDPOINT LOGIC IN SLABS_TO_COLUMNS W/O PERIODIC BCS !!!'
+   stop
+  endif
+
+  m1=size(col,1)
+  m2=size(slab,2)
+  m3=size(slab,3)
+
+!!******************************************************************************
+!!*************   DO THE DATA EXCHANGES  ***************************************
+!!******************************************************************************
+!!Ship portions of my local data "column" x%ColVals needed by other nodes
+!!and recieve remote data required to construct my local data "slab" x%SlabVals.
+
+!!Post the receives first....immediate mode, ie return before data is actually transferred
+  nreqs=0
+  dest=myid
+  numwords=1
+  tag = 2
+
+  do iproc=0,numprocs-1
+    source=iproc
+    istart=iproc*m1+1  !! start index for receiving "subslab" data  x
+      if( dest .ne. source ) then !! bypass mpi when source=dest=myid
+        nreqs=nreqs+1
+        call  MPI_IRECV(slab(istart,1,1),numwords,subslice,source,tag,comm,reqs(nreqs),ierr)
+        if( ierr .ne. 0 ) then
+           stop 'MPI IRECV ERROR IN COLS TO SLABS'
+        endif
+      endif
+  enddo
+
+  call MPI_BARRIER(comm,ierr)    !! make sure all processors receives are posted
+                                 !! to avoid buffering
+
+!!All processors have issued all their receives, now the sends can be done w/o buffering.
+!!Use immediate-ready-send  meaning, return before transfer is finished and guarantee that
+!!the target locations on the destination processors are ready for writing. Faster.
+  source=myid
+  numwords=m1*m2*m3
+  tag = 2
+
+  do iproc=0,numprocs-1
+    dest=iproc
+    kstart=iproc*m3+1 !! start index for outgoing column data in x%ColVals
+      if( dest .ne. source ) then !! bypass mpi when source=dest=myid
+         nreqs=nreqs+1
+         call MPI_IRSEND(col(1,1,kstart),numwords,MPI_REAL,dest,tag,comm,reqs(nreqs),ierr)
+         if( ierr .ne. 0 ) then
+            stop 'MPI IRSEND ERROR IN COLS TO SLABS'
+         endif
+      endif
+  enddo
+
+  !! case where source=dest=myid
+  istart = myid*m1 + 1
+  iend   = istart + m1 - 1
+  kstart = myid*m3 + 1
+  kend   = kstart + m3 - 1
+  slab(istart:iend,:,:) = col(:,:,kstart:kend)
+
+  !!make sure all communications are done before proceeding
+  call MPI_WAITALL(nreqs,reqs,status_array,ierr)
+!******************************************************************************
+!******************************************************************************
+!******************************************************************************
+
+end subroutine columns_to_slabs
+
+
+end module
+
+
+
Index: /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/compact_derivs6.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/compact_derivs6.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/compact_derivs6.f90	(revision 6)
@@ -0,0 +1,597 @@
+subroutine compact_ddx(data,deriv,flag,end_values,m1,m2,m3)
+! Routine to compute the x derivative (1st dimension)
+! of a 3d field stored in data(1:m1,1:m2,1:m3) assuming
+! a uniformly spaced grid mesh with dx=h.
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+!       inputs
+!              data        m1,m2,m3 array of input values
+!              m1,m2,m3    dimensions of field to be differentiated
+!              h           x grid spacing
+!              flag        flag which identifies periodicity
+!              end_values  the end values for the derivatives
+!                          (required but now obsolete)
+!
+!       output
+!              deriv       m1,m2,m3 array containing the optimized
+!                          6th order accurate d/dx(data)
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ use grid_info
+ use boundary_information
+use user_parameters,        only: LAPACK_FLAG
+ implicit none
+
+ integer, intent(in)                              :: flag,m1,m2,m3
+ real, dimension(m1,m2,m3)                        :: data
+ real, dimension(m1,m2,m3)                        :: deriv
+ real, dimension(2)                               :: end_values
+ real, dimension(:,:), allocatable    :: work
+ integer                                          :: i,j,k,ierr,level,maxlevels
+ real                                             :: h
+ parameter(maxlevels=12)
+
+ real, allocatable                                :: kx(:),in(:),out(:)
+ real                                             :: pi
+ integer*8                                        :: plan_f, plan_i !size must match pointer size, 8 for DEC alphas
+ integer                                          :: N
+ include 'fftw_kw.inc'                            !  predefined FFTW constants
+
+ if( boundary_type2(1,1)=='periodic' ) then  ! spectral differentiation in x, use FFTW
+
+! preliminaries, setup fftw "plans"
+  pi=4.*atan(1.)
+  N=m1-1                                     ! m1 includes both boundary points, N only 1
+  allocate( kx(N),in(N),out(N) )
+
+  call rfftw_f77_create_plan(plan_f,N,FFTW_REAL_TO_COMPLEX,FFTW_ESTIMATE)
+  call rfftw_f77_create_plan(plan_i,N,FFTW_COMPLEX_TO_REAL,FFTW_ESTIMATE)
+  do i=1,N/2+1
+   kx(i)=2.*pi*(i-1.)    ! FFTW real to half-complex storage
+  enddo
+  do i=2,N/2
+   kx(N-i+2)=kx(i)       ! FFTW real to half-complex storage
+  enddo
+
+  do j=1,m2
+   do k=1,m3
+
+    in(1:N)=data(1:N,j,k)
+    call rfftw_f77_one(plan_f,in,out)   ! FORWARD TRANSFORM
+
+!   multiply by wavenumber array & normalize by N
+    out(1:N) = kx(1:N)*out(1:N)/float(N)
+!   multiply by i  (fold and negate)
+    do i=2,N/2
+     in(i)=-out(N-i+2)  ! real <-- (-imaginary)
+     in(N-i+2)=out(i)   ! imag <-- ( real )
+    enddo
+    in(1)=0.     ! dc
+    in(N/2+1)=0. !nyquist
+
+    call rfftw_f77_one(plan_i,in,out)   ! INVERSE TRANSFORM
+    deriv(1:N,j,k)=out(1:N)             ! store results in deriv
+    deriv(m1,j,k)=out(1)                ! carry 2nd periodic end point along
+    
+   enddo
+  enddo
+
+  call rfftw_f77_destroy_plan(plan_f)
+  call rfftw_f77_destroy_plan(plan_i)
+  deallocate( kx,in,out )
+  return
+ 
+ endif
+
+!*************  nonperiodic, use compact differentiation ********************
+ allocate( work(m1,m2) )
+ 
+! determine an appropriate grid level from m1
+ do level=0,maxlevels
+  if( m1 == Grid(level)%n1 ) goto 999
+ enddo
+999 continue   ! can use ddx and piv arrays from grid level 
+ h = Grid(level)%dxi
+
+!loop through each xy horizontal plane
+       
+ do k=1,m3
+
+!Create rhs vectors, store in work(:,:)
+ work(1,:)=( -(274.)*data(1,:,k)+(600.)*data(2,:,k)   &
+             -(600.)*data(3,:,k)+(400.)*data(4,:,k)   &
+             -(150.)*data(5,:,k)+ (24.)*data(6,:,k) )/(120.*h)   
+!               work(2,:)=( -(5./9.)*data(1,:,k)-(1./2.)*data(2,:,k)   &
+!                           +(1.)*data(3,:,k)+(1./18.)*data(4,:,k) )/h
+ work(2,:)=( -(24.)*data(1,:,k)-(130.)*data(2,:,k)   &
+             +(240.)*data(3,:,k)-(120.)*data(4,:,k)   &
+             +(40.)*data(5,:,k)- (6.)*data(6,:,k) )/(120.*h)   
+ work(3,:)= ( (1./36.)*(data(5,:,k)-data(1,:,k))   &
+             + (7./9.)*(data(4,:,k)-data(2,:,k)) )/h  
+
+ do i=4,m1-3
+  work(i,:)= ( (c1/6.)*(data(i+3,:,k)-data(i-3,:,k))   &
+              + (b1/4.)*(data(i+2,:,k)-data(i-2,:,k))   & 
+              + (a1/2.)*(data(i+1,:,k)-data(i-1,:,k)) )/h  
+ enddo
+
+ work(m1-2,:)= (-(1./36.)*(data(m1-4,:,k)-data(m1,:,k))   &
+                - (7./9.)*(data(m1-3,:,k)-data(m1-1,:,k)) )/h  
+!         work(m1-1,:)=( (5./9.)*data(m1,:,k)+(1./2.)*data(m1-1,:,k)  &
+!                         -(1)*data(m1-2,:,k)-(1./18.)*data(m1-3,:,k) )/h
+ work(m1-1,:)=( (24.)*data(m1,:,k)+(130.)*data(m1-1,:,k)   &
+             -(240.)*data(m1-2,:,k)+(120.)*data(m1-3,:,k)   &
+             -(40.)*data(m1-4,:,k)+ (6.)*data(m1-5,:,k) )/(120.*h)   
+ work(m1,:)=( (274.)*data(m1,:,k)-(600.)*data(m1-1,:,k)   &
+             +(600.)*data(m1-2,:,k)-(400.)*data(m1-3,:,k)   &
+             +(150.)*data(m1-4,:,k)- (24.)*data(m1-5,:,k) )/(120.*h)   
+
+!Compute the x derivatives for plane k, overwriting the array work
+
+ if( LAPACK_FLAG == 'double' ) then
+!!!  call DGBTRS('N',m1,2,2,m2,Grid(level)%ddx,7,Grid(level)%piv_dx,work(1,1),m1,ierr)
+      write(0,*) 'LAPACK_FLAG = double instead of single'
+      stop
+ elseif( LAPACK_FLAG == 'single' ) then
+  call SGBTRS('N',m1,2,2,m2,Grid(level)%ddx,7,Grid(level)%piv_dx,work(1,1),m1,ierr)
+ endif
+
+!If deriv. end conditions are 'periodic' (flag = 5) then
+!overwrite the endpts with nonlocal estimate
+ if( flag .eq. 5 ) then
+
+  work(1,:) = ( 2.*data(m1-2,:,k) -16.*data(m1-1,:,k)      &
+              +16.*data(2,:,k) -2.*data(3,:,k)  )/(24.*h)  
+  work(m1,:)=work(1,:)
+
+  work(2,:) = ( 2.*data(m1-1,:,k) -16.*data(m1,:,k)      &
+              +16.*data(3,:,k) -2.*data(4,:,k)  )/(24.*h)  
+  work(m1-1,:) = ( 2.*data(m1-3,:,k) -16.*data(m1-2,:,k)      &
+              +16.*data(1,:,k) -2.*data(2,:,k)  )/(24.*h)  
+
+  work(3,:) = ( 2.*data(m1,:,k) -16.*data(2,:,k)      &
+              +16.*data(4,:,k) -2.*data(5,:,k)  )/(24.*h)  
+  work(m1-2,:) = ( 2.*data(m1-4,:,k) -16.*data(m1-3,:,k)      &
+              +16.*data(m1-1,:,k) -2.*data(m1,:,k)  )/(24.*h)  
+
+ endif
+      
+!store the results in deriv(:,:,k)
+  deriv(:,:,k)=work(:,:) 
+
+!Go on to the next k plane
+ enddo
+
+ deallocate( work  )
+end subroutine compact_ddx
+
+
+
+
+
+subroutine compact_ddy(data,deriv,flag,end_values,m1,m2,m3)
+! Routine to compute the y derivative (2nd dimension)
+! of a 3d field stored in data(1:m1,1:m2,1:m3) assuming
+! a uniformly spaced grid mesh with dy=h.
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+!       inputs
+!              data        m1,m2,m3 array of input values
+!              m1,m2,m3    dimensions of field to be differentiated
+!              h           y grid spacing
+!              flag        flag which identifies periodicity
+!              end_values  the end values for the derivatives
+!                          (required but obsolete)
+!
+!       output
+!              deriv       m1,m2,m3 array containing the optimized
+!                          6th order accurate d/dy(data)
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ use grid_info
+ use boundary_information
+use user_parameters,        only: LAPACK_FLAG
+ implicit none
+
+ integer, intent(in)                              :: flag,m1,m2,m3
+ real, dimension(m1,m2,m3), intent(in)            :: data
+ real, dimension(m1,m2,m3), intent(out)           :: deriv
+ real, dimension(2), intent(in)                   :: end_values
+!!! double precision, dimension(:,:), allocatable    :: work
+ real, dimension(:,:), allocatable    :: work
+ integer                                          :: i,j,k,ierr,level,maxlevels
+ real                                             :: h
+ parameter(maxlevels=12)
+
+ real, allocatable                                :: ky(:),in(:),out(:)
+ real                                             :: pi
+ integer*8                                        :: plan_f, plan_i !size must match pointer size, 8 for DEC alphas
+ integer                                          :: N
+ include 'fftw_kw.inc'                            !  predefined FFTW constants
+
+ if( boundary_type4(1,1)=='periodic' ) then  ! spectral differentiation in y, use FFTW
+
+! preliminaries, setup fftw "plans"
+  pi=4.*atan(1.)
+  N=m2-1                                     ! m2 includes both boundary points, N only 1
+  allocate( ky(N),in(N),out(N) )
+
+  call rfftw_f77_create_plan(plan_f,N,FFTW_REAL_TO_COMPLEX,FFTW_ESTIMATE)
+  call rfftw_f77_create_plan(plan_i,N,FFTW_COMPLEX_TO_REAL,FFTW_ESTIMATE)
+  do j=1,N/2+1
+   ky(j)=2.*pi*(j-1.)    ! FFTW real to half-complex storage
+  enddo
+  do j=2,N/2
+   ky(N-j+2)=ky(j)      ! FFTW real to half-complex storage
+  enddo
+
+  do i=1,m1
+   do k=1,m3
+
+    in(1:N)=data(i,1:N,k)
+    call rfftw_f77_one(plan_f,in,out)   ! FORWARD TRANSFORM
+
+!   multiply by wavenumber array & normalize by N
+    out(1:N) = ky(1:N)*out(1:N)/float(N)
+!   multiply by i  (fold and negate)
+    do j=2,N/2
+     in(j)=-out(N-j+2)  ! real <-- (-imaginary)
+     in(N-j+2)=out(j)   ! imag <-- ( real )
+    enddo
+    in(1)=0.     ! dc
+    in(N/2+1)=0. !nyquist
+
+    call rfftw_f77_one(plan_i,in,out)   ! INVERSE TRANSFORM
+    deriv(i,1:N,k)=out(1:N)             ! store results in deriv
+    deriv(i,m2,k)=out(1)                ! carry 2nd periodic end point along
+    
+   enddo
+  enddo
+
+  call rfftw_f77_destroy_plan(plan_f)
+  call rfftw_f77_destroy_plan(plan_i)
+  deallocate( ky,in,out )
+  return
+  
+ endif
+
+!*************  nonperiodic, use compact differentiation ********************
+ allocate( work(m2,m1) )
+
+! determine an appropriate grid level from m2
+ do level=0,maxlevels-1
+  if( m2 == Grid(level)%n2 ) goto 999
+ enddo
+999 continue   ! can use ddx and piv arrays from grid level 
+ h = Grid(level)%deta
+
+!loop through each xy horizontal plane
+       
+ do k=1,m3
+
+!      create rhs vectors, store in work(:,:,1)
+ work(1,:)=( -(274.)*data(:,1,k)+(600.)*data(:,2,k)   &
+             -(600.)*data(:,3,k)+(400.)*data(:,4,k)   &
+             -(150.)*data(:,5,k)+ (24.)*data(:,6,k) )/(120.*h)   
+!         work(2,:)=( -(5./9.)*data(:,1,k)-(1./2.)*data(:,2,k)   &
+!                       +(1.)*data(:,3,k)+(1./18.)*data(:,4,k) )/h
+ work(2,:)=( -(24.)*data(:,1,k)-(130.)*data(:,2,k)   &
+             +(240.)*data(:,3,k)-(120.)*data(:,4,k)   &
+             +(40.)*data(:,5,k)- (6.)*data(:,6,k) )/(120.*h)   
+ work(3,:) = ( (1./36.)*( data(:,5,k) - data(:,1,k) )   &
+              + (7./9.)*( data(:,4,k) - data(:,2,k) ) )/h  
+ do j=4,m2-3
+  work(j,:) = (  (c1/6.)*( data(:,j+3,k) - data(:,j-3,k) )   &
+               + (b1/4.)*( data(:,j+2,k) - data(:,j-2,k) )   &
+               + (a1/2.)*( data(:,j+1,k) - data(:,j-1,k) ) )/h  
+ enddo
+
+ work(m2-2,:) = (-(1./36.)*( data(:,m2-4,k) - data(:,m2,k) )   &
+              - (7./9.)*( data(:,m2-3,k) - data(:,m2-1,k) ) )/h  
+!         work(m2-1,:)= ( (5./9.)*data(:,m2,k)+(1./2.)*data(:,m2-1,k)   &
+!                          -(1.)*data(:,m2-2,k)-(1./18.)*data(:,m2-3,k) )/h
+ work(m2-1,:)=( (24.)*data(:,m2,k)+(130.)*data(:,m2-1,k)   &
+             -(240.)*data(:,m2-2,k)+(120.)*data(:,m2-3,k)   &
+             -(40.)*data(:,m2-4,k)+ (6.)*data(:,m2-5,k) )/(120.*h)   
+ work(m2,:)=(  (274.)*data(:,m2,k)-(600.)*data(:,m2-1,k)   &
+             +(600.)*data(:,m2-2,k)-(400.)*data(:,m2-3,k)   &
+             +(150.)*data(:,m2-4,k)- (24.)*data(:,m2-5,k) )/(120.*h)   
+
+!Compute the y derivatives for plane k, overwriting the array work
+ if( LAPACK_FLAG == 'double' ) then
+!!!  call DGBTRS('N',m2,2,2,m1,Grid(level)%ddy,7,Grid(level)%piv_dy,work(1,1),m2,ierr)
+      write(0,*) 'LAPACK_FLAG = double instead of single'
+      stop
+ elseif( LAPACK_FLAG == 'single' ) then
+  call SGBTRS('N',m2,2,2,m1,Grid(level)%ddy,7,Grid(level)%piv_dy,work(1,1),m2,ierr)
+ endif
+
+!If deriv. end conditions are 'periodic' (flag = 5) then
+!overwrite the endpts with nonlocal estimate
+ if( flag .eq. 5 ) then
+  work(1,:) = ( 2.*data(:,m2-2,k) -16.*data(:,m2-1,k)      &
+              +16.*data(:,2,k) -2.*data(:,3,k)  )/(24.*h)  
+  work(m2,:)=work(1,:)
+
+  work(2,:) = ( 2.*data(:,m2-1,k) -16.*data(:,m2,k)      &
+              +16.*data(:,3,k) -2.*data(:,4,k)  )/(24.*h)  
+  work(m2-1,:) = ( 2.*data(:,m2-3,k) -16.*data(:,m2-2,k)      &
+              +16.*data(:,1,k) -2.*data(:,2,k)  )/(24.*h)  
+
+  work(3,:) = ( 2.*data(:,m2,k) -16.*data(:,2,k)      &
+              +16.*data(:,4,k) -2.*data(:,5,k)  )/(24.*h)  
+  work(m2-2,:) = ( 2.*data(:,m2-4,k) -16.*data(:,m2-3,k)      &
+              +16.*data(:,m2-1,k) -2.*data(:,m2,k)  )/(24.*h)  
+
+ endif
+      
+!Store the results in deriv(:,:,k)
+ deriv(1:m1,1:m2,k)=transpose( work(1:m2,1:m1)  )
+
+!Go on to the next k plane
+ enddo
+
+ deallocate( work )
+end subroutine compact_ddy
+
+
+
+
+subroutine compact_ddz(data,deriv,flag,end_values,m1,m2,m3)
+! Routine to compute the x derivative (3rd dimension)
+! of a 3d field stored in data(1:m1,1:m2,1:m3) assuming
+! a uniformly spaced grid mesh with dz=h.
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+!       inputs
+!              data        m1,m2,m3 array of input values
+!              m1,m2,m3    dimensions of field to be differentiated
+!              h           z grid spacing
+!              flag        flag which identifies end point scheme
+!              end_values  the end values for the derivatives
+!                          (required but obsolete)
+!
+!       output
+!              deriv       m1,m2,m3 array containing the optimized
+!                          6th order accurate d/dz(data)
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ use grid_info
+ use user_parameters,  only: LAPACK_FLAG
+ implicit none
+
+ integer, intent(in)                              :: flag,m1,m2,m3
+ real, dimension(m1,m2,m3), intent(in)            :: data
+ real, dimension(m1,m2,m3), intent(out)           :: deriv
+ real, dimension(2), intent(in)                   :: end_values
+!!! double precision, dimension(:,:), allocatable    :: work
+ real, dimension(:,:), allocatable    :: work
+ integer                                          :: i,j,k,ierr,level,maxlevels
+ real                                             :: h
+ parameter(maxlevels=12)
+
+ allocate( work(m3,m1) )
+
+! determine an appropriate grid level from m3
+ do level=0,maxlevels-1
+  if( m3 == Grid(level)%n3 ) goto 999
+ enddo
+999 continue   ! can use ddx and piv arrays from grid level 
+ h = Grid(level)%dzeta
+
+!loop through each xz plane
+       
+ do j=1,m2
+
+!create rhs vectors, store in work(:,:,1)
+ work(1,:)=( -(274.)*data(:,j,1)+(600.)*data(:,j,2)   &
+             -(600.)*data(:,j,3)+(400.)*data(:,j,4)   &
+             -(150.)*data(:,j,5)+(24.)*data(:,j,6) )/(120.*h)   
+!    work(2,:)=(-(5./9.)*data(:,j,1)-(1./2.)*data(:,j,2)   &
+!                 +(1.)*data(:,j,3)+(1./18.)*data(:,j,4) )/h
+ work(2,:)=( -(24.)*data(:,j,1)-(130.)*data(:,j,2)   &
+             +(240.)*data(:,j,3)-(120.)*data(:,j,4)   &
+             +(40.)*data(:,j,5)-(6.)*data(:,j,6) )/(120.*h)   
+ work(3,:)=( (1./36.)* ( data(:,j,5) - data(:,j,1) )  &
+            + (7./9.)* ( data(:,j,4) - data(:,j,2) ) )/h
+
+ do k=4,m3-3
+  work(k,:)=( (c1/6.)* ( data(:,j,k+3) - data(:,j,k-3) )  &
+             + (b1/4.)* ( data(:,j,k+2) - data(:,j,k-2) )  &
+             + (a1/2.)* ( data(:,j,k+1) - data(:,j,k-1) ) )/h
+ enddo
+
+ work(m3-2,:)=(-(1./36.)* ( data(:,j,m3-4) - data(:,j,m3) )  &
+            - (7./9.)* ( data(:,j,m3-3) - data(:,j,m3-1) ) )/h
+!    work(m3-1,:)= ( (5./9.)*data(:,j,m3)+(1./2.)*data(:,j,m3-1)   &
+!                      -(1.)*data(:,j,m3-2)-(1./18.)*data(:,j,m3-3) )/h
+ work(m3-1,:)=( (24.)*data(:,j,m3)+(130.)*data(:,j,m3-1)   &
+             -(240.)*data(:,j,m3-2)+(120.)*data(:,j,m3-3)   &
+             -(40.)*data(:,j,m3-4)+(6.)*data(:,j,m3-5) )/(120.*h)   
+ work(m3,:)=( (274.)*data(:,j,m3)-(600.)*data(:,j,m3-1)   &
+             +(600.)*data(:,j,m3-2)-(400.)*data(:,j,m3-3)   &
+             +(150.)*data(:,j,m3-4)-(24.)*data(:,j,m3-5) )/(120.*h)   
+
+!Compute the z derivatives for plane j, overwriting the array work
+  if( LAPACK_FLAG == 'double' ) then
+!!!   call DGBTRS('N',m3,2,2,m1,Grid(level)%ddz,7,Grid(level)%piv_dz,work(1,1),m3,ierr)
+      write(0,*) 'LAPACK_FLAG = double instead of single'
+      stop
+  elseif( LAPACK_FLAG == 'single' ) then
+!!!      write(0,*) '********** ddz = ', Grid(level)%ddz
+!!!      write(0,*) '********** piv_dz = ', Grid(level)%piv_dz
+   call SGBTRS('N',m3,2,2,m1,Grid(level)%ddz,7,Grid(level)%piv_dz,work(1,1),m3,ierr)
+  endif
+
+!!!  do i=1,m1
+!!!  do k=1,m3
+!!!     if(abs(work(k,i)) .lt. 1.e-20) work(k,i) = 0.0
+!!!  enddo
+!!!  enddo
+
+!Store the results in deriv(:,:,k)
+ do i=1,m1
+  deriv(i,j,:)=work(:,i)
+ enddo
+
+!If deriv. end conditions are 'periodic' (flag = 5) then
+!overwrite the endpts w/ the avg of the endpts
+ if( flag .eq. 5 ) then
+  work(1,:)=(deriv(:,j,1)+deriv(:,j,m3))/2.
+  deriv(:,j,1)=work(1,:)
+  deriv(:,j,m3)=work(1,:)
+ endif
+      
+!Go on to the next j plane
+ enddo
+
+ deallocate ( work )
+end subroutine compact_ddz
+
+
+
+
+
+subroutine compact_ddz_mpi(data,deriv,flag,end_values,m1,m2,m3)
+!     This version computes the z derivative of a block of 3d data.
+!     There are three ways in which this routine can be used, depending
+!     on the values of nz, m3 and nzderiv. The cases are denoted CASE1
+!     CASE2 and CASE3 as described below.
+!
+!     CASE1: nprocs=1 and nzderiv=m3=nz
+!            Serial execution. No communication calls necessary.
+!            Derivatives implemented with single call to
+!            compact_ddz with a vector length of nzderiv.
+
+!     CASE2: nprocs>1 and nzderiv=m3 < nz
+!            Parallel execution but no data exchanges between processors
+!            required. Each processor computes z derivatives over its own
+!            data space, i.e. over vector lengths of m3.
+!            Derivatives implemented by having each processor execute
+!            compact_ddz with a vector length of nzderiv.
+!
+!     CASE3: nprocs>1 and nzderiv=nz > m3. 
+!            No processor possesses the required data locally and so
+!            data exchanges between processors are required both before
+!            and after differentiation. The algorithm is described below.            
+!     On entry, each process possesses a "slice" of the total data space,
+!     i.e. a block with dimensions (m1,m2,m3). Since the compact schemes
+!     are nonlocal, i.e. all nz elements are required to compute a z derivative.
+!     In this implementation, each process will compute z derivatives within
+!     a "block of columns", i.e. a block of data of size (m1/nprocs,m2,nz)
+!     or ( (m1-1)/nprocs,m2,n2 ) if ffts are being used in x&y
+!     Since the basic data distribution consists of "blocks of rows", exchange
+!     of data between processes is required. 
+!
+!     Each process lacks (nprocs-1) blocks of size (locnx,m2,m3)
+!     needed to make up its "block of columns". On entry, each process
+!     has (nprocs-1)  data "blocks" of size (locnx,m2,m3) that are
+!     not needed locally but required by other processes to complete their
+!     "block of columns".
+!
+!     This algorithm thus proceeds as follows:
+!     (1) ship data not needed locally and receive data required to
+!           complete a "block of columns".
+!     (2) compute z derivatives over the processes "block of columns".
+!     (3) send results to other processes, receive their results
+!     (4) store the results in appropriate block locations of the original
+!           "slice" of the total data space.
+!*******************************************************
+ use mpi_parameters
+ use boundary_information
+ use columnslab
+
+ implicit none
+
+ integer, intent(in)                              :: flag,m1,m2,m3
+ real, dimension(m1,m2,m3), intent(in)            :: data
+ real, dimension(m1,m2,m3), intent(out)           :: deriv
+ real, dimension(2), intent(in)                   :: end_values
+ integer                                          :: i,j,k,nzderiv,locnx
+
+ include 'mpif.h'
+ integer          :: tag,ierr,status_array(MPI_STATUS_SIZE,2*nprocs),reqs(2*nprocs)
+ integer          :: dest,source,istart,iend,kstart,kend,nz
+ integer          :: sizeofreal
+ integer          :: iproc,numwords
+ real, allocatable                      :: block_of_cols(:,:,:)
+
+ if( boundary_type2(1,1)=='periodic' .and. boundary_type4(1,1)=='periodic' ) then
+  locnx = (m1-1)/nprocs
+ else
+  locnx = m1/nprocs
+ endif
+
+
+ nz=m3*nprocs   ! global # of points
+ nzderiv=nz     ! always do global differentiation
+
+! Both CASE1 and CASE2 require simple calls to compact_ddz
+  if( nprocs .eq. 1 .and. m3 .eq. nz .and. nzderiv .eq. nz ) then
+   goto 999   ! CASE1
+  elseif(nprocs .gt. 1 .and. nzderiv .eq. m3 .and. m3 .lt. nz) then
+   goto 999   ! CASE2
+  elseif(nprocs .gt. 1 .and. nzderiv .eq. nz .and. nz .gt. m3) then
+!  CASE3 logic
+
+ allocate ( block_of_cols(locnx,m2,nprocs*m3) )
+ block_of_cols=0.
+
+! Create a derived data type for ease of swaps
+    call MPI_TYPE_EXTENT(MPI_REAL,sizeofreal,ierr)
+! data type for 1d section of basic data slice: m1/nprocs
+    call MPI_TYPE_VECTOR(locnx,1,1,MPI_REAL,oneslice,ierr)
+! data type for 2d section of basic data slice: m2=ny 1d sections
+    call MPI_TYPE_HVECTOR(m2,1,m1*sizeofreal,oneslice,twoslice,ierr)
+! data type for 3d section of basic data slice:locnz=nz/numprocs 2d sections
+    call MPI_TYPE_HVECTOR(m3,1,m1*m2*sizeofreal,twoslice,subslice,ierr)
+! declare data type
+    call MPI_TYPE_COMMIT(subslice,ierr)
+
+!!*******************************************************************************
+!!*************   DO THE DATA EXCHANGES  ****************************************
+!!*******************************************************************************
+!! (1)  Ship portions of my slice needed by other processes and
+!!      receive data needed to fill in "block_of_cols"
+
+  call slabs_to_columns(data,block_of_cols)
+
+!! (2)  Compute z derivatives over my "block of columns".
+!!       Store results in the array "col_of_derivs".
+ 
+  call compact_ddz(block_of_cols,block_of_cols,flag,end_values,locnx,m2,nz)
+
+!! (3) Send derivative results to other processes
+!!     and receive their results
+
+  call columns_to_slabs(block_of_cols,deriv)
+
+!!*******************************************************************************
+!!*************     END DATA EXCHANGES   ****************************************
+!!*******************************************************************************
+   
+ if( boundary_type2(1,1)=='periodic' .and. boundary_type4(1,1)=='periodic' ) then
+  deriv(m1,:,:)=deriv(1,:,:)  ! we didn't compute the extra bdry point
+ endif
+
+
+ call MPI_BARRIER(comm,ierr)
+
+!!! free data type
+ call MPI_TYPE_FREE(oneslice,ierr)
+ call MPI_TYPE_FREE(twoslice,ierr)
+ call MPI_TYPE_FREE(subslice,ierr)
+
+ deallocate(block_of_cols)
+return    ! end CASE3 
+
+ else
+  write(0,*) ' size logic error using compact_ddz_mpi '
+  write(0,*) ' nz : ',nz
+  write(0,*) ' locnz : ',m3
+  write(0,*) ' nzderiv : ',nzderiv
+  write(0,*) ' nprocs : ',nprocs
+ endif
+
+999   continue   ! CASE1 & CASE2
+ call compact_ddz(data,deriv,flag,end_values,m1,m2,m3)
+
+end subroutine compact_ddz_mpi
+
Index: /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/filter4.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/filter4.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/filter4.f90	(revision 6)
@@ -0,0 +1,478 @@
+subroutine filter
+#define DEBUG_LEVEL 1
+ use mpi_parameters
+ use boundary_information
+ use dependent_variables
+ use counters_flags_etc
+ implicit none
+
+ integer                               :: sizeofreal,locnx
+ include '../input/problem_size.h'
+ include 'mpif.h'
+
+! At designated time steps, apply fourth order compact spatial filters
+if( mod(istep,i_filter) == 0  .and. istep .ne. 0 ) then
+
+#if DEBUG_LEVEL >= 1
+ if(myid==0) write(0,*) 'hello world from subroutine filter '
+#endif
+
+ if( boundary_type2(1,1)=='periodic' .and. boundary_type4(1,1)=='periodic' ) then
+   locnx = (nx-1)/nprocs
+  else
+   locnx = nx/nprocs
+  endif
+
+!!  create a derived data type
+  call MPI_TYPE_EXTENT(MPI_REAL,sizeofreal,ierr)
+  call MPI_TYPE_VECTOR(locnx,1,1,MPI_REAL,oneslice,ierr)
+  call MPI_TYPE_HVECTOR(ny,1,nx*sizeofreal,oneslice,twoslice,ierr)
+  call MPI_TYPE_HVECTOR(locnz,1,nx*ny*sizeofreal,twoslice,subslice,ierr)
+  call MPI_TYPE_COMMIT(subslice,ierr)
+  call MPI_BARRIER(comm,ierr)
+
+  call filter4(U)
+  call filter4(v)
+  call filter4(W)
+  call filter4(s1)
+  call filter4(s2)
+
+  call MPI_BARRIER(comm,ierr)
+
+!! free data type
+  call MPI_TYPE_FREE(oneslice,ierr)
+  call MPI_TYPE_FREE(twoslice,ierr)
+  call MPI_TYPE_FREE(subslice,ierr)
+
+endif
+
+end subroutine filter
+
+subroutine filter4(U)
+#define DEBUG_LEVEL 1
+ use mpi_parameters
+ use boundary_information
+ use columnslab
+
+ implicit none
+ include 'mpif.h'
+
+ include '../input/problem_size.h'
+ integer                               :: n1,n2,n3,nzderiv,locnx
+ real, dimension(:,:,:), allocatable   :: block_of_cols
+ real, dimension(nx,ny,locnz)          :: U
+
+ if( boundary_type2(1,1)=='periodic' .and. boundary_type4(1,1)=='periodic' ) then
+   locnx = (nx-1)/nprocs
+  else
+   locnx = nx/nprocs
+  endif
+
+! filter in x and y directions, overwriting input array in both cases
+ call filter_x4(U,U,nx,ny,locnz)
+ call filter_y4(U,U,nx,ny,locnz)
+
+!filter in z direction :
+!*******************************************************
+! See compact_ddz_mpi for more details, but basically, each processor
+! needs to ship sub-blocks of its own dataslice and recieve those
+! necessary to construct a block with dimensions nx/numprocs * ny * nz.
+! Filtering is done on these blocks and the results shipped back
+! to the appropriate locations
+!*******************************************************
+
+ nzderiv=nz   ! don't use nzderiv < nz logic
+!Both CASE1 and CASE2 require simple calls to compact_ddz
+ if( numprocs == 1 .and. locnz == nz .and. nzderiv == nz ) then
+  goto 999   ! CASE1
+ elseif(numprocs > 1 .and. nzderiv == locnz .and. locnz < nz) then
+  goto 999   ! CASE2
+ elseif(numprocs > 1 .and. nzderiv == nz .and. nz > locnz) then
+!CASE3 logic
+ 
+  allocate ( block_of_cols( locnx,ny,numprocs*locnz) )
+
+!!*******************************************************************************
+!!*************   DO THE DATA EXCHANGES  ****************************************
+!!*******************************************************************************
+
+!!(1) Ship portions of my slice needed by other processes and
+!!    receive data needed to fill in "block_of_cols"
+
+   call slabs_to_columns(U,block_of_cols)
+
+!!(2) Apply z4 filtering to "block_of_cols"
+
+   n1=locnx
+   n2=ny
+   n3=locnz*numprocs
+   call filter_z4(block_of_cols,block_of_cols,n1,n2,n3)
+
+!!(3) Send filtered fields to other processes
+!!    and receive their results.
+
+   call columns_to_slabs(block_of_cols,U)
+   
+!!*******************************************************************************
+!!*************    END DATA EXCHANGES    ****************************************
+!!*******************************************************************************
+
+  if( boundary_type2(1,1)=='periodic' .and. boundary_type4(1,1)=='periodic' ) then
+   U(nx,:,:)=U(1,:,:)  ! we didn't compute the values at extra bdry point location in x
+  endif
+
+  deallocate(block_of_cols)
+  return
+ endif
+
+999 continue   ! CASE1 & CASE2
+ n1=nx
+ n2=ny
+ n3=nzderiv
+ call filter_z4(U,U,n1,n2,n3)
+
+end subroutine filter4
+
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+subroutine filter_x4(data,deriv,nx,ny,nz)
+! routine to perform 4th order filtering wrt x (1st dimension)
+! of a 3d field stored in data(1:nx,1:ny,1:nz).
+!
+! inputs
+!        data       nx,ny,nz array of input values
+!        nx,ny,nz   dimensions of field to be differentiated
+!
+! output
+!        deriv      nx,ny,nz array containing the 4th order
+!                   filtered (in x) field
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ use grid_info
+ use boundary_information
+use user_parameters,        only: LAPACK_FLAG
+ implicit none
+
+!!! double precision, dimension(:,:),allocatable    :: work
+ real, dimension(:,:),allocatable    :: work
+ integer                             :: i,j,k,nx,ny,nz,ierr
+ real                                :: data(nx,ny,nz),deriv(nx,ny,nz)
+!!! double precision                    :: a,b,c
+ real                    :: a,b,c
+
+ real,allocatable,dimension(:)       :: kx,SF,in,out,tmp
+ real                                :: pi,kx_max,xnorm,kstar,dk
+ integer*8                           :: plan_f,plan_i     !size must match pointer size, 8 for DEC alphas
+ integer                             :: N
+ include 'fftw_kw.inc'               !  predefined FFTW constants
+
+
+ if( boundary_type2(1,1)=='periodic' ) then
+  N=nx-1                 ! nx includes both boundary points, N only 1
+  allocate(kx(N+1),SF(N))
+  allocate( in(N),out(N),tmp(N) )
+
+! X preliminaries, setup fftw "plan"
+  call rfftw_f77_create_plan(plan_f,N,FFTW_REAL_TO_COMPLEX,FFTW_ESTIMATE)
+  call rfftw_f77_create_plan(plan_i,N,FFTW_COMPLEX_TO_REAL,FFTW_ESTIMATE)
+
+
+! create the x array, align with the data arrays
+  pi=4.*atan(1.)
+  xnorm = 1./float(N)    ! only normalize in wavenumber space here
+  do i=1,N/2+1
+   kx(i)=2.*pi*(i-1.)    ! FFTW real to half-complex storage
+  enddo
+  do i=2,N/2
+   kx(N-i+2)=kx(i)       ! FFTW real to half-complex storage
+  enddo
+  kx(N+1)=0.             ! extra location, convenient for alignment of arrays
+
+! define smoothing filter
+  kx_max=kx(N/2+1)
+  kstar=(8./9.)*kx_max 
+  do i=1,N
+       !if( kx(i) >= (8./9.)*kx_max ) then
+       ! SF(i)=0.
+       !else
+       ! SF(i)=1.0
+       !endif
+   SF(i)=0.5*( -tanh( 8.*(kx(i)-kstar)/(kx_max) ) + 1. )
+  enddo
+
+  do k=1,nz
+   do j=1,ny
+
+! x transforms; filter & inverse transform
+    in(1:N)=data(1:N,j,k)
+    call rfftw_f77_one(plan_f,in,out)
+    tmp(1:N)=SF(1:N)*out(1:N)*xnorm
+    call rfftw_f77_one(plan_i,tmp,out)
+    deriv(1:N,j,k)=out
+    deriv(nx,j,k)=deriv(1,j,k)
+
+   enddo
+  enddo
+
+  call rfftw_f77_destroy_plan(plan_f)
+  call rfftw_f77_destroy_plan(plan_i)
+  deallocate( kx,SF,in,out,tmp )
+  return
+ endif
+
+!               GENERAL, NONPERIODIC LOGIC
+allocate ( work(nx,ny) )
+!Set filter coefficients:
+ a=(5.+6.*alpha)/8.
+ b=(1.+2.*alpha)/2.
+ c=-(1.-2.*alpha)/8.
+
+!Loop through each horizontal plane
+ do k=1,nz
+
+!Create rhs vectors, store in work(:,:,1)
+  do i=3,nx-2
+   do j=1,ny
+    work(i,j)=a*data(i,j,k) + b*( data(i+1,j,k)+data(i-1,j,k) )/2.   &
+               + c*( data(i+2,j,k)+data(i-2,j,k) )/2.
+   enddo
+  enddo
+
+  do j=1,ny
+   work(1,j)= (15./16.)*data(1,j,k) + (1./16.)*( 4*data(2,j,k)         &
+               -6.*data(3,j,k) + 4.*data(4,j,k) - data(5,j,k) )
+   work(2,j)= (3./4.)*data(2,j,k) + (1./16.)*( data(1,j,k)             &
+               +6.*data(3,j,k) - 4.*data(4,j,k) + data(5,j,k) )
+
+   work(nx,j)=(15./16.)*data(nx,j,k) + (1./16.)*( 4*data(nx-1,j,k)     &
+               -6.*data(nx-2,j,k) + 4.*data(nx-3,j,k) - data(nx-4,j,k))
+   work(nx-1,j)= (3./4.)*data(nx-1,j,k) + (1./16)*( data(nx,j,k)      &
+               +6.*data(nx-2,j,k) - 4.*data(nx-3,j,k) + data(nx-4,j,k))
+  enddo
+
+! compute the filtered fields for plane k, results overwritten onto work(:,:)
+ if( LAPACK_FLAG == 'double' ) then
+!!!  call DGBTRS('N',nx,1,1,ny,Grid(0)%filt_x,4,Grid(0)%piv_fx,work(1,1),nx,ierr)
+      write(0,*) 'LAPACK_FLAG = double instead of single'
+      stop
+ elseif( LAPACK_FLAG == 'single' ) then
+  call SGBTRS('N',nx,1,1,ny,Grid(0)%filt_x,4,Grid(0)%piv_fx,work(1,1),nx,ierr)
+ endif
+  
+  deriv(:,:,k)=work(:,:)     !store the results in deriv(:,:,k)
+
+ enddo ! next k plane
+
+ deallocate ( work )
+end subroutine filter_x4
+
+subroutine filter_y4(data,deriv,nx,ny,nz)
+! routine to perform 4th order filtering wrt y (2nd dimension)
+! of a 3d field stored in data(1:nx,1:ny,1:nz).
+!
+! inputs
+!        data       nx,ny,nz array of input values
+!        nx,ny,nz   dimensions of field to be differentiated
+
+! output
+!        deriv      nx,ny,nz array containing the 4th order
+!                   accurate filtered (in y ) field
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ use grid_info
+ use boundary_information
+use user_parameters,        only: LAPACK_FLAG
+ implicit none
+
+!!! double precision, dimension(:,:),allocatable    :: work
+ real, dimension(:,:),allocatable    :: work
+ integer                             :: i,j,k,nx,ny,nz,ierr
+ real                                :: data(nx,ny,nz),deriv(nx,ny,nz)
+!!! double precision                    :: a,b,c
+ real                    :: a,b,c
+
+ real,allocatable,dimension(:)       :: ky,SF,in,out,tmp
+ real                                :: pi,ky_max,xnorm,kstar,dk
+ integer*8                           :: plan_f,plan_i     !size must match pointer size, 8 for DEC alphas
+ integer                             :: N
+ include 'fftw_kw.inc'               !  predefined FFTW constants
+
+
+ if( boundary_type4(1,1)=='periodic' ) then
+  N=ny-1                 ! ny includes both boundary points, N only 1
+  allocate( in(N),out(N),tmp(N) )
+  allocate(ky(N+1),SF(N))
+
+! Y preliminaries, setup fftw "plan"
+  call rfftw_f77_create_plan(plan_f,N,FFTW_REAL_TO_COMPLEX,FFTW_ESTIMATE)
+  call rfftw_f77_create_plan(plan_i,N,FFTW_COMPLEX_TO_REAL,FFTW_ESTIMATE)
+
+! create the y array, align with the data arrays
+  pi=4.*atan(1.)
+  xnorm = 1./float(N)    ! only normalize in wavenumber space here
+  do j=1,N/2+1
+   ky(j)=2.*pi*(j-1.)    ! FFTW real to half-complex storage
+  enddo
+  do j=2,N/2
+   ky(N-j+2)=ky(j)       ! FFTW real to half-complex storage
+  enddo
+  ky(N+1)=0.             ! extra location, convenient for alignment of arrays
+
+! define smoothing filter
+  ky_max=ky(N/2+1)
+  kstar=(8./9.)*ky_max
+
+  if( N <= 16 ) then
+   do j=1,N
+     SF(j)=1.0    ! no filtering
+   enddo
+  elseif( N > 16 ) then
+   do j=1,N
+    SF(j)=0.5*( -tanh( 8.*(ky(j)-kstar)/(ky_max) ) + 1. )
+   enddo
+  endif
+
+  do k=1,nz
+   do i=2,nx-1
+
+! y transforms; filter & inverse transform
+    in(1:N)=data(i,1:N,k)
+    call rfftw_f77_one(plan_f,in,out)
+    tmp(1:N)=SF(1:N)*out(1:N)*xnorm
+    call rfftw_f77_one(plan_i,tmp,out)
+    deriv(i,1:N,k)=out
+    deriv(i,ny,k)=deriv(i,1,k)
+
+   enddo
+  enddo
+  deriv(1,:,:)=data(1,:,:)
+  deriv(nx,:,:)=data(nx,:,:)
+
+  call rfftw_f77_destroy_plan(plan_f)
+  call rfftw_f77_destroy_plan(plan_i)
+  deallocate( ky,SF,in,out,tmp )
+  return
+ endif
+
+!               GENERAL, NONPERIODIC LOGIC
+
+ allocate ( work(ny,nx) )
+ a=(5.+6.*alpha)/8.
+ b=(1.+2.*alpha)/2.
+ c=-(1.-2.*alpha)/8.
+
+!Loop through each horizontal plane
+ do k=1,nz
+! create rhs vectors, store in work(:,:,1)
+  do j=3,ny-2
+   do i=1,nx
+    work(j,i)=a*data(i,j,k) + b*( data(i,j+1,k)+data(i,j-1,k) )/2. &
+               + c*( data(i,j+2,k)+data(i,j-2,k) )/2.
+   enddo
+  enddo
+
+  do i=1,nx
+   work(1,i)= (15./16.)*data(i,1,k) + (1./16.)*( 4.*data(i,2,k)          &
+              -6.*data(i,3,k) + 4.*data(i,4,k) - data(i,5,k) )
+   work(2,i)= (3./4.)*data(i,2,k) + (1./16.)*( data(i,1,k)              &
+              +6.*data(i,3,k) - 4.*data(i,4,k) + data(i,5,k) )
+
+   work(ny,i)=(15./16.)*data(i,ny,k) + (1./16.)*( 4.*data(i,ny-1,k)      &
+               -6.*data(i,ny-2,k) + 4.*data(i,ny-3,k) - data(i,ny-4,k))
+   work(ny-1,i)=(3./4.)*data(i,ny-1,k) + (1./16)*( data(i,ny,k)        &
+                 +6.*data(i,ny-2,k) - 4.*data(i,ny-3,k) + data(i,ny-4,k))
+  enddo
+
+! compute the filtered fields for plane k, overwriting results into work(:,:)
+ if( LAPACK_FLAG == 'double' ) then
+!!!  call DGBTRS('N',ny,1,1,nx,Grid(0)%filt_y,4,Grid(0)%piv_fy,work(1,1),ny,ierr)
+      write(0,*) 'LAPACK_FLAG = double instead of single'
+      stop
+ elseif( LAPACK_FLAG == 'single' ) then
+  call SGBTRS('N',ny,1,1,nx,Grid(0)%filt_y,4,Grid(0)%piv_fy,work(1,1),ny,ierr)
+ endif
+
+!     store the results in deriv(:,:,k)
+  do i=1,nx
+   do j=1,ny
+    deriv(i,j,k)=work(j,i)
+   enddo
+  enddo
+
+ enddo   ! next k plane
+
+ deallocate ( work )
+end subroutine filter_y4
+
+subroutine filter_z4(data,deriv,nx,ny,nz)
+!
+!       routine to perform 4th order filtering wrt z (3rd dimension)
+!       of a 3d field stored in data(1:nx,1:ny,1:nz).
+!
+! inputs
+!        data       nx,ny,nz array of input values
+!        nx,ny,nz   dimensions of field to be filtered
+!
+! output
+!        deriv      nx,ny,nz array containing the filtered field
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ use grid_info
+ use user_parameters, only: LAPACK_FLAG
+ implicit none
+
+!!! double precision, dimension(:,:),allocatable    :: work
+ real, dimension(:,:),allocatable    :: work
+ integer                             :: i,j,k,nx,ny,nz,ierr
+ real                                :: data(nx,ny,nz),deriv(nx,ny,nz)
+!!! double precision                    :: a,b,c
+ real                    :: a,b,c
+ allocate ( work(nz,nx) )
+      
+ a=(5.+6.*alpha)/8.
+ b=(1.+2.*alpha)/2.
+ c=-(1.-2.*alpha)/8.
+
+!Loop through each xz vertical plane
+ do j=1,ny
+! create rhs vectors, store in work(:,:,1)
+
+  do k=3,nz-2
+   do i=1,nx
+    work(k,i)=a*data(i,j,k) + b*( data(i,j,k+1)+data(i,j,k-1) )/2.   &
+               + c*( data(i,j,k+2)+data(i,j,k-2) )/2.
+   enddo
+  enddo
+
+  do i=1,nx
+   work(1,i)= (15./16.)*data(i,j,1) + (1./16.)*( 4.*data(i,j,2)             &
+              -6.*data(i,j,3) + 4.*data(i,j,4) - data(i,j,5) )
+   work(2,i)= (3./4.)*data(i,j,2) + (1./16.)*( data(i,j,1)                 &
+              +6.*data(i,j,3) - 4.*data(i,j,4) + data(i,j,5) )
+
+   work(nz,i)=(15./16.)*data(i,j,nz) + (1./16.)*( 4.*data(i,j,nz-1)         &
+               -6.*data(i,j,nz-2) + 4.*data(i,j,nz-3) - data(i,j,nz-4))
+   work(nz-1,i)=(3./4.)*data(i,j,nz-1) + (1./16.)*( data(i,j,nz)           &
+                 +6.*data(i,j,nz-2) - 4.*data(i,j,nz-3) + data(i,j,nz-4))
+  enddo
+
+!Filter the fields wrt z for plane j, overwriting results into work(:,:)
+ if( LAPACK_FLAG == 'double' ) then
+!!!  call DGBTRS('N',nz,1,1,nx,Grid(0)%filt_z,4,Grid(0)%piv_fz,work(1,1),nz,ierr)
+      write(0,*) 'LAPACK_FLAG = double instead of single'
+      stop
+ elseif( LAPACK_FLAG == 'single' ) then
+  call SGBTRS('N',nz,1,1,nx,Grid(0)%filt_z,4,Grid(0)%piv_fz,work(1,1),nz,ierr)
+ endif
+
+!Store the results in deriv(:,j,:)
+  do k=1,nz
+   do i=1,nx
+    deriv(i,j,k)=work(k,i)
+   enddo
+  enddo
+
+ enddo    ! go on to the next plane
+
+ deallocate ( work )
+end subroutine filter_z4
+
Index: /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/ibr.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/ibr.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/ibr.f90	(revision 6)
@@ -0,0 +1,465 @@
+subroutine ibr_1
+#define DEBUG_LEVEL 1
+!     Routine to calculate the Inertia, Buoyancy, Rotation terms of 
+!     xi momentum equation, ignoring the pressure and dissipation terms
+!
+!     inputs:
+!            U,v,W contravariant velocities (x,z) and horizontal velocity (y)
+!            GM_uu the grid metric term in front of the U^2 term
+!            GM_uw the grid metric term in front of the U*W term
+!            GM_ww the grid metric term in front of the W^2 term
+!            pd     perturbation density
+!            Rot  the inverse Rossby number U/fL
+!            Ri   the Richardson number (N2*L^2)/U^2
+!            nx,ny,locnz  size of fields
+!            dxi,deta,dzeta  regular grid spacings on the computational mesh
+!            work    work array of at least (6*nx*ny*locnz,3*nx*ny*locnz) 
+!                    for evaluation of DNS terms, no evaluation of DNS terms
+!            x_zeta  derivative of cartesion x wrt grid coordinate zeta
+!            y_eta   derivative of cartesian y wrt coordinate eta
+!            z_zeta  derivative of cartesion z wrt grid coordinate zeta
+!            det_J determinant of transformation matrix
+!            BC_flag - derivative conditions and end values
+!
+!     output:
+!            rhs1 an (nx,ny,locnz) array such that dU/dt = rhs - pressure term
+!
+ 
+ use mpi_parameters
+ use grid_info
+ use dependent_variables
+ use pde_parameters
+ use rhs_variables
+ use intermediate_variables
+ use boundary_information
+ use counters_flags_etc
+ use dimensional_scales
+ use user_parameters
+
+ implicit none
+ include '../input/problem_size.h'
+
+ integer                                :: flag
+ integer                                :: ii,jj,kk
+ real                                   :: end_values(2),h
+ real, dimension(:,:,:,:), allocatable  :: work
+ allocate ( work(nx,ny,locnz,3) )
+  work(:,:,:,:) = 0.
+
+#if DEBUG_LEVEL >= 1
+ if(myid==0)write(0,*) 'hello world from ibr_1, Rot=',Rot
+#endif
+
+!Calculate  dU/dxi, dU/dy dU/dzeta and store in work arrays 1,2,3
+ flag=BC_flag(1,1)
+ h=Grid(0)%dxi
+!!! write(0,*) 'call compact_ddx, myid = ', myid
+ call compact_ddx(U,work(1,1,1,1),flag,end_values,nx,ny,locnz)
+
+ flag=BC_flag(1,2)
+ h=Grid(0)%deta
+!!! write(0,*) 'call compact_ddy, myid = ', myid
+ call compact_ddy(U,work(1,1,1,2),flag,end_values,nx,ny,locnz)
+
+ do j=1,ny
+  work(:,j,:,2)=work(:,j,:,2)/Grid(0)%y_eta(j)
+ enddo
+
+ flag=BC_flag(1,3)  
+ h=Grid(0)%dzeta
+!!! write(0,*) 'call compact_ddz, myid = ', myid
+ call compact_ddz_mpi(U,work(1,1,1,3),flag,end_values,nx,ny,locnz)
+
+! Add up the advective terms
+!!!  write(0,*) 'at ADD 1, myid = ', myid
+!!!  do kk=1,locnz
+!!!  do jj=1,ny
+!!!  do ii=1,nx
+!!!    work(ii,jj,kk,1) = 0.
+!!!    work(ii,jj,kk,2) = 0.
+!!!    work(ii,jj,kk,3) = 0.
+!!!    U(ii,jj,kk) = 0.
+!!!    V(ii,jj,kk) = 0.
+!!!    W(ii,jj,kk) = 0.
+!!!    if(work(ii,jj,kk,3) .lt. 0.) work(ii,jj,kk,3) = 0.
+!!!  if(ii.ge.257) then
+!!!  write(0,*) 'MYID',myid,'  II,JJ,KK,WORK = ',ii,jj,kk,work(ii,jj,kk,1),work(ii,jj,kk,2),work(ii,jj,kk,3)
+!!!  endif
+!!!    rhs1(ii,jj,kk,MM0) = -(work(ii,jj,kk,1) * U(ii,jj,kk) + &
+!!!                         work(ii,jj,kk,2) * V(ii,jj,kk) +   &
+!!!                         work(ii,jj,kk,3) * W(ii,jj,kk) )
+!!!  enddo
+!!!  enddo
+!!!  enddo
+  rhs1(:,:,:,MM0) = -( work(:,:,:,1)*U + work(:,:,:,2)*V + work(:,:,:,3)*W )
+
+! Add in the terms due to grid transformation
+!!!  write(0,*) 'at ADD 2, myid = ', myid
+  do j=1,ny
+   rhs1(1:nx,j,1:locnz,MM0) =                                    &
+     rhs1(1:nx,j,1:locnz,MM0) -                                  &
+   ( GM_uu(1:nx,1:locnz,1)*U(1:nx,j,1:locnz)*U(1:nx,j,1:locnz)   &
+   + GM_uw(1:nx,1:locnz,1)*U(1:nx,j,1:locnz)*W(1:nx,j,1:locnz)   &
+   + GM_ww(1:nx,1:locnz,1)*W(1:nx,j,1:locnz)*W(1:nx,j,1:locnz) )
+  enddo
+
+! Add on the buoyancy and rotation terms
+!!!  write(0,*) 'at ADD 3, myid = ', myid
+!!  do j=1,ny
+!!   rhs1(1:nx,j,1:locnz,MM0) =                                     &
+!!   rhs1(1:nx,j,1:locnz,MM0)                                       &
+!!+ Grid(0)%x_zeta(1:nx,1:locnz)*Ri*pd(1:nx,j,1:locnz)/Grid(0)%det_J(1:nx,1:locnz)  &
+!!+ Grid(0)%z_zeta(1:nx,1:locnz)*Rot*v(1:nx,j,1:locnz)/Grid(0)%det_J(1:nx,1:locnz)
+!!  enddo
+  do j=1,ny
+   rhs1(1:nx,j,1:locnz,MM0) =  rhs1(1:nx,j,1:locnz,MM0)  &
+       + Ri * pd(1:nx,j,1:locnz) * Grid(0)%x_zeta(1:nx,1:locnz)/Grid(0)%det_J(1:nx,1:locnz) &
+       + (Rot +  beta_window(j) ) * v(1:nx,j,1:locnz) * Grid(0)%z_zeta(1:nx,1:locnz)/Grid(0)%det_J(1:nx,1:locnz)
+  enddo
+
+  print*,'beta: max=',maxval(Rot+beta_window(:))
+
+ deallocate( work )    
+end subroutine ibr_1
+
+subroutine ibr_2
+#define DEBUG_LEVEL 1
+!     Routine to calculate the Inertia, Buoyancy, Rotation terms of 
+!     eta momentum equation, ignoring the pressure and dissipation terms
+!
+!     inputs:
+!            U,v,W contravariant velocities (x,z) and horizontal velocity (y)
+!            GM_uu the grid metric term in front of the U^2 term
+!            GM_uw the grid metric term in front of the U*W term
+!            GM_ww the grid metric term in front of the W^2 term
+!            Rot  the inverse Rossby number U/fL
+!            Ri   the Richardson number (N2*L^2)/U^2
+!            nx,ny,locnz  size of fields
+!            dxi,deta,dzeta  regular grid spacings on the computational mesh
+!            work    work array of at least (6*nx*ny*locnz,3*nx*ny*locnz) 
+!                    for evaluation of DNS terms, no evaluation of DNS terms
+!            x_zeta  derivative of cartesion x wrt grid coordinate zeta
+!            y_eta   derivative of cartesian y wrt coordinate eta
+!            z_zeta  derivative of cartesion z wrt grid coordinate zeta
+!            det_J determinant of transformation matrix
+!            BC_flag - derivative conditions and end values
+!
+!     output:
+!            rhs2 an (nx,ny,locnz) array such that dv/dt = rhs - pressure term
+!
+ 
+ use mpi_parameters
+ use grid_info
+ use dependent_variables
+ use intermediate_variables
+ use pde_parameters
+ use user_parameters
+ use rhs_variables
+ use boundary_information
+ use counters_flags_etc
+ use dimensional_scales
+
+ implicit none
+ include '../input/problem_size.h'
+
+ integer                                :: flag
+ real                                   :: end_values(2),h
+ real, dimension(:,:,:,:), allocatable  :: work
+ allocate ( work(nx,ny,locnz,3) )
+ work(:,:,:,:) = 0.
+ 
+#if DEBUG_LEVEL >= 1
+ if(myid==0) write(0,*) 'hello world from ibr_2'
+#endif
+
+!Calculate  dv/dxi, dv/dy dv/dzeta and store in work arrays 1,2,3
+ flag=BC_flag(1,1)
+ h=Grid(0)%dxi
+ call compact_ddx(v,work(1,1,1,1),flag,end_values,nx,ny,locnz)
+
+ flag=BC_flag(1,2)
+ h=Grid(0)%deta
+ call compact_ddy(v,work(1,1,1,2),flag,end_values,nx,ny,locnz)
+ do j=1,ny
+   work(:,j,:,2)=work(:,j,:,2)/Grid(0)%y_eta(j)
+ enddo
+
+ flag=BC_flag(1,3)  
+ h=Grid(0)%dzeta
+ call compact_ddz_mpi(v,work(1,1,1,3),flag,end_values,nx,ny,locnz)
+
+! Add up the advective terms
+  rhs2(:,:,:,MM0) = -( work(:,:,:,1)*U + work(:,:,:,2)*V + work(:,:,:,3)*W )
+	
+! Add on the buoyancy and rotation terms
+!!! xlv ajout effet beta
+!!  do j=1,ny
+!!   rhs2(1:nx,j,1:locnz,MM0) = rhs2(1:nx,j,1:locnz,MM0)         &
+!!   -Rot*( Grid(0)%x_xi(1:nx,1:locnz)*U(1:nx,j,1:locnz) +       &
+!!          Grid(0)%x_zeta(1:nx,1:locnz)*W(1:nx,j,1:locnz) )
+!!  enddo
+  do j=1,ny
+   rhs2(1:nx,j,1:locnz,MM0) = rhs2(1:nx,j,1:locnz,MM0)         &
+   -( Rot + beta_window(j) ) *( Grid(0)%x_xi(1:nx,1:locnz)*U(1:nx,j,1:locnz)  &
+   + Grid(0)%x_zeta(1:nx,1:locnz)*W(1:nx,j,1:locnz) )
+  enddo
+
+     
+  print*,'beta: max=',maxval(Rot+beta_window(:))
+
+
+ deallocate( work )    
+end subroutine ibr_2
+
+subroutine ibr_3
+#define DEBUG_LEVEL 1
+!     Routine to calculate the Inertia, Buoyancy, Rotation terms of 
+!     zeta momentum equation, ignoring the pressure and dissipation terms
+!
+!     inputs:
+!            U,v,W contravariant velocities (x,z) and horizontal velocity (y)
+!            GM_uu the grid metric term in front of the U^2 term
+!            GM_uw the grid metric term in front of the U*W term
+!            GM_ww the grid metric term in front of the W^2 term
+!            pd     perturbation density
+!            Rot  the inverse Rossby number U/fL
+!            Ri   the Richardson number (N2*L^2)/U^2
+!            nx,ny,locnz  size of fields
+!            dxi,deta,dzeta  regular grid spacings on the computational mesh
+!            work    work array of at least (6*nx*ny*locnz,3*nx*ny*locnz) 
+!                    for evaluation of DNS terms, no evaluation of DNS terms
+!            x_zeta  derivative of cartesion x wrt grid coordinate zeta
+!            y_eta   derivative of cartesian y wrt coordinate eta
+!            z_zeta  derivative of cartesion z wrt grid coordinate zeta
+!            det_J determinant of transformation matrix
+!            BC_flag - derivative conditions and end values
+!
+!     output:
+!            rhs3 an (nx,ny,locnz) array such that dU/dt = rhs - pressure term
+!
+ 
+ use mpi_parameters
+ use grid_info
+ use dependent_variables
+ use intermediate_variables
+ use pde_parameters
+ use rhs_variables
+ use boundary_information
+ use counters_flags_etc
+ use user_parameters
+ use dimensional_scales
+
+ implicit none
+ include '../input/problem_size.h'
+
+ integer                                :: flag
+ real                                   :: end_values(2),h
+ real, dimension(:,:,:,:), allocatable  :: work
+ real, dimension(:), allocatable        :: mean_value
+ allocate ( work(nx,ny,locnz,3) )
+ work(:,:,:,:) = 0.
+ allocate( mean_value(locnz) )
+ mean_value(:) = 0.
+
+#if DEBUG_LEVEL >= 1
+ if(myid==0) write(0,*) 'hello world from ibr_3'
+#endif
+
+!Calculate  dW/dxi, dW/dy dW/dzeta and store in work arrays 1,2,3
+ flag=BC_flag(1,1)
+ h=Grid(0)%dxi
+ call compact_ddx(W,work(1,1,1,1),flag,end_values,nx,ny,locnz)
+
+ flag=BC_flag(1,2)
+ h=Grid(0)%deta
+ call compact_ddy(W,work(1,1,1,2),flag,end_values,nx,ny,locnz)
+ do j=1,ny
+   work(:,j,:,2)=work(:,j,:,2)/Grid(0)%y_eta(j)
+ enddo
+
+ flag=BC_flag(1,3)  
+ h=Grid(0)%dzeta
+ call compact_ddz_mpi(W,work(1,1,1,3),flag,end_values,nx,ny,locnz)
+
+! Add up the advective terms
+  rhs3(:,:,:,MM0) = -( work(:,:,:,1)*U + work(:,:,:,2)*V + work(:,:,:,3)*W )
+	
+! Add in the terms due to grid transformation
+  do j=1,ny
+   rhs3(1:nx,j,1:locnz,MM0) =                                    &
+     rhs3(1:nx,j,1:locnz,MM0) -                                  &
+   ( GM_uu(1:nx,1:locnz,2)*U(1:nx,j,1:locnz)*U(1:nx,j,1:locnz)   &
+   + GM_uw(1:nx,1:locnz,2)*U(1:nx,j,1:locnz)*W(1:nx,j,1:locnz)   &
+   + GM_ww(1:nx,1:locnz,2)*W(1:nx,j,1:locnz)*W(1:nx,j,1:locnz) )
+  enddo
+
+! Compute the xy mean of the buoyancy term
+  do k=1,locnz
+   mean_value(k) = 0.0
+   do j=1,ny
+    do i=1,nx
+     mean_value(k) = mean_value(k) + Grid(0)%x_xi(i,k)*Ri*pd(i,j,k)/Grid(0)%det_J(i,k)
+    enddo
+   enddo
+   mean_value(k) = mean_value(k)/float(nx*ny)
+  enddo
+
+! Add on the buoyancy (- the mean component) and rotation terms
+!!! xlv ajout effet beta
+!!  do j=1,ny
+!!   do k=1,locnz
+!!    rhs3(1:nx,j,k,MM0) =             &
+!!      rhs3(1:nx,j,k,MM0)             &
+!!      - ( Grid(0)%x_xi(1:nx,k)*Ri*pd(1:nx,j,k)/Grid(0)%det_J(1:nx,k) - mean_value(k) )     &
+!!      -   Grid(0)%z_xi(1:nx,k)*Rot*v(1:nx,j,k)/Grid(0)%det_J(1:nx,k) 
+!!   enddo
+!!  enddo
+  do j=1,ny
+   do k=1,locnz
+    rhs3(1:nx,j,k,MM0) = rhs3(1:nx,j,k,MM0)  &
+      - ( Ri * Grid(0)%x_xi(1:nx,k)/Grid(0)%det_J(1:nx,k) * pd(1:nx,j,k) - mean_value(k) ) &
+      - ( Rot + beta_window(j) )* v(1:nx,j,k)* Grid(0)%z_xi(1:nx,k)/Grid(0)%det_J(1:nx,k)
+   enddo
+  enddo
+
+  print*,'beta: max=',maxval(Rot+beta_window(:))
+
+ deallocate( work,mean_value )    
+end subroutine ibr_3
+
+subroutine ibr_4
+!     Routine to calculate the rhs of the perturbation scalar 1 equation
+!     ignoring the diffusive term.
+!
+!     inputs:
+!            U,v,W contravariant velocities (x,z) and horizontal velocity (y)
+!            s1     perturbation scalar 1, s1_bar; the ambient profile
+!            nx,ny,locnz  size of fields
+!            dxi,deta,dzeta  regular grid spacings on the computational mesh
+!            x_zeta  derivative of cartesion x wrt grid coordinate zeta
+!            y_eta   derivative of cartesian y wrt coordinate eta
+!            z_zeta  derivative of cartesion z wrt grid coordinate zeta
+!            det_J determinant of transformation matrix
+!            BC_flag - derivative conditions and end values
+!
+!     output:
+!            rhs4 an (nx,ny,locnz) array such that ds1/dt = rhs - diffusive term
+!
+ 
+ use mpi_parameters
+ use grid_info
+ use dependent_variables
+ use pde_parameters
+ use rhs_variables
+ use boundary_information
+ use counters_flags_etc
+ use user_parameters
+
+ implicit none
+ include '../input/problem_size.h'
+
+ integer                                :: flag
+ real                                   :: end_values(2),h
+ real, dimension(:,:,:,:), allocatable  :: work
+ allocate (work(nx,ny,locnz,4))
+ work(:,:,:,:) = 0.
+ 
+#if DEBUG_LEVEL >= 1
+ if(myid==0) write(0,*) 'hello world from ibr_4'
+#endif
+
+!Store total scalar in work(:,:,:,4)
+ do j=1,ny
+  work(1:nx,j,1:locnz,4)=s1(1:nx,j,1:locnz)+s1_bar(1:nx,1:locnz)
+ enddo
+
+!Calculate  ds1/dxi, ds1/dy ds1/dzeta and store in work arrays 1,2,3
+ flag=BC_flag(1,1)
+ h=Grid(0)%dxi
+ call compact_ddx(work(:,:,:,4),work(1,1,1,1),flag,end_values,nx,ny,locnz)
+
+ flag=BC_flag(1,2)
+ h=Grid(0)%deta
+ call compact_ddy(work(:,:,:,4),work(1,1,1,2),flag,end_values,nx,ny,locnz)
+ do j=1,ny
+   work(:,j,:,2)=work(:,j,:,2)/Grid(0)%y_eta(j)
+ enddo
+
+ flag=BC_flag(1,3)  
+ h=Grid(0)%dzeta
+ call compact_ddz_mpi(work(:,:,:,4),work(1,1,1,3),flag,end_values,nx,ny,locnz)
+
+! Add up the advective terms
+  rhs4(:,:,:,MM0) = -( work(:,:,:,1)*U + work(:,:,:,2)*V + work(:,:,:,3)*W )
+	
+ deallocate( work )    
+end subroutine ibr_4
+
+subroutine ibr_5
+!     Routine to calculate the rhs of the perturbation scalar 2 equation
+!     ignoring the diffusive term.
+!
+!     inputs:
+!            U,v,W contravariant velocities (x,z) and horizontal velocity (y)
+!            s2     perturbation scalar 1, s2_bar; the ambient profile
+!            nx,ny,locnz  size of fields
+!            dxi,deta,dzeta  regular grid spacings on the computational mesh
+!            x_zeta  derivative of cartesion x wrt grid coordinate zeta
+!            y_eta   derivative of cartesian y wrt coordinate eta
+!            z_zeta  derivative of cartesion z wrt grid coordinate zeta
+!            det_J determinant of transformation matrix
+!            BC_flag - derivative conditions and end values
+!
+!     output:
+!            rhs5 an (nx,ny,locnz) array such that ds1/dt = rhs - diffusive term
+!
+ 
+ use mpi_parameters
+ use grid_info
+ use dependent_variables
+ use pde_parameters
+ use rhs_variables
+ use boundary_information
+ use counters_flags_etc
+ use user_parameters
+
+ implicit none
+ include '../input/problem_size.h'
+
+ integer                                :: flag
+ real                                   :: end_values(2),h
+ real, dimension(:,:,:,:), allocatable  :: work
+ allocate (work(nx,ny,locnz,4))
+ work(:,:,:,:) = 0.
+ 
+#if DEBUG_LEVEL >= 1
+ if(myid==0) write(0,*) 'hello world from ibr_5'
+#endif
+
+!Store total scalar in work(:,:,:,4)
+ do j=1,ny
+  work(1:nx,j,1:locnz,4)=s2(1:nx,j,1:locnz)+s2_bar(1:nx,1:locnz)
+ enddo
+
+!Calculate  ds2/dxi, ds2/dy ds2/dzeta and store in work arrays 1,2,3
+ flag=BC_flag(1,1)
+ h=Grid(0)%dxi
+ call compact_ddx(work(:,:,:,4),work(1,1,1,1),flag,end_values,nx,ny,locnz)
+
+ flag=BC_flag(1,2)
+ h=Grid(0)%deta
+ call compact_ddy(work(:,:,:,4),work(1,1,1,2),flag,end_values,nx,ny,locnz)
+ do j=1,ny
+   work(:,j,:,2)=work(:,j,:,2)/Grid(0)%y_eta(j)
+ enddo
+
+ flag=BC_flag(1,3)  
+ h=Grid(0)%dzeta
+ call compact_ddz_mpi(work(:,:,:,4),work(1,1,1,3),flag,end_values,nx,ny,locnz)
+
+! Add up the advective terms
+  rhs5(:,:,:,MM0) = -( work(:,:,:,1)*U + work(:,:,:,2)*V + work(:,:,:,3)*W )
+	
+ deallocate( work )    
+end subroutine ibr_5
+
Index: /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/init3D_netcdf.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/init3D_netcdf.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/init3D_netcdf.f90	(revision 6)
@@ -0,0 +1,380 @@
+subroutine init3D_netcdf
+#define DEBUG_LEVEL 1
+ use mpi_parameters
+ use grid_info
+ use dependent_variables
+ use counters_flags_etc
+ use dimensional_scales, length_scale=>L_scale
+ implicit none
+
+ include 'netcdf.inc'
+ include '../input/problem_size.h'
+
+ character(len=5)    ::  cnum
+ character(len=3)    ::  cid
+ character(len=80)   ::  filename
+ integer             ::  ncid,rcode,ntimes 
+
+!Dimensions and dimension variables
+ integer             ::  iid, jid, kid, timeid   ! Dimension ids 
+ integer             ::  tdimensionID            ! time dimension variable ids
+ integer             ::  jdimensionSIZE(1)         
+ integer             ::  tdimensionSIZE(1)       ! 1D arrays containing dimension sizes
+   
+!1D Variables 
+ integer             ::  yVarID,y_etaVarID
+ integer             ::  All1DVarSIZE(2)         ! 1D array containing j and k dimension sizes
+ integer             ::  start1D(1), count1D(1)  ! 1D arrays defining shape of 1D variable
+
+! x,z grid postion and 2d grid metric matrices
+ integer             :: xVarID,zVarID            ! x,z grid position ids
+ integer             :: x_xiVarID,x_zetaVarID      
+ integer             :: z_xiVarID,z_zetaVarID      
+ integer             :: s1_barVarID,s2_barVarID  ! reference scalar ids
+ integer             :: All2DVarSIZE(2)	         ! 2D array containing variables size
+ integer             :: start2D(2),count2D(2)    ! 2D arrays defining shape of 2D variable
+
+!4D Variables (x,y,z,t)
+ integer             ::  s1VarID,s2VarID,uVarID,vVarID,divVarID
+ integer             ::  wVarId,pVarID,KmVarID   ! 4D Variable ids
+ integer             ::  All4DVarSIZE(4)         ! 4D array containing variables size
+
+!Local arrays for holding data
+ real, dimension(:), allocatable      :: jdimValues
+ real, dimension(:,:), allocatable    :: hold2D 
+
+ allocate ( jdimValues(ny), hold2D(nx,locnz) )
+
+#if DEBUG_LEVEL >=1
+ if(myid==0) write(0,*) 'hello world from init3D_netcdf'
+#endif
+
+ ntimes=1  ! Each 3D file will contain 1 time slice.
+      
+!Create the filename: cfd3D_xxxxx_xxx
+ write(unit=cnum,fmt=100) istep
+100 format(I5.5)
+ write(unit=cid,fmt=101) myid
+101 format(I3.3)
+ if( numprocs > 1 ) then
+  filename='../output/cfd3D_'//cnum//'_'//cid   ! 
+ else
+  filename='../output/cfd3D_'//cnum
+ endif
+
+!Open a new file with write access.
+ if(myid .eq. 0 ) write(0,*) ' creating 3d netcdf files: ',cnum
+ rcode = NF_CREATE(filename, NF_CLOBBER, ncid)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!Dimensions Definition
+ rcode = NF_DEF_DIM(ncid, 'idimension', nx, iid)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_DEF_DIM(ncid, 'jdimension', ny, jid)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_DEF_DIM(ncid, 'kdimension', locnz, kid)         ! LOCAL PORTION
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_DEF_DIM(ncid, 'timedimension', ntimes, timeid)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!Initialize size arrays for spatial dimensions
+ jdimensionSIZE(1) = jid
+ tdimensionSIZE(1) = timeid
+
+!Define dimension variables
+ rcode = NF_DEF_VAR(ncid,'timedimension',NF_FLOAT,1,tdimensionSIZE,tdimensionID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,tdimensionID,'long_name',4,'time')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,tdimensionID,'units',7,'seconds')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!Define 1D time independent variables
+!Initialize size arrays for time independent variables
+ All1DVarSIZE(1) = jid    ! y related variables
+ All1DVarSIZE(2) = kid    ! x-z related variables
+
+ rcode = NF_DEF_VAR(ncid,'yVar',NF_FLOAT,1,All1DVarSIZE,yVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,yVarID,'long_name',1,'y')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,yVarID,'units',6,'meters')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+ rcode = NF_DEF_VAR(ncid,'y_etaVar',NF_FLOAT,1,All1DVarSIZE,y_etaVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,yVarID,'long_name',7,'dy/deta')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,yVarID,'units',6,'meters')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+
+!Define s1_bar and x,z grid position variables
+!Initialize size arrays for time independent variables
+ All2DVarSIZE(1) = iid
+ All2DVarSIZE(2) = kid
+
+ rcode = NF_DEF_VAR(ncid,'T_barVar',NF_FLOAT,2,All2DVarSIZE,s1_barVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,s1_barVarID,'long_name',5,'T_bar')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,s1_barVarID,'units',4,'deg C')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+if(num_scalars>1) then
+ rcode = NF_DEF_VAR(ncid,'Sal_barVar',NF_FLOAT,2,All2DVarSIZE,s2_barVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,s2_barVarID,'long_name',5,'S_bar')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,s2_barVarID,'units',3,'psu')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+endif
+
+ rcode = NF_DEF_VAR(ncid,'xVar',NF_FLOAT,2,All2DVarSIZE,xVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,xVarID,'long_name',1,'x')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,xVarID,'units',6,'meters')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+ rcode = NF_DEF_VAR(ncid,'zVar',NF_FLOAT,2,All2DVarSIZE,zVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,zVarID,'long_name',1,'z')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,zVarID,'units',6,'meters')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+ rcode = NF_DEF_VAR(ncid,'x_xiVar',NF_FLOAT,2,All2DVarSIZE,x_xiVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,x_xiVarID,'long_name',4,'x_xi')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,x_xiVarID,'units',6,'meters')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+ rcode = NF_DEF_VAR(ncid,'z_xiVar',NF_FLOAT,2,All2DVarSIZE,z_xiVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,z_xiVarID,'long_name',4,'z_xi')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,z_xiVarID,'units',6,'meters')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+ rcode = NF_DEF_VAR(ncid,'x_zetaVar',NF_FLOAT,2,All2DVarSIZE,x_zetaVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,x_zetaVarID,'long_name',6,'x_zeta')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,x_zetaVarID,'units',6,'meters')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+ rcode = NF_DEF_VAR(ncid,'z_zetaVar',NF_FLOAT,2,All2DVarSIZE,z_zetaVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,z_zetaVarID,'long_name',6,'z_zeta')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,z_zetaVarID,'units',6,'meters')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!Define 4D variables
+ All4DVarSIZE(1) = iid
+ All4DVarSIZE(2) = jid
+ All4DVarSIZE(3) = kid    ! LOCAL
+ All4DVarSIZE(4) = timeid ! 1 slice
+
+!perturbation temperature = s1Var
+ rcode = NF_DEF_VAR(ncid,'TempVar',NF_FLOAT,4,All4DVarSIZE,s1VarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,s1VarID,'long_name',11,'temperature')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,s1VarID,'units',4,'deg C')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+if(num_scalars>1) then
+!perturbation salinity = s2Var
+ rcode = NF_DEF_VAR(ncid,'SalinityVar',NF_FLOAT,4,All4DVarSIZE,s2VarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,s2VarID,'long_name',8,'salinity')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,s2VarID,'units',3,'psu')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+endif
+
+!x velocity = uVar
+ rcode = NF_DEF_VAR(ncid,'uVar',NF_FLOAT,4,All4DVarSIZE,uVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,uVarID,'long_name',1,'u')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,uVarID,'units',3,'m/s')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!y velocity = vVar
+ rcode = NF_DEF_VAR(ncid,'vVar',NF_FLOAT,4,All4DVarSIZE,vVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,vVarID,'long_name',1,'v')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,vVarID,'units',3,'m/s')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!z velocity = wVar
+ rcode = NF_DEF_VAR(ncid,'wVar',NF_FLOAT,4,All4DVarSIZE,wVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,wVarID,'long_name',1,'w')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,wVarID,'units',3,'m/s')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!pressure = pVar
+ rcode = NF_DEF_VAR(ncid,'pVar',NF_FLOAT,4,All4DVarSIZE,pVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,pVarID,'long_name',8,'pressure')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,pVarID,'units',7,'kg/ms^2')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!Km = KmVar
+ rcode = NF_DEF_VAR(ncid,'KmVar',NF_FLOAT,4,All4DVarSIZE,KmVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,KmVarID,'long_name',14,'eddy viscosity')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,KmVarID,'units',5,'m^2/s')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!div(u) = divVar
+ rcode = NF_DEF_VAR(ncid,'divVar',NF_FLOAT,4,All4DVarSIZE,divVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,divVarID,'long_name',10,'divergence')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,divVarID,'units',3,'1/s')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!End define mode
+ rcode = NF_ENDDEF(ncid)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!Close the file
+ rcode = NF_CLOSE(ncid)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!**************************************************************
+!**************************************************************
+!**************************************************************
+
+!Reopen the file and write local portion of time independent data
+ rcode = NF_OPEN(filename,NF_WRITE,ncid)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+ rcode = NF_INQ_VARID(ncid,'xVar',xVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_INQ_VARID(ncid,'yVar',yVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_INQ_VARID(ncid,'zVar',zVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+ rcode = NF_INQ_VARID(ncid,'x_xiVar',x_xiVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_INQ_VARID(ncid,'x_zetaVar',x_zetaVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_INQ_VARID(ncid,'y_etaVar',y_etaVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_INQ_VARID(ncid,'z_xiVar',z_xiVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_INQ_VARID(ncid,'z_zetaVar',z_zetaVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+ rcode = NF_INQ_VARID(ncid,'T_barVar',s1_barVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+if(num_scalars>1) then
+ rcode = NF_INQ_VARID(ncid,'Sal_barVar',s2_barVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+endif
+
+!store y values in temp array
+ jdimValues(1:ny) = Grid(0)%y(1:ny)*length_scale
+!write values to file
+ start1D(1) = 1
+ count1D(1) = ny
+ rcode = NF_PUT_VARA_REAL(ncid,yVarID,start1D,count1D,jdimValues)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!store y_eta values in temp array
+ jdimValues(1:ny) = Grid(0)%y_eta(1:ny)*length_scale
+ rcode = NF_PUT_VARA_REAL(ncid,y_etaVarID,start1D,count1D,jdimValues)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!Initialize size arrays for local xz data
+ start2D(1) = 1
+ start2D(2) = 1
+ count2D(1) = nx
+ count2D(2) = locnz 
+
+!Write (dimensional) s1_bar values
+!!! hold2D(:,:) = s1_bar(:,:)*s1_scale
+!!! xlvlod adimensionnement s1_bar
+!!! hold2D(:,:) = s1_bar(:,:)
+ hold2D(:,:) = s1_bar(:,:) * s1_scale
+!Write values to file
+ rcode = NF_PUT_VARA_REAL(ncid,s1_barVarID,start2D,count2D,hold2D)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+if(num_scalars>1) then
+!Write (dimensional) s2_bar values
+!!! hold2D(:,:) = s2_bar(:,:)*s2_scale
+!!! xlv adimensionnement s2_bar
+!!! hold2D(:,:) = s2_bar(:,:)
+ hold2D(:,:) = s2_bar(:,:) * s2_scale
+!Write values to file
+ rcode = NF_PUT_VARA_REAL(ncid,s2_barVarID,start2D,count2D,hold2D)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+endif
+
+!Write x grid point values
+ hold2D(:,:) = Grid(0)%x(:,:)*length_scale
+!Write values to file
+ rcode = NF_PUT_VARA_REAL(ncid,xVarID,start2D,count2D,hold2D)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!Write z grid point values
+ hold2D(:,:) = Grid(0)%z(:,:)*length_scale
+!Write values to file
+ rcode = NF_PUT_VARA_REAL(ncid,zVarID,start2D,count2D,hold2D)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!Write x_xi grid point values
+ hold2D(:,:) = Grid(0)%x_xi(:,:)*length_scale
+!Write values to file
+ rcode = NF_PUT_VARA_REAL(ncid,x_xiVarID,start2D,count2D,hold2D)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!Write x_zeta grid point values
+ hold2D(:,:) = Grid(0)%x_zeta(:,:)*length_scale
+!Write values to file
+ rcode = NF_PUT_VARA_REAL(ncid,x_zetaVarID,start2D,count2D,hold2D)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!Write z_xi grid point values
+ hold2D(:,:) = Grid(0)%z_xi(:,:)*length_scale
+!Write values to file
+ rcode = NF_PUT_VARA_REAL(ncid,z_xiVarID,start2D,count2D,hold2D)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!Write z_zeta grid point values
+ hold2D(:,:) = Grid(0)%z_zeta(:,:)*length_scale
+!Write values to file
+ rcode = NF_PUT_VARA_REAL(ncid,z_zetaVarID,start2D,count2D,hold2D)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+
+!Close netcdf file
+ rcode = NF_CLOSE(ncid)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+       
+ deallocate ( jdimValues, hold2D )
+end subroutine init3D_netcdf
+
+subroutine handle_err(status)
+ include 'netcdf.inc'
+ integer :: status
+ if ( status /= NF_NOERR ) then
+  write(0,*) NF_STRERROR(status)
+  write(0,*) 'stopping after netcdf error'
+  STOP
+ endif
+end subroutine handle_err
Index: /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/initialize_cfd.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/initialize_cfd.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/initialize_cfd.f90	(revision 6)
@@ -0,0 +1,318 @@
+subroutine initialize_cfd
+#define DEBUG_FLAG 3
+
+  use  grid_info
+  use  mpi_parameters
+  use  integration_weights
+  use  dimensional_scales
+  use  user_parameters
+  use  pde_parameters
+  use  dependent_variables
+  use  intermediate_variables
+  use  rhs_variables
+  use  boundary_information
+  use  counters_flags_etc
+  use  stress_parameters
+
+  integer               :: rank,flag
+  real                  :: end_values(2),gamma,drdz
+  real                  :: dy
+
+  character(len=3)    :: cid
+  character(len=80)   :: filename
+
+!!!  real                  :: maxu,minu,maxv,minv
+
+  include '../input/problem_size.h'
+  include 'mpif.h'
+  include '../input/params.h'
+
+  !module integration_weights
+  allocate (  W1(nx), W2(ny), W3(locnz) )
+
+  !module dependent_variables
+  allocate ( U(nx,ny,locnz),v(nx,ny,locnz) )
+  allocate ( W(nx,ny,locnz),pd(nx,ny,locnz) )
+  allocate ( pressure(nx,ny,locnz,2) )
+  allocate ( s1(nx,ny,locnz),s2(nx,ny,locnz) )
+  allocate ( s1_bar(nx,locnz) )          ! not a dep. variable, but goes w/ s1
+  allocate ( s1_bar_xi(nx,locnz) )      
+  allocate ( s1_bar_zeta(nx,locnz) )
+  allocate ( s2_bar(nx,locnz) )          ! not a dep. variable, but goes w/ s2
+  allocate ( s2_bar_xi(nx,locnz) )      
+  allocate ( s2_bar_zeta(nx,locnz) )
+  allocate ( rho_bar(nx,locnz) )         ! not a dep. variable, but goes w/ pd
+
+
+  !module intermediate_variables
+  allocate ( div_u(nx,ny,locnz,2),b(nx,ny,locnz) )
+  allocate ( L_of_p(nx,ny,locnz) )
+  allocate ( grad_x(nx,ny,locnz) )
+  allocate ( grad_y(nx,ny,locnz) )
+  allocate ( grad_z(nx,ny,locnz) )
+  allocate ( u_star(nx,ny,locnz) )
+  allocate ( v_star(nx,ny,locnz) )
+  allocate ( w_star(nx,ny,locnz) )
+  allocate ( u_star_old(ny,locnz,2) )
+  allocate ( v_star_old(nx,locnz,2) )
+  allocate ( w_star_old(nx,ny,2) )
+
+  !module rhs_variables
+  allocate ( rhs1(nx,ny,locnz,AB_order) )
+  allocate ( rhs2(nx,ny,locnz,AB_order) )
+  allocate ( rhs3(nx,ny,locnz,AB_order) )
+  allocate ( rhs4(nx,ny,locnz,AB_order) )
+  allocate ( rhs5(nx,ny,locnz,AB_order) )
+
+  !module pde_parameters
+  allocate ( K_m(nx,ny,locnz) )
+
+  ! module boundary_information
+!!!  allocate ( boundary_type1(ny,locnz),boundary_type2(ny,locnz) )
+!!!  allocate ( boundary_type3(nx,locnz),boundary_type4(nx,locnz) )
+!!!  allocate ( boundary_type5(nx,ny),boundary_type6(nx,ny) )
+!!!  allocate ( BC_pressure1(ny,locnz),BC_pressure2(ny,locnz) )
+!!!  allocate ( BC_pressure3(nx,locnz),BC_pressure4(nx,locnz) )
+!!!  allocate ( BC_pressure5(nx,ny),BC_pressure6(nx,ny) )
+!!!  allocate ( BC_vel1(ny,locnz),BC_vel2(ny,locnz) )
+!!!  allocate ( BC_vel3(nx,locnz),BC_vel4(nx,locnz) )
+!!!  allocate ( BC_vel5(nx,ny),BC_vel6(nx,ny) )
+!!!  allocate ( BC_scalar1(ny,locnz,num_scalars),BC_scalar2(ny,locnz,num_scalars) )
+!!!  allocate ( BC_scalar3(nx,locnz,num_scalars),BC_scalar4(nx,locnz,num_scalars) )
+!!!  allocate ( BC_scalar5(nx,ny,num_scalars),BC_scalar6(nx,ny,num_scalars) )
+  allocate ( BC_values1(ny,locnz,3+num_scalars),BC_values2(ny,locnz,3+num_scalars) )
+  allocate ( BC_values3(nx,locnz,3+num_scalars),BC_values4(nx,locnz,3+num_scalars) )
+  allocate ( BC_values5(nx,ny,3+num_scalars),BC_values6(nx,ny,3+num_scalars) )
+  allocate ( phiY(nx,locnz,6,3,5) )
+  allocate ( inflow(nx,locnz,3+num_scalars) )
+
+
+  !*******************************************************************
+  write(0,*) 'IN INITIALIZE CFD, DEBUG_FLAG, myid = ', DEBUG_FLAG,myid
+!!!#if DEBUG_FLAG >= 1
+!!!  if(myid .eq. 0 ) then
+!!!   write(0,*) '   '
+  write(0,*) 'hello world from initialize_cfd, myid =', myid
+!!!  endif
+!!!#endif
+
+  ! Check sizing parameters for obvious problems.
+  if( mod(nz,numprocs) /= 0 ) then
+     write(0,*) 'nz must be divisible by numprocs'
+     STOP
+  endif
+  if( mod(nx-1,numprocs) /= 0 ) then
+     write(0,*) 'nx-1 must be divisible by numprocs for xyfft logic'
+     STOP
+  endif
+  if( locnz < 4 ) then
+     write(0,*) 'currently, locnz >= 4'
+     write(0,*) 'WILL TRY TO CARRY ON, BE CAREFUL!!!'
+  endif
+  if( AB_order /= 2 .and. AB_order /= 3 .and. AB_order /= 4) then
+     write(0,*) 'only 2nd, 3rd or 4th order Adams Bashforth time stepping is allowed'
+     STOP
+  endif
+
+  init_derived_type=0    ! MPI derived data types not yet defined
+  subslice=-9999         ! MPI derived data types not yet defined, dummy value
+
+  ! Each processor imports the main parameter file:
+!!! xlv definition de pi dans params.h
+!!!  pi=acos(-1.0)
+
+  ! set some sizing parameters that depend on case xy periodic
+  do i=0,Grid(0)%n_mg_levels-1
+
+     if( boundary_type2(1,1)=='periodic' .and.  boundary_type2(1,1)=='periodic' ) then
+        Grid(i)%n1_it=1
+        Grid(i)%n2_it=1
+        Grid(i)%n3_it=Grid(i)%n3     ! sizes for U&V  arrays in matvec
+     else
+        Grid(i)%n1_it=Grid(i)%n1
+        Grid(i)%n2_it=Grid(i)%n2
+        Grid(i)%n3_it=Grid(i)%locn3     ! sizes for U&V  arrays in matvec
+     endif
+
+     ! setup the PIM data for iterative solves at each grid level
+     if( boundary_type2(1,1)=='periodic' .and. boundary_type4(1,1)=='periodic' ) then
+        lda = Grid(i)%n3
+        loclen = lda            ! iterations local to each processor
+        pret = 0                ! preconditioning type 1=left, 0 =none
+        stopt = 4               ! stop criteria (4 fastest, GMRES has its own)
+        tol = 1.0E-19           ! stopping tolerance eps
+        basis=maxits            ! "
+     else  ! iterative method for 3d pressur field
+        lda = Grid(i)%n1 * Grid(i)%n2 * Grid(i)%n3
+        loclen = LDA/numprocs
+        pret = 0                ! preconditioning type 1=left, 0 =none
+        stopt = 4               ! stop criteria (4 fastest, GMRES has its own)
+        tol = 1.0E-19           ! stopping tolerance eps
+        basis=maxits            ! "
+     endif
+     !  REMOVING BECAUSE WE WILL USE SOLVE_FOR_XYPER_PRESSURE INSTEAD
+     !   CALL PIMSSETPAR(Grid(i)%ipar,Grid(i)%spar,  &
+     !                   lda,lda,loclen,loclen,basis,numprocs,myid,pret,stopt,maxits,tol)
+
+  enddo
+
+
+  !!! Domaine
+  call MPI_ALLREDUCE(Grid(0)%x(nx,1)*L_scale   ,Lx,1,MPI_REAL,MPI_MAX,comm,ierr)
+  call MPI_ALLREDUCE(Grid(0)%y(ny)*L_scale      ,Ly,1,MPI_REAL,MPI_MAX,comm,ierr)
+  call MPI_ALLREDUCE(Grid(0)%z(1,locnz)*L_scale,Lz,1,MPI_REAL,MPI_MAX,comm,ierr)
+  print*,'Domain : Lx,Ly,Lz=',Lx,Ly,Lz
+
+
+#if DEBUG_FLAG >= 1
+  if(myid .eq. 0 ) write(0,*) ' initialize_cfd: user parameter file ../input/params.h included '
+#endif
+
+  write(0,*) 'derive inside initialize_cfd, nu,kappa1,kappa2,myid =', nu,kappa1,kappa2,myid
+  ! Derive dimensionless parameters given user input:
+  Re = U_scale*L_scale/nu               ! bulk Reynolds number
+  Pr1 = nu/kappa1                       ! "Prandtl" number for scalar 1
+  Pr2 = nu/kappa2                       ! "Prandtl" number for scalar 2
+  if( closure_flag .eq. 'LES' ) then
+     C_s = 0.17   ! see Kaltenbach et el JFM 94, or
+     ! Lesieur & Metais Ann Rev of Fluid Mech vol28
+     Pr = 1.0
+  endif
+  Ri = (Nsquared * L_scale**2)/U_scale**2     ! bulk Richardson number
+  Rot = f*L_scale/U_scale                     ! bulk inverse Rossby number
+  beta_tilde = beta_dimensional * L_scale**2/U_scale
+  allocate ( beta_window(ny) )
+  dy = Grid(0)%y(2)*L_scale - Grid(0)%y(1)*L_scale
+  beta_window(:) = beta_tilde * (Grid(0)%y(:)-Ly/(2*L_scale))  * tanh ( (Grid(0)%y(:)*L_scale-5*dy)/(Ly/100) ) 
+
+#if DEBUG_FLAG >= 1
+  if(myid .eq. 0 ) write(0,*) ' Re, Pr1, Pr2, Ri, Rot, beta_tilde : ', Re, Pr1, Pr2, Ri, Rot, beta_tilde
+#endif
+
+!!! Enregistrement de f_of_y pour chaque processeur (pour vérification)
+  write(unit=cid,fmt=501) myid
+  501 format(I3.3)
+  filename='../output/beta_effect_'//cid
+  open(905,file=filename,status='unknown')
+  do j=1,ny
+    write(905,*) Grid(0)%y(j)*L_scale, ( Rot + beta_window(j) ) / (L_scale/U_scale)
+  enddo
+ close(905)
+
+  
+  if( restart_flag == 'no' ) then
+
+     ! Set the ambient stratification profiles s1_bar(x,z), s2_bar(x,z), d'less values returned         
+     call set_ambient_stratification
+     ! set rho_bar(x,z) to -999.9  (will be overwritten in 1st call to equation_of_state)
+     rho_bar(:,:)=-999.9
+     ! Each processor initializes its portion of the dep. variable arrays
+     if( ics_flag == 'homogeneous' ) then
+        U=0.0
+        v=0.0
+        W=0.0
+        s1=0.0
+        if( num_scalars > 1 ) s2=0.0
+        pressure=0.0
+
+     else
+
+        !  read in ics data
+
+     endif
+    
+     ! call equation_of_state to compute d'less pd and rho_bar
+     call equation_of_state
+
+     print*,'[rhobar]=',minval(rho_bar),maxval(rho_bar)
+
+
+     ! Compute xi and zeta derivatives of s1_bar and s2_bar
+     flag=1;end_values=-1e32
+
+#if DEBUG_FLAG >= 1
+     if(myid .eq. 0 ) write(0,*) ' initialize_cfd: about to differentiate s1_bar & s2_bar '
+#endif
+
+
+     call compact_ddx(s1_bar,s1_bar_xi,flag,end_values,nx,1,locnz)
+     if(num_scalars>1) call compact_ddx(s2_bar,s2_bar_xi,flag,end_values,nx,1,locnz)
+
+#if DEBUG_FLAG >= 1
+     if(myid .eq. 0 ) write(0,*) ' initialize_cfd: return from ddx '
+#endif
+
+     call compact_ddz_mpi(s1_bar,s1_bar_zeta,flag,end_values,nx,1,locnz)
+     if(num_scalars>1) call compact_ddz_mpi(s2_bar,s2_bar_zeta,flag,end_values,nx,1,locnz)
+
+     print*,'minval(s1_bar_zeta),maxval(s1_bar_zeta)=',minval(s1_bar_zeta),maxval(s1_bar_zeta)
+     print*,'minval(s2_bar_zeta),maxval(s2_bar_zeta)=',minval(s2_bar_zeta),maxval(s2_bar_zeta)
+
+
+#if DEBUG_FLAG >= 1
+     if(myid .eq. 0 ) write(0,*) ' initialize_cfd: return from ddz '
+#endif
+
+
+     init_derived_type=0    ! MPI derived data types not yet defined
+     subslice=-9999         ! MPI derived data types not yet defined, dummy value
+
+#if DEBUG_FLAG >= 1
+     if(myid .eq. 0 ) write(0,*) ' initialize_cfd: differentiated s1/s2_bar '
+#endif
+
+
+  endif    ! end restart_flag == 'no' block
+
+  ! Each processor fills weight arrays for spatial integration dxi,deta&dzeta:
+  call set_integration_weights(Grid(0)%dxi,Grid(0)%deta,Grid(0)%dzeta)
+
+
+  ! Set integer BC flags
+  BC_flag(:,:)=1   ! default=no end conditions specified
+  if( boundary_type1(1,1) == 'periodic' ) BC_flag(:,1)=5
+  if( boundary_type3(1,1) == 'periodic' ) BC_flag(:,2)=5
+  if( boundary_type5(1,1) == 'periodic' ) BC_flag(:,3)=5
+
+  ! Initial values of counters etc
+  if( restart_flag == 'no' ) then
+     istart=0
+     iend=istart+nsteps
+     new=1;old=2
+     MM0=1;MM1=2;MM2=3;MM3=4
+     step_flag='EULER'
+     write3D_counter=1
+
+     ! Intermediate variables initial data values
+     b=0.0
+     div_u=0.0
+     u_star=0.0
+     v_star=0.0
+     w_star=0.0
+     u_star_old=0.0
+     v_star_old=0.0
+     w_star_old=0.0
+     grad_x=0.0
+     grad_y=0.0
+     grad_z=0.0
+     phiY=0.0
+  elseif( restart_flag == 'yes' ) then
+     call restart
+!!!      maxu = MAXVAL(u(:,:,:))
+!!!      minu = MINVAL(u(:,:,:))
+!!!      maxv = MAXVAL(v(:,:,:))
+!!!      minv = MINVAL(v(:,:,:))
+!!!      write(0,*) 'MAXMIN',myid,maxu,minu,maxv,minv
+  endif
+
+
+  ! Dimensionless eddy viscosity 
+  K_m(:,:,:)=1./Re
+
+#if DEBUG_FLAG >= 1
+  if(myid .eq. 0 ) write(0,*) ' initialize_cfd:  calling initialize immersed bdry'
+#endif
+
+  call initialize_immersed_bdry
+
+end subroutine initialize_cfd
Index: /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/initialize_grids.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/initialize_grids.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/initialize_grids.f90	(revision 6)
@@ -0,0 +1,260 @@
+subroutine initialize_grids(testflag)     ! testflag=-999 -> explicitly set simple cartesian grid
+#define DEBUG_LEVEL 3
+
+use grid_info
+use immersed_boundary
+use mpi_parameters
+use boundary_information
+use counters_flags_etc, only:maxits
+implicit none
+
+integer			:: h,i,j,k,testflag
+integer         	:: lda,loclen,basis,pret,stopt,ierr
+real            	:: tol,xx
+real,allocatable        :: scratch1(:),scratch2(:)
+                  
+
+include 'mpif.h'
+include '../input/problem_size.h'
+include '../input/grid_data.h'      ! data statement specifying grid_dimensions(0:nlevels-1,3)
+
+#if DEBUG_LEVEL >= 1
+ if(myid == 0 ) then
+  write(0,*) ' '
+  write(0,*) ' '
+  write(0,*) 'hello world from initialize_grids, nlevels=',nlevels
+ endif
+#endif
+
+if( myid==0 ) open(1,file='../output/grid_level_data')
+allocate( Grid(0:nlevels-1) )
+
+do h=0,nlevels-1
+
+  Grid(h)%n_mg_levels = nlevels
+  Grid(h)%level=h
+  Grid(h)%n1 = grid_dimensions(h,1)
+  Grid(h)%n2 = grid_dimensions(h,2)
+  Grid(h)%n3 = grid_dimensions(h,3)
+  Grid(h)%locn3 = grid_dimensions(h,3)/numprocs
+
+  Grid(h)%dxi    = 1.0/float( Grid(h)%n1-1 )
+  Grid(h)%deta  = 1.0/float( Grid(h)%n2-1 )
+  Grid(h)%dzeta = 1.0/float( Grid(h)%n3-1 )
+
+#if DEBUG_LEVEL >= 1
+ if(myid == 0 ) then
+  write(0,*) '**** GRID LEVEL ',h
+  write(0,*) '    n1:  ',Grid(h)%n1
+  write(0,*) '    n2:  ',Grid(h)%n2
+  write(0,*) '    n3:  ',Grid(h)%n3
+  write(0,*) '    locn3:  ',Grid(h)%locn3
+  write(0,*) '    dxi:  ',Grid(h)%dxi
+  write(0,*) '    deta:  ',Grid(h)%deta
+  write(0,*) '    dzeta:  ',Grid(h)%dzeta
+  write(0,*) '***************************'
+  write(0,*) ' '
+ endif 
+#endif
+
+!allocate arrays for grid level h
+
+  allocate( Grid(h)%x( Grid(h)%n1, Grid(h)%locn3 ), Grid(h)%z( Grid(h)%n1 , Grid(h)%locn3 )  )
+  allocate( Grid(h)%x_xi( Grid(h)%n1, Grid(h)%locn3 ), Grid(h)%x_zeta( Grid(h)%n1, Grid(h)%locn3 )  )
+  allocate( Grid(h)%z_xi( Grid(h)%n1, Grid(h)%locn3 ), Grid(h)%z_zeta( Grid(h)%n1, Grid(h)%locn3 )  )
+  allocate( Grid(h)%y( Grid(h)%n2 )  , Grid(h)%y_eta( Grid(h)%n2 )  )
+
+  allocate( Grid(h)%J_matrix( Grid(h)%n1, Grid(h)%locn3, 2, 2 )  )
+  allocate( Grid(h)%det_J( Grid(h)%n1, Grid(h)%locn3 )  )
+
+  allocate( Grid(h)%Cxx( Grid(h)%n1, Grid(h)%locn3 ), Grid(h)%Czz( Grid(h)%n1 , Grid(h)%locn3 )  )
+  allocate( Grid(h)%Cyy( Grid(h)%n2 ) )
+
+! allocate( Grid(h)%H( Grid(h)%n1, Grid(h)%n2 )  )
+  allocate( Grid(h)%v( Grid(h)%n1, Grid(h)%n2, Grid(h)%locn3 )   )
+  allocate( Grid(h)%f( Grid(h)%n1, Grid(h)%n2, Grid(h)%locn3 )   )
+  allocate( Grid(h)%scratch( Grid(h)%n1, Grid(h)%n2, Grid(h)%locn3 )   )
+
+  allocate( Grid(h)%ddx(7, Grid(h)%n1), Grid(h)%filt_x(7, Grid(h)%n1) )
+  allocate(Grid(h)%ddy(7, Grid(h)%n2), Grid(h)%filt_y(7, Grid(h)%n2) )
+  allocate(Grid(h)%ddz(7, Grid(h)%n3), Grid(h)%filt_z(7, Grid(h)%n3) )
+  allocate(Grid(h)%piv_dx(Grid(h)%n1), Grid(h)%piv_fx(Grid(h)%n1) )
+  allocate(Grid(h)%piv_dy(Grid(h)%n2), Grid(h)%piv_fy(Grid(h)%n2) )
+  allocate(Grid(h)%piv_dz(Grid(h)%n3), Grid(h)%piv_fz(Grid(h)%n3) )
+
+! setup & factor differentiation arrays 
+  call setup_compact_schemes(h)
+
+! if h=0, read in fine grid data
+! Each processor reads and stores its local portion of the grid data:
+ if( h == 0 ) then
+! these next three arrays are needed in the xyperiodic z stretched case
+      allocate( global_Czz( nz ) )
+      allocate( global_Cz( nz ) )
+      allocate( global_det_J( nz ) )
+      allocate( GM_uu(nx,locnz,2), GM_uw(nx,locnz,2), GM_ww(nx,locnz,2) )
+       if( testflag == -999 ) then
+!        include '../input/test_grid.h'  ! simple cartesian grid, Poisson coefficients
+       else  ! read grid data from input file
+        do i=0,numprocs-1
+         call read_grid_data('../input/grid_coords',i)
+        enddo
+        call MPI_BARRIER(comm,ierr) ! all procesors have now read the file
+       endif
+!      for cartesian grids, set values identically to zero
+       Grid(0)%z_xi=0.0
+       Grid(0)%x_zeta=0.0
+
+! Make Czz,Det_J and d/dzeta Czz available globally
+  allocate( scratch1(nz),scratch2(nz) )
+  global_Cz(1:nz)=0.
+!Czz
+  scratch1(1:nz)=0.0
+  scratch1( myid*locnz+1:(myid+1)*locnz ) = Grid(0)%Czz(1,1:locnz)  ! assume no variation with i
+  call MPI_ALLREDUCE(scratch1,scratch2,nz,MPI_REAL,MPI_SUM,comm,ierr) 
+  global_Czz=scratch2
+!det_J
+  scratch1(1:nz)=0.0
+  scratch1( myid*locnz+1:(myid+1)*locnz ) = Grid(0)%det_J(1,1:locnz)  ! assume no variation with i
+  call MPI_ALLREDUCE(scratch1,scratch2,nz,MPI_REAL,MPI_SUM,comm,ierr) 
+  global_det_J=scratch2
+
+  xx=1./(24.*Grid(0)%dzeta)
+  do k=3,nz-2
+   global_Cz(k)=( 2.*global_Czz(k-2) -16.*global_Czz(k-1) + 16.*global_Czz(k+1) -2.*global_Czz(k+2) )*xx
+  enddo
+  global_Cz(1)=(-50.*global_Czz(1) +96.*global_Czz(2) - 72.*global_Czz(3) +32.*global_Czz(4) -6.*global_Czz(5) )*xx
+  global_Cz(2)=(-6.*global_Czz(1) -20.*global_Czz(2) + 36.*global_Czz(3) -12.*global_Czz(4) +2.*global_Czz(5) )*xx
+  global_Cz(nz)=(50.*global_Czz(nz) -96.*global_Czz(nz-1) +    &
+                 72.*global_Czz(nz-2) -32.*global_Czz(nz-3) +6.*global_Czz(nz-4) )*xx
+  global_Cz(nz-1)=(6.*global_Czz(nz) +20.*global_Czz(nz-1)     &
+                   - 36.*global_Czz(nz-2) +12.*global_Czz(nz-3) -2.*global_Czz(nz-4) )*xx
+
+!  if(myid==0) then
+!   write(0,*)'**********   k, Czz, Cz   ***************'
+!   do k=1,nz
+!    write(0,*) k,global_Czz(k),global_Cz(k)
+!   enddo
+!   write(0,*)'*****************************************'
+!  endif
+
+ endif  ! end statements exclusive to h=0 
+
+enddo    ! end loop over h levels
+
+! restrict (h-1) fine grid data to coarse grids (h)
+do h=1,nlevels-1   ! loop over coarse grids
+ if(myid==0) then
+  write(0,*) '  Restricting grid data to level ',h,' of 0:',nlevels-1
+  write(0,*) ' Lx,Ly,Lz : ',Grid(0)%x(nx,1),Grid(0)%y(ny),Grid(0)%z(1,locnz)
+ endif
+ restriction_method = 'injection'
+ call restrictXZ( Grid(h-1)%z, Grid(h)%z, h-1 )
+ call restrictXZ( Grid(h-1)%z_xi, Grid(h)%z_xi, h-1 )
+ call restrictXZ( Grid(h-1)%z_zeta, Grid(h)%z_zeta, h-1 )
+ call restrictXZ( Grid(h-1)%x, Grid(h)%x, h-1 )
+ call restrictXZ( Grid(h-1)%x_xi, Grid(h)%x_xi, h-1 )
+ call restrictXZ( Grid(h-1)%x_zeta, Grid(h)%x_zeta, h-1 )
+ call restrictXZ( Grid(h-1)%Cxx, Grid(h)%Cxx, h-1 )
+ call restrictXZ( Grid(h-1)%Czz, Grid(h)%Czz, h-1 )
+ call restrictXZ( Grid(h-1)%det_J, Grid(h)%det_J, h-1 )
+ call restrictXZ( Grid(h-1)%J_matrix(1,1,1,1), Grid(h)%J_matrix(1,1,1,1), h-1 )
+ call restrictXZ( Grid(h-1)%J_matrix(1,1,1,2), Grid(h)%J_matrix(1,1,1,2), h-1 )
+ call restrictXZ( Grid(h-1)%J_matrix(1,1,2,1), Grid(h)%J_matrix(1,1,2,1), h-1 )
+ call restrictXZ( Grid(h-1)%J_matrix(1,1,2,2), Grid(h)%J_matrix(1,1,2,2), h-1 )
+
+ call restrictY( Grid(h-1)%y, Grid(h)%y, h-1 )
+ call restrictY( Grid(h-1)%y_eta, Grid(h)%y_eta, h-1 )
+ call restrictY( Grid(h-1)%Cyy, Grid(h)%Cyy, h-1 )
+
+enddo
+ if(myid==0) then
+  write(0,*) '  Done Restricting grid data '
+ endif
+
+
+#if DEBUG_LEVEL >= 2
+
+ do h=0,nlevels-2
+
+ write(1,*) ' RESTRICTION TEST  Z direction, from level',h
+ do j=1,Grid(h)%n2
+  Grid(h)%v(:,j,:)=Grid(h)%z   ! 3D version of z
+ enddo
+   call restrict( Grid(h)%v, Grid(h+1)%v, h )  ! 
+ do i=1,Grid(h+1)%locn3
+  write(1,*) i,(myid*Grid(h+1)%locn3+i-1.)*Grid(h+1)%dzeta, Grid(h+1)%z(1,i), &
+               Grid(h+1)%Czz(1,i),Grid(h+1)%det_J(1,i)
+ enddo
+ write(1,*) ' '
+
+ write(1,*) ' RESTRICTION TEST  X direction, from level',h
+ do j=1,Grid(h)%n2
+  Grid(h)%v(:,j,:)=Grid(h)%x   ! 3D version of x
+ enddo
+   call restrict( Grid(h)%v, Grid(h+1)%v, h )  ! 
+ do i=1,Grid(h+1)%n1
+  write(1,*) i,(i-1.)*Grid(h+1)%dxi, Grid(h+1)%x(i,1)
+ enddo
+ write(1,*) ' '
+
+ write(1,*) ' RESTRICTION TEST  Y direction, from level',h
+ do i=1,Grid(h)%n1
+ do k=1,Grid(h)%locn3
+  Grid(h)%v(i,:,k)=Grid(h)%y   ! 3D version of y
+ enddo
+ enddo
+   call restrict( Grid(h)%v, Grid(h+1)%v, h )  ! 
+ do i=1,Grid(h+1)%n2
+  write(1,*) i,(i-1.)*Grid(h+1)%deta, Grid(h+1)%y(i),Grid(h+1)%Cyy(i)
+ enddo
+ write(1,*) ' '
+
+ enddo
+
+#endif
+
+
+#if DEBUG_LEVEL >= 2
+ do h=0,nlevels-2
+
+ write(1,*) ' INTERPOLATION TEST  Z DIRECTION, to level',h
+ do j=1,Grid(h+1)%n2
+  Grid(h+1)%v(:,j,:)=Grid(h+1)%z
+ enddo
+   call interpolate( Grid(h+1)%v, Grid(h)%v, h )
+ do k=1,Grid(h)%locn3
+  if(myid==0) write(1,*) k,(Grid(h)%locn3*myid+k-1.)*Grid(h)%dzeta, Grid(h)%v(2,3,k), &
+               Grid(h)%Czz(1,k),Grid(h)%det_J(1,k)
+ enddo
+ if(myid==0) write(1,*) ' '
+ 
+ if(myid==0) write(1,*) ' INTERPOLATION TEST  X DIRECTION to level',h
+ do j=1,Grid(h+1)%n2
+  Grid(h+1)%v(:,j,:)=Grid(h+1)%x
+ enddo
+   call interpolate( Grid(h+1)%v, Grid(h)%v, h )
+ do k=1,Grid(h)%n1
+  if(myid==0) write(1,*) k,(k-1.)*Grid(h)%dxi, Grid(h)%v(k,1,1)
+ enddo
+ if(myid==0) write(1,*) ' '
+ 
+ if(myid==0) write(1,*) ' INTERPOLATION TEST  Y DIRECTION to level',h
+ do i=1,Grid(h+1)%n1
+ do k=1,Grid(h+1)%locn3
+  Grid(h+1)%v(i,:,k)=Grid(h+1)%y
+ enddo
+ enddo
+   call interpolate( Grid(h+1)%v, Grid(h)%v, h )
+ do k=1,Grid(h)%n2
+  if(myid==0) write(1,*) k,(k-1.)*Grid(h)%deta, Grid(h)%v(1,k,1),Grid(h)%Cyy(k)
+ enddo
+ if(myid==0) write(1,*) ' '
+ 
+ enddo
+ close(1)
+#endif
+
+restriction_method='full_weighting'
+
+end subroutine initialize_grids
Index: /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/initialize_user.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/initialize_user.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/initialize_user.f90	(revision 6)
@@ -0,0 +1,95 @@
+subroutine initialize_user
+  !=======================================================
+#define DEBUG_LEVEL 3
+
+  use mpi_parameters      , only: comm,myid
+  use dependent_variables
+  use grid_info           , only: Grid 
+  use counters_flags_etc  , only: user_ics_flag,restart_flag,ierr 
+  use dimensional_scales  , only: L_scale,U_scale,s1_scale,s2_scale
+  use user_parameters     , only: Km_of_z,Kt_of_z 
+  use user_routines       , only: user_ics 
+
+  implicit none
+
+  include '../input/problem_size.h'
+  include 'mpif.h'
+
+  integer    :: i,j,k,ifield,num_champ
+  real       :: alpha1,alpha2,alpha3,alpha4,Lx,Ly,Lz
+  real,dimension(:,:,:,:),allocatable   :: vals
+
+
+  !=======================================================
+
+#if DEBUG_LEVEL >= 1
+  if( myid==0) then
+     write(0,*) ' '
+     write(0,*) 'hello world from initialize_user'
+  endif
+#endif
+
+
+  !========================================================
+  !ENABLE VERTICALLY VARYING EDDY VISCOSITY AND DIFFUSIVITY
+  !
+  allocate( Km_of_z(locnz), Kt_of_z(locnz) )
+
+  call set_diffusion
+
+  !========================================================
+
+
+
+  if( restart_flag == 'yes' .or. user_ics_flag == 'no' ) return
+
+  ! we can also specify any non-zero initial conditions
+  U =0.
+  V =0.
+  W =0.
+  s1=0.
+  s2=0.
+
+
+  num_champ=3+num_scalars
+
+  allocate ( vals(nx,ny,locnz,num_champ) )
+
+  !! appel de user_ics pour definir la condition initiale
+  do ifield=1,num_champ
+     call user_ics( Grid(0)%x(:,1)*L_scale , Grid(0)%y(:)*L_scale , Grid(0)%z(1,:)*L_scale, &
+                    ifield , nx , ny , locnz, vals(:,:,:,ifield) ) 
+  enddo
+
+  !! Orientation de la grille pour U & W, affectation des champs vals(:,:,:,ifield)
+  do k=1,locnz                                                                                           
+     do i=1,nx
+        alpha1=Grid(0)%x_xi(i,k)
+        alpha2=Grid(0)%x_zeta(i,k)
+        alpha3=Grid(0)%z_xi(i,k)
+        alpha4=Grid(0)%z_zeta(i,k)
+        if ( i == 10 .and. k == 10 ) print*,'alpha1-4=',alpha1,alpha2,alpha3,alpha4
+        do j=1,ny
+           U(i,j,k)=1./( alpha1*alpha4-alpha3*alpha2 ) * (  alpha4*vals(i,j,k,1) - alpha2*vals(i,j,k,3) )
+           W(i,j,k)=1./( alpha1*alpha4-alpha3*alpha2 ) * ( -alpha3*vals(i,j,k,1) + alpha1*vals(i,j,k,3) )
+        enddo
+     enddo
+  enddo
+  V = vals(:,:,:,2)
+  s1= vals(:,:,:,4)
+  if ( num_scalars > 1 ) s2 = vals(:,:,:,5)
+
+  !! adimensionnement
+  U=U/U_scale
+  V=V/U_scale
+  W=W/U_scale
+  s1=s1/s1_scale
+  s2=s2/s2_scale
+
+  !! affichage des min/max a l'ecran
+  call maxim
+
+
+  deallocate( vals )
+
+end subroutine initialize_user
Index: /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/makefile
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/makefile	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/makefile	(revision 6)
@@ -0,0 +1,159 @@
+SHELL=/bin/sh
+#
+include Make.inc
+#
+
+##############################################
+
+cfd.x: MPI_Time.o  cfd_modules.o user_modules.o cfd.o initialize_cfd.o \
+initialize_grids.o setup_compact_schemes.o columnslab.o compact_derivs6.o read_grid_data.o \
+initialize_immersed_bdry.o set_integration_weights.o flow_solve_user.o initialize_user.o \
+rhs.o ibr.o hydrostatic.o dissipation.o user_rhs.o step.o \
+set_BC_values.o apply_BCs.o user_BCs.o divergence.o set_rhs_for_pressure.o \
+gradient.o project.o filter4.o init3D_netcdf.o write3D_netcdf.o grid_transfers.o \
+save_restart.o xy_fft.o solve_for_xyper_pressure.o apply_ibdry_rhs.o update_ibdry.o\
+nms_f90.o immersed_bdry_rhs.o noise.o EOS.o set_ambient_stratification.o \
+set_diffusion.o maxim.o
+	$(f90) -pg  $(LIBS) \
+	 -o cfd.x MPI_Time.o cfd.o cfd_modules.o user_modules.o initialize_grids.o initialize_cfd.o \
+	setup_compact_schemes.o columnslab.o compact_derivs6.o set_integration_weights.o \
+	read_grid_data.o initialize_immersed_bdry.o flow_solve_user.o initialize_user.o \
+	rhs.o ibr.o hydrostatic.o dissipation.o user_rhs.o step.o set_BC_values.o \
+	apply_BCs.o user_BCs.o divergence.o  set_rhs_for_pressure.o \
+	gradient.o project.o filter4.o init3D_netcdf.o write3D_netcdf.o save_restart.o \
+	grid_transfers.o xy_fft.o solve_for_xyper_pressure.o nms_f90.o \
+	apply_ibdry_rhs.o update_ibdry.o immersed_bdry_rhs.o  noise.o \
+        EOS.o set_ambient_stratification.o set_diffusion.o maxim.o
+
+cfd.o: cfd.f90 cfd_modules.o user_modules.o  \
+toggle.h  ../input/params.h  ../input/problem_size.h 
+	$(f90) $(f90O_FLAGS) cfd.f90
+
+MPI_Time.o: MPI_Time.f90
+	$(f90) $(f90O_FLAGS) MPI_Time.f90
+
+cfd_modules.o: cfd_modules.f90 
+	$(f90) $(f90O_FLAGS) cfd_modules.f90
+
+user_modules.o: user_modules.f90 
+	$(f90) $(f90O_FLAGS) user_modules.f90
+
+maxim.o : maxim.f90 
+	$(f90) $(f90O_FLAGS) maxim.f90
+
+columnslab.o: columnslab.f90
+	$(f90) $(f90O_FLAGS) columnslab.f90
+
+flow_solve_user.o: flow_solve_user.f90
+	$(f90) $(f90O_FLAGS) flow_solve_user.f90
+	
+initialize_grids.o: initialize_grids.f90 ../input/grid_data.h ../input/problem_size.h
+	$(f90) $(f90O_FLAGS) initialize_grids.f90
+
+initialize_cfd.o: initialize_cfd.f90 cfd.f90 ../input/params.h
+	$(f90) $(f90O_FLAGS)  initialize_cfd.f90
+
+initialize_user.o: initialize_user.f90 cfd.f90 ../input/params.h
+	$(f90) $(f90O_FLAGS)  initialize_user.f90
+
+compact_derivs6.o: compact_derivs6.f90 cfd_modules.o setup_compact_schemes.o
+	$(f90) $(f90O_FLAGS) compact_derivs6.f90 
+
+setup_compact_schemes.o: setup_compact_schemes.f90 
+	$(f90) $(f90O_FLAGS) setup_compact_schemes.f90
+
+xy_fft.o: xy_fft.f90 cfd_modules.o 
+	$(f90) $(f90O_FLAGS) xy_fft.f90
+
+initialize_immersed_bdry.o: initialize_immersed_bdry.f90 ../input/immersed_bdry_locations
+	$(f90) $(f90O_FLAGS) initialize_immersed_bdry.f90
+
+read_grid_data.o: read_grid_data.f90
+	$(f90) $(f90O_FLAGS) read_grid_data.f90
+
+set_integration_weights.o: set_integration_weights.f90
+	$(f90) $(f90O_FLAGS) set_integration_weights.f90
+
+solve_for_xyper_pressure.o: solve_for_xyper_pressure.f90
+	$(f90) $(f90O_FLAGS) solve_for_xyper_pressure.f90
+
+rhs.o: rhs.f90
+	$(f90) $(f90O_FLAGS) rhs.f90 
+
+ibr.o: ibr.f90
+	$(f90) $(f90O_FLAGS) ibr.f90
+
+apply_ibdry_rhs.o: apply_ibdry_rhs.f90
+	$(f90) $(f90O_FLAGS) apply_ibdry_rhs.f90 
+
+update_ibdry.o: update_ibdry.f90
+	$(f90) $(f90O_FLAGS) update_ibdry.f90 
+
+hydrostatic.o: hydrostatic.f90 cfd_modules.o
+	$(f90) $(f90O_FLAGS) hydrostatic.f90 ${MPIINC} 
+
+dissipation.o: dissipation.f90
+	$(f90) $(f90O_FLAGS) dissipation.f90
+
+user_rhs.o: user_rhs.f90
+	$(f90) $(f90O_FLAGS) user_rhs.f90 
+
+immersed_bdry_rhs.o: immersed_bdry_rhs.f90
+	$(f90) $(f90O_FLAGS) immersed_bdry_rhs.f90 
+
+step.o: step.f90
+	$(f90) $(f90O_FLAGS) step.f90
+
+set_BC_values.o: set_BC_values.f90
+	$(f90) $(f90O_FLAGS) set_BC_values.f90
+
+apply_BCs.o: apply_BCs.f90
+	$(f90) $(f90O_FLAGS) apply_BCs.f90 
+
+user_BCs.o: user_BCs.f90
+	$(f90) $(f90O_FLAGS) user_BCs.f90 
+
+divergence.o: divergence.f90
+	$(f90) $(f90O_FLAGS) divergence.f90 
+
+set_rhs_for_pressure.o: set_rhs_for_pressure.f90
+	$(f90)  $(f90O_FLAGS) set_rhs_for_pressure.f90 
+
+gradient.o: gradient.f90
+	$(f90) $(f90O_FLAGS) gradient.f90
+
+project.o: project.f90
+	$(f90) $(f90O_FLAGS) project.f90 
+
+filter4.o: filter4.f90
+	$(f90) $(f90O_FLAGS) filter4.f90
+
+init3D_netcdf.o: init3D_netcdf.f90
+	$(f90) $(f90O_FLAGS) init3D_netcdf.f90 
+
+write3D_netcdf.o: write3D_netcdf.f90
+	$(f90) $(f90O_FLAGS) write3D_netcdf.f90 
+
+save_restart.o: save_restart.f90
+	$(f90) $(f90O_FLAGS) save_restart.f90
+
+grid_transfers.o: grid_transfers.f90
+	$(f90) $(f90O_FLAGS) grid_transfers.f90 
+
+nms_f90.o: nms_f90.f90 
+	$(f90) $(f90O_FLAGS) nms_f90.f90
+
+noise.o: noise.f90
+	$(f90) $(f90O_FLAGS) noise.f90
+
+EOS.o: EOS.f90
+	$(f90) $(f90O_FLAGS) EOS.f90
+
+set_ambient_stratification.o: set_ambient_stratification.f90
+	$(f90) $(f90O_FLAGS) set_ambient_stratification.f90
+
+set_diffusion.o: set_diffusion.f90
+	$(f90) $(f90O_FLAGS) set_diffusion.f90
+
+clean:
+	rm -f *.x *.o *.mod runlog fort.*
Index: /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/matvec.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/matvec.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/matvec.f90	(revision 6)
@@ -0,0 +1,462 @@
+subroutine matvec(u, v, ipar)
+
+!  routine to apply the discrete differential operator A
+!                                  v <-- Au
+!  A is the compact representation of transformed Laplacian operator
+!
+!      Interior points:
+!      V <- A[U] = 1/det_J*(Cxx U_x)_x + 1/y_eta*(Cyy U_y)_y + 1/det_J*(Czz U_z)_z
+!
+!     Boundary points:
+!     V <- B[U]
+!      B = boundary operator
+!      for Dirichlet conditions B = I
+!      for Neumann   conditions B = |d/dn|
+!                    where n is outward facing unit normal
+!**********************************************************
+
+!grid _info contains Grid(0:nlevels-1),  current_grid_level
+use grid_info
+use intermediate_variables
+use boundary_information
+use mpi_parameters
+use counters_flags_etc
+implicit none
+include 'mpif.h'
+
+real  ::  U(Grid(current_grid_level)%n1_it,Grid(current_grid_level)%n2_it,Grid(current_grid_level)%n3_it)
+real  ::  V(Grid(current_grid_level)%n1_it,Grid(current_grid_level)%n2_it,Grid(current_grid_level)%n3_it)
+
+!Local variables
+real, dimension(:,:,:), allocatable        :: dUdzeta,dUdxi,dUdeta
+real, dimension(:,:,:,:), allocatable      :: scratch
+
+integer                                    :: ipar(13),ii,flag,npts
+integer                                    :: status(MPI_STATUS_SIZE)
+real                                       :: h
+real                                       :: end_values(2)
+integer                                    :: nx,ny,nz,locnz
+real                                       :: dx,dy,dz
+real                                       :: xx, mean_value
+
+V=0.0
+ii = current_grid_level
+nx = Grid(ii)%n1            
+ny = Grid(ii)%n2            
+nz = Grid(ii)%n3            
+locnz = Grid(ii)%locn3      
+dx = Grid(ii)%dxi          
+dy = Grid(ii)%deta        
+dz = Grid(ii)%dzeta      
+
+flag=1               ! don't specify deriv values at ends
+end_values=-999999.  ! obsolete but required
+
+
+!***************************************************************************
+!    Store approximation of A[U] in V:
+!    V <-- 1/det_J*(Cxx U_x)_x + 1/y_eta*(Cyy U_y)_y + 1/det_J*(Czz U_z)_z
+!***************************************************************************
+
+
+!******************************************************************
+!               Logic branches
+!               depending on xy periodicity
+!******************************************************************
+
+ if( boundary_type2(1,1)=='periodic' .and. boundary_type4(1,1)=='periodic' ) then  
+
+  allocate ( dUdzeta(1,1,2)  )
+
+!***************************************************************************
+! z part of the problem first, U & V are nz vectors
+!***************************************************************************
+
+ h=dz
+ call compact_ddz(U,V,flag,end_values,1,1,nz)
+
+! Save dU/dzeta 
+ if( myid==0 .and. BC_pressure5(1,1) == 'Neumann' ) then   
+  dUdzeta(1,1,1) = V(1,1,1)
+ endif
+ if( myid==nprocs-1 .and. BC_pressure6(1,1) == 'Neumann' ) then   
+  dUdzeta(1,1,2) = V(1,1,nz)
+ endif
+
+!multiply U_z by Czz overwriting the result in held in V
+ V(1,1,:) = Grid(ii)%Czz(1,:)*V(1,1,:)    ! Czz is indep of x
+
+!differentiate (Czz U_z ) wrt z, overwrite results back into V
+ call compact_ddz(V,V,flag,end_values,1,1,nz)
+
+!multiply result by 1/det_J
+ V(1,1,:)=V(1,1,:)/Grid(ii)%det_J(1,:)
+
+! We've aready done the z part of the operator, now add on the algebraic, horizontal part.
+! We're working here in xy transform space so U is the current xy transformed P(z) estimate
+! at a fixed kx,ky location  (kx_val,ky_val; available via counters_flags_etc)
+
+  V(1,1,:) = V(1,1,:)         &
+           -( (kx_val)**2 * (Grid(ii)%Cxx(1,:)/Grid(ii)%det_J(1,:))   &
+             +(ky_val)**2 * (Grid(ii)%Cyy(1)/Grid(ii)%y_eta(1))  ) * U(1,1,:)
+
+! Neumann conditions at top&bottom
+  V(1,1,1)=dUdzeta(1,1,1)
+  V(1,1,nz)=dUdzeta(1,1,2)
+
+  deallocate (dUdzeta )
+
+ else    ! NONPERIODIC LOGIC
+
+!***************************************************************************
+! z part of the problem first
+!***************************************************************************
+allocate ( dUdzeta(nx,ny,2), dUdxi(ny,locnz,2), dUdeta(nx,locnz,2)  )
+
+ h=dz
+ call compact_ddz_mpi(U,V,flag,end_values,nx,ny,locnz)
+
+! Save dU/dzeta 
+ if( myid==0 .and. BC_pressure5(1,1) == 'Neumann' ) then   
+  dUdzeta(:,:,1) = V(:,:,1)
+ endif
+ if( myid==nprocs-1 .and. BC_pressure6(1,1) == 'Neumann' ) then   
+  dUdzeta(:,:,2) = V(:,:,locnz)
+ endif
+
+!multiply U_z by Czz overwriting the result in held in V
+ do j=1,ny
+   V(:,j,:) = Grid(ii)%Czz*V(:,j,:)
+ enddo
+
+!differentiate (Czz U_z ) wrt z, overwrite results back into V
+ call compact_ddz_mpi(V,V,flag,end_values,nx,ny,locnz)
+
+!multiply result by 1/det_J
+ do j=1,ny
+  V(:,j,:)=V(:,j,:)/Grid(ii)%det_J
+ enddo
+
+
+!!! xlv
+ allocate( scratch(Grid(current_grid_level)%n1_it,Grid(current_grid_level)%n2_it,Grid(current_grid_level)%n3_it,2) )
+
+!******************************************************************
+!                 do x part, compact differentiation
+!******************************************************************
+
+!Take x derivative of U(:,:,1:locnz) and store result in scratch(:,:,:,1),
+ h=dx
+ call compact_ddx(U,scratch(1,1,1,1),flag,end_values,nx,ny,locnz)
+
+! Save dU/dxi on FACES 1&2
+ dUdxi(:,:,1) = scratch(1,:,:,1)
+ dUdxi(:,:,2) = scratch(nx,:,:,1)
+
+!multiply U_x by Cxx, overwriting the result in scratch(:,:,:,1)
+ do j=1,ny
+  scratch(:,j,:,1) = Grid(ii)%Cxx*scratch(:,j,:,1)
+ enddo
+
+!differentiate (Cxx U_x) wrt x, writing results into scratch(:,:,:,2)
+ call compact_ddx(scratch(1,1,1,1),scratch(1,1,1,2),flag,end_values,nx,ny,locnz)
+
+!divide (Cxx U_x)_x by det_J  and add the result to V
+!V then contains 1/det_J*{ (Cxx U_x)_x + (Czz U_z)_z  }
+ do j=1,ny
+  V(:,j,:) =  V(:,j,:) + scratch(:,j,:,2)/Grid(ii)%det_J
+ enddo
+
+!******************************************************************
+!                 do y part, compact differentiation 
+!******************************************************************
+
+!Take y derivative of U(:,:,1:locnz) and store result in scratch(:,:,:,1).
+ h=dy
+ call compact_ddy(U,scratch(1,1,1,1),flag,end_values,nx,ny,locnz)
+
+! Save dU/deta on FACES 3&4
+ dUdeta(:,:,1) = scratch(:,1,:,1)
+ dUdeta(:,:,2) = scratch(:,ny,:,1)
+
+!multiply U_y by Cyy, overwriting the result in scratch
+ do j=1,ny
+  scratch(:,j,:,1) = Grid(ii)%Cyy(j)*scratch(:,j,:,1)
+ enddo
+
+!differentiate (Cyy U_y) wrt y, write results back into scratch(:,:,:,2)
+  call compact_ddy(scratch(1,1,1,1),scratch(1,1,1,2),flag,end_values,nx,ny,locnz)
+
+!add 1/y_eta (Cyy U_y)_y to V. Note Cyy=1/y_eta. V then contains:
+!1/det_J*(Cxx U_x)_x + 1/y_eta*(Cyy U_y)_y + 1/det_J*(Czz U_z)_z
+ do j=1,ny
+  V(:,j,:) = V(:,j,:) + Grid(ii)%Cyy(j)*scratch(:,j,:,2)
+ enddo
+
+!******************************************************************
+!        overwrite boundary locations w/ boundary operators
+!******************************************************************
+
+! USE IDENTITY OPERATOR FOR DIRICHLET BCs:*************************
+ if( BC_pressure1(1,1) == 'Dirichlet' ) then   
+  V(1,:,:)=U(1,:,:)
+ endif
+ if( BC_pressure2(1,1) == 'Dirichlet' ) then   
+  V(nx,:,:)=U(nx,:,:)
+ endif
+
+ if( BC_pressure3(1,1) == 'Dirichlet' ) then   
+  V(:,1,:)=U(:,1,:)
+ endif
+ if( BC_pressure4(1,1) == 'Dirichlet' ) then   
+  V(:,ny,:)=U(:,ny,:)
+ endif
+
+ if( myid==0 .and. BC_pressure5(1,1) == 'Dirichlet' ) then   
+  V(:,:,1)=U(:,:,1)
+ endif
+ if( myid==nprocs-1 .and. BC_pressure6(1,1) == 'Dirichlet' ) then   
+  V(:,:,locnz)=U(:,:,locnz)
+ endif
+
+! USE NORMAL DERIV. OPERATOR FOR NEUMANN BCs:*************************
+ if( BC_pressure1(1,1) == 'Neumann' ) then   
+  V(1,:,:)=dUdxi(:,:,1)
+ endif
+ if( BC_pressure2(1,1) == 'Neumann' ) then   
+  V(nx,:,:)=dUdxi(:,:,2)
+ endif
+
+ if( BC_pressure3(1,1) == 'Neumann' ) then   
+  V(:,1,:)=dUdeta(:,:,1)
+ endif
+ if( BC_pressure4(1,1) == 'Neumann' ) then   
+  V(:,ny,:)=dUdeta(:,:,2)
+ endif
+
+ if( myid==0 .and. BC_pressure5(1,1) == 'Neumann' ) then   
+  V(:,:,1)=dUdzeta(:,:,1)
+ endif
+ if( myid==nprocs-1 .and. BC_pressure6(1,1) == 'Neumann' ) then   
+  V(:,:,locnz)=dUdzeta(:,:,2)
+ endif
+
+!!! xlv
+!!! deallocate (dUdzeta, dUdxi,dUdet )
+ deallocate (dUdzeta, dUdxi,dUdeta, scratch)
+
+endif    ! END XY PERIODIC IF BLOCK
+
+end subroutine matvec
+
+
+
+subroutine mg_solve(b,x,ipar)
+ 
+! Routine to apply M ~ A_inverse to the rhs
+! vector b, producing an approximate solution x.
+! M is defined to be n_mg_cycles full multigrid
+! cycles. The FMG cycles start and end at the
+! finest (h=0) grid level.
+!
+
+use grid_info
+use counters_flags_etc, only: n_mg_cycles,istep,istart,tol
+use mpi_parameters, only: myid
+implicit none
+
+integer        :: i,N,ipar(13)
+real           :: b(Grid(0)%n1,Grid(0)%n2,Grid(0)%locn3)
+real           :: x(Grid(0)%n1,Grid(0)%n2,Grid(0)%locn3)
+character(len=3) :: mg_cycle_type
+
+  if( istep<istart ) then
+   mg_cycle_type='FMG'
+  else
+   mg_cycle_type='V'
+  endif
+  N=n_mg_cycles
+
+! (1)  store the input vector b in the "f" location of the fine grid:
+   Grid(0)%f = b
+
+! (2) MG cycles:
+   if( mg_cycle_type=='FMG') then
+    call FMG(0)    !  use Grid(0)%f as input and updates Grid(0)%v
+   elseif(mg_cycle_type=='V') then
+    Grid(0)%v=0.0
+    do i=1,N
+     call V_cycle(0)
+     if(myid==0)write(0,*) i,Grid(0)%spar(2)
+     if( Grid(0)%spar(2) < tol ) goto 999   ! convergence
+    enddo
+   else
+    write(0,*) 'mg_cycle_type not properly defined'
+    STOP
+   endif
+   
+! (3) extract the solution from Grid(0), store in output vector x:
+999 continue
+   x = Grid(0)%v
+   
+   current_grid_level=0    ! return global variable to fine grid value
+ end subroutine mg_solve
+
+
+subroutine diagl(U,V,ipar)
+!
+! Routine to apply M ~ (1/diag) to the rhs
+! vector b, producing an approximate solution x.
+!
+
+use grid_info
+use boundary_information
+use counters_flags_etc
+use mpi_parameters
+implicit none
+
+integer        :: h,ipar(13)
+real           :: diag_FD   ! approximate diagonal element in a FD discretization at level h
+real           :: pi
+real :: U(Grid(current_grid_level)%n1,Grid(current_grid_level)%n2,Grid(current_grid_level)%locn3)
+real :: V(Grid(current_grid_level)%n1,Grid(current_grid_level)%n2,Grid(current_grid_level)%locn3)
+real, allocatable                          :: kx(:),ky(:)
+integer                                    :: N
+
+
+h=current_grid_level
+
+if( boundary_type2(1,1)=='periodic' .and. boundary_type2(1,1)=='periodic' ) then
+
+!  create the x & y wavenumber arrays, align with the data arrays
+  N=Grid(h)%n1-1         ! n1 includes both boundary points, N only 1
+  pi=4.*atan(1.)
+  allocate(kx(N+1))
+  do i=1,N/2+1
+   kx(i)=2.*pi*(i-1.)    ! FFTW real to half-complex storage
+  enddo
+  do i=2,N/2
+   kx(N-i+2)=kx(i)       ! FFTW real to half-complex storage
+  enddo
+  kx(N+1)=0.             ! extra location, convenient for alignment of arrays
+ 
+
+  N=Grid(h)%n2-1         ! n2 includes both boundary points, N only 1
+  allocate(ky(N+1))
+  do j=1,N/2+1
+   ky(j)=2.*pi*(j-1.)    ! FFTW real to half-complex storage
+  enddo
+  do j=2,N/2
+   ky(N-j+2)=ky(j)       ! FFTW real to half-complex storage
+  enddo
+  ky(N+1)=0.             ! extra location, convenient for alignment of arrays
+
+! precondition using the diagonal elements of an approximated operator
+  do i=1,Grid(h)%n1
+   do j=1,Grid(h)%n2
+    do k=1,Grid(h)%locn3
+     diag_FD = -2.*( Grid(h)%Czz(i,k)/(Grid(h)%dzeta)**2 )  &  ! diagonal term for FD approx of z operator
+                   - (kx(i)**2) * (Grid(h)%Cxx(i,k)/(Grid(h)%det_J(i,k)))           &   ! true diag term in F space
+                   - (ky(j)**2) * (Grid(h)%Cyy(j)/(Grid(h)%y_eta(j)))                   ! true diag term in F space
+
+     if( j==1 .and. k==1 ) then
+      write(0,*)'****** diag:  ',i, -2.*( Grid(h)%Czz(i,k)/(Grid(h)%dzeta)**2 ), - (kx(i)**2) * (Grid(h)%Cxx(i,k)/(Grid(h)%det_J(i,k)))
+     endif
+     V(i,j,k) = U(i,j,k)/diag_FD   ! interior points
+    enddo
+   enddo
+  enddo
+  STOP
+
+else
+
+! precondition using the diagonal elements of an approximated operator
+  do i=1,Grid(h)%n1
+   do j=1,Grid(h)%n2
+    do k=1,Grid(h)%locn3
+     diag_FD = -2.*( Grid(h)%Cxx(i,k)/(Grid(h)%dxi)**2       &
+                   + Grid(h)%Cyy(j  )/(Grid(h)%deta)**2      &
+                   + Grid(h)%Czz(i,k)/(Grid(h)%dzeta)**2 )
+     V(i,j,k) = U(i,j,k)/diag_FD   ! interior points
+    enddo
+   enddo
+  enddo
+
+endif
+
+! Redo Neumann boundaries: i.e. overwrite locations where the boundary operator differs from the interior operator
+
+if( BC_pressure1(1,1) == 'Neumann' ) then
+ do k=1,Grid(h)%locn3
+  do j=1,Grid(h)%n2
+   diag_FD = 1./Grid(h)%dxi
+   V(1,j,k)= U(1,j,k)/diag_FD
+  enddo
+ enddo
+endif
+
+ if( BC_pressure2(1,1) == 'Neumann' ) then
+ do k=1,Grid(h)%locn3
+  do j=1,Grid(h)%n2
+   diag_FD = 1./Grid(h)%dxi
+   V(Grid(h)%n1,j,k)= U(Grid(h)%n1,j,k)/diag_FD
+  enddo
+ enddo
+ endif
+
+ if( BC_pressure3(1,1) == 'Neumann' ) then 
+ do k=1,Grid(h)%locn3
+  do i=1,Grid(h)%n1
+   diag_FD = 1./Grid(h)%deta
+   V(i,1,k)= U(i,1,k)/diag_FD
+  enddo
+ enddo
+ endif
+
+ if( BC_pressure4(1,1) == 'Neumann' ) then  
+ do k=1,Grid(h)%locn3
+  do i=1,Grid(h)%n1
+   diag_FD = 1./Grid(h)%deta
+   V(i,Grid(h)%n2,k)= U(i,Grid(h)%n2,k)/diag_FD
+  enddo
+ enddo
+ endif
+
+ if( BC_pressure5(1,1) == 'Neumann' .and. myid==0 ) then
+ do i=1,Grid(h)%n1
+  do j=1,Grid(h)%n2
+   diag_FD = 1./Grid(h)%dzeta
+   V(i,j,1)= U(i,j,1)/diag_FD
+  enddo
+ enddo
+ endif
+
+ if( BC_pressure6(1,1) == 'Neumann' .and. myid==nprocs-1) then
+ do i=1,Grid(h)%n1
+  do j=1,Grid(h)%n2
+   diag_FD = 1./Grid(h)%dzeta
+   V(i,j,Grid(h)%locn3)= U(i,j,Grid(h)%locn3)/diag_FD
+  enddo
+ enddo
+ endif
+
+ if( boundary_type2(1,1)=='periodic' ) then
+ do k=1,Grid(h)%locn3
+  do j=1,Grid(h)%n2
+   diag_FD = 1.                                    ! Identity operator
+   V(Grid(h)%n1,j,k)= U(Grid(h)%n1,j,k)/diag_FD    ! only "far" endpts have I[P]=0
+  enddo
+ enddo
+ endif
+
+ if( boundary_type4(1,1)=='periodic' ) then
+ do k=1,Grid(h)%locn3
+  do i=1,Grid(h)%n1
+   diag_FD = 1
+   V(i,Grid(h)%n2,k)= U(i,Grid(h)%n2,k)/diag_FD
+  enddo
+ enddo
+ endif
+
+ return
+end
Index: /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/maxim.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/maxim.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/maxim.f90	(revision 6)
@@ -0,0 +1,75 @@
+subroutine maxim
+#define DEBUG_LEVEL 1
+
+!********** Nearly everything available via modules  *****
+   use grid_info
+   use immersed_boundary
+   use dependent_variables
+   use intermediate_variables
+   use rhs_variables
+   use pde_parameters
+   use dimensional_scales
+   use mpi_parameters
+   use boundary_information
+   use counters_flags_etc
+   use mpi_times
+
+   implicit none
+
+! local variables
+
+ include '../input/problem_size.h'
+ include 'mpif.h'
+
+ real :: error,sum_error
+!*********************************************************
+
+  if ( myid == numprocs-1 .and. mod(istep,10) == 0 ) then
+     print*,' '
+     print*,' MINVAL(U)=',minval(U*U_scale),'  MAXVAL(U)=',maxval(U*U_scale)
+     print*,' MINVAL(V)=',minval(V*U_scale),'  MAXVAL(V)=',maxval(V*U_scale)
+     print*,' MINVAL(W)=',minval(W*U_scale),'  MAXVAL(W)=',maxval(W*U_scale)
+     print*,' MINVAL(s1)=',minval(s1*s1_scale),'  MAXVAL(s1)=',maxval(s1*s1_scale)
+     print*,' MINVAL(s2)=',minval(s2*s2_scale),'  MAXVAL(s2)=',maxval(s2*s2_scale)
+     print*,' MINVAL(pd)=',minval(pd),'  MAXVAL(s2)=',maxval(pd)
+     print*,' '
+
+  endif
+
+
+  error=0.
+  sum_error=0.
+  if ( maxval(abs(U)) > 1.e6 .or. maxval(abs(v)) > 1.e6 .or. maxval(abs(W)) > 1.e6 .or. maxval(abs(s1)) > 1.e6 .or. maxval(abs(s2)) > 1.e6 ) then
+       error=1.
+  endif
+  
+  call MPI_BARRIER(comm,ierr)
+  call MPI_ALLREDUCE(error,sum_error,1,MPI_REAL,MPI_SUM,comm,ierr)
+  
+  if ( sum_error .ge. 1. ) then
+     print*,' '
+     print*,'     *********   ERROR   ERROR   ERROR   ERROR *******'
+     print*,' '
+     print*,' MINVAL(U)=',minval(U*U_scale),'  MAXVAL(U)=',maxval(U*U_scale)
+     print*,' MINVAL(V)=',minval(V*U_scale),'  MAXVAL(V)=',maxval(V*U_scale)
+     print*,' MINVAL(W)=',minval(W*U_scale),'  MAXVAL(W)=',maxval(W*U_scale)
+     print*,' MINVAL(s1)=',minval(s1*s1_scale),'  MAXVAL(s1)=',maxval(s1*s1_scale)
+     print*,' MINVAL(s2)=',minval(s2*s2_scale),'  MAXVAL(s2)=',maxval(s2*s2_scale)
+     print*,' MINVAL(pd)=',minval(pd),'  MAXVAL(s2)=',maxval(pd)
+     print*,' '
+     goto 999
+     !call mpi_barrier(comm,ierr)
+     !call MPI_Time(1)
+     !call mpi_finalize(ierr)
+  else 
+     goto 1000     
+  endif
+
+999 call mpi_barrier(comm,ierr)
+    call MPI_Time(1)
+    STOP ' the next time...'
+
+1000 continue    
+
+end subroutine maxim
+
Index: /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/nms_f90.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/nms_f90.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/nms_f90.f90	(revision 6)
@@ -0,0 +1,30779 @@
+function alngam ( x )
+!
+!*******************************************************************************
+!
+!! ALNGAM computes the log of the absolute value of the gamma function.
+!
+!
+!  Definition:
+!
+!    The Gamma function is defined as
+!
+!      GAMMA(Z) = INTEGRAL ( 0 <= T < Infinity) T**(Z-1) EXP(-T) DT
+!
+!    If Z is a positive integer, GAMMA(Z) = (Z-1)!, the factorial.
+!
+!    There is a special value:
+!
+!      GAMMA(0.5) = SQRT(PI).
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Modified:
+!
+!    31 May 2000
+!
+!  Parameters:
+!
+!    Input, real X, the argument of the gamma function.
+!
+!    Output, real ALNGAM, the logarithm of the absolute value of GAMMA(X).
+!
+  real alngam
+  real, save :: dxrel = 0.0E+00
+  real gamma
+  real, parameter :: pi = 3.14159265358979323846264338327950288419716939937510E+00
+  real r1mach
+  real r9lgmc
+  real sinpiy
+  real, parameter :: sq2pil = 0.91893853320467274E+00
+  real, parameter :: sqpi2l = 0.22579135264472743E+00
+  real x
+  real, save :: xmax = 0.0E+00
+  real y
+!
+  if ( xmax == 0.0E+00 ) then
+    xmax = huge ( xmax ) / log ( huge ( xmax ) )
+    dxrel = sqrt ( epsilon ( dxrel ) )
+  end if
+
+  y = abs ( x )
+
+  if ( y <= 10.0E+00 ) then
+
+    alngam = log ( abs ( gamma ( x ) ) )
+    return
+
+  end if
+
+  if ( y > xmax ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'ALNGAM - Fatal error!'
+    write ( *, * ) '  |X| is so big that ALNGAM will overflow.'
+    stop
+  end if
+
+  if ( x > 0.0E+00 ) then
+    alngam = sq2pil + ( x - 0.5E+00 )* log ( x ) - x + r9lgmc ( y )
+    return
+  end if
+
+  sinpiy = abs ( sin ( pi * y ) )
+
+  if ( sinpiy == 0.0E+00 ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'ALNGAM - Fatal error!'
+    write ( *, * ) '  X is a negative integer.'
+    stop
+  end if
+
+  if ( abs ( ( x - aint ( x - 0.5E+00 ) ) / x ) < dxrel ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'ALNGAM - Warning:'
+    write ( *, * ) '  Answer has less than half usual precision.'
+    write ( *, * ) '  X is very near a negative integer.'
+  end if
+
+  alngam = sqpi2l + ( x - 0.5E+00 ) * log ( y ) - x - log ( sinpiy ) &
+    - r9lgmc ( y )
+
+  return
+end
+subroutine asyjy ( funjy, x, fnu, flgjy, in, y, wk, iflw )
+!
+!*******************************************************************************
+!
+!! ASYJY computes high order Bessel functions J and Y.
+!
+!
+!  Description:
+!
+!    ASYJY implements the uniform asymptotic expansion of
+!    the J and Y Bessel functions for FNU >= 35 and real
+!    X > 0.0.  The forms are identical except for a change
+!    in sign of some of the terms.  This change in sign is
+!    accomplished by means of the flag FLGJY = 1 or -1. On
+!    flgjy = 1 the airy functions ai(x) and dai(x) are
+!    supplied by the external function jairy, and on
+!    flgjy = -1 the airy functions bi(x) and dbi(x) are
+!    supplied by the external funtion yairy.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Author:
+!
+!    D E Amos
+!
+!  Parameters:
+!
+!    Input, external FUNJY, is the function JAIRY or YAIRY.
+!
+!    Input, real X, the argument, which must be greater than 0.
+!
+!    Input, real FNU, the order of the first Bessel function.
+!    FNU is generally at least 35.
+!
+!    Input, real FLGJY, a selection flag
+!     1.0E+00 gives the j function
+!    -1.0E+00 gives the y function
+!
+!    Input, integer IN, the number of functions desired, which should be
+!    1 or 2.
+!
+!    Output, real Y(IN), contains the desired function values.
+!
+!    Output, integer IFLW, a flag indicating underflow or overflow
+!    return variables for besj only.
+!
+!    Output, real WK(7), contains the following values:
+!
+!      wk(1) = 1 - (x/fnu)**2 = w**2
+!      wk(2) = sqrt(abs(wk(1)))
+!      wk(3) = abs(wk(2) - atan(wk(2)))  or
+!              abs(ln((1 + wk(2))/(x/fnu)) - wk(2))
+!            = abs((2/3)*zeta**(3/2))
+!      wk(4) = fnu*wk(3)
+!      wk(5) = (1.5*wk(3)*fnu)**(1/3) = sqrt(zeta)*fnu**(1/3)
+!      wk(6) = sign(1.,w**2)*wk(5)**2 = sign(1.,w**2)*zeta*fnu**(2/3)
+!      wk(7) = fnu**(1/3)
+!
+  real abw2
+  real akm
+  real alfa(26,4)
+  real alfa1
+  real alfa2
+  real ap
+  real ar(8)
+  real asum
+  real az
+  real beta(26,5)
+  real beta1
+  real beta2
+  real beta3
+  real br(10)
+  real bsum
+  real c(65)
+  real con1
+  real con2
+  real con548
+  real cr(10)
+  real crz32
+  real dfi
+  real elim
+  real dr(10)
+  real fi
+  real flgjy
+  real fn
+  real fnu
+  real fn2
+  real gama(26)
+  integer i
+  integer i1mach
+  integer iflw
+  integer in
+  integer j
+  integer jn
+  integer jr
+  integer ju
+  integer k
+  integer kb
+  integer klast
+  integer kmax(5)
+  integer kp1
+  integer ks
+  integer ksp1
+  integer kstemp
+  integer l
+  integer lr
+  integer lrp1
+  real phi
+  real rcz
+  real rden
+  real relb
+  real rfn2
+  real rtz
+  real rzden
+  real sa
+  real sb
+  real suma
+  real sumb
+  real s1
+  real ta
+  real tau
+  real tb
+  real tfn
+  real tol
+  real, save :: tols = -6.90775527898214E+00
+  real t2
+  real upol(10)
+  real wk(*)
+  real x
+  real xx
+  real y(*)
+  real z
+  real z32
+  real r1mach
+
+  dimension alfa1(26,2), alfa2(26,2)
+  dimension beta1(26,2), beta2(26,2), beta3(26,1)
+!
+  external funjy
+!
+  equivalence (alfa(1,1),alfa1(1,1))
+  equivalence (alfa(1,3),alfa2(1,1))
+  equivalence (beta(1,1),beta1(1,1))
+  equivalence (beta(1,3),beta2(1,1))
+  equivalence (beta(1,5),beta3(1,1))
+!
+  data con1/6.66666666666667e-01/
+  data con2/3.33333333333333e-01/
+  data con548/1.04166666666667e-01/
+  data  ar(1),  ar(2),  ar(3),  ar(4),  ar(5),  ar(6),  ar(7), ar(8) &
+    / 8.35503472222222e-02, 1.28226574556327e-01, &
+      2.91849026464140e-01, 8.81627267443758e-01, 3.32140828186277, &
+      1.49957629868626e+01, 7.89230130115865e+01, 4.74451538868264e+02/
+
+  data  br(1), br(2), br(3), br(4), br(5), br(6), br(7), br(8), br(9), br(10) &
+    /-1.45833333333333e-01,-9.87413194444444e-02, &
+     -1.43312053915895e-01,-3.17227202678414e-01,-9.42429147957120e-01, &
+     -3.51120304082635,-1.57272636203680e+01,-8.22814390971859e+01, &
+     -4.92355370523671e+02,-3.31621856854797e+03/
+
+  data c(1), c(2), c(3), c(4), c(5), c(6), c(7), c(8), c(9), c(10), &
+     c(11), c(12), c(13), c(14), c(15), c(16), c(17), c(18), &
+     c(19), c(20), c(21), c(22), c(23), c(24)/ &
+     -2.08333333333333e-01,        1.25000000000000e-01, &
+      3.34201388888889e-01,       -4.01041666666667e-01, &
+      7.03125000000000e-02,       -1.02581259645062, &
+      1.84646267361111,       -8.91210937500000e-01, &
+      7.32421875000000e-02,        4.66958442342625, &
+     -1.12070026162230e+01,        8.78912353515625, &
+     -2.36408691406250,        1.12152099609375e-01, &
+     -2.82120725582002e+01,        8.46362176746007e+01, &
+     -9.18182415432400e+01,        4.25349987453885e+01, &
+     -7.36879435947963,        2.27108001708984e-01, &
+      2.12570130039217e+02,       -7.65252468141182e+02, &
+      1.05999045252800e+03,       -6.99579627376133e+02/
+
+  data c(25), c(26), c(27), c(28), c(29), c(30), c(31), c(32), &
+          c(33), c(34), c(35), c(36), c(37), c(38), c(39), c(40), &
+          c(41), c(42), c(43), c(44), c(45), c(46), c(47), c(48)/ &
+             2.18190511744212e+02,       -2.64914304869516e+01, &
+             5.72501420974731e-01,       -1.91945766231841e+03, &
+             8.06172218173731e+03,       -1.35865500064341e+04, &
+             1.16553933368645e+04,       -5.30564697861340e+03, &
+             1.20090291321635e+03,       -1.08090919788395e+02, &
+             1.72772750258446,        2.02042913309661e+04, &
+            -9.69805983886375e+04,        1.92547001232532e+05, &
+            -2.03400177280416e+05,        1.22200464983017e+05, &
+            -4.11926549688976e+04,        7.10951430248936e+03, &
+            -4.93915304773088e+02,        6.07404200127348, &
+            -2.42919187900551e+05,        1.31176361466298e+06, &
+            -2.99801591853811e+06,        3.76327129765640e+06/
+
+  data c(49), c(50), c(51), c(52), c(53), c(54), c(55), c(56), &
+          c(57), c(58), c(59), c(60), c(61), c(62), c(63), c(64), &
+          c(65)/ &
+            -2.81356322658653e+06,        1.26836527332162e+06, &
+            -3.31645172484564e+05,        4.52187689813627e+04, &
+            -2.49983048181121e+03,        2.43805296995561e+01, &
+             3.28446985307204e+06,       -1.97068191184322e+07, &
+             5.09526024926646e+07,       -7.41051482115327e+07, &
+             6.63445122747290e+07,       -3.75671766607634e+07, &
+             1.32887671664218e+07,       -2.78561812808645e+06, &
+             3.08186404612662e+05,       -1.38860897537170e+04, &
+             1.10017140269247e+02/
+
+  data alfa1(1,1), alfa1(2,1), alfa1(3,1), alfa1(4,1), alfa1(5,1), &
+          alfa1(6,1), alfa1(7,1), alfa1(8,1), alfa1(9,1), alfa1(10,1), &
+          alfa1(11,1),alfa1(12,1),alfa1(13,1),alfa1(14,1),alfa1(15,1), &
+          alfa1(16,1),alfa1(17,1),alfa1(18,1),alfa1(19,1),alfa1(20,1), &
+          alfa1(21,1),alfa1(22,1),alfa1(23,1),alfa1(24,1),alfa1(25,1), &
+          alfa1(26,1)     /-4.44444444444444e-03,-9.22077922077922e-04, &
+     -8.84892884892885e-05, 1.65927687832450e-04, 2.46691372741793e-04, &
+      2.65995589346255e-04, 2.61824297061501e-04, 2.48730437344656e-04, &
+      2.32721040083232e-04, 2.16362485712365e-04, 2.00738858762752e-04, &
+      1.86267636637545e-04, 1.73060775917876e-04, 1.61091705929016e-04, &
+      1.50274774160908e-04, 1.40503497391270e-04, 1.31668816545923e-04, &
+      1.23667445598253e-04, 1.16405271474738e-04, 1.09798298372713e-04, &
+      1.03772410422993e-04, 9.82626078369363e-05, 9.32120517249503e-05, &
+      8.85710852478712e-05, 8.42963105715700e-05, 8.03497548407791e-05/
+
+  data alfa1(1,2), alfa1(2,2), alfa1(3,2), alfa1(4,2), alfa1(5,2), &
+          alfa1(6,2), alfa1(7,2), alfa1(8,2), alfa1(9,2), alfa1(10,2), &
+          alfa1(11,2),alfa1(12,2),alfa1(13,2),alfa1(14,2),alfa1(15,2), &
+          alfa1(16,2),alfa1(17,2),alfa1(18,2),alfa1(19,2),alfa1(20,2), &
+          alfa1(21,2),alfa1(22,2),alfa1(23,2),alfa1(24,2),alfa1(25,2), &
+          alfa1(26,2)     / 6.93735541354589e-04, 2.32241745182922e-04, &
+     -1.41986273556691e-05,-1.16444931672049e-04,-1.50803558053049e-04,&
+     -1.55121924918096e-04,-1.46809756646466e-04,-1.33815503867491e-04, &
+     -1.19744975684254e-04,-1.06184319207974e-04,-9.37699549891194e-05, &
+     -8.26923045588193e-05,-7.29374348155221e-05,-6.44042357721016e-05, &
+     -5.69611566009369e-05,-5.04731044303562e-05,-4.48134868008883e-05, &
+     -3.98688727717599e-05,-3.55400532972042e-05,-3.17414256609022e-05, &
+     -2.83996793904175e-05,-2.54522720634871e-05,-2.28459297164725e-05, &
+     -2.05352753106481e-05,-1.84816217627666e-05,-1.66519330021394e-05/
+
+  data alfa2(1,1), alfa2(2,1), alfa2(3,1), alfa2(4,1), alfa2(5,1), &
+          alfa2(6,1), alfa2(7,1), alfa2(8,1), alfa2(9,1), alfa2(10,1), &
+          alfa2(11,1),alfa2(12,1),alfa2(13,1),alfa2(14,1),alfa2(15,1), &
+          alfa2(16,1),alfa2(17,1),alfa2(18,1),alfa2(19,1),alfa2(20,1), &
+          alfa2(21,1),alfa2(22,1),alfa2(23,1),alfa2(24,1),alfa2(25,1), &
+          alfa2(26,1)     /-3.54211971457744e-04,-1.56161263945159e-04, &
+      3.04465503594936e-05, 1.30198655773243e-04, 1.67471106699712e-04, &
+      1.70222587683593e-04, 1.56501427608595e-04, 1.36339170977445e-04, &
+      1.14886692029825e-04, 9.45869093034688e-05, 7.64498419250898e-05, &
+      6.07570334965197e-05, 4.74394299290509e-05, 3.62757512005344e-05, &
+      2.69939714979225e-05, 1.93210938247939e-05, 1.30056674793963e-05, &
+      7.82620866744497e-06, 3.59257485819352e-06, 1.44040049814252e-07, &
+     -2.65396769697939e-06,-4.91346867098486e-06,-6.72739296091248e-06, &
+     -8.17269379678658e-06,-9.31304715093561e-06,-1.02011418798016e-05/
+
+  data alfa2(1,2), alfa2(2,2), alfa2(3,2), alfa2(4,2), alfa2(5,2), &
+          alfa2(6,2), alfa2(7,2), alfa2(8,2), alfa2(9,2), alfa2(10,2), &
+          alfa2(11,2),alfa2(12,2),alfa2(13,2),alfa2(14,2),alfa2(15,2), &
+          alfa2(16,2),alfa2(17,2),alfa2(18,2),alfa2(19,2),alfa2(20,2), &
+          alfa2(21,2),alfa2(22,2),alfa2(23,2),alfa2(24,2),alfa2(25,2), &
+          alfa2(26,2)     / 3.78194199201773e-04, 2.02471952761816e-04, &
+     -6.37938506318862e-05,-2.38598230603006e-04,-3.10916256027362e-04, &
+     -3.13680115247576e-04,-2.78950273791323e-04,-2.28564082619141e-04, &
+     -1.75245280340847e-04,-1.25544063060690e-04,-8.22982872820208e-05, &
+     -4.62860730588116e-05,-1.72334302366962e-05, 5.60690482304602e-06, &
+      2.31395443148287e-05, 3.62642745856794e-05, 4.58006124490189e-05, &
+      5.24595294959114e-05, 5.68396208545815e-05, 5.94349820393104e-05, &
+      6.06478527578422e-05, 6.08023907788436e-05, 6.01577894539460e-05, &
+      5.89199657344698e-05, 5.72515823777593e-05, 5.52804375585853e-05/
+
+  data beta1(1,1), beta1(2,1), beta1(3,1), beta1(4,1), beta1(5,1), &
+          beta1(6,1), beta1(7,1), beta1(8,1), beta1(9,1), beta1(10,1), &
+          beta1(11,1),beta1(12,1),beta1(13,1),beta1(14,1),beta1(15,1), &
+          beta1(16,1),beta1(17,1),beta1(18,1),beta1(19,1),beta1(20,1), &
+          beta1(21,1),beta1(22,1),beta1(23,1),beta1(24,1),beta1(25,1), &
+          beta1(26,1)     / 1.79988721413553e-02, 5.59964911064388e-03, &
+      2.88501402231133e-03, 1.80096606761054e-03, 1.24753110589199e-03, &
+      9.22878876572938e-04, 7.14430421727287e-04, 5.71787281789705e-04, &
+      4.69431007606482e-04, 3.93232835462917e-04, 3.34818889318298e-04, &
+      2.88952148495752e-04, 2.52211615549573e-04, 2.22280580798883e-04, &
+      1.97541838033063e-04, 1.76836855019718e-04, 1.59316899661821e-04, &
+      1.44347930197334e-04, 1.31448068119965e-04, 1.20245444949303e-04, &
+      1.10449144504599e-04, 1.01828770740567e-04, 9.41998224204238e-05, &
+      8.74130545753834e-05, 8.13466262162801e-05, 7.59002269646219e-05/
+
+  data beta1(1,2), beta1(2,2), beta1(3,2), beta1(4,2), beta1(5,2), &
+          beta1(6,2), beta1(7,2), beta1(8,2), beta1(9,2), beta1(10,2), &
+          beta1(11,2),beta1(12,2),beta1(13,2),beta1(14,2),beta1(15,2), &
+          beta1(16,2),beta1(17,2),beta1(18,2),beta1(19,2),beta1(20,2), &
+          beta1(21,2),beta1(22,2),beta1(23,2),beta1(24,2),beta1(25,2), &
+          beta1(26,2)     /-1.49282953213429e-03,-8.78204709546389e-04, &
+     -5.02916549572035e-04,-2.94822138512746e-04,-1.75463996970783e-04, &
+     -1.04008550460816e-04,-5.96141953046458e-05,-3.12038929076098e-05, &
+     -1.26089735980230e-05,-2.42892608575730e-07, 8.05996165414274e-06, &
+      1.36507009262147e-05, 1.73964125472926e-05, 1.98672978842134e-05, &
+      2.14463263790823e-05, 2.23954659232457e-05, 2.28967783814713e-05, &
+      2.30785389811178e-05, 2.30321976080909e-05, 2.28236073720349e-05, &
+      2.25005881105292e-05, 2.20981015361991e-05, 2.16418427448104e-05, &
+      2.11507649256221e-05, 2.06388749782171e-05, 2.01165241997082e-05/
+
+  data beta2(1,1), beta2(2,1), beta2(3,1), beta2(4,1), beta2(5,1), &
+          beta2(6,1), beta2(7,1), beta2(8,1), beta2(9,1), beta2(10,1), &
+          beta2(11,1),beta2(12,1),beta2(13,1),beta2(14,1),beta2(15,1), &
+          beta2(16,1),beta2(17,1),beta2(18,1),beta2(19,1),beta2(20,1), &
+          beta2(21,1),beta2(22,1),beta2(23,1),beta2(24,1),beta2(25,1), &
+          beta2(26,1)     / 5.52213076721293e-04, 4.47932581552385e-04, &
+      2.79520653992021e-04, 1.52468156198447e-04, 6.93271105657044e-05, &
+      1.76258683069991e-05,-1.35744996343269e-05,-3.17972413350427e-05, &
+     -4.18861861696693e-05,-4.69004889379141e-05,-4.87665447413787e-05, &
+     -4.87010031186735e-05,-4.74755620890087e-05,-4.55813058138628e-05, &
+     -4.33309644511266e-05,-4.09230193157750e-05,-3.84822638603221e-05, &
+     -3.60857167535411e-05,-3.37793306123367e-05,-3.15888560772110e-05, &
+     -2.95269561750807e-05,-2.75978914828336e-05,-2.58006174666884e-05, &
+     -2.41308356761280e-05,-2.25823509518346e-05,-2.11479656768913e-05/
+
+  data beta2(1,2), beta2(2,2), beta2(3,2), beta2(4,2), beta2(5,2), &
+          beta2(6,2), beta2(7,2), beta2(8,2), beta2(9,2), beta2(10,2), &
+          beta2(11,2),beta2(12,2),beta2(13,2),beta2(14,2),beta2(15,2), &
+          beta2(16,2),beta2(17,2),beta2(18,2),beta2(19,2),beta2(20,2), &
+          beta2(21,2),beta2(22,2),beta2(23,2),beta2(24,2),beta2(25,2), &
+          beta2(26,2)     /-4.74617796559960e-04,-4.77864567147321e-04, &
+     -3.20390228067038e-04,-1.61105016119962e-04,-4.25778101285435e-05, &
+      3.44571294294968e-05, 7.97092684075675e-05, 1.03138236708272e-04, &
+      1.12466775262204e-04, 1.13103642108481e-04, 1.08651634848774e-04, &
+      1.01437951597662e-04, 9.29298396593364e-05, 8.40293133016090e-05, &
+      7.52727991349134e-05, 6.69632521975731e-05, 5.92564547323195e-05, &
+      5.22169308826976e-05, 4.58539485165361e-05, 4.01445513891487e-05, &
+      3.50481730031328e-05, 3.05157995034347e-05, 2.64956119950516e-05, &
+      2.29363633690998e-05, 1.97893056664022e-05, 1.70091984636413e-05/
+
+  data beta3(1,1), beta3(2,1), beta3(3,1), beta3(4,1), beta3(5,1), &
+          beta3(6,1), beta3(7,1), beta3(8,1), beta3(9,1), beta3(10,1), &
+          beta3(11,1),beta3(12,1),beta3(13,1),beta3(14,1),beta3(15,1), &
+          beta3(16,1),beta3(17,1),beta3(18,1),beta3(19,1),beta3(20,1), &
+          beta3(21,1),beta3(22,1),beta3(23,1),beta3(24,1),beta3(25,1), &
+          beta3(26,1)     / 7.36465810572578e-04, 8.72790805146194e-04, &
+      6.22614862573135e-04, 2.85998154194304e-04, 3.84737672879366e-06, &
+     -1.87906003636972e-04,-2.97603646594555e-04,-3.45998126832656e-04, &
+     -3.53382470916038e-04,-3.35715635775049e-04,-3.04321124789040e-04, &
+     -2.66722723047613e-04,-2.27654214122820e-04,-1.89922611854562e-04, &
+     -1.55058918599094e-04,-1.23778240761874e-04,-9.62926147717644e-05, &
+     -7.25178327714425e-05,-5.22070028895634e-05,-3.50347750511901e-05, &
+     -2.06489761035552e-05,-8.70106096849767e-06, 1.13698686675100e-06, &
+      9.16426474122779e-06, 1.56477785428873e-05, 2.08223629482467e-05/
+
+  data gama(1),   gama(2),   gama(3),   gama(4),   gama(5), &
+          gama(6),   gama(7),   gama(8),   gama(9),   gama(10), &
+          gama(11),  gama(12),  gama(13),  gama(14),  gama(15), &
+          gama(16),  gama(17),  gama(18),  gama(19),  gama(20), &
+          gama(21),  gama(22),  gama(23),  gama(24),  gama(25), &
+          gama(26)        / 6.29960524947437e-01, 2.51984209978975e-01, &
+      1.54790300415656e-01, 1.10713062416159e-01, 8.57309395527395e-02, &
+      6.97161316958684e-02, 5.86085671893714e-02, 5.04698873536311e-02, &
+      4.42600580689155e-02, 3.93720661543510e-02, 3.54283195924455e-02, &
+      3.21818857502098e-02, 2.94646240791158e-02, 2.71581677112934e-02, &
+      2.51768272973862e-02, 2.34570755306079e-02, 2.19508390134907e-02, &
+      2.06210828235646e-02, 1.94388240897881e-02, 1.83810633800683e-02, &
+      1.74293213231963e-02, 1.65685837786612e-02, 1.57865285987918e-02, &
+      1.50729501494096e-02, 1.44193250839955e-02, 1.38184805735342e-02/
+!
+  ta = epsilon ( ta )
+  tol = max ( ta, 1.0E-15 )
+  tb = r1mach(5)
+  ju = i1mach(12)
+
+  if ( flgjy /= 1.0E+00 ) then
+    jr = i1mach(11)
+    elim = 2.303E+00 * tb * ( real ( - ju ) - real ( jr ) )
+  else
+    elim = 2.303 * ( tb * real ( - ju ) - 3.0E+00 )
+  end if
+
+  fn = fnu
+  iflw = 0
+
+  do jn = 1, in
+
+    xx = x / fn
+    wk(1) = 1.0E+00 - xx * xx
+    abw2 = abs ( wk(1) )
+    wk(2) = sqrt ( abw2 )
+    wk(7) = fn**con2
+
+    if ( abw2 > 0.27750 ) go to 80
+!
+!  asymptotic expansion
+!  cases near x=fn, abs(1.-(x/fn)**2)<=0.2775
+!  coefficients of asymptotic expansion by series
+!
+!  zeta and truncation for a(zeta) and b(zeta) series
+!
+!  kmax is truncation index for a(zeta) and b(zeta) series=max(2,sa)
+!
+    if ( abw2 == 0.0E+00 ) then
+      sa = 0.0E+00
+    else
+      sa = tols / log ( abw2 )
+    end if
+
+    sb = sa
+
+    do i = 1, 5
+      akm = max ( sa, 2.0E+00 )
+      kmax(i) = int ( akm )
+      sa = sa + sb
+    end do
+
+    kb = kmax(5)
+    klast = kb - 1
+    sa = gama(kb)
+
+    do k = 1, klast
+      kb = kb - 1
+      sa = sa * wk(1) + gama(kb)
+    end do
+
+    z = wk(1) * sa
+    az = abs ( z )
+    rtz = sqrt ( az )
+    wk(3) = con1 * az * rtz
+    wk(4) = wk(3) * fn
+    wk(5) = rtz * wk(7)
+    wk(6) = - wk(5) * wk(5)
+    if ( z <= 0.0E+00 ) go to 35
+    if ( wk(4) > elim ) go to 75
+    wk(6) = - wk(6)
+
+   35   continue
+
+    phi = sqrt ( sqrt ( sa + sa + sa + sa ) )
+!
+!     b(zeta) for s=0
+!
+    kb = kmax(5)
+    klast = kb - 1
+    sb = beta(kb,1)
+
+    do k = 1, klast
+      kb = kb - 1
+      sb = sb * wk(1) + beta(kb,1)
+    end do
+
+    ksp1 = 1
+    fn2 = fn * fn
+    rfn2 = 1.0E+00 / fn2
+    rden = 1.0E+00
+    asum = 1.0E+00
+    relb = tol * abs ( sb )
+    bsum = sb
+
+    do ks = 1, 4
+
+      ksp1 = ksp1 + 1
+      rden = rden * rfn2
+!
+!     a(zeta) and b(zeta) for s=1,2,3,4
+!
+      kstemp = 5 - ks
+      kb = kmax(kstemp)
+      klast = kb - 1
+      sa = alfa(kb,ks)
+      sb = beta(kb,ksp1)
+
+      do k = 1, klast
+        kb = kb - 1
+        sa = sa * wk(1) + alfa(kb,ks)
+        sb = sb * wk(1) + beta(kb,ksp1)
+      end do
+
+      ta = sa * rden
+      tb = sb * rden
+      asum = asum + ta
+      bsum = bsum + tb
+
+      if ( abs ( ta ) <= tol .and. abs ( tb ) <= relb ) then
+        exit
+      end if
+
+    end do
+
+!  70   continue
+
+    bsum = bsum / ( fn * wk(7) )
+
+    go to 160
+
+   75   continue
+    iflw = 1
+    return
+
+   80   continue
+
+    upol(1) = 1.0E+00
+    tau = 1.0E+00 / wk(2)
+    t2 = 1.0E+00 / wk(1)
+    if ( wk(1) >= 0.0E+00 ) go to 90
+!
+!  cases for (x/fn)>sqrt(1.2775)
+!
+    wk(3) = abs(wk(2)-atan(wk(2)))
+    wk(4) = wk(3)*fn
+    rcz = -con1/wk(4)
+    z32 = 1.5*wk(3)
+    rtz = z32**con2
+    wk(5) = rtz*wk(7)
+    wk(6) = -wk(5)*wk(5)
+    go to 100
+   90   continue
+!
+!     cases for (x/fn)<sqrt(0.7225)
+!
+    wk(3) = abs( log((1.0+wk(2))/xx)-wk(2))
+    wk(4) = wk(3)*fn
+    rcz = con1/wk(4)
+    if ( wk(4)>elim) go to 75
+    z32 = 1.5*wk(3)
+    rtz = z32**con2
+    wk(7) = fn**con2
+    wk(5) = rtz*wk(7)
+    wk(6) = wk(5)*wk(5)
+  100   continue
+    phi = sqrt((rtz+rtz)*tau)
+    tb = 1.0E+00
+    asum = 1.0E+00
+    tfn = tau/fn
+    upol(2) = (c(1)*t2+c(2))*tfn
+    crz32 = con548*rcz
+    bsum = upol(2) + crz32
+    relb = tol*abs(bsum)
+    ap = tfn
+    ks = 0
+    kp1 = 2
+    rzden = rcz
+    l = 2
+
+    do lr=2,8,2
+!
+!     compute two u polynomials for next a(zeta) and b(zeta)
+!
+      lrp1 = lr + 1
+      do k=lr,lrp1
+        ks = ks + 1
+        kp1 = kp1 + 1
+        l = l + 1
+        s1 = c(l)
+        do j=2,kp1
+          l = l + 1
+          s1 = s1*t2 + c(l)
+        end do
+        ap = ap*tfn
+        upol(kp1) = ap*s1
+        cr(ks) = br(ks)*rzden
+        rzden = rzden*rcz
+        dr(ks) = ar(ks)*rzden
+      end do
+
+      suma = upol(lrp1)
+      sumb = upol(lr+2) + upol(lrp1)*crz32
+      ju = lrp1
+
+      do jr = 1, lr
+        ju = ju - 1
+        suma = suma + cr(jr)*upol(ju)
+        sumb = sumb + dr(jr)*upol(ju)
+      end do
+
+      tb = -tb
+      if (wk(1)>0.0) tb = abs(tb)
+      asum = asum + suma*tb
+      bsum = bsum + sumb*tb
+
+      if ( abs(suma)<=tol .and. abs(sumb)<=relb ) then
+        exit
+      end if
+
+    end do
+
+! 150 continue
+
+    tb = wk(5)
+    if ( wk(1) > 0.0E+00 ) tb = -tb
+    bsum = bsum/tb
+
+  160   continue
+    call funjy(wk(6), wk(5), wk(4), fi, dfi)
+    y(jn) = flgjy*phi*(fi*asum+dfi*bsum)/wk(7)
+    fn = fn - flgjy
+
+  end do
+
+  return
+end
+subroutine bakslv ( nr, n, a, x, b )
+!
+!*******************************************************************************
+!
+!! BAKSLV solves A*x=b where A is an upper triangular matrix.
+!
+!
+!  Discussion:
+!
+!    BAKSLV solves the linear equations TRANSPOSE(A)*x=b, where A is a
+!    lower triangular matrix.  This routine is required by the UNCMIN
+!    minimization program.
+!
+!    If B is no longer required by calling routine, then vectors B and
+!    X may share the same storage, and the output value of X will
+!    overwrite the input value of B.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+!    Input, integer NR, the leading dimension of A.
+!
+!    Input, integer N, the number of rows and columns in A.
+!
+!    Input, real A(NR,N), the N by N matrix, containing the lower
+!    triangular matrix.  A is not altered by this routine.
+!
+!    Output, real X(N), the solution vector.
+!
+!    Input, real B(N), the right hand side vector.
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real b(n)
+  integer i
+  integer ip1
+  integer j
+  real x(n)
+!
+!  Solve (l-transpose)x=b. (back solve)
+!
+  i = n
+  x(i) = b(i) / a(i,i)
+
+  if ( n == 1 ) then
+    return
+  end if
+
+  do
+
+    ip1 = i
+    i = i - 1
+
+    x(i) = ( b(i) - dot_product ( x(ip1:n), a(ip1:n,i) ) ) / a(i,i)
+
+    if ( i == 1 ) then
+      exit
+    end if
+
+  end do
+
+  return
+end
+function besi0 ( x )
+!
+!*******************************************************************************
+!
+!! BESI0 computes the hyperbolic Bessel function of the first kind of order zero.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+!    Input, real X, the argument of the Bessel function.
+!
+!    Output, real BESI0, the value of the Bessel function at X.
+!
+  real besi0
+  real besi0e
+  real bi0cs(12)
+  real csevl
+  integer inits
+  integer, save :: nti0 = 0
+  real r1mach
+  real x
+  real, save :: xmax = 0.0E+00
+  real, save :: xsml = 0.0E+00
+  real y
+!
+  data bi0cs( 1) /   -0.07660547252839144951E+00 /
+  data bi0cs( 2) /    1.927337953993808270E+00 /
+  data bi0cs( 3) /    0.2282644586920301339E+00 /
+  data bi0cs( 4) /    0.01304891466707290428E+00 /
+  data bi0cs( 5) /    0.00043442709008164874E+00 /
+  data bi0cs( 6) /    0.00000942265768600193E+00 /
+  data bi0cs( 7) /    0.00000014340062895106E+00 /
+  data bi0cs( 8) /    0.00000000161384906966E+00 /
+  data bi0cs( 9) /    0.00000000001396650044E+00 /
+  data bi0cs(10) /    0.00000000000009579451E+00 /
+  data bi0cs(11) /    0.00000000000000053339E+00 /
+  data bi0cs(12) /    0.00000000000000000245E+00 /
+!
+  if ( nti0 == 0 ) then
+    nti0 = inits ( bi0cs, 12, 0.1E+00 * r1mach(3) )
+    xsml = 2.0E+00 * sqrt ( epsilon ( xsml ) )
+    xmax = log ( huge ( xmax ) )
+  end if
+
+  y = abs ( x )
+
+  if ( y <= 3.0E+00 ) then
+
+    if ( y > xsml ) then
+      besi0 = 2.75E+00 + csevl ( y*y/4.5E+00-1.0E+00, bi0cs, nti0 )
+    else
+      besi0 = 1.0E+00
+    end if
+
+    return
+
+  end if
+
+  if ( y > xmax ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'BESI0 - Fatal error!'
+    write ( *, * ) '  |X| is so big that BESI0 will overflow.'
+    stop
+  end if
+
+  besi0 = exp(y) * besi0e(x)
+
+  return
+end
+function besi0e ( x )
+!
+!*******************************************************************************
+!
+!! BESI0E computes the exponentially scaled hyperbolic Bessel function of the first kind of order ze
+!
+!
+!  Discussion:
+!
+!    BESI0E calculates the exponentially scaled modified hyperbolic
+!    Bessel function of the first kind of order zero for real argument X.
+!
+!      besi0e(x) = exp ( - abs ( x ) ) * i0 ( x ).
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+!    Input, real X, the argument of the Bessel function.
+!
+!    Output, real BESI0E, the value of the Bessel function at X.
+!
+  real ai02cs(22)
+  real ai0cs(21)
+  real besi0e
+  real bi0cs(12)
+  real csevl
+  integer inits
+  integer ntai0
+  integer ntai02
+  integer nti0
+  real r1mach
+  real x
+  real, save :: xsml = 0.0E+00
+  real y
+!
+  data bi0cs( 1) /   -.07660547252839144951 /
+  data bi0cs( 2) /   1.927337953993808270 /
+  data bi0cs( 3) /    .2282644586920301339 /
+  data bi0cs( 4) /    .01304891466707290428 /
+  data bi0cs( 5) /    .00043442709008164874 /
+  data bi0cs( 6) /    .00000942265768600193 /
+  data bi0cs( 7) /    .00000014340062895106 /
+  data bi0cs( 8) /    .00000000161384906966 /
+  data bi0cs( 9) /    .00000000001396650044 /
+  data bi0cs(10) /    .00000000000009579451 /
+  data bi0cs(11) /    .00000000000000053339 /
+  data bi0cs(12) /    .00000000000000000245 /
+  data ai0cs( 1) /    .07575994494023796 /
+  data ai0cs( 2) /    .00759138081082334 /
+  data ai0cs( 3) /    .00041531313389237 /
+  data ai0cs( 4) /    .00001070076463439 /
+  data ai0cs( 5) /   -.00000790117997921 /
+  data ai0cs( 6) /   -.00000078261435014 /
+  data ai0cs( 7) /    .00000027838499429 /
+  data ai0cs( 8) /    .00000000825247260 /
+  data ai0cs( 9) /   -.00000001204463945 /
+  data ai0cs(10) /    .00000000155964859 /
+  data ai0cs(11) /    .00000000022925563 /
+  data ai0cs(12) /   -.00000000011916228 /
+  data ai0cs(13) /    .00000000001757854 /
+  data ai0cs(14) /    .00000000000112822 /
+  data ai0cs(15) /   -.00000000000114684 /
+  data ai0cs(16) /    .00000000000027155 /
+  data ai0cs(17) /   -.00000000000002415 /
+  data ai0cs(18) /   -.00000000000000608 /
+  data ai0cs(19) /    .00000000000000314 /
+  data ai0cs(20) /   -.00000000000000071 /
+  data ai0cs(21) /    .00000000000000007 /
+  data ai02cs( 1) /    .05449041101410882 /
+  data ai02cs( 2) /    .00336911647825569 /
+  data ai02cs( 3) /    .00006889758346918 /
+  data ai02cs( 4) /    .00000289137052082 /
+  data ai02cs( 5) /    .00000020489185893 /
+  data ai02cs( 6) /    .00000002266668991 /
+  data ai02cs( 7) /    .00000000339623203 /
+  data ai02cs( 8) /    .00000000049406022 /
+  data ai02cs( 9) /    .00000000001188914 /
+  data ai02cs(10) /   -.00000000003149915 /
+  data ai02cs(11) /   -.00000000001321580 /
+  data ai02cs(12) /   -.00000000000179419 /
+  data ai02cs(13) /    .00000000000071801 /
+  data ai02cs(14) /    .00000000000038529 /
+  data ai02cs(15) /    .00000000000001539 /
+  data ai02cs(16) /   -.00000000000004151 /
+  data ai02cs(17) /   -.00000000000000954 /
+  data ai02cs(18) /    .00000000000000382 /
+  data ai02cs(19) /    .00000000000000176 /
+  data ai02cs(20) /   -.00000000000000034 /
+  data ai02cs(21) /   -.00000000000000027 /
+  data ai02cs(22) /    .00000000000000003 /
+  data nti0, ntai0, ntai02 / 3*0 /
+!
+  if ( nti0 == 0 ) then
+    nti0 = inits ( bi0cs, 12, 0.1E+00*r1mach(3) )
+    ntai0 = inits ( ai0cs, 21, 0.1E+00*r1mach(3) )
+    ntai02 = inits ( ai02cs, 22, 0.1E+00*r1mach(3) )
+    xsml = 2.0E+00 * sqrt ( epsilon ( xsml ) )
+  end if
+
+  y = abs(x)
+
+       if ( y <= xsml ) then
+
+    besi0e = 1.0E+00
+
+  else if ( y <= 3.0E+00 ) then
+
+    besi0e = exp(-y) * ( 2.75 + csevl (y*y/4.5-1.0, bi0cs, nti0) )
+
+  else if ( y <= 8.0E+00 ) then
+
+    besi0e = ( 0.375E+00 + csevl ((48.0/y-11.0)/5.0, ai0cs, ntai0) ) / sqrt(y)
+
+  else if ( y > 8.0E+00 ) then
+
+    besi0e = ( 0.375E+00 + csevl (16.0/y-1.0, ai02cs, ntai02)) / sqrt(y)
+
+  end if
+
+  return
+end
+subroutine besj ( x, alpha, n, y, nz )
+!
+!*******************************************************************************
+!
+!! BESJ computes an N member sequence of J Bessel functions.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    D. E. Amos, S. L. Daniel, M. K. Weston,
+!    SAND-75-0147
+!    CDC 6600 subroutines IBESS and JBESS for Bessel functions
+!      I(NU,X) and J(NU,X), X .GE. 0, NU .GE. 0
+!    ACM Transactions on Mathematical Software,
+!    Volume 3, pages 76-92, 1977.
+!
+!    F. W. J. Olver,
+!    Tables of Bessel Functions of Moderate or Large Orders,
+!    NPL Mathematical Tables, Vol. 6,
+!    Her Majesty's Stationery Office, London, 1962.
+!
+!  Discussion:
+!
+!    BESJ computes an N member sequence of J Bessel functions
+!
+!      J(ALPHA+K-1) (X)
+!
+!    for K=1,..,N for non-negative order ALPHA and X.
+!
+!    A combination of the power series, the asymptotic expansion for X
+!    to infinity and the uniform asymptotic expansion for NU to infinity
+!    are applied over subdivisions of the (NU,X) plane.  For values of
+!    (NU,X) not covered by one of these formulae, the order is
+!    incremented or decremented by integer values into a region where
+!    one of the formulas apply.
+!
+!    Backward recursion is applied to reduce orders by integer values
+!    except where the entire sequence lies in the oscillatory region.
+!    In this case forward recursion is stable and values from the
+!    asymptotic expansion for X to infinity start the recursion when it
+!    is efficient to do so.
+!
+!    Leading terms of the series and uniform expansion are tested for
+!    underflow.  If a sequence is requested and the last member would
+!    underflow, the result is set to zero and the next lower order
+!    tried, etc., until a member comes on scale or all members are set
+!    to zero.
+!
+!    Overflow cannot occur.
+!
+!  Parameters:
+!
+!    Input, real X, X .GE. 0.0, the argument of the Bessel function.
+!
+!    Input, real ALPHA, order of first member of the sequence.
+!    ALPHA must be at least 0.0.
+!
+!    Input, integer N, number of members in the sequence,
+!    N must be at least 1.
+!
+!    Output, real Y(N), a vector whose first N components contain
+!    values for J/sub(ALPHA+K-1)/(X), K=1,...,N
+!
+!    Output, integer NZ, the number of components of Y set to zero
+!    due to underflow,
+!
+!    NZ=0, normal return, computation completed
+!
+!    NZ .NE. 0, Y(N-NZ+1) through Y(N) were set to 0.
+!
+  external jairy
+!
+  real ak
+  real akm
+  real alngam
+  real alpha
+  real ans
+  real ap
+  real arg
+  real coef
+  real dalpha
+  real dfn
+  real dtm
+  real earg
+  real elim1
+  real etx
+  real fidal
+  real flgjy
+  real fn
+  real fnf
+  real fni
+  real fnp1
+  real fnu
+  real fnulim(2)
+  real gln
+  integer i
+  integer i1
+  integer i1mach
+  integer i2
+  integer ialp
+  integer idalp
+  integer iflw
+  integer in
+  integer, parameter :: inlim = 150
+  integer is
+  integer k
+  integer kk
+  integer km
+  integer kt
+  integer n
+  integer nn
+  integer ns
+  integer nz
+  real, parameter :: pdf = 0.785398163397448E+00
+  real pidt
+  real pp(4)
+  real r1mach
+  real rden
+  real relb
+  real rttp
+  real, parameter :: rtwo = 1.34839972492648E+00
+  real rtx
+  real rzden
+  real s
+  real sa
+  real sb
+  real sxo2
+  real s1
+  real s2
+  real t
+  real ta
+  real tau
+  real tb
+  real temp(3)
+  real tfn
+  real tm
+  real tol
+  real tolln
+  real trx
+  real tx
+  real t1
+  real t2
+  real wk(7)
+  real x
+  real xo2
+  real xo2l
+  real y(n)
+!
+  data rttp,pidt / 7.97884560802865e-01, 1.57079632679490/
+  data  pp(1),  pp(2),  pp(3),  pp(4) / 8.72909153935547, &
+    2.65693932265030e-01, 1.24578576865586e-01, 7.70133747430388e-04/
+  data fnulim(1), fnulim(2) /      100.0,     60.0E+00     /
+!
+  nz = 0
+  kt = 1
+!     i1mach(14) replaces i1mach(11) in a double precision code
+!     i1mach(15) replaces i1mach(12) in a double precision code
+  ta = epsilon ( ta )
+  tol = max (ta,1.0e-15)
+  i1 = i1mach(11) + 1
+  i2 = i1mach(12)
+  tb = r1mach(5)
+  elim1 = 2.303*(real(-i2)*tb-3.0)
+!
+!     tolln = -ln(tol)
+!
+  tolln = 2.303*tb*real(i1)
+  tolln = min (tolln,34.5388)
+  if (n-1) 720, 10, 20
+   10 kt = 2
+   20 nn = n
+  if (x) 730, 30, 80
+   30 if (alpha) 710, 40, 50
+   40 y(1) = 1.0E+00
+  if (n==1) return
+  i1 = 2
+  go to 60
+   50 i1 = 1
+   60 continue
+
+  y(i1:n) = 0.0E+00
+
+  return
+   80 continue
+  if (alpha<0.0) go to 710
+
+  ialp = int(alpha)
+  fni = real(ialp+n-1)
+  fnf = alpha - real(ialp)
+  dfn = fni + fnf
+  fnu = dfn
+  xo2 = x*0.5
+  sxo2 = xo2*xo2
+!
+!     decision tree for region where series, asymptotic expansion for x
+!     to infinity and asymptotic expansion for nu to infinity are
+!     applied.
+!
+  if (sxo2<=(fnu+1.0)) go to 90
+  ta = max (20.0,fnu)
+  if (x>ta) go to 120
+  if (x>12.0) go to 110
+  xo2l = log(xo2)
+  ns = int(sxo2-fnu) + 1
+  go to 100
+   90 fn = fnu
+  fnp1 = fn + 1.0E+00
+  xo2l = log(xo2)
+  is = kt
+  if (x<=0.50) go to 330
+  ns = 0
+  100 fni = fni + real(ns)
+  dfn = fni + fnf
+  fn = dfn
+  fnp1 = fn + 1.0E+00
+  is = kt
+  if (n-1+ns>0) is = 3
+  go to 330
+  110 ans = max (36.0-fnu,0.0)
+  ns = int(ans)
+  fni = fni + real(ns)
+  dfn = fni + fnf
+  fn = dfn
+  is = kt
+  if (n-1+ns>0) is = 3
+  go to 130
+  120 continue
+  rtx = sqrt(x)
+  tau = rtwo*rtx
+  ta = tau + fnulim(kt)
+  if (fnu<=ta) go to 480
+  fn = fnu
+  is = kt
+!
+!  Uniform asymptotic expansion for nu to infinity
+!
+  130 continue
+  i1 = abs(3-is)
+  i1 = max(i1,1)
+  flgjy = 1.0E+00
+  call asyjy(jairy,x,fn,flgjy,i1,temp(is),wk,iflw)
+  if ( iflw/=0) go to 380
+  go to (320, 450, 620), is
+  310 temp(1) = temp(3)
+  kt = 1
+  320 is = 2
+  fni = fni - 1.0E+00
+  dfn = fni + fnf
+  fn = dfn
+  if ( i1==2) go to 450
+  go to 130
+!
+!  Series for (x/2)**2<=nu+1
+!
+  330 continue
+  gln = alngam(fnp1)
+  arg = fn*xo2l - gln
+  if (arg<(-elim1)) go to 400
+  earg = exp(arg)
+  340 continue
+  s = 1.0E+00
+  if (x<tol) go to 360
+  ak = 3.0E+00
+  t2 = 1.0E+00
+  t = 1.0E+00
+  s1 = fn
+
+  do k=1, 17
+    s2 = t2 + s1
+    t = -t*sxo2/s2
+    s = s + t
+    if (abs(t)<tol) go to 360
+    t2 = t2 + ak
+    ak = ak + 2.0E+00
+    s1 = s1 + fn
+  end do
+
+  360 continue
+  temp(is) = s*earg
+  go to (370, 450, 610), is
+  370 earg = earg*fn/xo2
+  fni = fni - 1.0E+00
+  dfn = fni + fnf
+  fn = dfn
+  is = 2
+  go to 340
+!
+!  Set underflow value and update parameters
+!
+  380 y(nn) = 0.0E+00
+  nn = nn - 1
+  fni = fni - 1.0E+00
+  dfn = fni + fnf
+  fn = dfn
+  if (nn-1) 440, 390, 130
+  390 kt = 2
+  is = 2
+  go to 130
+  400 y(nn) = 0.0E+00
+  nn = nn - 1
+  fnp1 = fn
+  fni = fni - 1.0E+00
+  dfn = fni + fnf
+  fn = dfn
+  if (nn-1) 440, 410, 420
+  410 continue
+  kt = 2
+  is = 2
+  420 if (sxo2<=fnp1) go to 430
+  go to 130
+  430 arg = arg - xo2l + log(fnp1)
+  if (arg<(-elim1)) go to 400
+  go to 330
+  440 nz = n - nn
+  return
+!
+!  Backward recursion section
+!
+  450 continue
+  nz = n - nn
+  if (kt==2) go to 470
+!     backward recur from index alpha+nn-1 to alpha
+  y(nn) = temp(1)
+  y(nn-1) = temp(2)
+  if (nn==2) return
+  trx = 2.0/x
+  dtm = fni
+  tm = (dtm+fnf)*trx
+  k = nn + 1
+  do i=3,nn
+    k = k - 1
+    y(k-2) = tm*y(k-1) - y(k)
+    dtm = dtm - 1.0E+00
+    tm = (dtm+fnf)*trx
+  end do
+  return
+  470 y(1) = temp(2)
+  return
+!
+!     asymptotic expansion for x to infinity with forward recursion in
+!     oscillatory region x>max(20, nu), provided the last member
+!     of the sequence is also in the region.
+!
+  480 continue
+  in = int(alpha-tau+2.0)
+  if (in<=0) go to 490
+  idalp = ialp - in - 1
+  kt = 1
+  go to 500
+  490 continue
+  idalp = ialp
+  in = 0
+  500 is = kt
+  fidal = real(idalp)
+  dalpha = fidal + fnf
+  arg = x - pidt*dalpha - pdf
+  sa = sin(arg)
+  sb = cos(arg)
+  coef = rttp/rtx
+  etx = 8.0*x
+  510 continue
+  dtm = fidal + fidal
+  dtm = dtm*dtm
+  tm = 0.0E+00
+  if (fidal==0.0E+00 .and. abs(fnf)<tol) go to 520
+  tm = 4.0*fnf*(fidal+fidal+fnf)
+  520 continue
+  trx = dtm - 1.0E+00
+  t2 = (trx+tm)/etx
+  s2 = t2
+  relb = tol*abs(t2)
+  t1 = etx
+  s1 = 1.0E+00
+  fn = 1.0E+00
+  ak = 8.0E+00
+
+  do k=1,13
+    t1 = t1 + etx
+    fn = fn + ak
+    trx = dtm - fn
+    ap = trx + tm
+    t2 = -t2*ap/t1
+    s1 = s1 + t2
+    t1 = t1 + etx
+    ak = ak + 8.0E+00
+    fn = fn + ak
+    trx = dtm - fn
+    ap = trx + tm
+    t2 = t2*ap/t1
+    s2 = s2 + t2
+    if (abs(t2)<=relb) go to 540
+    ak = ak + 8.0E+00
+  end do
+
+  540 temp(is) = coef*(s1*sb-s2*sa)
+  if ( is==2) go to 560
+  550 fidal = fidal + 1.0E+00
+  dalpha = fidal + fnf
+  is = 2
+  tb = sa
+  sa = -sb
+  sb = tb
+  go to 510
+!
+!  Forward recursion section
+!
+  560 if (kt==2) go to 470
+  s1 = temp(1)
+  s2 = temp(2)
+  tx = 2.0/x
+  tm = dalpha*tx
+  if (in==0) go to 580
+!
+!   Forward recur to index alpha
+!
+  do i = 1, in
+    s = s2
+    s2 = tm*s2 - s1
+    tm = tm + tx
+    s1 = s
+  end do
+
+  if (nn==1) go to 600
+  s = s2
+  s2 = tm*s2 - s1
+  tm = tm + tx
+  s1 = s
+  580 continue
+!
+!  Forward recur from index alpha to alpha+n-1
+!
+  y(1) = s1
+  y(2) = s2
+  if (nn==2) return
+  do i=3,nn
+    y(i) = tm*y(i-1) - y(i-2)
+    tm = tm + tx
+  end do
+  return
+  600 y(1) = s2
+  return
+!
+!     backward recursion with normalization by
+!     asymptotic expansion for nu to infinity or power series.
+!
+  610 continue
+!     computation of last order for series normalization
+  akm = max (3.0-fn,0.0)
+  km = int(akm)
+  tfn = fn + real(km)
+  ta = (gln+tfn-0.9189385332-0.0833333333/tfn)/(tfn+0.5)
+  ta = xo2l - ta
+  tb = -(1.0-1.5/tfn)/tfn
+  akm = tolln/(-ta+sqrt(ta*ta-tolln*tb)) + 1.5
+  in = km + int(akm)
+  go to 660
+  620 continue
+!
+!     computation of last order for asymptotic expansion normalization
+!
+  gln = wk(3) + wk(2)
+  if (wk(6)>30.0) go to 640
+  rden = (pp(4)*wk(6)+pp(3))*wk(6) + 1.0E+00
+  rzden = pp(1) + pp(2)*wk(6)
+  ta = rzden/rden
+  if (wk(1)<0.10) go to 630
+  tb = gln/wk(5)
+  go to 650
+  630 continue
+
+  tb=(1.259921049+(0.1679894730+0.0887944358*wk(1))*wk(1))/wk(7)
+  go to 650
+  640 continue
+  ta = 0.5*tolln/wk(4)
+  ta=((0.0493827160*ta-0.1111111111)*ta+0.6666666667)*ta*wk(6)
+  if (wk(1)<0.10) go to 630
+  tb = gln/wk(5)
+  650 in = int(ta/tb+1.5)
+  if (in>inlim) go to 310
+  660 continue
+  dtm = fni + real(in)
+  trx = 2.0/x
+  tm = (dtm+fnf)*trx
+  ta = 0.0E+00
+  tb = tol
+  kk = 1
+  670 continue
+!
+!     backward recur unindexed
+!
+  do i=1,in
+    s = tb
+    tb = tm*tb - ta
+    ta = s
+    dtm = dtm - 1.0E+00
+    tm = (dtm+fnf)*trx
+  end do
+!
+!     normalization
+  if (kk/=1) go to 690
+  ta = (ta/tb)*temp(3)
+  tb = temp(3)
+  kk = 2
+  in = ns
+  if (ns/=0) go to 670
+  690 y(nn) = tb
+  nz = n - nn
+  if (nn==1) return
+  k = nn - 1
+  y(k) = tm*tb - ta
+  if (nn==2) return
+  dtm = dtm - 1.0E+00
+  tm = (dtm+fnf)*trx
+  km = k - 1
+!
+!  backward recur indexed
+!
+  do i=1,km
+    y(k-1) = tm*y(k) - y(k+1)
+    dtm = dtm - 1.0E+00
+    tm = (dtm+fnf)*trx
+    k = k - 1
+  end do
+
+  return
+
+  710 continue
+  call xerror( 'besj - order, alpha, less than zero.', 36, 2, 1)
+  return
+  720 continue
+  call xerror( 'besj - n less than one.', 23, 2, 1)
+  return
+  730 continue
+  call xerror( 'besj - x less than zero.', 24, 2, 1)
+  return
+end
+subroutine bp ( n, b, x )
+!
+!*******************************************************************************
+!
+!! BP evaluates the N+1 Bernstein basis functions of degree N on [0,1].
+!
+!
+!  Definition:
+!
+!    The I-th Bernstein basis polynomial of degree N is defined as:
+!
+!      B(N,I,X)= N!/(I!*(N-I)!) * (1-X)**(N-I) * X**I
+!
+!    although this is not how the values are computed.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+!    Input, integer N, should be 0 or greater.
+!
+!    Input, real X, the point where the functions should be evaluated.
+!
+!    Output, real B(0:N), the values of the Bernstein polynomials
+!    at the point X.
+!
+  integer n
+!
+  real b(0:n)
+  integer i
+  integer j
+  real x
+!
+  if ( n == 0 ) then
+
+    b(0) = 1.0E+00
+
+  else if ( n > 0 ) then
+
+    do i = 1, n
+
+       if ( i == 1 ) then
+         b(1) = x
+       else
+         b(i) = x * b(i-1)
+       end if
+
+       do j = i-1, 1, -1
+         b(j) = x * b(j-1) + ( 1.0E+00 - x ) * b(j)
+       end do
+
+       if ( i == 1 ) then
+         b(0) = 1.0E+00 - x
+       else
+         b(0) = ( 1.0E+00 - x ) * b(0)
+       end if
+
+    end do
+
+  end if
+
+  return
+end
+subroutine cfftb ( n, c, wsave )
+!
+!*******************************************************************************
+!
+!! CFFTB computes the backward complex discrete Fourier transform.
+!
+!
+!  Discussion:
+!
+!    This process is sometimes called Fourier synthesis.
+!
+!    CFFTB computes a complex periodic sequence from its Fourier coefficients.
+!
+!    A call of CFFTF followed by a call of CFFTB will multiply the
+!    sequence by N.  In other words, the transforms are not normalized.
+!
+!    The array WSAVE must be initialized by CFFTI.
+!
+!    The transform is defined by:
+!
+!      C_out(J) = sum ( 1 <= K <= N )
+!        C_in(K) * exp ( sqrt ( - 1 ) * ( J - 1 ) * ( K - 1 ) * 2 * PI / N )
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.
+!    The method is more efficient when N is the product of small primes.
+!
+!    Input/output, complex C(N).
+!    On input, C contains the sequence of Fourier coefficients.
+!    On output, C contains the sequence of data values that correspond
+!    to the input coefficients.
+!
+!    Input, real WSAVE(4*N+15).  The array must be initialized by calling
+!    CFFTI.  A different WSAVE array must be used for each different
+!    value of N.
+!
+  integer n
+!
+  complex c(n)
+  real wsave(4*n+15)
+!
+  if ( n <= 1 ) then
+    return
+  end if
+
+  call cfftb1 ( n, c, wsave(1), wsave(2*n+1), wsave(4*n+1) )
+
+  return
+end
+subroutine cfftb1 ( n, c, ch, wa, ifac )
+!
+!*******************************************************************************
+!
+!! CFFTB1 is a lower-level routine used by CFFTB.
+!
+!
+!  Modified:
+!
+!    12 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.
+!
+!    Input/output, complex C(N).
+!    On input, C contains the sequence of Fourier coefficients.
+!    On output, C contains the sequence of data values that correspond
+!    to the input coefficients.
+!
+!    Input, complex CH(N).
+!
+!    Input, real WA(2*N).
+!
+!    Input, integer IFAC(15).
+!    IFAC(1) = N, the number that was factored.
+!    IFAC(2) = NF, the number of factors.
+!    IFAC(3:2+NF), the factors.
+!
+  integer n
+!
+  complex c(n)
+  complex ch(n)
+  integer idl1
+  integer ido
+  integer ifac(15)
+  integer ip
+  integer iw
+  integer ix2
+  integer ix3
+  integer ix4
+  integer k1
+  integer l1
+  integer l2
+  integer na
+  integer nac
+  integer nf
+  real wa(2*n)
+!
+  nf = ifac(2)
+  na = 0
+  l1 = 1
+  iw = 1
+
+  do k1 = 1, nf
+
+    ip = ifac(k1+2)
+    l2 = ip * l1
+    ido = n / l2
+    idl1 = 2 * ido * l1
+
+    if ( ip == 4 ) then
+
+      ix2 = iw + 2 * ido
+      ix3 = ix2 + 2 * ido
+
+      if ( na == 0 ) then
+        call passb4 ( 2*ido, l1, c, ch, wa(iw), wa(ix2), wa(ix3) )
+      else
+        call passb4 ( 2*ido, l1, ch, c, wa(iw), wa(ix2), wa(ix3) )
+      end if
+
+      na = 1 - na
+
+    else if ( ip == 2 ) then
+
+      if ( na == 0 ) then
+        call passb2 ( 2*ido, l1, c, ch, wa(iw) )
+      else
+        call passb2 ( 2*ido, l1, ch, c, wa(iw) )
+      end if
+
+      na = 1 - na
+
+    else if ( ip == 3 ) then
+
+      ix2 = iw + 2 * ido
+
+      if ( na == 0 ) then
+        call passb3 ( 2*ido, l1, c, ch, wa(iw), wa(ix2) )
+      else
+        call passb3 ( 2*ido, l1, ch, c, wa(iw), wa(ix2) )
+      end if
+
+      na = 1 - na
+
+    else if ( ip == 5 ) then
+
+      ix2 = iw + 2 * ido
+      ix3 = ix2 + 2 * ido
+      ix4 = ix3 + 2 * ido
+
+      if ( na == 0 ) then
+        call passb5 ( 2*ido, l1, c, ch, wa(iw), wa(ix2), wa(ix3), wa(ix4) )
+      else
+        call passb5 ( 2*ido, l1, ch, c, wa(iw), wa(ix2), wa(ix3), wa(ix4) )
+      end if
+
+      na = 1 - na
+
+    else
+
+      if ( na == 0 ) then
+        call passb ( nac, 2*ido, ip, l1, idl1, c, c, c, ch, ch, wa(iw) )
+      else
+        call passb ( nac, 2*ido, ip, l1, idl1, ch, ch, ch, c, c, wa(iw) )
+      end if
+
+      if ( nac /= 0 ) then
+        na = 1 - na
+      end if
+
+    end if
+
+    l1 = l2
+    iw = iw + ( ip - 1 ) * 2 * ido
+
+  end do
+
+  if ( na /= 0 ) then
+    c(1:n) = ch(1:n)
+  end if
+
+  return
+end
+subroutine cfftb_2d ( ldf, n, f, wsave )
+!
+!*******************************************************************************
+!
+!! CFFTB_2D computes a backward two dimensional complex fast Fourier transform.
+!
+!
+!  Discussion:
+!
+!    The routine computes the backward two dimensional fast Fourier transform,
+!    of a complex N by N matrix of data.
+!
+!    The output is unscaled, that is, a call to CFFTB_2D followed by a call
+!    to CFFTF_2D will return the original data multiplied by N*N.
+!
+!    For some applications it is desirable to have the transform scaled so
+!    the center of the N by N frequency square corresponds to zero
+!    frequency.  The user can do this replacing the original input data
+!    F(I,J) by F(I,J) * (-1.)**(I+J),  I,J =0,...,N-1.
+!
+!    Before calling CFFTF_2D or CFFTB_2D, it is necessary to initialize
+!    the array WSAVE by calling CFFTI.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Modified:
+!
+!    12 March 2001
+!
+!  Parameters:
+!
+!    Input, integer LDF, the leading dimension of the matrix.
+!
+!    Input, integer N, the number of rows and columns in the matrix.
+!
+!    Input/output, complex F(LDF,N),
+!    On input, an N by N array of complex values to be transformed.
+!    On output, the transformed values.
+!
+!    Input, real WSAVE(4*N+15), a work array whose values depend on N,
+!    and which must be initialized by calling CFFTI.
+!
+  integer ldf
+  integer n
+!
+  complex f(ldf,n)
+  integer i
+  real wsave(4*n+15)
+!
+!  Row transforms:
+!
+  f(1:n,1:n) = transpose ( f(1:n,1:n) )
+
+  do i = 1, n
+    call cfftb ( n, f(1,i), wsave )
+  end do
+
+  f(1:n,1:n) = transpose ( f(1:n,1:n) )
+!
+!  Column transforms:
+!
+  do i = 1, n
+    call cfftb ( n, f(1,i), wsave )
+  end do
+
+  return
+end
+subroutine cfftf ( n, c, wsave )
+!
+!*******************************************************************************
+!
+!! CFFTF computes the forward complex discrete Fourier transform.
+!
+!
+!  Discussion:
+!
+!    This process is sometimes called Fourier analysis.
+!
+!    CFFTF computes the Fourier coefficients of a complex periodic sequence.
+!
+!    The transform is not normalized.  To obtain a normalized transform,
+!    the output must be divided by N.  Otherwise a call of CFFTF
+!    followed by a call of CFFTB will multiply the sequence by N.
+!
+!    The array WSAVE must be initialized by calling CFFTI.
+!
+!    The transform is defined by:
+!
+!      C_out(J) = sum ( 1 <= K <= N )
+!        C_in(K) * exp ( - sqrt ( -1 ) * ( J - 1 ) * ( K - 1 ) * 2 * PI / N )
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.
+!    The method is more efficient when N is the product of small primes.
+!
+!    Input/output, complex C(N).
+!    On input, the data sequence to be transformed.
+!    On output, the Fourier coefficients.
+!
+!    Input, real WSAVE(4*N+15).  The array must be initialized by calling
+!    CFFTI.  A different WSAVE array must be used for each different
+!    value of N.
+!
+  integer n
+!
+  complex c(n)
+  real wsave(4*n+15)
+!
+  if ( n <= 1 ) then
+    return
+  end if
+
+  call cfftf1 ( n, c, wsave(1), wsave(2*n+1), wsave(4*n+1) )
+
+  return
+end
+subroutine cfftf1 ( n, c, ch, wa, ifac )
+!
+!*******************************************************************************
+!
+!! CFFTF1 is a lower level routine used by CFFTF.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.
+!
+!    Input/output, complex C(N).
+!    On input, the data sequence to be transformed.
+!    On output, the Fourier coefficients.
+!
+!    Input, complex CH(N).
+!
+!    Input, real WA(2*N).
+!
+!    Input, integer IFAC(15).
+!    IFAC(1) = N, the number that was factored.
+!    IFAC(2) = NF, the number of factors.
+!    IFAC(3:2+NF), the factors.
+!
+  integer n
+!
+  complex c(n)
+  complex ch(n)
+  integer idl1
+  integer ido
+  integer ifac(15)
+  integer ip
+  integer iw
+  integer ix2
+  integer ix3
+  integer ix4
+  integer k1
+  integer l1
+  integer l2
+  integer na
+  integer nac
+  integer nf
+  real wa(2*n)
+!
+  nf = ifac(2)
+  na = 0
+  l1 = 1
+  iw = 1
+
+  do k1 = 1, nf
+
+    ip = ifac(k1+2)
+    l2 = ip * l1
+    ido = n / l2
+    idl1 = 2 * ido * l1
+
+    if ( ip == 4 ) then
+
+      ix2 = iw + 2 * ido
+      ix3 = ix2 + 2 * ido
+
+      if ( na == 0 ) then
+        call passf4 ( 2*ido, l1, c, ch, wa(iw), wa(ix2), wa(ix3) )
+      else
+        call passf4 ( 2*ido, l1, ch, c, wa(iw), wa(ix2), wa(ix3) )
+      end if
+
+      na = 1 - na
+
+    else if ( ip == 2 ) then
+
+      if ( na == 0 ) then
+        call passf2 ( 2*ido, l1, c, ch, wa(iw) )
+      else
+        call passf2 ( 2*ido, l1, ch, c, wa(iw) )
+      end if
+
+      na = 1 - na
+
+    else if ( ip == 3 ) then
+
+      ix2 = iw + 2 * ido
+
+      if ( na == 0 ) then
+        call passf3 ( 2*ido, l1, c, ch, wa(iw), wa(ix2) )
+      else
+        call passf3 ( 2*ido, l1, ch, c, wa(iw), wa(ix2) )
+      end if
+
+      na = 1 - na
+
+    else if ( ip == 5 ) then
+
+      ix2 = iw + 2 * ido
+      ix3 = ix2 + 2 * ido
+      ix4 = ix3 + 2 * ido
+
+      if ( na == 0 ) then
+        call passf5 ( 2*ido, l1, c, ch, wa(iw), wa(ix2), wa(ix3), wa(ix4) )
+      else
+        call passf5 ( 2*ido, l1, ch, c, wa(iw), wa(ix2), wa(ix3), wa(ix4) )
+      end if
+
+      na = 1 - na
+
+    else
+
+      if ( na == 0 ) then
+        call passf ( nac, 2*ido, ip, l1, idl1, c, c, c, ch, ch, wa(iw) )
+      else
+        call passf ( nac, 2*ido, ip, l1, idl1, ch, ch, ch, c, c, wa(iw) )
+      end if
+
+      if ( nac /= 0 ) then
+        na = 1 - na
+      end if
+
+    end if
+
+    l1 = l2
+    iw = iw + ( ip - 1 ) * 2 * ido
+
+  end do
+
+  if ( na /= 0 ) then
+    c(1:n) = ch(1:n)
+  end if
+
+  return
+end
+subroutine cfftf_2d ( ldf, n, f, wsave )
+!
+!*******************************************************************************
+!
+!! CFFTF_2D computes a two dimensional complex fast Fourier transform.
+!
+!
+!  Discussion:
+!
+!    The routine computes the forward two dimensional fast Fourier transform,
+!    of a complex N by N matrix of data.
+!
+!    The output is unscaled, that is, a call to CFFTF_2D,
+!    followed by a call to CFFTB_2D will return the original data
+!    multiplied by N*N.
+!
+!    For some applications it is desirable to have the transform scaled so
+!    the center of the N by N frequency square corresponds to zero
+!    frequency.  The user can do this replacing the original input data
+!    F(I,J) by F(I,J) *(-1.)**(I+J),  I,J =0,...,N-1.
+!
+!    Before calling CFFTF_2D or CFFTB_2D, it is necessary to initialize
+!    the array WSAVE by calling CFFTI.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Modified:
+!
+!    12 March 2001
+!
+!  Parameters:
+!
+!    Input, integer LDF, the leading dimension of the matrix.
+!
+!    Input, integer N, the number of rows and columns in the matrix.
+!
+!    Input/output, complex F(LDF,N),
+!    On input, an N by N array of complex values to be transformed.
+!    On output, the transformed values.
+!
+!    Input, real WSAVE(4*N+15), a work array whose values depend on N,
+!    and which must be initialized by calling CFFTI.
+!
+  integer ldf
+  integer n
+!
+  complex f(ldf,n)
+  integer i
+  real wsave(4*n+15)
+!
+!  Row transforms:
+!
+  f(1:n,1:n) = transpose ( f(1:n,1:n) )
+
+  do i = 1, n
+    call cfftf ( n, f(1,i), wsave )
+  end do
+
+  f(1:n,1:n) = transpose ( f(1:n,1:n) )
+!
+!  Column transforms:
+!
+  do i = 1, n
+    call cfftf ( n, f(1,i), wsave )
+  end do
+
+  return
+end
+subroutine cffti ( n, wsave )
+!
+!*******************************************************************************
+!
+!! CFFTI initializes WSAVE, used in CFFTF and CFFTB.
+!
+!
+!  Discussion:
+!
+!    The prime factorization of N together with a tabulation of the
+!    trigonometric functions are computed and stored in WSAVE.
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.
+!
+!    Output, real WSAVE(4*N+15), contains data, dependent on the value
+!    of N, which is necessary for the CFFTF or CFFTB routines.
+!
+  integer n
+!
+  real wsave(4*n+15)
+!
+  if ( n <= 1 ) then
+    return
+  end if
+
+  call cffti1 ( n, wsave(2*n+1), wsave(4*n+1) )
+
+  return
+end
+subroutine cffti1 ( n, wa, ifac )
+!
+!*******************************************************************************
+!
+!! CFFTI1 is a lower level routine used by CFFTI.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.
+!
+!    Input, real WA(2*N).
+!
+!    Input, integer IFAC(15).
+!    IFAC(1) = N, the number that was factored.
+!    IFAC(2) = NF, the number of factors.
+!    IFAC(3:2+NF), the factors.
+!
+  integer n
+!
+  real arg
+  real argh
+  real argld
+  real fi
+  integer i
+  integer i1
+  integer ib
+  integer ido
+  integer ifac(15)
+  integer ii
+  integer ip
+  integer j
+  integer k1
+  integer l1
+  integer l2
+  integer ld
+  integer nf
+  real pimach
+  real wa(2*n)
+!
+  call i_factor ( n, ifac )
+
+  nf = ifac(2)
+
+  argh = 2.0E+00 * pimach() / real ( n )
+  i = 2
+  l1 = 1
+
+  do k1 = 1, nf
+
+    ip = ifac(k1+2)
+    ld = 0
+    l2 = l1 * ip
+    ido = n / l2
+
+    do j = 1, ip-1
+
+      i1 = i
+      wa(i-1) = 1.0E+00
+      wa(i) = 0.0E+00
+      ld = ld + l1
+      fi = 0.0E+00
+      argld = real ( ld ) * argh
+
+      do ii = 4, 2*ido+2, 2
+        i = i + 2
+        fi = fi + 1.0E+00
+        arg = fi * argld
+        wa(i-1) = cos ( arg )
+        wa(i) = sin ( arg )
+      end do
+
+      if ( ip > 5 ) then
+        wa(i1-1) = wa(i-1)
+        wa(i1) = wa(i)
+      end if
+
+    end do
+
+    l1 = l2
+
+  end do
+
+  return
+end
+subroutine chfdv ( x1, x2, f1, f2, d1, d2, ne, xe, fe, de, next, ierr )
+!
+!*******************************************************************************
+!
+!! CHFDV evaluates a cubic polynomial and its derivative given in Hermite form.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Discussion:
+!
+!    CHFDV evaluates a cubic polynomial given in Hermite form and its
+!    first derivative at an array of points.  While designed for
+!    use by PCHFD, it may be useful directly as an evaluator for
+!    a piecewise cubic Hermite function in applications, such as
+!    graphing, where the interval is known in advance.
+!
+!    If only function values are required, use CHFEV instead.
+!
+!  Parameters:
+!
+!     x1,x2 -- (input) endpoints of interval of definition of cubic.
+!           (error return if  x1==x2 .)
+!
+!     f1,f2 -- (input) values of function at x1 and x2, respectively.
+!
+!     d1,d2 -- (input) values of derivative at x1 and x2, respectively.
+!
+!     ne -- (input) number of evaluation points.  (error return if
+!           ne<1 .)
+!
+!     xe -- (input) real array of points at which the functions are to
+!           be evaluated.  if any of the xe are outside the interval
+!           [x1,x2], a warning error is returned in next.
+!
+!     fe -- (output) real array of values of the cubic function defined
+!           by  x1,x2, f1,f2, d1,d2  at the points  xe.
+!
+!     de -- (output) real array of values of the first derivative of
+!           the same function at the points  xe.
+!
+!     next -- (output) integer array indicating number of extrapolation
+!           points:
+!            next(1) = number of evaluation points to left of interval.
+!            next(2) = number of evaluation points to right of interval.
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           "recoverable" errors:
+!              ierr = -1  if ne<1 .
+!              ierr = -2  if x1==x2 .
+!                (output arrays have not been changed in either case.)
+!
+  integer ne
+!
+  real c2
+  real c2t2
+  real c3
+  real c3t3
+  real d1
+  real d2
+  real de(ne)
+  real del1
+  real del2
+  real delta
+  real f1
+  real f2
+  real fe(ne)
+  real h
+  integer i
+  integer ierr
+  integer next(2)
+  real x
+  real x1
+  real x2
+  real xe(ne)
+  real xma
+  real xmi
+!
+!  validity-check arguments.
+!
+  if ( ne < 1 ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'CHFDV - Fatal error!'
+    write ( *, * ) '  The number of evaluation points was less than 1.'
+    stop
+  end if
+
+  h = x2 - x1
+  if (h == 0.0)  go to 5002
+!
+!  initialize.
+!
+  ierr = 0
+  next(1) = 0
+  next(2) = 0
+  xmi = min (0.0, h)
+  xma = max (0.0, h)
+!
+!  compute cubic coefficients (expanded about x1).
+!
+  delta = (f2 - f1)/h
+  del1 = (d1 - delta)/h
+  del2 = (d2 - delta)/h
+!                                           (delta is no longer needed.)
+  c2 = -(del1+del1 + del2)
+  c2t2 = c2 + c2
+  c3 = (del1 + del2)/h
+!                               (h, del1 and del2 are no longer needed.)
+  c3t3 = c3+c3+c3
+!
+!  evaluation loop.
+!
+  do i = 1, ne
+     x = xe(i) - x1
+     fe(i) = f1 + x*(d1 + x*(c2 + x*c3))
+     de(i) = d1 + x*(c2t2 + x*c3t3)
+!          count extrapolation points.
+     if ( x<xmi )  next(1) = next(1) + 1
+     if ( x>xma )  next(2) = next(2) + 1
+!        (note redundancy--if either condition is true, other is false.)
+  end do
+
+  return
+!
+!  error returns.
+!
+ 5002 continue
+
+  ierr = -2
+  call xerror ('chfdv -- interval endpoints equal', 33, ierr, 1)
+  return
+end
+subroutine chfev ( x1, x2, f1, f2, d1, d2, ne, xe, fe, next, ierr )
+!
+!*******************************************************************************
+!
+!! CHFEV evaluates a cubic polynomial given in Hermite form.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  purpose  evaluate a cubic polynomial given in hermite form at an
+!            array of points.  while designed for use by PCHFE, it may
+!            be useful directly as an evaluator for a piecewise cubic
+!            hermite function in applications, such as graphing, where
+!            the interval is known in advance.
+!
+!  Description:
+!
+!     CHFEV evaluates the cubic polynomial determined by function values
+!     f1,f2 and derivatives d1,d2 on interval (x1,x2) at the points
+!     xe(j), j=1(1)ne.
+!
+!  Parameters:
+!
+!     x1,x2 -- (input) endpoints of interval of definition of cubic.
+!           (error return if  x1==x2 .)
+!
+!     f1,f2 -- (input) values of function at x1 and x2, respectively.
+!
+!     d1,d2 -- (input) values of derivative at x1 and x2, respectively.
+!
+!     ne -- (input) number of evaluation points.  (error return if
+!           ne<1 .)
+!
+!     xe -- (input) real array of points at which the function is to be
+!           evaluated.  if any of the xe are outside the interval
+!           [x1,x2], a warning error is returned in next.
+!
+!     fe -- (output) real array of values of the cubic function defined
+!           by  x1,x2, f1,f2, d1,d2  at the points  xe.
+!
+!     next -- (output) integer array indicating number of extrapolation
+!           points:
+!            next(1) = number of evaluation points to left of interval.
+!            next(2) = number of evaluation points to right of interval.
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           "recoverable" errors:
+!              ierr = -1  if ne<1 .
+!              ierr = -2  if x1==x2 .
+!                (the fe-array has not been changed in either case.)
+!
+  integer ne
+!
+  real c2
+  real c3
+  real d1
+  real d2
+  real del1
+  real del2
+  real delta
+  real f1
+  real f2
+  real fe(ne)
+  real h
+  integer i
+  integer ierr
+  integer next(2)
+  real x
+  real x1
+  real x2
+  real xe(ne)
+  real xma
+  real xmi
+!
+  if (ne < 1)  go to 5001
+  h = x2 - x1
+  if (h == 0.0)  go to 5002
+!
+!  initialize.
+!
+  ierr = 0
+  next(1) = 0
+  next(2) = 0
+  xmi = min ( 0.0, h )
+  xma = max ( 0.0, h )
+!
+!  compute cubic coefficients (expanded about x1).
+!
+  delta = (f2 - f1)/h
+  del1 = (d1 - delta)/h
+  del2 = (d2 - delta)/h
+!                                           (delta is no longer needed.)
+  c2 = -(del1+del1 + del2)
+  c3 = (del1 + del2)/h
+!                               (h, del1 and del2 are no longer needed.)
+!
+!  evaluation loop.
+!
+  do i = 1, ne
+     x = xe(i) - x1
+     fe(i) = f1 + x*(d1 + x*(c2 + x*c3))
+!          count extrapolation points.
+     if ( x<xmi )  next(1) = next(1) + 1
+     if ( x>xma )  next(2) = next(2) + 1
+!        (note redundancy--if either condition is true, other is false.)
+  end do
+
+  return
+!
+!  error returns.
+!
+ 5001 continue
+!     ne<1 return.
+  ierr = -1
+  call xerror ('chfev -- number of evaluation points less than one', 50, &
+    ierr, 1)
+  return
+
+ 5002 continue
+!     x1==x2 return.
+  ierr = -2
+  call xerror ('chfev -- interval endpoints equal', 33, ierr, 1)
+  return
+end
+function chfiv ( x1, x2, f1, f2, d1, d2, a, b, ierr )
+!
+!*******************************************************************************
+!
+!! CHFIV evaluates the integral of a cubic polynomial in Hermite form.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!          chfiv:  cubic hermite function integral evaluator.
+!
+!     called by  PCHIA  to evaluate the integral of a single cubic (in
+!     hermite form) over an arbitrary interval (a,b).
+!
+!  Parameters:
+!
+!     value -- (output) value of the requested integral.
+!
+!     x1,x2 -- (input) endpoints if interval of definition of cubic.
+!           (must be distinct.  error return if not.)
+!
+!     f1,f2 -- (input) function values at the ends of the interval.
+!
+!     d1,d2 -- (input) derivative values at the ends of the interval.
+!
+!     a,b -- (input) endpoints of interval of integration.
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0 (no errors).
+!           "recoverable errors":
+!              ierr = -1  if x1==x2 .
+!                (value has not been set in this case.)
+!
+  real a
+  real b
+  real chfiv
+  real d1
+  real d2
+  real dterm
+  real f1
+  real f2
+  real fterm
+  real h
+  integer ierr
+  real phia1
+  real phia2
+  real phib1
+  real phib2
+  real psia1
+  real psia2
+  real psib1
+  real psib2
+  real ta1
+  real ta2
+  real tb1
+  real tb2
+  real ua1
+  real ua2
+  real ub1
+  real ub2
+  real x1
+  real x2
+!
+!  validity check input.
+!
+  if (x1 == x2)  go to 5001
+  ierr = 0
+!
+!  compute integral.
+!
+  h = x2 - x1
+  ta1 = (a - x1) / h
+  ta2 = (x2 - a) / h
+  tb1 = (b - x1) / h
+  tb2 = (x2 - b) / h
+
+  ua1 = ta1**3
+  phia1 = ua1 * ( 2.0E+00 - ta1 )
+  psia1 = ua1 * ( 3.0E+00 * ta1 - 4.0E+00 )
+  ua2 = ta2**3
+  phia2 =  ua2 * ( 2.0E+00 - ta2)
+  psia2 = -ua2 * ( 3.0E+00 * ta2 - 4.0E+00 )
+
+  ub1 = tb1**3
+  phib1 = ub1 * ( 2.0E+00 - tb1 )
+  psib1 = ub1 * ( 3.0E+00 * tb1 - 4.0E+00 )
+  ub2 = tb2**3
+  phib2 =  ub2 * ( 2.0E+00 - tb2 )
+  psib2 = -ub2 * ( 3.0E+00 * tb2 - 4.0E+00 )
+
+  fterm =   f1*(phia2 - phib2) + f2*(phib1 - phia1)
+  dterm = ( d1*(psia2 - psib2) + d2*(psib1 - psia1) )*(h/6.0)
+
+  chfiv = 0.5 * h * ( fterm + dterm )
+
+  return
+!
+!  error return.
+!
+ 5001 continue
+  ierr = -1
+  call xerror ('chfiv -- x1 equal to x2', 23, ierr, 1)
+  return
+end
+function chfmc ( d1, d2, delta )
+!
+!*******************************************************************************
+!
+!! CHFMC determines the monotonicity properties of a cubic polynomial.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!          chfmc:  cubic hermite function monotonicity checker.
+!
+!    called by  pchmc  to determine the monotonicity properties of the
+!    cubic with boundary derivative values d1,d2 and chord slope delta.
+!
+!  Parameters:
+!
+!     d1,d2 -- (input) derivative values at the ends of an interval.
+!
+!     delta -- (input) data slope over that interval.
+!
+!     ismon -- (output) integer function value, indicating the monoto-
+!           nicity of the cubic segment:
+!             ismon = -1  if function is strictly decreasing;
+!             ismon =  0  if function is constant;
+!             ismon =  1  if function is strictly increasing;
+!             ismon =  2  if function is non-monotonic;
+!             ismon =  3  if unable to determine.
+!
+  real a
+  real b
+  integer chfmc
+  real d1
+  real d2
+  real delta
+  real eps
+  integer ismon
+  integer itrue
+  real phi
+!
+  eps = 10.0E+00 * epsilon ( eps )
+!
+!  make the check.
+!
+  if ( delta == 0.0E+00 )  then
+
+    if ( d1 == 0.0E+00 .and. d2 == 0.0E+00 )  then
+      ismon = 0
+    else
+      ismon = 2
+    end if
+
+  else
+
+     itrue = sign ( 1.0, delta)
+     a = d1/delta
+     b = d2/delta
+     if ((a<0.0) .or. (b<0.0))  then
+        ismon = 2
+     else if ((a<=3.0-eps) .and. (b<=3.0-eps))  then
+!           inside square (0,3)x(0,3)  implies   ok.
+        ismon = itrue
+     else if ( a > 4.0+eps .and. b > 4.0+eps )  then
+!           outside square (0,4)x(0,4)  implies   nonmonotonic.
+        ismon = 2
+     else
+!           must check against boundary of ellipse.
+        a = a - 2.0E+00
+        b = b - 2.0E+00
+        phi = ((a*a + b*b) + a*b) - 3.0E+00
+        if (phi < -eps)  then
+           ismon = itrue
+        else if (phi > eps)  then
+           ismon = 2
+        else
+!
+!  Too close to boundary to tell,
+!                  in the presence of round-off errors.
+!
+           ismon = 3
+        end if
+     end if
+  end if
+
+  chfmc = ismon
+
+  return
+end
+subroutine chkder ( m, n, x, fvec, fjac, ldfjac, xp, fvecp, mode, err )
+!
+!*******************************************************************************
+!
+!! CHKDER checks the gradients of M nonlinear functions in N variables.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!   this subroutine is a companion routine to snls1,snls1e,snsq,and
+!   snsqe which may be used to check the calculation of the jacobian.
+!
+!   subroutine chkder
+!
+!     this subroutine checks the gradients of m nonlinear functions
+!     in n variables, evaluated at a point x, for consistency with
+!     the functions themselves. the user must call ckder twice,
+!     first with mode = 1 and then with mode = 2.
+!
+!     mode = 1. on input, x must contain the point of evaluation.
+!               on output, xp is set to a neighboring point.
+!
+!     mode = 2. on input, fvec must contain the functions and the
+!                         rows of fjac must contain the gradients
+!                         of the respective functions each evaluated
+!                         at x, and fvecp must contain the functions
+!                         evaluated at xp.
+!               on output, err contains measures of correctness of
+!                          the respective gradients.
+!
+!     the subroutine does not perform reliably if cancellation or
+!     rounding errors cause a severe loss of significance in the
+!     evaluation of a function. therefore, none of the components
+!     of x should be unusually small (in particular, zero) or any
+!     other value which may cause loss of significance.
+!
+!     the subroutine statement is
+!
+!     subroutine chkder(m,n,x,fvec,fjac,ldfjac,xp,fvecp,mode,err)
+!
+!     where
+!
+!       m is a positive integer input variable set to the number
+!         of functions.
+!
+!       n is a positive integer input variable set to the number
+!         of variables.
+!
+!       x is an input array of length n.
+!
+!       fvec is an array of length m. on input when mode = 2,
+!         fvec must contain the functions evaluated at x.
+!
+!       fjac is an m by n array. on input when mode = 2,
+!         the rows of fjac must contain the gradients of
+!         the respective functions evaluated at x.
+!
+!       ldfjac is a positive integer input parameter not less than m
+!         which specifies the leading dimension of the array fjac.
+!
+!       xp is an array of length n. on output when mode = 1,
+!         xp is set to a neighboring point of x.
+!
+!       fvecp is an array of length m. on input when mode = 2,
+!         fvecp must contain the functions evaluated at xp.
+!
+!       mode is an integer input variable set to 1 on the first call
+!         and 2 on the second. other values of mode are equivalent
+!         to mode = 1.
+!
+!       err is an array of length m. on output when mode = 2,
+!         err contains measures of correctness of the respective
+!         gradients. if there is no severe loss of significance,
+!         then if err(i) is 1.0E+00 the i-th gradient is correct,
+!         while if err(i) is 0.0E+00 the i-th gradient is incorrect.
+!         for values of err between 0.0E+00 and 1.0, the categorization
+!         is less certain. in general, a value of err(i) greater
+!         than 0.5 indicates that the i-th gradient is probably
+!         correct, while a value of err(i) less than 0.5 indicates
+!         that the i-th gradient is probably incorrect.
+!
+!     argonne national laboratory. minpack project. march 1980.
+!     burton s. garbow, kenneth e. hillstrom, jorge j. more
+!
+!  references  powell, m. j. d., *a hybrid method for nonlinear
+!                 equations*, 'numerical methods for nonlinear
+!                 algebraic equations', p. rabinowitz, editor,
+!                 gordon and breach, 1970.
+!
+  integer ldfjac
+  integer m
+  integer n
+!
+  real eps
+  real epsf
+  real epslog
+  real epsmch
+  real err(m)
+  real, parameter :: factor = 100.0E+00
+  real fjac(ldfjac,n)
+  real fvec(m)
+  real fvecp(m)
+  integer i
+  integer j
+  integer mode
+  real r1mach
+  real temp
+  real x(n)
+  real xp(n)
+!
+  epsmch = epsilon ( epsmch )
+  eps = sqrt ( epsmch )
+
+  if ( mode == 2 ) go to 20
+!
+!        mode = 1.
+!
+    do j = 1, n
+      temp = eps * abs(x(j))
+      if (temp == 0.0) temp = eps
+      xp(j) = x(j) + temp
+    end do
+
+     go to 70
+   20 continue
+!
+!        mode = 2.
+!
+     epsf = factor*epsmch
+     epslog = log10(eps)
+     err(1:m) = 0.0E+00
+
+     do j = 1, n
+        temp = abs(x(j))
+        if (temp == 0.0) temp = 1.0E+00
+        do i = 1, m
+           err(i) = err(i) + temp*fjac(i,j)
+        end do
+     end do
+
+     do i = 1, m
+        temp = 1.0E+00
+        if ( fvec(i) /= 0.0E+00 .and. fvecp(i) /= 0.0E+00 .and. &
+          abs(fvecp(i)-fvec(i)) >= epsf*abs(fvec(i)) ) then
+          temp = eps*abs((fvecp(i)-fvec(i))/eps-err(i)) &
+                      /(abs(fvec(i)) + abs(fvecp(i)))
+        end if
+
+        err(i) = 1.0E+00
+
+        if ( temp > epsmch .and. temp < eps ) then
+          err(i) = (log10(temp) - epslog)/epslog
+        end if
+
+        if (temp >= eps) err(i) = 0.0E+00
+      end do
+
+   70 continue
+
+  return
+end
+subroutine chlhsn ( nr, n, a, epsm, sx, udiag )
+!
+!*******************************************************************************
+!
+!! CHLHSN finds the l(l-transpose) [written ll+] decomposition of the perturbed
+! model hessian matrix a+mu*i(where mu\0 and i is the identity matrix)
+! which is safely positive definite.
+!
+!  if a is safely positive definite upon entry, then mu=0.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+! parameters
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! a(n,n)      <--> on entry; "a" is model hessian (only lower
+!                  triangular part and diagonal stored)
+!                  on exit:  a contains l of ll+ decomposition of
+!                  perturbed model hessian in lower triangular
+!                  part and diagonal and contains hessian in upper
+!                  triangular part and udiag
+! epsm         --> machine epsilon
+! sx(n)        --> diagonal scaling matrix for x
+! udiag(n)    <--  on exit: contains diagonal of hessian
+!
+! internal variables
+!
+! tol              tolerance
+! diagmn           minimum element on diagonal of a
+! diagmx           maximum element on diagonal of a
+! offmax           maximum off-diagonal element of a
+! offrow           sum of off-diagonal elements in a row of a
+! evmin            minimum eigenvalue of a
+! evmax            maximum eigenvalue of a
+!
+!  Description:
+!
+! 1. if "a" has any negative diagonal elements, then choose mu>0
+! such that the diagonal of a:=a+mu*i is all positive
+! with the ratio of its smallest to largest element on the
+! order of sqrt(epsm).
+!
+! 2. "a" undergoes a perturbed cholesky decomposition which
+! results in an ll+ decomposition of a+d, where d is a
+! non-negative diagonal matrix which is implicitly added to
+! "a" during the decomposition if "a" is not positive definite.
+! "a" is retained and not changed during this process by
+! copying l into the upper triangular part of "a" and the
+! diagonal into udiag.  then the cholesky decomposition routine
+! is called.  on return, addmax contains maximum element of d.
+!
+! 3. if addmax=0, "a" was positive definite going into step 2
+! and return is made to calling program.  otherwise,
+! the minimum number sdd which must be added to the
+! diagonal of a to make it safely strictly diagonally dominant
+! is calculated.  since a+addmax*i and a+sdd*i are safely
+! positive definite, choose mu=min(addmax,sdd) and decompose
+! a+mu*i to obtain l.
+!
+  integer n
+  integer nr
+!
+  real a(nr,*)
+  real addmax
+  real amu
+  real diagmx
+  real diagmn
+  real epsm
+  real evmax
+  real evmin
+  integer i
+  integer j
+  real offmax
+  real offro
+  real offrow
+  real posmax
+  real sdd
+  real sx(n)
+  real tol
+  real udiag(n)
+!
+! scale hessian
+! pre- and post- multiply "a" by inv(sx)
+!
+  do j=1,n
+    do i=j,n
+      a(i,j)=a(i,j)/(sx(i)*sx(j))
+    end do
+  end do
+!
+! step1
+!
+! note:  if a different tolerance is desired throughout this
+! algorithm, change tolerance here:
+!
+  tol=sqrt(epsm)
+!
+  diagmx=a(1,1)
+  diagmn=a(1,1)
+
+  do i=2,n
+    if ( a(i,i)<diagmn) diagmn=a(i,i)
+    if ( a(i,i)>diagmx) diagmx=a(i,i)
+  end do
+
+  posmax = max(diagmx,0.0)
+
+  if ( diagmn > posmax*tol) go to 100
+
+    amu=tol*(posmax-diagmn)-diagmn
+
+    if ( amu/=0.) go to 60
+!
+!  Find largest off-diagonal element of A.
+!
+      offmax=0.0E+00
+
+      do i=2,n
+        do j=1,i-1
+          if ( abs(a(i,j))>offmax) offmax=abs(a(i,j))
+        end do
+      end do
+
+      amu=offmax
+
+      if ( amu == 0.0E+00 ) then
+        amu=1.0E+00
+      else
+        amu=amu*(1.0+tol)
+      end if
+!
+! a=a + mu*i
+!
+   60 continue
+
+    do i=1,n
+      a(i,i)=a(i,i)+amu
+    end do
+
+    diagmx=diagmx+amu
+!
+! step2
+!
+! copy lower triangular part of "a" to upper triangular part
+! and diagonal of "a" to udiag
+!
+  100 continue
+
+  do j=1,n
+    udiag(j)=a(j,j)
+    do i=j+1,n
+      a(j,i)=a(i,j)
+    end do
+  end do
+
+  call choldc ( nr, n, a, diagmx, tol, addmax )
+!
+! step3
+!
+! if addmax=0, "a" was positive definite going into step 2,
+! the ll+ decomposition has been done, and we return.
+! otherwise, addmax>0.  perturb "a" so that it is safely
+! diagonally dominant and find ll+ decomposition
+!
+  if ( addmax<=0.) go to 170
+!     if ( addmax>0.)
+!     then
+!
+! restore original "a" (lower triangular part and diagonal)
+!
+    do j = 1, n
+      a(j,j)=udiag(j)
+      do i=j+1,n
+        a(i,j)=a(j,i)
+      end do
+    end do
+!
+! find sdd such that a+sdd*i is safely positive definite
+! note:  evmin<0 since a is not positive definite;
+!
+    evmin=0.0E+00
+    evmax=a(1,1)
+
+    do i=1,n
+
+      offrow=0.0E+00
+
+      do j=1,i-1
+        offrow=offrow+abs(a(i,j))
+      end do
+!
+!  I'm not sure about the text of this loop.
+!  It seems to have been damaged earlier, and read
+!
+!    offrow = offro
+!
+      do j=i+1,n
+        offrow = offrow + abs(a(j,i))
+      end do
+
+      evmin=min(evmin,a(i,i)-offrow)
+      evmax=max(evmax,a(i,i)+offrow)
+
+    end do
+
+    sdd=tol*(evmax-evmin)-evmin
+!
+! perturb "a" and decompose again
+!
+    amu=min(sdd,addmax)
+
+    do i=1,n
+      a(i,i)=a(i,i)+amu
+      udiag(i)=a(i,i)
+    end do
+!
+! "a" now guaranteed safely positive definite
+!
+    call choldc ( nr, n, a, 0.0, tol, addmax )
+!
+! unscale hessian and cholesky decomposition matrix
+!
+  170 continue
+
+  do j=1,n
+
+    do i=j,n
+      a(i,j)=sx(i)*a(i,j)
+    end do
+
+    do i=1,j-1
+      a(i,j)=sx(i)*sx(j)*a(i,j)
+    end do
+
+    udiag(j)=udiag(j)*sx(j)*sx(j)
+
+  end do
+
+  return
+end
+subroutine choldc ( nr, n, a, diagmx, tol, addmax )
+!
+!*******************************************************************************
+!
+!! CHOLDC finds the perturbed l(l-transpose) [written ll+] decomposition
+! of a+d, where d is a non-negative diagonal matrix added to a if
+! necessary to allow the cholesky decomposition to continue.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! a(n,n)      <--> on entry: matrix for which to find perturbed
+!                       cholesky decomposition
+!                  on exit:  contains l of ll+ decomposition
+!                  in lower triangular part and diagonal of "a"
+! diagmx       --> maximum diagonal element of "a"
+! tol          --> tolerance
+! addmax      <--  maximum amount implicitly added to diagonal of "a"
+!                  in forming the cholesky decomposition of a+d
+! internal variables
+!
+! aminl    smallest element allowed on diagonal of l
+! amnlsq   =aminl**2
+! offmax   maximum off-diagonal element in column of a
+!
+!  Description:
+!
+! the normal cholesky decomposition is performed.  however, if at any
+! point the algorithm would attempt to set l(i,i)=sqrt(temp)
+! with temp < tol*diagmx, then l(i,i) is set to sqrt(tol*diagmx)
+! instead.  this is equivalent to adding tol*diagmx-temp to a(i,i)
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real addmax
+  real aminl
+  real amnlsq
+  real diagmx
+  integer i
+  integer j
+  integer k
+  real offmax
+  real sum
+  real temp
+  real tol
+!
+  addmax = 0.0E+00
+  aminl = sqrt(diagmx*tol)
+  amnlsq = aminl*aminl
+!
+! form column j of l
+!
+  do j = 1, n
+!
+! find diagonal elements of l
+!
+    sum = 0.0E+00
+    do k = 1,j-1
+      sum = sum + a(j,k)**2
+    end do
+
+    temp = a(j,j)-sum
+
+    if ( temp<amnlsq) go to 30
+
+      a(j,j)=sqrt(temp)
+      go to 40
+!
+! find maximum off-diagonal element in column
+   30     offmax=0.
+
+      do i=j+1,n
+        if ( abs(a(i,j))>offmax) offmax=abs(a(i,j))
+      end do
+
+      if ( offmax<=amnlsq) offmax=amnlsq
+!
+! add to diagonal element  to allow cholesky decomposition to continue
+!
+      a(j,j)=sqrt(offmax)
+      addmax=max(addmax,offmax-temp)
+!
+! find i,j element of lower triangular matrix
+!
+   40   continue
+
+    do i=j+1,n
+      sum=0.0E+00
+      do k=1,j-1
+        sum=sum+a(i,k)*a(j,k)
+      end do
+      a(i,j)=(a(i,j)-sum)/a(j,j)
+    end do
+
+  end do
+
+  return
+end
+subroutine cosqb ( n, x, wsave )
+!
+!*******************************************************************************
+!
+!! COSQB computes the fast cosine transform of quarter wave data.
+!
+!
+!  Discussion:
+!
+!    COSQB computes a sequence from its representation in terms of a cosine
+!    series with odd wave numbers.
+!
+!    The transform is defined by:
+!
+!      X_out(I) = sum ( 1 <= K <= N )
+!
+!        4 * X_in(K) * cos ( ( 2 * K - 1 ) * ( I - 1 ) * PI / ( 2 * N ) )
+!
+!    COSQB is the unnormalized inverse of COSQF since a call of COSQB
+!    followed by a call of COSQF will multiply the input sequence X by 4*N.
+!
+!    The array WSAVE must be initialized by calling COSQI.
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array X.  The method is
+!    more efficient when N is the product of small primes.
+!
+!    Input/output, real X(N).
+!    On input, the cosine series coefficients.
+!    On output, the corresponding data vector.
+!
+!    Input, real WSAVE(3*N+15), contains data, depending on N, and
+!    required by the algorithm.  The WSAVE array must be initialized by
+!    calling COSQI.  A different WSAVE array must be used for each different
+!    value of N.
+!
+  integer n
+!
+  real, parameter :: tsqrt2 = 2.82842712474619E+00
+  real wsave(3*n+15)
+  real x(n)
+  real x1
+!
+  if ( n < 2 ) then
+    x(1) = 4.0E+00 * x(1)
+  else if ( n == 2 ) then
+    x1 = 4.0E+00 * ( x(1) + x(2) )
+    x(2) = tsqrt2 * ( x(1) - x(2) )
+    x(1) = x1
+  else
+    call cosqb1 ( n, x, wsave(1), wsave(n+1) )
+  end if
+
+  return
+end
+subroutine cosqb1 ( n, x, w, xh )
+!
+!*******************************************************************************
+!
+!! COSQB1 is a lower level routine used by COSQB.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array.
+!
+!    Input/output, real X(N).
+!    On input, the cosine series coefficients.
+!    On output, the corresponding data vector.
+!
+!    Input, real W(N).
+!
+!    Input, real XH(2*N+15).
+!
+  integer n
+!
+  integer i
+  integer k
+  integer kc
+  integer ns2
+  real w(n)
+  real x(n)
+  real xh(2*n+15)
+  real xim1
+!
+  ns2 = ( n + 1 ) / 2
+
+  do i = 3, n, 2
+    xim1 = x(i-1) + x(i)
+    x(i) = x(i) - x(i-1)
+    x(i-1) = xim1
+  end do
+
+  x(1) = x(1) + x(1)
+
+  if ( mod ( n, 2 ) == 0 ) then
+    x(n) = 2.0E+00 * x(n)
+  end if
+
+  call rfftb ( n, x, xh )
+
+  do k = 2, ns2
+    kc = n + 2 - k
+    xh(k) = w(k-1) * x(kc) + w(kc-1) * x(k)
+    xh(kc) = w(k-1) * x(k) - w(kc-1) * x(kc)
+  end do
+
+  if ( mod ( n, 2 ) == 0 ) then
+    x(ns2+1) = w(ns2) * ( x(ns2+1) + x(ns2+1) )
+  end if
+
+  do k = 2, ns2
+    kc = n + 2 - k
+    x(k) = xh(k) + xh(kc)
+    x(kc) = xh(k) - xh(kc)
+  end do
+
+  x(1) = 2.0E+00 * x(1)
+
+  return
+end
+subroutine cosqf ( n, x, wsave )
+!
+!*******************************************************************************
+!
+!! COSQF computes the fast cosine transform of quarter wave data.
+!
+!
+!  Discussion:
+!
+!    COSQF computes the coefficients in a cosine series representation
+!    with only odd wave numbers.
+!
+!    COSQF is the unnormalized inverse of COSQB since a call of COSQF
+!    followed by a call of COSQB will multiply the input sequence X
+!    by 4*N.
+!
+!    The array WSAVE must be initialized by calling COSQI.
+!
+!    The transform is defined by:
+!
+!      X_out(I) = X_in(1) + sum ( 2 <= K <= N )
+!
+!        2 * X_in(K) * cos ( ( 2 * I - 1 ) * ( K - 1 ) * PI / ( 2 * N ) )
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array X.  The method is
+!    more efficient when N is the product of small primes.
+!
+!    Input/output, real X(N).
+!    On input, the data to be transformed.
+!    On output, the transformed data.
+!
+!    Input, real WSAVE(3*N+15), contains data, depending on N, and
+!    required by the algorithm.  The WSAVE array must be initialized by
+!    calling COSQI.  A different WSAVE array must be used for each different
+!    value of N.
+!
+  integer n
+!
+  real, parameter :: sqrt2 = 1.4142135623731E+00
+  real tsqx
+  real wsave(3*n+15)
+  real x(n)
+!
+  if ( n < 2 ) then
+
+  else if ( n == 2 ) then
+    tsqx = sqrt2 * x(2)
+    x(2) = x(1) - tsqx
+    x(1) = x(1) + tsqx
+  else
+    call cosqf1 ( n, x, wsave(1), wsave(n+1) )
+  end if
+
+  return
+end
+subroutine cosqf1 ( n, x, w, xh )
+!
+!*******************************************************************************
+!
+!! COSQF1 is a lower level routine used by COSQF.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array to be transformed.
+!
+!    Input/output, real X(N).
+!    On input, the data to be transformed.
+!    On output, the transformed data.
+!
+!    Input, real W(N).
+!
+!    Input, real XH(2*N+15).
+!
+  integer n
+!
+  integer i
+  integer k
+  integer kc
+  integer ns2
+  real w(n)
+  real x(n)
+  real xh(2*n+15)
+  real xim1
+!
+  ns2 = ( n + 1 ) / 2
+
+  do k = 2, ns2
+    kc = n + 2 - k
+    xh(k) = x(k) + x(kc)
+    xh(kc) = x(k) - x(kc)
+  end do
+
+  if ( mod ( n, 2 ) == 0 ) then
+    xh(ns2+1) = x(ns2+1) + x(ns2+1)
+  end if
+
+  do k = 2, ns2
+    kc = n+2-k
+    x(k) = w(k-1) * xh(kc) + w(kc-1) * xh(k)
+    x(kc) = w(k-1) * xh(k) - w(kc-1) * xh(kc)
+  end do
+
+  if ( mod ( n, 2 ) == 0 ) then
+    x(ns2+1) = w(ns2) * xh(ns2+1)
+  end if
+
+  call rfftf ( n, x, xh )
+
+  do i = 3, n, 2
+    xim1 = x(i-1) - x(i)
+    x(i) = x(i-1) + x(i)
+    x(i-1) = xim1
+  end do
+
+  return
+end
+subroutine cosqi ( n, wsave )
+!
+!*******************************************************************************
+!
+!! COSQI initializes WSAVE, used in COSQF and COSQB.
+!
+!
+!  Discussion:
+!
+!    The prime factorization of N together with a tabulation of the
+!    trigonometric functions are computed and stored in WSAVE.
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array to be transformed.  The method
+!    is more efficient when N is the product of small primes.
+!
+!    Output, real WSAVE(3*N+15), contains data, depending on N, and
+!    required by the COSQB and COSQF algorithms.
+!
+  integer n
+!
+  real dt
+  integer k
+  real pimach
+  real wsave(3*n+15)
+!
+  dt = 0.5E+00 * pimach() / real ( n )
+
+  do k = 1, n
+    wsave(k) = cos ( real ( k ) * dt )
+  end do
+
+  call rffti ( n, wsave(n+1) )
+
+  return
+end
+subroutine cost ( n, x, wsave )
+!
+!*******************************************************************************
+!
+!! COST computes the discrete Fourier cosine transform of an even sequence.
+!
+!
+!  Discussion:
+!
+!    COST is the unnormalized inverse of itself since a call of COST
+!    followed by another call of COST will multiply the input sequence
+!    X by 2*(N-1).
+!
+!    The array WSAVE must be initialized by calling COSTI.
+!
+!    The transform is defined by:
+!
+!      X_out(I) = X_in(1) + (-1) **(I-1) * X_in(N) + sum ( 2 <= K <= N-1 )
+!
+!        2 * X_in(K) * cos ( ( K - 1 ) * ( I - 1 ) * PI / ( N - 1 ) )
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.  The
+!    method is more efficient when N-1 is the product of small primes.
+!
+!    Input/output, real X(N).
+!    On input, the sequence to be transformed.
+!    On output, the transformed sequence.
+!
+!    Input, real WSAVE(3*N+15).
+!    The WSAVE array must be initialized by calling COSTI.  A different
+!    array must be used for each different value of N.
+!
+  integer n
+!
+  real c1
+  integer i
+  integer k
+  integer kc
+  integer ns2
+  real t1
+  real t2
+  real tx2
+  real wsave(3*n+15)
+  real x(n)
+  real x1h
+  real x1p3
+  real xi
+  real xim2
+!
+  ns2 = n / 2
+
+  if ( n <= 1 ) then
+    return
+  end if
+
+  if ( n == 2 ) then
+    x1h = x(1) + x(2)
+    x(2) = x(1) - x(2)
+    x(1) = x1h
+    return
+  end if
+
+  if ( n == 3 ) then
+    x1p3 = x(1) + x(3)
+    tx2 = x(2) + x(2)
+    x(2) = x(1) - x(3)
+    x(1) = x1p3 + tx2
+    x(3) = x1p3 - tx2
+    return
+  end if
+
+  c1 = x(1) - x(n)
+  x(1) = x(1) + x(n)
+
+  do k = 2, ns2
+    kc = n + 1 - k
+    t1 = x(k) + x(kc)
+    t2 = x(k) - x(kc)
+    c1 = c1 + wsave(kc) * t2
+    t2 = wsave(k) * t2
+    x(k) = t1 - t2
+    x(kc) = t1 + t2
+  end do
+
+  if ( mod ( n, 2 ) /= 0 ) then
+    x(ns2+1) = x(ns2+1) + x(ns2+1)
+  end if
+
+  call rfftf ( n-1, x, wsave(n+1) )
+
+  xim2 = x(2)
+  x(2) = c1
+
+  do i = 4, n, 2
+    xi = x(i)
+    x(i) = x(i-2) - x(i-1)
+    x(i-1) = xim2
+    xim2 = xi
+  end do
+
+  if ( mod ( n, 2 ) /= 0 ) then
+    x(n) = xim2
+  end if
+
+  return
+end
+subroutine costi ( n, wsave )
+!
+!*******************************************************************************
+!
+!! COSTI initializes WSAVE, used in COST.
+!
+!
+!  Discussion:
+!
+!    The prime factorization of N together with a tabulation of the
+!    trigonometric functions are computed and stored in WSAVE.
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.  The
+!    method is more efficient when N-1 is the product of small primes.
+!
+!    Output, real WSAVE(3*N+15), contains data, depending on N, and
+!    required by the COST algorithm.
+!
+  integer n
+!
+  real dt
+  integer k
+  real pimach
+  real wsave(3*n+15)
+!
+  if ( n <= 3 ) then
+    return
+  end if
+
+  dt = pimach ( ) / real ( n - 1 )
+
+  do k = 2, ( n / 2 )
+    wsave(k)     = 2.0E+00 * sin ( real ( k - 1 ) * dt )
+    wsave(n+1-k) = 2.0E+00 * cos ( real ( k - 1 ) * dt )
+  end do
+
+  call rffti ( n-1, wsave(n+1) )
+
+  return
+end
+function csevl ( x, cs, n )
+!
+!*******************************************************************************
+!
+!! CSEVL evaluates an N term Chebyshev series.
+!
+!
+!  Reference:
+!
+!    R Broucke,
+!    algorithm 446, c.a.c.m.,
+!    volume 16, page 254, 1973.
+!
+!    Fox and Parker,
+!    chebyshev polynomials in numerical analysis,
+!    oxford press, page 56.
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  parameters:
+!
+! x    value at which the series is to be evaluated.
+! cs   array of n terms of a chebyshev series.  in eval-
+!      uating cs, only half the first coefficient is summed.
+! n    number of terms in array cs.
+!
+  integer n
+!
+  real b0
+  real b1
+  real b2
+  real cs(n)
+  real csevl
+  integer i
+  real x
+!
+  if ( n < 1 ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'CSEVL - Fatal error!'
+    write ( *, * ) '  Number of terms N is less than 1.'
+    stop
+  end if
+
+  if ( n > 1000 ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'CSEVL - Fatal error!'
+    write ( *, * ) '  The number of terms is more than 1000.'
+    stop
+  end if
+
+  if ( x < -1.0E+00 .or. x > 1.0E+00 ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'CSEVL - Fatal error!'
+    write ( *, * ) '  The input argument X is outside the interval [-1,1].'
+    stop
+  end if
+
+  b1 = 0.0E+00
+  b0 = 0.0E+00
+
+  do i = n, 1, -1
+    b2 = b1
+    b1 = b0
+    b0 = 2.0E+00 * x * b1 - b2 + cs(i)
+  end do
+
+  csevl = 0.5 * ( b0 - b2 )
+
+  return
+end
+subroutine cvec_random ( alo, ahi, n, a )
+!
+!*******************************************************************************
+!
+!! CVEC_RANDOM returns a random complex vector in a given range.
+!
+!
+!  Modified:
+!
+!    08 March 2001
+!
+!  Author:
+!
+!    John Burkardt
+!
+!  Parameters:
+!
+!    Input, real ALO, AHI, the range allowed for the entries.
+!
+!    Input, integer N, the number of entries in the vector.
+!
+!    Output, complex A(N), the vector of randomly chosen values.
+!
+  integer n
+!
+  complex a(n)
+  real ahi
+  real ai
+  real alo
+  real ar
+  integer i
+!
+  do i = 1, n
+
+    call r_random ( alo, ahi, ar )
+    call r_random ( alo, ahi, ai )
+
+    a(i) = cmplx ( ar, ai )
+
+  end do
+
+  return
+end
+subroutine d1fcn
+!
+!*******************************************************************************
+!
+!! D1FCN is a dummy routine.
+!
+  write ( *, * ) ' '
+  write ( *, * ) 'D1FCN accidentally called!'
+
+  stop
+end
+function d1mach(i)
+!
+!*******************************************************************************
+!
+!! D1MACH returns double precision machine constants.
+!
+!
+!  Assuming that the internal representation of a double precision number is
+!  in base B, with T the number of base-B digits in the mantissa, and EMIN the
+!  smallest possible exponent and EMAX the largest possible exponent, then
+!
+!    D1MACH(1) = B**(EMIN-1), the smallest positive magnitude.
+!    D1MACH(2) = B**EMAX*(1-B**(-T)), the largest magnitude.
+!    D1MACH(3) = B**(-T), the smallest relative spacing.
+!    D1MACH(4) = B**(1-T), the largest relative spacing.
+!    D1MACH(5) = log10(B).
+!
+!  To alter this function for a particular environment, the desired set of DATA
+!  statements should be activated by removing the C from column 1.  On rare
+!  machines, a STATIC statement may need to be added, but probably more systems
+!  prohibit than require it.
+!
+!  For IEEE-arithmetic machines (binary standard), one of the first two sets of
+!  constants below should be appropriate.
+!
+!  Where possible, octal or hexadecimal constants have been used to specify the
+!  constants exactly, which has in some cases required the use of EQUIVALENCED
+!  integer arrays.
+!
+  double precision d1mach
+  integer diver(4)
+  double precision dmach(5)
+  integer i
+  integer large(4)
+  integer log10(4)
+  integer right(4)
+  integer small(4)
+!
+  equivalence (dmach(1),small(1))
+  equivalence (dmach(2),large(1))
+  equivalence (dmach(3),right(1))
+  equivalence (dmach(4),diver(1))
+  equivalence (dmach(5),log10(1))
+!
+!  IEEE arithmetic machines, such as the ATT 3B series and
+!  Motorola 68000 based machines such as the SUN 3 and ATT PC
+!  7300, and the SGI Iris, in which the most significant byte is
+!  stored first.
+!
+   data small(1),small(2) /    1048576,          0 /
+   data large(1),large(2) / 2146435071,         -1 /
+   data right(1),right(2) / 1017118720,          0 /
+   data diver(1),diver(2) / 1018167296,          0 /
+   data log10(1),log10(2) / 1070810131, 1352628735 /
+!
+!  IEEE arithmetic machines and 8087-based micros, such as the IBM PC,
+!  ATT 6300, DEC PMAX, DEC ALPHA, NEXT, in which the most
+!  significant byte is stored last.
+!
+!      data small(1),small(2) /          0,    1048576 /
+!      data large(1),large(2) /         -1, 2146435071 /
+!      data right(1),right(2) /          0, 1017118720 /
+!      data diver(1),diver(2) /          0, 1018167296 /
+!      data log10(1),log10(2) / 1352628735, 1070810131 /
+!
+!  ALLIANT FX/8 UNIX FORTRAN compiler.
+!
+!      data dmach(1) / 2.22507385850721D-308 /
+!      data dmach(2) / 1.79769313486231D+308 /
+!      data dmach(3) / 1.1101827117665D-16 /
+!      data dmach(4) / 2.2203654423533D-16 /
+!      data dmach(5) / 3.01029995663981E-1 /
+!
+!  AMDAHL machines.
+!
+!      data small(1),small(2) /    1048576,          0 /
+!      data large(1),large(2) / 2147483647,         -1 /
+!      data right(1),right(2) /  856686592,          0 /
+!      data diver(1),diver(2) /  873463808,          0 /
+!      data log10(1),log10(2) / 1091781651, 1352628735 /
+!
+!  BURROUGHS 1700 system.
+!
+!      data small(1) / ZC00800000 /
+!      data small(2) / Z000000000 /
+!
+!      data large(1) / ZDFFFFFFFF /
+!      data large(2) / ZFFFFFFFFF /
+!
+!      data right(1) / ZCC5800000 /
+!      data right(2) / Z000000000 /
+!
+!      data diver(1) / ZCC6800000 /
+!      data diver(2) / Z000000000 /
+!
+!      data log10(1) / ZD00E730E7 /
+!      data log10(2) / ZC77800DC0 /
+!
+!  BURROUGHS 5700 system.
+!
+!      data small(1) / O1771000000000000 /
+!      data small(2) / O0000000000000000 /
+!
+!      data large(1) / O0777777777777777 /
+!      data large(2) / O0007777777777777 /
+!
+!      data right(1) / O1461000000000000 /
+!      data right(2) / O0000000000000000 /
+!
+!      data diver(1) / O1451000000000000 /
+!      data diver(2) / O0000000000000000 /
+!
+!      data log10(1) / O1157163034761674 /
+!      data log10(2) / O0006677466732724 /
+!
+!  BURROUGHS 6700/7700 systems.
+!
+!      data small(1) / O1771000000000000 /
+!      data small(2) / O7770000000000000 /
+!
+!      data large(1) / O0777777777777777 /
+!      data large(2) / O7777777777777777 /
+!
+!      data right(1) / O1461000000000000 /
+!      data right(2) / O0000000000000000 /
+!
+!      data diver(1) / O1451000000000000 /
+!      data diver(2) / O0000000000000000 /
+!
+!      data log10(1) / O1157163034761674 /
+!      data log10(2) / O0006677466732724 /
+!
+!  CDC CYBER 170/180 series using NOS
+!
+!      data small(1) / O"00604000000000000000" /
+!      data small(2) / O"00000000000000000000" /
+!
+!      data large(1) / O"37767777777777777777" /
+!      data large(2) / O"37167777777777777777" /
+!
+!      data right(1) / O"15604000000000000000" /
+!      data right(2) / O"15000000000000000000" /
+!
+!      data diver(1) / O"15614000000000000000" /
+!      data diver(2) / O"15010000000000000000" /
+!
+!      data log10(1) / O"17164642023241175717" /
+!      data log10(2) / O"16367571421742254654" /
+!
+!  CDC CYBER 170/180 series using NOS/VE
+!
+!      data small(1) / Z"3001800000000000" /
+!      data small(2) / Z"3001000000000000" /
+!
+!      data large(1) / Z"4FFEFFFFFFFFFFFE" /
+!      data large(2) / Z"4FFE000000000000" /
+!
+!      data right(1) / Z"3FD2800000000000" /
+!      data right(2) / Z"3FD2000000000000" /
+!
+!      data diver(1) / Z"3FD3800000000000" /
+!      data diver(2) / Z"3FD3000000000000" /
+!
+!      data log10(1) / Z"3FFF9A209A84FBCF" /
+!      data log10(2) / Z"3FFFF7988F8959AC" /
+!
+!  CDC CYBER 200 series
+!
+!      data small(1) / X'9000400000000000' /
+!      data small(2) / X'8FD1000000000000' /
+!
+!      data large(1) / X'6FFF7FFFFFFFFFFF' /
+!      data large(2) / X'6FD07FFFFFFFFFFF' /
+!
+!      data right(1) / X'FF74400000000000' /
+!      data right(2) / X'FF45000000000000' /
+!
+!      data diver(1) / X'FF75400000000000' /
+!      data diver(2) / X'FF46000000000000' /
+!
+!      data log10(1) / X'FFD04D104D427DE7' /
+!      data log10(2) / X'FFA17DE623E2566A' /
+!
+!  CDC 6000/7000 series using FTN4.
+!
+!      data small(1) / 00564000000000000000B /
+!      data small(2) / 00000000000000000000B /
+!
+!      data large(1) / 37757777777777777777B /
+!      data large(2) / 37157777777777777774B /
+!
+!      data right(1) / 15624000000000000000B /
+!      data right(2) / 00000000000000000000B /
+!
+!      data diver(1) / 15634000000000000000B /
+!      data diver(2) / 00000000000000000000B /
+!
+!      data log10(1) / 17164642023241175717B /
+!      data log10(2) / 16367571421742254654B /
+!
+!  CDC 6000/7000 series using FTN5.
+!
+!      data small(1) / O"00564000000000000000" /
+!      data small(2) / O"00000000000000000000" /
+!
+!      data large(1) / O"37757777777777777777" /
+!      data large(2) / O"37157777777777777774" /
+!
+!      data right(1) / O"15624000000000000000" /
+!      data right(2) / O"00000000000000000000" /
+!
+!      data diver(1) / O"15634000000000000000" /
+!      data diver(2) / O"00000000000000000000" /
+!
+!      data log10(1) / O"17164642023241175717" /
+!      data log10(2) / O"16367571421742254654" /
+!
+!  CONVEX C-1
+!
+!      data small(1),small(2) / '00100000'X, '00000000'X /
+!      data large(1),large(2) / '7FFFFFFF'X, 'FFFFFFFF'X /
+!      data right(1),right(2) / '3CC00000'X, '00000000'X /
+!      data diver(1),diver(2) / '3CD00000'X, '00000000'X /
+!      data log10(1),log10(2) / '3FF34413'X, '509F79FF'X /
+!
+!  CONVEX C-120 (native mode) with or without -R8 option
+!
+!      data dmach(1) / 5.562684646268007D-309 /
+!      data dmach(2) / 8.988465674311577D+307 /
+!      data dmach(3) / 1.110223024625157D-016 /
+!      data dmach(4) / 2.220446049250313D-016 /
+!      data dmach(5) / 3.010299956639812D-001 /
+!
+!  CONVEX C-120 (IEEE mode) with or without -R8 option
+!
+!      data dmach(1) / 2.225073858507202D-308 /
+!      data dmach(2) / 1.797693134862315D+308 /
+!      data dmach(3) / 1.110223024625157D-016 /
+!      data dmach(4) / 2.220446049250313D-016 /
+!      data dmach(5) / 3.010299956639812D-001 /
+!
+!  CRAY 1, 2, XMP and YMP.
+!
+!      data small(1) / 201354000000000000000B /
+!      data small(2) / 000000000000000000000B /
+!
+!      data large(1) / 577767777777777777777B /
+!      data large(2) / 000007777777777777776B /
+!
+!      data right(1) / 376434000000000000000B /
+!      data right(2) / 000000000000000000000B /
+!
+!      data diver(1) / 376444000000000000000B /
+!      data diver(2) / 000000000000000000000B /
+!
+!      data log10(1) / 377774642023241175717B /
+!      data log10(2) / 000007571421742254654B /
+!
+!  DATA GENERAL ECLIPSE S/200
+!  Note - It may be appropriate to include the line: STATIC dmach(5)
+!
+!      data small /20K,3*0/
+!      data large /77777K,3*177777K/
+!      data right /31420K,3*0/
+!      data diver /32020K,3*0/
+!      data log10 /40423K,42023K,50237K,74776K/
+!
+!  ELXSI 6400, assuming REAL*8 is the default DOUBLE PRECISION type.
+!
+!      data small(1), small(2) / '00100000'X,'00000000'X /
+!      data large(1), large(2) / '7FEFFFFF'X,'FFFFFFFF'X /
+!      data right(1), right(2) / '3CB00000'X,'00000000'X /
+!      data diver(1), diver(2) / '3CC00000'X,'00000000'X /
+!      data log10(1), diver(2) / '3FD34413'X,'509F79FF'X /
+!
+!  HARRIS 220
+!
+!      data small(1),small(2) / '20000000, '00000201 /
+!      data large(1),large(2) / '37777777, '37777577 /
+!      data right(1),right(2) / '20000000, '00000333 /
+!      data diver(1),diver(2) / '20000000, '00000334 /
+!      data log10(1),log10(2) / '23210115, '10237777 /
+!
+!  HARRIS SLASH 6 and SLASH 7
+!
+!      data small(1),small(2) / '20000000, '00000201 /
+!      data large(1),large(2) / '37777777, '37777577 /
+!      data right(1),right(2) / '20000000, '00000333 /
+!      data diver(1),diver(2) / '20000000, '00000334 /
+!      data log10(1),log10(2) / '23210115, '10237777 /
+!
+!  HONEYWELL DPS 8/70 and 600/6000 series.
+!
+!      data small(1),small(2) / O402400000000, O000000000000 /
+!      data large(1),large(2) / O376777777777, O777777777777 /
+!      data right(1),right(2) / O604400000000, O000000000000 /
+!      data diver(1),diver(2) / O606400000000, O000000000000 /
+!      data log10(1),log10(2) / O776464202324, O117571775714 /
+!
+!  HP 2100, three word double precision option with FTN4.
+!
+!      data small(1), small(2), small(3) / 40000B,       0,       1 /
+!      data large(1), large(2), large(3) / 77777B, 177777B, 177776B /
+!      data right(1), right(2), right(3) / 40000B,       0,    265B /
+!      data diver(1), diver(2), diver(3) / 40000B,       0,    276B /
+!      data log10(1), log10(2), log10(3) / 46420B,  46502B,  77777B /
+!
+!  HP 2100, four word double precision option with FTN4.
+!
+!      data small(1), small(2) /  40000B,       0 /
+!      data small(3), small(4) /       0,       1 /
+!      data large(1), large(2) /  77777B, 177777B /
+!      data large(3), large(4) / 177777B, 177776B /
+!      data right(1), right(2) /  40000B,       0 /
+!      data right(3), right(4) /       0,    225B /
+!      data diver(1), diver(2) /  40000B,       0 /
+!      data diver(3), diver(4) /       0,    227B /
+!      data log10(1), log10(2) /  46420B,  46502B /
+!      data log10(3), log10(4) /  76747B, 176377B /
+!
+!  HP 9000
+!
+!      d1mach(1) = 2.8480954D-306
+!      d1mach(2) = 1.40444776D+306
+!      d1mach(3) = 2.22044605D-16
+!      d1mach(4) = 4.44089210D-16
+!      d1mach(5) = 3.01029996D-1
+!
+!      data small(1), small(2) / 00040000000B, 00000000000B /
+!      data large(1), large(2) / 17737777777B, 37777777777B /
+!      data right(1), right(2) / 07454000000B, 00000000000B /
+!      data diver(1), diver(2) / 07460000000B, 00000000000B /
+!      data log10(1), log10(2) / 07764642023B, 12047674777B /
+!
+!  IBM 360/370 series, XEROX SIGMA 5/7/9, SEL SYSTEMS 85/86, PERKIN ELMER 3230,
+!  and PERKIN ELMER (INTERDATA) 3230.
+!
+!      data small(1),small(2) / Z00100000, Z00000000 /
+!      data large(1),large(2) / Z7FFFFFFF, ZFFFFFFFF /
+!      data right(1),right(2) / Z33100000, Z00000000 /
+!      data diver(1),diver(2) / Z34100000, Z00000000 /
+!      data log10(1),log10(2) / Z41134413, Z509F79FF /
+!
+!  IBM PC - Microsoft FORTRAN
+!
+!      data small(1), small(2) / #00000000, #00100000 /
+!      data large(1), large(2) / #FFFFFFFF, #7FEFFFFF /
+!      data right(1), right(2) / #00000000, #3CA00000 /
+!      data diver(1), diver(2) / #00000000, #3CB00000 /
+!      data log10(1), log10(2) / #509F79FF, #3FD34413 /
+!
+!  IBM PC - Professional FORTRAN and Lahey FORTRAN
+!
+!      data small(1), small(2) / Z'00000000', Z'00100000' /
+!      data large(1), large(2) / Z'FFFFFFFF', Z'7FEFFFFF' /
+!      data right(1), right(2) / Z'00000000', Z'3CA00000' /
+!      data diver(1), diver(2) / Z'00000000', Z'3CB00000' /
+!      data log10(1), log10(2) / Z'509F79FF', Z'3FD34413' /
+!
+!  INTERDATA 8/32 with the UNIX system FORTRAN 77 compiler.
+!  For the INTERDATA FORTRAN VII compiler, replace the Z's specifying hex
+!  constants with Y's.
+!
+!      data small(1),small(2) / Z'00100000', Z'00000000' /
+!      data large(1),large(2) / Z'7EFFFFFF', Z'FFFFFFFF' /
+!      data right(1),right(2) / Z'33100000', Z'00000000' /
+!      data diver(1),diver(2) / Z'34100000', Z'00000000' /
+!      data log10(1),log10(2) / Z'41134413', Z'509F79FF' /
+!
+!  PDP-10 (KA processor).
+!
+!      data small(1),small(2) / "033400000000, "000000000000 /
+!      data large(1),large(2) / "377777777777, "344777777777 /
+!      data right(1),right(2) / "113400000000, "000000000000 /
+!      data diver(1),diver(2) / "114400000000, "000000000000 /
+!      data log10(1),log10(2) / "177464202324, "144117571776 /
+!
+!  PDP-10 (KI processor).
+!
+!      data small(1),small(2) / "000400000000, "000000000000 /
+!      data large(1),large(2) / "377777777777, "377777777777 /
+!      data right(1),right(2) / "103400000000, "000000000000 /
+!      data diver(1),diver(2) / "104400000000, "000000000000 /
+!      data log10(1),log10(2) / "177464202324, "047674776746 /
+!
+!  PDP-11 FORTRANS supporting 32-bit integers (integer version).
+!
+!      data small(1),small(2) /    8388608,           0 /
+!      data large(1),large(2) / 2147483647,          -1 /
+!      data right(1),right(2) /  612368384,           0 /
+!      data diver(1),diver(2) /  620756992,           0 /
+!      data log10(1),log10(2) / 1067065498, -2063872008 /
+!
+!  PDP-11 FORTRANS supporting 32-bit integers (octal version)
+!
+!      data small(1),small(2) / O00040000000, O00000000000 /
+!      data large(1),large(2) / O17777777777, O37777777777 /
+!      data right(1),right(2) / O04440000000, O00000000000 /
+!      data diver(1),diver(2) / O04500000000, O00000000000 /
+!      data log10(1),log10(2) / O07746420232, O20476747770 /
+!
+!  PDP-11 FORTRANS supporting 16-bit integers (integer version).
+!
+!      data small(1),small(2) /    128,      0 /
+!      data small(3),small(4) /      0,      0 /
+!
+!      data large(1),large(2) /  32767,     -1 /
+!      data large(3),large(4) /     -1,     -1 /
+!
+!      data right(1),right(2) /   9344,      0 /
+!      data right(3),right(4) /      0,      0 /
+!
+!      data diver(1),diver(2) /   9472,      0 /
+!      data diver(3),diver(4) /      0,      0 /
+!
+!      data log10(1),log10(2) /  16282,   8346 /
+!      data log10(3),log10(4) / -31493, -12296 /
+!
+!  PDP-11 FORTRANS supporting 16-bit integers (octal version).
+!
+!      data small(1),small(2) / O000200, O000000 /
+!      data small(3),small(4) / O000000, O000000 /
+!
+!      data large(1),large(2) / O077777, O177777 /
+!      data large(3),large(4) / O177777, O177777 /
+!
+!      data right(1),right(2) / O022200, O000000 /
+!      data right(3),right(4) / O000000, O000000 /
+!
+!      data diver(1),diver(2) / O022400, O000000 /
+!      data diver(3),diver(4) / O000000, O000000 /
+!
+!      data log10(1),log10(2) / O037632, O020232 /
+!      data log10(3),log10(4) / O102373, O147770 /
+!
+!  PRIME 50 series systems with 32-bit integers and 64V MODE instructions,
+!  supplied by Igor Bray.
+!
+!      data small(1),small(2) / :10000000000, :00000100001 /
+!      data large(1),large(2) / :17777777777, :37777677775 /
+!      data right(1),right(2) / :10000000000, :00000000122 /
+!      data diver(1),diver(2) / :10000000000, :00000000123 /
+!      data log10(1),log10(2) / :11504046501, :07674600177 /
+!
+!  SEQUENT BALANCE 8000
+!
+!      data small(1),small(2) / $00000000,  $00100000 /
+!      data large(1),large(2) / $FFFFFFFF,  $7FEFFFFF /
+!      data right(1),right(2) / $00000000,  $3CA00000 /
+!      data diver(1),diver(2) / $00000000,  $3CB00000 /
+!      data log10(1),log10(2) / $509F79FF,  $3FD34413 /
+!
+!  SUN Microsystems UNIX F77 compiler.
+!
+!      data dmach(1) / 2.22507385850720D-308 /
+!      data dmach(2) / 1.79769313486231D+308 /
+!      data dmach(3) / 1.1101827117665D-16 /
+!      data dmach(4) / 2.2203654423533D-16 /
+!      data dmach(5) / 3.01029995663981D-1 /
+!
+!  SUN 3 (68881 or FPA)
+!
+!      data small(1),small(2) / X'00100000', X'00000000' /
+!      data large(1),large(2) / X'7FEFFFFF', X'FFFFFFFF' /
+!      data right(1),right(2) / X'3CA00000', X'00000000' /
+!      data diver(1),diver(2) / X'3CB00000', X'00000000' /
+!      data log10(1),log10(2) / X'3FD34413', X'509F79FF' /
+!
+!  UNIVAC 1100 series.
+!
+!      data small(1),small(2) / O000040000000, O000000000000 /
+!      data large(1),large(2) / O377777777777, O777777777777 /
+!      data right(1),right(2) / O170540000000, O000000000000 /
+!      data diver(1),diver(2) / O170640000000, O000000000000 /
+!      data log10(1),log10(2) / O177746420232, O411757177572 /
+!
+!  VAX/ULTRIX F77 compiler
+!
+!      data small(1),small(2) /        128,           0 /
+!      data large(1),large(2) /     -32769,          -1 /
+!      data right(1),right(2) /       9344,           0 /
+!      data diver(1),diver(2) /       9472,           0 /
+!      data log10(1),log10(2) /  546979738,  -805796613 /
+!
+!  VAX/ULTRIX F77 compiler, G floating
+!
+!      data small(1), small(2) /         16,           0 /
+!      data large(1), large(2) /     -32769,          -1 /
+!      data right(1), right(2) /      15552,           0 /
+!      data diver(1), diver(2) /      15568,           0 /
+!      data log10(1), log10(2) /  1142112243, 2046775455 /
+!
+!  VAX-11 with FORTRAN IV-PLUS compiler
+!
+!      data small(1),small(2) / Z00000080, Z00000000 /
+!      data large(1),large(2) / ZFFFF7FFF, ZFFFFFFFF /
+!      data right(1),right(2) / Z00002480, Z00000000 /
+!      data diver(1),diver(2) / Z00002500, Z00000000 /
+!      data log10(1),log10(2) / Z209A3F9A, ZCFF884FB /
+!
+!  VAX/VMS version 2.2
+!
+!      data small(1),small(2) /       '80'X,        '0'X /
+!      data large(1),large(2) / 'FFFF7FFF'X, 'FFFFFFFF'X /
+!      data right(1),right(2) /     '2480'X,        '0'X /
+!      data diver(1),diver(2) /     '2500'X,        '0'X /
+!      data log10(1),log10(2) / '209A3F9A'X, 'CFF884FB'X /
+!
+!  VAX/VMS 11/780
+!
+!      data small(1), small(2) / Z00000080, Z00000000 /
+!      data large(1), large(2) / ZFFFF7FFF, ZFFFFFFFF /
+!      data right(1), right(2) / Z00002480, Z00000000 /
+!      data diver(1), diver(2) / Z00002500, Z00000000 /
+!      data log10(1), log10(2) / Z209A3F9A, ZCFF884FB /
+!
+!  VAX/VMS 11/780 (G-FLOATING)
+!
+!      data small(1), small(2) / Z00000010, Z00000000 /
+!      data large(1), large(2) / ZFFFF7FFF, ZFFFFFFFF /
+!      data right(1), right(2) / Z00003CC0, Z00000000 /
+!      data diver(1), diver(2) / Z00003CD0, Z00000000 /
+!      data log10(1), log10(2) / Z44133FF3, Z79FF509F /
+!
+  if(i<1.or.i>5)then
+    write ( *, * ) ' '
+    write(*,*)'D1MACH - Fatal error!'
+    write(*,*)'I is out of bounds:',i
+    d1mach=0.0d0
+    stop
+  else
+    d1mach = dmach(i)
+  end if
+
+  return
+end
+subroutine d2fcn
+!
+!*******************************************************************************
+!
+!! D2FCN ??
+!
+  write ( *, * ) ' '
+  write ( *, * ) 'd2fcn accidentally called!'
+  stop
+end
+subroutine dfault ( n, x, typsiz, fscale, method, iexp, msg, ndigit, itnlim, &
+  iagflg, iahflg, ipr, dlt, gradtl, stepmx, steptl )
+!
+!*******************************************************************************
+!
+!! DFAULT sets default values for the optimization algorithm.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+! parameters
+!
+! n            --> dimension of problem
+! x(n)         --> initial guess to solution (to compute max step size)
+! typsiz(n)   <--  typical size for each component of x
+! fscale      <--  estimate of scale of minimization function
+! method      <--  algorithm to use to solve minimization problem
+! iexp        <--  =0 if minimization function not expensive to evaluate
+! msg         <--  message to inhibit certain automatic checks + output
+! ndigit      <--  number of good digits in minimization function
+! itnlim      <--  maximum number of allowable iterations
+! iagflg      <--  =0 if analytic gradient not supplied
+! iahflg      <--  =0 if analytic hessian not supplied
+! ipr         <--  device to which to send output
+! dlt         <--  trust region radius
+! gradtl      <--  tolerance at which gradient considered close enough
+!                  to zero to terminate algorithm
+! stepmx      <--  value of zero to trip default maximum in optchk
+! steptl      <--  tolerance at which successive iterates considered
+!                  close enough to terminate algorithm
+!
+  integer n
+!
+  real dlt
+  real epsm
+  real fscale
+  real gradtl
+  integer i1mach
+  integer iagflg
+  integer iahflg
+  integer iexp
+  integer ipr
+  integer itnlim
+  integer method
+  integer msg
+  integer ndigit
+  real stepmx
+  real steptl
+  real typsiz(n)
+  real x(n)
+!
+  x(n)=x(n)
+!
+!  Typical size of x and minimization function
+!
+  typsiz(1:n)=1.0E+00
+  fscale=1.0E+00
+!
+!  Tolerances
+!
+  dlt=-1.0E+00
+  epsm = epsilon ( epsm )
+  gradtl=epsm**(1.0/3.0)
+  stepmx=0.0E+00
+  steptl=sqrt(epsm)
+!
+!  Flags
+!
+  method=1
+  iexp=1
+  msg=9
+  ndigit=-1
+  itnlim=150
+  iagflg=0
+  iahflg=0
+  ipr = 6
+
+  return
+end
+subroutine dogdrv ( nr, n, x, f, g, a, p, xpls, fpls, fcn, sx, stepmx, &
+  steptl, dlt, iretcd, mxtake, sc, wrk1, wrk2, wrk3, ipr )
+!
+!*******************************************************************************
+!
+!! DOGDRV finds a next newton iterate (xpls) by the double dogleg method.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! x(n)         --> old iterate x[k-1]
+! f            --> function value at old iterate, f(x)
+! g(n)         --> gradient  at old iterate, g(x), or approximate
+! a(n,n)       --> cholesky decomposition of hessian
+!                  in lower triangular part and diagonal
+! p(n)         --> newton step
+! xpls(n)     <--  new iterate x[k]
+! fpls        <--function value at new iterate, f(xpls)
+! fcn          --> name of subroutine to evaluate function
+! sx(n)        --> diagonal scaling matrix for x
+! stepmx       --> maximum allowable step size
+! steptl       --> relative step size at which successive iterates
+!                  considered close enough to terminate algorithm
+! dlt         <--> trust region radius
+!                  [retain value between successive calls]
+! iretcd      <--  return code
+!                    =0 satisfactory xpls found
+!                    =1 failed to find satisfactory xpls sufficiently
+!                       distinct from x
+! mxtake      <--  boolean flag indicating step of maximum length used
+! sc(n)        --> workspace [current step]
+! wrk1(n)      --> workspace (and place holding argument to tregup)
+! wrk2(n)      --> workspace
+! wrk3(n)      --> workspace
+! ipr          --> device to which to send output
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real cln
+  real dlt
+  real eta
+  real f
+  real fpls
+  real fplsp
+  logical fstdog
+  real g(n)
+  integer i
+  integer ipr
+  integer iretcd
+  logical mxtake
+  logical nwtake
+  real p(n)
+  real rnwtln
+  real sc(n)
+  real stepmx
+  real steptl
+  real sx(n)
+  real tmp
+  real wrk1(n)
+  real wrk2(n)
+  real wrk3(n)
+  real x(n)
+  real xpls(n)
+!
+  external fcn
+!
+  iretcd=4
+  fstdog=.true.
+  tmp=0.
+  do i=1,n
+    tmp=tmp+sx(i)*sx(i)*p(i)*p(i)
+  end do
+
+  rnwtln=sqrt(tmp)
+
+  100 continue
+!
+! find new step by double dogleg algorithm
+!
+  call dogstp ( nr, n, g, a, p, sx, rnwtln, dlt, nwtake, fstdog, wrk1, &
+    wrk2, cln, eta, sc, ipr, stepmx )
+!
+! check new point and update trust region
+!
+  call tregup(nr,n,x,f,g,a,fcn,sc,sx,nwtake,stepmx,steptl,dlt, &
+    iretcd,wrk3,fplsp,xpls,fpls,mxtake,ipr,2,wrk1)
+
+  if ( iretcd<=1) return
+  go to 100
+  950 format(' dogdrv    initial trust region not given.', &
+             '  compute cauchy step.')
+  951 format(' dogdrv    alpha =',e20.13/' dogdrv    beta  =',e20.13/ &
+             ' dogdrv    dlt   =',e20.13/' dogdrv    nwtake=',l1    )
+  952 format(' dogdrv    current step (sc)')
+  954 format('0dogdrv    rnwtln=',e20.13)
+  955 format(' dogdrv       ',5(e20.13,3x))
+end
+subroutine dogleg ( n, r, lr, diag, qtb, delta, x, wa1, wa2 )
+!
+!*******************************************************************************
+!
+!! DOGLEG ??
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!   subroutine dogleg
+!
+!     given an m by n matrix a, an n by n nonsingular diagonal
+!     matrix d, an m-vector b, and a positive number delta, the
+!     problem is to determine the convex combination x of the
+!     gauss-newton and scaled gradient directions that minimizes
+!     (a*x - b) in the least squares sense, subject to the
+!     restriction that the euclidean norm of d*x be at most delta.
+!
+!     this subroutine completes the solution of the problem
+!     if it is provided with the necessary information from the
+!     qr factorization of a. that is, if a = q*r, where q has
+!     orthogonal columns and r is an upper triangular matrix,
+!     then dogleg expects the full upper triangle of r and
+!     the first n components of (q transpose)*b.
+!
+!  Parameters:
+!
+!       n is a positive integer input variable set to the order of r.
+!
+!       r is an input array of length lr which must contain the upper
+!         triangular matrix r stored by rows.
+!
+!       lr is a positive integer input variable not less than
+!         (n*(n+1))/2.
+!
+!       diag is an input array of length n which must contain the
+!         diagonal elements of the matrix d.
+!
+!       qtb is an input array of length n which must contain the first
+!         n elements of the vector (q transpose)*b.
+!
+!       delta is a positive input variable which specifies an upper
+!         bound on the euclidean norm of d*x.
+!
+!       x is an output array of length n which contains the desired
+!         convex combination of the gauss-newton direction and the
+!         scaled gradient direction.
+!
+!       wa1 and wa2 are work arrays of length n.
+!
+  integer lr
+  integer n
+!
+  real alpha
+  real bnorm
+  real delta
+  real diag(n)
+  real epsmch
+  real gnorm
+  integer i
+  integer j
+  integer jj
+  integer jp1
+  integer k
+  integer l
+  real qnorm
+  real qtb(n)
+  real r(lr)
+  real r1mach
+  real sgnorm
+  real snrm2
+  real sum
+  real temp
+  real wa1(n)
+  real wa2(n)
+  real x(n)
+!
+  epsmch = epsilon ( epsmch )
+!
+!  First, calculate the gauss-newton direction.
+!
+  jj = (n*(n + 1))/2 + 1
+
+  do k = 1, n
+
+     j = n - k + 1
+     jp1 = j + 1
+     jj = jj - k
+     l = jj + 1
+     sum = 0.0E+00
+
+     do i = jp1, n
+       sum = sum + r(l) * x(i)
+       l = l + 1
+     end do
+
+     temp = r(jj)
+
+     if ( temp == 0.0E+00 ) then
+
+       l = j
+       do i = 1, j
+         temp = max ( temp, abs ( r(l) ) )
+         l = l + n - i
+       end do
+       temp = epsmch * temp
+       if (temp == 0.0) temp = epsmch
+
+     end if
+
+     x(j) = (qtb(j) - sum)/temp
+
+  end do
+!
+!  test whether the gauss-newton direction is acceptable.
+!
+  wa1(1:n) = 0.0E+00
+  wa2(1:n) = diag(1:n) * x(1:n)
+
+  qnorm = snrm2(n,wa2,1)
+
+  if (qnorm <= delta) go to 140
+!
+!     the gauss-newton direction is not acceptable.
+!     next, calculate the scaled gradient direction.
+!
+  l = 1
+  do j = 1, n
+    temp = qtb(j)
+    do i = j, n
+      wa1(i) = wa1(i) + r(l)*temp
+      l = l + 1
+    end do
+    wa1(j) = wa1(j)/diag(j)
+  end do
+!
+!     calculate the norm of the scaled gradient direction,
+!     normalize, and rescale the gradient.
+!
+  gnorm = snrm2(n,wa1,1)
+  sgnorm = 0.0E+00
+  alpha = delta/qnorm
+  if (gnorm == 0.0) go to 120
+
+  do j = 1, n
+     wa1(j) = (wa1(j)/gnorm)/diag(j)
+  end do
+!
+!     calculate the point along the scaled gradient
+!     at which the quadratic is minimized.
+!
+  l = 1
+  do j = 1, n
+     sum = 0.0E+00
+     do i = j, n
+       sum = sum + r(l)*wa1(i)
+       l = l + 1
+     end do
+     wa2(j) = sum
+  end do
+  temp = snrm2(n,wa2,1)
+  sgnorm = (gnorm/temp)/temp
+!
+!  Test whether the scaled gradient direction is acceptable.
+!
+  alpha = 0.0E+00
+  if (sgnorm >= delta) go to 120
+!
+!     the scaled gradient direction is not acceptable.
+!     finally, calculate the point along the dogleg
+!     at which the quadratic is minimized.
+!
+  bnorm = snrm2(n,qtb,1)
+  temp = (bnorm/gnorm)*(bnorm/qnorm)*(sgnorm/delta)
+  temp = temp - (delta/qnorm)*(sgnorm/delta)**2 &
+    + sqrt((temp-(delta/qnorm))**2 &
+    + (1.0-(delta/qnorm)**2)*(1.0-(sgnorm/delta)**2))
+
+  alpha = ((delta/qnorm)*(1.0E+00 - (sgnorm/delta)**2))/temp
+  120 continue
+!
+!     form appropriate convex combination of the gauss-newton
+!     direction and the scaled gradient direction.
+!
+  temp = (1.0E+00 - alpha)* min (sgnorm,delta)
+  do j = 1, n
+    x(j) = temp*wa1(j) + alpha*x(j)
+  end do
+
+  140 continue
+
+  return
+end
+subroutine dogstp ( nr, n, g, a, p, sx, rnwtln, dlt, nwtake, fstdog, ssd, v, &
+  cln, eta, sc, ipr, stepmx )
+!
+!*******************************************************************************
+!
+!! DOGSTP finds a new step by double dogleg algorithm.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+! parameters
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! g(n)         --> gradient at current iterate, g(x)
+! a(n,n)       --> cholesky decomposition of hessian in
+!                  lower part and diagonal
+! p(n)         --> newton step
+! sx(n)        --> diagonal scaling matrix for x
+! rnwtln       --> newton step length
+! dlt         <--> trust region radius
+! nwtake      <--> boolean, =.true. if newton step taken
+! fstdog      <--> boolean, =.true. if on first leg of dogleg
+! ssd(n)      <--> workspace [cauchy step to the minimum of the
+!                  quadratic model in the scaled steepest descent
+!                  direction] [retain value between successive calls]
+! v(n)        <--> workspace  [retain value between successive calls]
+! cln         <--> cauchy length
+!                  [retain value between successive calls]
+! eta              [retain value between successive calls]
+! sc(n)       <--  current step
+! ipr          --> device to which to send output
+! stepmx       --> maximum allowable step size
+!
+! internal variables
+!
+! cln              length of cauchy step
+!
+  integer n
+  integer nr
+!
+  real a(nr,*)
+  real alam
+  real alpha
+  real beta
+  real cln
+  real dlt
+  real dot1
+  real dot2
+  real eta
+  logical fstdog
+  real g(n)
+  integer i
+  integer ipr
+  integer j
+  logical nwtake
+  real p(n)
+  real rnwtln
+  real sc(n)
+  real ssd(n)
+  real stepmx
+  real sx(n)
+  real tmp
+  real v(n)
+!
+!  Can we take a newton step?
+!
+  if ( rnwtln <= dlt ) then
+
+    nwtake = .true.
+    sc(1:n) = p(1:n)
+    dlt = rnwtln
+
+  else
+!
+! newton step too long
+! cauchy step is on double dogleg curve
+!
+    nwtake = .false.
+
+    if ( fstdog ) then
+!
+!         calculate double dogleg curve (ssd)
+!
+      fstdog = .false.
+      alpha = 0.0E+00
+      do i = 1, n
+        alpha = alpha + (g(i)*g(i))/(sx(i)*sx(i))
+      end do
+
+      beta = 0.0E+00
+      do i = 1, n
+        tmp = 0.0E+00
+        do j = i, n
+          tmp = tmp + (a(j,i)*g(j))/(sx(j)*sx(j))
+        end do
+        beta = beta+tmp*tmp
+      end do
+
+      do i = 1, n
+        ssd(i) = - (alpha/beta)*g(i)/sx(i)
+      end do
+
+      cln = alpha * sqrt ( alpha ) / beta
+
+      eta = 0.2 + ( 0.8*alpha*alpha) / ( - beta * dot_product ( g, p ) )
+
+      do i = 1, n
+        v(i) = eta*sx(i)*p(i) - ssd(i)
+      end do
+
+      if ( dlt == - 1.0E+00 ) then
+        dlt = min ( cln, stepmx )
+      end if
+
+    end if
+!
+!  Take a partial step in the Newton direction.
+!
+      if ( eta * rnwtln <= dlt ) then
+
+        sc(1:n) = ( dlt / rnwtln ) * p(1:n)
+!
+!  Take a step in steepest descent direction
+!
+      else if ( cln >= dlt ) then
+
+        sc(1:n) = ( dlt / cln ) * ssd(1:n) / sx(1:n)
+!
+!  convex combination of ssd and eta*p which has scaled length dlt
+!
+      else
+
+        dot1 = dot_product ( v, ssd )
+        dot2 = dot_product ( v, v )
+        alam = (-dot1+sqrt((dot1*dot1)-dot2*(cln*cln-dlt*dlt)))/dot2
+
+        sc(1:n) = ( ssd(1:n) + alam * v(1:n) ) / sx(1:n)
+
+      end if
+
+  end if
+
+  return
+end
+subroutine ea ( newflg, svalue, limexp, result, abserr, epstab, ierr )
+!
+!*******************************************************************************
+!
+!! EA performs extrapolation to accelerate the convergence of a sequence.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  purpose  given a slowly convergent sequence, this routine attempts
+!            to extrapolate nonlinearly to a better estimate of the
+!            sequence's limiting value, thus improving the rate of
+!            convergence. routine is based on the epsilon algorithm
+!            of p. wynn. an estimate of the absolute error is also
+!            given.
+!
+  real abserr
+  real delta1
+  real delta2
+  real delta3
+  real eprn
+  real epstab(*)
+  real error
+  real err1
+  real err2
+  real err3
+  real e0
+  real e1
+  real e2
+  real e3
+  integer i
+  integer ib
+  integer ib2
+  integer ie
+  integer ierr
+  integer in
+  integer k1
+  integer k2
+  integer k3
+  integer limexp
+  integer n
+  integer newelm
+  integer num
+  integer nres
+  logical newflg
+  real relpr
+  real res
+  real result
+  real res3la(3)
+  real r1mach
+  real ss
+  real svalue
+  real tol1
+  real tol2
+  real tol3
+!
+  if ( limexp < 3 ) then
+    ierr = 1
+    call xerror('limexp is less than 3',21,1,1)
+    go to 110
+  end if
+
+  ierr = 0
+  res3la(1)=epstab(limexp+5)
+  res3la(2)=epstab(limexp+6)
+  res3la(3)=epstab(limexp+7)
+  result=svalue
+
+  if ( newflg) then
+    n=1
+    nres=0
+    newflg=.false.
+    epstab(n)=svalue
+    abserr=abs(result)
+    go to 100
+  else
+    n=int(epstab(limexp+3))
+    nres=int(epstab(limexp+4))
+    if ( n==2) then
+      epstab(n)=svalue
+      abserr=6.0*abs(result-epstab(1))
+      go to 100
+    end if
+  end if
+
+  epstab(n)=svalue
+  relpr=r1mach(4)
+  eprn=10.0*relpr
+  epstab(n+2)=epstab(n)
+  newelm=(n-1)/2
+  num=n
+  k1=n
+
+  do i=1,newelm
+
+    k2=k1-1
+    k3=k1-2
+    res=epstab(k1+2)
+    e0=epstab(k3)
+    e1=epstab(k2)
+    e2=res
+    delta2=e2-e1
+    err2=abs(delta2)
+    tol2=max(abs(e2),abs(e1))*relpr
+    delta3=e1-e0
+    err3=abs(delta3)
+    tol3=max(abs(e1),abs(e0))*relpr
+
+!
+!  if e0, e1 and e2 are equal to within machine accuracy, convergence is assumed.
+!
+    if ( err2 > tol2 .or. err3 > tol3 ) go to 10
+    result=res
+    abserr=err2+err3
+    go to 50
+
+   10   continue
+
+    if ( i/=1) then
+      e3=epstab(k1)
+      epstab(k1)=e1
+      delta1=e1-e3
+      err1=abs(delta1)
+      tol1=max(abs(e1),abs(e3))*relpr
+!
+!           if two elements are very close to each other, omit
+!           a part of the table by adjusting the value of n
+!
+      if ( err1<=tol1.or.err2<=tol2.or.err3<=tol3) go to 20
+      ss=1.0/delta1+1.0/delta2-1.0/delta3
+    else
+      epstab(k1)=e1
+      if ( err2<=tol2.or.err3<=tol3) go to 20
+      ss=1.0/delta2-1.0/delta3
+    end if
+!
+!           test to detect irregular behaviour in the table, and
+!           eventually omit a part of the table adjusting the value
+!           of n
+!
+    if ( abs(ss*e1)>0.1e-03) go to 30
+   20   n=i+i-1
+
+    if ( nres==0) then
+      abserr=err2+err3
+      result=res
+    else if ( nres==1) then
+      result=res3la(1)
+    else if ( nres==2) then
+      result=res3la(2)
+    else
+      result=res3la(3)
+    end if
+
+    go to 50
+!
+!  compute a new element and eventually adjust the value of result
+!
+   30   res=e1+1.0/ss
+    epstab(k1)=res
+    k1=k1-2
+    if ( nres==0) then
+      abserr=err2+abs(res-e2)+err3
+      result=res
+      go to 40
+    else if ( nres==1) then
+      error=6.0*(abs(res-res3la(1)))
+    else if ( nres==2) then
+      error=2.0*(abs(res-res3la(2))+abs(res-res3la(1)))
+    else
+      error=abs(res-res3la(3))+abs(res-res3la(2))+abs(res-res3la(1))
+    end if
+
+    if ( error <= 10.0E+00 * abserr ) then
+      abserr = error
+      result = res
+    end if
+
+   40 continue
+
+  end do
+!
+!  compute error estimate
+!
+    if ( nres==1) then
+      abserr=6.0*(abs(result-res3la(1)))
+    else if ( nres==2) then
+      abserr=2.0*abs(result-res3la(2))+abs(result-res3la(1))
+    else if ( nres>2) then
+      abserr=abs(result-res3la(3))+abs(result-res3la(2)) &
+        +abs(result-res3la(1))
+    end if
+!
+!  shift the table
+!
+   50 if ( n==limexp) n=2*(limexp/2)-1
+  ib=1
+  if ( (num/2)*2==num) ib=2
+  ie=newelm+1
+
+  do i = 1, ie
+    ib2=ib+2
+    epstab(ib)=epstab(ib2)
+    ib=ib2
+  end do
+
+  if ( num==n) go to 80
+  in=num-n+1
+
+  do i=1,n
+    epstab(i)=epstab(in)
+    in=in+1
+  end do
+!
+!  update res3la
+!
+   80 continue
+
+  if ( nres==0) then
+    res3la(1)=result
+  else if ( nres==1) then
+    res3la(2)=result
+  else if ( nres==2) then
+    res3la(3)=result
+  else
+    res3la(1)=res3la(2)
+    res3la(2)=res3la(3)
+    res3la(3)=result
+  end if
+
+90 continue
+
+  abserr=max(abserr,eprn*abs(result))
+  nres=nres+1
+
+100 continue
+
+  n=n+1
+  epstab(limexp+3)=real(n)
+  epstab(limexp+4)=real(nres)
+  epstab(limexp+5)=res3la(1)
+  epstab(limexp+6)=res3la(2)
+  epstab(limexp+7)=res3la(3)
+
+110 continue
+
+  return
+end
+function erf ( x )
+!
+!*******************************************************************************
+!
+!! ERF computes the error function.
+!
+!
+!  Definition:
+!
+!    ERF(X) = ( 2 / SQRT ( PI ) ) * Integral ( 0 <= T <= X ) EXP ( -T**2 ) dT
+!
+!  Modified:
+!
+!    10 November 1999
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+!    Input, real X, the argument of the error function.
+!
+!    Output, real ERF, the value of the error function at X.
+!
+  real, parameter :: sqrtpi = 1.7724538509055160
+!
+  real csevl
+  real erf
+  real erfc
+  real erfcs(13)
+  integer inits
+  integer, save :: nterf = 0
+  real r1mach
+  real sqeps
+  real x
+  real, save :: xbig = 0.0E+00
+  real y
+!
+  data erfcs( 1) /   -0.049046121234691808 /
+  data erfcs( 2) /   -0.14226120510371364 /
+  data erfcs( 3) /    0.010035582187599796 /
+  data erfcs( 4) /   -0.000576876469976748 /
+  data erfcs( 5) /    0.000027419931252196 /
+  data erfcs( 6) /   -0.000001104317550734 /
+  data erfcs( 7) /    0.000000038488755420 /
+  data erfcs( 8) /   -0.000000001180858253 /
+  data erfcs( 9) /    0.000000000032334215 /
+  data erfcs(10) /   -0.000000000000799101 /
+  data erfcs(11) /    0.000000000000017990 /
+  data erfcs(12) /   -0.000000000000000371 /
+  data erfcs(13) /    0.000000000000000007 /
+  data sqeps / 0.0E+00 /
+!
+  if ( nterf == 0 ) then
+    nterf = inits ( erfcs, 13, 0.1*r1mach(3) )
+    xbig = sqrt ( - log ( sqrtpi * r1mach(3) ) )
+    sqeps = sqrt ( 2.0E+00 * epsilon ( sqeps ) )
+  end if
+
+  y = abs ( x )
+
+  if ( y <= sqeps ) then
+    erf = 2.0E+00 * x / sqrtpi
+  else if ( y <= 1.0E+00 ) then
+    erf = x * ( 1.0E+00 + csevl ( 2.0E+00 * x**2 - 1.0, erfcs, nterf ) )
+  else if ( y <= xbig ) then
+    erf = sign ( 1.0E+00 - erfc ( y ), x )
+  else
+    erf = sign ( 1.0, x )
+  end if
+
+  return
+end
+function erfc ( x )
+!
+!*******************************************************************************
+!
+!! ERFC computes the complementary error function.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+! erfc(x) calculates the single precision complementary error
+! function for single precision argument x.
+!
+! series for erf        on the interval  0.          to  1.00000d+00
+!                                        with weighted error   7.10e-18
+!                                         log weighted error  17.15
+!                               significant figures required  16.31
+!                                    decimal places required  17.71
+!
+! series for erfc       on the interval  0.          to  2.50000d-01
+!                                        with weighted error   4.81e-17
+!                                         log weighted error  16.32
+!                        approx significant figures required  15.0E+00
+!
+!
+! series for erc2       on the interval  2.50000d-01 to  1.00000d+00
+!                                        with weighted error   5.22e-17
+!                                         log weighted error  16.28
+!                        approx significant figures required  15.0E+00
+!                                    decimal places required  16.96
+!
+  real csevl
+  real erfc
+  real erfcs(13)
+  real erfccs(24)
+  real erc2cs(23)
+  real eta
+  integer inits
+  integer nterc2
+  integer nterf
+  integer nterfc
+  real r1mach
+  real sqeps
+  real sqrtpi
+  real x
+  real xmax
+  real xsml
+  real y
+!
+  data erfcs( 1) /   -.049046121234691808e0 /
+  data erfcs( 2) /   -.14226120510371364e0 /
+  data erfcs( 3) /    .010035582187599796e0 /
+  data erfcs( 4) /   -.000576876469976748e0 /
+  data erfcs( 5) /    .000027419931252196e0 /
+  data erfcs( 6) /   -.000001104317550734e0 /
+  data erfcs( 7) /    .000000038488755420e0 /
+  data erfcs( 8) /   -.000000001180858253e0 /
+  data erfcs( 9) /    .000000000032334215e0 /
+  data erfcs(10) /   -.000000000000799101e0 /
+  data erfcs(11) /    .000000000000017990e0 /
+  data erfcs(12) /   -.000000000000000371e0 /
+  data erfcs(13) /    .000000000000000007e0 /
+  data erc2cs( 1) /   -.069601346602309501e0 /
+  data erc2cs( 2) /   -.041101339362620893e0 /
+  data erc2cs( 3) /    .003914495866689626e0 /
+  data erc2cs( 4) /   -.000490639565054897e0 /
+  data erc2cs( 5) /    .000071574790013770e0 /
+  data erc2cs( 6) /   -.000011530716341312e0 /
+  data erc2cs( 7) /    .000001994670590201e0 /
+  data erc2cs( 8) /   -.000000364266647159e0 /
+  data erc2cs( 9) /    .000000069443726100e0 /
+  data erc2cs(10) /   -.000000013712209021e0 /
+  data erc2cs(11) /    .000000002788389661e0 /
+  data erc2cs(12) /   -.000000000581416472e0 /
+  data erc2cs(13) /    .000000000123892049e0 /
+  data erc2cs(14) /   -.000000000026906391e0 /
+  data erc2cs(15) /    .000000000005942614e0 /
+  data erc2cs(16) /   -.000000000001332386e0 /
+  data erc2cs(17) /    .000000000000302804e0 /
+  data erc2cs(18) /   -.000000000000069666e0 /
+  data erc2cs(19) /    .000000000000016208e0 /
+  data erc2cs(20) /   -.000000000000003809e0 /
+  data erc2cs(21) /    .000000000000000904e0 /
+  data erc2cs(22) /   -.000000000000000216e0 /
+  data erc2cs(23) /    .000000000000000052e0 /
+  data erfccs( 1) /   0.0715179310202925e0 /
+  data erfccs( 2) /   -.026532434337606719e0 /
+  data erfccs( 3) /    .001711153977920853e0 /
+  data erfccs( 4) /   -.000163751663458512e0 /
+  data erfccs( 5) /    .000019871293500549e0 /
+  data erfccs( 6) /   -.000002843712412769e0 /
+  data erfccs( 7) /    .000000460616130901e0 /
+  data erfccs( 8) /   -.000000082277530261e0 /
+  data erfccs( 9) /    .000000015921418724e0 /
+  data erfccs(10) /   -.000000003295071356e0 /
+  data erfccs(11) /    .000000000722343973e0 /
+  data erfccs(12) /   -.000000000166485584e0 /
+  data erfccs(13) /    .000000000040103931e0 /
+  data erfccs(14) /   -.000000000010048164e0 /
+  data erfccs(15) /    .000000000002608272e0 /
+  data erfccs(16) /   -.000000000000699105e0 /
+  data erfccs(17) /    .000000000000192946e0 /
+  data erfccs(18) /   -.000000000000054704e0 /
+  data erfccs(19) /    .000000000000015901e0 /
+  data erfccs(20) /   -.000000000000004729e0 /
+  data erfccs(21) /    .000000000000001432e0 /
+  data erfccs(22) /   -.000000000000000439e0 /
+  data erfccs(23) /    .000000000000000138e0 /
+  data erfccs(24) /   -.000000000000000048e0 /
+  data sqrtpi /1.7724538509055160e0/
+  data nterf, nterfc, nterc2, xsml, xmax, sqeps /3*0, 3*0./
+!
+  if ( nterf == 0 ) then
+
+    eta = 0.1 * r1mach(3)
+    nterf = inits ( erfcs, 13, eta )
+    nterfc = inits ( erfccs, 24, eta )
+    nterc2 = inits ( erc2cs, 23, eta )
+
+    xsml = -sqrt ( - log ( sqrtpi * r1mach(3) ) )
+    xmax = sqrt ( - log ( sqrtpi * r1mach(1) ) )
+    xmax = xmax - 0.5 * log ( xmax ) / xmax - 0.01
+    sqeps = sqrt ( 2.0E+00 * r1mach(3) )
+
+  end if
+
+  if ( x <= xsml ) then
+    erfc = 2.0E+00
+    return
+  end if
+
+  if ( x > xmax ) go to 40
+  y = abs(x)
+  if (y>1.0) go to 30
+!
+!  erfc(x) = 1.0E+00 - erf(x) for -1. <= x <= 1.
+!
+  if ( y < sqeps ) then
+    erfc = 1.0E+00 - 2.0*x/sqrtpi
+  else if (y>=sqeps) then
+    erfc = 1.0E+00 - x*(1.0E+00 + csevl (2.*x*x-1., erfcs, nterf) )
+  end if
+
+  return
+!
+! erfc(x) = 1.0E+00 - erf(x) for 1. < abs(x) <= xmax
+!
+30 continue
+
+  y = y*y
+
+  if (y<=4.) then
+    erfc = exp(-y)/abs(x) * (0.5 + csevl ((8./y-5.)/3.,erc2cs, nterc2) )
+  else
+    erfc = exp(-y)/abs(x) * (0.5 + csevl (8./y-1.,erfccs, nterfc) )
+  end if
+
+  if ( x < 0.0E+00 ) erfc = 2.0E+00 - erfc
+
+  return
+
+40  continue
+
+  call xerror ( 'erfc    x so big erfc underflows', 32, 1, 1)
+  erfc = 0.0E+00
+
+  return
+end
+subroutine ezfftb ( n, r, azero, a, b, wsave )
+!
+!*******************************************************************************
+!
+!! EZFFTB computes a real periodic sequence from its Fourier coefficients.
+!
+!
+!  Discussion:
+!
+!    This process is sometimes called Fourier synthesis.
+!
+!    EZFFTB is a simplified but slower version of RFFTB.
+!
+!    The transform is defined by:
+!
+!      R(I) = AZERO + sum ( 1 <= K <= N/2 )
+!
+!          A(K) * cos ( K * ( I - 1 ) * 2 * PI / N )
+!        + B(K) * sin ( K * ( I - 1 ) * 2 * PI / N )
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the output array.  The
+!    method is more efficient when N is the product of small primes.
+!
+!    Output, real R(N), the reconstructed data sequence.
+!
+!    Input, real AZERO, the constant Fourier coefficient.
+!
+!    Input, real A(N/2), B(N/2), the Fourier coefficients.
+!
+!    Input, real WSAVE(3*N+15), a work array.  The WSAVE array must be
+!    initialized by calling EZFFFTI.  A different WSAVE array must be used
+!    for each different value of N.
+!
+  integer n
+!
+  real a(n/2)
+  real azero
+  real b(n/2)
+  integer i
+  integer ns2
+  real r(n)
+  real wsave(3*n+15)
+!
+  if ( n < 2 ) then
+
+    r(1) = azero
+
+  else if ( n == 2 ) then
+
+    r(1) = azero + a(1)
+    r(2) = azero - a(1)
+
+  else
+
+    ns2 = ( n - 1 ) / 2
+
+    do i = 1, ns2
+      r(2*i) = 0.5E+00 * a(i)
+      r(2*i+1) = -0.5E+00 * b(i)
+    end do
+
+    r(1) = azero
+
+    if ( mod ( n, 2 ) == 0 ) then
+      r(n) = a(ns2+1)
+    end if
+
+    call rfftb ( n, r, wsave(n+1) )
+
+  end if
+
+  return
+end
+subroutine ezfftf ( n, r, azero, a, b, wsave )
+!
+!*******************************************************************************
+!
+!! EZFFTF computes the Fourier coefficients of a real periodic sequence.
+!
+!
+!  Discussion:
+!
+!    This process is sometimes called Fourier analysis.
+!
+!    EZFFTF is a simplified but slower version of RFFTF.
+!
+!    The transform is defined by:
+!
+!      AZERO = sum ( 1 <= I <= N ) R(I) / N,
+!
+!    and, for K = 1 to (N-1)/2,
+!
+!      A(K) = sum ( 1 <= I <= N )
+!        ( 2 / N ) * R(I) * cos ( K * ( I - 1 ) * 2 * PI / N )
+!
+!    and, if N is even, then
+!
+!      A(N/2) = sum ( 1 <= I <= N ) (-1) **(I-1) * R(I) / N
+!
+!    For K = 1 to (N-1)/2,
+!
+!      B(K) = sum ( 1 <= I <= N )
+!        ( 2 / N ) * R(I) * sin ( K * ( I - 1 ) * 2 * PI / N )
+!
+!    and, if N is even, then
+!
+!      B(N/2) = 0.
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array to be transformed.  The
+!    method is more efficient when N is the product of small primes.
+!
+!    Input, real R(N), the sequence to be transformed.
+!
+!    Input, real WSAVE(3*N+15), a work array.  The WSAVE array must be
+!    initialized by calling EZFFTI.  A different WSAVE array must be used
+!    for each different value of N.
+!
+!    Output, real AZERO, the constant Fourier coefficient.
+!
+!    Output, real A(N/2), B(N/2), the Fourier coefficients.
+!
+  integer n
+!
+  real a(n/2)
+  real azero
+  real b(n/2)
+  real cf
+  integer i
+  integer ns2
+  real r(n)
+  real wsave(3*n+15)
+!
+  if ( n < 2 ) then
+
+    azero = r(1)
+
+  else if ( n == 2 ) then
+
+    azero = 0.5E+00 * ( r(1) + r(2) )
+    a(1) = 0.5E+00 * ( r(1) - r(2) )
+
+  else
+
+    wsave(1:n) = r(1:n)
+
+    call rfftf ( n, wsave(1), wsave(n+1) )
+
+    cf = 2.0E+00 / real ( n )
+    azero = 0.5E+00 * cf * wsave(1)
+    ns2 = ( n + 1 ) / 2
+
+    do i = 1, ns2-1
+      a(i) = cf * wsave(2*i)
+      b(i) = -cf * wsave(2*i+1)
+    end do
+
+    if ( mod ( n, 2 ) /= 1 ) then
+      a(ns2) = 0.5E+00 * cf * wsave(n)
+      b(ns2) = 0.0E+00
+    end if
+
+  end if
+
+  return
+end
+subroutine ezffti ( n, wsave )
+!
+!*******************************************************************************
+!
+!! EZFFTI initializes WSAVE, used in EZFFTF and EZFFTB.
+!
+!
+!  Discussion:
+!
+!    The prime factorization of N together with a tabulation of the
+!    trigonometric functions are computed and stored in WSAVE.
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array to be transformed.  The
+!    method is more efficient when N is the product of small primes.
+!
+!    Output, real WSAVE(3*N+15), contains data, dependent on the value
+!    of N, which is necessary for the EZFFTF or EZFFTB routines.
+!
+  integer n
+!
+  real wsave(3*n+15)
+!
+  if ( n <= 1 ) then
+    return
+  end if
+
+  call ezffti1 ( n, wsave(2*n+1), wsave(3*n+1) )
+
+  return
+end
+subroutine ezffti1 ( n, wa, ifac )
+!
+!*******************************************************************************
+!
+!! EZFFTI1 is a lower level routine used by EZFFTI.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array to be transformed.
+!
+!    Output, real WA(N).
+!
+!    Input, integer IFAC(15).
+!    IFAC(1) = N, the number that was factored.
+!    IFAC(2) = NF, the number of factors.
+!    IFAC(3:2+NF), the factors.
+!
+  integer n
+!
+  real arg1
+  real argh
+  real ch1
+  real ch1h
+  real dch1
+  real dsh1
+  integer i
+  integer ib
+  integer ido
+  integer ifac(15)
+  integer ii
+  integer ip
+  integer is
+  integer j
+  integer k1
+  integer l1
+  integer l2
+  integer nf
+  real pimach
+  real sh1
+  real wa(n)
+!
+  call i_factor ( n, ifac )
+
+  nf = ifac(2)
+
+  argh = 2.0E+00 * pimach() / real ( n )
+  is = 0
+  l1 = 1
+
+  do k1 = 1, nf-1
+
+    ip = ifac(k1+2)
+    l2 = l1 * ip
+    ido = n / l2
+    arg1 = real ( l1 ) * argh
+    ch1 = 1.0E+00
+    sh1 = 0.0E+00
+    dch1 = cos ( arg1 )
+    dsh1 = sin ( arg1 )
+
+    do j = 1, ip-1
+
+      ch1h = dch1 * ch1 - dsh1 * sh1
+      sh1  = dch1 * sh1 + dsh1 * ch1
+      ch1 = ch1h
+      i = is + 2
+      wa(i-1) = ch1
+      wa(i) = sh1
+
+      do ii = 5, ido, 2
+        i = i + 2
+        wa(i-1) = ch1 * wa(i-3) - sh1 * wa(i-2)
+        wa(i)   = ch1 * wa(i-2) + sh1 * wa(i-3)
+      end do
+
+      is = is + ido
+
+    end do
+
+    l1 = l2
+
+  end do
+
+  return
+end
+subroutine fdjac1 ( fcn, n, x, fvec, fjac, ldfjac, iflag, ml, mu, epsfcn )
+!
+!*******************************************************************************
+!
+!! FDJAC1 computes a forward-difference approximation to a jacobian matrix.
+!
+!
+!  Discussion:
+!
+!    The n by n jacobian matrix is associated with a specified
+!    problem of n functions in n variables. if the jacobian has
+!    a banded form, then function evaluations are saved by only
+!    approximating the nonzero terms.
+!
+!  Modified:
+!
+!    25 August 2000
+!
+!  Parameters:
+!
+!       fcn is the name of the user-supplied subroutine which
+!         calculates the functions. fcn must be declared
+!         in an external statement in the user calling
+!         program, and should be written as follows.
+!
+!         subroutine fcn(n,x,fvec,iflag)
+!         integer n,iflag
+!         real x(n),fvec(n)
+!
+!         calculate the functions at x and
+!         return this vector in fvec.
+!
+!         return
+!         end
+!
+!         the value of iflag should not be changed by fcn unless
+!         the user wants to terminate execution of FDJAC1.
+!         in this case set iflag to a negative integer.
+!
+!       n is a positive integer input variable set to the number
+!         of functions and variables.
+!
+!       x is an input array of length n.
+!
+!       fvec is an input array of length n which must contain the
+!       functions evaluated at x.
+!
+!       fjac is an output n by n array which contains the
+!         approximation to the jacobian matrix evaluated at x.
+!
+!       ldfjac is a positive integer input variable not less than n
+!         which specifies the leading dimension of the array fjac.
+!
+!       iflag is an integer variable which can be used to terminate
+!         the execution of FJDAC1. see description of fcn.
+!
+!       ml is a nonnegative integer input variable which specifies
+!         the number of subdiagonals within the band of the
+!         jacobian matrix. if the jacobian is not banded, set
+!         ml to at least n - 1.
+!
+!       epsfcn is an input variable used in determining a suitable
+!         step length for the forward-difference approximation. this
+!         approximation assumes that the relative errors in the
+!       functions are of the order of epsfcn. if epsfcn is less
+!         than the machine precision, it is assumed that the relative
+!         errors in the functions are of the order of the machine
+!         precision.
+!
+!       mu is a nonnegative integer input variable which specifies
+!         the number of superdiagonals within the band of the
+!         jacobian matrix. if the jacobian is not banded, set
+!         mu to at least n - 1.
+!
+  integer ldfjac
+  integer n
+!
+  real eps
+  real epsfcn
+  real epsmch
+  real fjac(ldfjac,n)
+  real fvec(n)
+  real h
+  integer i
+  integer iflag
+  integer j
+  integer k
+  integer ml
+  integer msum
+  integer mu
+  real r1mach
+  real temp
+  real wa1(n)
+  real wa2(n)
+  real x(n)
+!
+  external fcn
+!
+  epsmch = epsilon ( 1.0E+00 )
+!
+  eps = sqrt( max (epsfcn,epsmch))
+  msum = ml + mu + 1
+  if (msum < n) go to 40
+!
+!  computation of dense approximate jacobian.
+!
+     do j = 1, n
+
+       temp = x(j)
+       h = eps*abs(temp)
+       if (h == 0.0) h = eps
+       x(j) = temp + h
+       call fcn(n,x,wa1,iflag)
+       if (iflag < 0) go to 30
+       x(j) = temp
+       fjac(1:n,j) = (wa1(1:n) - fvec(1:n))/h
+
+    end do
+
+   30    continue
+
+     go to 110
+
+   40 continue
+!
+!  Computation of banded approximate jacobian.
+!
+     do k = 1, msum
+
+        do j = k, n, msum
+           wa2(j) = x(j)
+           h = eps*abs(wa2(j))
+           if (h == 0.0) h = eps
+           x(j) = wa2(j) + h
+        end do
+
+        call fcn(n,x,wa1,iflag)
+        if (iflag < 0) go to 100
+
+        do j = k, n, msum
+
+           x(j) = wa2(j)
+           h = eps*abs(wa2(j))
+           if (h == 0.0) h = eps
+
+           do i = 1, n
+              fjac(i,j) = 0.0E+00
+              if (i >= j - mu .and. i <= j + ml) then
+                fjac(i,j) = (wa1(i) - fvec(i))/h
+              end if
+           end do
+
+        end do
+
+      end do
+
+  100    continue
+  110 continue
+
+  return
+end
+function fmin ( ax, bx, f, tol )
+!
+!*******************************************************************************
+!
+!! FMIN seeks a minimizer of a scalar function of a scalar variable.
+!
+!
+!  Discussion:
+!
+!    FMIN seeks an approximation to the point where F attains a minimum on
+!    the interval (ax,bx).
+!
+!     the method used is a combination of golden section search and
+!     successive parabolic interpolation.  convergence is never much
+!     slower than that for a fibonacci search.  if f has a continuous
+!     second derivative which is positive at the minimum (which is not
+!     at ax or bx), then convergence is superlinear, and usually of the
+!     order of about 1.324....
+!
+!     the function f is never evaluated at two points closer together
+!     than eps*abs(fmin) + (tol/3), where eps is approximately the
+!     square root of the relative machine precision.  if f is a unimodal
+!     function and the computed values of f are always unimodal when
+!     separated by at least eps*abs(xstar) + (tol/3), then fmin
+!     approximates the abcissa of the global minimum of f on the
+!     interval ax,bx with an error less than 3*eps*abs(fmin) + tol.
+!     if f is not unimodal, then fmin may approximate a local, but
+!     perhaps non-global, minimum to the same accuracy.
+!
+!     this function subprogram is a slightly modified version of the
+!     algol 60 procedure localmin given in richard brent, algorithms for
+!     minimization without derivatives, prentice-hall, inc. (1973).
+!
+!  Reference:
+!
+!    Richard Brent,
+!    Algorithms for Minimization without Derivatives,
+!    Prentice Hall, 1973.
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+! input parameters
+!
+!  ax    (real)  left endpoint of initial interval
+!  bx    (real) right endpoint of initial interval
+!  f     real function of the form real function f(x) which evaluates
+!          f(x)  for any  x in the interval  (ax,bx)
+!        must be declared external in calling routine.
+!  tol   (real) desired length of the interval of uncertainty of the
+!        final result ( >= 0.0)
+!
+!
+! output parameters
+!
+! fmin   abcissa approximating the minimizer of f.
+!
+! ax     lower bound for minimizer.
+!
+! bx     upper bound for minimizer
+!
+  real a
+  real ax
+  real b
+  real bx
+  real c
+  real d
+  real e
+  real eps
+  real f
+  real fmin
+  real fu
+  real fv
+  real fw
+  real fx
+  real p
+  real q
+  real r
+  real tol
+  real tol1
+  real tol2
+  real u
+  real v
+  real w
+  real x
+  real xm
+!
+  external f
+!
+  c = 0.5 * ( 3.0E+00 - sqrt ( 5.0E+00 ) )
+!
+!  C is the squared inverse of the golden ratio.
+!
+!  EPS is the square root of the relative machine precision.
+!
+  eps = sqrt ( epsilon ( eps ) )
+!
+!  initialization
+!
+  a = ax
+  b = bx
+  v = a + c*(b - a)
+  w = v
+  x = v
+  e = 0.0E+00
+  fx = f(x)
+  fv = fx
+  fw = fx
+!
+!  main loop starts here
+!
+   20 continue
+
+  xm = 0.5 * ( a + b )
+  tol1 = eps*abs(x) + tol/3.0E+00
+  tol2 = 2.0*tol1
+!
+!  Check the stopping criterion.
+!
+  if (abs(x - xm) <= (tol2 - 0.5*(b - a))) go to 90
+!
+! is golden-section necessary
+!
+  if (abs(e) <= tol1) go to 40
+!
+!  fit parabola
+!
+  r = (x - w)*(fx - fv)
+  q = (x - v)*(fx - fw)
+  p = (x - v)*q - (x - w)*r
+  q = 2.0*(q - r)
+  if (q > 0.0) p = -p
+  q = abs(q)
+  r = e
+  e = d
+!
+!  is parabola acceptable
+!
+   30 continue
+
+  if (abs(p) >= abs(0.5*q*r)) go to 40
+  if (p <= q*(a - x)) go to 40
+  if (p >= q*(b - x)) go to 40
+!
+!  a parabolic interpolation step
+!
+  d = p/q
+  u = x + d
+!
+!  f must not be evaluated too close to ax or bx
+!
+  if ((u - a) < tol2) d = sign(tol1, xm - x)
+  if ((b - u) < tol2) d = sign(tol1, xm - x)
+  go to 50
+!
+!  a golden-section step
+!
+   40 continue
+
+  if (x >= xm) e = a - x
+  if (x < xm) e = b - x
+  d = c*e
+!
+!  f must not be evaluated too close to x
+!
+   50 if (abs(d) >= tol1) u = x + d
+  if (abs(d) < tol1) u = x + sign(tol1, d)
+  fu = f(u)
+!
+!  update  a, b, v, w, and x
+!
+  if (fu > fx) go to 60
+
+  if (u >= x) a = x
+  if (u < x) b = x
+  v = w
+  fv = fw
+  w = x
+  fw = fx
+  x = u
+  fx = fu
+  go to 20
+
+60 continue
+
+  if (u < x) a = u
+  if (u >= x) b = u
+  if (fu <= fw) go to 70
+  if (w == x) go to 70
+  if (fu <= fv) go to 80
+  if (v == x) go to 80
+  if (v == w) go to 80
+  go to 20
+
+   70 v = w
+  fv = fw
+  w = u
+  fw = fu
+  go to 20
+   80 v = u
+  fv = fu
+  go to 20
+!
+!end of main loop
+!
+   90 fmin = x
+  return
+end
+subroutine forslv ( nr, n, a, x, b )
+!
+!*******************************************************************************
+!
+!! FORSLV solves A*x=b where A is lower triangular matrix.
+!
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! a(n,n)       --> lower triangular matrix (preserved)
+! x(n)        <--  solution vector
+! b(n)         --> right-hand side vector
+!
+! note
+!
+! if b is no longer required by calling routine,
+! then vectors b and x may share the same storage.
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real b(n)
+  integer i
+  integer j
+  real sum
+  real x(n)
+!
+  x(1) = b(1) / a(1,1)
+
+  do i = 2, n
+    sum = 0.0E+00
+    do j = 1, i-1
+      sum = sum + a(i,j) * x(j)
+    end do
+    x(i) = ( b(i) - sum ) / a(i,i)
+  end do
+
+  return
+end
+subroutine fstocd ( n, x, fcn, sx, rnoise, g )
+!
+!*******************************************************************************
+!
+!! FSTOCD approximates the gradient of a function using central differences.
+!
+!
+! parameters
+!
+! n            --> dimension of problem
+! x            --> point at which gradient is to be approximated.
+! fcn          --> name of subroutine to evaluate function.
+! sx           --> diagonal scaling matrix for x.
+! rnoise       --> relative noise in fcn [f(x)].
+! g           <--  central difference approximation to gradient.
+!
+!
+  integer n
+!
+  real fminus
+  real fplus
+  real g(n)
+  integer i
+  real rnoise
+  real stepi
+  real sx(n)
+  real third
+  real x(n)
+  real xtempi
+!
+  external fcn
+!
+! find i th  stepsize, evaluate two neighbors in direction of i th
+! unit vector, and evaluate i th  component of gradient.
+!
+  third = 1.0 /3.0E+00
+
+  do i = 1, n
+     stepi = rnoise**third * max(abs(x(i)), 1.0 /sx(i))
+     xtempi = x(i)
+     x(i) = xtempi + stepi
+     call fcn (n, x, fplus)
+     x(i) = xtempi - stepi
+     call fcn (n, x, fminus)
+     x(i) = xtempi
+     g(i) = (fplus - fminus)/(2.0 *stepi)
+  end do
+
+  return
+end
+subroutine fstofd ( nr, m, n, xpls, fcn, fpls, a, sx, rnoise, fhat, icase )
+!
+!*******************************************************************************
+!
+!! FSTOFD finds first order forward finite difference approximation "a" to the
+! first derivative of the function defined by the subprogram "fname"
+! evaluated at the new iterate "xpls".
+!
+!
+! for optimization use this routine to estimate:
+! 1) the first derivative (gradient) of the optimization function "fcn
+!    analytic user routine has been supplied;
+! 2) the second derivative (hessian) of the optimization function
+!    if no analytic user routine has been supplied for the hessian but
+!    one has been supplied for the gradient ("fcn") and if the
+!    optimization function is inexpensive to evaluate
+!
+! note
+!
+! _m=1 (optimization) algorithm estimates the gradient of the function
+!      (fcn).   fcn(x) # f: r(n)-->r(1)
+! _m=n (systems) algorithm estimates the jacobian of the function
+!      fcn(x) # f: r(n)-->r(n).
+! _m=n (optimization) algorithm estimates the hessian of the optimizatio
+!    function, where the hessian is the first derivative of "fcn"
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! m            --> number of rows in a
+! n            --> number of columns in a; dimension of problem
+! xpls(n)      --> new iterate:  x[k]
+! fcn          --> name of subroutine to evaluate function
+! fpls(m)      --> _m=1 (optimization) function value at new iterate:
+!                       fcn(xpls)
+!                  _m=n (optimization) value of first derivative
+!                       (gradient) given by user function fcn
+!                  _m=n (systems)function value of associated
+!                       minimization function
+! a(nr,n)     <--  finite difference approximation (see note).  only
+!                  lower triangular matrix and diagonal are returned
+! sx(n)        --> diagonal scaling matrix for x
+! rnoise       --> relative noise in fcn [f(x)]
+! fhat(m)      --> workspace
+! icase        --> =1 optimization (gradient)
+!                  =2 systems
+!                  =3 optimization (hessian)
+!
+! internal variables
+!
+! stepsz - stepsize in the j-th variable direction
+!
+  integer m
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real fhat(m)
+  real fpls(m)
+  integer i
+  integer icase
+  integer j
+  real rnoise
+  real stepsz
+  real sx(n)
+  real xpls(n)
+  real xtmpj
+!
+  external fcn
+!
+! find j-th column of a
+! each column is derivative of f(fcn) with respect to xpls(j)
+!
+  do j=1,n
+    stepsz=sqrt(rnoise)*max(abs(xpls(j)),1./sx(j))
+    xtmpj=xpls(j)
+    xpls(j)=xtmpj+stepsz
+    call fcn(n,xpls,fhat)
+    xpls(j)=xtmpj
+    do i=1,m
+      a(i,j)=(fhat(i)-fpls(i))/stepsz
+    end do
+  end do
+
+  if ( icase/=3) then
+    return
+  end if
+!
+! if computing hessian, a must be symmetric
+!
+  do j=1,n-1
+    do i=j+1,m
+      a(i,j)=(a(i,j)+a(j,i))/2.0E+00
+    end do
+  end do
+
+  return
+end
+subroutine fzero ( f, b, c, r, re, ae, iflag )
+!
+!*******************************************************************************
+!
+!! FZERO searches for a zero of a function F(X) in a given interval.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    L. f. shampine and h. a. watts,
+!    fzero, a root-solving code*,
+!    sc-tm-70-631, september 1970.
+!
+!    t. j. dekker,
+!    finding a zero by means of successive linear interpolation*,
+!    'constructive aspects of the fundamental theorem of algebra',
+!    edited by b. dejon, p. henrici, 1969.
+!
+!  Discussion:
+!
+!    fzero searches for a zero of a function f(x) between
+!    the given values b and c until the width of the interval
+!    (b,c) has collapsed to within a tolerance specified by
+!    the stopping criterion, abs(b-c) <= 2.*(rw*abs(b)+ae).
+!    the method used is an efficient combination of bisection
+!    and the secant rule.
+!
+!  Parameters:
+!
+!     f,b,c,r,re and ae are input parameters
+!     b,c and iflag are output parameters (flagged by an * below)
+!
+!        f     - name of the real valued external function.  this name
+!                must be in an external statement in the calling
+!                program.  f must be a function of one real argument.
+!
+!       *b     - one end of the interval (b,c).  the value returned for
+!                b usually is the better approximation to a zero of f.
+!
+!       *c     - the other end of the interval (b,c)
+!
+!        r     - a (better) guess of a zero of f which could help in
+!                speeding up convergence.  if f(b) and f(r) have
+!                opposite signs, a root will be found in the interval
+!                (b,r); if not, but f(r) and f(c) have opposite
+!                signs, a root will be found in the interval (r,c);
+!                otherwise, the interval (b,c) will be searched for a
+!                possible root.  when no better guess is known, it is
+!                recommended that r be set to b or c; because if r is
+!                not interior to the interval (b,c), it will be ignored.
+!
+!        re    - relative error used for rw in the stopping criterion.
+!                if the requested re is less than machine precision,
+!                then rw is set to approximately machine precision.
+!
+!        ae    - absolute error used in the stopping criterion.  if the
+!                given interval (b,c) contains the origin, then a
+!                nonzero value should be chosen for ae.
+!
+!       *iflag - a status code.  user must check iflag after each call.
+!                control returns to the user from fzero in all cases.
+!
+!                1  b is within the requested tolerance of a zero.
+!                   the interval (b,c) collapsed to the requested
+!                   tolerance, the function changes sign in (b,c), and
+!                   f(x) decreased in magnitude as (b,c) collapsed.
+!
+!                2  f(b) = 0.  however, the interval (b,c) may not have
+!                   collapsed to the requested tolerance.
+!
+!                3  b may be near a singular point of f(x).
+!                   the interval (b,c) collapsed to the requested tol-
+!                   erance and the function changes sign in (b,c), but
+!                   f(x) increased in magnitude as (b,c) collapsed,i.e.
+!                     abs(f(b out)) > max(abs(f(b in)),abs(f(c in)))
+!
+!                4  no change in sign of f(x) was found although the
+!                   interval (b,c) collapsed to the requested tolerance.
+!                   the user must examine this case and decide whether
+!                   b is near a local minimum of f(x), or b is near a
+!                   zero of even multiplicity, or neither of these.
+!
+!                5  too many (> 500) function evaluations used.
+!
+  real a
+  real acbs
+  real acmb
+  real ae
+  real aw
+  real b
+  real c
+  real cmb
+  real er
+  real f
+  real fa
+  real fb
+  real fc
+  real fx
+  real fz
+  integer ic
+  integer iflag
+  integer kount
+  real p
+  real q
+  real r
+  real re
+  real rw
+  real t
+  real tol
+  real z
+!
+  external f
+!
+  er = 2.0E+00 * epsilon ( er )
+!
+!     initialize
+!
+  z=r
+  if ( r<= min (b,c).or.r>= max (b,c)) z=c
+  rw= max (re,er)
+  aw= max (ae,0.0)
+  ic=0
+  t=z
+  fz=f(t)
+  fc=fz
+  t=b
+  fb=f(t)
+  kount=2
+  if ( sign(1.0,fz)==sign(1.0,fb)) go to 1
+  c=z
+  go to 2
+    1 if ( z==c) go to 2
+  t=c
+  fc=f(t)
+  kount=3
+  if ( sign(1.0,fz)==sign(1.0,fc)) go to 2
+  b=z
+  fb=fz
+    2 a=c
+  fa=fc
+  acbs=abs(b-c)
+  fx= max (abs(fb),abs(fc))
+!
+    3 if (abs(fc) >= abs(fb)) go to 4
+!     perform interchange
+  a=b
+  fa=fb
+  b=c
+  fb=fc
+  c=a
+  fc=fa
+
+4 continue
+
+  cmb=0.5*(c-b)
+  acmb=abs(cmb)
+  tol=rw*abs(b)+aw
+!
+!  test stopping criterion and function count
+!
+  if (acmb <= tol) go to 10
+  if ( fb==0.) go to 11
+  if ( kount>=500) go to 14
+!
+!  calculate new iterate implicitly as b+p/q
+!     where we arrange p >= 0.
+!     the implicit form is used to prevent overflow.
+!
+  p=(b-a)*fb
+  q=fa-fb
+  if (p >= 0.) go to 5
+  p=-p
+  q=-q
+!
+!  update a and check for satisfactory reduction
+!  in the size of the bracketing interval.
+!  if not, perform bisection.
+!
+    5 a=b
+  fa=fb
+  ic=ic+1
+  if (ic < 4) go to 6
+  if (8.*acmb >= acbs) go to 8
+  ic=0
+  acbs=acmb
+!
+!  test for too small a change
+!
+    6 if (p > abs(q)*tol) go to 7
+!
+!  increment by tolerance
+!
+  b=b+sign(tol,cmb)
+  go to 9
+!
+!  root ought to be between b and (c+b)/2.
+!
+    7 if (p >= cmb*q) go to 8
+!
+!  use secant rule
+!
+  b=b+p/q
+  go to 9
+!
+!  use bisection
+!
+    8 b=b+cmb
+!
+!  have completed computation for new iterate b
+!
+    9 t=b
+  fb=f(t)
+  kount=kount+1
+!
+!     decide whether next step is interpolation or extrapolation
+!
+  if (sign(1.0,fb) /= sign(1.0,fc)) go to 3
+  c=a
+  fc=fa
+  go to 3
+!
+!
+!     finished. process results for proper setting of iflag
+!
+   10 if (sign(1.0E+00,fb) == sign(1.0E+00,fc)) go to 13
+  if (abs(fb) > fx) go to 12
+  iflag = 1
+  return
+   11 iflag = 2
+  return
+   12 iflag = 3
+  return
+   13 iflag = 4
+  return
+   14 iflag = 5
+  return
+end
+subroutine gamlim ( xmin, xmax )
+!
+!*******************************************************************************
+!
+!! GAMLIM computes the minimum and maximum bounds for X in GAMMA(X).
+!
+!
+!  Discussion:
+!
+!    GAMLIM calculates the minimum and maximum legal bounds for X in GAMMA(X).
+!
+!  Parameters:
+!
+!    Output, real XMIN, the minimum legal value of X in GAMMA(X).
+!    Any smaller value might result in underflow.
+!
+!    Output, real XMAX, the maximum legal value of X in GAMMA(X).
+!    Any larger value will cause overflow.
+!
+  real alnbig
+  real alnsml
+  integer i
+  real r1mach
+  real xln
+  real xmax
+  real xmin
+  real xold
+!
+  alnsml = log ( tiny ( alnsml ) )
+  xmin = -alnsml
+
+  do i=1,10
+    xold = xmin
+    xln = log(xmin)
+    xmin = xmin - xmin*((xmin+0.5)*xln - xmin - 0.2258 + alnsml) &
+      / (xmin*xln + 0.5)
+    if (abs(xmin-xold)<0.005) go to 20
+  end do
+
+  write ( *, * ) ' '
+  write ( *, * ) 'GAMLIM - Fatal error!'
+  write ( *, * ) '  Unable to determine XMIN.'
+  stop
+
+ 20   continue
+
+  xmin = -xmin + 0.01
+
+  alnbig = log ( huge ( alnbig ) )
+  xmax = alnbig
+
+  do i=1,10
+    xold = xmax
+    xln = log(xmax)
+    xmax = xmax - xmax*((xmax-0.5)*xln - xmax + 0.9189 - alnbig) &
+      / (xmax*xln - 0.5)
+    if (abs(xmax-xold)<0.005) go to 40
+  end do
+
+  write ( *, * ) ' '
+  write ( *, * ) 'GAMLIM - Fatal error!'
+  write ( *, * ) '  Unable to determine XMAX.'
+  stop
+
+ 40 continue
+
+  xmax = xmax - 0.01E+00
+  xmin = max (xmin, -xmax+1.0E+00 )
+
+  return
+end
+function gamma ( x )
+!
+!*******************************************************************************
+!
+!! GAMMA computes the gamma function.
+!
+!
+!  Parameters:
+!
+!    Input, real X, the argument of the gamma function, which must not
+!    be 0, -1, or any other negative integral value.
+!
+!    Output, real GAMMA, the value of the gamma function of X.
+!
+  real csevl
+  real dxrel
+  real gamma
+  real gcs(23)
+  integer i
+  integer inits
+  integer n
+  integer ngcs
+  real, parameter :: pi = 3.14159265358979323846264338327950288419716939937510
+  real r1mach
+  real r9lgmc
+  real sinpiy
+  real sq2pil
+  real x
+  real xmax
+  real xmin
+  real y
+!
+  data gcs( 1) / .008571195590989331e0/
+  data gcs( 2) / .004415381324841007e0/
+  data gcs( 3) / .05685043681599363e0/
+  data gcs( 4) /-.004219835396418561e0/
+  data gcs( 5) / .001326808181212460e0/
+  data gcs( 6) /-.0001893024529798880e0/
+  data gcs( 7) / .0000360692532744124e0/
+  data gcs( 8) /-.0000060567619044608e0/
+  data gcs( 9) / .0000010558295463022e0/
+  data gcs(10) /-.0000001811967365542e0/
+  data gcs(11) / .0000000311772496471e0/
+  data gcs(12) /-.0000000053542196390e0/
+  data gcs(13) / .0000000009193275519e0/
+  data gcs(14) /-.0000000001577941280e0/
+  data gcs(15) / .0000000000270798062e0/
+  data gcs(16) /-.0000000000046468186e0/
+  data gcs(17) / .0000000000007973350e0/
+  data gcs(18) /-.0000000000001368078e0/
+  data gcs(19) / .0000000000000234731e0/
+  data gcs(20) /-.0000000000000040274e0/
+  data gcs(21) / .0000000000000006910e0/
+  data gcs(22) /-.0000000000000001185e0/
+  data gcs(23) / .0000000000000000203e0/
+!
+! sq2pil is log (sqrt (2.*pi) )
+!
+  data sq2pil / 0.91893853320467274e0/
+  data ngcs, xmin, xmax, dxrel /0, 3*0.0E+00 /
+
+!
+! initialize.  find legal bounds for x, and determine the number of
+! terms in the series required to attain an accuracy ten times better
+! than machine precision.
+!
+  if ( ngcs == 0 ) then
+    ngcs = inits (gcs, 23, 0.1*r1mach(3))
+    call gamlim (xmin, xmax)
+    dxrel = sqrt ( epsilon ( dxrel ) )
+  end if
+
+  y = abs(x)
+  if (y>10.0) go to 50
+!
+! compute gamma(x) for abs(x) <= 10.0.  reduce interval and
+! find gamma(1+y) for 0. <= y < 1. first of all.
+!
+  n = x
+  if (x<0.0) n = n - 1
+  y = x - real(n)
+  n = n - 1
+  gamma = 0.9375 + csevl(2.*y-1., gcs, ngcs)
+  if (n==0) return
+
+  if (n>0) go to 30
+!
+! compute gamma(x) for x < 1.
+!
+  n = -n
+  if (x==0.) call xerror ( 'gamma   x is 0', 14, 4, 2)
+
+  if (x<0. .and. x+real(n-2)==0.) then
+     call xerror (  'gamma   x is a negative integer', 31, 4, 2)
+  end if
+
+  if (x<(-0.5) .and. abs((x-aint(x-0.5))/x)<dxrel) then
+    call xerror ( &
+      'gamma   answer lt half precision because x too near negative integer', &
+      68, 1, 1)
+  end if
+
+  do i=1,n
+    gamma = gamma / (x+real(i-1))
+  end do
+
+  return
+!
+! gamma(x) for x >= 2.
+!
+ 30 continue
+
+  do i=1,n
+    gamma = (y+real(i))*gamma
+  end do
+
+  return
+!
+! compute gamma(x) for abs(x) > 10.0.  recall y = abs(x).
+!
+ 50   continue
+
+  if (x>xmax) then
+    call xerror ( 'gamma   x so big gamma overflows', 32, 3, 2)
+  end if
+
+  gamma = 0.
+  if (x<xmin) then
+    call xerror ( 'gamma   x so small gamma underflows', 35, 2, 1)
+  end if
+
+  if (x<xmin) return
+
+  gamma = exp((y-0.5)*log(y) - y + sq2pil + r9lgmc(y) )
+  if (x>0.) return
+
+  if (abs((x-aint(x-0.5))/x)<dxrel) then
+    call xerror ( &
+      'gamma   answer lt half precision, x too near negative integer', &
+      61, 1, 1)
+  end if
+
+  sinpiy = sin (pi*y)
+
+  if (sinpiy==0.) then
+    write ( *, * ) ' '
+    write ( *, * ) 'GAMMA - Fatal error!'
+    write ( *, * ) '  The argument X is a negative integer.'
+    stop
+  end if
+
+  gamma = -pi / (y*sinpiy*gamma)
+
+  return
+end
+subroutine gl15t ( f, a, b, xl, xr, r, ae, ra, rasc, fmin, fmax )
+!
+!*******************************************************************************
+!
+!! GL15T computes integral of g(x) over (a,b), with error estimate.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+!            on entry
+!              f      - real
+!                     function subprogram defining the integrand
+!                     function f(x). the actual name for f needs
+!                       to be declared e x t e r n a l in the
+!                       calling program.
+!                       the function g(x) is defined to be
+!                       g(x)=f(phi(x))*phip(x)
+!                       where phi(x) is the cubic given by
+!                       the arithmetic statement function below.
+!                       phip(x) is its derivative.  the variables
+!                       xl and xr are the left and right endpoints
+!                       of a parent interval of which (a,b) is a part.
+!
+!              a      - real
+!                       lower limit of integration
+!
+!              b      - real
+!                       upper limit of integration
+!
+!              xl     - double precision
+!              xr     - double precision
+!                       lower and upper limits of parent interval
+!                       of which [a,b] is a part.
+!
+!            on return
+!              r - real
+!                       approximation to the integral i
+!                       r is computed by applying the 15-point
+!                       kronrod rule (resk) obtained by optimal
+!                       addition of abscissae to the 7-point gauss
+!                       rule (resg).
+!
+!              ae - real
+!                       estimate of the modulus of the absolute error,
+!                       which should not exceed abs(i-r)
+!
+!              ra - real
+!                       approximation to the integral j
+!
+!              rasc - real
+!                       approximation to the integral of abs(g-i/(b-a))
+!                       over (a,b)
+!
+!              fmax, fmin - real
+!                       max and min values of the function f on (a,b)
+!
+  real a
+  double precision absc
+  real ae
+  real b
+  double precision centr
+  real dhlgth
+  real, save :: epmach = 0.0E+00
+  real f
+  real fc
+  real fmax
+  real fmin
+  real fsum
+  real fv1(7)
+  real fv2(7)
+  real fval1
+  real fval2
+  real hlgth
+  integer j
+  integer jtw
+  integer jtwm1
+  real phi
+  real phip
+  real phiu
+  real r
+  real r1mach
+  real ra
+  real rasc
+  real resg
+  real resk
+  real reskh
+  real sl
+  real sr
+  double precision u
+  real, save :: uflow = 0.0E+00
+  real wg(4)
+  real wgk(8)
+  real xgk(8)
+  double precision xl
+  double precision xr
+!
+  external f
+!
+!           the abscissae and weights are given for the interval (-1,1)
+!           because of symmetry only the positive abscissae and their
+!           corresponding weights are given.
+!
+!           xgk    - abscissae of the 15-point kronrod rule
+!                    xgk(2), xgk(4), ...  abscissae of the 7-point
+!                    gauss rule
+!                    xgk(1), xgk(3), ...  abscissae which are optimally
+!                    added to the 7-point gauss rule
+!
+!           wgk    - weights of the 15-point kronrod rule
+!
+!           wg     - weights of the 7-point gauss rule
+!
+  data wg(  1) / 0.129484966168869693270611432679082d0 /
+  data wg(  2) / 0.279705391489276667901467771423780d0 /
+  data wg(  3) / 0.381830050505118944950369775488975d0 /
+  data wg(  4) / 0.417959183673469387755102040816327d0 /
+!
+  data xgk(  1) / 0.991455371120812639206854697526329d0 /
+  data xgk(  2) / 0.949107912342758524526189684047851d0 /
+  data xgk(  3) / 0.864864423359769072789712788640926d0 /
+  data xgk(  4) / 0.741531185599394439863864773280788d0 /
+  data xgk(  5) / 0.586087235467691130294144838258730d0 /
+  data xgk(  6) / 0.405845151377397166906606412076961d0 /
+  data xgk(  7) / 0.207784955007898467600689403773245d0 /
+  data xgk(  8) / 0.000000000000000000000000000000000d0 /
+!
+  data wgk(  1) / 0.022935322010529224963732008058970d0 /
+  data wgk(  2) / 0.063092092629978553290700663189204d0 /
+  data wgk(  3) / 0.104790010322250183839876322541518d0 /
+  data wgk(  4) / 0.140653259715525918745189590510238d0 /
+  data wgk(  5) / 0.169004726639267902826583426598550d0 /
+  data wgk(  6) / 0.190350578064785409913256402421014d0 /
+  data wgk(  7) / 0.204432940075298892414161999234649d0 /
+  data wgk(  8) / 0.209482141084727828012999174891714d0 /
+!
+  phi(u)=xr-(xr-xl)*u*u*(2.*u+3.)
+  phip(u)=-6.*u*(u+1.)
+!
+!           list of major variables
+!
+!           centr  - mid point of the interval
+!           hlgth  - half-length of the interval
+!           absc   - abscissa
+!           fval*  - function value
+!           resg   - r of the 7-point gauss formula
+!           resk   - r of the 15-point kronrod formula
+!           reskh  - approximation to the mean value of f over (a,b),
+!                    i.e. to i/(b-a)
+!
+  if ( epmach == 0.0E+00 ) then
+    epmach = epsilon ( 1.0E+00 )
+    uflow = tiny ( uflow )
+  end if
+!
+  if ( xl<xr ) then
+     sl=sngl(xl)
+     sr=sngl(xr)
+  else
+     sl=sngl(xr)
+     sr=sngl(xl)
+  end if
+
+  hlgth = 0.5 * (b-a)
+  centr = a+hlgth
+  dhlgth = abs(hlgth)
+!
+!           compute the 15-point kronrod approximation to
+!           the integral, and estimate the absolute error.
+!
+  u=(centr-xr)/(xr-xl)
+  phiu=phi(u)
+  if ( phiu<=sl .or. phiu>=sr) phiu=centr
+  fmin=f(phiu)
+  fmax=fmin
+  fc=fmin*phip(u)
+  resg = fc*wg(4)
+  resk = fc*wgk(8)
+  ra = abs(resk)
+
+  do j=1,3
+    jtw = j*2
+    absc = hlgth*xgk(jtw)
+    u=(centr-absc-xr)/(xr-xl)
+    phiu=phi(u)
+    if ( phiu<=sl .or. phiu>=sr) phiu=centr
+    fval1=f(phiu)
+    fmax=max(fmax,fval1)
+    fmin=min(fmin,fval1)
+    fval1=fval1*phip(u)
+    u=(centr+absc-xr)/(xr-xl)
+    phiu=phi(u)
+    if ( phiu<=sl .or. phiu>=sr) phiu=centr
+    fval2=f(phiu)
+    fmax=max(fmax,fval2)
+    fmin=min(fmin,fval2)
+    fval2=fval2*phip(u)
+    fv1(jtw) = fval1
+    fv2(jtw) = fval2
+    fsum = fval1+fval2
+    resg = resg+wg(j)*fsum
+    resk = resk+wgk(jtw)*fsum
+    ra = ra+wgk(jtw)*(abs(fval1)+abs(fval2))
+  end do
+
+  do j = 1,4
+    jtwm1 = j*2-1
+    absc = hlgth*xgk(jtwm1)
+    u=(centr-absc-xr)/(xr-xl)
+    phiu=phi(u)
+    if ( phiu<=sl .or. phiu>=sr) phiu=centr
+    fval1=f(phiu)
+    fmax=max(fmax,fval1)
+    fmin=min(fmin,fval1)
+    fval1=fval1*phip(u)
+    u=(centr+absc-xr)/(xr-xl)
+    phiu=phi(u)
+    if ( phiu<=sl .or. phiu>=sr) phiu=centr
+    fval2=f(phiu)
+    fmax=max(fmax,fval2)
+    fmin=min(fmin,fval2)
+    fval2=fval2*phip(u)
+    fv1(jtwm1) = fval1
+    fv2(jtwm1) = fval2
+    fsum = fval1+fval2
+    resk = resk+wgk(jtwm1)*fsum
+    ra = ra+wgk(jtwm1)*(abs(fval1)+abs(fval2))
+  end do
+
+  reskh = resk*0.5
+  rasc = wgk(8)*abs(fc-reskh)
+
+  do j=1,7
+    rasc = rasc+wgk(j)*(abs(fv1(j)-reskh)+abs(fv2(j)-reskh))
+  end do
+
+  r = resk*hlgth
+  ra = ra*dhlgth
+  rasc = rasc*dhlgth
+  ae = abs((resk-resg)*hlgth)
+
+  if ( rasc/=0.0.and.ae/=0.0) then
+    ae = rasc*min(1.0,(0.2e+03*ae/rasc)**1.5)
+  end if
+
+  if ( ra>uflow/(0.5e+02*epmach)) then
+    ae = max((epmach*0.5e+02)*ra,ae)
+  end if
+
+  return
+end
+subroutine grdchk ( n, x, fcn, f, g, typsiz, sx, fscale, rnf, analtl, &
+  wrk1, msg, ipr )
+!
+!*******************************************************************************
+!
+!! GRDCHK checks an analytic gradient against an estimated gradient.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+! n            --> dimension of problem
+! x(n)         --> estimate to a root of fcn
+! fcn          --> name of subroutine to evaluate optimization function
+!                  must be declared external in calling routine
+!                       fcn:  r(n) --> r(1)
+! f            --> function value:  fcn(x)
+! g(n)         --> gradient:  g(x)
+! typsiz(n)    --> typical size for each component of x
+! sx(n)        --> diagonal scaling matrix:  sx(i)=1./typsiz(i)
+! fscale       --> estimate of scale of objective function fcn
+! rnf          --> relative noise in optimization function fcn
+! analtl       --> tolerance for comparison of estimated and
+!                  analytical gradients
+! wrk1(n)      --> workspace
+! msg         <--  message or error code
+!                    on output: =-21, probable coding error of gradient
+! ipr          --> device to which to send output
+!
+  integer n
+!
+  real analtl
+  real f
+  real fscale
+  real g(n)
+  real gs
+  integer i
+  integer ipr
+  integer ker
+  integer msg
+  real rnf
+  real sx(n)
+  real typsiz(n)
+  real wrk
+  real wrk1(n)
+  real x(n)
+!
+  external fcn
+!
+!  Compute the first order finite difference gradient;
+!  compare it to the analytic gradient.
+!
+  call fstofd(1,1,n,x,fcn,f,wrk1,sx,rnf,wrk,1)
+
+  ker = 0
+
+  do i = 1, n
+
+    gs = max ( abs(f), fscale ) / max ( abs(x(i)), typsiz(i) )
+
+    if ( abs(g(i)-wrk1(i))>max(abs(g(i)),gs)*analtl) then
+      ker=1
+    end if
+
+  end do
+
+  if ( ker /= 0 ) then
+    write ( ipr, * ) ' '
+    write ( ipr, * ) 'GRDCHK - probable error in analytic gradient.'
+    write ( ipr, * ) ' '
+    write ( ipr, * ) ' grdchk     comp            analytic            est'
+    write ( ipr, 902 ) (i,g(i),wrk1(i),i=1,n)
+    msg = -21
+  end if
+
+  return
+
+  902 format(' grdchk    ',i5,3x,e20.13,3x,e20.13)
+end
+subroutine heschk ( nr, n, x, fcn, d1fcn, d2fcn, f, g, a, typsiz, sx, rnf, &
+  analtl, iagflg, udiag, wrk1, wrk2, msg, ipr )
+!
+!*******************************************************************************
+!
+!! HESCHK checks an analytic hessian against a computed estimate.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! x(n)         --> estimate to a root of fcn
+! fcn          --> name of subroutine to evaluate optimization function
+!                  must be declared external in calling routine
+!                       fcn:  r(n) --> r(1)
+! d1fcn        --> name of subroutine to evaluate gradient of fcn.
+!                  must be declared external in calling routine
+! d2fcn        --> name of subroutine to evaluate hessian of fcn.
+!                  must be declared external in calling routine
+! f            --> function value:  fcn(x)
+! g(n)        <--  gradient:  g(x)
+! a(n,n)      <--  on exit:  hessian in lower triangular part and diag
+! typsiz(n)    --> typical size for each component of x
+! sx(n)        --> diagonal scaling matrix:  sx(i)=1./typsiz(i)
+! rnf          --> relative noise in optimization function fcn
+! analtl       --> tolerance for comparison of estimated and
+!                  analytical gradients
+! iagflg       --> =1 if analytic gradient supplied
+! udiag(n)     --> workspace
+! wrk1(n)      --> workspace
+! wrk2(n)      --> workspace
+! msg         <--> message or error code
+!                    on input : if =1xx do not compare anal + est hess
+!                    on output: =-22, probable coding error of hessian
+! ipr          --> device to which to send output
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real analtl
+  real f
+  real g(n)
+  real hs
+  integer i
+  integer iagflg
+  integer ipr
+  integer j
+  integer ker
+  integer msg
+  real rnf
+  real sx(n)
+  real typsiz(n)
+  real udiag(n)
+  real wrk1(n)
+  real wrk2(n)
+  real x(n)
+!
+  external fcn
+  external d1fcn
+  external d2fcn
+!
+!  Compute finite difference approximation a to the hessian.
+!
+  if ( iagflg==1) then
+    call fstofd(nr,n,n,x,d1fcn,g,a,sx,rnf,wrk1,3)
+  else
+    call sndofd(nr,n,x,fcn,f,a,sx,rnf,wrk1,wrk2)
+  end if
+
+  ker=0
+!
+! copy lower triangular part of "a" to upper triangular part
+! and diagonal of "a" to udiag
+!
+  do j=1,n
+    udiag(j)=a(j,j)
+    do i=j+1,n
+      a(j,i)=a(i,j)
+    end do
+  end do
+!
+! compute analytic hessian and compare to finite difference
+! approximation.
+!
+  call d2fcn(nr,n,x,a)
+
+  do j=1,n
+
+    hs=max(abs(g(j)),1.0)/max(abs(x(j)),typsiz(j))
+
+    if ( abs(a(j,j)-udiag(j))>max(abs(udiag(j)),hs)*analtl) then
+      ker=1
+    end if
+
+    do i=j+1,n
+      if ( abs(a(i,j)-a(j,i))>max(abs(a(i,j)),hs)*analtl) then
+        ker=1
+      end if
+    end do
+
+  end do
+
+  if ( ker==0) go to 90
+
+    write(ipr,901)
+    do i=1,n
+      do j=1,i-1
+        write(ipr,902) i,j,a(i,j),a(j,i)
+      end do
+      write(ipr,902) i,i,a(i,i),udiag(i)
+    end do
+
+    msg=-22
+!     end if
+   90 continue
+  return
+  901 format('heschk    probable error in coding of analytic hessian.'/ &
+             'heschk      row  col',14x,'analytic',14x,'(estimate)')
+  902 format('heschk    ',2i5,2x,e20.13,2x,'(',e20.13,')')
+end
+subroutine hookdr ( nr, n, x, f, g, a, udiag, p, xpls, fpls, fcn, sx, stepmx, &
+  steptl, dlt, iretcd, mxtake, amu, dltp, phi, phip0, sc, xplsp, wrk0, epsm, &
+  itncnt, ipr )
+!
+!*******************************************************************************
+!
+!! HOOKDR finds the next Newton iterate by the More-Hebdon method.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+! parameters
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! x(n)         --> old iterate x[k-1]
+! f            --> function value at old iterate, f(x)
+! g(n)         --> gradient at old iterate, g(x), or approximate
+! a(n,n)       --> cholesky decomposition of hessian in lower
+!                  triangular part and diagonal.
+!                  hessian in upper triangular part and udiag.
+! udiag(n)     --> diagonal of hessian in a(.,.)
+! p(n)         --> newton step
+! xpls(n)     <--  new iterate x[k]
+! fpls        <--function value at new iterate, f(xpls)
+! fcn          --> name of subroutine to evaluate function
+! sx(n)        --> diagonal scaling matrix for x
+! stepmx       --> maximum allowable step size
+! steptl       --> relative step size at which successive iterates
+!                  considered close enough to terminate algorithm
+! dlt         <--> trust region radius
+! iretcd      <--  return code
+!                    =0 satisfactory xpls found
+!                    =1 failed to find satisfactory xpls sufficiently
+!                       distinct from x
+! mxtake      <--  boolean flag indicating step of maximum length used
+! amu         <--> [retain value between successive calls]
+! dltp        <--> [retain value between successive calls]
+! phi         <--> [retain value between successive calls]
+! phip0       <--> [retain value between successive calls]
+! sc(n)        --> workspace
+! xplsp(n)     --> workspace
+! wrk0(n)      --> workspace
+! epsm         --> machine epsilon
+! itncnt       --> iteration count
+! ipr          --> device to which to send output
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real alpha
+  real amu
+  real beta
+  real dlt
+  real dltp
+  real epsm
+  real f
+  real fpls
+  real fplsp
+  logical fstime
+  real g(n)
+  integer i
+  integer ipr
+  integer iretcd
+  integer itncnt
+  integer j
+  logical mxtake
+  logical nwtake
+  real p(n)
+  real phi
+  real phip0
+  real rnwtln
+  real sc(n)
+  real stepmx
+  real steptl
+  real sx(n)
+  real tmp
+  real udiag(n)
+  real x(n)
+  real xpls(n)
+  real xplsp(n)
+  real wrk0(n)
+!
+  external fcn
+!
+  iretcd=4
+  fstime=.true.
+
+  tmp=0.
+  do i=1,n
+    tmp=tmp+sx(i)*sx(i)*p(i)*p(i)
+  end do
+
+  rnwtln=sqrt(tmp)
+
+  if ( itncnt>1) go to 100
+    amu=0.
+!
+!  if first iteration and trust region not provided by user,
+!  compute initial trust region.
+!
+    if ( dlt/= (-1.)) go to 100
+
+      alpha=0.
+      do i=1,n
+        alpha=alpha+(g(i)*g(i))/(sx(i)*sx(i))
+      end do
+
+      beta=0.0E+00
+      do i=1,n
+        tmp=0.0E+00
+        do j=i,n
+          tmp=tmp + (a(j,i)*g(j))/(sx(j)*sx(j))
+        end do
+        beta=beta+tmp*tmp
+      end do
+      dlt=alpha*sqrt(alpha)/beta
+      dlt = min(dlt, stepmx)
+!       end if
+!     end if
+!
+  100 continue
+!
+!  Find new step by more-hebdon algorithm.
+!
+  call hookst(nr,n,g,a,udiag,p,sx,rnwtln,dlt,amu,dltp,phi,phip0, &
+    fstime,sc,nwtake,wrk0,epsm,ipr)
+
+  dltp=dlt
+!
+!  check new point and update trust region
+!
+  call tregup(nr,n,x,f,g,a,fcn,sc,sx,nwtake,stepmx,steptl, &
+    dlt,iretcd,xplsp,fplsp,xpls,fpls,mxtake,ipr,3,udiag)
+
+  if ( iretcd > 1 ) then
+    go to 100
+  end if
+
+  return
+end
+subroutine hookst ( nr, n, g, a, udiag, p, sx, rnwtln, dlt, amu, &
+  dltp, phi, phip0, fstime, sc, nwtake, wrk0, epsm, ipr )
+!
+!*******************************************************************************
+!
+!! HOOKST finds the new step by the More-Hebdon algorithm.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+! parameters
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! g(n)         --> gradient at current iterate, g(x)
+! a(n,n)       --> cholesky decomposition of hessian in
+!                  lower triangular part and diagonal.
+!                  hessian or approx in upper triangular part
+! udiag(n)     --> diagonal of hessian in a(.,.)
+! p(n)         --> newton step
+! sx(n)        --> diagonal scaling matrix for n
+! rnwtln       --> newton step length
+! dlt         <--> trust region radius
+! amu         <--> [retain value between successive calls]
+! dltp         --> trust region radius at last exit from this routine
+! phi         <--> [retain value between successive calls]
+! phip0       <--> [retain value between successive calls]
+! fstime      <--> boolean. =.true. if first entry to this routine
+!                  during k-th iteration
+! sc(n)       <--  current step
+! nwtake      <--  boolean, =.true. if newton step taken
+! wrk0         --> workspace
+! epsm         --> machine epsilon
+! ipr          --> device to which to send output
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real addmax
+  real alo
+  real amu
+  real amulo
+  real amuup
+  real dlt
+  real dltp
+  logical done
+  real epsm
+  logical fstime
+  real g(n)
+  real hi
+  integer i
+  integer ipr
+  integer j
+  logical nwtake
+  real p(n)
+  real phi
+  real phip
+  real phip0
+  real rnwtln
+  real sc(n)
+  real snrm2
+  real stepln
+  real sx(n)
+  real udiag(n)
+  real wrk0(n)
+!
+! hi and alo are constants used in this routine.
+! change here if other values are to be substituted.
+!
+  ipr=ipr
+  hi=1.5
+  alo=.75
+  if ( rnwtln>hi*dlt) go to 15
+!     if ( rnwtln<=hi*dlt)
+!     then
+!
+!       take newton step
+!
+    nwtake=.true.
+    do i=1,n
+      sc(i)=p(i)
+    end do
+    dlt=min(dlt,rnwtln)
+    amu=0.0E+00
+    return
+
+!     else
+!
+!       newton step not taken
+!
+   15   continue
+    nwtake=.false.
+    if ( amu<=0.) go to 20
+!       if ( amu>0.)
+!       then
+!!!      amu=amu- (phi+dltp) *((dltp-dlt)+phi)/(dlt*phip)
+      amu=amu- (phi+dltp) *((dltp-dlt)+phi)/(dlt*phip0)
+!       end if
+   20   continue
+    phi=rnwtln-dlt
+    if ( .not.fstime) go to 28
+!       if ( fstime)
+!       then
+      wrk0(1:n) = sx(1:n) * sx(1:n) * p(1:n)
+!
+!  solve l*y = (sx**2)*p
+!
+      call forslv(nr,n,a,wrk0,wrk0)
+
+      phip0=-snrm2(n,wrk0,1)**2/rnwtln
+      fstime=.false.
+
+   28   phip = phip0
+    amulo = -phi/phip
+    amuup = 0.0E+00
+    do i = 1, n
+      amuup = amuup+(g(i)*g(i))/(sx(i)*sx(i))
+    end do
+    amuup = sqrt(amuup)/dlt
+    done=.false.
+!
+!  test value of amu; generate next amu if necessary
+!
+  100   continue
+    if ( done) return
+    if ( amu>=amulo .and. amu<=amuup) go to 110
+!       if ( amu<amulo .or.  amu>amuup)
+!       then
+      amu=max(sqrt(amulo*amuup),amuup*1.0e-3)
+!       end if
+  110   continue
+!
+!  copy (h,udiag) to l
+!  where h <-- h+amu*(sx**2) [do not actually change (h,udiag)]
+!
+    do j=1,n
+
+      a(j,j)=udiag(j) + amu*sx(j)*sx(j)
+      a(j+1:n,j)=a(j,j+1:n)
+
+    end do
+!
+!  factor h=l(l+)
+!
+    call choldc(nr,n,a,0.0,sqrt(epsm),addmax)
+!
+!  solve h*p = l(l+)*sc = -g
+!
+    wrk0(1:n)=-g(1:n)
+
+    call lltslv(nr,n,a,sc,wrk0)
+!
+!  reset h.  note since udiag has not been destroyed we need do
+!  nothing here.  h is in the upper part and in udiag, still intact
+!
+    stepln=0.0E+00
+    do i=1,n
+      stepln=stepln + sx(i)*sx(i)*sc(i)*sc(i)
+    end do
+
+    stepln=sqrt(stepln)
+    phi=stepln-dlt
+
+    do i=1,n
+      wrk0(i)=sx(i)*sx(i)*sc(i)
+    end do
+
+    call forslv(nr,n,a,wrk0,wrk0)
+
+    phip=-snrm2(n,wrk0,1)**2/stepln
+
+    if ( (alo*dlt>stepln .or. stepln>hi*dlt) .and.(amuup-amulo>0.)) then
+      go to 170
+    end if
+
+!       if ( (alo*dlt<=stepln .and. stepln<=hi*dlt) .or.
+!            (amuup-amulo<=0.))
+!       then
+!
+!         sc is acceptable hookstep
+!
+      done=.true.
+      go to 100
+!       else
+!
+!         sc not acceptable hookstep.  select new amu
+!
+  170     continue
+      amulo=max(amulo,amu-(phi/phip))
+      if ( phi<0.) amuup=min(amuup,amu)
+      amu=amu-(stepln*phi)/(dlt*phip)
+      go to 100
+!       end if
+!     end if
+!
+  951 format('0hookst    take newton step')
+  952 format('0hookst    newton step not taken')
+  953 format(' hookst    sc is not acceptable')
+  954 format(' hookst    sc is acceptable')
+  955 format(' hookst    current step (sc)')
+  956 format(' hookst    amu   =',e20.13)
+  957 format(' hookst    amulo =',e20.13)
+  958 format(' hookst    amuup =',e20.13)
+  959 format(' hookst    phi   =',e20.13)
+  960 format(' hookst    phip  =',e20.13)
+  961 format(' hookst    dlt   =',e20.13/' hookst    stepln=',e20.13)
+  962 format('0hookst    find new amu')
+  963 format(' hookst       ',5(e20.13,3x))
+end
+subroutine hsnint ( nr, n, a, sx, method )
+!
+!*******************************************************************************
+!
+!! HSNINT provides initial hessian when using secant updates.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+! parameters
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! a(n,n)      <--  initial hessian (lower triangular matrix)
+! sx(n)        --> diagonal scaling matrix for x
+! method       --> algorithm to use to solve minimization problem
+!                    =1,2 factored secant method used
+!                    =3   unfactored secant method used
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  integer j
+  integer method
+  real sx(n)
+!
+  do j = 1, n
+
+    if ( method == 3 ) then
+      a(j,j)=sx(j)**2
+    else
+      a(j,j)=sx(j)
+    end if
+
+    a(j+1:n,j)=0.0E+00
+
+  end do
+
+  return
+end
+function i1mach ( i )
+!
+!*******************************************************************************
+!
+!! I1MACH returns integer machine constants.
+!
+!
+!  I/O unit numbers.
+!
+!    I1MACH(1) = the standard input unit.
+!    I1MACH(2) = the standard output unit.
+!    I1MACH(3) = the standard punch unit.
+!    I1MACH(4) = the standard error message unit.
+!
+!  Words.
+!
+!    I1MACH(5) = the number of bits per integer storage unit.
+!    I1MACH(6) = the number of characters per integer storage unit.
+!
+!  Integers.
+!
+!  Assume integers are represented in the S digit base A form:
+!
+!  Sign * (X(S-1)*A**(S-1) + ... + X(1)*A + X(0))
+!  where 0<=X(I)<A for I=0 to S-1.
+!
+!    I1MACH(7) = A, the base.
+!    I1MACH(8) = S, the number of base A digits.
+!    I1MACH(9) = A**S-1, the largest integer.
+!
+!  Floating point numbers
+!
+!  Assume floating point numbers are represented in the T digit base B form:
+!
+!    Sign * (B**E) * ((X(1)/B) + ... + (X(T)/B**T) )
+!
+!  where 0<=X(I)<B for I=1 to T, 0<X(1) and EMIN<=E<=EMAX
+!
+!    I1MACH(10) = B, the base.
+!
+!  Single precision
+!
+!    I1MACH(11) = T, the number of base B digits.
+!    I1MACH(12) = EMIN, the smallest exponent E.
+!    I1MACH(13) = EMAX, the largest exponent E.
+!
+!  Double precision
+!
+!    I1MACH(14) = T, the number of base B digits.
+!    I1MACH(15) = EMIN, the smallest exponent E.
+!    I1MACH(16) = EMAX, the largest exponent E.
+!
+!  To alter this function for a particular environment, the desired set of DATA
+!  statements should be activated by removing the C from column 1.  On rare
+!  machines, a STATIC statement may need to be added, but probably more systems
+!  prohibit than require it.
+!
+!  Also, the values of I1MACH(1) through I1MACH(4) should be checked for
+!  consistency with the local operating system.  For FORTRAN 77, you may wish
+!  to adjust the data statement so imach(6) is set to 1, and then to comment
+!  out the executable test on I.EQ.6 below.
+!
+!  For IEEE-arithmetic machines (binary standard), the first set of constants
+!  below should be appropriate, except perhaps for IMACH(1) - IMACH(4).
+!
+  integer i
+  integer i1mach
+  integer imach(16)
+  integer output
+!
+  equivalence (imach(4),output)
+!
+!  IEEE arithmetic machines, such as the ATT 3B series, Motorola
+!  68000 based machines such as the SUN 3 and ATT PC 7300, and
+!  8087 based micros such asthe IBM PC and ATT 6300.
+!
+   data imach( 1) /    5 /
+   data imach( 2) /    6 /
+   data imach( 3) /    7 /
+   data imach( 4) /    6 /
+   data imach( 5) /   32 /
+   data imach( 6) /    4 /
+   data imach( 7) /    2 /
+   data imach( 8) /   31 /
+   data imach( 9) / 2147483647 /
+   data imach(10) /    2 /
+   data imach(11) /   24 /
+   data imach(12) / -125 /
+   data imach(13) /  128 /
+   data imach(14) /   53 /
+   data imach(15) / -1021 /
+   data imach(16) /  1024 /
+!
+!  ALLIANT FX/8 UNIX FORTRAN compiler.
+!
+!      data imach( 1) /     5 /
+!      data imach( 2) /     6 /
+!      data imach( 3) /     6 /
+!      data imach( 4) /     0 /
+!      data imach( 5) /    32 /
+!      data imach( 6) /     4 /
+!      data imach( 7) /     2 /
+!      data imach( 8) /    32 /
+!      data imach( 9) /2147483647/
+!      data imach(10) /     2 /
+!      data imach(11) /    24 /
+!      data imach(12) /  -126 /
+!      data imach(13) /   128 /
+!      data imach(14) /    53 /
+!      data imach(15) / -1022 /
+!      data imach(16) /  1024 /
+!
+!  AMDAHL machines.
+!
+!      data imach( 1) /   5 /
+!      data imach( 2) /   6 /
+!      data imach( 3) /   7 /
+!      data imach( 4) /   6 /
+!      data imach( 5) /  32 /
+!      data imach( 6) /   4 /
+!      data imach( 7) /   2 /
+!      data imach( 8) /  31 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /  16 /
+!      data imach(11) /   6 /
+!      data imach(12) / -64 /
+!      data imach(13) /  63 /
+!      data imach(14) /  14 /
+!      data imach(15) / -64 /
+!      data imach(16) /  63 /
+!
+!  BURROUGHS 1700 system.
+!
+!      data imach( 1) /    7 /
+!      data imach( 2) /    2 /
+!      data imach( 3) /    2 /
+!      data imach( 4) /    2 /
+!      data imach( 5) /   36 /
+!      data imach( 6) /    4 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   33 /
+!      data imach( 9) / Z1FFFFFFFF /
+!      data imach(10) /    2 /
+!      data imach(11) /   24 /
+!      data imach(12) / -256 /
+!      data imach(13) /  255 /
+!      data imach(14) /   60 /
+!      data imach(15) / -256 /
+!      data imach(16) /  255 /
+!
+!  BURROUGHS 5700 system.
+!
+!      data imach( 1) /   5 /
+!      data imach( 2) /   6 /
+!      data imach( 3) /   7 /
+!      data imach( 4) /   6 /
+!      data imach( 5) /  48 /
+!      data imach( 6) /   6 /
+!      data imach( 7) /   2 /
+!      data imach( 8) /  39 /
+!      data imach( 9) / O0007777777777777 /
+!      data imach(10) /   8 /
+!      data imach(11) /  13 /
+!      data imach(12) / -50 /
+!      data imach(13) /  76 /
+!      data imach(14) /  26 /
+!      data imach(15) / -50 /
+!      data imach(16) /  76 /
+!
+!  BURROUGHS 6700/7700 systems.
+!
+!      data imach( 1) /   5 /
+!      data imach( 2) /   6 /
+!      data imach( 3) /   7 /
+!      data imach( 4) /   6 /
+!      data imach( 5) /  48 /
+!      data imach( 6) /   6 /
+!      data imach( 7) /   2 /
+!      data imach( 8) /  39 /
+!      data imach( 9) / O0007777777777777 /
+!      data imach(10) /   8 /
+!      data imach(11) /  13 /
+!      data imach(12) / -50 /
+!      data imach(13) /  76 /
+!      data imach(14) /  26 /
+!      data imach(15) / -32754 /
+!      data imach(16) /  32780 /
+!
+!  CDC CYBER 170/180 series using NOS
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    7 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   60 /
+!      data imach( 6) /   10 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   48 /
+!      data imach( 9) / O"00007777777777777777" /
+!      data imach(10) /    2 /
+!      data imach(11) /   48 /
+!      data imach(12) / -974 /
+!      data imach(13) / 1070 /
+!      data imach(14) /   96 /
+!      data imach(15) / -927 /
+!      data imach(16) / 1070 /
+!
+!  CDC CYBER 170/180 series using NOS/VE
+!
+!      data imach( 1) /     5 /
+!      data imach( 2) /     6 /
+!      data imach( 3) /     7 /
+!      data imach( 4) /     6 /
+!      data imach( 5) /    64 /
+!      data imach( 6) /     8 /
+!      data imach( 7) /     2 /
+!      data imach( 8) /    63 /
+!      data imach( 9) / 9223372036854775807 /
+!      data imach(10) /     2 /
+!      data imach(11) /    47 /
+!      data imach(12) / -4095 /
+!      data imach(13) /  4094 /
+!      data imach(14) /    94 /
+!      data imach(15) / -4095 /
+!      data imach(16) /  4094 /
+!
+!  CDC CYBER 200 series
+!
+!      data imach( 1) /      5 /
+!      data imach( 2) /      6 /
+!      data imach( 3) /      7 /
+!      data imach( 4) /      6 /
+!      data imach( 5) /     64 /
+!      data imach( 6) /      8 /
+!      data imach( 7) /      2 /
+!      data imach( 8) /     47 /
+!      data imach( 9) / X'00007FFFFFFFFFFF' /
+!      data imach(10) /      2 /
+!      data imach(11) /     47 /
+!      data imach(12) / -28625 /
+!      data imach(13) /  28718 /
+!      data imach(14) /     94 /
+!      data imach(15) / -28625 /
+!      data imach(16) /  28718 /
+!
+!  CDC 6000/7000 series using FTN4.
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    7 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   60 /
+!      data imach( 6) /   10 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   48 /
+!      data imach( 9) / 00007777777777777777B /
+!      data imach(10) /    2 /
+!      data imach(11) /   47 /
+!      data imach(12) / -929 /
+!      data imach(13) / 1070 /
+!      data imach(14) /   94 /
+!      data imach(15) / -929 /
+!      data imach(16) / 1069 /
+!
+!  CDC 6000/7000 series using FTN5.
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    7 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   60 /
+!      data imach( 6) /   10 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   48 /
+!      data imach( 9) / O"00007777777777777777" /
+!      data imach(10) /    2 /
+!      data imach(11) /   47 /
+!      data imach(12) / -929 /
+!      data imach(13) / 1070 /
+!      data imach(14) /   94 /
+!      data imach(15) / -929 /
+!      data imach(16) / 1069 /
+!
+!  CONVEX C-1.
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    7 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   32 /
+!      data imach( 6) /    4 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   31 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /    2 /
+!      data imach(11) /   24 /
+!      data imach(12) / -128 /
+!      data imach(13) /  127 /
+!      data imach(14) /   53 /
+!      data imach(15) /-1024 /
+!      data imach(16) / 1023 /
+!
+!  CONVEX C-120 (native mode) without -R8 option
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    0 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   32 /
+!      data imach( 6) /    4 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   31 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /    2 /
+!      data imach(11) /   24 /
+!      data imach(12) / -127 /
+!      data imach(13) /  127 /
+!      data imach(14) /   53 /
+!      data imach(15) / -1023 /
+!      data imach(16) /  1023 /
+!
+!  CONVEX C-120 (native mode) with -R8 option
+!
+!      data imach( 1) /     5 /
+!      data imach( 2) /     6 /
+!      data imach( 3) /     0 /
+!      data imach( 4) /     6 /
+!      data imach( 5) /    32 /
+!      data imach( 6) /     4 /
+!      data imach( 7) /     2 /
+!      data imach( 8) /    31 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /     2 /
+!      data imach(11) /    53 /
+!      data imach(12) / -1023 /
+!      data imach(13) /  1023 /
+!      data imach(14) /    53 /
+!      data imach(15) / -1023 /
+!      data imach(16) /  1023 /
+!
+!  CONVEX C-120 (IEEE mode) without -R8 option
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    0 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   32 /
+!      data imach( 6) /    4 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   31 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /    2 /
+!      data imach(11) /   24 /
+!      data imach(12) / -125 /
+!      data imach(13) /  128 /
+!      data imach(14) /   53 /
+!      data imach(15) / -1021 /
+!      data imach(16) /  1024 /
+!
+!  CONVEX C-120 (IEEE mode) with -R8 option
+!
+!      data imach( 1) /     5 /
+!      data imach( 2) /     6 /
+!      data imach( 3) /     0 /
+!      data imach( 4) /     6 /
+!      data imach( 5) /    32 /
+!      data imach( 6) /     4 /
+!      data imach( 7) /     2 /
+!      data imach( 8) /    31 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /     2 /
+!      data imach(11) /    53 /
+!      data imach(12) / -1021 /
+!      data imach(13) /  1024 /
+!      data imach(14) /    53 /
+!      data imach(15) / -1021 /
+!      data imach(16) /  1024 /
+!
+!  CRAY 1, 2, XMP and YMP.
+!
+!      data imach( 1) /     5 /
+!      data imach( 2) /     6 /
+!      data imach( 3) /   102 /
+!      data imach( 4) /     6 /
+!      data imach( 5) /    64 /
+!      data imach( 6) /     8 /
+!      data imach( 7) /     2 /
+!      data imach( 8) /    63 /
+!      data imach( 9) /  777777777777777777777B /
+!      data imach(10) /     2 /
+!      data imach(11) /    47 /
+!      data imach(12) / -8189 /
+!      data imach(13) /  8190 /
+!      data imach(14) /    94 /
+!      data imach(15) / -8099 /
+!      data imach(16) /  8190 /
+!
+!  DATA GENERAL ECLIPSE S/200.
+!
+!      data imach( 1) /   11 /
+!      data imach( 2) /   12 /
+!      data imach( 3) /    8 /
+!      data imach( 4) /   10 /
+!      data imach( 5) /   16 /
+!      data imach( 6) /    2 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   15 /
+!      data imach( 9) /32767 /
+!      data imach(10) /   16 /
+!      data imach(11) /    6 /
+!      data imach(12) /  -64 /
+!      data imach(13) /   63 /
+!      data imach(14) /   14 /
+!      data imach(15) /  -64 /
+!      data imach(16) /   63 /
+!
+!  ELXSI 6400
+!
+!      data imach( 1) /     5 /
+!      data imach( 2) /     6 /
+!      data imach( 3) /     6 /
+!      data imach( 4) /     6 /
+!      data imach( 5) /    32 /
+!      data imach( 6) /     4 /
+!      data imach( 7) /     2 /
+!      data imach( 8) /    32 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /     2 /
+!      data imach(11) /    24 /
+!      data imach(12) /  -126 /
+!      data imach(13) /   127 /
+!      data imach(14) /    53 /
+!      data imach(15) / -1022 /
+!      data imach(16) /  1023 /
+!
+!  HARRIS 220
+!
+!      data imach( 1) /       5 /
+!      data imach( 2) /       6 /
+!      data imach( 3) /       0 /
+!      data imach( 4) /       6 /
+!      data imach( 5) /      24 /
+!      data imach( 6) /       3 /
+!      data imach( 7) /       2 /
+!      data imach( 8) /      23 /
+!      data imach( 9) / 8388607 /
+!      data imach(10) /       2 /
+!      data imach(11) /      23 /
+!      data imach(12) /    -127 /
+!      data imach(13) /     127 /
+!      data imach(14) /      38 /
+!      data imach(15) /    -127 /
+!      data imach(16) /     127 /
+!
+!  HARRIS SLASH 6 and SLASH 7.
+!
+!      data imach( 1) /       5 /
+!      data imach( 2) /       6 /
+!      data imach( 3) /       0 /
+!      data imach( 4) /       6 /
+!      data imach( 5) /      24 /
+!      data imach( 6) /       3 /
+!      data imach( 7) /       2 /
+!      data imach( 8) /      23 /
+!      data imach( 9) / 8388607 /
+!      data imach(10) /       2 /
+!      data imach(11) /      23 /
+!      data imach(12) /    -127 /
+!      data imach(13) /     127 /
+!      data imach(14) /      38 /
+!      data imach(15) /    -127 /
+!      data imach(16) /     127 /
+!
+!  HONEYWELL DPS 8/70 and 600/6000 series.
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /   43 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   36 /
+!      data imach( 6) /    4 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   35 /
+!      data imach( 9) / O377777777777 /
+!      data imach(10) /    2 /
+!      data imach(11) /   27 /
+!      data imach(12) / -127 /
+!      data imach(13) /  127 /
+!      data imach(14) /   63 /
+!      data imach(15) / -127 /
+!      data imach(16) /  127 /
+!
+!  HP 2100, 3 word double precision option with FTN4
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    4 /
+!      data imach( 4) /    1 /
+!      data imach( 5) /   16 /
+!      data imach( 6) /    2 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   15 /
+!      data imach( 9) / 32767 /
+!      data imach(10) /    2 /
+!      data imach(11) /   23 /
+!      data imach(12) / -128 /
+!      data imach(13) /  127 /
+!      data imach(14) /   39 /
+!      data imach(15) / -128 /
+!      data imach(16) /  127 /
+!
+!  HP 2100, 4 word double precision option with FTN4
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    4 /
+!      data imach( 4) /    1 /
+!      data imach( 5) /   16 /
+!      data imach( 6) /    2 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   15 /
+!      data imach( 9) / 32767 /
+!      data imach(10) /    2 /
+!      data imach(11) /   23 /
+!      data imach(12) / -128 /
+!      data imach(13) /  127 /
+!      data imach(14) /   55 /
+!      data imach(15) / -128 /
+!      data imach(16) /  127 /
+!
+!  HP 9000
+!
+!      data imach( 1) /     5 /
+!      data imach( 2) /     6 /
+!      data imach( 3) /     6 /
+!      data imach( 4) /     7 /
+!      data imach( 5) /    32 /
+!      data imach( 6) /     4 /
+!      data imach( 7) /     2 /
+!      data imach( 8) /    32 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /     2 /
+!      data imach(11) /    24 /
+!      data imach(12) /  -126 /
+!      data imach(13) /   127 /
+!      data imach(14) /    53 /
+!      data imach(15) / -1015 /
+!      data imach(16) /  1017 /
+!
+!  IBM 360/370 series, XEROX SIGMA 5/7/9, SEL systems 85/86, PERKIN ELMER 3230,
+!  and PERKIN ELMER (INTERDATA) 3230.
+!
+!      data imach( 1) /   5 /
+!      data imach( 2) /   6 /
+!      data imach( 3) /   7 /
+!      data imach( 4) /   6 /
+!      data imach( 5) /  32 /
+!      data imach( 6) /   4 /
+!      data imach( 7) /   2 /
+!      data imach( 8) /  31 /
+!      data imach( 9) / Z7FFFFFFF /
+!      data imach(10) /  16 /
+!      data imach(11) /   6 /
+!      data imach(12) / -64 /
+!      data imach(13) /  63 /
+!      data imach(14) /  14 /
+!      data imach(15) / -64 /
+!      data imach(16) /  63 /
+!
+!  IBM PC - Microsoft FORTRAN
+!
+!      data imach( 1) /     5 /
+!      data imach( 2) /     6 /
+!      data imach( 3) /     6 /
+!      data imach( 4) /     0 /
+!      data imach( 5) /    32 /
+!      data imach( 6) /     4 /
+!      data imach( 7) /     2 /
+!      data imach( 8) /    31 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /     2 /
+!      data imach(11) /    24 /
+!      data imach(12) /  -126 /
+!      data imach(13) /   127 /
+!      data imach(14) /    53 /
+!      data imach(15) / -1022 /
+!      data imach(16) /  1023 /
+!
+!  IBM PC - Professional FORTRAN and Lahey FORTRAN
+!
+!      data imach( 1) /     4 /
+!      data imach( 2) /     7 /
+!      data imach( 3) /     7 /
+!      data imach( 4) /     0 /
+!      data imach( 5) /    32 /
+!      data imach( 6) /     4 /
+!      data imach( 7) /     2 /
+!      data imach( 8) /    31 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /     2 /
+!      data imach(11) /    24 /
+!      data imach(12) /  -126 /
+!      data imach(13) /   127 /
+!      data imach(14) /    53 /
+!      data imach(15) / -1022 /
+!      data imach(16) /  1023 /
+!
+!  INTERDATA 8/32 with the UNIX system FORTRAN 77 compiler.
+!  For the INTERDATA FORTRAN VII compiler, replace the Z's specifying hex
+!  constants with Y's.
+!
+!      data imach( 1) /   5 /
+!      data imach( 2) /   6 /
+!      data imach( 3) /   6 /
+!      data imach( 4) /   6 /
+!      data imach( 5) /  32 /
+!      data imach( 6) /   4 /
+!      data imach( 7) /   2 /
+!      data imach( 8) /  31 /
+!      data imach( 9) / Z'7FFFFFFF' /
+!      data imach(10) /  16 /
+!      data imach(11) /   6 /
+!      data imach(12) / -64 /
+!      data imach(13) /  62 /
+!      data imach(14) /  14 /
+!      data imach(15) / -64 /
+!      data imach(16) /  62 /
+!
+!  PDP-10 (KA processor).
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    7 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   36 /
+!      data imach( 6) /    5 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   35 /
+!      data imach( 9) / "377777777777 /
+!      data imach(10) /    2 /
+!      data imach(11) /   27 /
+!      data imach(12) / -128 /
+!      data imach(13) /  127 /
+!      data imach(14) /   54 /
+!      data imach(15) / -101 /
+!      data imach(16) /  127 /
+!
+!  PDP-10 (KI processor).
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    7 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   36 /
+!      data imach( 6) /    5 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   35 /
+!      data imach( 9) / "377777777777 /
+!      data imach(10) /    2 /
+!      data imach(11) /   27 /
+!      data imach(12) / -128 /
+!      data imach(13) /  127 /
+!      data imach(14) /   62 /
+!      data imach(15) / -128 /
+!      data imach(16) /  127 /
+!
+!  PDP-11 FORTRANS supporting 32-bit integer arithmetic.
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    7 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   32 /
+!      data imach( 6) /    4 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   31 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /    2 /
+!      data imach(11) /   24 /
+!      data imach(12) / -127 /
+!      data imach(13) /  127 /
+!      data imach(14) /   56 /
+!      data imach(15) / -127 /
+!      data imach(16) /  127 /
+!
+!  PDP-11 FORTRANS supporting 16-bit integer arithmetic.
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    7 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   16 /
+!      data imach( 6) /    2 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   15 /
+!      data imach( 9) / 32767 /
+!      data imach(10) /    2 /
+!      data imach(11) /   24 /
+!      data imach(12) / -127 /
+!      data imach(13) /  127 /
+!      data imach(14) /   56 /
+!      data imach(15) / -127 /
+!      data imach(16) /  127 /
+!
+!  PRIME 50 series systems with 32-bit integers and 64V MODE instructions,
+!  supplied by Igor Bray.
+!
+!      data imach( 1) /            1 /
+!      data imach( 2) /            1 /
+!      data imach( 3) /            2 /
+!      data imach( 4) /            1 /
+!      data imach( 5) /           32 /
+!      data imach( 6) /            4 /
+!      data imach( 7) /            2 /
+!      data imach( 8) /           31 /
+!      data imach( 9) / :17777777777 /
+!      data imach(10) /            2 /
+!      data imach(11) /           23 /
+!      data imach(12) /         -127 /
+!      data imach(13) /         +127 /
+!      data imach(14) /           47 /
+!      data imach(15) /       -32895 /
+!      data imach(16) /       +32637 /
+!
+!  SEQUENT BALANCE 8000.
+!
+!      data imach( 1) /     0 /
+!      data imach( 2) /     0 /
+!      data imach( 3) /     7 /
+!      data imach( 4) /     0 /
+!      data imach( 5) /    32 /
+!      data imach( 6) /     1 /
+!      data imach( 7) /     2 /
+!      data imach( 8) /    31 /
+!      data imach( 9) /  2147483647 /
+!      data imach(10) /     2 /
+!      data imach(11) /    24 /
+!      data imach(12) /  -125 /
+!      data imach(13) /   128 /
+!      data imach(14) /    53 /
+!      data imach(15) / -1021 /
+!      data imach(16) /  1024 /
+!
+!  SUN Microsystems UNIX F77 compiler.
+!
+!      data imach( 1) /     5 /
+!      data imach( 2) /     6 /
+!      data imach( 3) /     6 /
+!      data imach( 4) /     0 /
+!      data imach( 5) /    32 /
+!      data imach( 6) /     4 /
+!      data imach( 7) /     2 /
+!      data imach( 8) /    32 /
+!      data imach( 9) /2147483647/
+!      data imach(10) /     2 /
+!      data imach(11) /    24 /
+!      data imach(12) /  -126 /
+!      data imach(13) /   128 /
+!      data imach(14) /    53 /
+!      data imach(15) / -1022 /
+!      data imach(16) /  1024 /
+!
+!  SUN 3 (68881 or FPA)
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    6 /
+!      data imach( 4) /    0 /
+!      data imach( 5) /   32 /
+!      data imach( 6) /    4 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   31 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /    2 /
+!      data imach(11) /   24 /
+!      data imach(12) / -125 /
+!      data imach(13) /  128 /
+!      data imach(14) /   53 /
+!      data imach(15) / -1021 /
+!      data imach(16) /  1024 /
+!
+!  UNIVAC 1100 series.
+!  Note that the punch unit, I1MACH(3), has been set to 7, which is appropriate
+!  for the UNIVAC-FOR system.  If you have the UNIVAC-FTN system, set it to 1
+!  instead.
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    7 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   36 /
+!      data imach( 6) /    6 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   35 /
+!      data imach( 9) / O377777777777 /
+!      data imach(10) /    2 /
+!      data imach(11) /   27 /
+!      data imach(12) / -128 /
+!      data imach(13) /  127 /
+!      data imach(14) /   60 /
+!      data imach(15) /-1024 /
+!      data imach(16) / 1023 /
+!
+!  VAX.
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    7 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   32 /
+!      data imach( 6) /    4 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   31 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /    2 /
+!      data imach(11) /   24 /
+!      data imach(12) / -127 /
+!      data imach(13) /  127 /
+!      data imach(14) /   56 /
+!      data imach(15) / -127 /
+!      data imach(16) /  127 /
+!
+!  Z80 microprocessor.
+!
+!      data imach( 1) /    1 /
+!      data imach( 2) /    1 /
+!      data imach( 3) /    0 /
+!      data imach( 4) /    1 /
+!      data imach( 5) /   16 /
+!      data imach( 6) /    2 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   15 /
+!      data imach( 9) / 32767 /
+!      data imach(10) /    2 /
+!      data imach(11) /   24 /
+!      data imach(12) / -127 /
+!      data imach(13) /  127 /
+!      data imach(14) /   56 /
+!      data imach(15) / -127 /
+!      data imach(16) /  127 /
+!
+  if ( i < 1 .or. i > 16 )then
+    write ( *, * ) ' '
+    write(*,*)'I1MACH - Fatal error!'
+    write(*,*)'I is out of bounds:',i
+    i1mach=0
+    stop
+  else
+    i1mach=imach(i)
+  end if
+
+  return
+end
+subroutine i_factor ( n, ifac )
+!
+!*******************************************************************************
+!
+!! I_FACTOR factors an integer.
+!
+!
+!  Modified:
+!
+!    14 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+!    Input, integer N, the number to be factored.
+!
+!    Output, integer IFAC(15).
+!    IFAC(1) = N, the number that was factored.
+!    IFAC(2) = NF, the number of factors.
+!    IFAC(3:2+NF), the factors.
+!
+  integer i
+  integer ib
+  integer ifac(15)
+  integer j
+  integer n
+  integer nf
+  integer nl
+  integer nq
+  integer nr
+  integer ntry
+!
+  ifac(1) = n
+
+  nf = 0
+  nl = n
+
+  if ( n == 0 ) then
+    nf = 1
+    ifac(2) = nf
+    ifac(2+nf) = 0
+    return
+  end if
+
+  if ( n < 1 ) then
+    nf = nf + 1
+    ifac(2+nf) = -1
+    nl = - n
+  end if
+
+  if ( nl == 1 ) then
+    nf = nf + 1
+    ifac(2) = nf
+    ifac(2+nf) = 1
+    return
+  end if
+
+  j = 0
+
+  do while ( nl > 1 )
+
+    j = j + 1
+!
+!  Choose a trial divisor, NTRY.
+!
+    if ( j == 1 ) then
+      ntry = 4
+    else if ( j == 2 ) then
+      ntry = 2
+    else if ( j == 3 ) then
+      ntry = 3
+    else if ( j == 4 ) then
+      ntry = 5
+    else
+      ntry = ntry + 2
+    end if
+!
+!  Divide by the divisor as many times as possible.
+!
+    do
+
+      nq = nl / ntry
+      nr = nl - ntry * nq
+
+      if ( nr /= 0 ) then
+        exit
+      end if
+
+      nl = nq
+      nf = nf + 1
+!
+!  Make sure factors of 2 appear in the front of the list.
+!
+      if ( ntry /= 2 ) then
+
+        ifac(2+nf) = ntry
+
+      else
+
+        do i = nf, 2, -1
+          ifac(i+2) = ifac(i+1)
+        end do
+        ifac(3) = 2
+
+      end if
+
+    end do
+
+  end do
+
+  ifac(2) = nf
+
+  return
+end
+function inits ( os, nos, eta )
+!
+!*******************************************************************************
+!
+!! INITS estimates the order of an orthogonal series guaranteeing a given accuracy.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Ordinarily, ETA will be chosen to be one-tenth machine precision.
+!
+!             input arguments --
+! os     array of nos coefficients in an orthogonal series.
+! nos    number of coefficients in os.
+! eta    requested accuracy of series.
+!
+  integer nos
+
+  integer ii,i
+  integer inits
+  real os,err,eta
+  dimension os(nos)
+!
+  if (nos<1) then
+    call xerror ( 'inits   number of coefficients lt 1', 35, 2, 2)
+  end if
+
+  err = 0.
+  do ii=1,nos
+    i = nos + 1 - ii
+    err = err + abs(os(i))
+    if (err>eta) go to 20
+  end do
+
+ 20   if (i==nos) call xerror ( 'inits   eta may be too small', 28, 1, 2)
+  inits = i
+
+  return
+end
+function isamax ( n, x, incx )
+!
+!*******************************************************************************
+!
+!! ISAMAX finds the index of the vector element of maximum absolute value.
+!
+!
+!  Modified:
+!
+!    08 April 1999
+!
+!  Reference:
+!
+!    Lawson, Hanson, Kincaid, Krogh,
+!    Basic Linear Algebra Subprograms for Fortran Usage,
+!    Algorithm 539,
+!    ACM Transactions on Mathematical Software,
+!    Volume 5, Number 3, September 1979, pages 308-323.
+!
+!  Parameters:
+!
+!    Input, integer N, the number of entries in the vector.
+!
+!    Input, real X(*), the vector to be examined.
+!
+!    Input, integer INCX, the increment between successive entries of SX.
+!
+!    Output, integer ISAMAX, the index of the element of SX of maximum
+!    absolute value.
+!
+  integer i
+  integer incx
+  integer isamax
+  integer ix
+  integer n
+  real samax
+  real x(*)
+!
+  if ( n <= 0 ) then
+
+    isamax = 0
+
+  else if ( n == 1 ) then
+
+    isamax = 1
+
+  else if ( incx == 1 ) then
+
+    isamax = 1
+    samax = abs ( x(1) )
+
+    do i = 2, n
+
+      if ( abs ( x(i) ) > samax ) then
+        isamax = i
+        samax = abs ( x(i) )
+      end if
+
+    end do
+
+  else
+
+    if ( incx >= 0 ) then
+      ix = 1
+    else
+      ix = ( - n + 1 ) * incx + 1
+    end if
+
+    isamax = 1
+    samax = abs ( x(ix) )
+
+    ix = ix + incx
+
+    do i = 2, n
+      if ( abs ( x(ix) ) > samax ) then
+        isamax = i
+        samax = abs ( x(ix) )
+      end if
+      ix = ix + incx
+    end do
+
+  end if
+
+  return
+end
+function j4save ( iwhich, ivalue, iset )
+!
+!*******************************************************************************
+!
+!! J4SAVE saves variables needed by the library error handling routines.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters
+!      --input--
+!        iwhich - index of item desired.
+!                = 1 refers to current error number.
+!                = 2 refers to current error control flag.
+!                 = 3 refers to current unit number to which error
+!                    messages are to be sent.  (0 means use standard.)
+!                 = 4 refers to the maximum number of times any
+!                     message is to be printed (as set by xermax).
+!                 = 5 refers to the total number of units to which
+!                     each error message is to be written.
+!                 = 6 refers to the 2nd unit for error messages
+!                 = 7 refers to the 3rd unit for error messages
+!                 = 8 refers to the 4th unit for error messages
+!                 = 9 refers to the 5th unit for error messages
+!        ivalue - the value to be set for the iwhich-th parameter,
+!                 if iset is .true. .
+!        iset   - if iset=.true., the iwhich-th parameter will be
+!                 given the value, ivalue.  if iset=.false., the
+!                 iwhich-th parameter will be unchanged, and ivalue
+!                 is a dummy parameter.
+!      --output--
+!        the (old) value of the iwhich-th parameter will be returned
+!        in the function value, j4save.
+!
+!     written by ron jones, with slatec common math library subcommittee
+!    adapted from bell laboratories port library error handler
+!     latest revision: 23 may 1979
+!
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer, save, dimension ( 9 ) :: iparam = (/ 0, 2, 0, 10, 1, 0, 0, 0, 0 /)
+  logical iset
+  integer ivalue
+  integer iwhich
+  integer j4save
+!
+  j4save = iparam(iwhich)
+  if (iset) then
+    iparam(iwhich) = ivalue
+  end if
+
+  return
+end
+function inbin ( x, nbins, xmin, xmax, width )
+!
+!*******************************************************************************
+!
+!! INBIN takes a real value X and finds the correct bin for it.
+!
+!
+!  Discussion:
+!
+!    Values below XMIN come back in 1.  Values above XMAX come back
+!    in NBINS.
+!
+!  Parameters:
+!
+!    Input, real X, a value to be binned.
+!
+!    Input, integer NBINS, the number of bins.
+!
+!    Input, real XMIN, XMAX, the minimum and maximum bin limits.
+!
+!    Input, real WIDTH, the width of each bin.
+!
+!    Output, integer INBIN, the index of the bin containing X.
+!
+  integer inbin
+  integer nbins
+  real width
+  real x
+  real xmax
+  real xmin
+!
+  if ( x < xmin ) then
+    inbin = 1
+  else if ( x >= xmax ) then
+    inbin = nbins
+  else
+    inbin = 2 + int ( ( x - xmin ) / width )
+  end if
+
+  return
+end
+subroutine jairy ( x, rx, c, ai, dai )
+!
+!*******************************************************************************
+!
+!! JAIRY computes the Airy function and its derivative.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!                                   input
+!
+!         x - argument, computed by asyjy, x unrestricted
+!        rx - rx=sqrt(abs(x)), computed by asyjy
+!         c - c=2.*(abs(x)**1.5)/3., computed by asyjy
+!
+!                                  output
+!
+!        ai - value of function ai(x)
+!       dai - value of the derivative dai(x)
+!
+!                                written by
+!
+!                                d. e. amos
+!                               s. l. daniel
+!                               m. k. weston
+!
+  real a
+  real ai
+  real ajn
+  real ajp, ak1, ak2, ak3
+  real b(15)
+  real c, ccv, con2, con3
+  real con4, con5, cv
+  real da
+  real dai, dajn, dajp, dak1, dak2, dak3, db, ec
+  real e1, e2, fpi12, f1, f2
+  integer i
+  integer j
+  integer m1
+  integer m1d
+  integer m2
+  integer m2d
+  integer m3
+  integer m3d
+  integer m4
+  integer m4d
+  integer n1
+  integer n1d
+  integer n2
+  integer n2d, n3, n3d, n4, n4d
+  real rtrx, rx, scv, t, temp1, temp2, tt
+  real x
+  dimension ajp(19), ajn(19), a(15)
+  dimension ak1(14), ak2(23), ak3(14)
+  dimension dajp(19), dajn(19), da(15), db(15)
+  dimension dak1(14), dak2(24), dak3(14)
+
+  data n1,n2,n3,n4/14,23,19,15/
+  data m1,m2,m3,m4/12,21,17,13/
+  data fpi12,con2,con3,con4,con5/ &
+    1.30899693899575, 5.03154716196777, &
+    3.80004589867293e-01, 8.33333333333333e-01, 8.66025403784439e-01/
+
+  data ak1(1), ak1(2), ak1(3), ak1(4), ak1(5), ak1(6), ak1(7), &
+          ak1(8), ak1(9), ak1(10),ak1(11),ak1(12),ak1(13), &
+          ak1(14)         / 2.20423090987793e-01,-1.25290242787700e-01, &
+      1.03881163359194e-02, 8.22844152006343e-04,-2.34614345891226e-04, &
+      1.63824280172116e-05, 3.06902589573189e-07,-1.29621999359332e-07, &
+      8.22908158823668e-09, 1.53963968623298e-11,-3.39165465615682e-11, &
+      2.03253257423626e-12,-1.10679546097884e-14,-5.16169497785080e-15/
+
+  data ak2(1), ak2(2), ak2(3), ak2(4), ak2(5), ak2(6), ak2(7), &
+          ak2(8), ak2(9), ak2(10),ak2(11),ak2(12),ak2(13),ak2(14), &
+          ak2(15),ak2(16),ak2(17),ak2(18),ak2(19),ak2(20),ak2(21), &
+          ak2(22),ak2(23) / 2.74366150869598e-01, 5.39790969736903e-03, &
+     -1.57339220621190e-03, 4.27427528248750e-04,-1.12124917399925e-04, &
+      2.88763171318904e-05,-7.36804225370554e-06, 1.87290209741024e-06, &
+     -4.75892793962291e-07, 1.21130416955909e-07,-3.09245374270614e-08, &
+      7.92454705282654e-09,-2.03902447167914e-09, 5.26863056595742e-10, &
+     -1.36704767639569e-10, 3.56141039013708e-11,-9.31388296548430e-12, &
+      2.44464450473635e-12,-6.43840261990955e-13, 1.70106030559349e-13, &
+     -4.50760104503281e-14, 1.19774799164811e-14,-3.19077040865066e-15/
+
+  data ak3(1), ak3(2), ak3(3), ak3(4), ak3(5), ak3(6), ak3(7), &
+          ak3(8), ak3(9), ak3(10),ak3(11),ak3(12),ak3(13), &
+          ak3(14)         / 2.80271447340791e-01,-1.78127042844379e-03, &
+      4.03422579628999e-05,-1.63249965269003e-06, 9.21181482476768e-08, &
+     -6.52294330229155e-09, 5.47138404576546e-10,-5.24408251800260e-11, &
+      5.60477904117209e-12,-6.56375244639313e-13, 8.31285761966247e-14, &
+     -1.12705134691063e-14, 1.62267976598129e-15,-2.46480324312426e-16/
+
+  data ajp(1), ajp(2), ajp(3), ajp(4), ajp(5), ajp(6), ajp(7), &
+          ajp(8), ajp(9), ajp(10),ajp(11),ajp(12),ajp(13),ajp(14), &
+          ajp(15),ajp(16),ajp(17),ajp(18), &
+          ajp(19)         / 7.78952966437581e-02,-1.84356363456801e-01, &
+      3.01412605216174e-02, 3.05342724277608e-02,-4.95424702513079e-03, &
+     -1.72749552563952e-03, 2.43137637839190e-04, 5.04564777517082e-05, &
+     -6.16316582695208e-06,-9.03986745510768e-07, 9.70243778355884e-08, &
+      1.09639453305205e-08,-1.04716330588766e-09,-9.60359441344646e-11, &
+      8.25358789454134e-12, 6.36123439018768e-13,-4.96629614116015e-14, &
+     -3.29810288929615e-15, 2.35798252031104e-16/
+
+  data ajn(1), ajn(2), ajn(3), ajn(4), ajn(5), ajn(6), ajn(7), &
+          ajn(8), ajn(9), ajn(10),ajn(11),ajn(12),ajn(13),ajn(14), &
+          ajn(15),ajn(16),ajn(17),ajn(18), &
+          ajn(19)         / 3.80497887617242e-02,-2.45319541845546e-01, &
+      1.65820623702696e-01, 7.49330045818789e-02,-2.63476288106641e-02, &
+     -5.92535597304981e-03, 1.44744409589804e-03, 2.18311831322215e-04, &
+     -4.10662077680304e-05,-4.66874994171766e-06, 7.15218807277160e-07, &
+      6.52964770854633e-08,-8.44284027565946e-09,-6.44186158976978e-10, &
+      7.20802286505285e-11, 4.72465431717846e-12,-4.66022632547045e-13, &
+     -2.67762710389189e-14, 2.36161316570019e-15/
+
+  data a(1),   a(2),   a(3),   a(4),   a(5),   a(6),   a(7), &
+          a(8),   a(9),   a(10),  a(11),  a(12),  a(13),  a(14), &
+          a(15)           / 4.90275424742791e-01, 1.57647277946204e-03, &
+     -9.66195963140306e-05, 1.35916080268815e-07, 2.98157342654859e-07, &
+     -1.86824767559979e-08,-1.03685737667141e-09, 3.28660818434328e-10, &
+     -2.57091410632780e-11,-2.32357655300677e-12, 9.57523279048255e-13, &
+     -1.20340828049719e-13,-2.90907716770715e-15, 4.55656454580149e-15, &
+     -9.99003874810259e-16/
+
+  data b(1),   b(2),   b(3),   b(4),   b(5),   b(6),   b(7), &
+          b(8),   b(9),   b(10),  b(11),  b(12),  b(13),  b(14), &
+          b(15)           / 2.78593552803079e-01,-3.52915691882584e-03, &
+     -2.31149677384994e-05, 4.71317842263560e-06,-1.12415907931333e-07, &
+     -2.00100301184339e-08, 2.60948075302193e-09,-3.55098136101216e-11, &
+     -3.50849978423875e-11, 5.83007187954202e-12,-2.04644828753326e-13, &
+     -1.10529179476742e-13, 2.87724778038775e-14,-2.88205111009939e-15, &
+     -3.32656311696166e-16/
+
+  data n1d,n2d,n3d,n4d/14,24,19,15/
+  data m1d,m2d,m3d,m4d/12,22,17,13/
+
+  data dak1(1), dak1(2), dak1(3), dak1(4), dak1(5), dak1(6), &
+          dak1(7), dak1(8), dak1(9), dak1(10),dak1(11),dak1(12), &
+         dak1(13),dak1(14)/ 2.04567842307887e-01,-6.61322739905664e-02, &
+     -8.49845800989287e-03, 3.12183491556289e-03,-2.70016489829432e-04, &
+     -6.35636298679387e-06, 3.02397712409509e-06,-2.18311195330088e-07, &
+     -5.36194289332826e-10, 1.13098035622310e-09,-7.43023834629073e-11, &
+      4.28804170826891e-13, 2.23810925754539e-13,-1.39140135641182e-14/
+
+  data dak2(1), dak2(2), dak2(3), dak2(4), dak2(5), dak2(6), &
+          dak2(7), dak2(8), dak2(9), dak2(10),dak2(11),dak2(12), &
+          dak2(13),dak2(14),dak2(15),dak2(16),dak2(17),dak2(18), &
+          dak2(19),dak2(20),dak2(21),dak2(22),dak2(23), &
+          dak2(24)        / 2.93332343883230e-01,-8.06196784743112e-03, &
+      2.42540172333140e-03,-6.82297548850235e-04, 1.85786427751181e-04, &
+     -4.97457447684059e-05, 1.32090681239497e-05,-3.49528240444943e-06, &
+      9.24362451078835e-07,-2.44732671521867e-07, 6.49307837648910e-08, &
+     -1.72717621501538e-08, 4.60725763604656e-09,-1.23249055291550e-09, &
+      3.30620409488102e-10,-8.89252099772401e-11, 2.39773319878298e-11, &
+     -6.48013921153450e-12, 1.75510132023731e-12,-4.76303829833637e-13, &
+      1.29498241100810e-13,-3.52679622210430e-14, 9.62005151585923e-15, &
+     -2.62786914342292e-15/
+
+  data dak3(1), dak3(2), dak3(3), dak3(4), dak3(5), dak3(6), &
+          dak3(7), dak3(8), dak3(9), dak3(10),dak3(11),dak3(12), &
+         dak3(13),dak3(14)/ 2.84675828811349e-01, 2.53073072619080e-03, &
+     -4.83481130337976e-05, 1.84907283946343e-06,-1.01418491178576e-07, &
+      7.05925634457153e-09,-5.85325291400382e-10, 5.56357688831339e-11, &
+     -5.90889094779500e-12, 6.88574353784436e-13,-8.68588256452194e-14, &
+      1.17374762617213e-14,-1.68523146510923e-15, 2.55374773097056e-16/
+
+  data dajp(1), dajp(2), dajp(3), dajp(4), dajp(5), dajp(6), &
+          dajp(7), dajp(8), dajp(9), dajp(10),dajp(11),dajp(12), &
+          dajp(13),dajp(14),dajp(15),dajp(16),dajp(17),dajp(18), &
+          dajp(19)        / 6.53219131311457e-02,-1.20262933688823e-01, &
+      9.78010236263823e-03, 1.67948429230505e-02,-1.97146140182132e-03, &
+     -8.45560295098867e-04, 9.42889620701976e-05, 2.25827860945475e-05, &
+     -2.29067870915987e-06,-3.76343991136919e-07, 3.45663933559565e-08, &
+      4.29611332003007e-09,-3.58673691214989e-10,-3.57245881361895e-11, &
+      2.72696091066336e-12, 2.26120653095771e-13,-1.58763205238303e-14, &
+     -1.12604374485125e-15, 7.31327529515367e-17/
+
+  data dajn(1), dajn(2), dajn(3), dajn(4), dajn(5), dajn(6), &
+          dajn(7), dajn(8), dajn(9), dajn(10),dajn(11),dajn(12), &
+          dajn(13),dajn(14),dajn(15),dajn(16),dajn(17),dajn(18), &
+          dajn(19)        / 1.08594539632967e-02, 8.53313194857091e-02, &
+     -3.15277068113058e-01,-8.78420725294257e-02, 5.53251906976048e-02, &
+      9.41674060503241e-03,-3.32187026018996e-03,-4.11157343156826e-04, &
+      1.01297326891346e-04, 9.87633682208396e-06,-1.87312969812393e-06, &
+     -1.50798500131468e-07, 2.32687669525394e-08, 1.59599917419225e-09, &
+     -2.07665922668385e-10,-1.24103350500302e-11, 1.39631765331043e-12, &
+      7.39400971155740e-14,-7.32887475627500e-15/
+
+  data da(1),  da(2),  da(3),  da(4),  da(5),  da(6),  da(7), &
+          da(8),  da(9),  da(10), da(11), da(12), da(13), da(14), &
+          da(15)          / 4.91627321104601e-01, 3.11164930427489e-03, &
+      8.23140762854081e-05,-4.61769776172142e-06,-6.13158880534626e-08, &
+      2.87295804656520e-08,-1.81959715372117e-09,-1.44752826642035e-10, &
+      4.53724043420422e-11,-3.99655065847223e-12,-3.24089119830323e-13, &
+      1.62098952568741e-13,-2.40765247974057e-14, 1.69384811284491e-16, &
+      8.17900786477396e-16/
+
+  data db(1),  db(2),  db(3),  db(4),  db(5),  db(6),  db(7), &
+          db(8),  db(9),  db(10), db(11), db(12), db(13), db(14), &
+          db(15)          /-2.77571356944231e-01, 4.44212833419920e-03, &
+     -8.42328522190089e-05,-2.58040318418710e-06, 3.42389720217621e-07, &
+     -6.24286894709776e-09,-2.36377836844577e-09, 3.16991042656673e-10, &
+     -4.40995691658191e-12,-5.18674221093575e-12, 9.64874015137022e-13, &
+     -4.90190576608710e-14,-1.77253430678112e-14, 5.55950610442662e-15, &
+     -7.11793337579530e-16/
+!
+  if (x<0.0) go to 90
+  if (c>5.0) go to 60
+  if (x>1.20) go to 30
+  t = (x+x-1.2)*con4
+  tt = t + t
+  j = n1
+  f1 = ak1(j)
+  f2 = 0.0E+00
+
+  do i=1,m1
+    j = j - 1
+    temp1 = f1
+    f1 = tt*f1 - f2 + ak1(j)
+    f2 = temp1
+  end do
+
+  ai = t*f1 - f2 + ak1(1)
+
+  j = n1d
+  f1 = dak1(j)
+  f2 = 0.0E+00
+  do i=1,m1d
+    j = j - 1
+    temp1 = f1
+    f1 = tt*f1 - f2 + dak1(j)
+    f2 = temp1
+  end do
+
+  dai = -(t*f1-f2+dak1(1))
+
+  return
+!
+   30 continue
+  t = (x+x-con2)*con3
+  tt = t + t
+  j = n2
+  f1 = ak2(j)
+  f2 = 0.0E+00
+
+  do i=1,m2
+    j = j - 1
+    temp1 = f1
+    f1 = tt*f1 - f2 + ak2(j)
+    f2 = temp1
+  end do
+
+  rtrx = sqrt(rx)
+  ec = exp(-c)
+  ai = ec*(t*f1-f2+ak2(1))/rtrx
+  j = n2d
+  f1 = dak2(j)
+  f2 = 0.0E+00
+
+  do i =1,m2d
+    j = j - 1
+    temp1 = f1
+    f1 = tt*f1 - f2 + dak2(j)
+    f2 = temp1
+  end do
+  dai = -ec*(t*f1-f2+dak2(1))*rtrx
+  return
+
+   60 continue
+  t = 10.0/c - 1.0E+00
+  tt = t + t
+  j = n1
+  f1 = ak3(j)
+  f2 = 0.0E+00
+
+  do i=1,m1
+    j = j - 1
+    temp1 = f1
+    f1 = tt*f1 - f2 + ak3(j)
+    f2 = temp1
+  end do
+  rtrx = sqrt(rx)
+  ec = exp(-c)
+  ai = ec*(t*f1-f2+ak3(1))/rtrx
+  j = n1d
+  f1 = dak3(j)
+  f2 = 0.0E+00
+
+  do i=1,m1d
+    j = j - 1
+    temp1 = f1
+    f1 = tt*f1 - f2 + dak3(j)
+    f2 = temp1
+  end do
+  dai = -rtrx*ec*(t*f1-f2+dak3(1))
+  return
+
+   90 continue
+  if (c>5.0) go to 120
+  t = 0.4*c - 1.0E+00
+  tt = t + t
+  j = n3
+  f1 = ajp(j)
+  e1 = ajn(j)
+  f2 = 0.0E+00
+  e2 = 0.0E+00
+
+  do i=1,m3
+    j = j - 1
+    temp1 = f1
+    temp2 = e1
+    f1 = tt*f1 - f2 + ajp(j)
+    e1 = tt*e1 - e2 + ajn(j)
+    f2 = temp1
+    e2 = temp2
+  end do
+
+  ai = (t*e1-e2+ajn(1)) - x*(t*f1-f2+ajp(1))
+  j = n3d
+  f1 = dajp(j)
+  e1 = dajn(j)
+  f2 = 0.0E+00
+  e2 = 0.0E+00
+
+  do i=1,m3d
+    j = j - 1
+    temp1 = f1
+    temp2 = e1
+    f1 = tt*f1 - f2 + dajp(j)
+    e1 = tt*e1 - e2 + dajn(j)
+    f2 = temp1
+    e2 = temp2
+  end do
+
+  dai = x*x*(t*f1-f2+dajp(1)) + (t*e1-e2+dajn(1))
+
+  return
+!
+  120 continue
+  t = 10.0/c - 1.0E+00
+  tt = t + t
+  j = n4
+  f1 = a(j)
+  e1 = b(j)
+  f2 = 0.0E+00
+  e2 = 0.0E+00
+
+  do i=1,m4
+    j = j - 1
+    temp1 = f1
+    temp2 = e1
+    f1 = tt*f1 - f2 + a(j)
+    e1 = tt*e1 - e2 + b(j)
+    f2 = temp1
+    e2 = temp2
+  end do
+  temp1 = t*f1 - f2 + a(1)
+  temp2 = t*e1 - e2 + b(1)
+  rtrx = sqrt(rx)
+  cv = c - fpi12
+  ccv = cos(cv)
+  scv = sin(cv)
+  ai = (temp1*ccv-temp2*scv)/rtrx
+  j = n4d
+  f1 = da(j)
+  e1 = db(j)
+  f2 = 0.0E+00
+  e2 = 0.0E+00
+
+  do i = 1, m4d
+    j = j - 1
+    temp1 = f1
+    temp2 = e1
+    f1 = tt*f1 - f2 + da(j)
+    e1 = tt*e1 - e2 + db(j)
+    f2 = temp1
+    e2 = temp2
+  end do
+
+  temp1 = t*f1 - f2 + da(1)
+  temp2 = t*e1 - e2 + db(1)
+  e1 = ccv*con5 + 0.5*scv
+  e2 = scv*con5 - 0.5*ccv
+  dai = (temp1*e1-temp2*e2)*rtrx
+
+  return
+end
+subroutine lltslv ( nr, n, a, x, b )
+!
+!*******************************************************************************
+!
+!! LLTSLV solves A*x=b where A = L * Transpose(L), and only L is stored.
+!
+!
+!  Discussion:
+!
+!    L is a lower triangular matrix.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! a(n,n)       --> matrix of form l(l-transpose).
+!                  on return a is unchanged.
+! x(n)        <--  solution vector
+! b(n)         --> right-hand side vector
+!                  if b is not required by calling program, then
+!                  b and x may share the same storage.
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real b(n)
+  real x(n)
+!
+!  Forward solve, result in X.
+!
+  call forslv ( nr, n, a, x, b )
+!
+!  Back solve, result in X.
+!
+  call bakslv ( nr, n, a, x, x )
+
+  return
+end
+subroutine lnsrch ( n, x, f, g, p, xpls, fpls, fcn, mxtake, iretcd, stepmx, &
+  steptl, sx, ipr )
+!
+!*******************************************************************************
+!
+!! LNSRCH finds a next newton iterate by line search.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+! parameters
+!
+! n            --> dimension of problem
+! x(n)         --> old iterate:   x[k-1]
+! f            --> function value at old iterate, f(x)
+! g(n)         --> gradient at old iterate, g(x), or approximate
+! p(n)         --> non-zero newton step
+! xpls(n)     <--  new iterate x[k]
+! fpls        <--function value at new iterate, f(xpls)
+! fcn          --> name of subroutine to evaluate function
+! iretcd      <--  return code
+! mxtake      <--  boolean flag indicating step of maximum length used
+! stepmx       --> maximum allowable step size
+! steptl       --> relative step size at which successive iterates
+!                  considered close enough to terminate algorithm
+! sx(n)        --> diagonal scaling matrix for x
+! ipr          --> device to which to send output
+!
+! internal variables
+!
+! sln              newton length
+! rln              relative length of newton step
+!
+  integer n
+!
+  real a
+  real almbda
+  real b
+  real disc
+  real f
+  real fpls
+  real g(n)
+  integer i
+  integer ipr
+  integer iretcd
+  logical mxtake
+  real p(n)
+  real pfpls
+  real plmbda
+  real rln
+  real rmnlmb
+  real scl
+  real sln
+  real slp
+  real stepmx
+  real steptl
+  real sx(n)
+  real t1
+  real t2
+  real t3
+  real tlmbda
+  real tmp
+  real x(n)
+  real xpls(n)
+!
+  external fcn
+!
+  mxtake = .false.
+  iretcd = 2
+
+  sln = sqrt ( sum ( ( sx(1:n) * p(1:n) )**2 ) )
+!
+!  Newton step longer than maximum allowed.
+!
+  if ( sln > stepmx ) then
+    scl=stepmx / sln
+    p(1:n) = scl * p(1:n)
+    sln = stepmx
+  end if
+
+  slp = dot_product ( g, p )
+
+  rln=0.
+  do i=1,n
+    rln=max(rln,abs(p(i))/max(abs(x(i)),1./sx(i)))
+  end do
+
+  rmnlmb=steptl/rln
+  almbda=1.0E+00
+!
+! loop
+! check if new iterate satisfactory.  generate new lambda if necessary.
+!
+  100 continue
+
+  if ( iretcd < 2 ) return
+
+  xpls(1:n) = x(1:n) + almbda * p(1:n)
+
+  call fcn ( n, xpls, fpls )
+
+  if ( fpls> f+slp*1.0e-4*almbda) go to 130
+!
+! solution found
+!
+    iretcd=0
+    if ( almbda==1.0E+00 .and. sln> .99*stepmx) mxtake=.true.
+    go to 100
+!
+! solution not (yet) found
+!
+!     else
+  130   if ( almbda >= rmnlmb) go to 140
+!       if ( almbda < rmnlmb)
+!       then
+!
+! no satisfactory xpls found sufficiently distinct from x
+!
+      iretcd=1
+      go to 100
+!
+! calculate new lambda
+!
+  140     continue
+
+          if ( almbda/=1.0) go to 150
+!         if ( almbda==1.0)
+!         then
+!
+! first backtrack: quadratic fit
+!
+        tlmbda=-slp/(2.*(fpls-f-slp))
+        go to 170
+!         else
+!
+! all subsequent backtracks: cubic fit
+!
+  150       t1=fpls-f-almbda*slp
+        t2=pfpls-f-plmbda*slp
+        t3=1.0/(almbda-plmbda)
+        a=t3*(t1/(almbda*almbda) - t2/(plmbda*plmbda))
+        b=t3*(t2*almbda/(plmbda*plmbda) - t1*plmbda/(almbda*almbda) )
+        disc=b*b-3.0*a*slp
+        if ( disc<= b*b) go to 160
+!           if ( disc> b*b)
+!           then
+!
+! only one positive critical point, must be minimum
+!
+          tlmbda=(-b+sign(1.0,a)*sqrt(disc))/(3.0*a)
+          go to 165
+!           else
+!
+! both critical points positive, first is minimum
+!
+  160         tlmbda=(-b-sign(1.0,a)*sqrt(disc))/(3.0*a)
+!           end if
+  165       if ( tlmbda> .5*almbda) tlmbda=.5*almbda
+!         end if
+  170     plmbda=almbda
+      pfpls=fpls
+      if ( tlmbda>= almbda*.1) go to 180
+!         if ( tlmbda<almbda/10.)
+!         then
+        almbda=almbda*.1
+        go to 190
+!         else
+  180       almbda=tlmbda
+!         end if
+!       end if
+!     end if
+  190 go to 100
+  950 format(' lnsrch    almbda=',e20.13)
+  951 format(' lnsrch    new iterate (xpls)')
+  952 format(' lnsrch    sln   =',e20.13/' lnsrch    slp   =',e20.13/ &
+             ' lnsrch    rmnlmb=',e20.13/' lnsrch    stepmx=',e20.13/ &
+             ' lnsrch    steptl=',e20.13)
+  953 format(' lnsrch    f(xpls)=',e20.13)
+  954 format('0lnsrch    newton step (p)')
+  955 format(' lnsrch       ',5(e20.13,3x))
+end
+subroutine mvmltl ( nr, n, a, x, y )
+!
+!*******************************************************************************
+!
+!! MVMLTL computes y = L*x where l is a lower triangular matrix stored in A.
+!
+!
+! parameters
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! a(n,n)       --> lower triangular (n*n) matrix
+! x(n)         --> operand vector
+! y(n)        <--  result vector
+!
+! note
+!
+! x and y cannot share storage
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  integer i
+  integer j
+  real sum
+  real x(n)
+  real y(n)
+!
+  do i = 1, n
+    sum = 0.0E+00
+    do j = 1, i
+      sum = sum + a(i,j) * x(j)
+    end do
+    y(i) = sum
+  end do
+
+  return
+end
+subroutine mvmlts ( nr, n, a, x, y )
+!
+!*******************************************************************************
+!
+!! MVMLTS computes y = A*x where "a" is a symmetric (n*n) matrix stored in its lower
+! triangular part and x,y are n-vectors
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+! parameters
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! a(n,n)       --> symmetric (n*n) matrix stored in
+!                  lower triangular part and diagonal
+! x(n)         --> operand vector
+! y(n)        <--  result vector
+!
+! note
+!
+! x and y cannot share storage.
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  integer i
+  integer j
+  real sum
+  real x(n)
+  real y(n)
+!
+  do i = 1, n
+
+    sum = 0.0E+00
+
+    do j = 1, i
+      sum = sum + a(i,j) * x(j)
+    end do
+
+    do j = i+1, n
+      sum = sum + a(j,i) * x(j)
+    end do
+
+    y(i) = sum
+
+  end do
+
+  return
+end
+subroutine mvmltu ( nr, n, a, x, y )
+!
+!*******************************************************************************
+!
+!! MVMLTU computes y=(l+)x where l is a lower triangular matrix stored in a
+! (l-transpose (l+) is taken implicitly)
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+! parameters
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! a(nr,1)       --> lower triangular (n*n) matrix
+! x(n)         --> operand vector
+! y(n)        <--  result vector
+!
+! note
+!
+! x and y cannot share storage
+!
+  integer n
+  integer nr
+!
+  real a(nr,1)
+  integer i
+  integer j
+  real sum
+  real x(n)
+  real y(n)
+!
+  do i = 1, n
+    sum = 0.0E+00
+    do j = i, n
+      sum = sum + a(j,i) * x(j)
+    end do
+    y(i) = sum
+  end do
+
+  return
+end
+function numxer ( nerr )
+!
+!*******************************************************************************
+!
+!! NUMXER returns the most recent error number.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     written by ron jones, with slatec common math library subcommittee
+!     latest revision:  7 june 1978
+!
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+  integer j4save
+  integer nerr
+  integer numxer
+!
+  nerr = j4save(1,0,.false.)
+  numxer = nerr
+  return
+end
+subroutine optchk ( n, x, typsiz, sx, fscale, gradtl, itnlim, ndigit, epsm, &
+  dlt, method, iexp, iagflg, iahflg, stepmx, msg, ipr )
+!
+!*******************************************************************************
+!
+!! OPTCHK checks the input to the optimization routine.
+!
+!
+!  Parameters:
+!
+! n            --> dimension of problem
+! x(n)         --> on entry, estimate to root of fcn
+! typsiz(n)   <--> typical size of each component of x
+! sx(n)       <--  diagonal scaling matrix for x
+! fscale      <--> estimate of scale of objective function fcn
+! gradtl       --> tolerance at which gradient considered close
+!                  enough to zero to terminate algorithm
+! itnlim      <--> maximum number of allowable iterations
+! ndigit      <--> number of good digits in optimization function fcn
+! epsm         --> machine epsilon
+! dlt         <--> trust region radius
+! method      <--> algorithm indicator
+! iexp        <--> expense flag
+! iagflg      <--> =1 if analytic gradient supplied
+! iahflg      <--> =1 if analytic hessian supplied
+! stepmx      <--> maximum step size
+! msg         <--> message and error code
+! ipr          --> device to which to send output
+!
+  integer n
+!
+  real dlt
+  real epsm
+  real fscale
+  real gradtl
+  integer i
+  integer iagflg
+  integer iahflg
+  integer iexp
+  integer ipr
+  integer itnlim
+  integer method
+  integer msg
+  integer ndigit
+  real stepmx
+  real stpsiz
+  real sx(n)
+  real typsiz(n)
+  real x(n)
+!
+! check that parameters only take on acceptable values.
+! if not, set them to default values.
+!
+  if ( method<1 .or. method>3) method=1
+  if ( iagflg/=1) iagflg=0
+  if ( iahflg/=1) iahflg=0
+  if ( iexp/=0) iexp=1
+  if ( mod(msg/2,2)==1 .and. iagflg==0) go to 830
+  if ( mod(msg/4,2)==1 .and. iahflg==0) go to 835
+!
+!  check dimension of problem
+!
+  if ( n<=0) go to 805
+  if ( n==1 .and. mod(msg,2)==0) go to 810
+!
+!  compute scale matrix
+!
+  do i=1,n
+    if ( typsiz(i)==0.) typsiz(i)=1.0E+00
+    if ( typsiz(i)<0.) typsiz(i)=-typsiz(i)
+    sx(i)=1.0/typsiz(i)
+  end do
+!
+!  check maximum step size
+!
+  if (stepmx > 0.0) go to 20
+  stpsiz = 0.0E+00
+  do i = 1, n
+     stpsiz = stpsiz + x(i)*x(i)*sx(i)*sx(i)
+  end do
+
+  stpsiz = sqrt(stpsiz)
+
+  stepmx = max(1.0e3*stpsiz, 1.0e3)
+   20 continue
+!
+! check function scale
+!
+  if ( fscale==0.) fscale=1.0E+00
+  if ( fscale<0.) fscale=-fscale
+!
+! check gradient tolerance
+!
+  if ( gradtl<0.) go to 815
+!
+! check iteration limit
+!
+  if ( itnlim<=0) go to 820
+!
+! check number of digits of accuracy in function fcn
+!
+  if ( ndigit==0) go to 825
+  if ( ndigit<0) ndigit=-log10(epsm)
+!
+! check trust region radius
+!
+  if ( dlt<=0.) dlt=-1.0E+00
+  if (dlt > stepmx) dlt = stepmx
+  return
+!
+! error exits
+!
+  805 write(ipr,901) n
+  msg=-1
+  go to 895
+  810 write(ipr,902)
+  msg=-2
+  go to 895
+  815 write(ipr,903) gradtl
+  msg=-3
+  go to 895
+  820 write(ipr,904) itnlim
+  msg=-4
+  go to 895
+  825 write(ipr,905) ndigit
+  msg=-5
+  go to 895
+  830 write(ipr,906) msg,iagflg
+  msg=-6
+  go to 895
+  835 write(ipr,907) msg,iahflg
+  msg=-7
+  895 return
+  901 format('0optchk    illegal dimension, n=',i5)
+  902 format('0optchk    +++ warning +++  this package is inefficient', &
+    'for problems of size n=1.'/ &
+    ' optchk    check installation libraries for more appropriate routines.'/ &
+    ' optchk    if none, set msg and resubmit.')
+  903 format('0optchk    illegal tolerance.  gradtl=',e20.13)
+  904 format('0optchk    illegal iteration limit.  itnlim=',i5)
+  905 format('0optchk    minimization function has no good digits.', &
+     'ndigit=',i5)
+  906 format('0optchk    user requests that analytic gradient be', &
+     ' accepted as properly coded (msg=',i5, '),'/ &
+     ' optchk    but analytic gradient not supplied (iagflg=',i5, ').')
+  907 format('0optchk    user requests that analytic hessian be', &
+     ' accepted as properly coded (msg=',i5, '),'/ &
+     ' optchk    but analytic hessian not supplied(iahflg=',i5, ').')
+end
+subroutine optdrv(nr,n,x,fcn,d1fcn,d2fcn,typsiz,fscale,method,iexp,msg, &
+  ndigit,itnlim,iagflg,iahflg,ipr,dlt,gradtl,stepmx,steptl,xpls,fpls,gpls, &
+  itrmcd,a,udiag,g,p,sx,wrk0,wrk1,wrk2,wrk3)
+!
+!*******************************************************************************
+!
+!! OPTDRV is a driver for the nonlinear optimization package.
+!
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! x(n)         --> on entry: estimate to a root of fcn
+! fcn          --> name of subroutine to evaluate optimization function
+!                  must be declared external in calling routine
+!                            fcn: r(n) --> r(1)
+! d1fcn        --> (optional) name of subroutine to evaluate gradient
+!                  of fcn.  must be declared external in calling routine
+! d2fcn        --> (optional) name of subroutine to evaluate hessian of
+!                  of fcn.  must be declared external in calling routine
+! typsiz(n)    --> typical size for each component of x
+! fscale       --> estimate of scale of objective function
+! method       --> algorithm to use to solve minimization problem
+!                    =1 line search
+!                    =2 double dogleg
+!                    =3 more-hebdon
+! iexp         --> =1 if optimization function fcn is expensive to
+!                  evaluate, =0 otherwise.  if set then hessian will
+!                  be evaluated by secant update instead of
+!                  analytically or by finite differences
+! msg         <--> on input:  (>0) message to inhibit certain
+!                    automatic checks
+!                  on output: (<0) error code; =0 no error
+! ndigit       --> number of good digits in optimization function fcn
+! itnlim       --> maximum number of allowable iterations
+! iagflg       --> =1 if analytic gradient supplied
+! iahflg       --> =1 if analytic hessian supplied
+! ipr          --> device to which to send output
+! dlt          --> trust region radius
+! gradtl       --> tolerance at which gradient considered close
+!                  enough to zero to terminate algorithm
+! stepmx       --> maximum allowable step size
+! steptl       --> relative step size at which successive iterates
+!                  considered close enough to terminate algorithm
+! xpls(n)     <--> on exit:  xpls is local minimum
+! fpls        <--> on exit:function value at solution, xpls
+! gpls(n)     <--> on exit:  gradient at solution xpls
+! itrmcd      <--  termination code
+! a(n,n)       --> workspace for hessian (or estimate)
+!                  and its cholesky decomposition
+! udiag(n)     --> workspace [for diagonal of hessian]
+! g(n)         --> workspace (for gradient at current iterate)
+! p(n)         --> workspace for step
+! sx(n)        --> workspace (for diagonal scaling matrix)
+! wrk0(n)      --> workspace
+! wrk1(n)      --> workspace
+! wrk2(n)      --> workspace
+! wrk3(n)      --> workspace
+!
+!
+! internal variables
+!
+! analtl           tolerance for comparison of estimated and
+!                  analytical gradients and hessians
+! epsm             machine epsilon
+! f              function value: fcn(x)
+! itncnt           current iteration, k
+! rnf              relative noise in optimization function fcn.
+!                       noise=10.**(-ndigit)
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real amu
+  real amusav
+  real analtl
+  real dlpsav
+  real dlt
+  real dltp
+  real dltsav
+  real epsm
+  real f
+  real fpls
+  real fscale
+  real g(n)
+  real gpls(n)
+  real gradtl
+  integer i
+  integer iagflg
+  integer iahflg
+  integer icscmx
+  integer iexp
+  integer ipr
+  integer iretcd
+  integer itncnt
+  integer itnlim
+  integer itrmcd
+  integer method
+  integer msg
+  logical mxtake
+  integer ndigit
+  logical noupdt
+  real p(n)
+  real phi
+  real phip0
+  real phisav
+  real phpsav
+  real r1mach
+  real rnf
+  real stepmx
+  real steptl
+  real sx(n)
+  real typsiz(n)
+  real udiag(n)
+  real wrk
+  real wrk0(n)
+  real wrk1(n)
+  real wrk2(n)
+  real wrk3(n)
+  real x(n)
+  real xpls(n)
+!
+  external fcn,d1fcn,d2fcn
+!
+! initialization
+!
+  p(1:n) = 0.0E+00
+  itncnt=0
+  iretcd=-1
+  epsm=r1mach(4)
+
+  call optchk(n,x,typsiz,sx,fscale,gradtl,itnlim,ndigit,epsm, &
+    dlt,method,iexp,iagflg,iahflg,stepmx,msg,ipr)
+  if ( msg<0) return
+
+  rnf=max(10.0**(-ndigit),epsm)
+
+  analtl=max(1.0e-2,sqrt(rnf))
+
+  if ( mod(msg/8,2)==1) go to 15
+  write(ipr,901)
+  write(ipr,900) (typsiz(i),i=1,n)
+  write(ipr,902)
+  write(ipr,900) (sx(i),i=1,n)
+  write(ipr,903) fscale
+  write(ipr,904) ndigit,iagflg,iahflg,iexp,method,itnlim,epsm
+  write(ipr,905) stepmx,steptl,gradtl,dlt,rnf,analtl
+   15 continue
+!
+! evaluate fcn(x)
+!
+  call fcn(n,x,f)
+!
+! evaluate analytic or finite difference gradient and check analytic
+! gradient, if requested.
+!
+  if (iagflg /= 1) then
+
+    call fstofd (1, 1, n, x, fcn, f, g, sx, rnf, wrk, 1)
+
+  else
+
+    call d1fcn (n, x, g)
+
+    if ( mod(msg/2,2) /= 1) then
+      call grdchk (n, x, fcn, f, g, typsiz, sx, fscale, rnf, analtl, wrk1, &
+        msg, ipr)
+      if (msg < 0) return
+    end if
+
+  end if
+
+  call optstp(n,x,f,g,wrk1,itncnt,icscmx,itrmcd,gradtl,steptl,sx,fscale, &
+    itnlim,iretcd,mxtake,ipr,msg)
+
+  if ( itrmcd/=0) go to 700
+
+  if ( iexp/=1) go to 80
+!
+! if optimization function expensive to evaluate (iexp=1), then
+! hessian will be obtained by secant updates.  get initial hessian.
+!
+  call hsnint(nr,n,a,sx,method)
+  go to 90
+   80 continue
+!
+! evaluate analytic or finite difference hessian and check analytic
+! hessian if requested (only if user-supplied analytic hessian
+! routine d2fcn fills only lower triangular part and diagonal of a).
+!
+  if (iahflg == 1) go to 82
+
+     if (iagflg == 1) then
+       call fstofd (nr, n, n, x, d1fcn, g, a, sx, rnf, wrk1, 3)
+     else
+       call sndofd (nr, n, x, fcn, f, a, sx, rnf, wrk1, wrk2)
+     end if
+
+     go to 88
+!
+!     else
+   82    if (mod(msg/4,2)==0) go to 85
+!        if (mod(msg/4, 2) == 1)
+!        then
+        call d2fcn (nr, n, x, a)
+        go to 88
+!
+!        else
+   85     continue
+
+          call heschk (nr, n, x, fcn, d1fcn, d2fcn, f, g, a, typsiz, &
+            sx, rnf, analtl, iagflg, udiag, wrk1, wrk2, msg, ipr)
+!
+!           heschk evaluates d2fcn and checks it against the finite
+!           difference hessian which it calculates by calling fstofd
+!           (if iagflg == 1) or sndofd (otherwise).
+!
+        if (msg < 0) return
+   88 continue
+
+   90 continue
+
+      if ( mod(msg/8,2)==0) then
+        call result(nr,n,x,f,g,a,p,itncnt,1,ipr)
+      end if
+!
+! iteration
+!
+  100 itncnt=itncnt+1
+!
+!  find perturbed local model hessian and its ll+ decomposition
+!  (skip this step if line search or dogstep techniques being used with
+!  secant updates.  cholesky decomposition l already obtained from
+!  secfac.)
+!
+  if ( iexp==1 .and. method/=3) go to 105
+  103   call chlhsn(nr,n,a,epsm,sx,udiag)
+  105 continue
+!
+! solve for newton step:  ap=-g
+!
+  wrk1(1:n) = - g(1:n)
+
+  call lltslv(nr,n,a,p,wrk1)
+!
+! decide whether to accept newton step  xpls=x + p
+! or to choose xpls by a global strategy.
+!
+  if (iagflg /= 0 .or. method == 1) go to 111
+  dltsav = dlt
+
+  if ( method /= 2 ) then
+    amusav = amu
+    dlpsav = dltp
+    phisav = phi
+    phpsav = phip0
+  end if
+
+  111 continue
+
+  if ( method==1) then
+    call lnsrch(n,x,f,g,p,xpls,fpls,fcn,mxtake,iretcd, &
+      stepmx,steptl,sx,ipr)
+  end if
+
+  if ( method==2) then
+    call dogdrv(nr,n,x,f,g,a,p,xpls,fpls,fcn,sx,stepmx, &
+      steptl,dlt,iretcd,mxtake,wrk0,wrk1,wrk2,wrk3,ipr)
+  end if
+
+  if ( method==3) then
+    call hookdr(nr,n,x,f,g,a,udiag,p,xpls,fpls,fcn,sx,stepmx, &
+      steptl,dlt,iretcd,mxtake,amu,dltp,phi,phip0,wrk0, &
+      wrk1,wrk2,epsm,itncnt,ipr)
+  end if
+!
+! if could not find satisfactory step and forward difference
+! gradient was used, retry using central difference gradient.
+!
+  if ( iretcd /= 1 .or. iagflg /= 0 ) then
+    go to 112
+  end if
+!
+!  set iagflg for central differences
+!
+     iagflg = -1
+     write(ipr,906) itncnt
+     call fstocd (n, x, fcn, sx, rnf, g)
+     if (method == 1) go to 105
+     dlt = dltsav
+     if (method == 2) go to 105
+     amu = amusav
+     dltp = dlpsav
+     phi = phisav
+     phip0 = phpsav
+     go to 103
+!     end if
+!
+! calculate step for output
+!
+  112 continue
+
+  p(1:n) = xpls(1:n) - x(1:n)
+!
+! calculate gradient at xpls
+!
+  if (iagflg == (-1)) go to 116
+  if (iagflg == 0) go to 118
+!
+! analytic gradient
+  call d1fcn (n, xpls, gpls)
+  go to 120
+!
+! central difference gradient
+  116 call fstocd (n, xpls, fcn, sx, rnf, gpls)
+  go to 120
+!
+! forward difference gradient
+  118 call fstofd (1, 1, n, xpls, fcn, fpls, gpls, sx, rnf, wrk, 1)
+  120 continue
+!
+! check whether stopping criteria satisfied
+!
+  call optstp(n,xpls,fpls,gpls,x,itncnt,icscmx,itrmcd,gradtl,steptl,sx,&
+    fscale,itnlim,iretcd,mxtake,ipr,msg)
+  if ( itrmcd/=0) go to 690
+!
+! evaluate hessian at xpls
+!
+  if ( iexp==0) go to 130
+
+  if ( method==3) then
+     call secunf(nr,n,x,g,a,udiag,xpls,gpls,epsm,itncnt,rnf, &
+       iagflg,noupdt,wrk1,wrk2,wrk3)
+  end if
+
+  if ( method/=3) then
+    call secfac(nr,n,x,g,a,xpls,gpls,epsm,itncnt,rnf,iagflg, &
+      noupdt,wrk0,wrk1,wrk2,wrk3)
+  end if
+
+  go to 150
+  130 if ( iahflg==1) go to 140
+
+  if ( iagflg==1) then
+    call fstofd(nr,n,n,xpls,d1fcn,gpls,a,sx,rnf,wrk1,3)
+  else
+    call sndofd(nr,n,xpls,fcn,fpls,a,sx,rnf,wrk1,wrk2)
+  end if
+
+  go to 150
+  140 call d2fcn(nr,n,xpls,a)
+  150 continue
+
+  if ( mod(msg/16,2)==1) then
+    call result(nr,n,xpls,fpls,gpls,a,p,itncnt,1,ipr)
+  end if
+!
+! x <-- xpls  and  g <-- gpls  and  f <-- fpls
+!
+  f=fpls
+  x(1:n)=xpls(1:n)
+  g(1:n)=gpls(1:n)
+
+  go to 100
+!
+! termination
+!
+! reset xpls,fpls,gpls,  if previous iterate solution
+!
+  690 if ( itrmcd/=3) go to 710
+  700 continue
+
+  fpls=f
+  xpls(1:n)=x(1:n)
+  gpls(1:n)=g(1:n)
+!
+! print results
+!
+  710 continue
+
+  if ( mod(msg/8,2)==0) then
+    call result(nr,n,xpls,fpls,gpls,a,p,itncnt,0,ipr)
+  end if
+
+  msg=0
+  return
+!
+  900 format(' optdrv       ',5(e20.13,3x))
+  901 format('0optdrv    typical x')
+  902 format(' optdrv    diagonal scaling matrix for x')
+  903 format(' optdrv    typical f =',e20.13)
+  904 format('0optdrv    number of good digits in fcn=',i5/ &
+             ' optdrv    gradient flag  =',i5,'   (=1 if analytic', &
+             ' gradient supplied)'/ &
+             ' optdrv    hessian flag   =',i5,'   (=1 if analytic', &
+             ' hessian supplied)'/ &
+             ' optdrv    expense flag   =',i5, '   (=1 if', &
+             ' minimization function expensive to evaluate)'/ &
+             ' optdrv    method to use  =',i5,'   (=1,2,3 for line', &
+             ' search, double dogleg, more-hebdon respectively)'/ &
+             ' optdrv    iteration limit=',i5/ &
+             ' optdrv    machine epsilon=',e20.13)
+
+  905 format('0optdrv    maximum step size =',e20.13/ &
+             ' optdrv    step tolerance    =',e20.13/ &
+             ' optdrv    gradient tolerance=',e20.13/ &
+             ' optdrv    trust reg radius  =',e20.13/ &
+             ' optdrv    rel noise in fcn  =',e20.13/ &
+             ' optdrv    anal-fd tolerance =',e20.13)
+
+  906 format(' optdrv    shift from forward to central differences', &
+     ' in iteration ', i5)
+end
+subroutine optif0(nr,n,x,fcn,xpls,fpls,gpls,itrmcd,a,wrk)
+!
+!*******************************************************************************
+!
+!! OPTIF0 provides simplest interface to minimization package.
+!
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! x(n)         --> initial estimate of minimum
+! fcn          --> name of routine to evaluate minimization function.
+!                  must be declared external in calling routine.
+! xpls(n)     <--  local minimum
+! fpls        <--function value at local minimum xpls
+! gpls(n)     <--  gradient at local minimum xpls
+! itrmcd      <--  termination code
+! a(n,n)       --> workspace
+! wrk(n,9)     --> workspace
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real dlt
+  real fscale
+  real fpls
+  real gpls(n)
+  real gradtl
+  integer iagflg
+  integer iahflg
+  integer iexp
+  integer ipr
+  integer itnlim
+  integer itrmcd
+  integer method
+  integer msg
+  integer ndigit
+  real stepmx
+  real steptl
+  real wrk(nr,9)
+  real x(n)
+  real xpls(n)
+!
+  external fcn,d1fcn,d2fcn
+!
+! equivalence wrk(n,1) = udiag(n)
+!             wrk(n,2) = g(n)
+!             wrk(n,3) = p(n)
+!             wrk(n,4) = typsiz(n)
+!             wrk(n,5) = sx(n)
+!             wrk(n,6) = wrk0(n)
+!             wrk(n,7) = wrk1(n)
+!             wrk(n,8) = wrk2(n)
+!             wrk(n,9) = wrk3(n)
+!
+  call dfault(n,x,wrk(1,4),fscale,method,iexp,msg,ndigit, &
+    itnlim,iagflg,iahflg,ipr,dlt,gradtl,stepmx,steptl)
+
+  call optdrv(nr,n,x,fcn,d1fcn,d2fcn,wrk(1,4),fscale, &
+    method,iexp,msg,ndigit,itnlim,iagflg,iahflg,ipr, &
+    dlt,gradtl,stepmx,steptl,xpls,fpls,gpls,itrmcd, &
+    a,wrk(1,1),wrk(1,2),wrk(1,3),wrk(1,5),wrk(1,6), &
+    wrk(1,7),wrk(1,8),wrk(1,9))
+
+  return
+end
+subroutine optstp(n,xpls,fpls,gpls,x,itncnt,icscmx, &
+  itrmcd,gradtl,steptl,sx,fscale,itnlim,iretcd,mxtake,ipr,msg)
+!
+!*******************************************************************************
+!
+!! OPTSTP: unconstrained minimization stopping criteria
+!
+!
+! find whether the algorithm should terminate, due to any
+! of the following:
+! 1) problem solved within user tolerance
+! 2) convergence within user tolerance
+! 3) iteration limit reached
+! 4) divergence or too restrictive maximum step (stepmx) suspected
+!
+!
+! parameters
+!
+! n            --> dimension of problem
+! xpls(n)      --> new iterate x[k]
+! fpls         --> function value at new iterate f(xpls)
+! gpls(n)      --> gradient at new iterate, g(xpls), or approximate
+! x(n)         --> old iterate x[k-1]
+! itncnt       --> current iteration k
+! icscmx      <--> number consecutive steps >= stepmx
+!                  [retain value between successive calls]
+! itrmcd      <--  termination code
+! gradtl       --> tolerance at which relative gradient considered close
+!                  enough to zero to terminate algorithm
+! steptl       --> relative step size at which successive iterates
+!                  considered close enough to terminate algorithm
+! sx(n)        --> diagonal scaling matrix for x
+! fscale       --> estimate of scale of objective function
+! itnlim       --> maximum number of allowable iterations
+! iretcd       --> return code
+! mxtake       --> boolean flag indicating step of maximum length used
+! ipr          --> device to which to send output
+! msg          --> if msg includes a term 8, suppress output
+!
+!
+  integer n
+!
+  real d
+  real fpls
+  real fscale
+  real gpls(n)
+  real gradtl
+  integer i
+  integer icscmx
+  integer ipr
+  integer iretcd
+  integer itncnt
+  integer itnlim
+  integer itrmcd
+  integer jtrmcd
+  integer msg
+  logical mxtake
+  real relgrd
+  real relstp
+  real rgx
+  real rsx
+  real steptl
+  real sx(n)
+  real x(n)
+  real xpls(n)
+!
+  itrmcd=0
+!
+! last global step failed to locate a point lower than x.
+!
+  if ( iretcd == 1 ) then
+    jtrmcd=3
+    go to 600
+  end if
+!
+!  Find direction in which relative gradient maximum.
+!  Check whether within tolerance
+!
+  d=max(abs(fpls),fscale)
+  rgx=0.0E+00
+
+  do i=1,n
+    relgrd=abs(gpls(i))*max(abs(xpls(i)),1./sx(i))/d
+    rgx=max(rgx,relgrd)
+  end do
+
+  jtrmcd=1
+  if ( rgx<=gradtl) go to 600
+
+  if ( itncnt==0) return
+!
+! find direction in which relative stepsize maximum
+! check whether within tolerance.
+!
+  rsx=0.0E+00
+  do i=1,n
+    relstp=abs(xpls(i)-x(i))/max(abs(xpls(i)),1./sx(i))
+    rsx=max(rsx,relstp)
+  end do
+
+  jtrmcd=2
+  if ( rsx<=steptl) go to 600
+!
+! check iteration limit
+!
+  jtrmcd=4
+  if ( itncnt>=itnlim) go to 600
+!
+! check number of consecutive steps \ stepmx
+!
+  if ( .not.mxtake) then
+    icscmx=0
+    return
+  else
+    if (mod(msg/8,2) == 0) write(ipr,900)
+    icscmx=icscmx+1
+    if ( icscmx<5) return
+    jtrmcd=5
+  end if
+!
+! print termination code
+!
+  600 itrmcd=jtrmcd
+  if (mod(msg/8,2) == 0) go to(601,602,603,604,605), itrmcd
+  go to 700
+  601 write(ipr,901)
+  go to 700
+  602 write(ipr,902)
+  go to 700
+  603 write(ipr,903)
+  go to 700
+  604 write(ipr,904)
+  go to 700
+  605 write(ipr,905)
+!
+  700 return
+!
+  900 format('0optstp    step of maximum length (stepmx) taken')
+  901 format('0optstp    relative gradient close to zero.'/ &
+             ' optstp    current iterate is probably solution.')
+  902 format('0optstp    successive iterates within tolerance.'/ &
+             ' optstp    current iterate is probably solution')
+  903 format('0optstp    last global step failed to locate a point', &
+             ' lower than x.'/ &
+             ' optstp    either x is an approximate local minimum', &
+             ' of the function',/ &
+             ' optstp    the function is too non-linear for this algorithm,'/ &
+             ' optstp    or steptl is too large.')
+  904 format('optstp    iteration limit exceeded.'/'optstp    algorithm failed.')
+  905 format('0optstp    maximum step size exceeded 5 consecutive times.'/ &
+             ' optstp    either the function is unbounded below',/ &
+             ' optstp    becomes asymptotic to a finite value', &
+             ' from above in some direction',/ &
+             ' optstp    or stepmx is too small')
+end
+subroutine passb ( nac, ido, ip, l1, idl1, cc, c1, c2, ch, ch2, wa )
+!
+!*******************************************************************************
+!
+!! PASSB is a lower level routine used by CFFTB1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer idl1
+  integer ido
+  integer ip
+  integer l1
+!
+  real c1(ido,l1,ip)
+  real c2(idl1,ip)
+  real cc(ido,ip,l1)
+  real ch(ido,l1,ip)
+  real ch2(idl1,ip)
+  integer i
+  integer idij
+  integer idj
+  integer idl
+  integer idlj
+  integer idp
+  integer ik
+  integer inc
+  integer ipph
+  integer j
+  integer jc
+  integer k
+  integer l
+  integer lc
+  integer nac
+  integer nt
+  real wa(*)
+  real wai
+  real war
+!
+  nt = ip * idl1
+  ipph = ( ip + 1 ) / 2
+  idp = ip * ido
+
+  if ( ido >= l1 ) then
+
+    do j = 2, ipph
+      jc = ip + 2 - j
+      do k = 1, l1
+        ch(1:ido,k,j)  = cc(1:ido,j,k) + cc(1:ido,jc,k)
+        ch(1:ido,k,jc) = cc(1:ido,j,k) - cc(1:ido,jc,k)
+      end do
+    end do
+
+    ch(1:ido,1:l1,1) = cc(1:ido,1,1:l1)
+
+  else
+
+    do j = 2, ipph
+      jc = ip + 2 - j
+      do i = 1, ido
+        ch(i,1:l1,j)  = cc(i,j,1:l1) + cc(i,jc,1:l1)
+        ch(i,1:l1,jc) = cc(i,j,1:l1) - cc(i,jc,1:l1)
+      end do
+    end do
+
+    ch(1:ido,1:l1,1) = cc(1:ido,1,1:l1)
+
+  end if
+
+  idl = 2 - ido
+  inc = 0
+
+  do l = 2, ipph
+
+    lc = ip + 2 - l
+    idl = idl + ido
+
+    do ik = 1, idl1
+      c2(ik,l) = ch2(ik,1) + wa(idl-1) * ch2(ik,2)
+      c2(ik,lc) =            wa(idl)   * ch2(ik,ip)
+    end do
+
+    idlj = idl
+    inc = inc + ido
+
+    do j = 3, ipph
+
+      jc = ip + 2 - j
+      idlj = idlj + inc
+      if ( idlj > idp ) then
+        idlj = idlj - idp
+      end if
+
+      war = wa(idlj-1)
+      wai = wa(idlj)
+
+      do ik = 1, idl1
+        c2(ik,l)  = c2(ik,l)  + war * ch2(ik,j)
+        c2(ik,lc) = c2(ik,lc) + wai * ch2(ik,jc)
+      end do
+
+    end do
+
+  end do
+
+  do j = 2, ipph
+    ch2(1:idl1,1) = ch2(1:idl1,1) + ch2(1:idl1,j)
+  end do
+
+  do j = 2, ipph
+    jc = ip + 2 - j
+    do ik = 2, idl1, 2
+      ch2(ik-1,j)  = c2(ik-1,j) - c2(ik,jc)
+      ch2(ik-1,jc) = c2(ik-1,j) + c2(ik,jc)
+      ch2(ik,j)    = c2(ik,j)   + c2(ik-1,jc)
+      ch2(ik,jc)   = c2(ik,j)   - c2(ik-1,jc)
+    end do
+  end do
+
+  nac = 1
+
+  if ( ido == 2 ) then
+    return
+  end if
+
+  nac = 0
+  c2(1:idl1,1) = ch2(1:idl1,1)
+  c1(1:2,1:l1,2:ip) = ch(1:2,1:l1,2:ip)
+
+  if ( ( ido / 2 ) <= l1 ) then
+
+    idij = 0
+    do j = 2, ip
+      idij = idij + 2
+      do i = 4, ido, 2
+        idij = idij + 2
+        c1(i-1,1:l1,j) = wa(idij-1) * ch(i-1,1:l1,j) - wa(idij) * ch(i,1:l1,j)
+        c1(i,1:l1,j)   = wa(idij-1) * ch(i,1:l1,j)   + wa(idij) * ch(i-1,1:l1,j)
+      end do
+    end do
+
+  else
+
+    idj = 2 - ido
+
+    do j = 2, ip
+      idj = idj + ido
+      do k = 1, l1
+        idij = idj
+        do i = 4, ido, 2
+          idij = idij + 2
+          c1(i-1,k,j) = wa(idij-1) * ch(i-1,k,j) - wa(idij) * ch(i,k,j)
+          c1(i,k,j)   = wa(idij-1) * ch(i,k,j)   + wa(idij) * ch(i-1,k,j)
+        end do
+      end do
+    end do
+
+  end if
+
+  return
+end
+subroutine passb2 ( ido, l1, cc, ch, wa1 )
+!
+!*******************************************************************************
+!
+!! PASSB2 is a lower level routine used by CFFTB1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,2,l1)
+  real ch(ido,l1,2)
+  integer i
+  integer k
+  real ti2
+  real tr2
+  real wa1(ido)
+!
+  if ( ido <= 2 ) then
+
+    ch(1,1:l1,1) = cc(1,1,1:l1) + cc(1,2,1:l1)
+    ch(1,1:l1,2) = cc(1,1,1:l1) - cc(1,2,1:l1)
+    ch(2,1:l1,1) = cc(2,1,1:l1) + cc(2,2,1:l1)
+    ch(2,1:l1,2) = cc(2,1,1:l1) - cc(2,2,1:l1)
+
+  else
+
+    do k = 1, l1
+      do i = 2, ido, 2
+
+        ch(i-1,k,1) = cc(i-1,1,k) + cc(i-1,2,k)
+        tr2         = cc(i-1,1,k) - cc(i-1,2,k)
+        ch(i,k,1)   = cc(i,1,k)   + cc(i,2,k)
+        ti2         = cc(i,1,k)   - cc(i,2,k)
+
+        ch(i,k,2)   = wa1(i-1) * ti2 + wa1(i) * tr2
+        ch(i-1,k,2) = wa1(i-1) * tr2 - wa1(i) * ti2
+
+      end do
+    end do
+
+  end if
+
+  return
+end
+subroutine passb3 ( ido, l1, cc, ch, wa1, wa2 )
+!
+!*******************************************************************************
+!
+!! PASSB3 is a lower level routine used by CFFTB1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,3,l1)
+  real ch(ido,l1,3)
+  real ci2
+  real ci3
+  real cr2
+  real cr3
+  real di2
+  real di3
+  real dr2
+  real dr3
+  integer i
+  integer k
+  real, parameter :: taui = 0.866025403784439E+00
+  real, parameter :: taur = -0.5E+00
+  real ti2
+  real tr2
+  real wa1(ido)
+  real wa2(ido)
+!
+  if ( ido == 2 ) then
+
+    do k = 1, l1
+
+      tr2 = cc(1,2,k) + cc(1,3,k)
+      cr2 = cc(1,1,k) + taur * tr2
+      ch(1,k,1) = cc(1,1,k) + tr2
+
+      ti2 = cc(2,2,k) + cc(2,3,k)
+      ci2 = cc(2,1,k) + taur * ti2
+      ch(2,k,1) = cc(2,1,k) + ti2
+
+      cr3 = taui * ( cc(1,2,k) - cc(1,3,k) )
+      ci3 = taui * ( cc(2,2,k) - cc(2,3,k) )
+
+      ch(1,k,2) = cr2 - ci3
+      ch(1,k,3) = cr2 + ci3
+      ch(2,k,2) = ci2 + cr3
+      ch(2,k,3) = ci2 - cr3
+
+    end do
+
+  else
+
+    do k = 1, l1
+      do i = 2, ido, 2
+
+        tr2 = cc(i-1,2,k) + cc(i-1,3,k)
+        cr2 = cc(i-1,1,k) + taur * tr2
+        ch(i-1,k,1) = cc(i-1,1,k) + tr2
+
+        ti2 = cc(i,2,k) + cc(i,3,k)
+        ci2 = cc(i,1,k) + taur * ti2
+        ch(i,k,1) = cc(i,1,k) + ti2
+
+        cr3 = taui * ( cc(i-1,2,k) - cc(i-1,3,k) )
+        ci3 = taui * ( cc(i,2,k) - cc(i,3,k) )
+
+        dr2 = cr2 - ci3
+        dr3 = cr2 + ci3
+        di2 = ci2 + cr3
+        di3 = ci2 - cr3
+
+        ch(i,k,2)   = wa1(i-1) * di2 + wa1(i) * dr2
+        ch(i-1,k,2) = wa1(i-1) * dr2 - wa1(i) * di2
+        ch(i,k,3)   = wa2(i-1) * di3 + wa2(i) * dr3
+        ch(i-1,k,3) = wa2(i-1) * dr3 - wa2(i) * di3
+
+      end do
+    end do
+
+  end if
+
+  return
+end
+subroutine passb4 ( ido, l1, cc, ch, wa1, wa2, wa3 )
+!
+!*******************************************************************************
+!
+!! PASSB4 is a lower level routine used by CFFTB1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,4,l1)
+  real ch(ido,l1,4)
+  real ci1
+  real ci2
+  real ci3
+  real ci4
+  real cr1
+  real cr2
+  real cr3
+  real cr4
+  integer i
+  integer k
+  real ti1
+  real ti2
+  real ti3
+  real ti4
+  real tr1
+  real tr2
+  real tr3
+  real tr4
+  real wa1(ido)
+  real wa2(ido)
+  real wa3(ido)
+!
+  if ( ido == 2 ) then
+
+    do k = 1, l1
+
+      ti1 = cc(2,1,k) - cc(2,3,k)
+      ti2 = cc(2,1,k) + cc(2,3,k)
+      tr4 = cc(2,4,k) - cc(2,2,k)
+      ti3 = cc(2,2,k) + cc(2,4,k)
+      tr1 = cc(1,1,k) - cc(1,3,k)
+      tr2 = cc(1,1,k) + cc(1,3,k)
+      ti4 = cc(1,2,k) - cc(1,4,k)
+      tr3 = cc(1,2,k) + cc(1,4,k)
+
+      ch(1,k,1) = tr2 + tr3
+      ch(1,k,3) = tr2 - tr3
+      ch(2,k,1) = ti2 + ti3
+      ch(2,k,3) = ti2 - ti3
+      ch(1,k,2) = tr1 + tr4
+      ch(1,k,4) = tr1 - tr4
+      ch(2,k,2) = ti1 + ti4
+      ch(2,k,4) = ti1 - ti4
+
+    end do
+
+  else
+
+    do k = 1, l1
+      do i = 2, ido, 2
+
+        ti1 = cc(i,1,k) - cc(i,3,k)
+        ti2 = cc(i,1,k) + cc(i,3,k)
+        ti3 = cc(i,2,k) + cc(i,4,k)
+        tr4 = cc(i,4,k) - cc(i,2,k)
+
+        tr1 = cc(i-1,1,k) - cc(i-1,3,k)
+        tr2 = cc(i-1,1,k) + cc(i-1,3,k)
+        ti4 = cc(i-1,2,k) - cc(i-1,4,k)
+        tr3 = cc(i-1,2,k) + cc(i-1,4,k)
+
+        ch(i-1,k,1) = tr2 + tr3
+        cr3 = tr2 - tr3
+        ch(i,k,1) = ti2 + ti3
+        ci3 = ti2 - ti3
+
+        cr2 = tr1 + tr4
+        cr4 = tr1 - tr4
+        ci2 = ti1 + ti4
+        ci4 = ti1 - ti4
+
+        ch(i-1,k,2) = wa1(i-1) * cr2 - wa1(i) * ci2
+        ch(i,k,2)   = wa1(i-1) * ci2 + wa1(i) * cr2
+        ch(i-1,k,3) = wa2(i-1) * cr3 - wa2(i) * ci3
+        ch(i,k,3)   = wa2(i-1) * ci3 + wa2(i) * cr3
+        ch(i-1,k,4) = wa3(i-1) * cr4 - wa3(i) * ci4
+        ch(i,k,4)   = wa3(i-1) * ci4 + wa3(i) * cr4
+
+      end do
+    end do
+
+  end if
+
+  return
+end
+subroutine passb5 ( ido, l1, cc, ch, wa1, wa2, wa3, wa4 )
+!
+!*******************************************************************************
+!
+!! PASSB5 is a lower level routine used by CFFTB1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,5,l1)
+  real ch(ido,l1,5)
+  real ci2
+  real ci3
+  real ci4
+  real ci5
+  real cr2
+  real cr3
+  real cr4
+  real cr5
+  real di2
+  real di3
+  real di4
+  real di5
+  real dr2
+  real dr3
+  real dr4
+  real dr5
+  integer i
+  integer k
+  real, parameter :: ti11 = 0.951056516295154E+00
+  real, parameter :: ti12 = 0.587785252292473E+00
+  real ti2
+  real ti3
+  real ti4
+  real ti5
+  real, parameter :: tr11 = 0.309016994374947E+00
+  real, parameter :: tr12 = -0.809016994374947E+00
+  real tr2
+  real tr3
+  real tr4
+  real tr5
+  real wa1(ido)
+  real wa2(ido)
+  real wa3(ido)
+  real wa4(ido)
+!
+  if ( ido == 2 ) then
+
+    do k = 1, l1
+
+      ti5 = cc(2,2,k) - cc(2,5,k)
+      ti2 = cc(2,2,k) + cc(2,5,k)
+      ti4 = cc(2,3,k) - cc(2,4,k)
+      ti3 = cc(2,3,k) + cc(2,4,k)
+      tr5 = cc(1,2,k) - cc(1,5,k)
+      tr2 = cc(1,2,k) + cc(1,5,k)
+      tr4 = cc(1,3,k) - cc(1,4,k)
+      tr3 = cc(1,3,k) + cc(1,4,k)
+
+      ch(1,k,1) = cc(1,1,k) + tr2 + tr3
+      ch(2,k,1) = cc(2,1,k) + ti2 + ti3
+
+      cr2 = cc(1,1,k) + tr11 * tr2 + tr12 * tr3
+      ci2 = cc(2,1,k) + tr11 * ti2 + tr12 * ti3
+      cr3 = cc(1,1,k) + tr12 * tr2 + tr11 * tr3
+      ci3 = cc(2,1,k) + tr12 * ti2 + tr11 * ti3
+
+      cr5 = ti11 * tr5 + ti12 * tr4
+      ci5 = ti11 * ti5 + ti12 * ti4
+      cr4 = ti12 * tr5 - ti11 * tr4
+      ci4 = ti12 * ti5 - ti11 * ti4
+
+      ch(1,k,2) = cr2 - ci5
+      ch(1,k,5) = cr2 + ci5
+      ch(2,k,2) = ci2 + cr5
+      ch(2,k,3) = ci3 + cr4
+      ch(1,k,3) = cr3 - ci4
+      ch(1,k,4) = cr3 + ci4
+      ch(2,k,4) = ci3 - cr4
+      ch(2,k,5) = ci2 - cr5
+
+    end do
+
+  else
+
+    do k = 1, l1
+      do i = 2, ido, 2
+
+        ti5 = cc(i,2,k) - cc(i,5,k)
+        ti2 = cc(i,2,k) + cc(i,5,k)
+        ti4 = cc(i,3,k) - cc(i,4,k)
+        ti3 = cc(i,3,k) + cc(i,4,k)
+
+        tr5 = cc(i-1,2,k) - cc(i-1,5,k)
+        tr2 = cc(i-1,2,k) + cc(i-1,5,k)
+        tr4 = cc(i-1,3,k) - cc(i-1,4,k)
+        tr3 = cc(i-1,3,k) + cc(i-1,4,k)
+
+        ch(i-1,k,1) = cc(i-1,1,k) + tr2 + tr3
+        ch(i,k,1)   = cc(i,1,k)   + ti2 + ti3
+
+        cr2 = cc(i-1,1,k) + tr11 * tr2 + tr12 * tr3
+        ci2 = cc(i,1,k)   + tr11 * ti2 + tr12 * ti3
+        cr3 = cc(i-1,1,k) + tr12 * tr2 + tr11 * tr3
+        ci3 = cc(i,1,k)   + tr12 * ti2 + tr11 * ti3
+
+        cr5 = ti11 * tr5 + ti12 * tr4
+        ci5 = ti11 * ti5 + ti12 * ti4
+        cr4 = ti12 * tr5 - ti11 * tr4
+        ci4 = ti12 * ti5 - ti11 * ti4
+
+        dr3 = cr3 - ci4
+        dr4 = cr3 + ci4
+        di3 = ci3 + cr4
+        di4 = ci3 - cr4
+        dr5 = cr2 + ci5
+        dr2 = cr2 - ci5
+        di5 = ci2 - cr5
+        di2 = ci2 + cr5
+
+        ch(i-1,k,2) = wa1(i-1) * dr2 - wa1(i) * di2
+        ch(i,k,2)   = wa1(i-1) * di2 + wa1(i) * dr2
+        ch(i-1,k,3) = wa2(i-1) * dr3 - wa2(i) * di3
+        ch(i,k,3)   = wa2(i-1) * di3 + wa2(i) * dr3
+        ch(i-1,k,4) = wa3(i-1) * dr4 - wa3(i) * di4
+        ch(i,k,4)   = wa3(i-1) * di4 + wa3(i) * dr4
+        ch(i-1,k,5) = wa4(i-1) * dr5 - wa4(i) * di5
+        ch(i,k,5)   = wa4(i-1) * di5 + wa4(i) * dr5
+
+      end do
+    end do
+
+  end if
+
+  return
+end
+subroutine passf ( nac, ido, ip, l1, idl1, cc, c1, c2, ch, ch2, wa )
+!
+!*******************************************************************************
+!
+!! PASSF is a lower level routine used by CFFTF1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer idl1
+  integer ido
+  integer ip
+  integer l1
+!
+  real c1(ido,l1,ip)
+  real c2(idl1,ip)
+  real cc(ido,ip,l1)
+  real ch(ido,l1,ip)
+  real ch2(idl1,ip)
+  integer i
+  integer idij
+  integer idj
+  integer idl
+  integer idlj
+  integer idp
+  integer ik
+  integer inc
+  integer ipph
+  integer j
+  integer jc
+  integer k
+  integer l
+  integer lc
+  integer nac
+  integer nt
+  real wa(*)
+  real wai
+  real war
+!
+  nt = ip * idl1
+  ipph = (ip+1) / 2
+  idp = ip * ido
+
+  if ( ido >= l1 ) then
+
+    do j = 2, ipph
+      jc = ip + 2 - j
+      ch(1:ido,1:l1,j)  = cc(1:ido,j,1:l1) + cc(1:ido,jc,1:l1)
+      ch(1:ido,1:l1,jc) = cc(1:ido,j,1:l1) - cc(1:ido,jc,1:l1)
+    end do
+
+    ch(1:ido,1:l1,1) = cc(1:ido,1,1:l1)
+
+  else
+
+    do j = 2, ipph
+      jc = ip + 2 - j
+      ch(1:ido,1:l1,j)  = cc(1:ido,j,1:l1) + cc(1:ido,jc,1:l1)
+      ch(1:ido,1:l1,jc) = cc(1:ido,j,1:l1) - cc(1:ido,jc,1:l1)
+    end do
+
+    ch(1:ido,1:l1,1) = cc(1:ido,1,1:l1)
+
+  end if
+
+  idl = 2 - ido
+  inc = 0
+
+  do l = 2, ipph
+
+    lc = ip + 2 - l
+    idl = idl + ido
+
+    do ik = 1, idl1
+      c2(ik,l)  = ch2(ik,1) + wa(idl-1) * ch2(ik,2)
+      c2(ik,lc) =           - wa(idl)   * ch2(ik,ip)
+    end do
+
+    idlj = idl
+    inc = inc + ido
+
+    do j = 3, ipph
+
+      jc = ip + 2 - j
+
+      idlj = idlj + inc
+      if ( idlj > idp ) then
+        idlj = idlj - idp
+      end if
+
+      war = wa(idlj-1)
+      wai = wa(idlj)
+
+      do ik = 1, idl1
+        c2(ik,l)  = c2(ik,l)  + war * ch2(ik,j)
+        c2(ik,lc) = c2(ik,lc) - wai * ch2(ik,jc)
+      end do
+
+    end do
+
+  end do
+
+  do j = 2, ipph
+    ch2(1:idl1,1) = ch2(1:idl1,1) + ch2(1:idl1,j)
+  end do
+
+  do j = 2, ipph
+    jc = ip + 2 - j
+    do ik = 2, idl1, 2
+      ch2(ik-1,j)  = c2(ik-1,j) - c2(ik,jc)
+      ch2(ik-1,jc) = c2(ik-1,j) + c2(ik,jc)
+      ch2(ik,j)    = c2(ik,j)   + c2(ik-1,jc)
+      ch2(ik,jc)   = c2(ik,j)   - c2(ik-1,jc)
+    end do
+  end do
+
+  if ( ido == 2 ) then
+    nac = 1
+    return
+  end if
+
+  nac = 0
+
+  c2(1:idl1,1)    = ch2(1:idl1,1)
+  c1(1,1:l1,2:ip) = ch(1,1:l1,2:ip)
+  c1(2,1:l1,2:ip) = ch(2,1:l1,2:ip)
+
+  if ( ( ido / 2 ) <= l1 ) then
+
+    idij = 0
+    do j = 2, ip
+      idij = idij + 2
+      do i = 4, ido, 2
+        idij = idij + 2
+        c1(i-1,1:l1,j) = wa(idij-1) * ch(i-1,1:l1,j) + wa(idij) * ch(i,1:l1,j)
+        c1(i,1:l1,j)   = wa(idij-1) * ch(i,1:l1,j)   - wa(idij) * ch(i-1,1:l1,j)
+      end do
+    end do
+
+  else
+
+    idj = 2 - ido
+
+    do j = 2, ip
+      idj = idj + ido
+      do k = 1, l1
+        idij = idj
+        do i = 4, ido, 2
+          idij = idij + 2
+          c1(i-1,k,j) = wa(idij-1) * ch(i-1,k,j) + wa(idij) * ch(i,k,j)
+          c1(i,k,j)   = wa(idij-1) * ch(i,k,j)   - wa(idij) * ch(i-1,k,j)
+        end do
+      end do
+    end do
+
+  end if
+
+  return
+end
+subroutine passf2 ( ido, l1, cc, ch, wa1 )
+!
+!*******************************************************************************
+!
+!! PASSF2 is a lower level routine used by CFFTF1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,2,l1)
+  real ch(ido,l1,2)
+  integer i
+  integer k
+  real ti2
+  real tr2
+  real wa1(ido)
+!
+  if ( ido <= 2 ) then
+
+    ch(1,1:l1,1) = cc(1,1,1:l1) + cc(1,2,1:l1)
+    ch(1,1:l1,2) = cc(1,1,1:l1) - cc(1,2,1:l1)
+    ch(2,1:l1,1) = cc(2,1,1:l1) + cc(2,2,1:l1)
+    ch(2,1:l1,2) = cc(2,1,1:l1) - cc(2,2,1:l1)
+
+  else
+
+    do k = 1, l1
+      do i = 2, ido, 2
+
+        ch(i-1,k,1) = cc(i-1,1,k) + cc(i-1,2,k)
+        tr2         = cc(i-1,1,k) - cc(i-1,2,k)
+
+        ch(i,k,1) = cc(i,1,k) + cc(i,2,k)
+        ti2       = cc(i,1,k) - cc(i,2,k)
+
+        ch(i,k,2)   = wa1(i-1) * ti2 - wa1(i) * tr2
+        ch(i-1,k,2) = wa1(i-1) * tr2 + wa1(i) * ti2
+
+      end do
+    end do
+
+  end if
+
+  return
+end
+subroutine passf3 ( ido, l1, cc, ch, wa1, wa2 )
+!
+!*******************************************************************************
+!
+!! PASSF3 is a lower level routine used by CFFTF1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,3,l1)
+  real ch(ido,l1,3)
+  real ci2
+  real ci3
+  real cr2
+  real cr3
+  real di2
+  real di3
+  real dr2
+  real dr3
+  integer i
+  integer k
+  real, parameter :: taui = -0.866025403784439E+00
+  real, parameter :: taur = -0.5E+00
+  real ti2
+  real tr2
+  real wa1(ido)
+  real wa2(ido)
+!
+  if ( ido == 2 ) then
+
+    do k = 1, l1
+
+      tr2 = cc(1,2,k) + cc(1,3,k)
+      cr2 = cc(1,1,k) + taur * tr2
+      ch(1,k,1) = cc(1,1,k) + tr2
+
+      ti2 = cc(2,2,k) + cc(2,3,k)
+      ci2 = cc(2,1,k) + taur * ti2
+      ch(2,k,1) = cc(2,1,k) + ti2
+
+      cr3 = taui * ( cc(1,2,k) - cc(1,3,k) )
+      ci3 = taui * ( cc(2,2,k) - cc(2,3,k) )
+
+      ch(1,k,2) = cr2 - ci3
+      ch(1,k,3) = cr2 + ci3
+      ch(2,k,2) = ci2 + cr3
+      ch(2,k,3) = ci2 - cr3
+
+    end do
+
+  else
+
+    do k = 1, l1
+      do i = 2, ido, 2
+
+        tr2 = cc(i-1,2,k) + cc(i-1,3,k)
+        cr2 = cc(i-1,1,k) + taur * tr2
+        ch(i-1,k,1) = cc(i-1,1,k) + tr2
+
+        ti2 = cc(i,2,k) + cc(i,3,k)
+        ci2 = cc(i,1,k) + taur * ti2
+        ch(i,k,1) = cc(i,1,k) + ti2
+
+        cr3 = taui * ( cc(i-1,2,k) - cc(i-1,3,k) )
+        ci3 = taui * ( cc(i,2,k)   - cc(i,3,k) )
+
+        dr2 = cr2 - ci3
+        dr3 = cr2 + ci3
+        di2 = ci2 + cr3
+        di3 = ci2 - cr3
+
+        ch(i,k,2)   = wa1(i-1) * di2 - wa1(i) * dr2
+        ch(i-1,k,2) = wa1(i-1) * dr2 + wa1(i) * di2
+        ch(i,k,3)   = wa2(i-1) * di3 - wa2(i) * dr3
+        ch(i-1,k,3) = wa2(i-1) * dr3 + wa2(i) * di3
+
+      end do
+    end do
+
+  end if
+
+  return
+end
+subroutine passf4 ( ido, l1, cc, ch, wa1, wa2, wa3 )
+!
+!*******************************************************************************
+!
+!! PASSF4 is a lower level routine used by CFFTF1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,4,l1)
+  real ch(ido,l1,4)
+  real ci1
+  real ci2
+  real ci3
+  real ci4
+  real cr1
+  real cr2
+  real cr3
+  real cr4
+  integer i
+  integer k
+  real ti1
+  real ti2
+  real ti3
+  real ti4
+  real tr1
+  real tr2
+  real tr3
+  real tr4
+  real wa1(ido)
+  real wa2(ido)
+  real wa3(ido)
+!
+  if ( ido == 2 ) then
+
+    do k = 1, l1
+
+      ti1 = cc(2,1,k) - cc(2,3,k)
+      ti2 = cc(2,1,k) + cc(2,3,k)
+      tr4 = cc(2,2,k) - cc(2,4,k)
+      ti3 = cc(2,2,k) + cc(2,4,k)
+      tr1 = cc(1,1,k) - cc(1,3,k)
+      tr2 = cc(1,1,k) + cc(1,3,k)
+      ti4 = cc(1,4,k) - cc(1,2,k)
+      tr3 = cc(1,2,k) + cc(1,4,k)
+
+      ch(1,k,1) = tr2 + tr3
+      ch(1,k,3) = tr2 - tr3
+      ch(2,k,1) = ti2 + ti3
+      ch(2,k,3) = ti2 - ti3
+      ch(1,k,2) = tr1 + tr4
+      ch(1,k,4) = tr1 - tr4
+      ch(2,k,2) = ti1 + ti4
+      ch(2,k,4) = ti1 - ti4
+
+    end do
+
+  else
+
+    do k = 1, l1
+      do i = 2, ido, 2
+
+        ti1 = cc(i,1,k)   - cc(i,3,k)
+        ti2 = cc(i,1,k)   + cc(i,3,k)
+        ti3 = cc(i,2,k)   + cc(i,4,k)
+        tr4 = cc(i,2,k)   - cc(i,4,k)
+        tr1 = cc(i-1,1,k) - cc(i-1,3,k)
+        tr2 = cc(i-1,1,k) + cc(i-1,3,k)
+        ti4 = cc(i-1,4,k) - cc(i-1,2,k)
+        tr3 = cc(i-1,2,k) + cc(i-1,4,k)
+
+        ch(i-1,k,1) = tr2 + tr3
+        cr3         = tr2 - tr3
+        ch(i,k,1)   = ti2 + ti3
+        ci3         = ti2 - ti3
+
+        cr2 = tr1 + tr4
+        cr4 = tr1 - tr4
+        ci2 = ti1 + ti4
+        ci4 = ti1 - ti4
+
+        ch(i-1,k,2) = wa1(i-1) * cr2 + wa1(i) * ci2
+        ch(i,k,2)   = wa1(i-1) * ci2 - wa1(i) * cr2
+        ch(i-1,k,3) = wa2(i-1) * cr3 + wa2(i) * ci3
+        ch(i,k,3)   = wa2(i-1) * ci3 - wa2(i) * cr3
+        ch(i-1,k,4) = wa3(i-1) * cr4 + wa3(i) * ci4
+        ch(i,k,4)   = wa3(i-1) * ci4 - wa3(i) * cr4
+
+      end do
+    end do
+
+  end if
+
+  return
+end
+subroutine passf5 ( ido, l1, cc, ch, wa1, wa2, wa3, wa4 )
+!
+!*******************************************************************************
+!
+!! PASSF5 is a lower level routine used by CFFTF1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,5,l1)
+  real ch(ido,l1,5)
+  real ci2
+  real ci3
+  real ci4
+  real ci5
+  real cr2
+  real cr3
+  real cr4
+  real cr5
+  real di2
+  real di3
+  real di4
+  real di5
+  real dr2
+  real dr3
+  real dr4
+  real dr5
+  integer i
+  integer k
+  real, parameter :: ti11 = -0.951056516295154E+00
+  real, parameter :: ti12 = -0.587785252292473E+00
+  real ti2
+  real ti3
+  real ti4
+  real ti5
+  real tr2
+  real tr3
+  real tr4
+  real tr5
+  real, parameter :: tr11 =  0.309016994374947E+00
+  real, parameter :: tr12 = -0.809016994374947E+00
+  real wa1(ido)
+  real wa2(ido)
+  real wa3(ido)
+  real wa4(ido)
+!
+  if ( ido == 2 ) then
+
+    do k = 1, l1
+
+      ti5 = cc(2,2,k) - cc(2,5,k)
+      ti2 = cc(2,2,k) + cc(2,5,k)
+      ti4 = cc(2,3,k) - cc(2,4,k)
+      ti3 = cc(2,3,k) + cc(2,4,k)
+      tr5 = cc(1,2,k) - cc(1,5,k)
+      tr2 = cc(1,2,k) + cc(1,5,k)
+      tr4 = cc(1,3,k) - cc(1,4,k)
+      tr3 = cc(1,3,k) + cc(1,4,k)
+
+      ch(1,k,1) = cc(1,1,k) + tr2 + tr3
+      ch(2,k,1) = cc(2,1,k) + ti2 + ti3
+
+      cr2 = cc(1,1,k) + tr11 * tr2 + tr12 * tr3
+      ci2 = cc(2,1,k) + tr11 * ti2 + tr12 * ti3
+      cr3 = cc(1,1,k) + tr12 * tr2 + tr11 * tr3
+      ci3 = cc(2,1,k) + tr12 * ti2 + tr11 * ti3
+
+      cr5 = ti11 * tr5 + ti12 * tr4
+      ci5 = ti11 * ti5 + ti12 * ti4
+      cr4 = ti12 * tr5 - ti11 * tr4
+      ci4 = ti12 * ti5 - ti11 * ti4
+
+      ch(1,k,2) = cr2 - ci5
+      ch(1,k,5) = cr2 + ci5
+      ch(2,k,2) = ci2 + cr5
+      ch(2,k,3) = ci3 + cr4
+      ch(1,k,3) = cr3 - ci4
+      ch(1,k,4) = cr3 + ci4
+      ch(2,k,4) = ci3 - cr4
+      ch(2,k,5) = ci2 - cr5
+
+    end do
+
+  else
+
+    do k = 1, l1
+      do i = 2, ido, 2
+
+        ti5 = cc(i,2,k) - cc(i,5,k)
+        ti2 = cc(i,2,k) + cc(i,5,k)
+        ti4 = cc(i,3,k) - cc(i,4,k)
+        ti3 = cc(i,3,k) + cc(i,4,k)
+
+        tr5 = cc(i-1,2,k) - cc(i-1,5,k)
+        tr2 = cc(i-1,2,k) + cc(i-1,5,k)
+        tr4 = cc(i-1,3,k) - cc(i-1,4,k)
+        tr3 = cc(i-1,3,k) + cc(i-1,4,k)
+
+        ch(i-1,k,1) = cc(i-1,1,k) + tr2 + tr3
+        ch(i,k,1)   = cc(i,1,k)   + ti2 + ti3
+
+        cr2 = cc(i-1,1,k) + tr11 * tr2 + tr12 * tr3
+        ci2 = cc(i,1,k)   + tr11 * ti2 + tr12 * ti3
+        cr3 = cc(i-1,1,k) + tr12 * tr2 + tr11 * tr3
+        ci3 = cc(i,1,k)   + tr12 * ti2 + tr11 * ti3
+
+        cr5 = ti11 * tr5 + ti12 * tr4
+        ci5 = ti11 * ti5 + ti12 * ti4
+        cr4 = ti12 * tr5 - ti11 * tr4
+        ci4 = ti12 * ti5 - ti11 * ti4
+
+        dr3 = cr3 - ci4
+        dr4 = cr3 + ci4
+        di3 = ci3 + cr4
+        di4 = ci3 - cr4
+        dr5 = cr2 + ci5
+        dr2 = cr2 - ci5
+        di5 = ci2 - cr5
+        di2 = ci2 + cr5
+
+        ch(i-1,k,2) = wa1(i-1) * dr2 + wa1(i) * di2
+        ch(i,k,2)   = wa1(i-1) * di2 - wa1(i) * dr2
+        ch(i-1,k,3) = wa2(i-1) * dr3 + wa2(i) * di3
+        ch(i,k,3)   = wa2(i-1) * di3 - wa2(i) * dr3
+        ch(i-1,k,4) = wa3(i-1) * dr4 + wa3(i) * di4
+        ch(i,k,4)   = wa3(i-1) * di4 - wa3(i) * dr4
+        ch(i-1,k,5) = wa4(i-1) * dr5 + wa4(i) * di5
+        ch(i,k,5)   = wa4(i-1) * di5 - wa4(i) * dr5
+
+      end do
+    end do
+
+  end if
+
+  return
+end
+subroutine pchce(ic,vc,n,x,h,slope,d,incfd,ierr)
+!
+!*******************************************************************************
+!
+!! PCHCE is called by pchic to set end derivatives as requested by the user.
+!
+!
+!    it must be called after interior derivative values have been set.
+!
+!
+!    to facilitate two-dimensional applications, includes an increment
+!    between successive values of the d-array.
+!
+!  Parameters:
+!
+!     ic -- (input) integer array of length 2 specifying desired
+!           boundary conditions:
+!           ic(1) = ibeg, desired condition at beginning of data.
+!           ic(2) = iend, desired condition at end of data.
+!           ( see prologue to pchic for details. )
+!
+!     vc -- (input) real array of length 2 specifying desired boundary
+!           values.  vc(1) need be set only if ic(1) = 2 or 3 .
+!                    vc(2) need be set only if ic(2) = 2 or 3 .
+!
+!     n -- (input) number of data points.  (assumes n>=2)
+!
+!     x -- (input) real array of independent variable values.  (the
+!           elements of x are assumed to be strictly increasing.)
+!
+!     h -- (input) real array of interval lengths.
+!     slope -- (input) real array of data slopes.
+!           if the data are (x(i),y(i)), i=1(1)n, then these inputs are:
+!                  h(i) =  x(i+1)-x(i),
+!              slope(i) = (y(i+1)-y(i))/h(i),  i=1(1)n-1.
+!
+!     d -- (input) real array of derivative values at the data points.
+!           the value corresponding to x(i) must be stored in
+!                d(1+(i-1)*incfd),  i=1(1)n.
+!          (output) the value of d at x(1) and/or x(n) is changed, if
+!           necessary, to produce the requested boundary conditions.
+!           no other entries in d are changed.
+!
+!     incfd -- (input) increment between successive values in d.
+!           this argument is provided primarily for 2-d applications.
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           warning errors:
+!              ierr = 1  if ibeg<0 and d(1) had to be adjusted for
+!                        monotonicity.
+!              ierr = 2  if iend<0 and d(1+(n-1)*incfd) had to be
+!                        adjusted for monotonicity.
+!              ierr = 3  if both of the above are true.
+!
+!  programming notes:
+!
+!     1. the function  pchst(arg1,arg2)  is assumed to return zero if
+!        either argument is zero, +1 if they are of the same sign, and
+!        -1 if they are of opposite sign.
+!     3. one could reduce the number of arguments and amount of local
+!        storage, at the expense of reduced code clarity, by passing in
+!        the array wk (rather than splitting it into h and slope) and
+!        increasing its length enough to incorporate stemp and xtemp.
+!     4. the two monotonicity checks only use the sufficient conditions.
+!        thus, it is possible (but unlikely) for a boundary condition to
+!        be changed, even though the original interpolant was monotonic.
+!        (at least the result is a continuous function of the data.)
+!
+  integer incfd
+  integer n
+!
+  real d(incfd,n)
+  real h(n)
+  integer ibeg
+  integer ic(2)
+  integer iend
+  integer ierf
+  integer ierr
+  integer index
+  integer j
+  integer k
+  real pchdf
+  real pchst
+  real slope(n)
+  real stemp(3)
+  real vc(2)
+  real x(n)
+  real xtemp(4)
+!
+  ibeg = ic(1)
+  iend = ic(2)
+  ierr = 0
+!
+!  set to default boundary conditions if n is too small.
+!
+  if ( abs(ibeg)>n )  ibeg = 0
+  if ( abs(iend)>n )  iend = 0
+!
+!  treat beginning boundary condition.
+!
+  if (ibeg == 0)  go to 2000
+
+  k = abs(ibeg)
+  if (k == 1)  then
+!        boundary value provided.
+     d(1,1) = vc(1)
+  else if (k == 2)  then
+!        boundary second derivative provided.
+!
+     d(1,1) = 0.5 *( (3.0*slope(1) - d(1,2)) - 0.5*vc(1)*h(1) )
+  else if (k < 5)  then
+!        use k-point derivative formula.
+!        pick up first k points, in reverse order.
+!
+     do j = 1, k
+        index = k-j+1
+        xtemp(j) = x(index)
+        if (j < k)  stemp(j) = slope(index-1)
+     end do
+
+     d(1,1) = pchdf (k, xtemp, stemp, ierf)
+
+     if (ierf /= 0)  go to 5001
+  else
+!        use 'not a knot' condition.
+     d(1,1) = ( 3.0*(h(1)*slope(2) + h(2)*slope(1)) &
+       - 2.0E+00 * (h(1)+h(2))*d(1,2) - h(1)*d(1,3) ) / h(2)
+  end if
+!
+!  check d(1,1) for compatibility with monotonicity.
+!
+  if ( ibeg <= 0 ) then
+
+    if (slope(1) == 0.0)  then
+      if (d(1,1) /= 0.0)  then
+        d(1,1) = 0.0E+00
+        ierr = ierr + 1
+      end if
+    else if ( pchst(d(1,1),slope(1)) < 0.0)  then
+      d(1,1) = 0.0E+00
+      ierr = ierr + 1
+    else if ( abs(d(1,1)) > 3.0*abs(slope(1)) )  then
+      d(1,1) = 3.0*slope(1)
+      ierr = ierr + 1
+    end if
+
+  end if
+
+2000 continue
+!
+!  treat end boundary condition.
+!
+  if (iend == 0)  go to 5000
+  k = abs(iend)
+  if (k == 1)  then
+!        boundary value provided.
+     d(1,n) = vc(2)
+  else if (k == 2)  then
+!        boundary second derivative provided.
+     d(1,n) = 0.5 *( (3.0*slope(n-1) - d(1,n-1)) + 0.5 *vc(2)*h(n-1) )
+  else if (k < 5)  then
+!
+!  use k-point derivative formula.  pick up last k points.
+!
+     do j = 1, k
+        index = n-k+j
+        xtemp(j) = x(index)
+        if (j < k)  stemp(j) = slope(index)
+     end do
+
+     d(1,n) = pchdf (k, xtemp, stemp, ierf)
+
+     if (ierf /= 0)  go to 5001
+  else
+!        use 'not a knot' condition.
+     d(1,n) = ( 3.0*(h(n-1)*slope(n-2) + h(n-2)*slope(n-1)) &
+       - 2.0E+00 * (h(n-1)+h(n-2))*d(1,n-1) - h(n-1)*d(1,n-2) ) / h(n-2)
+  end if
+!
+  if (iend > 0)  go to 5000
+!
+!  check d(1,n) for compatibility with monotonicity.
+!
+  if (slope(n-1) == 0.0)  then
+     if (d(1,n) /= 0.0)  then
+        d(1,n) = 0.0E+00
+        ierr = ierr + 2
+     end if
+  else if ( pchst(d(1,n),slope(n-1)) < 0.0)  then
+     d(1,n) = 0.0E+00
+     ierr = ierr + 2
+  else if ( abs(d(1,n)) > 3.0*abs(slope(n-1)) )  then
+     d(1,n) = 3.0*slope(n-1)
+     ierr = ierr + 2
+  end if
+!
+!  normal return.
+!
+ 5000 continue
+  return
+!
+!  error return.
+!
+ 5001 continue
+!     error return from pchdf.
+!  This case should never occur.
+!
+  ierr = -1
+  call xerror ('pchce -- error return from pchdf', 32, ierr, 1)
+  return
+end
+subroutine pchci(n,h,slope,d,incfd)
+!
+!*******************************************************************************
+!
+!! PCHCI sets derivatives for a monotone piecewise cubic hermite interpolant.
+!
+!
+!  Discussion:
+!
+!    default boundary conditions are provided which are compatible
+!    with monotonicity.  if the data are only piecewise monotonic, the
+!    interpolant will have an extremum at each point where monotonicity
+!    switches direction.
+!
+!    to facilitate two-dimensional applications, includes an increment
+!    between successive values of the d-array.
+!
+!    the resulting piecewise cubic hermite function should be identical
+!    (within roundoff error) to that produced by pchim.
+!
+!  Parameters:
+!
+!     n -- (input) number of data points.
+!           if n=2, simply does linear interpolation.
+!
+!     h -- (input) real array of interval lengths.
+!     slope -- (input) real array of data slopes.
+!           if the data are (x(i),y(i)), i=1(1)n, then these inputs are:
+!                  h(i) =  x(i+1)-x(i),
+!              slope(i) = (y(i+1)-y(i))/h(i),  i=1(1)n-1.
+!
+!     d -- (output) real array of derivative values at the data points.
+!           if the data are monotonic, these values will determine a
+!           a monotone cubic hermite function.
+!           the value corresponding to x(i) is stored in
+!                d(1+(i-1)*incfd),  i=1(1)n.
+!           no other entries in d are changed.
+!
+!     incfd -- (input) increment between successive values in d.
+!           this argument is provided primarily for 2-d applications.
+!
+!  programmed by:  fred n. fritsch,  fts 532-4275, (415) 422-4275,
+!                  mathematics and statistics division,
+!                  lawrence livermore national laboratory.
+!
+!  programming notes:
+!
+!     1. the function  pchst(arg1,arg2)  is assumed to return zero if
+!        either argument is zero, +1 if they are of the same sign, and
+!        -1 if they are of opposite sign.
+!
+  integer incfd
+  integer n
+!
+  real d(incfd,n)
+  real del1
+  real del2
+  real dmax
+  real dmin
+  real drat1
+  real drat2
+  real h(n)
+  real hsum
+  real hsumt3
+  integer i
+  integer nless1
+  real pchst
+  real slope(n)
+  real w1
+  real w2
+!
+  nless1 = n - 1
+  del1 = slope(1)
+!
+!  special case n=2 -- use linear interpolation.
+!
+  if (nless1 > 1)  go to 10
+  d(1,1) = del1
+  d(1,n) = del1
+  go to 5000
+!
+!  normal case  (n >= 3).
+!
+   10 continue
+  del2 = slope(2)
+!
+!  set d(1) via non-centered three-point formula, adjusted to be shape-preserving.
+!
+  hsum = h(1) + h(2)
+  w1 = (h(1) + hsum)/hsum
+  w2 = -h(1)/hsum
+  d(1,1) = w1*del1 + w2*del2
+
+  if ( pchst(d(1,1),del1) <= 0.0)  then
+     d(1,1) = 0.0E+00
+  else if ( pchst(del1,del2) < 0.0)  then
+!        need do this check only if monotonicity switches.
+     dmax = 3.0*del1
+     if (abs(d(1,1)) > abs(dmax))  d(1,1) = dmax
+  end if
+!
+!  loop through interior points.
+!
+  do i = 2, nless1
+
+    if (i /= 2)  then
+      hsum = h(i-1) + h(i)
+      del1 = del2
+      del2 = slope(i)
+    end if
+!
+!  set d(i)=0 unless data are strictly monotonic.
+!
+    d(1,i) = 0.0E+00
+!
+!  use brodlie modification of butland formula.
+!
+    if ( pchst(del1,del2) > 0.0E+00 ) then
+
+      hsumt3 = hsum+hsum+hsum
+      w1 = (hsum + h(i-1))/hsumt3
+      w2 = (hsum + h(i)  )/hsumt3
+      dmax = max( abs(del1), abs(del2) )
+      dmin = min ( abs(del1), abs(del2) )
+      drat1 = del1/dmax
+      drat2 = del2/dmax
+      d(1,i) = dmin/(w1*drat1 + w2*drat2)
+
+    end if
+
+  end do
+!
+!  set d(n) via non-centered three-point formula, adjusted to be shape-preserving.
+!
+  w1 = -h(n-1)/hsum
+  w2 = (h(n-1) + hsum)/hsum
+  d(1,n) = w1*del1 + w2*del2
+
+  if ( pchst(d(1,n),del2) <= 0.0)  then
+    d(1,n) = 0.0E+00
+  else if ( pchst(del1,del2) < 0.0)  then
+    dmax = 3.0*del2
+    if (abs(d(1,n)) > abs(dmax)) then
+      d(1,n) = dmax
+    end if
+  end if
+
+ 5000 continue
+  return
+end
+subroutine pchcs(switch,n,h,slope,d,incfd,ierr)
+!
+!*******************************************************************************
+!
+!! PCHCS is called by  pchic  to adjust the values of d in the vicinity of a
+!     switch in direction of monotonicity, to produce a more "visually
+!     pleasing" curve than that given by  pchim .
+!
+!  Parameters:
+!
+!     switch -- (input) indicates the amount of control desired over
+!           local excursions from data.
+!
+!     n -- (input) number of data points.  (assumes n>2 .)
+!
+!     h -- (input) real array of interval lengths.
+!     slope -- (input) real array of data slopes.
+!           if the data are (x(i),y(i)), i=1(1)n, then these inputs are:
+!                  h(i) =  x(i+1)-x(i),
+!              slope(i) = (y(i+1)-y(i))/h(i),  i=1(1)n-1.
+!
+!     d -- (input) real array of derivative values at the data points,
+!           as determined by pchci.
+!          (output) derivatives in the vicinity of switches in direction
+!           of monotonicity may be adjusted to produce a more "visually
+!           pleasing" curve.
+!           the value corresponding to x(i) is stored in
+!                d(1+(i-1)*incfd),  i=1(1)n.
+!           no other entries in d are changed.
+!
+!     incfd -- (input) increment between successive values in d.
+!           this argument is provided primarily for 2-d applications.
+!
+!     ierr -- (output) error flag.  should be zero.
+!           if negative, trouble in pchsw.  (should never happen.)
+!
+!    warning:  this routine does no validity-checking of arguments.
+!
+!  programmed by:  fred n. fritsch,  fts 532-4275, (415) 422-4275,
+!                  mathematics and statistics division,
+!                  lawrence livermore national laboratory.
+!
+!  programming notes:
+!
+!     1. the function  pchst(arg1,arg2)  is assumed to return zero if
+!        either argument is zero, +1 if they are of the same sign, and
+!        -1 if they are of opposite sign.
+!
+  integer incfd
+  integer n
+!
+  real d(incfd,n)
+  real h(n)
+  integer ierr
+  real slope(n)
+  real switch
+
+  integer  i, indx, k, nless1
+  real  del(3), dext, dfloc, dfmx, fact, fudge, slmax
+  real wtave(2)
+  real  pchst
+!
+!  define inline function for weighted average of slopes.
+!
+  real  pchsd, s1, s2, h1, h2
+  pchsd(s1,s2,h1,h2) = (h2/(h1+h2))*s1 + (h1/(h1+h2))*s2
+!
+!  initialize.
+!
+  data  fudge /4./
+!
+  ierr = 0
+  nless1 = n - 1
+!
+!  loop over segments.
+!
+  do 900  i = 2, nless1
+
+     if ( pchst(slope(i-1),slope(i)) )  100, 300, 900
+
+  100    continue
+!
+!  slope switches monotonicity at i-th point
+!
+!           do not change d if 'up-down-up'.
+        if (i > 2)  then
+           if ( pchst(slope(i-2),slope(i)) > 0.0)  go to 900
+
+        end if
+        if (i < nless1)  then
+           if ( pchst(slope(i+1),slope(i-1)) > 0.0)  go to 900
+
+        end if
+!
+!  compute provisional value for d(1,i).
+!
+        dext = pchsd (slope(i-1), slope(i), h(i-1), h(i))
+!
+!  determine which interval contains the extremum.
+!
+        if ( pchst(dext, slope(i-1)) )  200, 900, 250
+!
+  200       continue
+!              dext and slope(i-1) have opposite signs --
+!                        extremum is in (x(i-1),x(i)).
+           k = i-1
+!              set up to compute new values for d(1,i-1) and d(1,i).
+           wtave(2) = dext
+           if (k > 1) then
+             wtave(1) = pchsd (slope(k-1), slope(k), h(k-1), h(k))
+           end if
+           go to 400
+!
+  250       continue
+!              dext and slope(i) have opposite signs --
+!                        extremum is in (x(i),x(i+1)).
+           k = i
+!              set up to compute new values for d(1,i) and d(1,i+1).
+           wtave(1) = dext
+           if (k < nless1) then
+             wtave(2) = pchsd (slope(k), slope(k+1), h(k), h(k+1))
+           end if
+           go to 400
+!
+  300    continue
+!
+!  at least one of slope(i-1) and slope(i) is zero
+!  check for flat-topped peak
+!
+        if (i == nless1)  go to 900
+        if ( pchst(slope(i-1), slope(i+1)) >= 0.0)  go to 900
+
+!
+!           we have flat-topped peak on (x(i),x(i+1)).
+!
+        k = i
+!           set up to compute new values for d(1,i) and d(1,i+1).
+        wtave(1) = pchsd (slope(k-1), slope(k), h(k-1), h(k))
+        wtave(2) = pchsd (slope(k), slope(k+1), h(k), h(k+1))
+!
+  400    continue
+!
+!  at this point we have determined that there will be an extremum
+!        on (x(k),x(k+1)), where k=i or i-1, and have set array wtave--
+!           wtave(1) is a weighted average of slope(k-1) and slope(k),
+!                    if k>1
+!           wtave(2) is a weighted average of slope(k) and slope(k+1),
+!                    if k<n-1
+!
+     slmax = abs(slope(k))
+     if (k > 1)    slmax = max ( slmax, abs(slope(k-1)) )
+     if (k<nless1) slmax = max ( slmax, abs(slope(k+1)) )
+!
+     if (k > 1)  del(1) = slope(k-1) / slmax
+     del(2) = slope(k) / slmax
+     if (k<nless1)  del(3) = slope(k+1) / slmax
+!
+     if ((k>1) .and. (k<nless1))  then
+!           normal case -- extremum is not in a boundary interval.
+        fact = fudge* abs(del(3)*(del(1)-del(2))*(wtave(2)/slmax))
+        d(1,k) = d(1,k) + min (fact,1.0)*(wtave(1) - d(1,k))
+        fact = fudge* abs(del(1)*(del(3)-del(2))*(wtave(1)/slmax))
+        d(1,k+1) = d(1,k+1) + min (fact,1.0)*(wtave(2) - d(1,k+1))
+     else
+!           special case k=1 (which can occur only if i=2) or
+!                        k=nless1 (which can occur only if i=nless1).
+        fact = fudge* abs(del(2))
+        d(1,i) = min (fact,1.0) * wtave(i-k+1)
+!              note that i-k+1 = 1 if k=i  (=nless1),
+!                        i-k+1 = 2 if k=i-1(=1).
+     end if
+!
+!  adjust if necessary to limit excursions from data.
+!
+     if (switch <= 0.0)  go to 900
+
+     dfloc = h(k)*abs(slope(k))
+     if (k > 1)    dfloc = max ( dfloc, h(k-1)*abs(slope(k-1)) )
+     if (k<nless1) dfloc = max ( dfloc, h(k+1)*abs(slope(k+1)) )
+     dfmx = switch*dfloc
+     indx = i-k+1
+!        indx = 1 if k=i, 2 if k=i-1.
+
+     call pchsw (dfmx, indx, d(1,k), d(1,k+1), h(k), slope(k), ierr)
+
+     if (ierr /= 0)  return
+
+  900 continue
+
+  return
+end
+function pchdf ( k, x, s, ierr )
+!
+!*******************************************************************************
+!
+!! PCHDF approximates a derivative using divided differences of data.
+!
+!
+!  Discussion:
+!
+!    The routine uses a divided difference formulation to compute a K-point
+!    approximation to the derivative at X(K) based on the data in X and S.
+!
+!    It is called by PCHCE and PCHSP to compute 3- and 4-point boundary
+!    derivative approximations.
+!
+!  Reference:
+!
+!    Carl de Boor,
+!    a practical guide to splines,
+!    springer-verlag (new york, 1978), pp. 10-16.
+!
+!  Parameters:
+!
+!     on input:
+!        k      is the order of the desired derivative approximation.
+!               k must be at least 3 (error return if not).
+!        x      contains the k values of the independent variable.
+!               x need not be ordered, but the values **must** be
+!               distinct.  (not checked here.)
+!        s      contains the associated slope values:
+!                  s(i) = (f(i+1)-f(i))/(x(i+1)-x(i)), i=1(1)k-1.
+!               (note that s need only be of length k-1.)
+!
+!     on return:
+!        s      will be destroyed.
+!        ierr   will be set to -1 if k<2 .
+!        pchdf  will be set to the desired derivative approximation if
+!               ierr=0 or to zero if ierr=-1.
+!
+!  programmed by:  fred n. fritsch,  fts 532-4275, (415) 422-4275,
+!                  mathematics and statistics division,
+!                  lawrence livermore national laboratory.
+!
+  integer k
+!
+  integer i
+  integer ierr
+  integer j
+  real pchdf
+  real s(k)
+  real value
+  real x(k)
+!
+!  check for legal value of k.
+!
+  if (k < 3)  go to 5001
+!
+!  compute coefficients of interpolating polynomial.
+!
+  do j = 2, k-1
+    do i = 1, k-j
+      s(i) = (s(i+1)-s(i))/(x(i+j)-x(i))
+    end do
+  end do
+!
+!  evaluate derivative at x(k).
+!
+  value = s(1)
+
+  do i = 2, k-1
+    value = s(i) + value * ( x(k) - x(i) )
+  end do
+!
+!  normal return.
+!
+  ierr = 0
+  pchdf = value
+  return
+!
+!  error return.
+!
+ 5001 continue
+!     k<3 return.
+  ierr = -1
+  call xerror ('pchdf -- k less than three', 26, ierr, 1)
+  pchdf = 0.0E+00
+  return
+end
+subroutine pchev ( n, x, f, d, nval, xval, fval, dval, ierr )
+!
+!*******************************************************************************
+!
+!! PCHEV evaluates the function and first derivative of a piecewise
+!            cubic hermite or spline function at an array of points xval,
+!            easy to use.
+!
+!  Description
+!
+!          pchev:  piecewise cubic hermite or spline derivative evaluator,
+!                  easy to use.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!
+!     evaluates the function and first derivative of the cubic hermite
+!     or spline function defined by  n, x, f, d, at the array of points xval.
+!
+!     this is an easy to use driver for the routines by f.n. fritsch
+!     described in reference (2) below. those also have other capabilities.
+!
+!  Parameters:
+!
+!     n -- (input) number of data points.  (error return if n<2 .)
+!
+!     x -- (input) real array of independent variable values.  the
+!           elements of x must be strictly increasing:
+!             x(i-1) < x(i),  i = 2(1)n. (error return if not.)
+!
+!     f -- (input) real array of function values.  f(i) is
+!           the value corresponding to x(i).
+!
+!     d -- (input) real array of derivative values.  d(i) is
+!           the value corresponding to x(i).
+!
+!  nval -- (input) number of points at which the functions are to be
+!           evaluated. ( error return if nval<1 )
+!
+!  xval -- (input) real array of points at which the functions are to
+!           be evaluated.
+!
+!          notes:
+!           1. the evaluation will be most efficient if the elements
+!              of xval are increasing relative to x;
+!              that is,   xval(j) >= x(i)
+!              implies    xval(k) >= x(i),  all k>=j .
+!           2. if any of the xval are outside the interval [x(1),x(n)],
+!              values are extrapolated from the nearest extreme cubic,
+!              and a warning error is returned.
+!
+!  fval -- (output) real array of values of the cubic hermite function
+!           defined by  n, x, f, d  at the points  xval.
+!
+!  dval -- (output) real array of values of the first derivative of
+!           the same function at the points  xval.
+!
+!  ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           warning error:
+!              ierr>0  means that extrapolation was performed at
+!                 ierr points.
+!           "recoverable" errors:
+!              ierr = -1  if n<2 .
+!              ierr = -3  if the x-array is not strictly increasing.
+!              ierr = -4  if nval<1 .
+!           (output arrays have not been changed in any of these cases.)
+!               note:  the above errors are checked in the order listed,
+!                   and following arguments have **not** been validated.
+!              ierr = -5  if an error has occurred in the lower-level
+!                         routine chfdv.  nb: this should never happen.
+!                         notify the author **immediately** if it does.
+!
+!
+!  references  1. f.n.fritsch and r.e.carlson, 'monotone piecewise
+!                 cubic interpolation,' siam j.numer.anal. 17, 2 (april
+!                 1980), 238-246.
+!               2. f.n.fritsch, 'piecewise cubic hermite interpolation
+!                 package, final specifications', lawrence livermore
+!                 national laboratory, computer documentation ucid-30194,
+!                 august 1982.
+!
+  integer n
+  integer nval
+!
+  real d(n)
+  real dval(nval)
+  real f(n)
+  real fval(nval)
+  integer ierr
+  integer, save :: incfd = 1
+  logical, save :: skip = .true.
+  real x(n)
+  real xval(nval)
+!
+  call pchfd ( n, x, f, d, incfd, skip, nval, xval, fval, dval, ierr )
+
+  return
+end
+subroutine pchez ( n, x, f, d, spline, wk, lwk, ierr )
+!
+!*******************************************************************************
+!
+!! PCHEZ carries out easy to use spline or cubic hermite interpolation.
+!
+!
+!  Description
+!
+!          pchez:  piecewise cubic interpolation, easy to use.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!
+!     sets derivatives for spline (two continuous derivatives) or
+!     hermite cubic (one continuous derivative) interpolation.
+!     spline interpolation is smoother, but may not "look" right if the
+!     data contains both "steep" and "flat" sections.  hermite cubics
+!     can produce a "visually pleasing" and monotone interpolant to
+!     monotone data. this is an easy to use driver for the routines
+!     by f. n. fritsch in reference (4) below. various boundary
+!     conditions are set to default values by pchez. many other choices
+!     are available in the subroutines pchic, pchim and pchsp.
+!
+!     use pchev to evaluate the resulting function and its derivative.
+!
+!  Parameters:
+!
+!     n -- (input) number of data points.  (error return if n<2 .)
+!           if n=2, simply does linear interpolation.
+!
+!     x -- (input) real array of independent variable values.  the
+!           elements of x must be strictly increasing:
+!                x(i-1) < x(i),  i = 2(1)n.
+!           (error return if not.)
+!
+!     f -- (input) real array of dependent variable values to be inter-
+!           polated.  f(i) is value corresponding to x(i).
+!
+!     d -- (output) real array of derivative values at the data points.
+!
+!     spline -- (input) logical variable to specify if the interpolant
+!           is to be a spline with two continuous derivaties
+!           (set spline=.true.) or a hermite cubic interpolant with one
+!           continuous derivative (set spline=.false.).
+!        note: if spline=.true. the interpolating spline satisfies the
+!           default "not-a-knot" boundary condition, with a continuous
+!           third derivative at x(2) and x(n-1). see reference (3).
+!              if spline=.false. the interpolating hermite cubic will be
+!           monotone if the input data is monotone. boundary conditions are
+!           computed from the derivative of a local quadratic unless this
+!           alters monotonicity.
+!
+!     wk -- (scratch) real work array, which must be declared by the calling
+!           program to be at least 2*n if spline is .true. and not used
+!           otherwise.
+!
+!     lwk -- (input) length of work array wk. (error return if
+!           lwk<2*n and spline is .true., not checked otherwise.)
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           warning error:
+!              ierr>0  (can only occur when spline=.false.) means that
+!                 ierr switches in the direction of monotonicity were detected.
+!                 when spline=.false.,  pchez guarantees that if the input
+!                 data is monotone, the interpolant will be too. this warning
+!                 is to alert you to the fact that the input data was not
+!                 monotone.
+!           "recoverable" errors:
+!              ierr = -1  if n<2 .
+!              ierr = -3  if the x-array is not strictly increasing.
+!              ierr = -7  if lwk is less than 2*n and spline is .true.
+!             (the d-array has not been changed in any of these cases.)
+!               note:  the above errors are checked in the order listed,
+!                   and following arguments have **not** been validated.
+!
+!  references  1. f.n.fritsch and r.e.carlson, 'monotone piecewise
+!                 cubic interpolation,' siam j.numer.anal. 17, 2 (april
+!                 1980), 238-246.
+!               2. f.n.fritsch and j.butland, 'a method for constructing
+!                 local monotone piecewise cubic interpolants,' llnl
+!                 preprint ucrl-87559 (april 1982).
+!               3. carl de boor, a practical guide to splines, springer-
+!                 verlag (new york, 1978).  (esp. chapter iv, pp.49-62.)
+!               4. f.n.fritsch, 'piecewise cubic hermite interpolation
+!                 package, final specifications', lawrence livermore
+!                 national laboratory, computer documentation ucid-30194,
+!                 august 1982.
+!
+  integer lwk
+  integer n
+!
+  real d(n)
+  real f(n)
+  integer, save, dimension ( 2 ) :: ic = (/ 0, 0 /)
+  integer ierr
+  integer, parameter :: incfd = 1
+  logical spline
+  real vc(2)
+  real wk(lwk)
+  real x(n)
+!
+  if ( spline ) then
+    call  pchsp ( ic, vc, n, x, f, d, incfd, wk, lwk, ierr )
+  else
+    call  pchim ( n, x, f, d, incfd, ierr )
+  end if
+
+  return
+end
+subroutine pchfd(n,x,f,d,incfd,skip,ne,xe,fe,de,ierr)
+!
+!*******************************************************************************
+!
+!! PCHFD evaluates a piecewise cubic hermite function and its first
+!            derivative at an array of points.  may be used by itself
+!            for hermite interpolation, or as an evaluator for pchim
+!            or pchic.  if only function values are required, use
+!            PCHFE instead.
+!
+!  Description:
+!
+!          pchfd:  piecewise cubic hermite function and derivative
+!                  evaluator
+!
+!     evaluates the cubic hermite function defined by  n, x, f, d,  to-
+!     gether with its first derivative, at the points  xe(j), j=1(1)ne.
+!
+!     if only function values are required, use PCHFE, instead.
+!
+!     to provide compatibility with pchim and pchic, includes an
+!     increment between successive values of the f- and d-arrays.
+!
+!  Parameters:
+!
+!     n -- (input) number of data points.  (error return if n<2 .)
+!
+!     x -- (input) real array of independent variable values.  the
+!           elements of x must be strictly increasing:
+!                x(i-1) < x(i),  i = 2(1)n.
+!           (error return if not.)
+!
+!     f -- (input) real array of function values.  f(1+(i-1)*incfd) is
+!           the value corresponding to x(i).
+!
+!     d -- (input) real array of derivative values.  d(1+(i-1)*incfd) is
+!           the value corresponding to x(i).
+!
+!     incfd -- (input) increment between successive values in f and d.
+!           (error return if  incfd<1 .)
+!
+!     skip -- (input/output) logical variable which should be set to
+!           .true. if the user wishes to skip checks for validity of
+!           preceding parameters, or to .false. otherwise.
+!           this will save time in case these checks have already
+!           been performed (say, in pchim or pchic).
+!           skip will be set to .true. on normal return.
+!
+!     ne -- (input) number of evaluation points.  (error return if
+!           ne<1 .)
+!
+!     xe -- (input) real array of points at which the functions are to
+!           be evaluated.
+!
+!
+!          notes:
+!           1. the evaluation will be most efficient if the elements
+!              of xe are increasing relative to x;
+!              that is,   xe(j) >= x(i)
+!              implies    xe(k) >= x(i),  all k>=j .
+!           2. if any of the xe are outside the interval [x(1),x(n)],
+!              values are extrapolated from the nearest extreme cubic,
+!              and a warning error is returned.
+!
+!     fe -- (output) real array of values of the cubic hermite function
+!           defined by  n, x, f, d  at the points  xe.
+!
+!     de -- (output) real array of values of the first derivative of
+!           the same function at the points  xe.
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           warning error:
+!              ierr>0  means that extrapolation was performed at
+!                 ierr points.
+!           "recoverable" errors:
+!              ierr = -1  if n<2 .
+!              ierr = -2  if incfd<1 .
+!              ierr = -3  if the x-array is not strictly increasing.
+!              ierr = -4  if ne<1 .
+!           (output arrays have not been changed in any of these cases.)
+!               note:  the above errors are checked in the order listed,
+!                   and following arguments have **not** been validated.
+!              ierr = -5  if an error has occurred in the lower-level
+!                         routine chfdv.  nb: this should never happen.
+!                         notify the author **immediately** if it does.
+!
+!  programming notes:
+!
+!     2. most of the coding between the call to chfdv and the end of
+!        the ir-loop could be eliminated if it were permissible to
+!        assume that xe is ordered relative to x.
+!
+!     3. chfdv does not assume that x1 is less than x2.  thus, it would
+!        be possible to write a version of pchfd that assumes a strict-
+!        ly decreasing x-array by simply running the ir-loop backwards
+!        (and reversing the order of appropriate tests).
+!
+!     4. the present code has a minor bug, which i have decided is not
+!        worth the effort that would be required to fix it.
+!        if xe contains points in [x(n-1),x(n)], followed by points <
+!        x(n-1), followed by points >x(n), the extrapolation points
+!        will be counted (at least) twice in the total returned in ierr.
+!
+  integer incfd
+  integer n
+  integer ne
+!
+  real d(incfd,n)
+  real de(ne)
+  real f(incfd,n)
+  real fe(ne)
+  integer i
+  integer ierc
+  integer ierr
+  integer ir
+  integer j
+  integer jfirst
+  integer next(2)
+  integer nj
+  logical skip
+  real x(n)
+  real xe(ne)
+!
+!  validity-check arguments.
+!
+  if (skip)  go to 5
+
+  if ( n<2 )  go to 5001
+  if ( incfd<1 )  go to 5002
+
+  do i = 2, n
+    if ( x(i)<=x(i-1) ) then
+      go to 5003
+    end if
+  end do
+!
+!  function definition is ok, go on.
+!
+    5 continue
+  if ( ne<1 )  go to 5004
+  ierr = 0
+  skip = .true.
+!
+!  loop over intervals.        (   interval index is  il = ir-1  . )
+!                              ( interval is x(il)<=x<x(ir) . )
+  jfirst = 1
+  ir = 2
+   10 continue
+!
+!     skip out of loop if have processed all evaluation points.
+!
+     if (jfirst > ne)  go to 5000
+!
+!     locate all points in interval.
+!
+     do j = jfirst, ne
+       if (xe(j) >= x(ir))  go to 30
+     end do
+
+     j = ne + 1
+     go to 40
+!
+!     have located first point beyond interval.
+!
+   30    continue
+     if (ir == n)  j = ne + 1
+!
+   40    continue
+     nj = j - jfirst
+!
+!     skip evaluation if no points in interval.
+!
+     if (nj == 0)  go to 50
+!
+!     evaluate cubic at xe(i),  i = jfirst (1) j-1 .
+!
+    call chfdv (x(ir-1),x(ir), f(1,ir-1),f(1,ir), d(1,ir-1),d(1,ir), &
+      nj, xe(jfirst), fe(jfirst), de(jfirst), next, ierc)
+
+     if (ierc < 0)  go to 5005
+
+     if (next(2) == 0)  go to 42
+!        if (next(2) > 0)  then
+!           in the current set of xe-points, there are next(2) to the
+!           right of x(ir).
+!
+        if (ir < n)  go to 41
+!           if (ir == n)  then
+!              these are actually extrapolation points.
+           ierr = ierr + next(2)
+           go to 42
+   41       continue
+!           else
+!              we should never have gotten here.
+           go to 5005
+!           end if
+!        end if
+   42    continue
+!
+     if (next(1) == 0)  go to 49
+!        if (next(1) > 0)  then
+!           in the current set of xe-points, there are next(1) to the
+!           left of x(ir-1).
+!
+        if (ir > 2)  go to 43
+!           if (ir == 2)  then
+!              these are actually extrapolation points.
+           ierr = ierr + next(1)
+           go to 49
+   43       continue
+!           else
+!              xe is not ordered relative to x, so must adjust
+!              evaluation interval.
+!
+!              first, locate first point to left of x(ir-1).
+!
+           do i = jfirst, j-1
+              if (xe(i) < x(ir-1))  go to 45
+           end do
+!
+!              note-- cannot drop through here unless there is an error
+!                     in chfdv.
+           go to 5005
+!
+   45          continue
+!              reset j.  (this will be the new jfirst.)
+           j = i
+!
+!  now find out how far to back up in the x-array.
+!
+           do i = 1, ir-1
+              if (xe(j) < x(i)) go to 47
+           end do
+!
+!              nb-- can never drop through here, since xe(j)<x(ir-1).
+!
+   47          continue
+!              at this point, either  xe(j) < x(1)
+!                 or      x(i-1) <= xe(j) < x(i) .
+!              reset ir, recognizing that it will be incremented before
+!              cycling.
+           ir = max(1, i-1)
+!           end if
+!        end if
+   49    continue
+!
+     jfirst = j
+!
+!   end of ir-loop.
+!
+   50 continue
+  ir = ir + 1
+  if (ir <= n)  go to 10
+!
+!  normal return.
+!
+ 5000 continue
+  return
+!
+!  error returns.
+!
+ 5001 continue
+!     n<2 return.
+  ierr = -1
+  call xerror ('pchfd -- number of data points less than two', 44, ierr, 1)
+  return
+
+ 5002 continue
+!     incfd<1 return.
+  ierr = -2
+  call xerror ('pchfd -- increment less than one', 32, ierr, 1)
+  return
+!
+ 5003 continue
+!     x-array not strictly increasing.
+  ierr = -3
+  call xerror ('pchfd -- x-array not strictly increasing', 40, ierr, 1)
+  return
+!
+ 5004 continue
+!     ne<1 return.
+  ierr = -4
+  call xerror ('pchfd -- number of evaluation points less than one', 50, &
+    ierr, 1)
+  return
+!
+ 5005 continue
+!     error return from chfdv.
+!  this case should never occur.
+  ierr = -5
+  call xerror ('pchfd -- error return from chfdv -- fatal', 41, ierr, 2)
+  return
+end
+subroutine pchfe ( n, x, f, d, incfd, skip, ne, xe, fe, ierr )
+!
+!*******************************************************************************
+!
+!! PCHFE evaluates a piecewise cubic hermite function at an array of points.
+!
+!  may be used by itself for hermite interpolation,
+!            or as an evaluator for pchim or pchic.
+!
+!  Description:
+!
+!          pchfe:  piecewise cubic hermite function evaluator
+!
+!     evaluates the cubic hermite function defined by  n, x, f, d  at
+!     the points  xe(j), j=1(1)ne.
+!
+!     to provide compatibility with pchim and pchic, includes an
+!     increment between successive values of the f- and d-arrays.
+!
+!  Parameters:
+!
+!     n -- (input) number of data points.  (error return if n<2 .)
+!
+!     x -- (input) real array of independent variable values.  the
+!           elements of x must be strictly increasing:
+!                x(i-1) < x(i),  i = 2(1)n.
+!           (error return if not.)
+!
+!     f -- (input) real array of function values.  f(1+(i-1)*incfd) is
+!           the value corresponding to x(i).
+!
+!     d -- (input) real array of derivative values.  d(1+(i-1)*incfd) is
+!           the value corresponding to x(i).
+!
+!     incfd -- (input) increment between successive values in f and d.
+!           (error return if  incfd<1 .)
+!
+!     skip -- (input/output) logical variable which should be set to
+!           .true. if the user wishes to skip checks for validity of
+!           preceding parameters, or to .false. otherwise.
+!           this will save time in case these checks have already
+!           been performed (say, in pchim or pchic).
+!           skip will be set to .true. on normal return.
+!
+!     ne -- (input) number of evaluation points.  (error return if
+!           ne<1 .)
+!
+!     xe -- (input) real array of points at which the function is to be
+!           evaluated.
+!
+!          notes:
+!           1. the evaluation will be most efficient if the elements
+!              of xe are increasing relative to x;
+!              that is,   xe(j) >= x(i)
+!              implies    xe(k) >= x(i),  all k>=j .
+!           2. if any of the xe are outside the interval [x(1),x(n)],
+!              values are extrapolated from the nearest extreme cubic,
+!              and a warning error is returned.
+!
+!     fe -- (output) real array of values of the cubic hermite function
+!           defined by  n, x, f, d  at the points  xe.
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           warning error:
+!              ierr>0  means that extrapolation was performed at
+!                 ierr points.
+!           "recoverable" errors:
+!              ierr = -1  if n<2 .
+!              ierr = -2  if incfd<1 .
+!              ierr = -3  if the x-array is not strictly increasing.
+!              ierr = -4  if ne<1 .
+!             (the fe-array has not been changed in any of these cases.)
+!               note:  the above errors are checked in the order listed,
+!                   and following arguments have **not** been validated.
+!
+!     2. most of the coding between the call to chfev and the end of
+!        the ir-loop could be eliminated if it were permissible to
+!        assume that xe is ordered relative to x.
+!
+!     3. chfev does not assume that x1 is less than x2.  thus, it would
+!        be possible to write a version of pchfe that assumes a strict-
+!        ly decreasing x-array by simply running the ir-loop backwards
+!        (and reversing the order of appropriate tests).
+!
+!     4. the present code has a minor bug, which i have decided is not
+!        worth the effort that would be required to fix it.
+!        if xe contains points in [x(n-1),x(n)], followed by points <
+!        x(n-1), followed by points >x(n), the extrapolation points
+!        will be counted (at least) twice in the total returned in ierr.
+!
+  integer  n, incfd, ne, ierr
+  real  x(n), f(incfd,n), d(incfd,n), xe(ne), fe(ne)
+  logical  skip
+  integer  i, ierc, ir, j, jfirst, next(2), nj
+!
+!  validity-check arguments.
+!
+  if (skip)  go to 5
+!
+  if ( n<2 )  go to 5001
+  if ( incfd<1 )  go to 5002
+
+  do i = 2, n
+     if ( x(i)<=x(i-1) )  go to 5003
+  end do
+!
+!function definition is ok, go on.
+!
+    5 continue
+  if ( ne<1 )  go to 5004
+  ierr = 0
+  skip = .true.
+!
+!  loop over intervals.        (   interval index is  il = ir-1  . )
+!                              ( interval is x(il)<=x<x(ir) . )
+  jfirst = 1
+  ir = 2
+   10 continue
+!
+! skip out of loop if have processed all evaluation points.
+!
+     if (jfirst > ne)  go to 5000
+!
+!  locate all points in interval.
+!
+     do j = jfirst, ne
+       if (xe(j) >= x(ir))  go to 30
+     end do
+
+     j = ne + 1
+     go to 40
+!
+!  have located first point beyond interval.
+!
+   30    continue
+     if (ir == n)  j = ne + 1
+
+   40    continue
+     nj = j - jfirst
+!
+!  skip evaluation if no points in interval.
+!
+     if (nj == 0)  go to 50
+!
+!  evaluate cubic at xe(i),  i = jfirst (1) j-1 .
+!
+    call chfev (x(ir-1),x(ir), f(1,ir-1),f(1,ir), d(1,ir-1),d(1,ir), &
+      nj, xe(jfirst), fe(jfirst), next, ierc)
+
+     if (ierc < 0)  go to 5005
+!
+     if (next(2) == 0)  go to 42
+!        if (next(2) > 0)  then
+!           in the current set of xe-points, there are next(2) to the
+!           right of x(ir).
+!
+        if (ir < n)  go to 41
+!           if (ir == n)  then
+!              these are actually extrapolation points.
+           ierr = ierr + next(2)
+           go to 42
+   41       continue
+!           else
+!              we should never have gotten here.
+           go to 5005
+!           end if
+!        end if
+   42    continue
+!
+     if (next(1) == 0)  go to 49
+!        if (next(1) > 0)  then
+!           in the current set of xe-points, there are next(1) to the
+!           left of x(ir-1).
+!
+        if (ir > 2)  go to 43
+!           if (ir == 2)  then
+!              these are actually extrapolation points.
+           ierr = ierr + next(1)
+           go to 49
+   43       continue
+!           else
+!              xe is not ordered relative to x, so must adjust
+!              evaluation interval.
+!
+!              first, locate first point to left of x(ir-1).
+           do i = jfirst, j-1
+              if (xe(i) < x(ir-1))  go to 45
+           end do
+!              note-- cannot drop through here unless there is an error
+!                     in chfev.
+           go to 5005
+!
+   45          continue
+!              reset j.  (this will be the new jfirst.)
+           j = i
+!
+!              now find out how far to back up in the x-array.
+           do i = 1, ir-1
+              if (xe(j) < x(i)) go to 47
+           end do
+!              nb-- can never drop through here, since xe(j)<x(ir-1).
+!
+   47          continue
+!              at this point, either  xe(j) < x(1)
+!                 or      x(i-1) <= xe(j) < x(i) .
+!              reset ir, recognizing that it will be incremented before
+!              cycling.
+           ir = max(1, i-1)
+!           end if
+!        end if
+   49    continue
+!
+     jfirst = j
+!
+!   end of ir-loop.
+!
+   50 continue
+  ir = ir + 1
+  if (ir <= n)  go to 10
+!
+!  normal return.
+!
+ 5000 continue
+  return
+!
+!  error returns.
+!
+ 5001 continue
+!     n<2 return.
+  ierr = -1
+  call xerror ('pchfe -- number of data points less than two', 44, ierr, 1)
+  return
+!
+ 5002 continue
+!     incfd<1 return.
+  ierr = -2
+  call xerror ('pchfe -- increment less than one', 32, ierr, 1)
+  return
+!
+ 5003 continue
+!     x-array not strictly increasing.
+  ierr = -3
+  call xerror ('pchfe -- x-array not strictly increasing', 40, ierr, 1)
+  return
+!
+ 5004 continue
+!     ne<1 return.
+  ierr = -4
+  call xerror ('pchfe -- number of evaluation points less than one', 50, ierr, 1)
+  return
+!
+ 5005 continue
+!     error return from chfev.
+!   *** this case should never occur.
+  ierr = -5
+  call xerror ('pchfe -- error return from chfev -- fatal', 41, ierr, 2)
+  return
+end
+function pchia(n,x,f,d,incfd,skip,a,b,ierr)
+!
+!*******************************************************************************
+!
+!! PCHIA evaluates the integral of a piecewise cubic Hermite function.
+!
+!
+!  Description:
+!
+!          pchia:  piecewise cubic hermite integrator, arbitrary limits
+!
+!     evaluates the definite integral of the cubic hermite function
+!     defined by  n, x, f, d  over the interval [a, b].
+!
+!     to provide compatibility with pchim and pchic, includes an
+!     increment between successive values of the f- and d-arrays.
+!
+!  Parameters:
+!
+!     value -- (output) value of the requested integral.
+!
+!     n -- (input) number of data points.  (error return if n<2 .)
+!
+!     x -- (input) real array of independent variable values.  the
+!           elements of x must be strictly increasing:
+!                x(i-1) < x(i),  i = 2(1)n.
+!           (error return if not.)
+!
+!     f -- (input) real array of function values.  f(1+(i-1)*incfd) is
+!           the value corresponding to x(i).
+!
+!     d -- (input) real array of derivative values.  d(1+(i-1)*incfd) is
+!           the value corresponding to x(i).
+!
+!     incfd -- (input) increment between successive values in f and d.
+!           (error return if  incfd<1 .)
+!
+!     skip -- (input/output) logical variable which should be set to
+!           .true. if the user wishes to skip checks for validity of
+!           preceding parameters, or to .false. otherwise.
+!           this will save time in case these checks have already
+!           been performed (say, in pchim or pchic).
+!           skip will be set to .true. on return with ierr>=0 .
+!
+!     a,b -- (input) the limits of integration.
+!           note:  there is no requirement that [a,b] be contained in
+!                  [x(1),x(n)].  however, the resulting integral value
+!                  will be highly suspect, if not.
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           warning errors:
+!              ierr = 1  if  a  is outside the interval [x(1),x(n)].
+!              ierr = 2  if  b  is outside the interval [x(1),x(n)].
+!              ierr = 3  if both of the above are true.  (note that this
+!                        means that either [a,b] contains data interval
+!                        or the intervals do not intersect at all.)
+!           "recoverable" errors:
+!              ierr = -1  if n<2 .
+!              ierr = -2  if incfd<1 .
+!              ierr = -3  if the x-array is not strictly increasing.
+!                (value has not been computed in any of these cases.)
+!               note:  the above errors are checked in the order listed,
+!                   and following arguments have **not** been validated.
+!
+  integer incfd
+  integer n
+!
+  real a
+  real b
+  real chfiv
+  real d(incfd,n)
+  real f(incfd,n)
+  integer i
+  integer ia
+  integer ib
+  integer ierd
+  integer ierr
+  integer ierv
+  integer il
+  integer ir
+  real pchia
+  real pchid
+  logical skip
+  real value
+  real x(n)
+  real xa
+  real xb
+!
+!  validity-check arguments.
+!
+  if (skip)  go to 5
+!
+  if ( n<2 )  go to 5001
+  if ( incfd<1 )  go to 5002
+
+  do i = 2, n
+    if ( x(i)<=x(i-1) )  go to 5003
+  end do
+!
+!function definition is ok, go on.
+!
+    5 continue
+  skip = .true.
+  ierr = 0
+  if ( (a<x(1)) .or. (a>x(n)) )  ierr = ierr + 1
+  if ( (b<x(1)) .or. (b>x(n)) )  ierr = ierr + 2
+!
+!  compute integral value.
+!
+  if (a == b)  then
+     value = 0.0E+00
+  else
+     xa = min (a, b)
+     xb = max (a, b)
+     if (xb <= x(2))  then
+!           interval is to left of x(2), so use first cubic.
+!
+        value = chfiv ( x(1), x(2), f(1,1),f(1,2), &
+          d(1,1),d(1,2), a, b, ierv)
+
+        if (ierv < 0)  go to 5004
+     else if (xa >= x(n-1))  then
+!           interval is to right of x(n-1), so use last cubic.
+!
+        value = chfiv(x(n-1),x(n), f(1,n-1),f(1,n), &
+          d(1,n-1),d(1,n), a, b, ierv)
+
+        if (ierv < 0)  go to 5004
+     else
+!           'normal' case -- xa<xb, xa<x(n-1), xb>x(2).
+!      ......locate ia and ib such that
+!               x(ia-1)<xa<=x(ia)<=x(ib)<=xb<=x(ib+1)
+        ia = 1
+        do i = 1, n-1
+           if (xa > x(i))  ia = i + 1
+        end do
+!             ia = 1 implies xa<x(1) .  otherwise,
+!             ia is largest index such that x(ia-1)<xa,.
+!
+        ib = n
+        do i = n, ia, -1
+           if (xb < x(i))  ib = i - 1
+        end do
+!             ib = n implies xb>x(n) .  otherwise,
+!             ib is smallest index such that xb<x(ib+1) .
+!
+!  Compute the integral.
+!
+        ierv = 0
+        if (ib < ia)  then
+!              this means ib = ia-1 and
+!                 (a,b) is a subset of (x(ib),x(ia)).
+!
+           value = chfiv (x(ib),x(ia), f(1,ib),f(1,ia), &
+             d(1,ib),d(1,ia), a, b, ierv)
+
+           if (ierv < 0)  go to 5004
+        else
+!
+!              first compute integral over (x(ia),x(ib)).
+           if (ib == ia)  then
+              value = 0.0E+00
+           else
+
+              value = pchid (n, x, f, d, incfd, skip, ia, ib, ierd)
+!
+              if (ierd < 0)  go to 5005
+           end if
+!
+!              then add on integral over (xa,x(ia)).
+           if (xa < x(ia))  then
+              il = max (1, ia-1)
+              ir = il + 1
+
+              value = value + chfiv (x(il),x(ir), f(1,il),f(1,ir), &
+                d(1,il),d(1,ir), xa, x(ia), ierv)
+
+              if (ierv < 0)  go to 5004
+           end if
+!
+!              then add on integral over (x(ib),xb).
+           if (xb > x(ib))  then
+              ir = min (ib+1, n)
+              il = ir - 1
+
+              value = value + chfiv (x(il),x(ir), f(1,il),f(1,ir), &
+                d(1,il),d(1,ir), x(ib), xb, ierv)
+
+              if (ierv < 0)  go to 5004
+           end if
+!
+!              finally, adjust sign if necessary.
+           if (a > b)  value = -value
+        end if
+     end if
+  end if
+!
+!  normal return.
+!
+  pchia = value
+  return
+!
+!  error returns.
+!
+ 5001 continue
+!     n<2 return.
+  ierr = -1
+  call xerror ('pchia -- number of data points less than two', 44, ierr, 1)
+  return
+!
+ 5002 continue
+!     incfd<1 return.
+  ierr = -2
+  call xerror ('pchia -- increment less than one', 32, ierr, 1)
+  return
+!
+ 5003 continue
+!     x-array not strictly increasing.
+  ierr = -3
+  call xerror ('pchia -- x-array not strictly increasing', 40, ierr, 1)
+  return
+!
+ 5004 continue
+!     trouble in chfiv.  (should never occur.)
+  ierr = -4
+  call xerror ('pchia -- trouble in chfiv', 25, ierr, 1)
+  return
+!
+ 5005 continue
+!     trouble in pchid.  (should never occur.)
+  ierr = -5
+  call xerror ('pchia -- trouble in pchid', 25, ierr, 1)
+  return
+end
+subroutine pchic(ic,vc,switch,n,x,f,d,incfd,wk,nwk,ierr)
+!
+!*******************************************************************************
+!
+!! PCHIC sets derivatives needed to determine a piecewise monotone
+!            piecewise cubic hermite interpolant to given data.
+!
+!            user control is available over boundary conditions and/or
+!            treatment of points where monotonicity switches direction.
+!
+!  Description:
+!
+!         pchic:  piecewise cubic hermite interpolation coefficients.
+!
+!     sets derivatives needed to determine a piecewise monotone piece-
+!     wise cubic interpolant to the data given in x and f satisfying the
+!     boundary conditions specified by ic and vc.
+!
+!     the treatment of points where monotonicity switches direction is
+!     controlled by argument switch.
+!
+!     to facilitate two-dimensional applications, includes an increment
+!     between successive values of the f- and d-arrays.
+!
+!     the resulting piecewise cubic hermite function may be evaluated
+!     by pchfe or pchfd.
+!
+!  Parameters:
+!
+!     ic -- (input) integer array of length 2 specifying desired
+!           boundary conditions:
+!           ic(1) = ibeg, desired condition at beginning of data.
+!           ic(2) = iend, desired condition at end of data.
+!
+!           ibeg = 0  for the default boundary condition (the same as
+!                     used by pchim).
+!           if ibeg/=0, then its sign indicates whether the boundary
+!                     derivative is to be adjusted, if necessary, to be
+!                     compatible with monotonicity:
+!              ibeg>0  if no adjustment is to be performed.
+!              ibeg<0  if the derivative is to be adjusted for
+!                     monotonicity.
+!
+!           allowable values for the magnitude of ibeg are:
+!           ibeg = 1  if first derivative at x(1) is given in vc(1).
+!           ibeg = 2  if second derivative at x(1) is given in vc(1).
+!           ibeg = 3  to use the 3-point difference formula for d(1).
+!                     (reverts to the default b.c. if n<3 .)
+!           ibeg = 4  to use the 4-point difference formula for d(1).
+!                     (reverts to the default b.c. if n<4 .)
+!           ibeg = 5  to set d(1) so that the second derivative is con-
+!              tinuous at x(2). (reverts to the default b.c. if n<4.)
+!              this option is somewhat analogous to the "not a knot"
+!              boundary condition provided by pchsp.
+!
+!          notes (ibeg):
+!           1. an error return is taken if abs(ibeg)>5 .
+!           2. only in case  ibeg<=0  is it guaranteed that the
+!              interpolant will be monotonic in the first interval.
+!              if the returned value of d(1) lies between zero and
+!              3*slope(1), the interpolant will be monotonic.  this
+!              is **not** checked if ibeg>0 .
+!           3. if ibeg<0 and d(1) had to be changed to achieve mono-
+!              tonicity, a warning error is returned.
+!
+!           iend may take on the same values as ibeg, but applied to
+!           derivative at x(n).  in case iend = 1 or 2, the value is
+!           given in vc(2).
+!
+!          notes (iend):
+!           1. an error return is taken if abs(iend)>5 .
+!           2. only in case  iend<=0  is it guaranteed that the
+!              interpolant will be monotonic in the last interval.
+!              if the returned value of d(1+(n-1)*incfd) lies between
+!              zero and 3*slope(n-1), the interpolant will be monotonic.
+!              this is **not** checked if iend>0 .
+!           3. if iend<0 and d(1+(n-1)*incfd) had to be changed to
+!              achieve monotonicity, a warning error is returned.
+!
+!     vc -- (input) real array of length 2 specifying desired boundary
+!           values, as indicated above.
+!           vc(1) need be set only if ic(1) = 1 or 2 .
+!           vc(2) need be set only if ic(2) = 1 or 2 .
+!
+!     switch -- (input) indicates desired treatment of points where
+!           direction of monotonicity switches:
+!           set switch to zero if interpolant is required to be mono-
+!           tonic in each interval, regardless of monotonicity of data.
+!             notes:
+!              1. this will cause d to be set to zero at all switch
+!                 points, thus forcing extrema there.
+!              2. the result of using this option with the default boun-
+!                 dary conditions will be identical to using pchim, but
+!                 will generally cost more compute time.
+!                 this option is provided only to facilitate comparison
+!                 of different switch and/or boundary conditions.
+!           set switch nonzero to use a formula based on the 3-point
+!              difference formula in the vicinity of switch points.
+!           if switch is positive, the interpolant on each interval
+!              containing an extremum is controlled to not deviate from
+!              the data by more than switch*dfloc, where dfloc is the
+!              maximum of the change of f on this interval and its two
+!              immediate neighbors.
+!           if switch is negative, no such control is to be imposed.
+!
+!     n -- (input) number of data points.  (error return if n<2 .)
+!
+!     x -- (input) real array of independent variable values.  the
+!           elements of x must be strictly increasing:
+!                x(i-1) < x(i),  i = 2(1)n.
+!           (error return if not.)
+!
+!     f -- (input) real array of dependent variable values to be inter-
+!           polated.  f(1+(i-1)*incfd) is value corresponding to x(i).
+!
+!     d -- (output) real array of derivative values at the data points.
+!           these values will determine a monotone cubic hermite func-
+!           tion on each subinterval on which the data are monotonic,
+!           except possibly adjacent to switches in monotonicity.
+!           the value corresponding to x(i) is stored in
+!                d(1+(i-1)*incfd),  i=1(1)n.
+!           no other entries in d are changed.
+!
+!     incfd -- (input) increment between successive values in f and d.
+!           this argument is provided primarily for 2-d applications.
+!           (error return if  incfd<1 .)
+!
+!     wk -- (scratch) real array of working storage.  the user may wish
+!           to know that the returned values are:
+!              wk(i)     = h(i)     = x(i+1) - x(i) ;
+!              wk(n-1+i) = slope(i) = (f(1,i+1) - f(1,i)) / h(i)
+!           for  i = 1(1)n-1.
+!
+!     nwk -- (input) length of work array.
+!           (error return if  nwk<2*(n-1) .)
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           warning errors:
+!              ierr = 1  if ibeg<0 and d(1) had to be adjusted for
+!                        monotonicity.
+!              ierr = 2  if iend<0 and d(1+(n-1)*incfd) had to be
+!                        adjusted for monotonicity.
+!              ierr = 3  if both of the above are true.
+!           "recoverable" errors:
+!              ierr = -1  if n<2 .
+!              ierr = -2  if incfd<1 .
+!              ierr = -3  if the x-array is not strictly increasing.
+!              ierr = -4  if abs(ibeg)>5 .
+!              ierr = -5  if abs(iend)>5 .
+!              ierr = -6  if both of the above are true.
+!              ierr = -7  if nwk<2*(n-1) .
+!             (the d-array has not been changed in any of these cases.)
+!               note:  the above errors are checked in the order listed,
+!                   and following arguments have **not** been validated.
+!
+!  references  1. f.n.fritsch and r.e.carlson, 'monotone piecewise
+!                 cubic interpolation,' siam j.numer.anal. 17, 2 (april
+!                 1980), 238-246.
+!               2. f.n.fritsch and j.butland, 'a method for constructing
+!                 local monotone piecewise cubic interpolants,' llnl
+!                 preprint ucrl-87559 (april 1982).
+!               3. f.n.fritsch, 'piecewise cubic interpolation package,'
+!                 llnl preprint ucrl-87285 (july 1982).
+!
+  integer incfd
+  integer n
+  integer nwk
+!
+  integer ic(2)
+  integer ierr
+  real switch
+  real vc(2)
+  real x(n), f(incfd,n), d(incfd,n), wk(nwk)
+  integer  i, ibeg, iend, nless1
+!
+  if ( n<2 )  go to 5001
+  if ( incfd<1 )  go to 5002
+
+  do i = 2, n
+    if ( x(i)<=x(i-1) )  go to 5003
+  end do
+
+  ibeg = ic(1)
+  iend = ic(2)
+  ierr = 0
+  if (abs(ibeg) > 5)  ierr = ierr - 1
+  if (abs(iend) > 5)  ierr = ierr - 2
+  if (ierr < 0)  go to 5004
+!
+!  function definition is ok -- go on.
+!
+  nless1 = n - 1
+  if ( nwk < 2*nless1 )  go to 5007
+!
+!  set up h and slope arrays.
+!
+  do i = 1, nless1
+    wk(i) = x(i+1) - x(i)
+    wk(nless1+i) = (f(1,i+1) - f(1,i)) / wk(i)
+  end do
+!
+!  special case n=2 -- use linear interpolation.
+!
+  if (nless1 > 1)  go to 1000
+  d(1,1) = wk(2)
+  d(1,n) = wk(2)
+  go to 3000
+!
+!  normal case  (n >= 3) .
+!
+ 1000 continue
+!
+!  set interior derivatives and default end conditions.
+!
+  call pchci (n, wk(1), wk(n), d, incfd)
+!
+!  set derivatives at points where monotonicity switches direction.
+!
+  if (switch == 0.0)  go to 3000
+
+  call pchcs (switch, n, wk(1), wk(n), d, incfd, ierr)
+
+  if (ierr /= 0)  go to 5008
+!
+!  set end conditions.
+!
+ 3000 continue
+  if ( (ibeg==0) .and. (iend==0) )  go to 5000
+
+  call pchce (ic, vc, n, x, wk(1), wk(n), d, incfd, ierr)
+
+  if (ierr < 0)  go to 5009
+!
+!  normal return.
+!
+ 5000 continue
+  return
+!
+!  error returns.
+!
+ 5001 continue
+!     n<2 return.
+  ierr = -1
+  call xerror ('pchic -- number of data points less than two', 44, ierr, 1)
+  return
+
+ 5002 continue
+!     incfd<1 return.
+  ierr = -2
+  call xerror ('pchic -- increment less than one', 32, ierr, 1)
+  return
+
+ 5003 continue
+!     x-array not strictly increasing.
+  ierr = -3
+  call xerror ('pchic -- x-array not strictly increasing', 40, ierr, 1)
+  return
+!
+ 5004 continue
+!     ic out of range return.
+  ierr = ierr - 3
+  call xerror ('pchic -- ic out of range', 24, ierr, 1)
+  return
+!
+ 5007 continue
+!     nwk < 2*(n-1)  return.
+  ierr = -7
+  call xerror ('pchic -- work array too small', 29, ierr, 1)
+  return
+!
+ 5008 continue
+!     error return from pchcs.
+  ierr = -8
+  call xerror ('pchic -- error return from pchcs', 32, ierr, 1)
+  return
+!
+ 5009 continue
+!     error return from pchce.
+!   *** this case should never occur.
+  ierr = -9
+  call xerror ('pchic -- error return from pchce', 32, ierr, 1)
+  return
+end
+function pchid(n,x,f,d,incfd,skip,ia,ib,ierr)
+!
+!*******************************************************************************
+!
+!! PCHID evaluates the definite integral of a piecewise cubic
+!            hermite function over an interval whose endpoints are
+!            data points.
+!
+!  Description:
+!
+!          pchid:  piecewise cubic hermite integrator, data limits
+!
+!     evaluates the definite integral of the cubic hermite function
+!     defined by  n, x, f, d  over the interval [x(ia), x(ib)].
+!
+!     to provide compatibility with pchim and pchic, includes an
+!     increment between successive values of the f- and d-arrays.
+!
+!  Parameters:
+!
+!     value -- (output) value of the requested integral.
+!
+!     n -- (input) number of data points.  (error return if n<2 .)
+!
+!     x -- (input) real array of independent variable values.  the
+!           elements of x must be strictly increasing:
+!                x(i-1) < x(i),  i = 2(1)n.
+!           (error return if not.)
+!
+!     f -- (input) real array of function values.  f(1+(i-1)*incfd) is
+!           the value corresponding to x(i).
+!
+!     d -- (input) real array of derivative values.  d(1+(i-1)*incfd) is
+!           the value corresponding to x(i).
+!
+!     incfd -- (input) increment between successive values in f and d.
+!           (error return if  incfd<1 .)
+!
+!     skip -- (input/output) logical variable which should be set to
+!           .true. if the user wishes to skip checks for validity of
+!           preceding parameters, or to .false. otherwise.
+!           this will save time in case these checks have already
+!           been performed (say, in pchim or pchic).
+!           skip will be set to .true. on return with ierr = 0 or -4.
+!
+!     ia,ib -- (input) indices in x-array for the limits of integration.
+!           both must be in the range [1,n].  (error return if not.)
+!           no restrictions on their relative values.
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           "recoverable" errors:
+!              ierr = -1  if n<2 .
+!              ierr = -2  if incfd<1 .
+!              ierr = -3  if the x-array is not strictly increasing.
+!              ierr = -4  if ia or ib is out of range.
+!                (value has not been computed in any of these cases.)
+!               note:  the above errors are checked in the order listed,
+!                   and following arguments have **not** been validated.
+!
+  integer incfd
+  integer  n
+!
+  real d(incfd,n)
+  real f(incfd,n)
+  real h
+  integer i
+  integer ia
+  integer ib
+  integer ierr
+  integer iup
+  integer low
+  real pchid
+  logical skip
+  real sum
+  real value
+  real x(n)
+!
+!  validity-check arguments.
+!
+  if (skip)  go to 5
+!
+  if ( n<2 )  go to 5001
+  if ( incfd<1 )  go to 5002
+
+  do i = 2, n
+    if ( x(i)<=x(i-1) )  go to 5003
+  end do
+!
+!function definition is ok, go on.
+!
+    5 continue
+  skip = .true.
+  if ((ia<1) .or. (ia>n))  go to 5004
+  if ((ib<1) .or. (ib>n))  go to 5004
+  ierr = 0
+!
+!  compute integral value.
+!
+  if (ia == ib)  then
+     value = 0.0E+00
+  else
+     low = min(ia, ib)
+     iup = max(ia, ib) - 1
+     sum = 0.0E+00
+     do i = low, iup
+        h = x(i+1) - x(i)
+        sum = sum + h*( (f(1,i) + f(1,i+1)) + (d(1,i) - d(1,i+1))*(h/6.0) )
+     end do
+     value = 0.5 * sum
+     if (ia > ib)  value = -value
+  end if
+!
+!  normal return.
+!
+  pchid = value
+  return
+!
+!  error returns.
+!
+ 5001 continue
+!     n<2 return.
+  ierr = -1
+  call xerror ('pchid -- number of data points less than two', 44, ierr, 1)
+  return
+!
+ 5002 continue
+!     incfd<1 return.
+  ierr = -2
+  call xerror ('pchid -- increment less than one', 32, ierr, 1)
+  return
+!
+ 5003 continue
+!     x-array not strictly increasing.
+  ierr = -3
+  call xerror ('pchid -- x-array not strictly increasing', 40, ierr, 1)
+  return
+!
+ 5004 continue
+!     ia or ib out of range return.
+  ierr = -4
+  call xerror ('pchid -- ia or ib out of range', 30, ierr, 1)
+  return
+end
+subroutine pchim ( n, x, f, d, incfd, ierr )
+!
+!*******************************************************************************
+!
+!! PCHIM sets derivatives for a piecewise cubic Hermite interpolant.
+!
+!
+!  Discussion:
+!
+!    The routine set derivatives needed to determine a monotone piecewise
+!    cubic hermite interpolant to given data.  the
+!    interpolant will have an extremum at each point where monotonicity
+!    switches direction.  (see pchic if user control is
+!    desired over boundary or switch conditions.)
+!
+!    if the data are only piecewise monotonic, the interpolant will
+!    have an extremum at each point where monotonicity switches direc-
+!    tion.  (see pchic if user control is desired in such cases.)
+!
+!    to facilitate two-dimensional applications, includes an increment
+!    between successive values of the f- and d-arrays.
+!
+!    the resulting piecewise cubic hermite function may be evaluated
+!    by pchfe or pchfd.
+!
+!  References:
+!
+!    f.n.fritsch and r.e.carlson,
+!    'monotone piecewise cubic interpolation,'
+!    siam j.numer.anal.
+!    17, 2 (april 1980), 238-246.
+!
+!    f.n.fritsch and j.butland,
+!    'a method for constructing local monotone piecewise cubic interpolants,'
+!    llnl preprint ucrl-87559 (april 1982).
+!
+!  Parameters:
+!
+!     n -- (input) number of data points.  (error return if n<2 .)
+!           if n=2, simply does linear interpolation.
+!
+!     x -- (input) real array of independent variable values.  the
+!           elements of x must be strictly increasing:
+!                x(i-1) < x(i),  i = 2(1)n.
+!           (error return if not.)
+!
+!     f -- (input) real array of dependent variable values to be inter-
+!           polated.  f(1+(i-1)*incfd) is value corresponding to x(i).
+!           pchim is designed for monotonic data, but it will work for
+!           any f-array.  it will force extrema at points where mono-
+!           tonicity switches direction.  if some other treatment of
+!           switch points is desired, pchic should be used instead.
+!
+!     d -- (output) real array of derivative values at the data points.
+!           if the data are monotonic, these values will determine a
+!           a monotone cubic hermite function.
+!           the value corresponding to x(i) is stored in
+!                d(1+(i-1)*incfd),  i=1(1)n.
+!           no other entries in d are changed.
+!
+!     incfd -- (input) increment between successive values in f and d.
+!           this argument is provided primarily for 2-d applications.
+!           (error return if  incfd<1 .)
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           warning error:
+!              ierr>0  means that ierr switches in the direction
+!                 of monotonicity were detected.
+!           "recoverable" errors:
+!              ierr = -1  if n<2 .
+!              ierr = -2  if incfd<1 .
+!              ierr = -3  if the x-array is not strictly increasing.
+!             (the d-array has not been changed in any of these cases.)
+!               note:  the above errors are checked in the order listed,
+!                   and following arguments have **not** been validated.
+!
+  integer incfd
+  integer n
+!
+  real d(incfd,n)
+  real del1
+  real del2
+  real dmax
+  real dmin
+  real drat1
+  real drat2
+  real dsave
+  real f(incfd,n)
+  real h1
+  real h2
+  real hsum
+  real hsumt3
+  integer i
+  integer ierr
+  integer nless1
+  real pchst
+  real w1
+  real w2
+  real x(n)
+!
+!  Check arguments.
+!
+  if ( n < 2 ) then
+    ierr = -1
+    call xerror ('pchim -- number of data points less than two', 44, ierr, 1)
+    return
+  end if
+
+  if ( incfd < 1 ) then
+    ierr = -2
+    call xerror ('pchim -- increment less than one', 32, ierr, 1)
+    return
+  end if
+
+  do i = 2, n
+    if ( x(i)<=x(i-1) ) then
+      ierr = -3
+      call xerror ('pchim -- x-array not strictly increasing', 40, ierr, 1)
+      return
+    end if
+  end do
+
+  ierr = 0
+  nless1 = n - 1
+  h1 = x(2) - x(1)
+  del1 = (f(1,2) - f(1,1))/h1
+  dsave = del1
+!
+!  special case n=2 -- use linear interpolation.
+!
+  if ( n == 2 ) then
+    d(1,1) = del1
+    d(1,n) = del1
+    return
+  end if
+!
+!  normal case  (n >= 3).
+!
+  h2 = x(3) - x(2)
+  del2 = (f(1,3) - f(1,2))/h2
+!
+!  set d(1) via non-centered three-point formula, adjusted to be
+!  shape-preserving.
+!
+  hsum = h1 + h2
+  w1 = (h1 + hsum)/hsum
+  w2 = -h1/hsum
+  d(1,1) = w1*del1 + w2*del2
+
+  if ( pchst(d(1,1),del1) <= 0.0E+00 )  then
+     d(1,1) = 0.0E+00
+  else if ( pchst(del1,del2) < 0.0E+00 )  then
+!        need do this check only if monotonicity switches.
+     dmax = 3.0*del1
+     if (abs(d(1,1)) > abs(dmax))  d(1,1) = dmax
+  end if
+!
+!  loop through interior points.
+!
+  do i = 2, nless1
+
+    if ( i > 2 ) then
+      h1 = h2
+      h2 = x(i+1) - x(i)
+      hsum = h1 + h2
+      del1 = del2
+      del2 = (f(1,i+1) - f(1,i))/h2
+    end if
+!
+!  set d(i)=0 unless data are strictly monotonic.
+!
+    d(1,i) = 0.0E+00
+    if ( pchst(del1,del2) )  42, 41, 45
+!
+!  count number of changes in direction of monotonicity.
+!
+   41    continue
+    if ( del2 /= 0.0E+00 ) then
+      if ( pchst(dsave,del2) < 0.0E+00 )  ierr = ierr + 1
+      dsave = del2
+    end if
+    go to 50
+
+42  continue
+    ierr = ierr + 1
+    dsave = del2
+    go to 50
+!
+!  use brodlie modification of butland formula.
+!
+45  continue
+
+    hsumt3 = hsum+hsum+hsum
+    w1 = (hsum + h1)/hsumt3
+    w2 = (hsum + h2)/hsumt3
+    dmax = max ( abs(del1), abs(del2) )
+    dmin = min ( abs(del1), abs(del2) )
+    drat1 = del1/dmax
+    drat2 = del2/dmax
+    d(1,i) = dmin/(w1*drat1 + w2*drat2)
+
+   50 continue
+
+  end do
+!
+!  set d(n) via non-centered three-point formula, adjusted to be
+!  shape-preserving.
+!
+  w1 = -h2/hsum
+  w2 = (h2 + hsum)/hsum
+  d(1,n) = w1*del1 + w2*del2
+  if ( pchst(d(1,n),del2) <= 0.0E+00 )  then
+     d(1,n) = 0.0E+00
+  else if ( pchst(del1,del2) < 0.0E+00 )  then
+!        need do this check only if monotonicity switches.
+     dmax = 3.0*del2
+     if (abs(d(1,n)) > abs(dmax))  d(1,n) = dmax
+  end if
+
+  return
+end
+subroutine pchmc(n,x,f,d,incfd,skip,ismon,ierr)
+!
+!*******************************************************************************
+!
+!! PCHMC:  piecewise cubic hermite monotonicity checker.
+!
+!     checks the cubic hermite function defined by  n, x, f, d  for
+!     monotonicity.
+!
+!     to provide compatibility with pchim and pchic, includes an
+!     increment between successive values of the f- and d-arrays.
+!
+!  Parameters:
+!
+!     n -- (input) number of data points.  (error return if n<2 .)
+!
+!     x -- (input) real array of independent variable values.  the
+!           elements of x must be strictly increasing:
+!                x(i-1) < x(i),  i = 2(1)n.
+!           (error return if not.)
+!
+!     f -- (input) real array of function values.  f(1+(i-1)*incfd) is
+!           the value corresponding to x(i).
+!
+!     d -- (input) real array of derivative values.  d(1+(i-1)*incfd) is
+!           the value corresponding to x(i).
+!
+!     incfd -- (input) increment between successive values in f and d.
+!           (error return if  incfd<1 .)
+!
+!     skip -- (input/output) logical variable which should be set to
+!           .true. if the user wishes to skip checks for validity of
+!           preceding parameters, or to .false. otherwise.
+!           this will save time in case these checks have already
+!           been performed.
+!           skip will be set to .true. on normal return.
+!
+!     ismon -- (output) integer array indicating on which intervals the
+!           pch function defined by  n, x, f, d  is monotonic.
+!           for data interval [x(i),x(i+1)],
+!             ismon(i) = -1  if function is strictly decreasing;
+!             ismon(i) =  0  if function is constant;
+!             ismon(i) =  1  if function is strictly increasing;
+!             ismon(i) =  2  if function is non-monotonic;
+!             ismon(i) =  3  if unable to determine.  (this means that
+!                            the d-values are near the boundary of the
+!                            monotonicity region.  a small increase pro-
+!                            duces non-monotonicity; decrease, strict
+!                            monotonicity.)
+!           the above applies to i=1(1)n-1.  ismon(n) indicates whether
+!              the entire function is monotonic on [x(1),x(n)].
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           "recoverable" errors:
+!              ierr = -1  if n<2 .
+!              ierr = -2  if incfd<1 .
+!              ierr = -3  if the x-array is not strictly increasing.
+!          (the ismon-array has not been changed in any of these cases.)
+!               note:  the above errors are checked in the order listed,
+!                   and following arguments have **not** been validated.
+!
+!  references  f.n.fritsch and r.e.carlson, 'monotone piecewise cubic
+!                 interpolation,' siam j.numer.anal. 17, 2 (april 1980),
+!                 238-246.
+!
+  integer incfd
+  integer  n
+!
+  real chfmc
+  real d(incfd,n)
+  real delta
+  real f(incfd,n)
+  integer i
+  integer ierr
+  integer ismon(n)
+  integer nseg
+  logical skip
+  real x(n)
+!
+  if ( .not. skip ) then
+
+    if ( n < 2 )  go to 5001
+    if ( incfd<1 )  go to 5002
+
+    do i = 2, n
+      if ( x(i)<=x(i-1) )  go to 5003
+    end do
+
+    skip = .true.
+
+  end if
+
+  nseg = n - 1
+
+  do i = 1, nseg
+
+     delta = (f(1,i+1)-f(1,i))/(x(i+1)-x(i))
+
+     ismon(i) = chfmc (d(1,i), d(1,i+1), delta)
+
+     if (i == 1)  then
+        ismon(n) = ismon(1)
+     else
+!           need to figure out cumulative monotonicity from following
+!           'multiplication table'--
+!
+!                    *      i s m o n (i)
+!                     *  -1   0   1   2   3
+!               i      *--------------------*
+!               s   -1 i -1  -1   2   2   3 i
+!               m    0 i -1   0   1   2   3 i
+!               o    1 i  2   1   1   2   3 i
+!               n    2 i  2   2   2   2   2 i
+!              (n)   3 i  3   3   3   2   3 i
+!                      *--------------------*
+!
+!           if equal or already declared nonmonotonic, no change needed.
+        if ((ismon(i)/=ismon(n)) .and. (ismon(n)/=2))  then
+           if ( max(ismon(i), ismon(n)) > 1)  then
+!                 at least one is either 'no' or 'maybe'.
+              if (ismon(i) == 2)  then
+                 ismon(n) = 2
+              else
+                 ismon(n) = 3
+              end if
+           else if (ismon(i)*ismon(n) < 0)  then
+!                 both monotonic, but in opposite senses.
+              ismon(n) = 2
+           else
+!                 at this point, one is zero, the other is +-1.
+              ismon(n) = ismon(n) + ismon(i)
+           end if
+        end if
+     end if
+
+  end do
+
+  ierr = 0
+  return
+!
+!  error returns.
+!
+ 5001 continue
+!     n<2 return.
+  ierr = -1
+  call xerror ('pchmc -- number of data points less than two', 44, ierr, 1)
+  return
+!
+ 5002 continue
+!     incfd<1 return.
+  ierr = -2
+  call xerror ('pchmc -- increment less than one', 32, ierr, 1)
+  return
+!
+ 5003 continue
+!     x-array not strictly increasing.
+  ierr = -3
+  call xerror ('pchmc -- x-array not strictly increasing', 40, ierr, 1)
+  return
+end
+function pchqa(n,x,f,d,a,b,ierr)
+!
+!*******************************************************************************
+!
+!! PCHQA: easy to use cubic hermite or spline integration
+!             numerical integration, quadrature
+!
+!  purpose
+!
+!    evaluates the definite integral of a piecewise cubic hermite
+!            or spline function over an arbitrary interval, easy to use.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!
+!     evaluates the definite integral of the cubic hermite or spline
+!     function defined by  n, x, f, d  over the interval [a, b].  this
+!     is an easy to use driver for the routine pchia by f.n. fritsch
+!     described in reference (2) below. that routine also has other
+!     capabilities.
+!
+!  Parameters:
+!
+!     value -- (output) value of the requested integral.
+!
+!     n -- (input) number of data points.  (error return if n<2 .)
+!
+!     x -- (input) real array of independent variable values.  the
+!           elements of x must be strictly increasing:
+!                x(i-1) < x(i),  i = 2(1)n.
+!           (error return if not.)
+!
+!     f -- (input) real array of function values.  f(i) is
+!           the value corresponding to x(i).
+!
+!     d -- (input) real array of derivative values.  d(i) is
+!           the value corresponding to x(i).
+!
+!     a,b -- (input) the limits of integration.
+!           note:  there is no requirement that [a,b] be contained in
+!                  [x(1),x(n)].  however, the resulting integral value
+!                  will be highly suspect, if not.
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           warning errors:
+!              ierr = 1  if  a  is outside the interval [x(1),x(n)].
+!              ierr = 2  if  b  is outside the interval [x(1),x(n)].
+!              ierr = 3  if both of the above are true.  (note that this
+!                        means that either [a,b] contains data interval
+!                        or the intervals do not intersect at all.)
+!           "recoverable" errors:
+!              ierr = -1  if n<2 .
+!              ierr = -3  if the x-array is not strictly increasing.
+!                (value has not been computed in any of these cases.)
+!               note:  the above errors are checked in the order listed,
+!                   and following arguments have **not** been validated.
+!
+!  references  1. f.n.fritsch and r.e.carlson, 'monotone piecewise
+!                 cubic interpolation,' siam j.numer.anal. 17, 2 (april
+!                 1980), 238-246.
+!               2. f.n.fritsch, 'piecewise cubic hermite interpolation
+!                 package, final specifications', lawrence livermore
+!                 national laboratory, computer documentation ucid-30194,
+!                 august 1982.
+!
+  integer n
+!
+  real a
+  real b
+  real d(n)
+  real f(n)
+  integer ierr
+  integer, save :: incfd = 1
+  real pchia
+  real pchqa
+  logical, save :: skip = .true.
+  real x(n)
+!
+  pchqa  =  pchia( n, x, f, d, incfd, skip, a, b, ierr )
+
+  return
+end
+subroutine pchsp(ic,vc,n,x,f,d,incfd,wk,nwk,ierr)
+!
+!*******************************************************************************
+!
+!! PCHSP: set derivatives needed to determine the hermite represen-
+!            tation of the cubic spline interpolant to given data, with
+!            specified boundary conditions.
+!
+!  Description:
+!
+!          pchsp:   piecewise cubic hermite spline
+!
+!     computes the hermite representation of the cubic spline inter-
+!     polant to the data given in x and f satisfying the boundary
+!     conditions specified by ic and vc.
+!
+!     to facilitate two-dimensional applications, includes an increment
+!     between successive values of the f- and d-arrays.
+!
+!     the resulting piecewise cubic hermite function may be evaluated
+!     by pchfe or pchfd.
+!
+!     note:  this is a modified version of c. de boor's cubic spline
+!            routine cubspl.
+!
+!  Parameters:
+!
+!     ic -- (input) integer array of length 2 specifying desired
+!           boundary conditions:
+!           ic(1) = ibeg, desired condition at beginning of data.
+!           ic(2) = iend, desired condition at end of data.
+!
+!           ibeg = 0  to set d(1) so that the third derivative is con-
+!              tinuous at x(2).  this is the "not a knot" condition
+!              provided by de boor's cubic spline routine cubspl.
+!              < this is the default boundary condition. >
+!           ibeg = 1  if first derivative at x(1) is given in vc(1).
+!           ibeg = 2  if second derivative at x(1) is given in vc(1).
+!           ibeg = 3  to use the 3-point difference formula for d(1).
+!                     (reverts to the default b.c. if n<3 .)
+!           ibeg = 4  to use the 4-point difference formula for d(1).
+!                     (reverts to the default b.c. if n<4 .)
+!          notes:
+!           1. an error return is taken if ibeg is out of range.
+!           2. for the "natural" boundary condition, use ibeg=2 and
+!              vc(1)=0.
+!
+!           iend may take on the same values as ibeg, but applied to
+!           derivative at x(n).  in case iend = 1 or 2, the value is
+!           given in vc(2).
+!
+!          notes:
+!           1. an error return is taken if iend is out of range.
+!           2. for the "natural" boundary condition, use iend=2 and
+!              vc(2)=0.
+!
+!     vc -- (input) real array of length 2 specifying desired boundary
+!           values, as indicated above.
+!           vc(1) need be set only if ic(1) = 1 or 2 .
+!           vc(2) need be set only if ic(2) = 1 or 2 .
+!
+!     n -- (input) number of data points.  (error return if n<2 .)
+!
+!     x -- (input) real array of independent variable values.  the
+!           elements of x must be strictly increasing:
+!                x(i-1) < x(i),  i = 2(1)n.
+!           (error return if not.)
+!
+!     f -- (input) real array of dependent variable values to be inter-
+!           polated.  f(1+(i-1)*incfd) is value corresponding to x(i).
+!
+!     d -- (output) real array of derivative values at the data points.
+!           these values will determine the cubic spline interpolant
+!           with the requested boundary conditions.
+!           the value corresponding to x(i) is stored in
+!                d(1+(i-1)*incfd),  i=1(1)n.
+!           no other entries in d are changed.
+!
+!     incfd -- (input) increment between successive values in f and d.
+!           this argument is provided primarily for 2-d applications.
+!           (error return if  incfd<1 .)
+!
+!     wk -- (scratch) real array of working storage.
+!
+!     nwk -- (input) length of work array.
+!           (error return if nwk<2*n .)
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           "recoverable" errors:
+!              ierr = -1  if n<2 .
+!              ierr = -2  if incfd<1 .
+!              ierr = -3  if the x-array is not strictly increasing.
+!              ierr = -4  if ibeg<0 or ibeg>4 .
+!              ierr = -5  if iend<0 of iend>4 .
+!              ierr = -6  if both of the above are true.
+!              ierr = -7  if nwk is too small.
+!               note:  the above errors are checked in the order listed,
+!                   and following arguments have **not** been validated.
+!             (the d-array has not been changed in any of these cases.)
+!              ierr = -8  in case of trouble solving the linear system
+!                         for the interior derivative values.
+!             (the d-array may have been changed in this case.)
+!             (             do **not** use it!                )
+!
+!  references  carl de boor, a practical guide to splines, springer-
+!                 verlag (new york, 1978), pp. 53-59.
+!
+  integer incfd
+  integer n
+!
+  real d(incfd,n)
+  real f(incfd,n)
+  real g
+  integer ibeg
+  integer ic(2)
+  integer iend
+  integer ierr
+  integer index
+  integer j
+  integer nwk
+  real pchdf
+  real stemp(3)
+  real vc(2)
+  real wk(2,n)
+  real x(n)
+  real xtemp(4)
+!
+  if ( n<2 )  go to 5001
+  if ( incfd<1 )  go to 5002
+
+  do j = 2, n
+     if ( x(j)<=x(j-1) )  go to 5003
+  end do
+
+  ibeg = ic(1)
+  iend = ic(2)
+  ierr = 0
+  if ( (ibeg<0).or.(ibeg>4) )  ierr = ierr - 1
+  if ( (iend<0).or.(iend>4) )  ierr = ierr - 2
+  if ( ierr<0 )  go to 5004
+!
+!function definition is ok -- go on.
+!
+  if ( nwk < 2*n )  go to 5007
+!
+!  compute first differences of x sequence and store in wk(1,.). also,
+!  compute first divided difference of data and store in wk(2,.).
+!
+  do j=2,n
+     wk(1,j) = x(j) - x(j-1)
+     wk(2,j) = (f(1,j) - f(1,j-1))/wk(1,j)
+  end do
+!
+!  set to default boundary conditions if n is too small.
+!
+  if ( ibeg>n )  ibeg = 0
+  if ( iend>n )  iend = 0
+!
+!  set up for boundary conditions.
+!
+  if ( (ibeg==1).or.(ibeg==2) )  then
+     d(1,1) = vc(1)
+  else if (ibeg > 2)  then
+!
+!        pick up first ibeg points, in reverse order.
+!
+     do j = 1, ibeg
+        index = ibeg-j+1
+        xtemp(j) = x(index)
+        if (j < ibeg)  stemp(j) = wk(2,index)
+     end do
+
+     d(1,1) = pchdf (ibeg, xtemp, stemp, ierr)
+     if (ierr /= 0)  go to 5009
+     ibeg = 1
+  end if
+
+  if ( (iend==1).or.(iend==2) )  then
+     d(1,n) = vc(2)
+  else if (iend > 2)  then
+!
+!        pick up last iend points.
+!
+     do j = 1, iend
+        index = n-iend+j
+        xtemp(j) = x(index)
+        if (j < iend)  stemp(j) = wk(2,index+1)
+     end do
+
+     d(1,n) = pchdf (iend, xtemp, stemp, ierr)
+
+     if (ierr /= 0)  go to 5009
+     iend = 1
+  end if
+!
+!  begin coding from cubspl
+!
+!  a tridiagonal linear system for the unknown slopes s(j) of
+!  f  at x(j), j=1,...,n, is generated and then solved by gauss elim-
+!  ination, with s(j) ending up in d(1,j), all j.
+!     wk(1,.) and wk(2,.) are used for temporary storage.
+!
+!  construct first equation from first boundary condition, of the form
+!             wk(2,1)*s(1) + wk(1,1)*s(2) = d(1,1)
+!
+  if (ibeg == 0)  then
+     if (n == 2)  then
+!           no condition at left end and n = 2.
+        wk(2,1) = 1.0E+00
+        wk(1,1) = 1.0E+00
+        d(1,1) = 2.0E+00 * wk(2,2)
+     else
+!           not-a-knot condition at left end and n > 2.
+        wk(2,1) = wk(1,3)
+        wk(1,1) = wk(1,2) + wk(1,3)
+        d(1,1) =((wk(1,2) + 2.0E+00 * wk(1,1))*wk(2,2)*wk(1,3) &
+                             + wk(1,2)**2*wk(2,3)) / wk(1,1)
+     end if
+  else if (ibeg == 1)  then
+!        slope prescribed at left end.
+     wk(2,1) = 1.0E+00
+     wk(1,1) = 0.0E+00
+  else
+!        second derivative prescribed at left end.
+     wk(2,1) = 2.0E+00
+     wk(1,1) = 1.0E+00
+     d(1,1) = 3.0*wk(2,2) - 0.5*wk(1,2)*d(1,1)
+  end if
+!
+!  if there are interior knots, generate the corresponding equations and
+!  carry out the forward pass of gauss elimination, after which the j-th
+!  equation reads    wk(2,j)*s(j) + wk(1,j)*s(j+1) = d(1,j).
+!
+  if (n-1 > 1)  then
+    do j=2,n-1
+        if (wk(2,j-1) == 0.0E+00 )  go to 5008
+        g = -wk(1,j+1)/wk(2,j-1)
+        d(1,j) = g*d(1,j-1) + 3.0*(wk(1,j)*wk(2,j+1) + wk(1,j+1)*wk(2,j))
+        wk(2,j) = g*wk(1,j-1) + 2.0E+00 *(wk(1,j) + wk(1,j+1))
+    end do
+  end if
+!
+!  construct last equation from second boundary condition, of the form
+!           (-g*wk(2,n-1))*s(n-1) + wk(2,n)*s(n) = d(1,n)
+!
+!     if slope is prescribed at right end, one can go directly to back-
+!     substitution, since arrays happen to be set up just right for it
+!     at this point.
+  if (iend == 1)  go to 30
+!
+  if (iend == 0)  then
+     if (n==2 .and. ibeg==0)  then
+!           not-a-knot at right endpoint and at left endpoint and n = 2.
+        d(1,2) = wk(2,2)
+        go to 30
+     else if ((n==2) .or. (n==3 .and. ibeg==0))  then
+!           either (n=3 and not-a-knot also at left) or (n=2 and *not*
+!           not-a-knot at left end point).
+        d(1,n) = 2.0E+00 *wk(2,n)
+        wk(2,n) = 1.0E+00
+        if (wk(2,n-1) == 0.0E+00 )  go to 5008
+        g = -1.0/wk(2,n-1)
+     else
+!           not-a-knot and n >= 3, and either n>3 or  also not-a-
+!           knot at left end point.
+        g = wk(1,n-1) + wk(1,n)
+!           do not need to check following denominators (x-differences).
+        d(1,n) = ((wk(1,n)+2.0E+00 *g)*wk(2,n)*wk(1,n-1) &
+          + wk(1,n)**2*(f(1,n-1)-f(1,n-2))/wk(1,n-1))/g
+        if (wk(2,n-1) == 0.0E+00 )  go to 5008
+        g = -g/wk(2,n-1)
+        wk(2,n) = wk(1,n-1)
+     end if
+  else
+!        second derivative prescribed at right endpoint.
+     d(1,n) = 3.0*wk(2,n) + 0.5*wk(1,n)*d(1,n)
+     wk(2,n) = 2.0E+00
+     if (wk(2,n-1) == 0.0E+00 )  go to 5008
+     g = -1.0/wk(2,n-1)
+  end if
+!
+!  complete forward pass of gauss elimination.
+!
+  wk(2,n) = g*wk(1,n-1) + wk(2,n)
+  if (wk(2,n) == 0.0E+00 )   go to 5008
+  d(1,n) = (g*d(1,n-1) + d(1,n))/wk(2,n)
+!
+!  carry out back substitution
+!
+   30 continue
+
+  do j=n-1,1,-1
+     if (wk(2,j) == 0.0E+00 )  go to 5008
+     d(1,j) = (d(1,j) - wk(1,j)*d(1,j+1))/wk(2,j)
+  end do
+
+  return
+!
+!  error returns.
+!
+ 5001 continue
+!     n<2 return.
+  ierr = -1
+  call xerror ('pchsp -- number of data points less than two', 44, ierr, 1)
+  return
+
+ 5002 continue
+!     incfd<1 return.
+  ierr = -2
+  call xerror ('pchsp -- increment less than one', 32, ierr, 1)
+  return
+
+ 5003 continue
+!     x-array not strictly increasing.
+  ierr = -3
+  call xerror ('pchsp -- x-array not strictly increasing', 40, ierr, 1)
+  return
+!
+ 5004 continue
+!     ic out of range return.
+  ierr = ierr - 3
+  call xerror ('pchsp -- ic out of range', 24, ierr, 1)
+  return
+
+ 5007 continue
+!     nwk too small return.
+  ierr = -7
+  call xerror ('pchsp -- work array too small', 29, ierr, 1)
+  return
+!
+ 5008 continue
+!     singular system.
+!   *** theoretically, this can only occur if successive x-values
+!   *** are equal, which should already have been caught (ierr=-3).
+  ierr = -8
+  call xerror ('pchsp -- singular linear system', 31, ierr, 1)
+  return
+!
+ 5009 continue
+!     error return from pchdf.
+!   *** this case should never occur.
+  ierr = -9
+  call xerror ('pchsp -- error return from pchdf', 32, ierr, 1)
+  return
+end
+function pchst(arg1,arg2)
+!
+!*******************************************************************************
+!
+!! PCHST: pchip sign-testing routine.
+!
+!
+!     returns:
+!        -1. if arg1 and arg2 are of opposite sign.
+!         0. if either argument is zero.
+!        +1. if arg1 and arg2 are of the same sign.
+!
+!     the object is to do this without multiplying arg1*arg2, to avoid
+!     possible over/underflow problems.
+!
+!  programmed by:  fred n. fritsch,  fts 532-4275, (415) 422-4275,
+!                  mathematics and statistics division,
+!                  lawrence livermore national laboratory.
+!
+!
+  real arg1
+  real arg2
+  real pchst
+!
+!  perform the test.
+!
+  pchst = sign(1.0,arg1) * sign(1.0,arg2)
+  if ((arg1==0.0) .or. (arg2==0.0))  pchst = 0.0E+00
+!
+  return
+end
+subroutine pchsw(dfmax,iextrm,d1,d2,h,slope,ierr)
+!
+!*******************************************************************************
+!
+!! PCHSW: pchcs switch excursion limiter.
+!
+!
+!     called by  pchcs  to adjust d1 and d2 if necessary to insure that
+!     the extremum on this interval is not further than dfmax from the
+!     extreme data value.
+!
+!  Parameters:
+!
+!     dfmax -- (input) maximum allowed difference between f(iextrm) and
+!           the cubic determined by derivative values d1,d2.  (assumes
+!           dfmax>0.)
+!
+!     iextrm -- (input) index of the extreme data value.  (assumes
+!           iextrm = 1 or 2 .  any value /=1 is treated as 2.)
+!
+!     d1,d2 -- (input) derivative values at the ends of the interval.
+!           (assumes d1*d2 <= 0.)
+!          (output) may be modified if necessary to meet the restriction
+!           imposed by dfmax.
+!
+!     h -- (input) interval length.  (assumes  h>0.)
+!
+!     slope -- (input) data slope on the interval.
+!
+!     ierr -- (output) error flag.  should be zero.
+!           if ierr=-1, assumption on d1 and d2 is not satisfied.
+!           if ierr=-2, quadratic equation locating extremum has
+!                       negative descriminant (should never occur).
+!
+  real cp
+  real d1
+  real d2
+  real dfmax
+  real dmax
+  real, parameter :: fact = 100.0E+00
+  real h
+  integer ierr
+  integer iextrm
+  real lambda
+  real nu
+  real phi
+  real radcal
+  real rho
+  real r1mach
+  real sigma
+  real slope
+  real small
+  real that
+  real, parameter :: third = 0.33333
+!
+!  notation and general remarks.
+!
+!     rho is the ratio of the data slope to the derivative being tested.
+!     lambda is the ratio of d2 to d1.
+!     that = t-hat(rho) is the normalized location of the extremum.
+!     phi is the normalized value of p(x)-f1 at x = xhat = x-hat(rho),
+!           where  that = (xhat - x1)/h .
+!        that is, p(xhat)-f1 = d*h*phi,  where d=d1 or d2.
+!     similarly,  p(xhat)-f2 = d*h*(phi-rho) .
+!
+!      small should be a few orders of magnitude greater than macheps.
+!
+  small = fact * epsilon ( 1.0E+00 )
+!
+!  do main calculation.
+!
+  if (d1 == 0.0)  then
+!
+!        special case -- d1==0.0E+00 .
+!
+!          if d2 is also zero, this routine should not have been called.
+     if (d2 == 0.0)  go to 5001
+!
+     rho = slope/d2
+!          extremum is outside interval when rho >= 1/3 .
+     if (rho >= third)  go to 5000
+     that = (2.0*(3.0*rho-1.0)) / (3.0*(2.0*rho-1.0))
+     phi = that**2 * ((3.0*rho-1.0)/3.0)
+!
+!          convert to distance from f2 if iextrm/=1 .
+     if (iextrm /= 1)  phi = phi - rho
+!
+!          test for exceeding limit, and adjust accordingly.
+     dmax = dfmax / (h*abs(phi))
+     if (abs(d2) > dmax)  d2 = sign (dmax, d2)
+  else
+!
+     rho = slope/d1
+     lambda = -d2/d1
+     if (d2 == 0.0)  then
+!
+!           special case -- d2==0.0E+00 .
+!
+!             extremum is outside interval when rho >= 1/3 .
+        if (rho >= third)  go to 5000
+        cp = 2.0E+00 - 3.0*rho
+        nu = 1.0E+00 - 2.0*rho
+        that = 1.0E+00 / (3.0*nu)
+     else
+        if (lambda <= 0.0)  go to 5001
+!
+!           normal case -- d1 and d2 both nonzero, opposite signs.
+!
+        nu = 1.0E+00 - lambda - 2.0*rho
+        sigma = 1.0E+00 - rho
+        cp = nu + sigma
+        if (abs(nu) > small)  then
+           radcal = (nu - (2.0*rho+1.0))*nu + sigma**2
+           if (radcal < 0.0)  go to 5002
+           that = (cp - sqrt(radcal)) / (3.0*nu)
+        else
+           that = 1.0/(2.0*sigma)
+        end if
+     end if
+     phi = that*((nu*that - cp)*that + 1.0)
+!
+!          convert to distance from f2 if iextrm/=1 .
+     if (iextrm /= 1)  phi = phi - rho
+!
+!          test for exceeding limit, and adjust accordingly.
+     dmax = dfmax / (h*abs(phi))
+     if (abs(d1) > dmax)  then
+        d1 = sign (dmax, d1)
+        d2 = -lambda*d1
+     end if
+  end if
+!
+!  normal return.
+!
+ 5000 continue
+  ierr = 0
+  return
+!
+!  error returns.
+!
+ 5001 continue
+!     d1 and d2 both zero, or both nonzero and same sign.
+  ierr = -1
+  call xerror ('pchsw -- d1 and/or d2 invalid', 29, ierr, 1)
+  return
+!
+ 5002 continue
+!     negative value of radical (should never occur).
+  ierr = -2
+  call xerror ('pchsw -- negative radical', 25, ierr, 1)
+
+  return
+end
+function pi ( )
+!
+!*******************************************************************************
+!
+!! PI returns the value of pi.
+!
+!
+!  Modified:
+!
+!    04 December 1998
+!
+!  Author:
+!
+!    John Burkardt
+!
+!  Parameters:
+!
+!    Output, real PI, the value of pi.
+!
+  real pi
+!
+  pi = 3.14159265358979323846264338327950288419716939937510E+00
+
+  return
+end
+function pimach ()
+!
+!*******************************************************************************
+!
+!! PIMACH returns the value of pi.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+!    Output, real PIMACH, the value of PI.
+!
+  real pimach
+!
+  pimach = 4.0E+00 * atan ( 1.0E+00 )
+
+  return
+end
+subroutine q1da(f,a,b,eps,r,e,kf,iflag)
+!
+!*******************************************************************************
+!
+!! Q1DA approximates the definite integral of a user defined function of one variable.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+!       f     (input) the name of the external function which
+!             evaluates the integrand.
+!       a
+!       b     (input) the endpoints of the integration interval
+!       eps   (input) the accuracy to which you want the integral
+!                computed.  if you want 2 digits of accuracy set
+!                eps=.01, for 3 digits set eps=.001, etc.
+!                eps must be positive.
+!       r     (output) q1da's best estimate of your integral
+!       e     (output) an estimate of abs(integral-r)
+!       kf    (output) the cost of the integration, measured in
+!                   number of evaluations of your integrand.
+!                   kf will always be at least 30.
+!       iflag (output) termination flag...possible values are
+!               0   normal completion, e satisfies
+!                        e<eps  and  e<eps*abs(r)
+!               1   normal completion, e satisfies
+!                        e<eps, but e>eps*abs(r)
+!               2   normal completion, e satisfies
+!                        e<eps*abs(r), but e>eps
+!               3   normal completion but eps was too small to
+!                     satisfy absolute or relative error request.
+!
+!               4   aborted calculation because of serious rounding
+!                     error.  probably e and r are consistent.
+!               5   aborted calculation because of insufficient storage.
+!                     r and e are consistent.
+!               6   aborted calculation because of serious difficulties
+!                     meeting your error request.
+!               7   aborted calculation because eps was set <= 0.0E+00
+!
+!            note...if iflag=3, 4, 5 or 6 consider using q1dax instead.
+!
+!    w h e r e   i s   y o u r   i n t e g r a n d ?
+!
+!        you must write a fortran function, called f, to evaluate
+!        the integrand.  usually this looks like...
+!               function f(x)
+!                    f=(evaluate the integrand at the point x)
+!                    return
+!               end
+!
+!
+!    t y p i c a l   p r o b l e m   s e t u p
+!
+!          a=0.0E+00
+!          b=1.0E+00          (set interval endpoints to [0,1])
+!          eps=0.001       (set accuracy request for 3 digits)
+!          call q1da(f,a,b,eps,r,e,kf,iflag)
+!        end
+!        function f(x)
+!            f=sin(2.*x)-sqrt(x)     (for example)
+!            return
+!        end
+!      for this sample problem, the output is
+!  0.0E+00    1.0E+00     .001    .041406750    .69077e-07    30    0
+!
+!    r e m a r k   i.
+!
+!           a small amout of randomization is built into this program.
+!           calling q1da a few times in succession will give different
+!           but hopefully consistent results.
+!
+!   r e m a r k   ii.
+!
+!           this routine is designed for integration over a finite
+!           interval.  thus the input arguments a and b must be
+!           valid real numbers on your computer.  if you want to do
+!           an integral over an infinite interval set a or b or both
+!           large enough so that the interval [a,b] contains most of
+!           the integrand.  care is necessary, however.  for example,
+!           to integrate exp(-x*x) on the entire real line one could
+!           take a=-20., b=20. or similar values to get good results.
+!           if you took a=-1.e10 and b=+1.e10 two bad things would
+!           occur. first, you will certainly get an error message from
+!           the exp routine, as its argument is too small.  other
+!           things could happen too, for example an underflow.
+!           second, even if the arithmetic worked properly q1da will
+!           surely give an incorrect answer, because its first try
+!           at sampling the integrand is based on your scaling and
+!           it is very unlikely to select evaluation points in the
+!           infinitesmally small interval [-20,20] where all the
+!           integrand is concentrated, when a, b are so large.
+!
+!    m o r e   f l e x i b i l i t y
+!
+!           q1da is an easy to use driver for another program, q1dax.
+!           q1dax provides several options which are not available
+!                with q1da.
+!
+  integer, parameter :: nmax = 50
+!
+  real a
+  real b
+  real e
+  real eps
+  real f
+  real fmax
+  real fmin
+  integer iflag
+  integer kf
+  integer nint
+  real r
+  logical rst
+  real w(nmax,6)
+!
+  external f
+!
+  nint=1
+  rst = .false.
+  call q1dax(f,a,b,eps,r,e,nint,rst,w,nmax,fmin,fmax,kf,iflag)
+
+  return
+end
+subroutine q1dax(f,a,b,eps,r,e,nint,rst,w,nmax,fmin,fmax,kf,iflag)
+!
+!*******************************************************************************
+!
+!! Q1DAX approximates the integral of a function of one variable.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!
+!             for an easier to use routine see q1da.
+!
+!             capabilities of q1dax (in addition to those of q1da)
+!             include:
+!                ability to restart a calculation to greater
+!                  accuracy without penalty...
+!                ability to specify an initial partition of
+!                  the integration interval...
+!                ability to increase the work space to handle
+!                  more difficult problems...
+!                output of largest/smallest integrand value for
+!                  applications such as scaling graphs...
+!
+!       a r g u m e n t s   i n   t h e   c a l l   s e q u e n c e
+!
+!       f      (input) the name of your integrand function.
+!                      this name must appear in an external statement
+!                      in any program which calls q1dax.
+!                      you must write f in the form
+!                         function f(x)
+!                              f=(evaluate integrand at the point x)
+!                              return
+!                         end
+!       a
+!       b       (input) endpoints of integration interval
+!       eps     (input)  accuracy to which the integral is to be calculated.
+!                          q1dax will try to achieve relative accuracy,
+!                          e.g. set eps=.01 for 2 digits, .001 for 3, etc.
+!       r       (output) the estimate of the integral
+!       e       (output) the estimate of the absolute error in r.
+!       nint    (input
+!                output)
+!                        as an input quantity, nint must be set to
+!                          the number of subintervals in the initial
+!                          partition of [a,b].  for most problems
+!                          this is just 1, the interval [a,b] itself.
+!                          nint must be less than nmax, see below.
+!                          nint is useful if you would like to help
+!                          q1dax locate a difficult spot on [a,b].
+!                          in this regard nint is used along
+!                          with the array w (see below).  if you set
+!                          nint=1 it is not necessary to be concerned
+!                          with w, except that it must be dimensioned...
+!                          as an example of more general applications,
+!                          if [a,b]=[0,1] but the integrand jumps at 0.3,
+!                          it would be wise to set nint=2 and then set
+!                                  w(1,1)=0.0E+00  (left endpoint)
+!                                  w(2,1)=0.3  (singular point)
+!                                  w(3,1)=1.0E+00  (right endpoint)
+!                          if you set nint greater than 1, be sure to
+!                          check that you have also set
+!                                w(1,1)=a  and  w(nint+1,1)=b
+!                        as an output quantity, nint gives the
+!                          number of subintervals in the final
+!                          partition of [a,b].
+!       rst     (input) a logical variable (e.g. true or false)
+!                       set rst=.false. for initial call to q1dax
+!                       set rst=.true. for a subsequent call,
+!                           e.g. one for which more accuracy is
+!                           desired (smaller eps).  a restart only
+!                           makes sense if the preceding call returned
+!                           with a value of iflag (see below) less than 3.
+!                           on a restart you may not change the values of any
+!                           other arguments in the call sequence, except eps.
+!       w(nmax,6) (input and
+!                  scratch)
+!                       w is an array used by q1dax.
+!                        you  m u s t  include a dimension statement in
+!                        your calling program to allocate this storage.
+!                        this should be of the form
+!                                   dimension w(nmax,6)
+!                        where nmax is an integer. an adequate value of
+!                        nmax is 50.  if you set nint>1 you must also
+!                        initialize w, see nint above.
+!       nmax    (input) an integer equal to the first subscript in the
+!                        dimension statement for the array w.  this is
+!                        also equal to the maximum number of subintervals
+!                        permitted in the internal partition of [a,b].
+!                        a value of 50 is ample for most problems.
+!       fmin
+!       fmax    (output) the smallest and largest values of the integrand
+!                          which occurred during the calculation.  the
+!                          actual integrand range on [a,b] may, of course,
+!                          be greater but probably not by more than 10%.
+!       kf      (output) the actual number of integrand evaluations used
+!                          by q1dax to approximate this integral.  kf
+!                          will always be at least 30.
+!       iflag   (output) termination flag...possible values are
+!                  0   normal completion, e satisfies
+!                           e<eps  and  e<eps*abs(r)
+!                  1   normal completion, e satisfies
+!                           e<eps, but e>eps*abs(r)
+!                  2   normal completion, e satisfies
+!                           e<eps*abs(r), but e>eps
+!                  3   normal completion but eps was too small to
+!                        satisfy absolute or relative error request.
+!                  4   aborted calculation because of serious rounding
+!                        error.  probably e and r are consistent.
+!                  5   aborted calculation because of insufficient storage.
+!                        r and e are consistent.  perhaps increasing nmax
+!                        will produce better results.
+!                  6   aborted calculation because of serious difficulties
+!                        meeting your error request.
+!                  7   aborted calculation because either eps, nint or nmax
+!                        has been set to an illegal value.
+!                  8   aborted calculation because you set nint>1 but forgot
+!                        to set w(1,1)=a  and  w(nint+1,1)=b
+!
+!     t y p i c a l   p r o b l e m   s e t   u p
+!
+!      dimension w(50,6)
+!      logical rst
+!      external f
+!      a=0.0E+00
+!      b=1.0E+00
+!      w(1,1)=a
+!      w(2,1)=.3      [set internal partition point at .3]
+!      w(3,1)=b
+!      nint=2         [initial partition has 2 intervals]
+!      rst=.false.
+!      eps=.001
+!      nmax=50
+!
+!    1 call q1dax(f,a,b,eps,r,e,nint,rst,w,nmax,fmin,fmax,kf,iflag)
+!
+!      if ( eps== .0001 .or. iflag>=3)stop
+!      rst=.true
+!      eps=.0001      [ask for another digit]
+!      go to 1
+!    end
+!    function f(x)
+!      if ( x< .3)
+!     1  then
+!          f=x**(0.2)*log(x)
+!        else
+!          f=sin(x)
+!      end if
+!      return
+!    end
+!
+!
+!            r e m a r k
+!
+!               when you use q1adx with nint=1, we have built a small
+!            amount of randomization into it.  repeated calls during
+!            the same run will produce different, but hopefully
+!            consistent, results.
+!
+  integer nmax
+!
+  real a
+  real b
+  integer c
+  real e
+  real eb
+  real epmach
+  real eps
+  real f
+  real fmax
+  real fmaxl
+  real fmaxr
+  real fmin
+  real fminl
+  real fminr
+  real fmn
+  real fmx
+  integer i
+  integer iflag
+  integer iroff
+  integer isamax
+  integer kf
+  integer loc
+  integer mxtry
+  integer nint
+  real r
+  real r1mach
+  real rab
+  real rabs
+  real rav
+  logical rst
+  real t
+  real te
+  real te1
+  real te2
+  real tr
+  real tr1
+  real tr2
+  real uflow
+  real uni
+  real w(nmax,6)
+  real xm
+!
+  external f
+!
+  epmach = epsilon ( epmach )
+  uflow = tiny ( uflow )
+  mxtry=nmax/2
+!
+!  in case there is no more room, we can toss out easy intervals,
+!  at most mxtry times.
+!
+  if ( a==b) then
+    r=0.0E+00
+    e=0.0E+00
+    nint=0
+    iflag=0
+    kf=1
+    fmin=f(a)
+    fmax=fmin
+    go to 20
+  end if
+
+  if ( rst) then
+     if ( iflag<3) then
+       eb=max(100.*uflow,max(eps,50.*epmach)*abs(r))
+       do i=1,nint
+           if ( abs(w(i,3))>(eb*(w(i,2)-w(i,1))/(b-a)) ) then
+                             w(i,3)=abs(w(i,3))
+           else
+                             w(i,3)=-abs(w(i,3))
+           end if
+       end do
+       go to 15
+     else
+       go to 20
+     end if
+  end if
+
+  kf=0
+
+  if ( eps <= 0. .or. nint <= 0 .or. nint >= nmax) then
+      iflag=7
+      go to 20
+  end if
+
+  if ( nint==1) then
+      w(1,1)=a
+      w(2,2)=b
+      w(1,5)=a
+      w(1,6)=b
+      w(2,5)=a
+      w(2,6)=b
+!
+!  Select the first subdivision randomly.
+!
+      w(1,2) = a + ( b - a ) / 2.0 * ( 2.0 * uni() + 7.0 ) / 8.0
+      w(2,1) = w(1,2)
+      nint = 2
+    else
+      if ( w(1,1)/=a .or. w(nint+1,1)/=b) then
+           iflag=8
+           go to 20
+      end if
+      w(1,5)=a
+      do i=1,nint
+         w(i,2)=w(i+1,1)
+         w(i,5)=w(i,1)
+         w(i,6)=w(i,2)
+      end do
+  end if
+
+  iflag = 0
+  iroff=0
+  rabs=0.0E+00
+
+  do i=1,nint
+
+      call gl15t(f,w(i,1),w(i,2),dble(w(i,5)),dble(w(i,6)), &
+               w(i,4),w(i,3),rab,rav,fmn,fmx)
+      kf=kf+15
+
+      if ( i==1) then
+        r=w(i,4)
+        e=w(i,3)
+        rabs=rabs+rab
+        fmin=fmn
+        fmax=fmx
+      else
+        r=r+w(i,4)
+        e=e+w(i,3)
+        rabs=rabs+rab
+        fmax=max(fmax,fmx)
+        fmin=min(fmin,fmn)
+      end if
+
+  end do
+
+  w(nint+1:nmax,3) = 0.0E+00
+
+   15 continue
+!
+!   main subprogram loop
+!
+  if ( 100.*epmach*rabs>=abs(r) .and. e<eps)go to 20
+  eb=max(100.*uflow,max(eps,50.*epmach)*abs(r))
+  if ( e<=eb) go to 20
+
+  if (nint<nmax) then
+    nint = nint+1
+    c = nint
+  else
+    c=0
+16  continue
+    if ( c==nmax .or. mxtry<=0) then
+        iflag=5
+        go to 20
+    end if
+
+    c=c+1
+    if ( w(c,3)>0.0) go to 16
+!
+!  found an interval to throw out
+!
+    mxtry=mxtry-1
+  end if
+
+  loc=isamax(nint,w(1,3),1)
+  xm = w(loc,1)+(w(loc,2)-w(loc,1))/2.
+  if ((max(abs(w(loc,1)),abs(w(loc,2))))> &
+    ((1.+100.*epmach)*(abs(xm)+0.1e+04*uflow))) then
+
+        call gl15t(f,w(loc,1),xm,dble(w(loc,5)),dble(w(loc,6)), &
+          tr1,te1,rab,rav,fminl,fmaxl)
+
+        kf=kf+15
+        if (te1<(eb*(xm-w(loc,1))/(b-a))) te1=-te1
+        call gl15t(f,xm,w(loc,2),dble(w(loc,5)),dble(w(loc,6)), &
+          tr2,te2,rab,rav,fminr,fmaxr)
+
+        kf=kf+15
+        fmin=min(fmin,fminl,fminr)
+        fmax=max(fmax,fmaxl,fmaxr)
+        if (te2<(eb*(w(loc,2)-xm)/(b-a))) te2=-te2
+        te = abs(w(loc,3))
+        tr = w(loc,4)
+        w(c,3) = te2
+        w(c,4) = tr2
+        w(c,1) = xm
+        w(c,2) = w(loc,2)
+        w(c,5) = w(loc,5)
+        w(c,6) = w(loc,6)
+        w(loc,3) = te1
+        w(loc,4) = tr1
+        w(loc,2) = xm
+        e = e-te+(abs(te1)+abs(te2))
+        r = r-tr+(tr1+tr2)
+        if ( abs(abs(te1)+abs(te2)-te)<0.001*te) then
+            iroff=iroff+1
+            if ( iroff>=10) then
+                 iflag=4
+                 go to 20
+            end if
+        end if
+      else
+        if (eb>w(loc,3))then
+               w(loc,3) = 0.
+           else
+               iflag=6
+               go to 20
+        end if
+  end if
+  go to 15
+!
+!  all exits from here
+!
+   20 continue
+  if ( iflag>=4)return
+  iflag=3
+  t=eps*abs(r)
+  if ( e>eps .and. e>t)return
+  iflag=2
+  if ( e>eps .and. e<t)return
+  iflag=1
+  if ( e<eps .and. e>t)return
+  iflag=0
+  return
+end
+subroutine qagi(f,bound,inf,epsabs,epsrel,result,abserr,neval, &
+  ier,limit,lenw,last,iwork,work)
+!
+!*******************************************************************************
+!
+!! QAGI calculates an approximation result to a given
+!            integral   i = integral of f over (bound,+infinity)
+!                    or i = integral of f over (-infinity,bound)
+!                    or i = integral of f over (-infinity,+infinity)
+!            hopefully satisfying following claim for accuracy
+!            abs(i-result)<=max(epsabs,epsrel*abs(i)).
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+!         on entry
+!            f      - real
+!                   function subprogram defining the integrand
+!                   function f(x). the actual name for f needs to be
+!                     declared e x t e r n a l in the driver program.
+!
+!            bound  - real
+!                     finite bound of integration range
+!                     (has no meaning if interval is doubly-infinite)
+!
+!            inf    - integer
+!                     indicating the kind of integration range involved
+!                     inf = 1 corresponds to  (bound,+infinity),
+!                     inf = -1            to  (-infinity,bound),
+!                     inf = 2             to (-infinity,+infinity).
+!
+!            epsabs - real
+!                     absolute accuracy requested
+!            epsrel - real
+!                     relative accuracy requested
+!                     if  epsabs<=0
+!                     and epsrel<max(50*rel.mach.acc.,0.5d-28),
+!                     the routine will end with ier = 6.
+!
+!
+!         on return
+!            result - real
+!                     approximation to the integral
+!
+!            abserr - real
+!                     estimate of the modulus of the absolute error,
+!                     which should equal or exceed abs(i-result)
+!
+!            neval  - integer
+!                     number of integrand evaluations
+!
+!            ier    - integer
+!                     ier = 0 normal and reliable termination of the
+!                             routine. it is assumed that the requested
+!                             accuracy has been achieved.
+!                   - ier>0 abnormal termination of the routine. the
+!                             estimates for result and error are less
+!                             reliable. it is assumed that the requested
+!                             accuracy has not been achieved.
+!            error messages
+!                     ier = 1 maximum number of subdivisions allowed
+!                             has been achieved. one can allow more
+!                             subdivisions by increasing the value of
+!                             limit (and taking the according dimension
+!                             adjustments into account). however, if
+!                             this yields no improvement it is advised
+!                             to analyze the integrand in order to
+!                             determine the integration difficulties. if
+!                             the position of a local difficulty can be
+!                             determined (e.g. singularity,
+!                             discontinuity within the interval) one
+!                             will probably gain from splitting up the
+!                             interval at this point and calling the
+!                             integrator on the subranges. if possible,
+!                             an appropriate special-purpose integrator
+!                             should be used, which is designed for
+!                             handling the type of difficulty involved.
+!                         = 2 the occurrence of roundoff error is
+!                             detected, which prevents the requested
+!                             tolerance from being achieved.
+!                             the error may be under-estimated.
+!                         = 3 extremely bad integrand behaviour occurs
+!                             at some points of the integration
+!                             interval.
+!                         = 4 the algorithm does not converge.
+!                             roundoff error is detected in the
+!                             extrapolation table.
+!                             it is assumed that the requested tolerance
+!                             cannot be achieved, and that the returned
+!                             result is the best which can be obtained.
+!                         = 5 the integral is probably divergent, or
+!                             slowly convergent. it must be noted that
+!                             divergence can occur with any other value
+!                             of ier.
+!                         = 6 the input is invalid, because
+!                             (epsabs<=0 and
+!                              epsrel<max(50*rel.mach.acc.,0.5d-28))
+!                              or limit<1 or leniw<limit*4.
+!                             result, abserr, neval, last are set to
+!                             zero. exept when limit or leniw is
+!                             invalid, iwork(1), work(limit*2+1) and
+!                             work(limit*3+1) are set to zero, work(1)
+!                             is set to a and work(limit+1) to b.
+!
+!         dimensioning parameters
+!            limit - integer
+!                    dimensioning parameter for iwork
+!                    limit determines the maximum number of subintervals
+!                    in the partition of the given integration interval
+!                    (a,b), limit>=1. in many cases limit = 100 is ok.
+!                    if limit<1, the routine will end with ier = 6.
+!
+!            lenw  - integer
+!                    dimensioning parameter for work
+!                    lenw must be at least limit*4.
+!                    if lenw<limit*4, the routine will end
+!                    with ier = 6.
+!
+!            last  - integer
+!                    on return, last equals the number of subintervals
+!                    produced in the subdivision process, which
+!                    determines the number of significant elements
+!                    actually in the work arrays.
+!
+!         work arrays
+!            iwork - integer
+!                    vector of dimension at least limit, the first
+!                    k elements of which contain pointers
+!                    to the error estimates over the subintervals,
+!                    such that work(limit*3+iwork(1)),... ,
+!                    work(limit*3+iwork(k)) form a decreasing
+!                    sequence, with k = last if last<=(limit/2+2), and
+!                    k = limit+1-last otherwise
+!
+!            work  - real
+!                    vector of dimension at least lenw
+!                    on return
+!                    work(1), ..., work(last) contain the left
+!                   end points of the subintervals in the
+!                     partition of (a,b),
+!                    work(limit+1), ..., work(limit+last) contain
+!                     the right end points,
+!                    work(limit*2+1), ...,work(limit*2+last) contain the
+!                     integral approximations over the subintervals,
+!                    work(limit*3+1), ..., work(limit*3)
+!                     contain the error estimates.
+!
+  integer lenw
+  integer limit
+!
+  real abserr
+  real bound
+  real epsabs
+  real epsrel
+  real f
+  integer ier
+  integer inf
+  integer iwork(limit)
+  integer last
+  integer lvl
+  integer l1
+  integer l2
+  integer l3
+  integer neval
+  real result
+  real work(lenw)
+!
+  external f
+!
+!  check validity of limit and lenw.
+!
+  ier = 6
+  neval = 0
+  last = 0
+  result = 0.0E+00
+  abserr = 0.0E+00
+
+  if ( limit < 1 .or. lenw < limit * 4 ) go to 10
+!
+!  prepare call for qagie.
+!
+  l1 = limit+1
+  l2 = limit+l1
+  l3 = limit+l2
+
+  call qagie(f,bound,inf,epsabs,epsrel,limit,result,abserr, &
+    neval,ier,work(1),work(l1),work(l2),work(l3),iwork,last)
+!
+!  call error handler if necessary.
+!
+  lvl = 0
+
+10    continue
+
+  if ( ier==6) lvl = 1
+  if ( ier/=0) call xerror( 'abnormal return from  qagi', 26,ier,lvl)
+
+  return
+end
+subroutine qagie(f,bound,inf,epsabs,epsrel,limit,result,abserr, &
+  neval,ier,alist,blist,rlist,elist,iord,last)
+!
+!*******************************************************************************
+!
+!! QAGIE ??
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+  integer, parameter :: limexp = 50
+  integer limit
+!
+  real abseps
+  real abserr
+  real alist(limit)
+  real area
+  real area1
+  real area12
+  real area2
+  real a1
+  real a2
+  real blist(limit)
+  real boun
+  real bound
+  real b1
+  real b2
+  real correc
+  real defabs
+  real defab1
+  real defab2
+  real dres
+  real elist(limit)
+  real epmach
+  real epsabs
+  real epsrel
+  real erlarg
+  real erlast
+  real errbnd
+  real errmax
+  real error1
+  real error2
+  real erro12
+  real errsum
+  real ertest
+  logical extrap
+  real f
+  integer id
+  integer ier
+  integer ierr
+  integer ierro
+  integer inf
+  integer iord(limit)
+  integer iroff1
+  integer iroff2
+  integer iroff3
+  integer jupbnd
+  integer k
+  integer ksgn
+  integer ktmin
+  integer last
+  logical lerr
+  integer maxerr
+  integer neval
+  logical newflg
+  logical noext
+  integer nrmax
+  real resabs
+  real reseps
+  real result
+  real rlist(limit)
+  real rlist2(limexp+7)
+  real r1mach
+  real small
+  real uflow
+!
+!           limexp is the size of the epsilon table that can be
+!           generated in ea
+!
+  external f
+!
+   epmach = epsilon ( epmach )
+!
+!           test on validity of parameters
+!
+  ier = 0
+  neval = 0
+  last = 0
+  result = 0.0E+00
+  abserr = 0.0E+00
+  alist(1) = 0.0E+00
+  blist(1) = 1.0E+00
+  rlist(1) = 0.0E+00
+  elist(1) = 0.0E+00
+  iord(1) = 0
+  newflg = .true.
+
+  if ( epsabs<=0.0E+00 .and. epsrel< max (0.5e+02*epmach,0.5e-14) ) then
+    ier = 6
+    go to 999
+  end if
+!
+!  first approximation to the integral
+!
+!  determine the interval to be mapped onto (0,1).
+!  if inf = 2 the integral is computed as i = i1+i2, where
+!  i1 = integral of f over (-infinity,0),
+!  i2 = integral of f over (0,+infinity).
+!
+  boun = bound
+  if ( inf==2) boun = 0.0E+00
+  call qk15i(f,boun,inf,0.0,1.0,result,abserr, defabs,resabs)
+!
+!  test on accuracy
+!
+  last = 1
+  rlist(1) = result
+  elist(1) = abserr
+  iord(1) = 1
+  dres = abs(result)
+  errbnd = max (epsabs,epsrel*dres)
+  if ( abserr<=1.0e+02*epmach*defabs.and.abserr>errbnd) ier = 2
+  if ( limit==1) ier = 1
+
+  if ( ier/=0.or.(abserr<=errbnd.and.abserr/=resabs).or.abserr==0.0) then
+    go to 130
+  end if
+!
+!  Initialization.
+!
+  uflow = 2.0E+00 * tiny ( uflow )
+  lerr = .false.
+  call ea(newflg,result,limexp,reseps,abseps,rlist2,ierr)
+  errmax = abserr
+  maxerr = 1
+  area = result
+  errsum = abserr
+  nrmax = 1
+  ktmin = 0
+  extrap = .false.
+  noext = .false.
+  ierro = 0
+  iroff1 = 0
+  iroff2 = 0
+  iroff3 = 0
+  ksgn = -1
+  if ( dres>=(1.0-0.5e+02*epmach)*defabs) ksgn = 1
+!
+!  main do-loop
+!
+  do 90 last = 2,limit
+!
+!  bisect the subinterval with nrmax-th largest error estimate.
+!
+    a1 = alist(maxerr)
+    b1 = 0.5*(alist(maxerr)+blist(maxerr))
+    a2 = b1
+    b2 = blist(maxerr)
+    erlast = errmax
+    call qk15i(f,boun,inf,a1,b1,area1,error1,resabs,defab1)
+    call qk15i(f,boun,inf,a2,b2,area2,error2,resabs,defab2)
+!
+!  Improve previous approximations to integral
+!  and error and test for accuracy.
+!
+    area12 = area1+area2
+    erro12 = error1+error2
+    errsum = errsum+erro12-errmax
+    area = area+area12-rlist(maxerr)
+    if ( defab1==error1.or.defab2==error2)go to 15
+
+    if ( abs(rlist(maxerr)-area12)>0.1e-04*abs(area12) .or. &
+      erro12<0.99*errmax) go to 10
+
+    if ( extrap) iroff2 = iroff2+1
+    if ( .not.extrap) iroff1 = iroff1+1
+   10   if ( last>10.and.erro12>errmax) iroff3 = iroff3+1
+   15   rlist(maxerr) = area1
+    rlist(last) = area2
+    errbnd = max (epsabs,epsrel*abs(area))
+!
+!  Test for roundoff error and eventually set error flag.
+!
+    if ( iroff1+iroff2>=10.or.iroff3>=20) ier = 2
+    if ( iroff2>=5) ierro = 3
+!
+!  Set error flag in the case that the number of subintervals equals limit.
+!
+    if ( last==limit) ier = 1
+!
+!  Set error flag in the case of bad integrand behaviour
+!  at some points of the integration range.
+!
+    if ( max (abs(a1),abs(b2))<=(1.0+0.1e+03*epmach)* &
+      (abs(a2)+0.1e+04*uflow)) then
+      ier = 4
+    end if
+!
+!  Append the newly-created intervals to the list.
+!
+    if ( error2>error1) go to 20
+    alist(last) = a2
+    blist(maxerr) = b1
+    blist(last) = b2
+    elist(maxerr) = error1
+    elist(last) = error2
+    go to 30
+   20   alist(maxerr) = a2
+    alist(last) = a1
+    blist(last) = b1
+    rlist(maxerr) = area2
+    rlist(last) = area1
+    elist(maxerr) = error2
+    elist(last) = error1
+!
+!           call subroutine qpsrt to maintain the descending ordering
+!           in the list of error estimates and select the
+!           subinterval with nrmax-th largest error estimate (to be
+!           bisected next).
+!
+   30   call qpsrt(limit,last,maxerr,errmax,elist,iord,nrmax)
+    if ( errsum<=errbnd) go to 115
+    if ( ier/=0) go to 100
+    if ( last==2) go to 80
+    if ( noext) go to 90
+    erlarg = erlarg-erlast
+    if ( abs(b1-a1)>small) erlarg = erlarg+erro12
+    if ( extrap) go to 40
+!
+!           test whether the interval to be bisected next is the
+!           smallest interval.
+!
+    if ( abs(blist(maxerr)-alist(maxerr))>small) go to 90
+    extrap = .true.
+    nrmax = 2
+   40   if ( ierro==3.or.erlarg<=ertest) go to 60
+!
+!           the smallest interval has the largest error.
+!           before bisecting decrease the sum of the errors
+!           over the larger intervals (erlarg) and perform
+!           extrapolation.
+!
+    id = nrmax
+    jupbnd = last
+    if ( last>(2+limit/2)) then
+      jupbnd = limit+3-last
+    end if
+
+    do k = id,jupbnd
+      maxerr = iord(nrmax)
+      errmax = elist(maxerr)
+      if ( abs(blist(maxerr)-alist(maxerr))>small) go to 90
+      nrmax = nrmax+1
+    end do
+!
+!           perform extrapolation.
+!
+   60   call ea(newflg,area,limexp,reseps,abseps,rlist2,ierr)
+    ktmin = ktmin+1
+
+    if ( (ktmin>5).and.(abserr<0.1e-02*errsum).and.(lerr)) then
+      ier = 5
+    end if
+
+    if ( (abseps>=abserr).and.(lerr)) go to 70
+    ktmin = 0
+    abserr = abseps
+    lerr = .true.
+    result = reseps
+    correc = erlarg
+    ertest = max (epsabs,epsrel*abs(reseps))
+    if ( (abserr<=ertest).and.(lerr)) go to 100
+!
+!            prepare bisection of the smallest interval.
+!
+   70   if ( rlist2(limexp+3)==1) noext = .true.
+    if ( ier==5) go to 100
+    maxerr = iord(1)
+    errmax = elist(maxerr)
+    nrmax = 1
+    extrap = .false.
+    small = small*0.5
+    erlarg = errsum
+    go to 90
+   80   small = 0.375
+    erlarg = errsum
+    ertest = errbnd
+    call ea(newflg,area,limexp,reseps,abseps,rlist2,ierr)
+   90 continue
+!
+!           set final result and error estimate.
+!
+  100 if ( .not.lerr) go to 115
+  if ( (ier+ierro)==0) go to 110
+  if ( ierro==3) abserr = abserr+correc
+  if ( ier==0) ier = 3
+  if ( result/=0.0.and.area/=0.0)go to 105
+  if ( abserr>errsum)go to 115
+  if ( area==0.0) go to 130
+  go to 110
+  105 if ( abserr/abs(result)>errsum/abs(area))go to 115
+!
+!           test on divergence
+!
+  110 continue
+
+    if ( ksgn==(-1).and. max (abs(result),abs(area))<=defabs*0.1e-01) then
+      go to 130
+    end if
+
+  if ( 0.1e-01>(result/area).or.(result/area)>0.1e+03.or.errsum>abs(area)) then
+    ier = 6
+  end if
+
+  go to 130
+!
+!  Compute global integral sum.
+!
+  115 continue
+
+  result = 0.0E+00
+  do k = 1,last
+    result = result+rlist(k)
+  end do
+
+  abserr = errsum
+  130 neval = 30*last-15
+  if ( inf==2) neval = 2*neval
+  if ( ier>2) ier=ier-1
+  999 return
+end
+subroutine qform(m,n,q,ldq,wa)
+!
+!*******************************************************************************
+!
+!! QFORM produces the explicit QR factorization of a matrix from its implicit form.
+!
+!
+!  Discussion:
+!
+!    The QR factorization of a matrix is usually accumulated in implicit
+!    form, that is, as a series of orthogonal transformations of the
+!    original matrix.  This routine carries out those transformations,
+!    to explicitly exhibit the factorization construced by QRFAC.
+!
+!  Parameters:
+!
+!       m is a positive integer input variable set to the number
+!         of rows of a and the order of q.
+!
+!       n is a positive integer input variable set to the number
+!         of columns of a.
+!
+!       q is an m by m array. on input the full lower trapezoid in
+!         the first min(m,n) columns of q contains the factored form.
+!         on output q has been accumulated into a square matrix.
+!
+!       ldq is a positive integer input variable not less than m
+!         which specifies the leading dimension of the array q.
+!
+!       wa is a work array of length m.
+!
+  integer ldq
+  integer m
+  integer n
+!
+  integer i
+  integer j
+  integer jm1
+  integer k
+  integer l
+  integer minmn
+  integer np1
+  real q(ldq,m)
+  real sum
+  real temp
+  real wa(m)
+!
+  minmn = min(m,n)
+
+  do j = 2, minmn
+    q(1:j-1,j) = 0.0E+00
+  end do
+!
+!  Initialize remaining columns to those of the identity matrix.
+!
+  np1 = n + 1
+
+  do j = n+1, m
+    do i = 1, m
+      q(i,j) = 0.0E+00
+    end do
+    q(j,j) = 1.0E+00
+  end do
+!
+!     accumulate q from its factored form.
+!
+  do l = 1, minmn
+
+    k = minmn - l + 1
+
+    wa(k:m) = q(k:m,k)
+
+    q(k:m,k) = 0.0E+00
+    q(k,k) = 1.0E+00
+
+    if (wa(k) /= 0.0) then
+
+      do j = k, m
+        sum = 0.0E+00
+        do i = k, m
+          sum = sum + q(i,j)*wa(i)
+        end do
+        temp = sum/wa(k)
+        do i = k, m
+          q(i,j) = q(i,j) - temp*wa(i)
+        end do
+      end do
+
+    end if
+
+  end do
+
+  return
+end
+subroutine qk15(f,a,b,result,abserr,resabs,resasc)
+!
+!*******************************************************************************
+!
+!! QK15 carries out a 15 point Gauss-Kronrod quadrature rule.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+!           on entry
+!
+!              f      - real
+!                     function subprogram defining the integrand
+!                     function f(x). the actual name for f needs to be
+!                       declared e x t e r n a l in the calling program.
+!
+!              a      - real: lower limit of integration
+!
+!              b      - real: upper limit of integration
+!
+!            on return
+!              result - real: approximation to the integral i
+!                       result is computed by applying the 15-point
+!                       kronrod rule (resk) obtained by optimal addition
+!                       of abscissae to the7-point gauss rule(resg).
+!
+!              abserr - real: estimate of the modulus of the absolute error,
+!                       which should not exceed abs(i-result)
+!
+!              resabs - real: approximation to the integral j
+!
+!              resasc - real: approximation to the integral of abs(f-i/(b-a))
+!                       over (a,b)
+!
+!  references
+!
+!    piessens r. et. al.,
+!    "quadpack: a subroutine package for automatic integration"
+!    springer, berlin 1983.
+!
+  real a
+  real absc
+  real abserr
+  real b
+  real centr
+  real dhlgth
+  real epmach
+  real f
+  real fc
+  real fsum
+  real fval1
+  real fval2
+  real fv1(7)
+  real fv2(7)
+  real hlgth
+  integer j
+  integer jtw
+  integer jtwm1
+  real resabs
+  real resasc
+  real resg
+  real resk
+  real reskh
+  real result
+  real r1mach
+  real uflow
+  real wg(4)
+  real wgk(8)
+  real xgk(8)
+!
+  external f
+!
+!           the abscissae and weights are given for the interval (-1,1).
+!           because of symmetry only the positive abscissae and their
+!           corresponding weights are given.
+!
+!           xgk    - abscissae of the 15-point kronrod rule
+!                    xgk(2), xgk(4), ...  abscissae of the 7-point
+!                    gauss rule
+!                    xgk(1), xgk(3), ...  abscissae which are optimally
+!                    added to the 7-point gauss rule
+!
+!           wgk    - weights of the 15-point kronrod rule
+!
+!           wg     - weights of the 7-point gauss rule
+!
+  data xgk(1),xgk(2),xgk(3),xgk(4),xgk(5),xgk(6),xgk(7),xgk(8)/ &
+          0.9914553711208126,   0.9491079123427585, &
+          0.8648644233597691,   0.7415311855993944, &
+          0.5860872354676911,   0.4058451513773972, &
+          0.2077849550078985,   0.0E+00              /
+
+  data wgk(1),wgk(2),wgk(3),wgk(4),wgk(5),wgk(6),wgk(7),wgk(8)/ &
+     0.2293532201052922e-01,   0.6309209262997855e-01, &
+     0.1047900103222502,   0.1406532597155259, &
+     0.1690047266392679,   0.1903505780647854, &
+     0.2044329400752989,   0.2094821410847278/
+
+  data wg(1),wg(2),wg(3),wg(4)/ &
+    0.1294849661688697,   0.2797053914892767, &
+    0.3818300505051189,   0.4179591836734694/
+!
+!
+!           list of major variables
+!
+!           centr  - mid point of the interval
+!           hlgth  - half-length of the interval
+!           absc   - abscissa
+!           fval*  - function value
+!           resg   - result of the 7-point gauss formula
+!           resk   - result of the 15-point kronrod formula
+!           reskh  - approximation to the mean value of f over (a,b),
+!                    i.e. to i/(b-a)
+!
+  epmach = epsilon ( epmach )
+  uflow = tiny ( uflow )
+  centr = 0.5*(a+b)
+  hlgth = 0.5*(b-a)
+  dhlgth = abs(hlgth)
+!
+!  compute the 15-point kronrod approximation to
+!  the integral, and estimate the absolute error.
+!
+  fc = f(centr)
+  resg = fc*wg(4)
+  resk = fc*wgk(8)
+  resabs = abs(resk)
+
+  do j=1,3
+    jtw = j*2
+    absc = hlgth*xgk(jtw)
+    fval1 = f(centr-absc)
+    fval2 = f(centr+absc)
+    fv1(jtw) = fval1
+    fv2(jtw) = fval2
+    fsum = fval1+fval2
+    resg = resg+wg(j)*fsum
+    resk = resk+wgk(jtw)*fsum
+    resabs = resabs+wgk(jtw)*(abs(fval1)+abs(fval2))
+  end do
+
+  do j = 1,4
+    jtwm1 = j*2-1
+    absc = hlgth*xgk(jtwm1)
+    fval1 = f(centr-absc)
+    fval2 = f(centr+absc)
+    fv1(jtwm1) = fval1
+    fv2(jtwm1) = fval2
+    fsum = fval1+fval2
+    resk = resk+wgk(jtwm1)*fsum
+    resabs = resabs+wgk(jtwm1)*(abs(fval1)+abs(fval2))
+  end do
+
+  reskh = resk * 0.5
+  resasc = wgk(8)*abs(fc-reskh)
+
+  do j=1,7
+    resasc = resasc+wgk(j)*(abs(fv1(j)-reskh)+abs(fv2(j)-reskh))
+  end do
+  result = resk*hlgth
+  resabs = resabs*dhlgth
+  resasc = resasc*dhlgth
+  abserr = abs((resk-resg)*hlgth)
+
+  if ( resasc /= 0.0E+00 .and. abserr /= 0.0) then
+    abserr = resasc* min (1.0,(0.2e+03*abserr/resasc)**1.5)
+  end if
+
+  if ( resabs>uflow/(0.5e+02*epmach)) then
+    abserr = max ((epmach*0.5e+02)*resabs,abserr)
+  end if
+
+  return
+end
+subroutine qk15i(f,boun,inf,a,b,result,abserr,resabs,resasc)
+!
+!*******************************************************************************
+!
+!! QK15I ??
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+  real a
+  real absc
+  real absc1
+  real absc2
+  real abserr
+  real b
+  real boun
+  real centr
+  real dinf
+  real r1mach
+  real epmach
+  real f
+  real fc
+  real fsum
+  real fval1
+  real fval2
+  real fv1(7)
+  real fv2(7)
+  real hlgth
+  integer inf
+  integer j
+  real resabs
+  real resasc
+  real resg
+  real resk
+  real reskh
+  real result
+  real tabsc1
+  real tabsc2
+  real uflow
+  real wg(8)
+  real wgk(8)
+  real xgk(8)
+!
+  external f
+!
+  data xgk(1),xgk(2),xgk(3),xgk(4),xgk(5),xgk(6),xgk(7), xgk(8)/ &
+          0.9914553711208126,     0.9491079123427585, &
+          0.8648644233597691,     0.7415311855993944, &
+          0.5860872354676911,     0.4058451513773972, &
+          0.2077849550078985,     0.0000000000000000/
+!
+  data wgk(1),wgk(2),wgk(3),wgk(4),wgk(5),wgk(6),wgk(7), wgk(8)/ &
+          0.2293532201052922e-01,     0.6309209262997855e-01, &
+          0.1047900103222502,     0.1406532597155259, &
+          0.1690047266392679,     0.1903505780647854, &
+          0.2044329400752989,     0.2094821410847278/
+!
+  data wg(1),wg(2),wg(3),wg(4),wg(5),wg(6),wg(7),wg(8)/ &
+          0.0000000000000000,     0.1294849661688697, &
+          0.0000000000000000,     0.2797053914892767, &
+          0.0000000000000000,     0.3818300505051189, &
+          0.0000000000000000,     0.4179591836734694/
+!
+  epmach = epsilon ( epmach )
+  uflow = tiny ( uflow )
+  dinf = min(1,inf)
+!
+  centr = 0.5 * ( a + b )
+  hlgth = 0.5 * ( b - a )
+  tabsc1 = boun+dinf*(1.0-centr)/centr
+  fval1 = f(tabsc1)
+  if ( inf==2) fval1 = fval1+f(-tabsc1)
+  fc = (fval1/centr)/centr
+!
+!           compute the 15-point kronrod approximation to
+!           the integral, and estimate the error.
+!
+  resg = wg(8)*fc
+  resk = wgk(8)*fc
+  resabs = abs(resk)
+
+  do j=1,7
+    absc = hlgth*xgk(j)
+    absc1 = centr-absc
+    absc2 = centr+absc
+    tabsc1 = boun+dinf*(1.0-absc1)/absc1
+    tabsc2 = boun+dinf*(1.0-absc2)/absc2
+    fval1 = f(tabsc1)
+    fval2 = f(tabsc2)
+    if ( inf==2) fval1 = fval1+f(-tabsc1)
+    if ( inf==2) fval2 = fval2+f(-tabsc2)
+    fval1 = (fval1/absc1)/absc1
+    fval2 = (fval2/absc2)/absc2
+    fv1(j) = fval1
+    fv2(j) = fval2
+    fsum = fval1+fval2
+    resg = resg+wg(j)*fsum
+    resk = resk+wgk(j)*fsum
+    resabs = resabs+wgk(j)*(abs(fval1)+abs(fval2))
+  end do
+
+  reskh = resk * 0.5
+  resasc = wgk(8)*abs(fc-reskh)
+  do j=1,7
+    resasc = resasc+wgk(j)*(abs(fv1(j)-reskh)+abs(fv2(j)-reskh))
+  end do
+
+  result = resk*hlgth
+  resasc = resasc*hlgth
+  resabs = resabs*hlgth
+  abserr = abs((resk-resg)*hlgth)
+
+  if ( resasc /= 0.0E+00 .and. abserr /= 0.0E+00 ) then
+    abserr = resasc* min (1.0,(0.2e+03*abserr/resasc)**1.5)
+  end if
+
+  if ( resabs>uflow/(0.5e+02*epmach)) then
+    abserr = max ((epmach*0.5e+02)*resabs,abserr)
+  end if
+
+  return
+end
+subroutine qpsrt(limit,last,maxerr,ermax,elist,iord,nrmax)
+!
+!*******************************************************************************
+!
+!! QPSRT ??
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+  integer last
+!
+  real elist(last)
+  real ermax
+  real errmax
+  real errmin
+  integer i
+  integer ibeg
+  integer ido
+  integer iord(last)
+  integer isucc
+  integer j
+  integer jbnd
+  integer jupbn
+  integer k
+  integer limit
+  integer maxerr
+  integer nrmax
+!
+!  check whether the list contains more than two error estimates.
+!
+  if ( last<=2) then
+    iord(1) = 1
+    iord(2) = 2
+    go to 90
+  end if
+!
+!  this part of the routine is only executed
+!  if, due to a difficult integrand, subdivision
+!  increased the error estimate. in the normal case
+!  the insert procedure should start after the
+!  nrmax-th largest error estimate.
+!
+  errmax = elist(maxerr)
+  if ( nrmax==1) go to 30
+  ido = nrmax-1
+
+  do i = 1,ido
+    isucc = iord(nrmax-1)
+    if ( errmax<=elist(isucc)) go to 30
+    iord(nrmax) = isucc
+    nrmax = nrmax-1
+  end do
+!
+!           compute the number of elements in the list to
+!           be maintained in descending order. this number
+!           depends on the number of subdivisions still
+!           allowed.
+!
+   30 continue
+
+  jupbn = last
+  if ( last>(limit/2+2)) jupbn = limit+3-last
+  errmin = elist(last)
+!
+!           insert errmax by traversing the list top-down,
+!           starting comparison from the element elist(iord(nrmax+1)).
+!
+  jbnd = jupbn-1
+  ibeg = nrmax+1
+
+  do i = ibeg, jbnd
+    isucc = iord(i)
+    if ( errmax>=elist(isucc)) go to 60
+    iord(i-1) = isucc
+  end do
+
+  iord(jbnd) = maxerr
+  iord(jupbn) = last
+  go to 90
+!
+!           insert errmin by traversing the list bottom-up.
+!
+60 continue
+
+  iord(i-1) = maxerr
+  k = jbnd
+  do j=i,jbnd
+    isucc = iord(k)
+    if ( errmin<elist(isucc)) go to 80
+    iord(k+1) = isucc
+    k = k-1
+  end do
+
+  iord(i) = last
+  go to 90
+
+80 continue
+
+  iord(k+1) = last
+!
+!  set maxerr and ermax.
+!
+90 continue
+
+  maxerr = iord(nrmax)
+  ermax = elist(maxerr)
+
+  return
+end
+subroutine qraux1(nr,n,r,i)
+!
+!*******************************************************************************
+!
+!! QRAUX1 interchanges rows i,i+1 of the upper hessenberg matrix r, columns i to n
+!
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of matrix
+! r(n,n)      <--> upper hessenberg matrix
+! i            --> index of row to interchange (i<n)
+!
+  integer n
+  integer nr
+!
+  integer i
+  integer j
+  real r(nr,n)
+!
+  do j = i, n
+    call r_swap ( r(i,j), r(i+1,j) )
+  end do
+
+  return
+end
+subroutine qraux2(nr,n,r,i,a,b)
+!
+!*******************************************************************************
+!
+!! QRAUX2 pre-multiplies r by the jacobi rotation j(i,i+1,a,b)
+!
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of matrix
+! r(n,n)      <--> upper hessenberg matrix
+! i            --> index of row
+! a            --> scalar
+! b            --> scalar
+!
+  integer n
+  integer nr
+!
+  real a
+  real b
+  real c
+  real den
+  integer i
+  integer j
+  real r(nr,1)
+  real s
+  real y
+  real z
+!
+  den=sqrt(a*a + b*b)
+  c=a/den
+  s=b/den
+
+  do j=i,n
+    y=r(i,j)
+    z=r(i+1,j)
+    r(i,j)=c*y - s*z
+    r(i+1,j)=s*y + c*z
+  end do
+
+  return
+end
+subroutine qrfac(m,n,a,lda,pivot,ipvt,lipvt,sigma,acnorm,wa)
+!
+!*******************************************************************************
+!
+!! QRFAC uses householder transformations with column
+!     pivoting (optional) to compute a qr factorization of the
+!     m by n matrix a. that is, qrfac determines an orthogonal
+!     matrix q, a permutation matrix p, and an upper trapezoidal
+!     matrix r with diagonal elements of nonincreasing magnitude,
+!     such that a*p = q*r. the householder transformation for
+!     column k, k = 1,2,...,min(m,n), is of the form
+!
+!                           t
+!           i - (1/u(k))*u*u
+!
+!     where u has zeros in the first k-1 positions. the form of
+!     this transformation and the method of pivoting first
+!     appeared in the corresponding linpack subroutine.
+!
+!  Parameters:
+!
+!       m is a positive integer input variable set to the number
+!         of rows of a.
+!
+!       n is a positive integer input variable set to the number
+!         of columns of a.
+!
+!       a is an m by n array. on input a contains the matrix for
+!         which the qr factorization is to be computed. on output
+!         the strict upper trapezoidal part of a contains the strict
+!         upper trapezoidal part of r, and the lower trapezoidal
+!         part of a contains a factored form of q (the non-trivial
+!         elements of the u vectors described above).
+!
+!       lda is a positive integer input variable not less than m
+!         which specifies the leading dimension of the array a.
+!
+!       pivot is a logical input variable. if pivot is set .true.,
+!         then column pivoting is enforced. if pivot is set .false.,
+!         then no column pivoting is done.
+!
+!       ipvt is an integer output array of length lipvt. ipvt
+!         defines the permutation matrix p such that a*p = q*r.
+!         column j of p is column ipvt(j) of the identity matrix.
+!         if pivot is .false., ipvt is not referenced.
+!
+!       lipvt is a positive integer input variable. if pivot is
+!             .false., then lipvt may be as small as 1. if pivot is
+!             .true., then lipvt must be at least n.
+!
+!       sigma is an output array of length n which contains the
+!         diagonal elements of r.
+!
+!       acnorm is an output array of length n which contains the
+!         norms of the corresponding columns of the input matrix a.
+!         if this information is not needed, then acnorm can coincide
+!         with sigma.
+!
+!       wa is a work array of length n. if pivot is .false., then wa
+!         can coincide with sigma.
+!
+  integer lipvt
+  integer lda
+  integer n
+!
+  real a(lda,n)
+  real acnorm(n)
+  real ajnorm
+  real epsmch
+  integer i
+  integer ipvt(lipvt)
+  integer j
+  integer jp1
+  integer k
+  integer kmax
+  integer m
+  integer minmn
+  logical pivot
+  real r1mach
+  real sigma(n)
+  real snrm2
+  real sum
+  real temp
+  real wa(n)
+!
+  epsmch = epsilon ( epsmch )
+!
+!  compute the initial column norms and initialize several arrays.
+!
+  do j = 1, n
+    acnorm(j) = snrm2(m,a(1,j),1)
+    sigma(j) = acnorm(j)
+    wa(j) = sigma(j)
+    if (pivot) ipvt(j) = j
+  end do
+!
+!  reduce a to r with householder transformations.
+!
+  minmn = min ( m, n )
+
+  do j = 1, minmn
+
+    if ( pivot ) then
+!
+!  bring the column of largest norm into the pivot position.
+!
+      kmax = j
+      do k = j, n
+        if (sigma(k) > sigma(kmax)) kmax = k
+      end do
+
+      if ( kmax /= j) then
+
+        do i = 1, m
+          temp = a(i,j)
+          a(i,j) = a(i,kmax)
+          a(i,kmax) = temp
+        end do
+
+        sigma(kmax) = sigma(j)
+        wa(kmax) = wa(j)
+        k = ipvt(j)
+        ipvt(j) = ipvt(kmax)
+        ipvt(kmax) = k
+
+      end if
+
+    end if
+!
+!  Compute the householder transformation to reduce the
+!  j-th column of a to a multiple of the j-th unit vector.
+!
+     ajnorm = snrm2(m-j+1,a(j,j),1)
+
+     if (ajnorm /= 0.0) then
+
+       if (a(j,j) < 0.0) then
+         ajnorm = -ajnorm
+       end if
+
+       a(j:m,j) = a(j:m,j)/ajnorm
+       a(j,j) = a(j,j) + 1.0E+00
+!
+!  apply the transformation to the remaining columns and update the norms.
+!
+       jp1 = j + 1
+
+       do k = j+1, n
+
+         sum = 0.0E+00
+         do i = j, m
+           sum = sum + a(i,j)*a(i,k)
+         end do
+         temp = sum/a(j,j)
+
+         do i = j, m
+           a(i,k) = a(i,k) - temp*a(i,j)
+         end do
+
+         if ( pivot .and. sigma(k) /= 0.0E+00 ) then
+
+           temp = a(j,k)/sigma(k)
+           sigma(k) = sigma(k)*sqrt( max (0.0,1.0-temp**2))
+
+           if ( 0.05 * (sigma(k)/wa(k))**2 <= epsmch ) then
+             sigma(k) = snrm2(m-j,a(jp1,k),1)
+             wa(k) = sigma(k)
+           end if
+
+         end if
+
+       end do
+
+    end if
+
+    sigma(j) = -ajnorm
+
+  end do
+
+  return
+end
+subroutine qrupdt(nr,n,a,u,v)
+!
+!*******************************************************************************
+!
+!! QRUPDT updates a QR factorization.
+!
+!
+!  Discussion:
+!
+!    The routine finds an orthogonal N by N matrix Q* and an upper triangular
+!    N by N matrix R* such that (Q*)(R*) = R + U*V'
+!
+!  Parameters:
+!
+!    Input, integer NR, the row dimension of the matrix.
+!
+!    Input, integer N, the order of the matrix.
+!
+!    Input/output, real A(NR,N), on input, contains the original QR
+!    factorization.  On output, contains the revised factorization.
+!
+!    Input, real U(N), V(N), vectors that describe the rank one update
+!    applied to the original matrix A.
+!
+  integer n
+  integer nr
+!
+  real a(nr,1)
+  integer i
+  integer k
+  real t1
+  real t2
+  real u(n)
+  real v(n)
+!
+!  determine last non-zero in u(.)
+!
+  k=n
+
+   10 continue
+
+  if ( u(k) == 0.0E+00 .and. k > 1 ) then
+    k = k - 1
+    go to 10
+  end if
+!
+! (k-1) jacobi rotations transform
+!     r + u(v+) --> (r*) + (u(1)*e1)(v+)
+! which is upper hessenberg
+!
+  if ( k > 1 ) then
+
+    do i = k-1, 1, -1
+
+      if ( u(i) == 0.0E+00 ) then
+        call qraux1(nr,n,a,i)
+        u(i)=u(i+1)
+      else
+        call qraux2(nr,n,a,i,u(i),-u(i+1))
+        u(i)=sqrt(u(i)*u(i) + u(i+1)*u(i+1))
+      end if
+
+    end do
+
+  end if
+!
+! r <-- r + (u(1)*e1)(v+)
+!
+  a(1,1:n) = a(1,1:n) + u(1) * v(1:n)
+!
+!  (k-1) jacobi rotations transform upper hessenberg r
+!  to upper triangular (r*)
+!
+    do i = 1, k-1
+
+      if ( a(i,i) == 0.0E+00 ) then
+        call qraux1(nr,n,a,i)
+      else
+        t1=a(i,i)
+        t2=-a(i+1,i)
+        call qraux2(nr,n,a,i,t1,t2)
+      end if
+
+    end do
+
+  return
+end
+function r1mach ( i )
+!
+!*******************************************************************************
+!
+!! R1MACH returns single precision machine constants.
+!
+!
+!  Assume that single precision numbers are stored with a mantissa of T digits
+!  in base B, with an exponent whose value must lie between EMIN and EMAX.  Then
+!  for values of I between 1 and 5, R1MACH will return the following values:
+!
+!    R1MACH(1) = B**(EMIN-1), the smallest positive magnitude.
+!    R1MACH(2) = B**EMAX*(1-B**(-T)), the largest magnitude.
+!    R1MACH(3) = B**(-T), the smallest relative spacing.
+!    R1MACH(4) = B**(1-T), the largest relative spacing.
+!    R1MACH(5) = log10(B)
+!
+!  To alter this function for a particular environment, the desired set of data
+!  statements should be activated by removing the C from column 1.
+!
+!  On rare machines a STATIC statement may need to be added.  But probably more
+!  systems prohibit it that require it.
+!
+!  For IEEE-arithmetic machines (binary standard), the first set of constants
+!  below should be appropriate.
+!
+!  Where possible, octal or hexadecimal constants have been used to specify the
+!  constants exactly which has in some cases required the use of EQUIVALENCED
+!  integer arrays.  If your compiler uses half-word integers by default
+!  (sometimes called INTEGER*2), you may need to change INTEGER to INTEGER*4 or
+!  otherwise instruct your compiler to use full-word integers in the next 5
+!  declarations.
+!
+  integer diver(2)
+  integer i
+  integer large(2)
+  integer log10(2)
+  real r1mach
+  integer right(2)
+  real rmach(5)
+  integer small(2)
+!
+  equivalence (rmach(1),small(1))
+  equivalence (rmach(2),large(1))
+  equivalence (rmach(3),right(1))
+  equivalence (rmach(4),diver(1))
+  equivalence (rmach(5),log10(1))
+!
+!  IEEE arithmetic machines, such as the ATT 3B series, Motorola 68000 based
+!  machines such as the SUN 3 and ATT PC 7300, and 8087 based micros such as
+!  the IBM PC and ATT 6300.
+!
+   data small(1) /     8388608 /
+   data large(1) /  2139095039 /
+   data right(1) /   864026624 /
+   data diver(1) /   872415232 /
+   data log10(1) /  1050288283 /
+!
+!  ALLIANT FX/8 UNIX Fortran compiler with the -r8 command line option.  This
+!  option causes all variables declared with 'REAL' to be of type 'REAL*8' or
+!  DOUBLE PRECISION.  This option does not override the 'REAL*4' declarations.
+!  These R1MACH numbers below and the coresponding I1MACH are simply the DOUBLE
+!  PRECISION or 'REAL*8' numbers.  If you use the -r8 your whole code (and the
+!  user libraries you link with, the system libraries are taken care of
+!  automagicly) must be compiled with this option.
+!
+!      data rmach(1) / 2.22507385850721D-308 /
+!      data rmach(2) / 1.79769313486231D+308 /
+!      data rmach(3) / 1.1101827117665D-16 /
+!      data rmach(4) / 2.2203654423533D-16 /
+!      data rmach(5) / 3.01029995663981E-1 /
+!
+!  AMDAHL machines.
+!
+!      data small(1) /    1048576 /
+!      data large(1) / 2147483647 /
+!      data right(1) /  990904320 /
+!      data diver(1) / 1007681536 /
+!      data log10(1) / 1091781651 /
+!
+!  BURROUGHS 1700 system.
+!
+!      data rmach(1) / Z400800000 /
+!      data rmach(2) / Z5FFFFFFFF /
+!      data rmach(3) / Z4E9800000 /
+!      data rmach(4) / Z4EA800000 /
+!      data rmach(5) / Z500E730E8 /
+!
+!  BURROUGHS 5700/6700/7700 systems.
+!
+!      data rmach(1) / O1771000000000000 /
+!      data rmach(2) / O0777777777777777 /
+!      data rmach(3) / O1311000000000000 /
+!      data rmach(4) / O1301000000000000 /
+!      data rmach(5) / O1157163034761675 /
+!
+!  CDC CYBER 170/180 series using NOS
+!
+!      data rmach(1) / O"00014000000000000000" /
+!      data rmach(2) / O"37767777777777777777" /
+!      data rmach(3) / O"16404000000000000000" /
+!      data rmach(4) / O"16414000000000000000" /
+!      data rmach(5) / O"17164642023241175720" /
+!
+!  CDC CYBER 170/180 series using NOS/VE
+!
+!      data rmach(1) / Z"3001800000000000" /
+!      data rmach(2) / Z"4FFEFFFFFFFFFFFE" /
+!      data rmach(3) / Z"3FD2800000000000" /
+!      data rmach(4) / Z"3FD3800000000000" /
+!      data rmach(5) / Z"3FFF9A209A84FBCF" /
+!
+!  CDC CYBER 200 series
+!
+!      data rmach(1) / X'9000400000000000' /
+!      data rmach(2) / X'6FFF7FFFFFFFFFFF' /
+!      data rmach(3) / X'FFA3400000000000' /
+!      data rmach(4) / X'FFA4400000000000' /
+!      data rmach(5) / X'FFD04D104D427DE8' /
+!
+!  CDC 6000/7000 series using FTN4.
+!
+!      data rmach(1) / 00564000000000000000B /
+!      data rmach(2) / 37767777777777777776B /
+!      data rmach(3) / 16414000000000000000B /
+!      data rmach(4) / 16424000000000000000B /
+!      data rmach(5) / 17164642023241175720B /
+!
+!  CDC 6000/7000 series using FTN5.
+!
+!      data rmach(1) / O"00564000000000000000" /
+!      data rmach(2) / O"37767777777777777776" /
+!      data rmach(3) / O"16414000000000000000" /
+!      data rmach(4) / O"16424000000000000000" /
+!      data rmach(5) / O"17164642023241175720" /
+!
+!  CONVEX C-1.
+!
+!      data rmach(1) / '00800000'X /
+!      data rmach(2) / '7FFFFFFF'X /
+!      data rmach(3) / '34800000'X /
+!      data rmach(4) / '35000000'X /
+!      data rmach(5) / '3F9A209B'X /
+!
+!  CONVEX C-120 (native mode) without -R8 option
+!
+!      data rmach(1) / 2.9387360E-39 /
+!      data rmach(2) / 1.7014117E+38 /
+!      data rmach(3) / 5.9604645E-08 /
+!      data rmach(4) / 1.1920929E-07 /
+!      data rmach(5) / 3.0102999E-01 /
+!
+!  CONVEX C-120 (native mode) with -R8 option
+!
+!      data rmach(1) / 5.562684646268007D-309 /
+!      data rmach(2) / 8.988465674311577D+307 /
+!      data rmach(3) / 1.110223024625157D-016 /
+!      data rmach(4) / 2.220446049250313D-016 /
+!      data rmach(5) / 3.010299956639812D-001 /
+!
+!  CONVEX C-120 (IEEE mode) without -R8 option
+!
+!      data rmach(1) / 1.1754945E-38 /
+!      data rmach(2) / 3.4028234E+38 /
+!      data rmach(3) / 5.9604645E-08 /
+!      data rmach(4) / 1.1920929E-07 /
+!      data rmach(5) / 3.0102999E-01 /
+!
+!  CONVEX C-120 (IEEE mode) with -R8 option
+!
+!      data rmach(1) / 2.225073858507202D-308 /
+!      data rmach(2) / 1.797693134862315D+308 /
+!      data rmach(3) / 1.110223024625157D-016 /
+!      data rmach(4) / 2.220446049250313D-016 /
+!      data rmach(5) / 3.010299956639812D-001 /
+!
+!  CRAY 1, 2, XMP and YMP.
+!
+!      data rmach(1) / 200034000000000000000B /
+!      data rmach(2) / 577767777777777777776B /
+!      data rmach(3) / 377224000000000000000B /
+!      data rmach(4) / 377234000000000000000B /
+!      data rmach(5) / 377774642023241175720B /
+!
+!  DATA GENERAL ECLIPSE S/200.
+!  Note - It may be appropriate to include the line: STATIC RMACH(5)
+!
+!      data small /20K,0/
+!      data large /77777K,177777K/
+!      data right /35420K,0/
+!      data diver /36020K,0/
+!      data log10 /40423K,42023K/
+!
+!  ELXSI 6400, assuming REAL*4 is the default real type.
+!
+!      data small(1) / '00800000'X /
+!      data large(1) / '7F7FFFFF'X /
+!      data right(1) / '33800000'X /
+!      data diver(1) / '34000000'X /
+!      data log10(1) / '3E9A209B'X /
+!
+!  HARRIS 220
+!
+!      data small(1),small(2) / '20000000, '00000201 /
+!      data large(1),large(2) / '37777777, '00000177 /
+!      data right(1),right(2) / '20000000, '00000352 /
+!      data diver(1),diver(2) / '20000000, '00000353 /
+!      data log10(1),log10(2) / '23210115, '00000377 /
+!
+!  HARRIS SLASH 6 and SLASH 7.
+!
+!      data small(1),small(2) / '20000000, '00000201 /
+!      data large(1),large(2) / '37777777, '00000177 /
+!      data right(1),right(2) / '20000000, '00000352 /
+!      data diver(1),diver(2) / '20000000, '00000353 /
+!      data log10(1),log10(2) / '23210115, '00000377 /
+!
+!  HONEYWELL DPS 8/70 and 600/6000 series.
+!
+!      data rmach(1) / O402400000000 /
+!      data rmach(2) / O376777777777 /
+!      data rmach(3) / O714400000000 /
+!      data rmach(4) / O716400000000 /
+!      data rmach(5) / O776464202324 /
+!
+!  HP 2100, 3 word double precision with FTN4
+!
+!      data small(1), small(2) / 40000B,       1 /
+!      data large(1), large(2) / 77777B, 177776B /
+!      data right(1), right(2) / 40000B,    325B /
+!      data diver(1), diver(2) / 40000B,    327B /
+!      data log10(1), log10(2) / 46420B,  46777B /
+!
+!  HP 2100, 4 word double precision with FTN4
+!
+!      data small(1), small(2) / 40000B,       1 /
+!      data large91), large(2) / 77777B, 177776B /
+!      data right(1), right(2) / 40000B,    325B /
+!      data diver(1), diver(2) / 40000B,    327B /
+!      data log10(1), log10(2) / 46420B,  46777B /
+!
+!  HP 9000
+!
+!      r1mach(1) = 1.17549435E-38
+!      r1mach(2) = 1.70141163E+38
+!      r1mach(3) = 5.960464478E-8
+!      r1mach(4) = 1.119209290E-7
+!      r1mach(5) = 3.01030010E-1
+!
+!      data small(1) / 00040000000B /
+!      data large(1) / 17677777777B /
+!      data right(1) / 06340000000B /
+!      data diver(1) / 06400000000B /
+!      data log10(1) / 07646420233B /
+!
+!  IBM 360/370 series, XEROX SIGMA 5/7/9, SEL systems 85/86, PERKIN ELMER 3230,
+!  and PERKIN ELMER (INTERDATA) 3230.
+!
+!      data rmach(1) / Z00100000 /
+!      data rmach(2) / Z7FFFFFFF /
+!      data rmach(3) / Z3B100000 /
+!      data rmach(4) / Z3C100000 /
+!      data rmach(5) / Z41134413 /
+!
+!  IBM PC - Microsoft FORTRAN
+!
+!      data small(1) / #00800000 /
+!      data large(1) / #7F7FFFFF /
+!      data right(1) / #33800000 /
+!      data diver(1) / #34000000 /
+!      data log10(1) / #3E9A209A /
+!
+!  IBM PC - Professional FORTRAN and Lahey FORTRAN
+!
+!      data small(1)/ Z'00800000' /
+!      data large(1)/ Z'7F7FFFFF' /
+!      data right(1)/ Z'33800000' /
+!      data diver(1)/ Z'34000000' /
+!      data log10(1)/ Z'3E9A209A' /
+!
+!  INTERDATA 8/32 with the UNIX system FORTRAN 77 compiler.
+!  For the INTERDATA FORTRAN VII compiler replace the Z'S specifying HEX
+!  constants with Y'S.
+!
+!      data rmach(1) / Z'00100000' /
+!      data rmach(2) / Z'7EFFFFFF' /
+!      data rmach(3) / Z'3B100000' /
+!      data rmach(4) / Z'3C100000' /
+!      data rmach(5) / Z'41134413' /
+!
+!  PDP-10 (KA or KI processor).
+!
+!      data rmach(1) / "000400000000 /
+!      data rmach(2) / "377777777777 /
+!      data rmach(3) / "146400000000 /
+!      data rmach(4) / "147400000000 /
+!      data rmach(5) / "177464202324 /
+!
+!  PDP-11 FORTRANS supporting 32-bit integers (integer version).
+!
+!      data small(1) /    8388608 /
+!      data large(1) / 2147483647 /
+!      data right(1) /  880803840 /
+!      data diver(1) /  889192448 /
+!      data log10(1) / 1067065499 /
+!
+!  PDP-11 FORTRANS supporting 32-bit integers (octal version).
+!
+!      data rmach(1) / O00040000000 /
+!      data rmach(2) / O17777777777 /
+!      data rmach(3) / O06440000000 /
+!      data rmach(4) / O06500000000 /
+!      data rmach(5) / O07746420233 /
+!
+!  PDP-11 FORTRANS supporting 16-bit integers (integer version).
+!
+!      data small(1),small(2) /   128,     0 /
+!      data large(1),large(2) / 32767,    -1 /
+!      data right(1),right(2) / 13440,     0 /
+!      data diver(1),diver(2) / 13568,     0 /
+!      data log10(1),log10(2) / 16282,  8347 /
+!
+!  PDP-11 FORTRANS supporting 16-bit integers (octal version).
+!
+!      data small(1),small(2) / O000200, O000000 /
+!      data large(1),large(2) / O077777, O177777 /
+!      data right(1),right(2) / O032200, O000000 /
+!      data diver(1),diver(2) / O032400, O000000 /
+!      data log10(1),log10(2) / O037632, O020233 /
+!
+!  SEQUENT BALANCE 8000.
+!
+!      data small(1) / $00800000 /
+!      data large(1) / $7F7FFFFF /
+!      data right(1) / $33800000 /
+!      data diver(1) / $34000000 /
+!      data log10(1) / $3E9A209B /
+!
+!  SUN Microsystems UNIX F77 compiler.
+!
+!      data rmach(1) / 1.17549435E-38 /
+!      data rmach(2) / 3.40282347E+38 /
+!      data rmach(3) / 5.96016605E-08 /
+!      data rmach(4) / 1.19203321E-07 /
+!      data rmach(5) / 3.01030010E-01 /
+!
+!  SUN 3 (68881 or FPA)
+!
+!      data small(1) / X'00800000' /
+!      data large(1) / X'7F7FFFFF' /
+!      data right(1) / X'33800000' /
+!      data diver(1) / X'34000000' /
+!      data log10(1) / X'3E9A209B' /
+!
+!  UNIVAC 1100 series.
+!
+!      data rmach(1) / O000400000000 /
+!      data rmach(2) / O377777777777 /
+!      data rmach(3) / O146400000000 /
+!      data rmach(4) / O147400000000 /
+!      data rmach(5) / O177464202324 /
+!
+!  VAX/ULTRIX F77 compiler.
+!
+!      data small(1) /       128 /
+!      data large(1) /    -32769 /
+!      data right(1) /     13440 /
+!      data diver(1) /     13568 /
+!      data log10(1) / 547045274 /
+!
+!  VAX-11 with FORTRAN IV-PLUS compiler.
+!
+!      data rmach(1) / Z00000080 /
+!      data rmach(2) / ZFFFF7FFF /
+!      data rmach(3) / Z00003480 /
+!      data rmach(4) / Z00003500 /
+!      data rmach(5) / Z209B3F9A /
+!
+!  VAX/VMS version 2.2.
+!
+!      data rmach(1) /       '80'X /
+!      data rmach(2) / 'FFFF7FFF'X /
+!      data rmach(3) /     '3480'X /
+!      data rmach(4) /     '3500'X /
+!      data rmach(5) / '209B3F9A'X /
+!
+!  VAX/VMS 11/780
+!
+!      data small(1) / Z00000080 /
+!      data large(1) / ZFFFF7FFF /
+!      data right(1) / Z00003480 /
+!      data diver(1) / Z00003500 /
+!      data log10(1) / Z209B3F9A /
+!
+!  Z80 microprocessor.
+!
+!      data small(1), small(2) /     0,    256 /
+!      data large(1), large(2) /    -1,   -129 /
+!      data right(1), right(2) /     0,  26880 /
+!      data diver(1), diver(2) /     0,  27136 /
+!      data log10(1), log10(2) /  8347,  32538 /
+!
+  if ( i < 1 .or. i > 5 ) then
+    write ( *, * ) ' '
+    write(*,*)'R1MACH - Fatal error!'
+    write(*,*)'I is out of bounds=',i
+    r1mach=0.0E+00
+    stop
+  else
+    r1mach = rmach(i)
+  end if
+
+  return
+end
+subroutine r1mpyq ( m, n, a, lda, v, w )
+!
+!*******************************************************************************
+!
+!! R1MPYQ is given an m by n matrix a, this subroutine computes a*q where
+!     q is the product of 2*(n - 1) transformations
+!
+!           gv(n-1)*...*gv(1)*gw(1)*...*gw(n-1)
+!
+!     and gv(i), gw(i) are givens rotations in the (i,n) plane which
+!     eliminate elements in the i-th and n-th planes, respectively.
+!     q itself is not given, rather the information to recover the
+!     gv, gw rotations is supplied.
+!
+!  Parameters:
+!
+!       m is a positive integer input variable set to the number
+!         of rows of a.
+!
+!       n is a positive integer input variable set to the number
+!         of columns of a.
+!
+!       a is an m by n array. on input a must contain the matrix
+!         to be postmultiplied by the orthogonal matrix q
+!         described above. on output a*q has replaced a.
+!
+!       lda is a positive integer input variable not less than m
+!         which specifies the leading dimension of the array a.
+!
+!       v is an input array of length n. v(i) must contain the
+!         information necessary to recover the givens rotation gv(i)
+!         described above.
+!
+!       w is an input array of length n. w(i) must contain the
+!         information necessary to recover the givens rotation gw(i)
+!         described above.
+!
+  integer lda
+  integer n
+!
+  real a(lda,n)
+  real cos2
+  integer i
+  integer j
+  integer m
+  integer nmj
+  real sin2
+  real temp
+  real v(n)
+  real w(n)
+!
+  do nmj = 1, n-1
+
+    j = n - nmj
+
+    if (abs(v(j)) > 1.0) then
+      cos2 = 1.0/v(j)
+      sin2 = sqrt(1.0-cos2**2)
+    else
+      sin2 = v(j)
+      cos2 = sqrt(1.0-sin2**2)
+    end if
+
+    do i = 1, m
+      temp = cos2*a(i,j) - sin2*a(i,n)
+      a(i,n) = sin2*a(i,j) + cos2*a(i,n)
+      a(i,j) = temp
+    end do
+
+  end do
+!
+!     apply the second set of givens rotations to a.
+!
+  do j = 1, n-1
+
+     if (abs(w(j)) > 1.0) then
+       cos2 = 1.0/w(j)
+       sin2 = sqrt(1.0-cos2**2)
+     else
+       sin2 = w(j)
+       cos2 = sqrt(1.0-sin2**2)
+     end if
+
+     do i = 1, m
+        temp = cos2*a(i,j) + sin2*a(i,n)
+        a(i,n) = -sin2*a(i,j) + cos2*a(i,n)
+        a(i,j) = temp
+     end do
+
+  end do
+
+  return
+end
+subroutine r1updt ( m, n, s, ls, u, v, w, sing )
+!
+!*******************************************************************************
+!
+!! R1UPDT updates a QR factorization after a rank 1 update of the original matrix.
+!
+!
+!  Discussion:
+!
+!    The routine is given an m by n lower trapezoidal matrix s, an m-vector u,
+!    and an n-vector v, the problem is to determine an
+!    orthogonal matrix q such that
+!
+!      (s + u*v')*q
+!
+!    is again lower trapezoidal.
+!
+!    This subroutine determines q as the product of 2*(n - 1) transformations
+!
+!      gv(n-1)*...*gv(1)*gw(1)*...*gw(n-1)
+!
+!    where gv(i), gw(i) are givens rotations in the (i,n) plane
+!    which eliminate elements in the i-th and n-th planes,
+!    respectively. q itself is not accumulated, rather the
+!    information to recover the gv, gw rotations is returned.
+!
+!  Parameters:
+!
+!       m is a positive integer input variable set to the number
+!         of rows of s.
+!
+!       n is a positive integer input variable set to the number
+!         of columns of s. n must not exceed m.
+!
+!       s is an array of length ls. on input s must contain the lower
+!         trapezoidal matrix s stored by columns. on output s contains
+!         the lower trapezoidal matrix produced as described above.
+!
+!       ls is a positive integer input variable not less than
+!         (n*(2*m-n+1))/2.
+!
+!       u is an input array of length m which must contain the
+!         vector u.
+!
+!       v is an array of length n. on input v must contain the vector
+!         v. on output v(i) contains the information necessary to
+!         recover the givens rotation gv(i) described above.
+!
+!       w is an output array of length m. w(i) contains information
+!         necessary to recover the givens rotation gw(i) described
+!         above.
+!
+!       sing is a logical output variable. sing is set .true. if any
+!         of the diagonal elements of the output s are zero. otherwise
+!         sing is set .false.
+!
+  integer ls
+  integer m
+  integer n
+!
+  real cos
+  real cotan
+  real giant
+  integer i
+  integer j
+  integer jj
+  integer l
+  integer nmj
+  real, parameter :: p25 = 0.25E+00
+  real, parameter :: p5 = 0.5E+00
+  real r1mach
+  real s(ls)
+  real sin
+  logical sing
+  real tan
+  real tau
+  real temp
+  real u(m)
+  real v(n)
+  real w(m)
+!
+  giant = huge ( giant )
+!
+!  Initialize the diagonal element pointer.
+!
+  jj = (n*(2*m - n + 1))/2 - (m - n)
+!
+!     move the nontrivial part of the last column of s into w.
+!
+  l = jj
+  do i = n, m
+    w(i) = s(l)
+    l = l + 1
+  end do
+!
+!     rotate the vector v into a multiple of the n-th unit vector
+!     in such a way that a spike is introduced into w.
+!
+  do nmj = 1, n-1
+
+     j = n - nmj
+     jj = jj - (m - j + 1)
+     w(j) = 0.0E+00
+
+      if ( v(j) /= 0.0E+00 ) then
+!
+!        determine a givens rotation which eliminates the
+!        j-th element of v.
+!
+      if ( abs(v(n)) < abs(v(j)) ) then
+        cotan = v(n)/v(j)
+        sin = p5/sqrt(p25+p25*cotan**2)
+        cos = sin*cotan
+        tau = 1.0E+00
+        if (abs(cos)*giant > 1.0) tau = 1.0/cos
+      else
+        tan = v(j)/v(n)
+        cos = p5/sqrt(p25+p25*tan**2)
+        sin = cos*tan
+        tau = sin
+      end if
+!
+!  apply the transformation to v and store the information
+!  necessary to recover the givens rotation.
+!
+      v(n) = sin*v(j) + cos*v(n)
+      v(j) = tau
+!
+!  apply the transformation to s and extend the spike in w.
+!
+      l = jj
+
+      do i = j, m
+        temp = cos*s(l) - sin*w(i)
+        w(i) = sin*s(l) + cos*w(i)
+        s(l) = temp
+        l = l + 1
+      end do
+
+    end if
+
+  end do
+!
+!     add the spike from the rank 1 update to w.
+!
+  w(1:m) = w(1:m) + v(n) * u(1:m)
+!
+!     eliminate the spike.
+!
+  sing = .false.
+
+  do j = 1, n-1
+
+     if ( w(j) /= 0.0E+00 ) then
+!
+!        determine a givens rotation which eliminates the
+!        j-th element of the spike.
+!
+     if ( abs ( s(jj)) < abs ( w(j) ) ) then
+        cotan = s(jj)/w(j)
+        sin = p5/sqrt(p25+p25*cotan**2)
+        cos = sin*cotan
+        tau = 1.0E+00
+        if (abs(cos)*giant > 1.0) tau = 1.0/cos
+     else
+        tan = w(j)/s(jj)
+        cos = p5/sqrt(p25+p25*tan**2)
+        sin = cos*tan
+        tau = sin
+     end if
+!
+!  apply the transformation to s and reduce the spike in w.
+!
+     l = jj
+     do i = j, m
+        temp = cos*s(l) + sin*w(i)
+        w(i) = -sin*s(l) + cos*w(i)
+        s(l) = temp
+        l = l + 1
+     end do
+!
+!  store the information necessary to recover the givens rotation.
+!
+     w(j) = tau
+    end if
+!
+!        test for zero diagonal elements in the output s.
+!
+     if (s(jj) == 0.0) sing = .true.
+     jj = jj + (m - j + 1)
+
+  end do
+!
+!     move w back into the last column of the output s.
+!
+  l = jj
+  do i = n, m
+     s(l) = w(i)
+     l = l + 1
+  end do
+
+  if (s(jj) == 0.0) sing = .true.
+
+  return
+end
+function r9lgmc ( x )
+!
+!*******************************************************************************
+!
+!! R9LGMC computes the log gamma correction factor so that
+!            log(gamma(x)) = log(sqrt(2*pi)) + (x-.5)*log(x) - x
+!            + r9lgmc(x)
+!
+!  Description:
+!
+! compute the log gamma correction factor for x >= 10.0E+00 so that
+!  log (gamma(x)) = log(sqrt(2*pi)) + (x-.5)*log(x) - x + r9lgmc(x)
+!
+! series for algm       on the interval  0.          to  1.00000d-02
+!                                        with weighted error   3.40e-16
+!                                         log weighted error  15.47
+!                               significant figures required  14.39
+!                                    decimal places required  15.86
+!
+  real, save, dimension ( 6 ) :: algmcs = (/ &
+     0.166638948045186, -0.0000138494817606,  0.0000000098108256, &
+    -0.0000000000180912, 0.0000000000000622, -0.0000000000000003 /)
+  real csevl
+  integer inits
+  integer, save :: nalgm = 0
+  real r1mach
+  real r9lgmc
+  real x
+  real, save :: xbig = 0.0E+00
+  real, save :: xmax = 0.0E+00
+!
+  if ( nalgm == 0 ) then
+    nalgm = inits (algmcs, 6, r1mach(3))
+    xbig = 1.0/sqrt(r1mach(3))
+    xmax = exp ( min (log ( huge ( xmax ) / 12.0E+00 ), &
+                     -log ( 12.0E+00 * tiny ( xmax ) )) )
+  end if
+
+  if ( x < 10.0E+00 ) then
+    call xerror ( 'r9lgmc  x must be ge 10', 23, 1, 2)
+  end if
+
+  if ( x < xmax ) then
+    r9lgmc = 1.0/(12.0*x)
+    if (x<xbig) r9lgmc = csevl (2.0*(10./x)**2-1., algmcs, nalgm)/x
+  else
+    r9lgmc = 0.0E+00
+    call xerror ( 'r9lgmc  x so big r9lgmc underflows', 34, 2, 1)
+  end if
+
+  return
+end
+subroutine r_random ( rlo, rhi, r )
+!
+!*******************************************************************************
+!
+!! R_RANDOM returns a random real in a given range.
+!
+!
+!  Discussion:
+!
+!    Calls to the FORTRAN 90 random number generator should go through
+!    this routine, to guarantee that the random number seed has been set.
+!
+!  Modified:
+!
+!    05 February 2001
+!
+!  Author:
+!
+!    John Burkardt
+!
+!  Parameters:
+!
+!    Input, real RLO, RHI, the minimum and maximum values.
+!
+!    Output, real R, the randomly chosen value.
+!
+  real r
+  real rhi
+  real rlo
+  integer, save :: seed = 0
+  logical, save :: seeded = .false.
+  real t
+  real uniform_01_sample
+!
+!  Make sure the random number generator has been seeded.
+!
+  if ( .not. seeded ) then
+    call random_initialize ( seed )
+    seeded = .true.
+  end if
+!
+!  Pick T, a random number in (0,1).
+!
+! call random_number ( harvest = t )
+!
+  t = uniform_01_sample ( seed )
+!
+!  Set R in ( RLO, RHI ).
+!
+  r = ( 1.0E+00 - t ) * rlo + t * rhi
+
+  return
+end
+subroutine r_swap ( x, y )
+!
+!*******************************************************************************
+!
+!! R_SWAP swaps two real values.
+!
+!
+!  Modified:
+!
+!    01 May 2000
+!
+!  Author:
+!
+!    John Burkardt
+!
+!  Parameters:
+!
+!    Input/output, real X, Y.  On output, the values of X and
+!    Y have been interchanged.
+!
+  real x
+  real y
+  real z
+!
+  z = x
+  x = y
+  y = z
+
+  return
+end
+subroutine radb2 ( ido, l1, cc, ch, wa1 )
+!
+!*******************************************************************************
+!
+!! RADB2 is a lower level routine used by RFFTB1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,2,l1)
+  real ch(ido,l1,2)
+  integer i
+  integer ic
+  integer k
+  real ti2
+  real tr2
+  real wa1(ido)
+!
+  ch(1,1:l1,1) = cc(1,1,1:l1) + cc(ido,2,1:l1)
+  ch(1,1:l1,2) = cc(1,1,1:l1) - cc(ido,2,1:l1)
+
+  if ( ido < 2 ) then
+    return
+  end if
+
+  if ( ido > 2 ) then
+
+    do k = 1, l1
+      do i = 3, ido, 2
+
+        ic = ido + 2 - i
+
+        ch(i-1,k,1) = cc(i-1,1,k) + cc(ic-1,2,k)
+        tr2         = cc(i-1,1,k) - cc(ic-1,2,k)
+        ch(i,k,1)   = cc(i,1,k)   - cc(ic,2,k)
+        ti2         = cc(i,1,k)   + cc(ic,2,k)
+
+        ch(i-1,k,2) = wa1(i-2) * tr2 - wa1(i-1) * ti2
+        ch(i,k,2)   = wa1(i-2) * ti2 + wa1(i-1) * tr2
+
+      end do
+    end do
+
+    if ( mod ( ido, 2 ) == 1 ) then
+      return
+    end if
+
+  end if
+
+  ch(ido,1:l1,1) =    cc(ido,1,1:l1) + cc(ido,1,1:l1)
+  ch(ido,1:l1,2) = -( cc(1,2,1:l1)   + cc(1,2,1:l1) )
+
+  return
+end
+subroutine radb3 ( ido, l1, cc, ch, wa1, wa2 )
+!
+!*******************************************************************************
+!
+!! RADB3 is a lower level routine used by RFFTB1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,3,l1)
+  real ch(ido,l1,3)
+  real ci2
+  real ci3
+  real cr2
+  real cr3
+  real di2
+  real di3
+  real dr2
+  real dr3
+  integer i
+  integer ic
+  integer k
+  real, parameter :: taui =  0.866025403784439E+00
+  real, parameter :: taur = -0.5E+00
+  real ti2
+  real tr2
+  real wa1(ido)
+  real wa2(ido)
+!
+  do k = 1, l1
+
+    tr2 = cc(ido,2,k) + cc(ido,2,k)
+    cr2 = cc(1,1,k) + taur * tr2
+    ch(1,k,1) = cc(1,1,k) + tr2
+    ci3 = taui * ( cc(1,3,k) + cc(1,3,k) )
+
+    ch(1,k,2) = cr2 - ci3
+    ch(1,k,3) = cr2 + ci3
+
+  end do
+
+  if ( ido == 1 ) then
+    return
+  end if
+
+  do k = 1, l1
+    do i = 3, ido, 2
+
+      ic = ido + 2 - i
+
+      tr2 = cc(i-1,3,k) + cc(ic-1,2,k)
+      cr2 = cc(i-1,1,k) + taur * tr2
+      ch(i-1,k,1) = cc(i-1,1,k) + tr2
+
+      ti2 = cc(i,3,k) - cc(ic,2,k)
+      ci2 = cc(i,1,k) + taur * ti2
+      ch(i,k,1) = cc(i,1,k) + ti2
+
+      cr3 = taui * ( cc(i-1,3,k) - cc(ic-1,2,k) )
+      ci3 = taui * ( cc(i,3,k)   + cc(ic,2,k) )
+
+      dr2 = cr2 - ci3
+      dr3 = cr2 + ci3
+      di2 = ci2 + cr3
+      di3 = ci2 - cr3
+
+      ch(i-1,k,2) = wa1(i-2) * dr2 - wa1(i-1) * di2
+      ch(i,k,2)   = wa1(i-2) * di2 + wa1(i-1) * dr2
+      ch(i-1,k,3) = wa2(i-2) * dr3 - wa2(i-1) * di3
+      ch(i,k,3)   = wa2(i-2) * di3 + wa2(i-1) * dr3
+
+    end do
+  end do
+
+  return
+end
+subroutine radb4 ( ido, l1, cc, ch, wa1, wa2, wa3 )
+!
+!*******************************************************************************
+!
+!! RADB4 is a lower level routine used by RFFTB1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,4,l1)
+  real ch(ido,l1,4)
+  real ci2
+  real ci3
+  real ci4
+  real cr2
+  real cr3
+  real cr4
+  integer i
+  integer ic
+  integer k
+  real, parameter :: sqrt2 = 1.414213562373095E+00
+  real ti1
+  real ti2
+  real ti3
+  real ti4
+  real tr1
+  real tr2
+  real tr3
+  real tr4
+  real wa1(ido)
+  real wa2(ido)
+  real wa3(ido)
+!
+  do k = 1, l1
+
+    tr1 = cc(1,1,k) - cc(ido,4,k)
+    tr2 = cc(1,1,k) + cc(ido,4,k)
+    tr3 = cc(ido,2,k) + cc(ido,2,k)
+    tr4 = cc(1,3,k) + cc(1,3,k)
+
+    ch(1,k,1) = tr2 + tr3
+    ch(1,k,2) = tr1 - tr4
+    ch(1,k,3) = tr2 - tr3
+    ch(1,k,4) = tr1 + tr4
+
+  end do
+
+  if ( ido < 2 ) then
+    return
+  end if
+
+  if ( ido > 2 ) then
+
+    do k = 1, l1
+      do i = 3, ido, 2
+
+        ic = ido + 2 - i
+
+        ti1 = cc(i,1,k) + cc(ic,4,k)
+        ti2 = cc(i,1,k) - cc(ic,4,k)
+        ti3 = cc(i,3,k) - cc(ic,2,k)
+        tr4 = cc(i,3,k) + cc(ic,2,k)
+
+        tr1 = cc(i-1,1,k) - cc(ic-1,4,k)
+        tr2 = cc(i-1,1,k) + cc(ic-1,4,k)
+        ti4 = cc(i-1,3,k) - cc(ic-1,2,k)
+        tr3 = cc(i-1,3,k) + cc(ic-1,2,k)
+
+        ch(i-1,k,1) = tr2 + tr3
+        cr3         = tr2 - tr3
+        ch(i,k,1)   = ti2 + ti3
+        ci3         = ti2 - ti3
+
+        cr2 = tr1 - tr4
+        cr4 = tr1 + tr4
+        ci2 = ti1 + ti4
+        ci4 = ti1 - ti4
+
+        ch(i-1,k,2) = wa1(i-2) * cr2 - wa1(i-1) * ci2
+        ch(i,k,2)   = wa1(i-2) * ci2 + wa1(i-1) * cr2
+        ch(i-1,k,3) = wa2(i-2) * cr3 - wa2(i-1) * ci3
+        ch(i,k,3)   = wa2(i-2) * ci3 + wa2(i-1) * cr3
+        ch(i-1,k,4) = wa3(i-2) * cr4 - wa3(i-1) * ci4
+        ch(i,k,4)   = wa3(i-2) * ci4 + wa3(i-1) * cr4
+
+      end do
+    end do
+
+    if ( mod ( ido, 2 ) == 1 ) then
+      return
+    end if
+
+  end if
+
+  do k = 1, l1
+
+    ti1 = cc(1,2,k)   + cc(1,4,k)
+    ti2 = cc(1,4,k)   - cc(1,2,k)
+    tr1 = cc(ido,1,k) - cc(ido,3,k)
+    tr2 = cc(ido,1,k) + cc(ido,3,k)
+
+    ch(ido,k,1) = tr2 + tr2
+    ch(ido,k,2) = sqrt2 * ( tr1 - ti1 )
+    ch(ido,k,3) = ti2 + ti2
+    ch(ido,k,4) = -sqrt2 * ( tr1 + ti1 )
+
+  end do
+
+  return
+end
+subroutine radb5 ( ido, l1, cc, ch, wa1, wa2, wa3, wa4 )
+!
+!*******************************************************************************
+!
+!! RADB5 is a lower level routine used by RFFTB1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,5,l1)
+  real ch(ido,l1,5)
+  real ci2
+  real ci3
+  real ci4
+  real ci5
+  real cr2
+  real cr3
+  real cr4
+  real cr5
+  real di2
+  real di3
+  real di4
+  real di5
+  real dr2
+  real dr3
+  real dr4
+  real dr5
+  integer i
+  integer ic
+  integer k
+  real, parameter :: ti11 =  0.951056516295154E+00
+  real, parameter :: ti12 =  0.587785252292473E+00
+  real ti2
+  real ti3
+  real ti4
+  real ti5
+  real, parameter :: tr11 =  0.309016994374947E+00
+  real, parameter :: tr12 = -0.809016994374947E+00
+  real tr2
+  real tr3
+  real tr4
+  real tr5
+  real wa1(ido)
+  real wa2(ido)
+  real wa3(ido)
+  real wa4(ido)
+!
+  do k = 1, l1
+
+    ti5 = cc(1,3,k) + cc(1,3,k)
+    ti4 = cc(1,5,k) + cc(1,5,k)
+    tr2 = cc(ido,2,k) + cc(ido,2,k)
+    tr3 = cc(ido,4,k) + cc(ido,4,k)
+
+    ch(1,k,1) = cc(1,1,k) + tr2 + tr3
+    cr2 = cc(1,1,k) + tr11 * tr2 + tr12 * tr3
+    cr3 = cc(1,1,k) + tr12 * tr2 + tr11 * tr3
+    ci5 = ti11 * ti5 + ti12 * ti4
+    ci4 = ti12 * ti5 - ti11 * ti4
+
+    ch(1,k,2) = cr2 - ci5
+    ch(1,k,3) = cr3 - ci4
+    ch(1,k,4) = cr3 + ci4
+    ch(1,k,5) = cr2 + ci5
+
+  end do
+
+  if ( ido == 1 ) then
+    return
+  end if
+
+  do k = 1, l1
+    do i = 3, ido, 2
+
+      ic = ido + 2 - i
+
+      ti5 = cc(i,3,k) + cc(ic,2,k)
+      ti2 = cc(i,3,k) - cc(ic,2,k)
+      ti4 = cc(i,5,k) + cc(ic,4,k)
+      ti3 = cc(i,5,k) - cc(ic,4,k)
+      tr5 = cc(i-1,3,k) - cc(ic-1,2,k)
+      tr2 = cc(i-1,3,k) + cc(ic-1,2,k)
+      tr4 = cc(i-1,5,k) - cc(ic-1,4,k)
+      tr3 = cc(i-1,5,k) + cc(ic-1,4,k)
+
+      ch(i-1,k,1) = cc(i-1,1,k) + tr2 + tr3
+      ch(i,k,1)   = cc(i,1,k) + ti2 + ti3
+
+      cr2 = cc(i-1,1,k) + tr11 * tr2 + tr12 * tr3
+      ci2 = cc(i,1,k)   + tr11 * ti2 + tr12 * ti3
+      cr3 = cc(i-1,1,k) + tr12 * tr2 + tr11 * tr3
+      ci3 = cc(i,1,k)   + tr12 * ti2 + tr11 * ti3
+
+      cr5 = ti11 * tr5 + ti12 * tr4
+      ci5 = ti11 * ti5 + ti12 * ti4
+      cr4 = ti12 * tr5 - ti11 * tr4
+      ci4 = ti12 * ti5 - ti11 * ti4
+
+      dr3 = cr3 - ci4
+      dr4 = cr3 + ci4
+      di3 = ci3 + cr4
+      di4 = ci3 - cr4
+      dr5 = cr2 + ci5
+      dr2 = cr2 - ci5
+      di5 = ci2 - cr5
+      di2 = ci2 + cr5
+
+      ch(i-1,k,2) = wa1(i-2) * dr2 - wa1(i-1) * di2
+      ch(i,k,2)   = wa1(i-2) * di2 + wa1(i-1) * dr2
+      ch(i-1,k,3) = wa2(i-2) * dr3 - wa2(i-1) * di3
+      ch(i,k,3)   = wa2(i-2) * di3 + wa2(i-1) * dr3
+      ch(i-1,k,4) = wa3(i-2) * dr4 - wa3(i-1) * di4
+      ch(i,k,4)   = wa3(i-2) * di4 + wa3(i-1) * dr4
+      ch(i-1,k,5) = wa4(i-2) * dr5 - wa4(i-1) * di5
+      ch(i,k,5)   = wa4(i-2) * di5 + wa4(i-1) * dr5
+
+    end do
+  end do
+
+  return
+end
+subroutine radbg ( ido, ip, l1, idl1, cc, c1, c2, ch, ch2, wa )
+!
+!*******************************************************************************
+!
+!! RADBG is a lower level routine used by RFFTB1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer idl1
+  integer ido
+  integer ip
+  integer l1
+!
+  real ai1
+  real ai2
+  real ar1
+  real ar1h
+  real ar2
+  real ar2h
+  real arg
+  real c1(ido,l1,ip)
+  real c2(idl1,ip)
+  real cc(ido,ip,l1)
+  real ch(ido,l1,ip)
+  real ch2(idl1,ip)
+  real dc2
+  real dcp
+  real ds2
+  real dsp
+  integer i
+  integer ic
+  integer idij
+  integer ik
+  integer ipph
+  integer is
+  integer j
+  integer j2
+  integer jc
+  integer k
+  integer l
+  integer lc
+  integer nbd
+  real pimach
+  real wa(*)
+!
+  arg = 2.0E+00 * pimach() / real ( ip )
+  dcp = cos ( arg )
+  dsp = sin ( arg )
+  nbd = ( ido - 1 ) / 2
+  ipph = ( ip + 1 ) / 2
+  ch(1:ido,1:l1,1) = cc(1:ido,1,1:l1)
+
+  do j = 2, ipph
+    jc = ip + 2 - j
+    j2 = j + j
+    ch(1,1:l1,j) =  cc(ido,j2-2,1:l1) + cc(ido,j2-2,1:l1)
+    ch(1,1:l1,jc) = cc(1,j2-1,1:l1)   + cc(1,j2-1,1:l1)
+  end do
+
+  if ( ido /= 1 ) then
+
+    if ( nbd >= l1 ) then
+
+      do j = 2, ipph
+        jc = ip + 2 - j
+        do k = 1, l1
+          do i = 3, ido, 2
+            ic = ido + 2 - i
+            ch(i-1,k,j)  = cc(i-1,2*j-1,k) + cc(ic-1,2*j-2,k)
+            ch(i-1,k,jc) = cc(i-1,2*j-1,k) - cc(ic-1,2*j-2,k)
+            ch(i,k,j)    = cc(i,2*j-1,k)   - cc(ic,2*j-2,k)
+            ch(i,k,jc)   = cc(i,2*j-1,k)   + cc(ic,2*j-2,k)
+          end do
+        end do
+      end do
+
+    else
+
+      do j = 2, ipph
+        jc = ip + 2 - j
+        do i = 3, ido, 2
+          ic = ido + 2 - i
+          ch(i-1,1:l1,j)  = cc(i-1,2*j-1,1:l1) + cc(ic-1,2*j-2,1:l1)
+          ch(i-1,1:l1,jc) = cc(i-1,2*j-1,1:l1) - cc(ic-1,2*j-2,1:l1)
+          ch(i,1:l1,j)    = cc(i,2*j-1,1:l1)   - cc(ic,2*j-2,1:l1)
+          ch(i,1:l1,jc)   = cc(i,2*j-1,1:l1)   + cc(ic,2*j-2,1:l1)
+        end do
+      end do
+
+    end if
+
+  end if
+
+  ar1 = 1.0E+00
+  ai1 = 0.0E+00
+
+  do l = 2, ipph
+
+    lc = ip + 2 - l
+    ar1h = dcp * ar1 - dsp * ai1
+    ai1 =  dcp * ai1 + dsp * ar1
+    ar1 = ar1h
+
+    do ik = 1, idl1
+      c2(ik,l)  = ch2(ik,1) + ar1 * ch2(ik,2)
+      c2(ik,lc) =             ai1 * ch2(ik,ip)
+    end do
+
+    dc2 = ar1
+    ds2 = ai1
+    ar2 = ar1
+    ai2 = ai1
+
+    do j = 3, ipph
+
+      jc = ip + 2 - j
+      ar2h = dc2 * ar2 - ds2 * ai2
+      ai2  = dc2 * ai2 + ds2 * ar2
+      ar2 = ar2h
+
+      do ik = 1, idl1
+        c2(ik,l)  = c2(ik,l)  + ar2 * ch2(ik,j)
+        c2(ik,lc) = c2(ik,lc) + ai2 * ch2(ik,jc)
+      end do
+
+    end do
+
+  end do
+
+  do j = 2, ipph
+    ch2(1:idl1,1) = ch2(1:idl1,1) + ch2(1:idl1,j)
+  end do
+
+  do j = 2, ipph
+    jc = ip + 2 - j
+    ch(1,1:l1,j)  = c1(1,1:l1,j) - c1(1,1:l1,jc)
+    ch(1,1:l1,jc) = c1(1,1:l1,j) + c1(1,1:l1,jc)
+  end do
+
+  if ( ido /= 1 ) then
+
+    if ( nbd >= l1 ) then
+
+      do j = 2, ipph
+        jc = ip + 2 - j
+        do k = 1, l1
+          do i = 3, ido, 2
+            ch(i-1,k,j)  = c1(i-1,k,j) - c1(i,k,jc)
+            ch(i-1,k,jc) = c1(i-1,k,j) + c1(i,k,jc)
+            ch(i,k,j)    = c1(i,k,j)   + c1(i-1,k,jc)
+            ch(i,k,jc)   = c1(i,k,j)   - c1(i-1,k,jc)
+          end do
+        end do
+      end do
+
+    else
+
+      do j = 2, ipph
+        jc = ip + 2 - j
+        do i = 3, ido, 2
+          ch(i-1,1:l1,j)  = c1(i-1,1:l1,j) - c1(i,1:l1,jc)
+          ch(i-1,1:l1,jc) = c1(i-1,1:l1,j) + c1(i,1:l1,jc)
+          ch(i,1:l1,j)    = c1(i,1:l1,j)   + c1(i-1,1:l1,jc)
+          ch(i,1:l1,jc)   = c1(i,1:l1,j)   - c1(i-1,1:l1,jc)
+        end do
+      end do
+
+    end if
+
+  end if
+
+  if ( ido == 1 ) then
+    return
+  end if
+
+  c2(1:idl1,1) = ch2(1:idl1,1)
+  c1(1,1:l1,2:ip) = ch(1,1:l1,2:ip)
+
+  if ( nbd <= l1 ) then
+
+    is = -ido
+
+    do j = 2, ip
+      is = is + ido
+      idij = is
+      do i = 3, ido, 2
+        idij = idij + 2
+        c1(i-1,1:l1,j) = wa(idij-1) * ch(i-1,1:l1,j) - wa(idij) * ch(i,1:l1,j)
+        c1(i,1:l1,j)   = wa(idij-1) * ch(i,1:l1,j)   + wa(idij) * ch(i-1,1:l1,j)
+      end do
+    end do
+
+  else
+
+    is = -ido
+    do j = 2, ip
+      is = is + ido
+      do k = 1, l1
+        idij = is
+        do i = 3, ido, 2
+          idij = idij + 2
+          c1(i-1,k,j) = wa(idij-1) * ch(i-1,k,j) - wa(idij) * ch(i,k,j)
+          c1(i,k,j)   = wa(idij-1) * ch(i,k,j)   + wa(idij) * ch(i-1,k,j)
+        end do
+      end do
+    end do
+
+  end if
+
+  return
+end
+subroutine radf2 ( ido, l1, cc, ch, wa1 )
+!
+!*******************************************************************************
+!
+!! RADF2 is a lower level routine used by RFFTF1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,l1,2)
+  real ch(ido,2,l1)
+  integer i
+  integer ic
+  integer k
+  real ti2
+  real tr2
+  real wa1(ido)
+!
+  ch(1,1,1:l1)   = cc(1,1:l1,1) + cc(1,1:l1,2)
+  ch(ido,2,1:l1) = cc(1,1:l1,1) - cc(1,1:l1,2)
+
+  if ( ido < 2 ) then
+    return
+  end if
+
+  if ( ido > 2 ) then
+
+    do k = 1, l1
+      do i = 3, ido, 2
+
+        ic = ido + 2 - i
+
+        tr2 = wa1(i-2) * cc(i-1,k,2) + wa1(i-1) * cc(i,k,2)
+        ti2 = wa1(i-2) * cc(i,k,2)   - wa1(i-1) * cc(i-1,k,2)
+
+        ch(i,1,k) = cc(i,k,1) + ti2
+        ch(ic,2,k) = ti2 - cc(i,k,1)
+        ch(i-1,1,k) = cc(i-1,k,1) + tr2
+        ch(ic-1,2,k) = cc(i-1,k,1) - tr2
+
+      end do
+    end do
+
+    if ( mod ( ido, 2 ) == 1 ) then
+      return
+    end if
+
+  end if
+
+  ch(1,2,1:l1) = -cc(ido,1:l1,2)
+  ch(ido,1,1:l1) = cc(ido,1:l1,1)
+
+  return
+end
+subroutine radf3 ( ido, l1, cc, ch, wa1, wa2 )
+!
+!*******************************************************************************
+!
+!! RADF3 is a lower level routine used by RFFTF1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,l1,3)
+  real ch(ido,3,l1)
+  real ci2
+  real cr2
+  real di2
+  real di3
+  real dr2
+  real dr3
+  integer i
+  integer ic
+  integer k
+  real, parameter :: taui = 0.866025403784439E+00
+  real, parameter :: taur = -0.5E+00
+  real ti2
+  real ti3
+  real tr2
+  real tr3
+  real wa1(ido)
+  real wa2(ido)
+!
+  do k = 1, l1
+    cr2 = cc(1,k,2) + cc(1,k,3)
+    ch(1,1,k) = cc(1,k,1) + cr2
+    ch(1,3,k) = taui * ( cc(1,k,3) - cc(1,k,2) )
+    ch(ido,2,k) = cc(1,k,1) + taur * cr2
+  end do
+
+  if ( ido == 1 ) then
+    return
+  end if
+
+  do k = 1, l1
+    do i = 3, ido, 2
+
+      ic = ido + 2 - i
+
+      dr2 = wa1(i-2) * cc(i-1,k,2) + wa1(i-1) * cc(i,k,2)
+      di2 = wa1(i-2) * cc(i,k,2)   - wa1(i-1) * cc(i-1,k,2)
+      dr3 = wa2(i-2) * cc(i-1,k,3) + wa2(i-1) * cc(i,k,3)
+      di3 = wa2(i-2) * cc(i,k,3)   - wa2(i-1) * cc(i-1,k,3)
+
+      cr2 = dr2 + dr3
+      ci2 = di2 + di3
+
+      ch(i-1,1,k) = cc(i-1,k,1) + cr2
+      ch(i,1,k)   = cc(i,k,1) + ci2
+
+      tr2 = cc(i-1,k,1) + taur * cr2
+      ti2 = cc(i,k,1) + taur * ci2
+      tr3 = taui * ( di2 - di3 )
+      ti3 = taui * ( dr3 - dr2 )
+
+      ch(i-1,3,k) = tr2 + tr3
+      ch(ic-1,2,k) = tr2 - tr3
+      ch(i,3,k) = ti2 + ti3
+      ch(ic,2,k) = ti3 - ti2
+
+    end do
+  end do
+
+  return
+end
+subroutine radf4 ( ido, l1, cc, ch, wa1, wa2, wa3 )
+!
+!*******************************************************************************
+!
+!! RADF4 is a lower level routine used by RFFTF1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,l1,4)
+  real ch(ido,4,l1)
+  real ci2
+  real ci3
+  real ci4
+  real cr2
+  real cr3
+  real cr4
+  real, parameter :: hsqt2 = 0.7071067811865475E+00
+  integer i
+  integer ic
+  integer k
+  real ti1
+  real ti2
+  real ti3
+  real ti4
+  real tr1
+  real tr2
+  real tr3
+  real tr4
+  real wa1(ido)
+  real wa2(ido)
+  real wa3(ido)
+!
+  do k = 1, l1
+    tr1 = cc(1,k,2) + cc(1,k,4)
+    tr2 = cc(1,k,1) + cc(1,k,3)
+    ch(1,1,k) = tr1 + tr2
+    ch(ido,4,k) = tr2 - tr1
+    ch(ido,2,k) = cc(1,k,1) - cc(1,k,3)
+    ch(1,3,k) = cc(1,k,4) - cc(1,k,2)
+  end do
+
+  if ( ido < 2 ) then
+    return
+  end if
+
+  if ( ido > 2 ) then
+
+    do k = 1, l1
+      do i = 3, ido, 2
+
+        ic = ido + 2 - i
+
+        cr2 = wa1(i-2) * cc(i-1,k,2) + wa1(i-1) * cc(i,k,2)
+        ci2 = wa1(i-2) * cc(i,k,2)   - wa1(i-1) * cc(i-1,k,2)
+        cr3 = wa2(i-2) * cc(i-1,k,3) + wa2(i-1) * cc(i,k,3)
+        ci3 = wa2(i-2) * cc(i,k,3)   - wa2(i-1) * cc(i-1,k,3)
+        cr4 = wa3(i-2) * cc(i-1,k,4) + wa3(i-1) * cc(i,k,4)
+        ci4 = wa3(i-2) * cc(i,k,4)   - wa3(i-1) * cc(i-1,k,4)
+
+        tr1 = cr2+cr4
+        tr4 = cr4-cr2
+        ti1 = ci2+ci4
+        ti4 = ci2-ci4
+        ti2 = cc(i,k,1) + ci3
+        ti3 = cc(i,k,1) - ci3
+        tr2 = cc(i-1,k,1) + cr3
+        tr3 = cc(i-1,k,1) - cr3
+
+        ch(i-1,1,k)  = tr1 + tr2
+        ch(ic-1,4,k) = tr2 - tr1
+        ch(i,1,k)    = ti1 + ti2
+        ch(ic,4,k)   = ti1 - ti2
+        ch(i-1,3,k)  = ti4 + tr3
+        ch(ic-1,2,k) = tr3 - ti4
+        ch(i,3,k)    = tr4 + ti3
+        ch(ic,2,k)   = tr4 - ti3
+
+      end do
+    end do
+
+    if ( mod ( ido, 2 ) == 1 ) then
+      return
+    end if
+
+  end if
+
+  do k = 1, l1
+
+    ti1 = -hsqt2 * ( cc(ido,k,2) + cc(ido,k,4) )
+    tr1 =  hsqt2 * ( cc(ido,k,2) - cc(ido,k,4) )
+
+    ch(ido,1,k) = tr1 + cc(ido,k,1)
+    ch(ido,3,k) = cc(ido,k,1) - tr1
+
+    ch(1,2,k) = ti1 - cc(ido,k,3)
+    ch(1,4,k) = ti1 + cc(ido,k,3)
+
+  end do
+
+  return
+end
+subroutine radf5 ( ido, l1, cc, ch, wa1, wa2, wa3, wa4 )
+!
+!*******************************************************************************
+!
+!! RADF5 is a lower level routine used by RFFTF1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,l1,5)
+  real ch(ido,5,l1)
+  real ci2
+  real ci3
+  real ci4
+  real ci5
+  real cr2
+  real cr3
+  real cr4
+  real cr5
+  real di2
+  real di3
+  real di4
+  real di5
+  real dr2
+  real dr3
+  real dr4
+  real dr5
+  integer i
+  integer ic
+  integer k
+  real, parameter :: ti11 =  0.951056516295154E+00
+  real, parameter :: ti12 =  0.587785252292473E+00
+  real ti2
+  real ti3
+  real ti4
+  real ti5
+  real, parameter :: tr11 =  0.309016994374947E+00
+  real, parameter :: tr12 = -0.809016994374947E+00
+  real tr2
+  real tr3
+  real tr4
+  real tr5
+  real wa1(ido)
+  real wa2(ido)
+  real wa3(ido)
+  real wa4(ido)
+!
+  do k = 1, l1
+
+    cr2 = cc(1,k,5) + cc(1,k,2)
+    ci5 = cc(1,k,5) - cc(1,k,2)
+    cr3 = cc(1,k,4) + cc(1,k,3)
+    ci4 = cc(1,k,4) - cc(1,k,3)
+
+    ch(1,1,k)   = cc(1,k,1) + cr2 + cr3
+    ch(ido,2,k) = cc(1,k,1) + tr11 * cr2 + tr12 * cr3
+    ch(1,3,k)   = ti11 * ci5 + ti12 * ci4
+    ch(ido,4,k) = cc(1,k,1) + tr12 * cr2 + tr11 * cr3
+    ch(1,5,k)   = ti12 * ci5 - ti11 * ci4
+
+  end do
+
+  if ( ido == 1 ) then
+    return
+  end if
+
+  do k = 1, l1
+    do i = 3, ido, 2
+
+      ic = ido + 2 - i
+
+      dr2 = wa1(i-2) * cc(i-1,k,2) + wa1(i-1) * cc(i,k,2)
+      di2 = wa1(i-2) * cc(i,k,2)   - wa1(i-1) * cc(i-1,k,2)
+      dr3 = wa2(i-2) * cc(i-1,k,3) + wa2(i-1) * cc(i,k,3)
+      di3 = wa2(i-2) * cc(i,k,3)   - wa2(i-1) * cc(i-1,k,3)
+      dr4 = wa3(i-2) * cc(i-1,k,4) + wa3(i-1) * cc(i,k,4)
+      di4 = wa3(i-2) * cc(i,k,4)   - wa3(i-1) * cc(i-1,k,4)
+      dr5 = wa4(i-2) * cc(i-1,k,5) + wa4(i-1) * cc(i,k,5)
+      di5 = wa4(i-2) * cc(i,k,5)   - wa4(i-1) * cc(i-1,k,5)
+
+      cr2 = dr2 + dr5
+      ci5 = dr5 - dr2
+      cr5 = di2 - di5
+      ci2 = di2 + di5
+      cr3 = dr3 + dr4
+      ci4 = dr4 - dr3
+      cr4 = di3 - di4
+      ci3 = di3 + di4
+
+      ch(i-1,1,k) = cc(i-1,k,1) + cr2 + cr3
+      ch(i,1,k)   = cc(i,k,1)   + ci2 + ci3
+
+      tr2 = cc(i-1,k,1) + tr11 * cr2 + tr12 * cr3
+      ti2 = cc(i,k,1)   + tr11 * ci2 + tr12 * ci3
+      tr3 = cc(i-1,k,1) + tr12 * cr2 + tr11 * cr3
+      ti3 = cc(i,k,1)   + tr12 * ci2 + tr11 * ci3
+
+      tr5 = ti11 * cr5 + ti12 * cr4
+      ti5 = ti11 * ci5 + ti12 * ci4
+      tr4 = ti12 * cr5 - ti11 * cr4
+      ti4 = ti12 * ci5 - ti11 * ci4
+
+      ch(i-1,3,k)  = tr2 + tr5
+      ch(ic-1,2,k) = tr2 - tr5
+      ch(i,3,k)    = ti2 + ti5
+      ch(ic,2,k)   = ti5 - ti2
+      ch(i-1,5,k)  = tr3 + tr4
+      ch(ic-1,4,k) = tr3 - tr4
+      ch(i,5,k)    = ti3 + ti4
+      ch(ic,4,k)   = ti4 - ti3
+
+    end do
+  end do
+
+  return
+end
+subroutine radfg ( ido, ip, l1, idl1, cc, c1, c2, ch, ch2, wa )
+!
+!*******************************************************************************
+!
+!! RADFG is a lower level routine used by RFFTF1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer idl1
+  integer ido
+  integer ip
+  integer l1
+!
+  real ai1
+  real ai2
+  real ar1
+  real ar1h
+  real ar2
+  real ar2h
+  real arg
+  real c1(ido,l1,ip)
+  real c2(idl1,ip)
+  real cc(ido,ip,l1)
+  real ch(ido,l1,ip)
+  real ch2(idl1,ip)
+  real dc2
+  real dcp
+  real ds2
+  real dsp
+  integer i
+  integer ic
+  integer idij
+  integer ik
+  integer ipph
+  integer is
+  integer j
+  integer j2
+  integer jc
+  integer k
+  integer l
+  integer lc
+  integer nbd
+  real pimach
+  real wa(*)
+!
+  arg = 2.0E+00 * pimach() / real ( ip )
+  dcp = cos ( arg )
+  dsp = sin ( arg )
+  ipph = ( ip + 1 ) / 2
+  nbd = ( ido - 1 ) / 2
+
+  if ( ido == 1 ) then
+
+    c2(1:idl1,1) = ch2(1:idl1,1)
+
+  else
+
+    ch2(1:idl1,1) = c2(1:idl1,1)
+    ch(1,1:l1,2:ip) = c1(1,1:l1,2:ip)
+
+    if ( nbd <= l1 ) then
+
+      is = -ido
+      do j = 2, ip
+        is = is + ido
+        idij = is
+        do i = 3, ido, 2
+          idij = idij + 2
+          do k = 1, l1
+            ch(i-1,k,j) = wa(idij-1) * c1(i-1,k,j) + wa(idij) * c1(i,k,j)
+            ch(i,k,j)   = wa(idij-1) * c1(i,k,j)   - wa(idij) * c1(i-1,k,j)
+          end do
+        end do
+      end do
+
+    else
+
+      is = -ido
+
+      do j = 2, ip
+        is = is + ido
+        do k = 1, l1
+          idij = is
+          do i = 3, ido, 2
+            idij = idij + 2
+            ch(i-1,k,j) = wa(idij-1) * c1(i-1,k,j) + wa(idij) * c1(i,k,j)
+            ch(i,k,j)   = wa(idij-1) * c1(i,k,j)   - wa(idij) * c1(i-1,k,j)
+          end do
+        end do
+      end do
+
+    end if
+
+    if ( nbd >= l1 ) then
+
+      do j = 2, ipph
+        jc = ip + 2 - j
+        do k = 1, l1
+          do i = 3, ido, 2
+            c1(i-1,k,j)  = ch(i-1,k,j)  + ch(i-1,k,jc)
+            c1(i-1,k,jc) = ch(i,k,j)    - ch(i,k,jc)
+            c1(i,k,j)    = ch(i,k,j)    + ch(i,k,jc)
+            c1(i,k,jc)   = ch(i-1,k,jc) - ch(i-1,k,j)
+          end do
+        end do
+      end do
+
+    else
+
+      do j = 2, ipph
+        jc = ip + 2 - j
+        do i = 3, ido, 2
+          c1(i-1,1:l1,j)  = ch(i-1,1:l1,j)  + ch(i-1,1:l1,jc)
+          c1(i-1,1:l1,jc) = ch(i,1:l1,j)    - ch(i,1:l1,jc)
+          c1(i,1:l1,j)    = ch(i,1:l1,j)    + ch(i,1:l1,jc)
+          c1(i,1:l1,jc)   = ch(i-1,1:l1,jc) - ch(i-1,1:l1,j)
+        end do
+      end do
+
+    end if
+
+  end if
+
+  do j = 2, ipph
+    jc = ip + 2 - j
+    c1(1,1:l1,j)  = ch(1,1:l1,j)  + ch(1,1:l1,jc)
+    c1(1,1:l1,jc) = ch(1,1:l1,jc) - ch(1,1:l1,j)
+  end do
+
+  ar1 = 1.0E+00
+  ai1 = 0.0E+00
+
+  do l = 2, ipph
+
+    lc = ip + 2 - l
+    ar1h = dcp * ar1 - dsp * ai1
+    ai1 =  dcp * ai1 + dsp * ar1
+    ar1 = ar1h
+
+    do ik = 1, idl1
+      ch2(ik,l) = c2(ik,1) + ar1 * c2(ik,2)
+      ch2(ik,lc) =           ai1 * c2(ik,ip)
+    end do
+
+    dc2 = ar1
+    ds2 = ai1
+    ar2 = ar1
+    ai2 = ai1
+
+    do j = 3, ipph
+
+      jc = ip + 2 - j
+      ar2h = dc2 * ar2 - ds2 * ai2
+      ai2 =  dc2 * ai2 + ds2 * ar2
+      ar2 = ar2h
+
+      do ik = 1, idl1
+        ch2(ik,l) =  ch2(ik,l)  + ar2 * c2(ik,j)
+        ch2(ik,lc) = ch2(ik,lc) + ai2 * c2(ik,jc)
+      end do
+
+    end do
+
+  end do
+
+  do j = 2, ipph
+    ch2(1:idl1,1) = ch2(1:idl1,1) + c2(1:idl1,j)
+  end do
+
+  cc(1:ido,1,1:l1) = ch(1:ido,1:l1,1)
+
+  do j = 2, ipph
+    jc = ip + 2 - j
+    j2 = j + j
+    cc(ido,j2-2,1:l1) = ch(1,1:l1,j)
+    cc(1,j2-1,1:l1)   = ch(1,1:l1,jc)
+  end do
+
+  if ( ido == 1 ) then
+    return
+  end if
+
+  if ( nbd >= l1 ) then
+
+    do j = 2, ipph
+      jc = ip + 2 - j
+      j2 = j + j
+      do k = 1, l1
+        do i = 3, ido, 2
+          ic = ido + 2 - i
+          cc(i-1,j2-1,k)  = ch(i-1,k,j) + ch(i-1,k,jc)
+          cc(ic-1,j2-2,k) = ch(i-1,k,j) - ch(i-1,k,jc)
+          cc(i,j2-1,k)    = ch(i,k,j)   + ch(i,k,jc)
+          cc(ic,j2-2,k)   = ch(i,k,jc)  - ch(i,k,j)
+        end do
+      end do
+    end do
+
+  else
+
+    do j = 2, ipph
+      jc = ip + 2 - j
+      j2 = j + j
+      do i = 3, ido, 2
+        ic = ido + 2 - i
+        cc(i-1,j2-1,1:l1)  = ch(i-1,1:l1,j) + ch(i-1,1:l1,jc)
+        cc(ic-1,j2-2,1:l1) = ch(i-1,1:l1,j) - ch(i-1,1:l1,jc)
+        cc(i,j2-1,1:l1)    = ch(i,1:l1,j)   + ch(i,1:l1,jc)
+        cc(ic,j2-2,1:l1)   = ch(i,1:l1,jc)  - ch(i,1:l1,j)
+      end do
+    end do
+
+  end if
+
+  return
+end
+subroutine random_initialize ( seed )
+!
+!*******************************************************************************
+!
+!! RANDOM_INITIALIZE initializes the FORTRAN 90 random number seed.
+!
+!
+!  Discussion:
+!
+!    If you don't initialize the random number generator, its behavior
+!    is not specified.  If you initialize it simply by:
+!
+!      call random_seed
+!
+!    its behavior is not specified.  On the DEC ALPHA, if that's all you
+!    do, the same random number sequence is returned.  In order to actually
+!    try to scramble up the random number generator a bit, this routine
+!    goes through the tedious process of getting the size of the random
+!    number seed, making up values based on the current time, and setting
+!    the random number seed.
+!
+!    And this is the FORTRAN 90 people's idea of convenience?
+!
+!    And I still get poorly randomized values, somehow, having to do
+!    with a bad seed, or something.  I am about ready to go back to
+!    using my own damn routine!
+!
+!  Modified:
+!
+!    06 February 2001
+!
+!  Author:
+!
+!    John Burkardt
+!
+!  Parameters:
+!
+!    Output, integer SEED, a seed value.
+!
+  integer date_time(8)
+  integer i
+  integer seed
+  integer, allocatable :: seed_vector(:)
+  integer seed_size
+  real t
+  integer value
+!
+!  Initialize the random number seed.
+!
+  call random_seed
+!
+!  Determine the size of the random number seed.
+!
+  call random_seed ( size = seed_size )
+!
+!  Allocate a seed of the right size.
+!
+  allocate ( seed_vector(seed_size) )
+ seed_vector(:) = 0.
+!
+!  Get the current date and time.
+!
+  call date_and_time ( values = date_time )
+!
+!  Construct a slightly random value.
+!
+  seed = 0
+  do i = 1, 8
+    seed = ieor ( seed, date_time(i) )
+  end do
+!
+!  Make slightly random assignments to SEED_VECTOR.
+!
+  do i = 1, seed_size
+    seed_vector(i) = ieor ( seed, i )
+  end do
+!
+!  Set the random number seed value.
+!
+  call random_seed ( put = seed_vector(1:seed_size) )
+!
+!  Free up the seed space.
+!
+  deallocate ( seed_vector )
+!
+!  Because EVEN THIS DOESN'T SEEM TO PROPERLY MIX UP THE RANDOM
+!  NUMBERS, call the random number routine a bunch of times.
+!
+  do i = 1, 100
+    call random_number ( harvest = t )
+  end do
+!
+!  I STILL GET LOUSY RESULTS.  THE HELL WITH IT!
+!
+  return
+end
+subroutine result(nr,n,x,f,g,a,p,itncnt,iflg,ipr)
+!
+!*******************************************************************************
+!
+!! RESULT prints information about the optimization process.
+!
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! x(n)         --> iterate x[k]
+! f            --> function value at x[k]
+! g(n)         --> gradient at x[k]
+! a(n,n)       --> hessian at x[k]
+! p(n)         --> step taken
+! itncnt       --> iteration number k
+! iflg         --> flag controlling info to print
+! ipr          --> device to which to send output
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real f
+  real g(n)
+  integer i
+  integer iflg
+  integer ipr
+  integer itncnt
+  integer j
+  real p(n)
+  real x(n)
+!
+  write ( ipr, 903 ) itncnt
+
+  if ( iflg /= 0 ) then
+    write ( ipr, * ) ' result       step'
+    write ( ipr,905) p(1:n)
+  end if
+
+  write ( ipr, * ) ' result       x(k)'
+  write ( ipr, 905) x(1:n)
+  write ( ipr, * ) ' result     function at x(k)'
+  write ( ipr, 905) f
+  write ( ipr, * ) ' result       gradient at x(k)'
+  write ( ipr, 905) g(1:n)
+
+  if ( iflg /= 0 ) then
+
+    write ( ipr, * ) ' result       hessian at x(k)'
+    do i = 1, n
+      write ( ipr, 900) i
+      write ( ipr, 902) (a(i,j),j=1,i)
+    end do
+
+  end if
+
+  return
+
+  900 format(' result     row',i5)
+  902 format(' result       ',5(2x,e20.13))
+  903 format(/'0result    iterate k=',i5)
+  905 format(' result               ',5(2x,e20.13) )
+end
+subroutine rfftb ( n, r, wsave )
+!
+!*******************************************************************************
+!
+!! RFFTB computes a real periodic sequence from its Fourier coefficients.
+!
+!
+!  Discussion:
+!
+!    This process is sometimes called Fourier synthesis.
+!
+!    The transform is unnormalized.  A call to RFFTF followed by a call to
+!    RFFTB will multiply the input sequence by N.
+!
+!    If N is even, the transform is defined by:
+!
+!      R_out(I) = R_in(1) + (-1)**(I-1) * R_in(N) + sum ( 2 <= K <= N/2 )
+!
+!        + 2 * R_in(2*K-2) * cos ( ( K - 1 ) * ( I - 1 ) * 2 * PI / N )
+!
+!        - 2 * R_in(2*K-1) * sin ( ( K - 1 ) * ( I - 1 ) * 2 * PI / N )
+!
+!    If N is odd, the transform is defined by:
+!
+!      R_out(I) = R_in(1) + sum ( 2 <= K <= (N+1)/2 )
+!
+!        + 2 * R_in(2*K-2) * cos ( ( K - 1 ) * ( I - 1 ) * 2 * PI / N )
+!
+!        - 2 * R_in(2*K-1) * sin ( ( K - 1 ) * ( I - 1 ) * 2 * PI / N )
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array to be transformed.  The
+!    method is more efficient when N is the product of small primes.
+!
+!    Input/output, real R(N).
+!    On input, the sequence to be transformed.
+!    On output, the transformed sequence.
+!
+!    Input, real WSAVE(2*N+15), a work array.  The WSAVE array must be
+!    initialized by calling RFFTI.  A different WSAVE array must be used
+!    for each different value of N.
+!
+  integer n
+!
+  real r(n)
+  real wsave(2*n+15)
+!
+  if ( n <= 1 ) then
+    return
+  end if
+
+  call rfftb1 ( n, r, wsave(1), wsave(n+1), wsave(2*n+1) )
+
+  return
+end
+subroutine rfftb1 ( n, c, ch, wa, ifac )
+!
+!*******************************************************************************
+!
+!! RFFTB1 is a lower level routine used by RFFTB.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array to be transformed.
+!
+!    Input/output, real C(N).
+!    On input, the sequence to be transformed.
+!    On output, the transformed sequence.
+!
+!    Input, real CH(N).
+!
+!    Input, real WA(N).
+!
+!    Input, integer IFAC(15).
+!    IFAC(1) = N, the number that was factored.
+!    IFAC(2) = NF, the number of factors.
+!    IFAC(3:2+NF), the factors.
+!
+  integer n
+!
+  real c(n)
+  real ch(n)
+  integer idl1
+  integer ido
+  integer ifac(15)
+  integer ip
+  integer iw
+  integer ix2
+  integer ix3
+  integer ix4
+  integer k1
+  integer l1
+  integer l2
+  integer na
+  integer nf
+  real wa(n)
+!
+  nf = ifac(2)
+  na = 0
+  l1 = 1
+  iw = 1
+
+  do k1 = 1, nf
+
+    ip = ifac(k1+2)
+    l2 = ip * l1
+    ido = n / l2
+    idl1 = ido * l1
+
+    if ( ip == 4 ) then
+
+      ix2 = iw + ido
+      ix3 = ix2 + ido
+
+      if ( na == 0 ) then
+        call radb4 ( ido, l1, c, ch, wa(iw), wa(ix2), wa(ix3) )
+      else
+        call radb4 ( ido, l1, ch, c, wa(iw), wa(ix2), wa(ix3) )
+      end if
+
+      na = 1 - na
+
+    else if ( ip == 2 ) then
+
+      if ( na == 0 ) then
+        call radb2 ( ido, l1, c, ch, wa(iw) )
+      else
+        call radb2 ( ido, l1, ch, c, wa(iw) )
+      end if
+
+      na = 1 - na
+
+    else if ( ip == 3 ) then
+
+      ix2 = iw + ido
+
+      if ( na == 0 ) then
+        call radb3 ( ido, l1, c, ch, wa(iw), wa(ix2) )
+      else
+        call radb3 ( ido, l1, ch, c, wa(iw), wa(ix2) )
+      end if
+
+      na = 1 - na
+
+    else if ( ip == 5 ) then
+
+      ix2 = iw + ido
+      ix3 = ix2 + ido
+      ix4 = ix3 + ido
+
+      if ( na == 0 ) then
+        call radb5 ( ido, l1, c, ch, wa(iw), wa(ix2), wa(ix3), wa(ix4) )
+      else
+        call radb5 ( ido, l1, ch, c, wa(iw), wa(ix2), wa(ix3), wa(ix4) )
+      end if
+
+      na = 1 - na
+
+    else
+
+      if ( na == 0 ) then
+        call radbg ( ido, ip, l1, idl1, c, c, c, ch, ch, wa(iw) )
+      else
+        call radbg ( ido, ip, l1, idl1, ch, ch, ch, c, c, wa(iw) )
+      end if
+
+      if ( ido == 1 ) then
+        na = 1 - na
+      end if
+
+    end if
+
+    l1 = l2
+    iw = iw + ( ip - 1 ) * ido
+
+  end do
+
+  if ( na /= 0 ) then
+    c(1:n) = ch(1:n)
+  end if
+
+  return
+end
+subroutine rfftf ( n, r, wsave )
+!
+!*******************************************************************************
+!
+!! RFFTF computes the Fourier coefficients of a real periodic sequence.
+!
+!
+!  Discussion:
+!
+!    This process is sometimes called Fourier analysis.
+!
+!    The transform is unnormalized.  A call to RFFTF followed by a call
+!    to RFFTB will multiply the input sequence by N.
+!
+!    The transform is defined by:
+!
+!      R_out(1) = sum ( 1 <= I <= N ) R_in(I)
+!
+!    Letting L = (N+1)/2, then for K = 2,...,L
+!
+!      R_out(2*K-2) = sum ( 1 <= I <= N )
+!
+!        R_in(I) * cos ( ( K - 1 ) * ( I - 1 ) * 2 * PI / N )
+!
+!      R_out(2*K-1) = sum ( 1 <= I <= N )
+!
+!        -R_in(I) * sin ( ( K - 1 ) * ( I - 1 ) * 2 * PI / N )
+!
+!    And, if N is even, then:
+!
+!      R_out(N) = sum ( 1 <= I <= N ) (-1)**(I-1) * R_in(I)
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array to be transformed.  The
+!    method is more efficient when N is the product of small primes.
+!
+!    Input/output, real R(N).
+!    On input, the sequence to be transformed.
+!    On output, the transformed sequence.
+!
+!    Input, real WSAVE(2*N+15), a work array.  The WSAVE array must be
+!    initialized by calling RFFTI.  A different WSAVE array must be used
+!    for each different value of N.
+!
+  integer n
+!
+  real r(n)
+  real wsave(2*n+15)
+!
+  if ( n <= 1 ) then
+    return
+  end if
+
+  call rfftf1 ( n, r, wsave(1), wsave(n+1), wsave(2*n+1) )
+
+  return
+end
+subroutine rfftf1 ( n, c, ch, wa, ifac )
+!
+!*******************************************************************************
+!
+!! RFFTF1 is a lower level routine used by RFFTF and SINT.
+!
+!
+!  Modified:
+!
+!    12 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array to be transformed.
+!
+!    Input/output, real C(N).
+!    On input, the sequence to be transformed.
+!    On output, the transformed sequence.
+!
+!    Input, real CH(N).
+!
+!    Input, real WA(N).
+!
+!    Input, integer IFAC(15).
+!    IFAC(1) = N, the number that was factored.
+!    IFAC(2) = NF, the number of factors.
+!    IFAC(3:2+NF), the factors.
+!
+  integer n
+!
+  real c(n)
+  real ch(n)
+  integer idl1
+  integer ido
+  integer ifac(15)
+  integer ip
+  integer iw
+  integer ix2
+  integer ix3
+  integer ix4
+  integer k1
+  integer kh
+  integer l1
+  integer l2
+  integer na
+  integer nf
+  real wa(n)
+!
+  nf = ifac(2)
+  na = 1
+  l2 = n
+  iw = n
+
+  do k1 = 1, nf
+
+    kh = nf - k1
+    ip = ifac(kh+3)
+    l1 = l2 / ip
+    ido = n / l2
+    idl1 = ido * l1
+    iw = iw - ( ip - 1 ) * ido
+    na = 1 - na
+
+    if ( ip == 4 ) then
+
+      ix2 = iw + ido
+      ix3 = ix2 + ido
+
+      if ( na == 0 ) then
+        call radf4 ( ido, l1, c, ch, wa(iw), wa(ix2), wa(ix3) )
+      else
+        call radf4 ( ido, l1, ch, c, wa(iw), wa(ix2), wa(ix3) )
+      end if
+
+    else if ( ip == 2 ) then
+
+      if ( na == 0 ) then
+        call radf2 ( ido, l1, c, ch, wa(iw) )
+      else
+        call radf2 ( ido, l1, ch, c, wa(iw) )
+      end if
+
+    else if ( ip == 3 ) then
+
+      ix2 = iw + ido
+
+      if ( na == 0 ) then
+        call radf3 ( ido, l1, c, ch, wa(iw), wa(ix2) )
+      else
+        call radf3 ( ido, l1, ch, c, wa(iw), wa(ix2) )
+      end if
+
+    else if ( ip == 5 ) then
+
+      ix2 = iw + ido
+      ix3 = ix2 + ido
+      ix4 = ix3 + ido
+
+      if ( na == 0 ) then
+        call radf5 ( ido, l1, c, ch, wa(iw), wa(ix2), wa(ix3), wa(ix4) )
+      else
+        call radf5 ( ido, l1, ch, c, wa(iw), wa(ix2), wa(ix3), wa(ix4) )
+      end if
+
+    else
+
+      if ( ido == 1 ) then
+        na = 1 - na
+      end if
+
+      if ( na == 0 ) then
+        call radfg ( ido, ip, l1, idl1, c, c, c, ch, ch, wa(iw) )
+        na = 1
+      else
+        call radfg ( ido, ip, l1, idl1, ch, ch, ch, c, c, wa(iw) )
+        na = 0
+      end if
+
+    end if
+
+    l2 = l1
+
+  end do
+
+  if ( na /= 1 ) then
+    c(1:n) = ch(1:n)
+  end if
+
+  return
+end
+subroutine rffti ( n, wsave )
+!
+!*******************************************************************************
+!
+!! RFFTI initializes WSAVE, used in RFFTF and RFFTB.
+!
+!
+!  Discussion:
+!
+!    The prime factorization of N together with a tabulation of the
+!    trigonometric functions are computed and stored in WSAVE.
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.
+!
+!    Output, real WSAVE(2*N+15), contains data, dependent on the value
+!    of N, which is necessary for the RFFTF and RFFTB routines.
+!
+  integer n
+!
+  real wsave(2*n+15)
+!
+  if ( n <= 1 ) then
+    return
+  end if
+
+  call rffti1 ( n, wsave(n+1), wsave(2*n+1) )
+
+  return
+end
+subroutine rffti1 ( n, wa, ifac )
+!
+!*******************************************************************************
+!
+!! RFFTI1 is a lower level routine used by RFFTI.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.
+!
+!    Input, real WA(N).
+!
+!    Input, integer IFAC(15).
+!    IFAC(1) = N, the number that was factored.
+!    IFAC(2) = NF, the number of factors.
+!    IFAC(3:2+NF), the factors.
+!
+  integer n
+!
+  real arg
+  real argh
+  real argld
+  real fi
+  integer i
+  integer ib
+  integer ido
+  integer ifac(15)
+  integer ii
+  integer ip
+  integer is
+  integer j
+  integer k1
+  integer l1
+  integer l2
+  integer ld
+  integer nf
+  real pimach
+  real wa(n)
+!
+  call i_factor ( n, ifac )
+
+  nf = ifac(2)
+
+  argh = 2.0E+00 * pimach() / real ( n )
+  is = 0
+  l1 = 1
+
+  do k1 = 1, nf-1
+
+    ip = ifac(k1+2)
+    ld = 0
+    l2 = l1 * ip
+    ido = n / l2
+
+    do j = 1, ip-1
+
+      ld = ld + l1
+      i = is
+      argld = real ( ld ) * argh
+      fi = 0.0E+00
+
+      do ii = 3, ido, 2
+        i = i + 2
+        fi = fi + 1.0E+00
+        arg = fi * argld
+        wa(i-1) = cos ( arg )
+        wa(i) = sin ( arg )
+      end do
+
+      is = is + ido
+
+    end do
+
+    l1 = l2
+
+  end do
+
+  return
+end
+function rnor ( )
+!
+!*******************************************************************************
+!
+!! RNOR generates normal random numbers.
+!
+!
+!  Description:
+!
+!    RNOR generates normal random numbers with zero mean and
+!    unit standard deviation, often denoted n(0,1).
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    Marsaglia and Tsang,
+!    A fast, easily implemented method for sampling from decreasing or
+!      symmetric unimodal density functions,
+!    SIAM Journal of Scientific and Statistical Computing, 1983.
+!
+!   use
+!       first time....
+!                   z = rstart(iseed)
+!                     here iseed is any  n o n - z e r o  integer.
+!                     this causes initialization of the program.
+!                     rstart returns a real (single precision) echo of iseed.
+!
+!       subsequent times...
+!                   z = rnor()
+!                     causes the next real (single precision) random number
+!                           to be returned as z.
+!
+!                 typical usage
+!
+!                    real rstart,rnor,z
+!                    integer iseed,i
+!                    iseed = 305
+!                    z = rstart(iseed)
+!                    do i = 1,10
+!                       z = rnor()
+!                       write(*,*) z
+!                    end do
+!                  end
+!
+!
+  real, parameter :: aa = 12.37586
+  real, parameter :: b = 0.4878992
+  real, parameter :: c = 12.67706
+  real, save :: c1 = 0.9689279
+  real, save :: c2 = 1.301198
+  integer ia
+  integer ib
+  integer ic
+  integer id
+  integer, save :: ii = 17
+  integer iii
+  integer iseed
+  integer j
+  integer, save :: jj = 5
+  integer jjj
+  real, save :: pc = 0.01958303
+  real rnor
+  real rstart
+  real s
+  real t
+  real, save, dimension ( 17 ) :: u
+  real un
+  real v(65)
+  real vni
+  real x
+  real, save :: xn = 2.776994
+  real y
+!
+  data v/ .3409450, .4573146, .5397793, .6062427, .6631691 &
+     , .7136975, .7596125, .8020356, .8417227, .8792102, .9148948 &
+     , .9490791, .9820005, 1.0138492, 1.0447810, 1.0749254, 1.1043917 &
+     ,1.1332738, 1.1616530, 1.1896010, 1.2171815, 1.2444516, 1.2714635 &
+     ,1.2982650, 1.3249008, 1.3514125, 1.3778399, 1.4042211, 1.4305929 &
+     ,1.4569915, 1.4834526, 1.5100121, 1.5367061, 1.5635712, 1.5906454 &
+     ,1.6179680, 1.6455802, 1.6735255, 1.7018503, 1.7306045, 1.7598422 &
+     ,1.7896223, 1.8200099, 1.8510770, 1.8829044, 1.9155830, 1.9492166 &
+     ,1.9839239, 2.0198430, 2.0571356, 2.0959930, 2.1366450, 2.1793713 &
+     ,2.2245175, 2.2725185, 2.3239338, 2.3795007, 2.4402218, 2.5075117 &
+     ,2.5834658, 2.6713916, 2.7769943, 2.7769943, 2.7769943, 2.7769943/
+!
+!  Load data array in case user forgets to initialize.
+!  This array is the result of calling uni 100000 times with seed 305.
+!
+  data u/ &
+     0.8668672834288,  0.3697986366357,  0.8008968294805, &
+     0.4173889774680,  0.8254561579836,  0.9640965269077, &
+     0.4508667414265,  0.6451309529668,  0.1645456024730, &
+     0.2787901807898,  0.06761531340295, 0.9663226330820, &
+     0.01963343943798, 0.02947398211399, 0.1636231515294, &
+     0.3976343250467,  0.2631008574685/
+!
+!  fast part...
+!
+!  basic generator is fibonacci
+!
+  un = u(ii)-u(jj)
+  if ( un<0.0) un = un+1.
+  u(ii) = un
+!
+!  u(ii) and un are uniform on [0,1)
+!  vni is uniform on [-1,1)
+!
+  vni = un + un -1.
+  ii = ii-1
+  if ( ii==0)ii = 17
+  jj = jj-1
+  if ( jj==0)jj = 17
+!        int(un(ii)*128) in range [0,127],  j is in range [1,64]
+  j = mod(int(u(ii)*128),64)+1
+!
+!        pick sign as vni is positive or negative
+!
+  rnor = vni*v(j+1)
+  if ( abs(rnor)<=v(j))return
+!
+! slow part; aa is a*f(0)
+!
+  x = (abs(rnor)-v(j))/(v(j+1)-v(j))
+!
+!          y is uniform on [0,1)
+!
+  y = u(ii)-u(jj)
+  if ( y<0.0) y = y+1.
+  u(ii) = y
+  ii = ii-1
+  if ( ii==0)ii = 17
+  jj = jj-1
+  if ( jj==0)jj = 17
+
+  s = x+y
+  if ( s>c2)go to 11
+  if ( s<=c1)return
+  if ( y>c-aa*exp(-.5*(b-b*x)**2))go to 11
+  if ( exp(-.5*v(j+1)**2)+y*pc/v(j+1)<=exp(-.5*rnor**2))return
+!
+! tail part; .3601016 is 1./xn
+!       y is uniform on [0,1)
+!
+   22 y = u(ii)-u(jj)
+  if ( y<=0.0) y = y+1.
+  u(ii) = y
+  ii = ii-1
+  if ( ii==0)ii = 17
+  jj = jj-1
+  if ( jj==0)jj = 17
+
+  x = 0.3601016*log(y)
+!
+!       y is uniform on [0,1)
+!
+  y = u(ii)-u(jj)
+  if ( y<=0.0) y = y+1.
+  u(ii) = y
+  ii = ii-1
+  if ( ii==0)ii = 17
+  jj = jj-1
+  if ( jj==0)jj = 17
+  if (  -2.*log(y)<=x**2 )go to 22
+  rnor = sign(xn-x,rnor)
+  return
+   11 rnor = sign(b-b*x,rnor)
+  return
+!
+!  fill
+!
+  entry rstart(iseed)
+  if ( iseed/=0) then
+!
+!  generate random bit pattern in array based on given seed
+!
+    ii = 17
+    jj = 5
+    ia = mod(abs(iseed),32707)
+    ib = 1111
+    ic = 1947
+    do iii = 1,17
+      s = 0.0E+00
+      t = .50
+!
+!             do for each of the bits of mantissa of word
+!             loop  over 64 bits, enough for all known machines
+!                   in single precision
+!
+      do jjj = 1,64
+
+        id = ic-ia
+        if ( id < 0 ) then
+          id = id+32707
+          s = s+t
+        end if
+
+        ia = ib
+        ib = ic
+        ic = id
+        t = .5*t
+
+      end do
+
+      u(iii) = s
+
+    end do
+
+  end if
+!
+!  return floating echo of iseed.
+!
+  rstart = iseed
+  return
+end
+subroutine rsftb ( n, r, azero, a, b )
+!
+!*******************************************************************************
+!
+!! RSFTB computes a "slow" backward Fourier transform of real data.
+!
+!
+!  Modified:
+!
+!    13 March 2001
+!
+!  Author:
+!
+!    John Burkardt
+!
+!  Parameters:
+!
+!    Input, integer N, the number of data values.
+!
+!    Output, real R(N), the reconstructed data sequence.
+!
+!    Input, real AZERO, the constant Fourier coefficient.
+!
+!    Input, real A(N/2), B(N/2), the Fourier coefficients.
+!
+  integer n
+!
+  real a(n/2)
+  real azero
+  real b(n/2)
+  integer i
+  integer k
+  real, parameter :: pi = 3.14159265358979323846264338327950288419716939937510E+00
+  real r(n)
+  real theta
+!
+  r(1:n) = azero
+  do i = 1, n
+    do k = 1, n/2
+      theta = real ( k * ( i - 1 ) * 2 ) * pi / real ( n )
+      r(i) = r(i) + a(k) * cos ( theta ) + b(k) * sin ( theta )
+    end do
+  end do
+
+  return
+end
+subroutine rsftf ( n, r, azero, a, b )
+!
+!*******************************************************************************
+!
+!! RSFTF computes a "slow" forward Fourier transform of real data.
+!
+!
+!  Modified:
+!
+!    13 March 2001
+!
+!  Parameters:
+!
+!    Input, integer N, the number of data values.
+!
+!    Input, real R(N), the data to be transformed.
+!
+!    Output, real AZERO, = sum ( 1 <= I <= N ) R(I) / N.
+!
+!    Output, real A(N/2), B(N/2), the Fourier coefficients.
+!
+  integer n
+!
+  real a(1:n/2)
+  real azero
+  real b(1:n/2)
+  integer i
+  integer j
+  real, parameter :: pi = 3.14159265358979323846264338327950288419716939937510E+00
+  real r(n)
+  real theta
+!
+  azero = sum ( r(1:n) ) / real ( n )
+
+  do i = 1, n / 2
+
+    a(i) = 0.0E+00
+    b(i) = 0.0E+00
+
+    do j = 1, n
+      theta = real ( 2 * i * ( j - 1 ) ) * pi / real ( n )
+      a(i) = a(i) + r(j) * cos ( theta )
+      b(i) = b(i) + r(j) * sin ( theta )
+    end do
+
+    a(i) = a(i) / real ( n )
+    b(i) = b(i) / real ( n )
+
+    if ( i /= ( n / 2 ) ) then
+      a(i) = 2.0E+00 * a(i)
+      b(i) = 2.0E+00 * b(i)
+    end if
+
+  end do
+
+  return
+end
+function runge ( x )
+!
+!*******************************************************************************
+!
+!! RUNGE evaluates Runge's function.
+!
+!
+!  Modified:
+!
+!    11 November 1999
+!
+!  Formula:
+!
+!    RUNGE(X) = 1 / ( 1 + 25 * X**2 )
+!
+!  Discussion:
+!
+!    Runge's function is a common test case for interpolation
+!    and approximation, over the interval [-1,1].
+!
+!  Parameters:
+!
+!    Input, real X, the argument of Runge's function.
+!
+!    Output, real RUNGE, the value of Runge's function.
+!
+  real runge
+  real x
+!
+  runge = 1.0E+00 / ( 1.0E+00 + 25.0E+00 * x**2 )
+
+  return
+end
+subroutine rvec_random ( alo, ahi, n, a )
+!
+!*******************************************************************************
+!
+!! RVEC_RANDOM returns a random real vector in a given range.
+!
+!
+!  Modified:
+!
+!    04 February 2001
+!
+!  Author:
+!
+!    John Burkardt
+!
+!  Parameters:
+!
+!    Input, real ALO, AHI, the range allowed for the entries.
+!
+!    Input, integer N, the number of entries in the vector.
+!
+!    Output, real A(N), the vector of randomly chosen values.
+!
+  integer n
+!
+  real a(n)
+  real ahi
+  real alo
+  integer i
+!
+  do i = 1, n
+    call r_random ( alo, ahi, a(i) )
+  end do
+
+  return
+end
+subroutine rvec_reverse ( n, a )
+!
+!*******************************************************************************
+!
+!! RVEC_REVERSE reverses the elements of a real vector.
+!
+!
+!  Example:
+!
+!    Input:
+!
+!      N = 5, A = ( 11.0, 12.0, 13.0, 14.0, 15.0 ).
+!
+!    Output:
+!
+!      A = ( 15.0, 14.0, 13.0, 12.0, 11.0 ).
+!
+!  Modified:
+!
+!    06 October 1998
+!
+!  Author:
+!
+!    John Burkardt
+!
+!  Parameters:
+!
+!    Input, integer N, the number of entries in the array.
+!
+!    Input/output, real A(N), the array to be reversed.
+!
+  integer n
+!
+  real a(n)
+  integer i
+!
+  do i = 1, n/2
+    call r_swap ( a(i), a(n+1-i) )
+  end do
+
+  return
+end
+function samax ( n, x, incx )
+!
+!*******************************************************************************
+!
+!! SAMAX returns the maximum absolute value of the entries in a vector.
+!
+!
+!  Modified:
+!
+!    08 April 1999
+!
+!  Parameters:
+!
+!    Input, integer N, the number of entries in the vector.
+!
+!    Input, real X(*), the vector to be examined.
+!
+!    Input, integer INCX, the increment between successive entries of X.
+!
+!    Output, real SAMAX, the maximum absolute value of an element of X.
+!
+  integer i
+  integer incx
+  integer ix
+  integer n
+  real samax
+  real x(*)
+!
+  if ( n <= 0 ) then
+
+    samax = 0.0E+00
+
+  else if ( n == 1 ) then
+
+    samax = abs ( x(1) )
+
+  else if ( incx == 1 ) then
+
+    samax = abs ( x(1) )
+
+    do i = 2, n
+      if ( abs ( x(i) ) > samax ) then
+        samax = abs ( x(i) )
+      end if
+    end do
+
+  else
+
+    if ( incx >= 0 ) then
+      ix = 1
+    else
+      ix = ( - n + 1 ) * incx + 1
+    end if
+
+    samax = abs ( x(ix) )
+    ix = ix + incx
+
+    do i = 2, n
+      if ( abs ( x(ix) ) > samax ) then
+        samax = abs ( x(ix) )
+      end if
+      ix = ix + incx
+    end do
+
+  end if
+
+  return
+end
+function sasum ( n, x, incx )
+!
+!*******************************************************************************
+!
+!! SASUM sums the absolute values of the entries of a vector.
+!
+!
+!  Modified:
+!
+!    08 April 1999
+!
+!  Reference:
+!
+!    Lawson, Hanson, Kincaid, Krogh,
+!    Basic Linear Algebra Subprograms for Fortran Usage,
+!    Algorithm 539,
+!    ACM Transactions on Mathematical Software,
+!    Volume 5, Number 3, September 1979, pages 308-323.
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+!    Input, integer N, the number of entries in the vector.
+!
+!    Input, real X(*), the vector to be examined.
+!
+!    Input, integer INCX, the increment between successive entries of X.
+!
+!    Output, real SASUM, the sum of the absolute values of the vector.
+!
+  integer i
+  integer incx
+  integer ix
+  integer m
+  integer n
+  real sasum
+  real stemp
+  real x(*)
+!
+  stemp = 0.0E+00
+
+  if ( n <= 0 ) then
+
+  else if ( incx == 1 ) then
+
+    m = mod ( n, 6 )
+
+    do i = 1, m
+      stemp = stemp + abs ( x(i) )
+    end do
+
+    do i = m+1, n, 6
+      stemp = stemp + abs ( x(i)   ) + abs ( x(i+1) ) + abs ( x(i+2) ) &
+                    + abs ( x(i+3) ) + abs ( x(i+4) ) + abs ( x(i+5) )
+    end do
+
+  else
+
+    if ( incx >= 0 ) then
+      ix = 1
+    else
+      ix = ( - n + 1 ) * incx + 1
+    end if
+
+    do i = 1, n
+      stemp = stemp + abs ( x(ix) )
+      ix = ix + incx
+    end do
+
+  end if
+
+  sasum = stemp
+
+  return
+end
+subroutine saxpy ( n, sa, x, incx, y, incy )
+!
+!*******************************************************************************
+!
+!! SAXPY adds a constant times one vector to another.
+!
+!
+!  Modified:
+!
+!    08 April 1999
+!
+!  Reference:
+!
+!    Lawson, Hanson, Kincaid, Krogh,
+!    Basic Linear Algebra Subprograms for Fortran Usage,
+!    Algorithm 539,
+!    ACM Transactions on Mathematical Software,
+!    Volume 5, Number 3, September 1979, pages 308-323.
+!
+!  Parameters:
+!
+!    Input, integer N, the number of entries in the vector.
+!
+!    Input, real SA, the multiplier.
+!
+!    Input, real X(*), the vector to be scaled and added to Y.
+!
+!    Input, integer INCX, the increment between successive entries of X.
+!
+!    Input/output, real Y(*), the vector to which a multiple of X is to
+!    be added.
+!
+!    Input, integer INCY, the increment between successive entries of Y.
+!
+  integer i
+  integer incx
+  integer incy
+  integer ix
+  integer iy
+  integer n
+  real sa
+  real x(*)
+  real y(*)
+!
+  if ( n <= 0 ) then
+
+  else if ( sa == 0.0E+00 ) then
+
+  else if ( incx == 1 .and. incy == 1 ) then
+
+    y(1:n) = y(1:n) + sa * x(1:n)
+
+  else
+
+    if ( incx >= 0 ) then
+      ix = 1
+    else
+      ix = ( - n + 1 ) * incx + 1
+    end if
+
+    if ( incy >= 0 ) then
+      iy = 1
+    else
+      iy = ( - n + 1 ) * incy + 1
+    end if
+
+    do i = 1, n
+      y(iy) = y(iy) + sa * x(ix)
+      ix = ix + incx
+      iy = iy + incy
+    end do
+
+  end if
+
+  return
+end
+subroutine sdcor (dfdy,el,fa,h,impl,ipvt,matdim,miter,ml,mu,n, &
+  nde,nq,t,users,y,yh,ywt,evalfa,save1,save2,a,d,jstate)
+!
+!*******************************************************************************
+!
+!! SDCOR computes corrections to the y array of SDRIV3.
+!
+!
+!  in the case of functional iteration, update y directly from the
+!  result of the last call to f.
+!  in the case of the chord method, compute the corrector error and
+!  solve the linear system with that as right hand side and dfdy as
+!  coefficient matrix, using the lu decomposition if miter is 1, 2, 4,
+!  or 5.
+!
+  integer matdim
+  integer n
+!
+  real a(matdim,*)
+  real d
+  real dfdy(matdim,*)
+  real el(13,12)
+  logical evalfa
+  real h
+  integer i
+  integer i1
+  integer i2
+  integer i3
+  integer iflag
+  integer impl
+  integer ipvt(*)
+  integer j
+  integer jstate
+  integer miter
+  integer ml
+  integer mu
+  integer mw
+  integer nde
+  integer nq
+  real save1(*)
+  real save2(*)
+  real snrm2
+  real t
+  real y(*)
+  real yh(n,*)
+  real ywt(*)
+!
+  external fa
+  external users
+!
+  if (miter == 0) then
+
+    save1(1:n) = (h*save2(1:n) - yh(1:n,2) - save1(1:n))/ywt(1:n)
+
+    d = snrm2(n, save1, 1)/sqrt(real(n))
+
+    save1(1:n) = h * save2(1:n) - yh(1:n,2)
+
+  else if (miter == 1 .or. miter == 2) then
+
+    if (impl == 0) then
+
+      save2(1:n) = h * save2(1:n) - yh(1:n,2) - save1(1:n)
+
+    else if (impl == 1) then
+
+      if (evalfa) then
+        call fa (n, t, y, a, matdim, ml, mu, nde)
+        if (n == 0) then
+          jstate = 9
+          return
+        end if
+      else
+        evalfa = .true.
+      end if
+
+      save2(1:n) = h * save2(1:n)
+
+      do j = 1,n
+        save2(1:n) = save2(1:n) - a(1:n,j)*(yh(j,2) + save1(j))
+      end do
+
+    else if (impl == 2) then
+
+      if (evalfa) then
+        call fa (n, t, y, a, matdim, ml, mu, nde)
+        if (n == 0) then
+          jstate = 9
+          return
+        end if
+      else
+        evalfa = .true.
+      end if
+
+!!!      save2(1:n) = h*save2(1:n) - a(1:n,1)*(yh(i,2) + save1(1:n))
+      save2(1:n) = h*save2(1:n) - a(1:n,1)*(yh(1,2) + save1(1:n))
+
+    end if
+
+    call sgesl (dfdy, matdim, n, ipvt, save2, 0)
+
+    save1(1:n) = save1(1:n) + save2(1:n)
+    save2(1:n) = save2(1:n)/ywt(1:n)
+
+    d = snrm2(n, save2, 1) / sqrt(real(n))
+
+  else if (miter == 4 .or. miter == 5) then
+
+    if (impl == 0) then
+
+      save2(1:n) = h * save2(1:n) - yh(1:n,2) - save1(1:n)
+
+    else if (impl == 1) then
+      if (evalfa) then
+        call fa (n, t, y, a(ml+1,1), matdim, ml, mu, nde)
+        if (n == 0) then
+          jstate = 9
+          return
+        end if
+      else
+        evalfa = .true.
+      end if
+
+      save2(1:n) = h * save2(1:n)
+
+      mw = ml + 1 + mu
+
+      do j = 1,n
+        i1 = max(ml+1, mw+1-j)
+        i2 = min(mw+n-j, mw+ml)
+        do i = i1,i2
+          i3 = i + j - mw
+          save2(i3) = save2(i3) - a(i,j)*(yh(j,2) + save1(j))
+        end do
+      end do
+
+    else if (impl == 2) then
+
+      if (evalfa) then
+        call fa (n, t, y, a, matdim, ml, mu, nde)
+        if (n == 0) then
+          jstate = 9
+          return
+        end if
+      else
+        evalfa = .true.
+      end if
+
+      save2(1:n) = h * save2(1:n) - a(1:n,1)*(yh(1:n,2) + save1(1:n))
+
+    end if
+
+    call sgbsl (dfdy, matdim, n, ml, mu, ipvt, save2, 0)
+
+    save1(1:n) = save1(1:n) + save2(1:n)
+    save2(1:n) = save2(1:n)/ywt(1:n)
+
+    d = snrm2(n, save2, 1)/sqrt(real(n))
+
+  else if (miter == 3) then
+
+    iflag = 2
+
+    call users (y, yh(1,2), ywt, save1, save2, t, h, el(1,nq), impl, &
+      n, nde, iflag)
+
+    if (n == 0) then
+      jstate = 10
+      return
+    end if
+
+    save1(1:n) = save1(1:n) + save2(1:n)
+    save2(1:n) = save2(1:n) / ywt(1:n)
+
+    d = snrm2(n, save2, 1) / sqrt(real(n))
+
+  end if
+end
+subroutine sdcst ( maxord, mint, iswflg, el, tq )
+!
+!*******************************************************************************
+!
+!! SDCST sets coefficients used by the core integrator SDSTP.
+!
+!
+!  the array el determines the basic method.
+!  the array tq is involved in adjusting the step size in relation
+!  to truncation error.  el and tq depend upon mint, and are calculated
+!  for orders 1 to maxord(<= 12).  for each order nq, the coefficients
+!  el are calculated from the generating polynomial:
+!    l(t) = el(1,nq) + el(2,nq)*t + ... + el(nq+1,nq)*t**nq.
+!  for the implicit adams methods, l(t) is given by
+!    dl/dt = (1+t)*(2+t)* ... *(nq-1+t)/k,   l(-1) = 0,
+!    where      k = factorial(nq-1).
+!  for the gear methods,
+!    l(t) = (1+t)*(2+t)* ... *(nq+t)/k,
+!    where      k = factorial(nq)*(1 + 1/2 + ... + 1/nq).
+!  for each order nq, there are three components of tq.
+!
+  real el(13,12)
+  real factrl(12)
+  real gamma(14)
+  integer i
+  integer iswflg
+  integer j
+  integer maxord
+  integer mint
+  integer mxrd
+  real sum
+  real tq(3,12)
+!
+  factrl(1) = 1.0E+00
+  do i = 2, maxord
+    factrl(i) = real(i)*factrl(i-1)
+  end do
+!
+!  compute adams coefficients
+!
+  if (mint == 1) then
+
+    gamma(1) = 1.0E+00
+    do i = 1,maxord+1
+      sum = 0.0E+00
+      do j = 1,i
+        sum = sum - gamma(j)/real(i-j+2)
+      end do
+      gamma(i+1) = sum
+    end do
+
+    el(1,1) = 1.0E+00
+    el(2,1) = 1.0E+00
+    el(2,2) = 1.0E+00
+    el(3,2) = 1.0E+00
+
+    do j = 3,maxord
+      el(2,j) = factrl(j-1)
+      do i = 3,j
+        el(i,j) = real(j-1)*el(i,j-1) + el(i-1,j-1)
+      end do
+      el(j+1,j) = 1.0E+00
+    end do
+
+    do j = 2, maxord
+      el(1,j) = el(1,j-1) + gamma(j)
+      el(2,j) = 1.0E+00
+      do i = 3,j+1
+        el(i,j) = el(i,j)/(real(i-1)*factrl(j-1))
+      end do
+    end do
+
+    do j = 1,maxord
+      tq(1,j) = -1.0E+00 / (factrl(j)*gamma(j))
+      tq(2,j) = -1.0E+00 / gamma(j+1)
+      tq(3,j) = -1.0E+00 / gamma(j+2)
+    end do
+!
+!  compute gear coefficients
+!
+  else if (mint == 2) then
+
+    el(1,1) = 1.0E+00
+    el(2,1) = 1.0E+00
+    do j = 2,maxord
+      el(1,j) = factrl(j)
+      do i = 2,j
+        el(i,j) = real(j)*el(i,j-1) + el(i-1,j-1)
+      end do
+      el(j+1,j) = 1.0E+00
+    end do
+
+    sum = 1.0E+00
+    do j = 2,maxord
+      sum = sum + 1.0/real(j)
+      do i = 1, j+1
+        el(i,j) = el(i,j)/(factrl(j)*sum)
+      end do
+    end do
+
+    do j = 1,maxord
+      if (j > 1) tq(1,j) = 1.0/factrl(j-1)
+      tq(2,j) = real(j+1)/el(1,j)
+      tq(3,j) = real(j+2)/el(1,j)
+    end do
+
+  end if
+!
+!  compute constants used in the stiffness test.
+!  these are the ratio of tq(2,nq) for the gear
+!  methods to those for the adams methods.
+!
+  if (iswflg == 3) then
+    mxrd = min(maxord, 5)
+    if (mint == 2) then
+      gamma(1) = 1.0E+00
+      do i = 1,mxrd
+        sum = 0.0E+00
+        do j = 1,i
+          sum = sum - gamma(j)/real(i-j+2)
+        end do
+        gamma(i+1) = sum
+      end do
+    end if
+
+    sum = 1.0E+00
+    do i = 2,mxrd
+      sum = sum + 1.0/real(i)
+      el(1+i,1) = -real(i+1)*sum*gamma(i+1)
+    end do
+
+  end if
+end
+subroutine sdntl(eps,f,fa,hmax,hold,impl,jtask,matdim,maxord, &
+  mint,miter,ml,mu,n,nde,save1,t,uround,users,y,ywt,h,mntold, &
+  mtrold,nfe,rc,yh,a,convrg,el,fac,ier,ipvt,nq,nwait,rh,rmax, &
+  save2,tq,trend,iswflg,jstate)
+!
+!*******************************************************************************
+!
+!! SDNTL sets parameters for SDSTP.
+!
+!
+!  SDNTL is called on the first call to sdstp, on an internal restart, or
+!  when the user has altered mint, miter, and/or h.
+!
+!  on the first call, the order is set to 1 and the initial derivatives
+!  are calculated.  rmax is the maximum ratio by which h can be
+!  increased in one step.  it is initially rminit to compensate
+!  for the small initial h, but then is normally equal to rmnorm.
+!  if a failure occurs (in corrector convergence or error test), rmax
+!  is set at rmfail for the next increase.
+!  if the caller has changed mint, or if jtask = 0, sdcst is called
+!  to set the coefficients of the method.  if the caller has changed h,
+!  yh must be rescaled.  if h or mint has been changed, nwait is
+!  reset to nq + 2 to prevent further increases in h for that many
+!  steps.  also, rc is reset.  rc is the ratio of new to old values of
+!  the coefficient l(0)*h.  if the caller has changed miter, rc is
+!  set to 0 to force the partials to be updated, if partials are used.
+!
+  integer matdim
+  integer n
+!
+  real a(matdim,*)
+  logical convrg
+  real el(13,12)
+  real eps
+  real fac(*)
+  real h
+  real hmax
+  real hold
+  integer i
+  logical ier
+  integer iflag
+  integer impl
+  integer info
+  integer ipvt(*)
+  integer iswflg
+  integer jstate
+  integer jtask
+  integer maxord
+  integer mint
+  integer miter
+  integer ml
+  integer mntold
+  integer mtrold
+  integer mu
+  integer nde
+  integer nfe
+  integer nq
+  integer nwait
+  real oldl0
+  real rc
+  real rh
+  real rmax
+  real, parameter :: rminit = 10000.0E+00
+  real save1(*)
+  real save2(*)
+  real smax
+  real smin
+  real snrm2
+  real sum
+  real sum0
+  real t
+  real tq(3,12)
+  real trend
+  real uround
+  real y(*)
+  real yh(n,*)
+  real ywt(*)
+!
+  external f
+  external fa
+  external users
+!
+  ier = .false.
+  if (jtask >= 0) then
+    if (jtask == 0) then
+      call sdcst (maxord, mint, iswflg,  el, tq)
+      rmax = rminit
+    end if
+    rc = 0.0E+00
+    convrg = .false.
+    trend = 1.0E+00
+    nq = 1
+    nwait = 3
+
+    call f ( n, t, y, save2 )
+
+    if (n == 0) then
+      jstate = 6
+      return
+    end if
+
+    nfe = nfe + 1
+
+    if (impl /= 0) then
+      if (miter == 3) then
+        iflag = 0
+        call users (y, yh, ywt, save1, save2, t, h, el, impl, n, nde, iflag)
+        if (n == 0) then
+          jstate = 10
+          return
+        end if
+      else if (impl == 1) then
+        if (miter == 1 .or. miter == 2) then
+          call fa (n, t, y, a, matdim, ml, mu, nde)
+          if (n == 0) then
+            jstate = 9
+            return
+          end if
+          call sgefa (a, matdim, n, ipvt, info)
+          if (info /= 0) then
+            ier = .true.
+            return
+          end if
+          call sgesl (a, matdim, n, ipvt, save2, 0)
+        else if (miter == 4 .or. miter == 5) then
+          call fa (n, t, y, a(ml+1,1), matdim, ml, mu, nde)
+          if (n == 0) then
+            jstate = 9
+            return
+          end if
+          call sgbfa (a, matdim, n, ml, mu, ipvt, info)
+          if (info /= 0) then
+            ier = .true.
+            return
+          end if
+          call sgbsl (a, matdim, n, ml, mu, ipvt, save2, 0)
+        end if
+
+      else if (impl == 2) then
+
+        call fa (n, t, y, a, matdim, ml, mu, nde)
+        if (n == 0) then
+          jstate = 9
+          return
+        end if
+
+        do i = 1, nde
+
+          if (a(i,1) == 0.0) then
+            ier = .true.
+            return
+          else
+            save2(i) = save2(i)/a(i,1)
+          end if
+
+        end do
+
+        do i = nde+1,n
+          a(i,1) = 0.0E+00
+        end do
+
+      end if
+
+    end if
+
+    do i = 1,nde
+      save1(i) = save2(i)/ywt(i)
+    end do
+
+    sum = snrm2(nde, save1, 1)
+    sum0 = 1.0E+00 / max(1.0, abs(t))
+    smax = max(sum0, sum)
+    smin = min(sum0, sum)
+    sum = smax*sqrt(1.0E+00 + (smin/smax)**2)/sqrt(real(nde))
+    h = sign(min(2.0*eps/sum, abs(h)), h)
+    yh(1:n,2) = h * save2(1:n)
+
+    if (miter == 2 .or. miter == 5 .or. iswflg == 3) then
+      do i = 1,n
+        fac(i) = sqrt(uround)
+      end do
+    end if
+
+  else
+
+    if (miter /= mtrold) then
+      mtrold = miter
+      rc = 0.0E+00
+      convrg = .false.
+    end if
+
+    if (mint /= mntold) then
+      mntold = mint
+      oldl0 = el(1,nq)
+      call sdcst (maxord, mint, iswflg,  el, tq)
+      rc = rc*el(1,nq)/oldl0
+      nwait = nq + 2
+    end if
+
+    if (h /= hold) then
+      nwait = nq + 2
+      rh = h/hold
+      call sdscl (hmax, n, nq, rmax,  hold, rc, rh, yh)
+    end if
+
+  end if
+
+  return
+end
+subroutine sdntp(h,k,n,nq,t,tout,yh,y)
+!
+!*******************************************************************************
+!
+!! SDNTP interpolates the k-th derivative of y at tout,
+!   using the data in the yh array.  if k has a value greater than nq,
+!   the nq-th derivative is calculated.
+!
+  integer n
+!
+  real factor
+  real h
+  integer i
+  integer j
+  integer jj
+  integer k
+  integer kk
+  integer kused
+  integer nq
+  real r
+  real t
+  real tout
+  real y(*)
+  real yh(n,*)
+!
+    r = ( tout - t ) / h
+
+  if (k == 0) then
+
+    y(1:n) = yh(1:n,nq+1)
+
+!!!    r = ( tout - t ) / h
+
+    do jj = 1, nq
+      j = nq + 1 - jj
+      y(1:n) = yh(1:n,j) + r*y(1:n)
+    end do
+
+  else
+
+    kused = min(k, nq)
+    factor = 1.0E+00
+    do kk = 1,kused
+      factor = factor*real(nq+1-kk)
+    end do
+
+    y(1:n) = factor * yh(1:n,nq+1)
+
+    do jj = kused+1,nq
+
+      j = k + 1 + nq - jj
+      factor = 1.0E+00
+
+      do kk = 1,kused
+        factor = factor*real(j-kk)
+      end do
+
+      y(1:n) = factor * yh(1:n,j) + r * y(1:n)
+
+    end do
+
+    y(1:n) = y(1:n) * h**(-kused)
+
+  end if
+end
+function sdot ( n, x, incx, y, incy )
+!
+!*******************************************************************************
+!
+!! SDOT forms the dot product of two vectors.
+!
+!
+!  Modified:
+!
+!    02 June 2000
+!
+!  Reference:
+!
+!    Lawson, Hanson, Kincaid, Krogh,
+!    Basic Linear Algebra Subprograms for Fortran Usage,
+!    Algorithm 539,
+!    ACM Transactions on Mathematical Software,
+!    Volume 5, Number 3, September 1979, pages 308-323.
+!
+!  Parameters:
+!
+!    Input, integer N, the number of entries in the vectors.
+!
+!    Input, real X(*), one of the vectors to be multiplied.
+!
+!    Input, integer INCX, the increment between successive entries of X.
+!
+!    Input, real Y(*), one of the vectors to be multiplied.
+!
+!    Input, integer INCY, the increment between successive elements of Y.
+!
+!    Output, real SDOT, the dot product of X and Y.
+!
+  integer i
+  integer incx
+  integer incy
+  integer ix
+  integer iy
+  integer n
+  real sdot
+  real stemp
+  real x(*)
+  real y(*)
+!
+  if ( n <= 0 ) then
+
+    sdot = 0.0E+00
+
+  else if ( incx == 1 .and. incy == 1 ) then
+
+    sdot = dot_product ( x(1:n), y(1:n) )
+
+  else
+
+    if ( incx >= 0 ) then
+      ix = 1
+    else
+      ix = ( - n + 1 ) * incx + 1
+    end if
+
+    if ( incy >= 0 ) then
+      iy = 1
+    else
+      iy = ( - n + 1 ) * incy + 1
+    end if
+
+    stemp = 0.0E+00
+    do i = 1, n
+      stemp = stemp + x(ix) * y(iy)
+      ix = ix + incx
+      iy = iy + incy
+    end do
+
+    sdot = stemp
+
+  end if
+
+  return
+end
+subroutine sdpsc(ksgn,n,nq,yh)
+!
+!*******************************************************************************
+!
+!! SDPSC computes the predicted yh values by effectively
+!     multiplying the yh array by the pascal triangle matrix when ksgn
+!     is +1, and performs the inverse function when ksgn is -1.
+!
+  integer n
+!
+  integer i
+  integer j
+  integer j1
+  integer j2
+  integer ksgn
+  integer nq
+  real yh(n,*)
+!
+  if ( ksgn > 0 ) then
+
+    do j1 = 1, nq
+      do j2 = j1, nq
+        j = nq - j2 + j1
+        do i = 1, n
+          yh(i,j) = yh(i,j) + yh(i,j+1)
+        end do
+      end do
+    end do
+
+  else
+
+    do j1 = 1, nq
+      do j2 = j1, nq
+        j = nq - j2 + j1
+        do i = 1, n
+          yh(i,j) = yh(i,j) - yh(i,j+1)
+        end do
+      end do
+    end do
+  end if
+
+  return
+end
+subroutine sdpst (el,f,fa,h,impl,jacobn,matdim,miter,ml,mu,n,nde, &
+  nq,save2,t,users,y,yh,ywt,uround,nfe,nje,a,dfdy,fac,ier,ipvt, &
+  save1,iswflg,bnd,jstate)
+!
+!*******************************************************************************
+!
+!! SDPST is called to reevaluate the partials.
+!
+!
+!  if miter is 1, 2, 4, or 5, the matrix
+!  p = i - l(0)*h*jacobian is stored in dfdy and subjected to lu
+!  decomposition, with the results also stored in dfdy.
+!
+  integer matdim
+  integer n
+!
+  real a(matdim,*)
+  real bl
+  real bnd
+  real bp
+  real br
+  real bu
+  real dfdy(matdim,*)
+  real dfdymx
+  real diff
+  real dy
+  real el(13,12)
+  real fac(*)
+  real facmin
+  real, parameter :: facmax = 0.5E+00
+  real factor
+  real h
+  integer i
+  integer i1
+  integer i2
+  integer i3
+  logical ier
+  integer iflag
+  integer imax
+  integer impl
+  integer info
+  integer ipvt(*)
+  integer iswflg
+  integer j
+  integer j2
+  integer jstate
+  integer k
+  integer miter
+  integer ml
+  integer mu
+  integer mw
+  integer nde
+  integer nfe
+  integer nje
+  integer nq
+  real save1(*)
+  real save2(*)
+  real scale
+  real snrm2
+  real t
+  real uround
+  real y(*)
+  real yh(n,*)
+  real yj
+  real ys
+  real ywt(*)
+!
+  external f
+  external fa
+  external jacobn
+  external users
+!
+  nje = nje + 1
+  ier = .false.
+  if (miter == 1 .or. miter == 2) then
+    if (miter == 1) then
+      call jacobn (n, t, y, dfdy, matdim, ml, mu)
+      if (n == 0) then
+        jstate = 8
+        return
+      end if
+      if (iswflg == 3) bnd = snrm2(n*n, dfdy, 1)
+      factor = -el(1,nq)*h
+
+      do j = 1,n
+        do i = 1,n
+          dfdy(i,j) = factor*dfdy(i,j)
+        end do
+      end do
+
+    else if (miter == 2) then
+      br = uround**(.875)
+      bl = uround**(.75)
+      bu = uround**(.25)
+      bp = uround**(-.15)
+      facmin = uround**(.78)
+
+      do j = 1,n
+
+        ys = max(abs(ywt(j)), abs(y(j)))
+ 120        dy = fac(j)*ys
+
+        if (dy == 0.0) then
+          if (fac(j) < facmax) then
+            fac(j) = min(100.0*fac(j), facmax)
+            go to 120
+          else
+            dy = ys
+          end if
+        end if
+
+        if (nq == 1) then
+          dy = sign(dy, save2(j))
+        else
+          dy = sign(dy, yh(j,3))
+        end if
+
+        dy = (y(j) + dy) - y(j)
+        yj = y(j)
+        y(j) = y(j) + dy
+        call f (n, t, y, save1)
+
+        if (n == 0) then
+          jstate = 6
+          return
+        end if
+
+        y(j) = yj
+        factor = -el(1,nq)*h/dy
+        dfdy(1:n,j) = ( save1(1:n) - save2(1:n) ) * factor
+        diff = abs(save2(1) - save1(1))
+        imax = 1
+
+        do i = 2,n
+          if (abs(save2(i) - save1(i)) > diff) then
+            imax = i
+            diff = abs(save2(i) - save1(i))
+          end if
+        end do
+!                                                                 step 2
+        if (min(abs(save2(imax)), abs(save1(imax))) > 0.0) then
+          scale = max(abs(save2(imax)), abs(save1(imax)))
+!                                                                 step 3
+          if (diff > bu*scale) then
+            fac(j) = max(facmin, fac(j)*0.1)
+          else if (br*scale <= diff .and. diff <= bl*scale) then
+            fac(j) = min(fac(j)*10.0, facmax)
+!                                                                 step 4
+          else if (diff < br*scale) then
+            fac(j) = min(bp*fac(j), facmax)
+          end if
+        end if
+
+      end do
+
+      if (iswflg == 3) bnd = snrm2(n*n, dfdy, 1)/(-el(1,nq)*h)
+      nfe = nfe + n
+    end if
+
+    if (impl == 0) then
+
+      do i = 1,n
+        dfdy(i,i) = dfdy(i,i) + 1.0E+00
+      end do
+
+    else if (impl == 1) then
+
+      call fa (n, t, y, a, matdim, ml, mu, nde)
+
+      if (n == 0) then
+        jstate = 9
+        return
+      end if
+
+      do j = 1,n
+        do i = 1,n
+          dfdy(i,j) = dfdy(i,j) + a(i,j)
+        end do
+      end do
+
+    else if (impl == 2) then
+
+      call fa (n, t, y, a, matdim, ml, mu, nde)
+
+      if (n == 0) then
+        jstate = 9
+        return
+      end if
+
+      do i = 1,nde
+        dfdy(i,i) = dfdy(i,i) + a(i,1)
+      end do
+    end if
+
+    call sgefa (dfdy, matdim, n, ipvt, info)
+    if (info /= 0) ier = .true.
+
+  else if (miter == 4 .or. miter == 5) then
+
+    if (miter == 4) then
+
+      call jacobn (n, t, y, dfdy(ml+1,1), matdim, ml, mu)
+
+      if (n == 0) then
+        jstate = 8
+        return
+      end if
+
+      factor = -el(1,nq)*h
+      mw = ml + mu + 1
+
+      do j = 1,n
+        i1 = max(ml+1, mw+1-j)
+        i2 = min(mw+n-j, mw+ml)
+        do i = i1,i2
+          dfdy(i,j) = factor*dfdy(i,j)
+        end do
+      end do
+
+    else if (miter == 5) then
+
+      br = uround**(.875)
+      bl = uround**(.75)
+      bu = uround**(.25)
+      bp = uround**(-.15)
+      facmin = uround**(.78)
+      mw = ml + mu + 1
+      j2 = min(mw, n)
+
+      do j = 1,j2
+
+        do k = j,n,mw
+
+          ys = max(abs(ywt(k)), abs(y(k)))
+
+ 280      continue
+
+          dy = fac(k)*ys
+
+          if (dy == 0.0) then
+            if (fac(k) < facmax) then
+              fac(k) = min(100.0*fac(k), facmax)
+              go to 280
+            else
+              dy = ys
+            end if
+          end if
+
+          if (nq == 1) then
+            dy = sign(dy, save2(k))
+          else
+            dy = sign(dy, yh(k,3))
+          end if
+          dy = (y(k) + dy) - y(k)
+          dfdy(mw,k) = y(k)
+          y(k) = y(k) + dy
+
+        end do
+
+        call f (n, t, y, save1)
+
+        if (n == 0) then
+          jstate = 6
+          return
+        end if
+
+        do k = j,n,mw
+
+          y(k) = dfdy(mw,k)
+          ys = max(abs(ywt(k)), abs(y(k)))
+          dy = fac(k)*ys
+          if (dy == 0.0) dy = ys
+          if (nq == 1) then
+            dy = sign(dy, save2(k))
+          else
+            dy = sign(dy, yh(k,3))
+          end if
+          dy = (y(k) + dy) - y(k)
+          factor = -el(1,nq)*h/dy
+          i1 = max(ml+1, mw+1-k)
+          i2 = min(mw+n-k, mw+ml)
+          do i = i1,i2
+            i3 = k + i - mw
+            dfdy(i,k) = factor*(save1(i3) - save2(i3))
+          end do
+
+          imax = max(1, k - mu)
+          diff = abs(save2(imax) - save1(imax))
+          i1 = imax
+          i2 = min(k + ml, n)
+
+          do i = i1+1,i2
+            if (abs(save2(i) - save1(i)) > diff) then
+              imax = i
+              diff = abs(save2(i) - save1(i))
+            end if
+          end do
+
+          if (min(abs(save2(imax)), abs(save1(imax))) >0.0) then
+
+            scale = max(abs(save2(imax)), abs(save1(imax)))
+
+            if (diff > bu*scale) then
+              fac(k) = max(facmin, fac(k)*.1)
+            else if (br*scale <=diff .and. diff <=bl*scale) then
+              fac(k) = min(fac(k)*10.0, facmax)
+            else if (diff < br*scale) then
+              fac(k) = min(bp*fac(k), facmax)
+            end if
+
+          end if
+
+        end do
+
+      end do
+
+      nfe = nfe + j2
+
+    end if
+
+    if (iswflg == 3) then
+
+      dfdymx = 0.0E+00
+
+      do j = 1,n
+        i1 = max(ml+1, mw+1-j)
+        i2 = min(mw+n-j, mw+ml)
+        do i = i1,i2
+          dfdymx = max(dfdymx, abs(dfdy(i,j)))
+        end do
+      end do
+
+      bnd = 0.0E+00
+      if (dfdymx /= 0.0) then
+        do j = 1,n
+          i1 = max(ml+1, mw+1-j)
+          i2 = min(mw+n-j, mw+ml)
+          do i = i1,i2
+                bnd = bnd + (dfdy(i,j)/dfdymx)**2
+          end do
+        end do
+        bnd = dfdymx*sqrt(bnd)/(-el(1,nq)*h)
+      end if
+
+    end if
+
+    if (impl == 0) then
+
+      dfdy(mw,1:n) = dfdy(mw,1:n) + 1.0E+00
+
+    else if (impl == 1) then
+
+      call fa (n, t, y, a(ml+1,1), matdim, ml, mu, nde)
+
+      if (n == 0) then
+        jstate = 9
+        return
+      end if
+
+      do j = 1,n
+        i1 = max(ml+1, mw+1-j)
+        i2 = min(mw+n-j, mw+ml)
+        do i = i1,i2
+          dfdy(i,j) = dfdy(i,j) + a(i,j)
+        end do
+      end do
+
+    else if (impl == 2) then
+
+      call fa (n, t, y, a, matdim, ml, mu, nde)
+
+      if (n == 0) then
+        jstate = 9
+        return
+      end if
+
+      do j = 1,nde
+        dfdy(mw,j) =  dfdy(mw,j) + a(j,1)
+      end do
+
+    end if
+
+    call sgbfa (dfdy, matdim, n, ml, mu, ipvt, info)
+    if (info /= 0) ier = .true.
+
+  else if (miter == 3) then
+
+    iflag = 1
+    call users ( y, yh(1,2), ywt, save1, save2, t, h, el(1,nq), impl, n, &
+      nde, iflag)
+
+    if (n == 0) then
+      jstate = 10
+      return
+    end if
+
+  end if
+
+  return
+end
+subroutine sdriv1 (n,t,y,tout,mstate,eps,work,lenw)
+!
+!*******************************************************************************
+!
+!! SDRIV1 solves ordinary differential equations of the form
+!            dy(i)/dt = f(y(i),t), given the initial conditions
+!            y(i) = yi.  sdriv1 uses single precision arithmetic.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  i.  choosing the correct routine
+!
+!     sdriv
+!     ddriv
+!     cdriv
+!           these are the generic names for three packages for solving
+!           initial value problems for ordinary differential equations.
+!           sdriv uses single precision arithmetic.  ddriv uses double
+!           precision arithmetic.  cdriv allows complex-valued
+!           differential equations, integrated with respect to a single,
+!           real, independent variable.
+!
+!    as an aid in selecting the proper program, the following is a
+!    discussion of the important options or restrictions associated with
+!    each program:
+!
+!      a. sdriv1 should be tried first for those routine problems with
+!         no more than 200 differential equations.  internally this
+!         routine has two important technical defaults:
+!           1. numerical approximation of the jacobian matrix of the
+!              right hand side is used.
+!           2. the stiff solver option is used.
+!         most users of sdriv1 should not have to concern themselves
+!         with these details.
+!
+!      b. sdriv2 should be considered for those problems for which
+!         sdriv1 is inadequate (sdriv2 has no explicit restriction on
+!         the number of differential equations.)  for example, sdriv1
+!         may have difficulty with problems having zero initial
+!         conditions and zero derivatives.  in this case sdriv2, with an
+!         appropriate value of the parameter ewt, should perform more
+!         efficiently.  sdriv2 provides three important additional
+!         options:
+!           1. the nonstiff equation solver (as well as the stiff
+!              solver) is available.
+!           2. the root-finding option is available.
+!           3. the program can dynamically select either the non-stiff
+!              or the stiff methods.
+!         internally this routine also defaults to the numerical
+!         approximation of the jacobian matrix of the right hand side.
+!
+!      c. sdriv3 is the most flexible, and hence the most complex, of
+!         the programs.  its important additional features include:
+!           1. the ability to exploit band structure in the jacobian
+!              matrix.
+!           2. the ability to solve some implicit differential
+!              equations, i.e., those having the form:
+!                   a(y,t)*dy/dt = f(y,t).
+!           3. the option of integrating in the one step mode.
+!           4. the option of allowing the user to provide a routine
+!              which computes the analytic jacobian matrix of the right
+!              hand side.
+!           5. the option of allowing the user to provide a routine
+!              which does all the matrix algebra associated with
+!              corrections to the solution components.
+!
+!  ii.  abstract
+!
+!    the function of sdriv1 is to solve n (200 or fewer) ordinary
+!    differential equations of the form dy(i)/dt = f(y(i),t), given the
+!    initial conditions y(i) = yi.  sdriv1 is to be called once for each
+!    output point.
+!
+!  iii.  parameters
+!
+!    the user should use parameter names in the call sequence of sdriv1
+!    for those quantities whose value may be altered by sdriv1.  the
+!    parameters in the call sequence are:
+!
+!    n      = (input) the number of differential equations, n <= 200
+!
+!    t      = the independent variable.  on input for the first call, t
+!             is the initial point.  on output, t is the point at which
+!             the solution is given.
+!
+!    y      = the vector of dependent variables.  y is used as input on
+!             the first call, to set the initial values.  on output, y
+!             is the computed solution vector.  this array y is passed
+!             in the call sequence of the user-provided routine f.  thus
+!             parameters required by f can be stored in this array in
+!             components n+1 and above.  (note: changes by the user to
+!             the first n components of this array will take effect only
+!             after a restart, i.e., after setting mstate to +1(-1).)
+!
+!    tout   = (input) the point at which the solution is desired.
+!
+!    mstate = an integer describing the status of integration.  the user
+!             must initialize mstate to +1 or -1.  if mstate is
+!             positive, the routine will integrate past tout and
+!             interpolate the solution.  this is the most efficient
+!             mode.  if mstate is negative, the routine will adjust its
+!             internal step to reach tout exactly (useful if a
+!             singularity exists beyond tout.)  the meaning of the
+!             magnitude of mstate:
+!               1  (input) means the first call to the routine.  this
+!                  value must be set by the user.  on all subsequent
+!                  calls the value of mstate should be tested by the
+!                  user.  unless sdriv1 is to be reinitialized, only the
+!                  sign of mstate may be changed by the user.  (as a
+!                  convenience to the user who may wish to put out the
+!                  initial conditions, sdriv1 can be called with
+!                  mstate=+1(-1), and tout=t.  in this case the program
+!                  will return with mstate unchanged, i.e.,
+!                  mstate=+1(-1).)
+!               2  (output) means a successful integration.  if a normal
+!                  continuation is desired (i.e., a further integration
+!                  in the same direction), simply advance tout and call
+!                  again.  all other parameters are automatically set.
+!               3  (output)(unsuccessful) means the integrator has taken
+!                  1000 steps without reaching tout.  the user can
+!                  continue the integration by simply calling sdriv1
+!                  again.
+!               4  (output)(unsuccessful) means too much accuracy has
+!                  been requested.  eps has been increased to a value
+!                  the program estimates is appropriate.  the user can
+!                  continue the integration by simply calling sdriv1
+!                  again.
+!               5  (output)(unsuccessful) n has been set to zero in
+!                subroutine f.  see description of f in section iv.
+!
+!    eps    = on input, the requested relative accuracy in all solution
+!             components.  on output, the adjusted relative accuracy if
+!             the input value was too small.  the value of eps should be
+!             set as large as is reasonable, because the amount of work
+!             done by sdriv1 increases as eps decreases.
+!
+!    work
+!    lenw   = (input)
+!             work is an array of lenw real words used
+!             internally for temporary storage.  the user must allocate
+!             space for this array in the calling program by a statement
+!             such as
+!                       real work(...)
+!             the length of work should be at least n*n + 11*n + 225
+!             and lenw should be set to the value used.  the contents of
+!             work should not be disturbed between calls to sdriv1.
+!
+!  long description
+!
+!  iv.  usage
+!
+!                   program sample
+!                   real alfa, eps, t, tout
+!c                                          n is the number of equations
+!                   parameter(alfa = 1.0, n = 3,
+!                  8          lenw = n*n + 11*n + 225)
+!                   real work(lenw), y(n+1)
+!c                                                         initial point
+!                   t = 0.00001
+!c                                                set initial conditions
+!                   y(1) = 10.0E+00
+!                   y(2) = 0.0E+00
+!                   y(3) = 10.0E+00
+!c                                                        pass parameter
+!                   y(4) = alfa
+!                   tout = t
+!                   mstate = 1
+!                   eps = .001
+!              10   call sdriv1 (n, t, y, tout, mstate, eps, work, lenw)
+!                   if (mstate > 2) stop
+!                   write(*, '(4e12.3)') tout, (y(i), i=1,3)
+!                   tout = 10.0*tout
+!                   if (tout < 50.0) go to 10
+!                 end
+!
+!    the user must write a subroutine called f to evaluate the right
+!    hand side of the differential equations.  it is of the form:
+!
+!                 subroutine f (n, t, y, ydot)
+!                   real alfa, t, y(*), ydot(*)
+!                   alfa = y(n+1)
+!                   ydot(1) = 1.0E+00 + alfa*(y(2) - y(1)) - y(1)*y(3)
+!                   ydot(2) = alfa*(y(1) - y(2)) - y(2)*y(3)
+!                   ydot(3) = 1.0E+00 - y(3)*(y(1) + y(2))
+!                 end
+!
+!    this computes ydot = f(y,t), the right hand side of the
+!    differential equations.  here y is a vector of length at least n.
+!    the actual length of y is determined by the user's declaration in
+!    the program which calls sdriv1.  thus the dimensioning of y in f,
+!    while required by fortran convention, does not actually allocate
+!    any storage.  when this subroutine is called, the first n
+!    components of y are intermediate approximations to the solution
+!    components.  the user should not alter these values.  here ydot is
+!    a vector of length n.  the user should only compute ydot(i) for i
+!    from 1 to n.  normally a return from f passes control back to
+!    sdriv1.  however, if the user would like to abort the calculation,
+!    i.e., return control to the program which calls sdriv1, he should
+!    set n to zero.  sdriv1 will signal this by returning a value of
+!    mstate equal to +5(-5).  altering the value of n in f has no effect
+!    on the value of n in the call sequence of sdriv1.
+!
+!  v.  other communication to the user
+!
+!    a. the solver communicates to the user through the parameters
+!       above.  in addition it writes diagnostic messages through the
+!       standard error handling program xerror.  that program will
+!       terminate the user's run if it detects a probable problem setup
+!       error, e.g., insufficient storage allocated by the user for the
+!       work array.  for further information see section iii-a of the
+!       writeup for sdriv3.
+!
+!    b. the number of evaluations of the right hand side can be found
+!       in the work array in the location determined by:
+!            lenw - (n + 21) + 4
+!
+!  references  gear, c. w., "numerical initial value problems in
+!                 ordinary differential equations", prentice-hall, 1971.
+!
+  integer, parameter :: idliw = 21
+  integer, parameter :: mxn = 200
+  integer n
+!
+  real eps
+  real ewt(1)
+  real hmax
+  integer i
+  integer, parameter :: ierror = 2
+  integer ii
+  integer, parameter :: impl = 0
+  integer iwork(idliw+mxn)
+  integer leniw
+  integer lenw
+  integer lenwcm
+  integer lnwchk
+  integer, parameter :: mint = 2
+  integer, parameter :: miter = 2
+  integer ml
+  character msg*103
+  integer mstate
+  real mu
+  integer, parameter :: mxord = 5
+  integer, parameter :: mxstep = 1000
+  integer nde
+  integer, parameter :: nroot = 0
+  integer nstate
+  integer ntask
+  real t
+  real tout
+  real work(*)
+  real y(n)
+!
+  external f
+!
+  ewt(1) = 1.0E+00
+
+  if ( n > mxn ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SDRIV1 - Fatal error!'
+    write ( *, * ) '  The number of equations is too large.'
+    write ( *, * ) '  The number of equations N = ', n
+    write ( *, * ) '  The maximum is MXN = ', mxn
+    stop
+  end if
+
+  if (mstate > 0) then
+    nstate = mstate
+    ntask = 1
+  else
+    nstate = - mstate
+    ntask = 3
+  end if
+
+  hmax = 2.0E+00 * abs ( tout - t )
+  leniw = n + idliw
+  lenwcm = lenw - leniw
+
+  if (lenwcm < (n*n + 10*n + 204)) then
+    lnwchk = n*n + 10*n + 204 + leniw
+    write ( *, * ) ' '
+    write ( *, * ) 'SDRIV1 - Fatal error!'
+    write ( *, * ) '  Insufficient work storage.'
+    write ( *, * ) '  The given work storage is = ', lenwcm
+    write ( *, * ) '  The required work storage is = ', lnwchk
+    stop
+  end if
+
+  if ( nstate /= 1 ) then
+    do i = 1,leniw
+      ii = i + lenwcm
+      iwork(i) = int(work(ii))
+    end do
+  end if
+
+  call sdriv3 (n, t, y, f, nstate, tout, ntask, nroot, eps, ewt, &
+    ierror, mint, miter, impl, ml, mu, mxord, hmax, work, &
+    lenwcm, iwork, leniw, f, f, nde, mxstep, f, f)
+
+  do i = 1, leniw
+    ii = lenwcm + i
+    work(ii) = real(iwork(i))
+  end do
+
+  if ( nstate <= 4 ) then
+    mstate = sign(nstate, mstate)
+  else if (nstate == 6) then
+    mstate = sign(5, mstate)
+  end if
+
+  return
+end
+!     KW******************************  
+subroutine f
+end
+!     KW******************************
+subroutine sdriv2 (n,t,y,f,tout,mstate,nroot,eps,ewt,mint,work,lenw,iwork, &
+  leniw,g)
+!
+!*******************************************************************************
+!
+!! SDRIV2 solves n ordinary differential
+!            equations of the form dy(i)/dt = f(y(i),t), given the
+!            initial conditions y(i) = yi.  the program has options to
+!            allow the solution of both stiff and non-stiff differential
+!            equations.  sdriv2 uses single precision arithmetic.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!
+!  i.  abstract
+!
+!    the function of sdriv2 is to solve n ordinary differential
+!    equations of the form dy(i)/dt = f(y(i),t), given the initial
+!    conditions y(i) = yi.  the program has options to allow the
+!    solution of both stiff and non-stiff differential equations.
+!    sdriv2 is to be called once for each output point of t.
+!
+!  ii.  parameters
+!
+!    the user should use parameter names in the call sequence of sdriv2
+!    for those quantities whose value may be altered by sdriv2.  the
+!    parameters in the call sequence are:
+!
+!    n      = (input) the number of differential equations.
+!
+!    t      = the independent variable.  on input for the first call, t
+!             is the initial point.  on output, t is the point at which
+!             the solution is given.
+!
+!    y      = the vector of dependent variables.  y is used as input on
+!             the first call, to set the initial values.  on output, y
+!             is the computed solution vector.  this array y is passed
+!             in the call sequence of the user-provided routines f and
+!             g.  thus parameters required by f and g can be stored in
+!             this array in components n+1 and above.  (note: changes
+!             by the user to the first n components of this array will
+!             take effect only after a restart, i.e., after setting
+!             mstate to +1(-1).)
+!
+!    f      = a subroutine supplied by the user.  the name must be
+!             declared external in the user's calling program.  this
+!           subroutine is of the form:
+!                 subroutine f (n, t, y, ydot)
+!                   real y(*), ydot(*)
+!                     .
+!                     .
+!                   ydot(1) = ...
+!                     .
+!                     .
+!                   ydot(n) = ...
+!                 end (sample)
+!             this computes ydot = f(y,t), the right hand side of the
+!             differential equations.  here y is a vector of length at
+!             least n.  the actual length of y is determined by the
+!             user's declaration in the program which calls sdriv2.
+!             thus the dimensioning of y in f, while required by fortran
+!             convention, does not actually allocate any storage.  when
+!             this subroutine is called, the first n components of y are
+!             intermediate approximations to the solution components.
+!             the user should not alter these values.  here ydot is a
+!             vector of length n.  the user should only compute ydot(i)
+!             for i from 1 to n.  normally a return from f passes
+!             control back to  sdriv2.  however, if the user would like
+!             to abort the calculation, i.e., return control to the
+!             program which calls sdriv2, he should set n to zero.
+!             sdriv2 will signal this by returning a value of mstate
+!             equal to +6(-6).  altering the value of n in f has no
+!             effect on the value of n in the call sequence of sdriv2.
+!
+!    tout   = (input) the point at which the solution is desired.
+!
+!    mstate = an integer describing the status of integration.  the user
+!             must initialize mstate to +1 or -1.  if mstate is
+!             positive, the routine will integrate past tout and
+!             interpolate the solution.  this is the most efficient
+!             mode.  if mstate is negative, the routine will adjust its
+!             internal step to reach tout exactly (useful if a
+!             singularity exists beyond tout.)  the meaning of the
+!             magnitude of mstate:
+!               1  (input) means the first call to the routine.  this
+!                  value must be set by the user.  on all subsequent
+!                  calls the value of mstate should be tested by the
+!                  user.  unless sdriv2 is to be reinitialized, only the
+!                  sign of mstate may be changed by the user.  (as a
+!                  convenience to the user who may wish to put out the
+!                  initial conditions, sdriv2 can be called with
+!                  mstate=+1(-1), and tout=t.  in this case the program
+!                  will return with mstate unchanged, i.e.,
+!                  mstate=+1(-1).)
+!               2  (output) means a successful integration.  if a normal
+!                  continuation is desired (i.e., a further integration
+!                  in the same direction), simply advance tout and call
+!                  again.  all other parameters are automatically set.
+!               3  (output)(unsuccessful) means the integrator has taken
+!                  1000 steps without reaching tout.  the user can
+!                  continue the integration by simply calling sdriv2
+!                  again.  other than an error in problem setup, the
+!                  most likely cause for this condition is trying to
+!                  integrate a stiff set of equations with the non-stiff
+!                  integrator option. (see description of mint below.)
+!               4  (output)(unsuccessful) means too much accuracy has
+!                  been requested.  eps has been increased to a value
+!                  the program estimates is appropriate.  the user can
+!                  continue the integration by simply calling sdriv2
+!                  again.
+!               5  (output) a root was found at a point less than tout.
+!                  the user can continue the integration toward tout by
+!                  simply calling sdriv2 again.
+!               6  (output)(unsuccessful) n has been set to zero in
+!                subroutine f.
+!               7  (output)(unsuccessful) n has been set to zero in
+!                function g.  see description of g below.
+!
+!    nroot  = (input) the number of equations whose roots are desired.
+!             if nroot is zero, the root search is not active.  this
+!             option is useful for obtaining output at points which are
+!             not known in advance, but depend upon the solution, e.g.,
+!             when some solution component takes on a specified value.
+!             the root search is carried out using the user-written
+!           function g (see description of g below.)  sdriv2 attempts
+!             to find the value of t at which one of the equations
+!             changes sign.  sdriv2 can find at most one root per
+!             equation per internal integration step, and will then
+!             return the solution either at tout or at a root, whichever
+!             occurs first in the direction of integration.  the index
+!             of the equation whose root is being reported is stored in
+!             the sixth element of iwork.
+!             note: nroot is never altered by this program.
+!
+!    eps    = on input, the requested relative accuracy in all solution
+!             components.  eps = 0 is allowed.  on output, the adjusted
+!             relative accuracy if the input value was too small.  the
+!             value of eps should be set as large as is reasonable,
+!             because the amount of work done by sdriv2 increases as
+!             eps decreases.
+!
+!    ewt    = (input) problem zero, i.e., the smallest physically
+!             meaningful value for the solution.  this is used inter-
+!             nally to compute an array ywt(i) = max(abs(y(i)), ewt).
+!             one step error estimates divided by ywt(i) are kept less
+!             than eps.  setting ewt to zero provides pure relative
+!             error control.  however, setting ewt smaller than
+!             necessary can adversely affect the running time.
+!
+!    mint   = (input) the integration method flag.
+!               mint = 1  means the adams methods, and is used for
+!                         non-stiff problems.
+!               mint = 2  means the stiff methods of gear (i.e., the
+!                         backward differentiation formulas), and is
+!                         used for stiff problems.
+!               mint = 3  means the program dynamically selects the
+!                         adams methods when the problem is non-stiff
+!                         and the gear methods when the problem is
+!                         stiff.
+!             mint may not be changed without restarting, i.e., setting
+!             the magnitude of mstate to 1.
+!
+!    work
+!    lenw   = (input)
+!             work is an array of lenw real words used
+!             internally for temporary storage.  the user must allocate
+!             space for this array in the calling program by a statement
+!             such as
+!                       real work(...)
+!             the length of work should be at least
+!               16*n + 2*nroot + 204         if mint is 1, or
+!               n*n + 10*n + 2*nroot + 204   if mint is 2, or
+!               n*n + 17*n + 2*nroot + 204   if mint is 3,
+!             and lenw should be set to the value used.  the contents of
+!             work should not be disturbed between calls to sdriv2.
+!
+!    iwork
+!    leniw  = (input)
+!             iwork is an integer array of length leniw used internally
+!             for temporary storage.  the user must allocate space for
+!             this array in the calling program by a statement such as
+!                       integer iwork(...)
+!             the length of iwork should be at least
+!               21      if mint is 1, or
+!               n+21    if mint is 2 or 3,
+!             and leniw should be set to the value used.  the contents
+!             of iwork should not be disturbed between calls to sdriv2.
+!
+!    g      = a real fortran function supplied by the user
+!             if nroot is not 0.  in this case, the name must be
+!             declared external in the user's calling program.  g is
+!             repeatedly called with different values of iroot to
+!             obtain the value of each of the nroot equations for which
+!             a root is desired.  g is of the form:
+!                   real function g (n, t, y, iroot)
+!                   real y(*)
+!                   go to (10, ...), iroot
+!              10   g = ...
+!                     .
+!                     .
+!                 end (sample)
+!             here, y is a vector of length at least n, whose first n
+!             components are the solution components at the point t.
+!             the user should not alter these values.  the actual length
+!             of y is determined by the user's declaration in the
+!             program which calls sdriv2.  thus the dimensioning of y in
+!             g, while required by fortran convention, does not actually
+!             allocate any storage.  normally a return from g passes
+!             control back to  sdriv2.  however, if the user would like
+!             to abort the calculation, i.e., return control to the
+!             program which calls sdriv2, he should set n to zero.
+!             sdriv2 will signal this by returning a value of mstate
+!             equal to +7(-7).  in this case, the index of the equation
+!             being evaluated is stored in the sixth element of iwork.
+!             altering the value of n in g has no effect on the value of
+!             n in the call sequence of sdriv2.
+!
+!  long description
+!
+!  iii.  other communication to the user
+!
+!    a. the solver communicates to the user through the parameters
+!       above.  in addition it writes diagnostic messages through the
+!       standard error handling program xerror.  that program will
+!       terminate the user's run if it detects a probable problem setup
+!       error, e.g., insufficient storage allocated by the user for the
+!       work array.  messages are written on the standard error message
+!       file.  at installations which have this error handling package
+!       the user should determine the standard error handling file from
+!       the local documentation.  otherwise the short but serviceable
+!       routine, xerror, available with this package, can be used.  that
+!       program writes on logical unit 6 to transmit messages.  a
+!       complete description of xerror is given in the sandia
+!       laboratories report sand78-1189 by r. e. jones.
+!
+!    b. the first three elements of work and the first five elements of
+!       iwork will contain the following statistical data:
+!         avgh     the average step size used.
+!         hused    the step size last used (successfully).
+!         avgord   the average order used.
+!         imxerr   the index of the element of the solution vector that
+!                  contributed most to the last error test.
+!         nqused   the order last used (successfully).
+!         nstep    the number of steps taken since last initialization.
+!         nfe      the number of evaluations of the right hand side.
+!         nje      the number of evaluations of the jacobian matrix.
+!
+!  iv.  remarks
+!
+!    a. on any return from sdriv2 all information necessary to continue
+!       the calculation is contained in the call sequence parameters,
+!       including the work arrays.  thus it is possible to suspend one
+!       problem, integrate another, and then return to the first.
+!
+!    b. if this package is to be used in an overlay situation, the user
+!       must declare in the primary overlay the variables in the call
+!       sequence to sdriv2.
+!
+!    c. when the routine g is not required, difficulties associated with
+!       an unsatisfied external can be avoided by using the name of the
+!       routine which calculates the right hand side of the differential
+!       equations in place of g in the call sequence of sdriv2.
+!
+!  v.  usage
+!
+!               program sample
+!               external f
+!               parameter(mint = 1, nroot = 0, n = ...,
+!              8          lenw = 16*n + 2*nroot + 204, leniw = 21)
+!                                           n is the number of equations
+!               real eps, ewt, t, tout, work(lenw), y(n)
+!               integer iwork(leniw)
+!               open(file='tape6', unit=6, status='new')
+!               t = 0.                           initial point
+!               y(1:n) = ...                     set initial conditions
+!               tout = t
+!               ewt = ...
+!               mstate = 1
+!               eps = ...
+!          20   call sdriv2 (n, t, y, f, tout, mstate, nroot, eps, ewt,
+!              8             mint, work, lenw, iwork, leniw, f)
+!                                          last argument is not the same
+!                                          as f if rootfinding is used.
+!               if (mstate > 2) stop
+!               write(6, 100) tout, (y(i), i=1,n)
+!               tout = tout + 1.
+!               if (tout <= 10.) go to 20
+!          100  format(...)
+!             end (sample)
+!
+!  references  gear, c. w., "numerical initial value problems in
+!                 ordinary differential equations", prentice-hall, 1971.
+!
+  integer n
+!
+  real eps
+  real ewt
+  real ewtcom(1)
+  real g
+  real hmax
+  integer ierror
+  integer, parameter :: impl = 0
+  integer iwork(*)
+  integer leniw
+  integer lenw
+  integer mint
+  integer miter
+  integer ml
+  character msg*81
+  integer mstate
+  integer mu
+  integer mxord
+  integer, parameter :: mxstep = 1000
+  integer nde
+  integer nroot
+  integer nstate
+  integer ntask
+  real t
+  real tout
+  real work(*)
+  real y(n)
+!
+  external f
+  external g
+!
+  if (mint < 1 .or. mint > 3) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SDRIV2 - Fatal error!'
+    write ( *, * ) '  Improper value for the integration method.'
+    write ( *, * ) '  MINT = ', mint
+    write ( *, * ) '  MINT should be between 1 and 3.'
+    stop
+  end if
+
+  if (mstate >= 0) then
+    nstate = mstate
+    ntask = 1
+  else
+    nstate = - mstate
+    ntask = 3
+  end if
+
+  ewtcom(1) = ewt
+
+  if (ewt /= 0.0) then
+    ierror = 3
+  else
+    ierror = 2
+  end if
+
+  if (mint == 1) then
+    miter = 0
+    mxord = 12
+  else if (mint == 2) then
+    miter = 2
+    mxord = 5
+  else if (mint == 3) then
+    miter = 2
+    mxord = 12
+  end if
+
+  hmax = 2.0*abs(tout - t)
+
+  call sdriv3 (n, t, y, f, nstate, tout, ntask, nroot, eps, ewtcom, &
+    ierror, mint, miter, impl, ml, mu, mxord, hmax, work, &
+    lenw, iwork, leniw, f, f, nde, mxstep, g, f)
+
+  if (mstate >= 0) then
+    mstate = nstate
+  else
+    mstate = - nstate
+  end if
+
+  return
+end
+subroutine sdriv3 (n,t,y,f,nstate,tout,ntask,nroot,eps,ewt,ierror, &
+  mint,miter,impl,ml,mu,mxord,hmax,work,lenw,iwork,leniw,jacobn, &
+  fa,nde,mxstep,g,users)
+!
+!*******************************************************************************
+!
+!! SDRIV3 solves n ordinary differential
+!            equations of the form dy(i)/dt = f(y(i),t), given the
+!            initial conditions y(i) = yi.  the program has options to
+!            allow the solution of both stiff and non-stiff differential
+!            equations.  other important options are available.  sdriv3
+!            uses single precision arithmetic.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!
+!  i.  abstract
+!
+!    the primary function of sdriv3 is to solve n ordinary differential
+!    equations of the form dy(i)/dt = f(y(i),t), given the initial
+!    conditions y(i) = yi.  the program has options to allow the
+!    solution of both stiff and non-stiff differential equations.  in
+!    addition, sdriv3 may be used to solve:
+!      1. the initial value problem, a*dy(i)/dt = f(y(i),t), where a is
+!         a non-singular matrix depending on y and t.
+!      2. the hybrid differential/algebraic initial value problem,
+!         a*dy(i)/dt = f(y(i),t), where a is a vector (whose values may
+!         depend upon y and t) some of whose components will be zero
+!         corresponding to those equations which are algebraic rather
+!         than differential.
+!    sdriv3 is to be called once for each output point of t.
+!
+!  ii.  parameters
+!
+!    the user should use parameter names in the call sequence of sdriv3
+!    for those quantities whose value may be altered by sdriv3.  the
+!    parameters in the call sequence are:
+!
+!    n      = (input) the number of dependent functions whose solution
+!             is desired.  n must not be altered during a problem.
+!
+!    t      = the independent variable.  on input for the first call, t
+!             is the initial point.  on output, t is the point at which
+!             the solution is given.
+!
+!    y      = the vector of dependent variables.  y is used as input on
+!             the first call, to set the initial values.  on output, y
+!             is the computed solution vector.  this array y is passed
+!             in the call sequence of the user-provided routines f,
+!             jacobn, fa, users, and g.  thus parameters required by
+!             those routines can be stored in this array in components
+!             n+1 and above.  (note: changes by the user to the first
+!             n components of this array will take effect only after a
+!             restart, i.e., after setting nstate to 1 .)
+!
+!    f      = a subroutine supplied by the user.  the name must be
+!             declared external in the user's calling program.  this
+!           subroutine is of the form:
+!                 subroutine f (n, t, y, ydot)
+!                   real y(*), ydot(*)
+!                     .
+!                     .
+!                   ydot(1) = ...
+!                     .
+!                     .
+!                   ydot(n) = ...
+!                 end (sample)
+!             this computes ydot = f(y,t), the right hand side of the
+!             differential equations.  here y is a vector of length at
+!             least n.  the actual length of y is determined by the
+!             user's declaration in the program which calls sdriv3.
+!             thus the dimensioning of y in f, while required by fortran
+!             convention, does not actually allocate any storage.  when
+!             this subroutine is called, the first n components of y are
+!             intermediate approximations to the solution components.
+!             the user should not alter these values.  here ydot is a
+!             vector of length n.  the user should only compute ydot(i)
+!             for i from 1 to n.  normally a return from f passes
+!             control back to  sdriv3.  however, if the user would like
+!             to abort the calculation, i.e., return control to the
+!             program which calls sdriv3, he should set n to zero.
+!             sdriv3 will signal this by returning a value of nstate
+!             equal to 6 .  altering the value of n in f has no effect
+!             on the value of n in the call sequence of sdriv3.
+!
+!    nstate = an integer describing the status of integration.  the
+!             meaning of nstate is as follows:
+!               1  (input) means the first call to the routine.  this
+!                  value must be set by the user.  on all subsequent
+!                  calls the value of nstate should be tested by the
+!                  user, but must not be altered.  (as a convenience to
+!                  the user who may wish to put out the initial
+!                  conditions, sdriv3 can be called with nstate=1, and
+!                  tout=t.  in this case the program will return with
+!                  nstate unchanged, i.e., nstate=1.)
+!               2  (output) means a successful integration.  if a normal
+!                  continuation is desired (i.e., a further integration
+!                  in the same direction), simply advance tout and call
+!                  again.  all other parameters are automatically set.
+!               3  (output)(unsuccessful) means the integrator has taken
+!                  mxstep steps without reaching tout.  the user can
+!                  continue the integration by simply calling sdriv3
+!                  again.
+!               4  (output)(unsuccessful) means too much accuracy has
+!                  been requested.  eps has been increased to a value
+!                  the program estimates is appropriate.  the user can
+!                  continue the integration by simply calling sdriv3
+!                  again.
+!               5  (output) a root was found at a point less than tout.
+!                  the user can continue the integration toward tout by
+!                  simply calling sdriv3 again.
+!               6  (output)(unsuccessful) n has been set to zero in
+!                subroutine f.
+!               7  (output)(unsuccessful) n has been set to zero in
+!                function g.  see description of g below.
+!               8  (output)(unsuccessful) n has been set to zero in
+!                subroutine jacobn.  see description of jacobn below.
+!               9  (output)(unsuccessful) n has been set to zero in
+!                subroutine fa.  see description of fa below.
+!              10  (output)(unsuccessful) n has been set to zero in
+!                subroutine users.  see description of users below.
+!
+!    tout   = (input) the point at which the solution is desired.  the
+!             position of tout relative to t on the first call
+!             determines the direction of integration.
+!
+!    ntask  = (input) an index specifying the manner of returning the
+!             solution, according to the following:
+!               ntask = 1  means sdriv3 will integrate past tout and
+!                          interpolate the solution.  this is the most
+!                          efficient mode.
+!               ntask = 2  means sdriv3 will return the solution after
+!                          each internal integration step, or at tout,
+!                          whichever comes first.  in the latter case,
+!                          the program integrates exactly to tout.
+!               ntask = 3  means sdriv3 will adjust its internal step to
+!                          reach tout exactly (useful if a singularity
+!                          exists beyond tout.)
+!
+!    nroot  = (input) the number of equations whose roots are desired.
+!             if nroot is zero, the root search is not active.  this
+!             option is useful for obtaining output at points which are
+!             not known in advance, but depend upon the solution, e.g.,
+!             when some solution component takes on a specified value.
+!             the root search is carried out using the user-written
+!             function g (see description of g below.)  sdriv3 attempts
+!             to find the value of t at which one of the equations
+!             changes sign.  sdriv3 can find at most one root per
+!             equation per internal integration step, and will then
+!             return the solution either at tout or at a root, whichever
+!             occurs first in the direction of integration.  the index
+!             of the equation whose root is being reported is stored in
+!             the sixth element of iwork.
+!             note: nroot is never altered by this program.
+!
+!    eps    = on input, the requested relative accuracy in all solution
+!             components.  eps = 0 is allowed.  on output, the adjusted
+!             relative accuracy if the input value was too small.  the
+!             value of eps should be set as large as is reasonable,
+!             because the amount of work done by sdriv3 increases as eps
+!             decreases.
+!
+!    ewt    = (input) problem zero, i.e., the smallest, nonzero,
+!             physically meaningful value for the solution.  (array,
+!             possibly of length one.  see following description of
+!             ierror.)  setting ewt smaller than necessary can adversely
+!             affect the running time.
+!
+!    ierror = (input) error control indicator.  a value of 3 is
+!             suggested for most problems.  other choices and detailed
+!             explanations of ewt and ierror are given below for those
+!             who may need extra flexibility.
+!
+!             these last three input quantities eps, ewt and ierror
+!             control the accuracy of the computed solution.  ewt and
+!             ierror are used internally to compute an array ywt.  one
+!             step error estimates divided by ywt(i) are kept less than
+!             eps in root mean square norm.
+!                 ierror (set by the user) =
+!                 1  means ywt(i) = 1. (absolute error control)
+!                                   ewt is ignored.
+!                 2  means ywt(i) = abs(y(i)),  (relative error control)
+!                                   ewt is ignored.
+!                 3  means ywt(i) = max(abs(y(i)), ewt(1)).
+!                 4  means ywt(i) = max(abs(y(i)), ewt(i)).
+!                    this choice is useful when the solution components
+!                    have differing scales.
+!                 5  means ywt(i) = ewt(i).
+!             if ierror is 3, ewt need only be dimensioned one.
+!             if ierror is 4 or 5, the user must dimension ewt at least
+!             n, and set its values.
+!
+!    mint   = (input) the integration method indicator.
+!               mint = 1  means the adams methods, and is used for
+!                         non-stiff problems.
+!               mint = 2  means the stiff methods of gear (i.e., the
+!                         backward differentiation formulas), and is
+!                         used for stiff problems.
+!               mint = 3  means the program dynamically selects the
+!                         adams methods when the problem is non-stiff
+!                         and the gear methods when the problem is
+!                         stiff.  when using the adams methods, the
+!                         program uses a value of miter=0; when using
+!                         the gear methods, the program uses the value
+!                         of miter provided by the user.  only a value
+!                         of impl = 0 and a value of miter = 1, 2, 4, or
+!                         5 is allowed for this option.  the user may
+!                         not alter the value of mint or miter without
+!                         restarting, i.e., setting nstate to 1.
+!
+!    miter  = (input) the iteration method indicator.
+!               miter = 0  means functional iteration.  this value is
+!                          suggested for non-stiff problems.
+!               miter = 1  means chord method with analytic jacobian.
+!                          in this case, the user supplies subroutine
+!                          jacobn (see description below).
+!               miter = 2  means chord method with jacobian calculated
+!                          internally by finite differences.
+!               miter = 3  means chord method with corrections computed
+!                          by the user-written routine users (see
+!                          description of users below.)  this option
+!                          allows all matrix algebra and storage
+!                          decisions to be made by the user.  when using
+!                          a value of miter = 3, the subroutine fa is
+!                          not required, even if impl is not 0.  for
+!                          further information on using this option, see
+!                          section iv-e below.
+!               miter = 4  means the same as miter = 1 but the a and
+!                          jacobian matrices are assumed to be banded.
+!               miter = 5  means the same as miter = 2 but the a and
+!                          jacobian matrices are assumed to be banded.
+!
+!    impl   = (input) the implicit method indicator.
+!               impl = 0 means solving dy(i)/dt = f(y(i),t).
+!               impl = 1 means solving a*dy(i)/dt = f(y(i),t),
+!                        non-singular a (see description of fa below.)
+!                        only mint = 1 or 2, and miter = 1, 2, 3, 4, or
+!                        5 are allowed for this option.
+!               impl = 2 means solving certain systems of hybrid
+!                        differential/algebraic equations (see
+!                        description of fa below.)  only mint = 2 and
+!                        miter = 1, 2, 3, 4, or 5, are allowed for this
+!                        option.
+!               the value of impl must not be changed during a problem.
+!
+!    ml     = (input) the lower half-bandwidth in the case of a banded
+!             a or jacobian matrix.  (i.e., maximum(r-c) for nonzero
+!             a(r,c).)
+!
+!    mu     = (input) the upper half-bandwidth in the case of a banded
+!             a or jacobian matrix.  (i.e., maximum(c-r).)
+!
+!    mxord  = (input) the maximum order desired. this is <= 12 for
+!             the adams methods and <= 5 for the gear methods.  normal
+!             value is 12 and 5, respectively.  if mint is 3, the
+!             maximum order used will be min(mxord, 12) when using the
+!             adams methods, and min(mxord, 5) when using the gear
+!             methods.  mxord must not be altered during a problem.
+!
+!    hmax   = (input) the maximum magnitude of the step size that will
+!             be used for the problem.  this is useful for ensuring that
+!             important details are not missed.  if this is not the
+!             case, a large value, such as the interval length, is
+!             suggested.
+!
+!    work
+!    lenw   = (input)
+!             work is an array of lenw real words used
+!             internally for temporary storage.  the user must allocate
+!             space for this array in the calling program by a statement
+!             such as
+!                       real work(...)
+!             the following table gives the required minimum value for
+!             the length of work, depending on the value of impl and
+!             miter.  lenw should be set to the value used.  the
+!             contents of work should not be disturbed between calls to
+!             sdriv3.
+!
+!      impl =   0                   1                   2
+!              ---------------------------------------------------------
+! miter =  0   (mxord+4)*n +       not allowed         not allowed
+!              2*nroot + 204
+!
+!         1,2  n*n+(mxord+5)*n     2*n*n+(mxord+5)*n   n*n+(mxord+6)*n
+!              + 2*nroot + 204     + 2*nroot + 204     + 2*nroot + 204
+!
+!          3   (mxord+4)*n +       (mxord+4)*n +       (mxord+4)*n +
+!              2*nroot + 204       2*nroot + 204       2*nroot + 204
+!
+!         4,5  (2*ml+mu)*n +       (4*ml+2*mu)*n +     (2*ml+mu)*n +
+!              (mxord+6)*n +       (mxord+7)*n +       (mxord+7)*n +
+!              2*nroot + 204       2*nroot + 204       2*nroot + 204
+!              ---------------------------------------------------------
+!
+!    iwork
+!    leniw  = (input)
+!             iwork is an integer array of length leniw used internally
+!             for temporary storage.  the user must allocate space for
+!             this array in the calling program by a statement such as
+!                       integer iwork(...)
+!             the length of iwork should be at least
+!               21      if miter is 0 or 3, or
+!               n+21    if miter is 1, 2, 4, or 5, or mint is 3,
+!             and leniw should be set to the value used.  the contents
+!             of iwork should not be disturbed between calls to sdriv3.
+!
+!    jacobn = a subroutine supplied by the user, if miter is 1 or 4.
+!             if this is the case, the name must be declared external in
+!             the user's calling program.  given a system of n
+!             differential equations, it is meaningful to speak about
+!             the partial derivative of the i-th right hand side with
+!             respect to the j-th dependent variable.  in general there
+!             are n*n such quantities.  often however the equations can
+!             be ordered so that the i-th differential equation only
+!             involves dependent variables with index near i, e.g., i+1,
+!             i-2.  such a system is called banded.  if, for all i, the
+!             i-th equation depends on at most the variables
+!               y(i-ml), y(i-ml+1), ... , y(i), y(i+1), ... , y(i+mu)
+!             then we call ml+mu+1 the bandwith of the system.  in a
+!             banded system many of the partial derivatives above are
+!             automatically zero.  for the cases miter = 1, 2, 4, and 5,
+!             some of these partials are needed.  for the cases
+!             miter = 2 and 5 the necessary derivatives are
+!             approximated numerically by sdriv3, and we only ask the
+!             user to tell sdriv3 the value of ml and mu if the system
+!             is banded.  for the cases miter = 1 and 4 the user must
+!             derive these partials algebraically and encode them in
+!           subroutine jacobn.  by computing these derivatives the
+!             user can often save 20-30 per cent of the computing time.
+!             usually, however, the accuracy is not much affected and
+!             most users will probably forego this option.  the optional
+!             user-written subroutine jacobn has the form:
+!                 subroutine jacobn (n, t, y, dfdy, matdim, ml, mu)
+!                   real y(*), dfdy(matdim,*)
+!                     .
+!                     .
+!                     calculate values of dfdy
+!                     .
+!                     .
+!                 end (sample)
+!             here y is a vector of length at least n.  the actual
+!             length of y is determined by the user's declaration in the
+!             program which calls sdriv3.  thus the dimensioning of y in
+!             jacobn, while required by fortran convention, does not
+!             actually allocate any storage.  when this subroutine is
+!             called, the first n components of y are intermediate
+!             approximations to the solution components.  the user
+!             should not alter these values.  if the system is not
+!             banded (miter=1), the partials of the i-th equation with
+!             respect to the j-th dependent function are to be stored in
+!             dfdy(i,j).  thus partials of the i-th equation are stored
+!             in the i-th row of dfdy.  if the system is banded
+!             (miter=4), then the partials of the i-th equation with
+!             respect to y(j) are to be stored in dfdy(k,j), where
+!             k=i-j+mu+1 .  normally a return from jacobn passes control
+!             back to sdriv3.  however, if the user would like to abort
+!             the calculation, i.e., return control to the program which
+!             calls sdriv3, he should set n to zero.  sdriv3 will signal
+!             this by returning a value of nstate equal to +8(-8).
+!             altering the value of n in jacobn has no effect on the
+!             value of n in the call sequence of sdriv3.
+!
+!    fa     = a subroutine supplied by the user if impl is 1 or 2, and
+!             miter is not 3.  if so, the name must be declared external
+!             in the user's calling program.  this subroutine computes
+!             the array a, where a*dy(i)/dt = f(y(i),t).
+!             there are two cases:
+!
+!               impl=1.
+!               subroutine fa is of the form:
+!                 subroutine fa (n, t, y, a, matdim, ml, mu, nde)
+!                   real y(*), a(matdim,*)
+!                     .
+!                     .
+!                     calculate all values of a
+!                     .
+!                     .
+!                 end (sample)
+!               in this case a is assumed to be a nonsingular matrix,
+!               with the same structure as dfdy (see jacobn description
+!               above).  programming considerations prevent complete
+!               generality.  if miter is 1 or 2, a is assumed to be full
+!               and the user must compute and store all values of
+!               a(i,j), i,j=1, ... ,n.  if miter is 4 or 5, a is assumed
+!               to be banded with lower and upper half bandwidth ml and
+!               mu.  the left hand side of the i-th equation is a linear
+!               combination of dy(i-ml)/dt, dy(i-ml+1)/dt, ... ,
+!               dy(i)/dt, ... , dy(i+mu-1)/dt, dy(i+mu)/dt.  thus in the
+!               i-th equation, the coefficient of dy(j)/dt is to be
+!               stored in a(k,j), where k=i-j+mu+1.
+!               note: the array a will be altered between calls to fa.
+!
+!               impl=2.
+!               subroutine fa is of the form:
+!                 subroutine fa (n, t, y, a, matdim, ml, mu, nde)
+!                   real y(*), a(*)
+!                     .
+!                     .
+!                     calculate non-zero values of a(1),...,a(nde)
+!                     .
+!                     .
+!                 end (sample)
+!               in this case it is assumed that the system is ordered by
+!               the user so that the differential equations appear
+!               first, and the algebraic equations appear last.  the
+!               algebraic equations must be written in the form:
+!               0 = f(y(i),t).  when using this option it is up to the
+!               user to provide initial values for the y(i) that satisfy
+!               the algebraic equations as well as possible.  it is
+!               further assumed that a is a vector of length nde.  all
+!               of the components of a, which may depend on t, y(i),
+!               etc., must be set by the user to non-zero values.
+!             here y is a vector of length at least n.  the actual
+!             length of y is determined by the user's declaration in the
+!             program which calls sdriv3.  thus the dimensioning of y in
+!             fa, while required by fortran convention, does not
+!             actually allocate any storage.  when this subroutine is
+!             called, the first n components of y are intermediate
+!             approximations to the solution components.  the user
+!             should not alter these values.  fa is always called
+!             immediately after calling f, with the same values of t
+!             and y.  normally a return from fa passes control back to
+!             sdriv3.  however, if the user would like to abort the
+!             calculation, i.e., return control to the program which
+!             calls sdriv3, he should set n to zero.  sdriv3 will signal
+!             this by returning a value of nstate equal to +9(-9).
+!             altering the value of n in fa has no effect on the value
+!             of n in the call sequence of sdriv3.
+!
+!    nde    = (input) the number of differential equations.  this is
+!             required only for impl = 2, with nde < n.
+!
+!    mxstep = (input) the maximum number of internal steps allowed on
+!             one call to sdriv3.
+!
+!    g      = a real fortran function supplied by the user
+!             if nroot is not 0.  in this case, the name must be
+!             declared external in the user's calling program.  g is
+!             repeatedly called with different values of iroot to obtain
+!             the value of each of the nroot equations for which a root
+!             is desired.  g is of the form:
+!                   real function g (n, t, y, iroot)
+!                   real y(*)
+!                   go to (10, ...), iroot
+!              10   g = ...
+!                     .
+!                     .
+!                 end (sample)
+!             here, y is a vector of length at least n, whose first n
+!             components are the solution components at the point t.
+!             the user should not alter these values.  the actual length
+!             of y is determined by the user's declaration in the
+!             program which calls sdriv3.  thus the dimensioning of y in
+!             g, while required by fortran convention, does not actually
+!             allocate any storage.  normally a return from g passes
+!             control back to  sdriv3.  however, if the user would like
+!             to abort the calculation, i.e., return control to the
+!             program which calls sdriv3, he should set n to zero.
+!             sdriv3 will signal this by returning a value of nstate
+!             equal to +7(-7).  in this case, the index of the equation
+!             being evaluated is stored in the sixth element of iwork.
+!             altering the value of n in g has no effect on the value of
+!             n in the call sequence of sdriv3.
+!
+!    users  = a subroutine supplied by the user, if miter is 3.
+!             if this is the case, the name must be declared external in
+!             the user's calling program.  the routine users is called
+!             by sdriv3 when certain linear systems must be solved.  the
+!             user may choose any method to form, store and solve these
+!             systems in order to obtain the solution result that is
+!             returned to sdriv3.  in particular, this allows sparse
+!             matrix methods to be used.  the call sequence for this
+!             routine is:
+!
+!              subroutine users (y, yh, ywt, save1, save2, t, h, el,
+!               8                  impl, n, nde, iflag)
+!                real y(*), yh(*), ywt(*), save1(*),
+!               8     save2(*), t, h, el
+!
+!             the input variable iflag indicates what action is to be
+!             taken.subroutine users should perform the following
+!             operations, depending on the value of iflag and impl.
+!
+!               iflag = 0
+!                 impl = 0.  users is not called.
+!                 impl = 1 or 2.  solve the system a*x = save2,
+!                   returning the result in save2.  the array save1 can
+!                   be used as a work array.
+!
+!               iflag = 1
+!                 impl = 0.  compute, decompose and store the matrix
+!                   (i - h*el*j), where i is the identity matrix and j
+!                   is the jacobian matrix of the right hand side.  the
+!                   array save1 can be used as a work array.
+!                 impl = 1 or 2. compute, decompose and store the matrix
+!                   (a - h*el*j).  the array save1 can be used as a work
+!                   array.
+!
+!               iflag = 2
+!                 impl = 0.   solve the system
+!                     (i - h*el*j)*x = h*save2 - yh - save1,
+!                   returning the result in save2.
+!                 impl = 1 or 2.  solve the system
+!                   (a - h*el*j)*x = h*save2 - a*(yh + save1)
+!                   returning the result in save2.
+!                 the array save1 should not be altered.
+!             normally a return from users passes control back to
+!             sdriv3.  however, if the user would like to abort the
+!             calculation, i.e., return control to the program which
+!             calls sdriv3, he should set n to zero.  sdriv3 will signal
+!             this by returning a value of nstate equal to +10(-10).
+!             altering the value of n in users has no effect on the
+!             value of n in the call sequence of sdriv3.
+!
+!  long description
+!
+!  iii.  other communication to the user
+!
+!    a. the solver communicates to the user through the parameters
+!       above.  in addition it writes diagnostic messages through the
+!       standard error handling program xerror.  that program will
+!       terminate the user's run if it detects a probable problem setup
+!       error, e.g., insufficient storage allocated by the user for the
+!       work array.  messages are written on the standard error message
+!       file.  at installations which have this error handling package
+!       the user should determine the standard error handling file from
+!       the local documentation.  otherwise the short but serviceable
+!       routine, xerror, available with this package, can be used.  that
+!       program writes on logical unit 6 to transmit messages.  a
+!       complete description of xerror is given in the sandia
+!       laboratories report sand78-1189 by r. e. jones.  following is a
+!       list of possible errors.  unless otherwise noted, all messages
+!       come from sdriv3:
+!
+!        no.  type         message
+!        ---  ----         -------
+!         1   fatal        from sdriv2: the integration method flag has
+!                          an illegal value.
+!         2   warning      the output point is inconsistent with the
+!                          value of ntask and t.
+!         3   warning      number of steps to reach tout exceeds mxstep.
+!         4   recoverable  requested accuracy is too stringent.
+!         5   warning      step size is below the roundoff level.
+!         6   fatal        eps is less than zero.
+!         7   fatal        n is not positive.
+!         8   fatal        insufficient work space provided.
+!         9   fatal        improper value for nstate, mint, miter and/or
+!                          impl.
+!        10   fatal        the iwork array is too small.
+!        11   fatal        the step size has gone to zero.
+!        12   fatal        excessive amount of work.
+!        13   fatal        for impl=1 or 2, the matrix a is singular.
+!        14   fatal        mxord is not positive.
+!        15   fatal        from sdriv1: n is greater than 200.
+!        16   fatal        from sdriv1: the work array is too small.
+!
+!    b. the first three elements of work and the first five elements of
+!       iwork will contain the following statistical data:
+!         avgh     the average step size used.
+!         hused    the step size last used (successfully).
+!         avgord   the average order used.
+!         imxerr   the index of the element of the solution vector that
+!                  contributed most to the last error test.
+!         nqused   the order last used (successfully).
+!         nstep    the number of steps taken since last initialization.
+!         nfe      the number of evaluations of the right hand side.
+!         nje      the number of evaluations of the jacobian matrix.
+!
+!  iv.  remarks
+!
+!    a. other routines used:
+!         sdntp, sdzro, sdstp, sdntl, sdpst, sdcor, sdcst,
+!         sdpsc, and sdscl;
+!         sgefa, sgesl, sgbfa, sgbsl, and snrm2 (from linpack)
+!         r1mach (from the bell laboratories machine constants package)
+!         xerror (from the slatec common math library)
+!       the last seven routines above, not having been written by the
+!       present authors, are not explicitly part of this package.
+!
+!    b. on any return from sdriv3 all information necessary to continue
+!       the calculation is contained in the call sequence parameters,
+!       including the work arrays.  thus it is possible to suspend one
+!       problem, integrate another, and then return to the first.
+!
+!    c. if this package is to be used in an overlay situation, the user
+!       must declare in the primary overlay the variables in the call
+!       sequence to sdriv3.
+!
+!    d. changing parameters during an integration.
+!       the value of nroot, eps, ewt, ierror, mint, miter, or hmax may
+!       be altered by the user between calls to sdriv3.  for example, if
+!       too much accuracy has been requested (the program returns with
+!       nstate = 4 and an increased value of eps) the user may wish to
+!       increase eps further.  in general, prudence is necessary when
+!       making changes in parameters since such changes are not
+!       implemented until the next integration step, which is not
+!       necessarily the next call to sdriv3.  this can happen if the
+!       program has already integrated to a point which is beyond the
+!       new point tout.
+!
+!    e. as the price for complete control of matrix algebra, the sdriv3
+!       users option puts all responsibility for jacobian matrix
+!       evaluation on the user.  it is often useful to approximate
+!       numerically all or part of the jacobian matrix.  however this
+!       must be done carefully.  the fortran sequence below illustrates
+!       the method we recommend.  it can be inserted directly into
+!       subroutine users to approximate jacobian elements in rows i1
+!       to i2 and columns j1 to j2.
+!              real dfdy(n,n), epsj, h, r, r1mach,
+!             8     save1(n), save2(n), t, uround, y(n), yj, ywt(n)
+!              uround = r1mach(4)
+!              epsj = sqrt(uround)
+!              do j = j1,j2
+!                r = epsj*max(abs(ywt(j)), abs(y(j)))
+!                if (r == 0.0) r = ywt(j)
+!                yj = y(j)
+!                y(j) = y(j) + r
+!                call f (n, t, y, save1)
+!                if (n == 0) return
+!                y(j) = yj
+!                do i = i1,i2
+!                  dfdy(i,j) = (save1(i) - save2(i))/r
+!                end do
+!              end do
+!
+!       many problems give rise to structured sparse jacobians, e.g.,
+!       block banded.  it is possible to approximate them with fewer
+!       function evaluations than the above procedure uses; see curtis,
+!       powell and reid, j. inst. maths applics, (1974), vol. 13,
+!       pp. 117-119.
+!
+!    f. when any of the routines jacobn, fa, g, or users, is not
+!       required, difficulties associated with unsatisfied externals can
+!       be avoided by using the name of the routine which calculates the
+!       right hand side of the differential equations in place of the
+!       corresponding name in the call sequence of sdriv3.
+!
+!  references  gear, c. w., "numerical initial value problems in
+!                 ordinary differential equations", prentice-hall, 1971.
+!
+  integer n
+!
+  real ae
+  real big
+  logical convrg
+  real eps
+  real ewt(*)
+  real g
+  real glast
+  real h
+  real hmax
+  real hsign
+  integer i
+  integer ia
+  integer idfdy
+  integer ierror
+  integer ifac
+  integer iflag
+  integer ignow
+  integer impl
+  integer imxerr
+  integer info
+  integer iroot
+  integer isave1
+  integer isave2
+  integer itroot
+  integer iwork(*)
+  integer iywt
+  integer j
+  integer ja
+  integer jaml
+  integer jerror
+  integer jgnow
+  integer jhyp
+  integer jroot
+  integer jsave2
+  integer jstate
+  integer jtroot
+  integer jyh
+  integer jywt
+  integer lenchk
+  integer leniw
+  integer lenw
+  integer liwchk
+  integer matdim
+  integer maxord
+  integer mint
+  integer miter
+  integer ml
+  character msg*205
+  integer mu
+  integer mxord
+  integer mxstep
+  integer nde
+  integer ndecom
+  integer npar
+  integer nroot
+  real, parameter :: nround = 20.0E+00
+  integer nstate
+  integer nstepl
+  integer ntask
+  real re
+  real r1mach
+  real size
+  real snrm2
+  real sum
+  real t
+  real tlast
+  real tout
+  real troot
+  real uround
+  real work(*)
+  real y(*)
+
+  integer, parameter :: iavgh = 1
+  integer, parameter :: ihused = 2
+  integer, parameter :: iavgrd = 3
+  integer, parameter :: iel = 4
+  integer, parameter :: ih = 160
+  integer, parameter :: ihmax = 161
+  integer, parameter :: ihold = 162
+  integer, parameter :: ihsign = 163
+  integer, parameter :: irc = 164
+  integer, parameter :: irmax = 165
+  integer, parameter :: it = 166
+  integer, parameter :: itout = 167
+  integer, parameter :: itq = 168
+  integer, parameter :: itrend = 204
+  integer, parameter :: iyh = 205
+  integer, parameter :: indmxr = 1
+  integer, parameter :: inqusd = 2
+  integer, parameter :: instep = 3
+  integer, parameter :: infe = 4
+  integer, parameter :: inje = 5
+  integer, parameter :: inroot = 6
+  integer, parameter :: icnvrg = 7
+  integer, parameter :: ijroot = 8
+  integer, parameter :: ijtask = 9
+  integer, parameter :: imntld = 10
+  integer, parameter :: imtrld = 11
+  integer, parameter :: inq = 12
+  integer, parameter :: inrtld = 13
+  integer, parameter :: indtrt = 14
+  integer, parameter :: inwait = 15
+  integer, parameter :: imnt = 16
+  integer, parameter :: imtrsv = 17
+  integer, parameter :: imtr = 18
+  integer, parameter :: imxrds = 19
+  integer, parameter :: imxord = 20
+  integer, parameter :: indprt = 21
+  integer, parameter :: indpvt = 22
+!
+  external f, jacobn, fa, g, users
+!
+  npar = n
+  uround = epsilon ( uround )
+
+  if ( nroot /= 0 ) then
+    ae = tiny ( ae )
+    re = uround
+  end if
+
+  if (eps < 0.0) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SDRIV3 - Fatal error!'
+    write ( *, * ) '  Improper value of EPS.'
+    write ( *, * ) '  EPS = ', eps
+    write ( *, * ) '  EPS should be nonnegative.'
+    stop
+  end if
+
+  if (n <= 0) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SDRIV3 - Fatal error!'
+    write ( *, * ) '  Improper value for the number of equations.'
+    write ( *, * ) '  N = ', n
+    write ( *, * ) '  N should be positive.'
+    stop
+  end if
+
+  if (mxord <= 0) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SDRIV3 - Fatal error!'
+    write ( *, * ) '  Improper value for the maximum order.'
+    write ( *, * ) '  MXORD = ', mxord
+    write ( *, * ) '  MXORD should be positive.'
+    stop
+  end if
+
+  if ((mint < 1 .or. mint > 3) .or. (mint == 3 .and. &
+       (miter == 0 .or. miter == 3 .or. impl /= 0)) &
+       .or. (miter < 0 .or. miter > 5) .or. &
+       (impl /= 0 .and. impl /= 1 .and. impl /= 2) .or. &
+       ((impl == 1 .or. impl == 2) .and. miter == 0) .or. &
+       (impl == 2 .and. mint == 1) .or. &
+       (nstate < 1 .or. nstate > 10)) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SDRIV3 - Fatal error!'
+    write ( *, * ) '  Improper value for some input quantity.'
+    write ( *, * ) '  NSTATE/MSTATE/MINT/MITER/IMPL.'
+    stop
+  end if
+
+  if (miter == 0 .or. miter == 3) then
+    liwchk = indpvt - 1
+  else if (miter == 1 .or. miter == 2 .or. miter == 4 .or. miter == 5) then
+    liwchk = indpvt + n - 1
+  end if
+
+  if (leniw < liwchk) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SDRIV3 - Fatal error!'
+    write ( *, * ) '  Insufficient integer storage.'
+    write ( *, * ) '  LENIW = ', leniw
+    write ( *, * ) '  Required = ', liwchk
+    stop
+  end if
+!
+!  Allocate the work array
+!  iyh is the index of yh in work.
+!
+  if (mint == 1 .or. mint == 3) then
+    maxord = min(mxord, 12)
+  else if (mint == 2) then
+    maxord = min(mxord, 5)
+  end if
+  idfdy = iyh + (maxord + 1)*n
+!
+!  idfdy is the index of dfdy
+!
+  if (miter == 0 .or. miter == 3)  then
+    iywt = idfdy
+  else if (miter == 1 .or. miter == 2)  then
+    iywt = idfdy + n*n
+  else if (miter == 4 .or. miter == 5)  then
+    iywt = idfdy + (2*ml + mu + 1)*n
+  end if
+!
+!  iywt is the index of ywt
+!
+  isave1 = iywt + n
+!                                           isave1 is the index of save1
+  isave2 = isave1 + n
+!                                           isave2 is the index of save2
+  ignow = isave2 + n
+!                                             ignow is the index of gnow
+  itroot = ignow + nroot
+!                                           itroot is the index of troot
+  ifac = itroot + nroot
+!                                               ifac is the index of fac
+  if (miter == 2 .or. miter == 5 .or. mint == 3) then
+    ia = ifac + n
+  else
+    ia = ifac
+  end if
+!
+!  ia is the index of a
+!
+  if (impl == 0 .or. miter == 3) then
+    lenchk = ia - 1
+  else if (impl == 1 .and. (miter == 1 .or. miter == 2)) then
+    lenchk = ia - 1 + n*n
+  else if (impl == 1 .and. (miter == 4 .or. miter == 5)) then
+    lenchk = ia - 1 + (2*ml + mu + 1)*n
+  else if (impl == 2 .and. miter /= 3) then
+    lenchk = ia - 1 + n
+  end if
+
+  if (lenw < lenchk) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SDRIV3 - Fatal error!'
+    write ( *, * ) '  Insufficient real storage.'
+    write ( *, * ) '  LENW = ', lenw
+    write ( *, * ) '  Required = ', lenchk
+    stop
+  end if
+
+  if (miter == 0 .or. miter == 3) then
+    matdim = 1
+  else if (miter == 1 .or. miter == 2) then
+    matdim = n
+  else if (miter == 4 .or. miter == 5) then
+    matdim = 2*ml + mu + 1
+  end if
+
+  if (impl == 0 .or. impl == 1) then
+    ndecom = n
+  else if (impl == 2) then
+    ndecom = nde
+  end if
+
+  if (nstate == 1) then
+!                                                  initialize parameters
+    if (mint == 1 .or. mint == 3) then
+      iwork(imxord) = min(mxord, 12)
+    else if (mint == 2) then
+      iwork(imxord) = min(mxord, 5)
+    end if
+    iwork(imxrds) = mxord
+    if (mint == 1 .or. mint == 2) then
+      iwork(imnt) = mint
+      iwork(imtr) = miter
+      iwork(imntld) = mint
+      iwork(imtrld) = miter
+    else if (mint == 3) then
+      iwork(imnt) = 1
+      iwork(imtr) = 0
+      iwork(imntld) = iwork(imnt)
+      iwork(imtrld) = iwork(imtr)
+      iwork(imtrsv) = miter
+    end if
+
+    work(ihmax) = hmax
+    h = (tout - t)*(1.0E+00 - 4.0*uround)
+    h = sign(min(abs(h), hmax), h)
+    work(ih) = h
+    hsign = sign(1.0, h)
+    work(ihsign) = hsign
+    iwork(ijtask) = 0
+    work(iavgh) = 0.0E+00
+    work(ihused) = 0.0E+00
+    work(iavgrd) = 0.0E+00
+    iwork(indmxr) = 0
+    iwork(inqusd) = 0
+    iwork(instep) = 0
+    iwork(infe) = 0
+    iwork(inje) = 0
+    iwork(inroot) = 0
+    work(it) = t
+    iwork(icnvrg) = 0
+    iwork(indprt) = 0
+!
+!  set initial conditions
+!
+    do i = 1,n
+      jyh = i + iyh - 1
+      work(jyh) = y(i)
+    end do
+
+    if (t == tout) return
+    go to 180
+  end if
+!
+!  on a continuation, check that output points have
+!  been or will be overtaken.
+!
+  if (iwork(icnvrg) == 1) then
+    convrg = .true.
+  else
+    convrg = .false.
+  end if
+  t = work(it)
+  h = work(ih)
+  hsign = work(ihsign)
+  if (iwork(ijtask) == 0) go to 180
+!
+!                                   iwork(ijroot) flags unreported
+!                                   roots, and is set to the value of
+!                                   ntask when a root was last selected.
+!                                   it is set to zero when all roots
+!                                   have been reported.  iwork(inroot)
+!                                   contains the index and work(itout)
+!                                   contains the value of the root last
+!                                   selected to be reported.
+!                                   iwork(inrtld) contains the value of
+!                                   nroot and iwork(indtrt) contains
+!                                   the value of itroot when the array
+!                                   of roots was last calculated.
+  if (nroot /= 0) then
+    jroot = iwork(ijroot)
+    if (jroot > 0) then
+!
+!  tout has just been reported.
+!  if troot <= tout, report troot.
+!
+      if (nstate /= 5) then
+
+       if (tout*hsign >= work(itout)*hsign) then
+          troot = work(itout)
+          call sdntp(h, 0, n, iwork(inq), t, troot, work(iyh),  y)
+          t = troot
+          nstate = 5
+          go to 580
+        end if
+!
+!  a root has just been reported.
+!  select the next root.
+!
+      else
+        troot = t
+        iroot = 0
+
+        do i = 1,iwork(inrtld)
+
+          jtroot = iwork(indtrt) + i - 1
+          if (work(jtroot)*hsign <= troot*hsign) then
+!
+!  check for multiple roots.
+!
+            if (work(jtroot) == work(itout) .and. i > iwork(inroot)) then
+              iroot = i
+              troot = work(jtroot)
+              go to 60
+            end if
+
+            if (work(jtroot)*hsign > work(itout)*hsign) then
+              iroot = i
+              troot = work(jtroot)
+            end if
+
+          end if
+
+        end do
+
+ 60     continue
+
+        iwork(inroot) = iroot
+        work(itout) = troot
+        iwork(ijroot) = ntask
+
+        if (ntask == 1) then
+          if (iroot == 0) then
+            iwork(ijroot) = 0
+          else
+            if (tout*hsign >= troot*hsign) then
+              call sdntp(h, 0, n, iwork(inq), t, troot,work(iyh),y)
+              nstate = 5
+              t = troot
+              go to 580
+            end if
+          end if
+        else if (ntask == 2 .or. ntask == 3) then
+!
+!  if there are no more roots, or the
+!  user has altered tout to be less
+!  than a root, set ijroot to zero.
+!
+          if (iroot == 0 .or. (tout*hsign < troot*hsign)) then
+            iwork(ijroot) = 0
+          else
+            call sdntp(h, 0, n, iwork(inq), t, troot, work(iyh), y)
+            nstate = 5
+            t = troot
+            go to 580
+          end if
+
+        end if
+      end if
+    end if
+  end if
+
+  if (ntask == 1) then
+    nstate = 2
+    if (t*hsign >= tout*hsign) then
+      call sdntp (h, 0, n, iwork(inq), t, tout, work(iyh),  y)
+      t = tout
+      go to 580
+    end if
+  else if (ntask == 2) then
+!
+!  Check if TOUT has been reset.
+!
+    if (t*hsign > tout*hsign) then
+      write ( *, * ) ' '
+      write ( *, * ) 'SDRIV3 - Warning!'
+      write ( *, * ) '  The input T was beyond TOUT.'
+      write ( *, * ) '  The solution was obtained by interpolation.'
+      call sdntp (h, 0, n, iwork(inq), t, tout, work(iyh),  y)
+      t = tout
+      nstate = 2
+      go to 580
+    end if
+!
+!  Determine if tout has been overtaken
+!
+    if (abs(tout - t)<=nround*uround*max(abs(t), abs(tout))) then
+      t = tout
+      nstate = 2
+      go to 560
+    end if
+!
+!  if there are no more roots to report, report t.
+!
+    if (nstate == 5) then
+      nstate = 2
+      go to 560
+    end if
+
+    nstate = 2
+!                                                       see if tout will
+!                                                       be overtaken.
+    if ((t + h)*hsign > tout*hsign) then
+      h = tout - t
+      if ((t + h)*hsign > tout*hsign) h = h*(1.0E+00 - 4.0*uround)
+      work(ih) = h
+      if (h == 0.0) go to 670
+      iwork(ijtask) = -1
+    end if
+
+  else if (ntask == 3) then
+
+    nstate = 2
+
+    if (t*hsign > tout*hsign) then
+      write ( *, * ) ' '
+      write ( *, * ) 'SDRIV3 - Warning!'
+      write ( *, * ) '  The input T was beyond TOUT.'
+      write ( *, * ) '  The solution was obtained by interpolation.'
+      call sdntp (h, 0, n, iwork(inq), t, tout, work(iyh),  y)
+      t = tout
+      go to 580
+    end if
+
+    if (abs(tout - t)<=nround*uround*max(abs(t), abs(tout))) then
+      t = tout
+      go to 560
+    end if
+    if ((t + h)*hsign > tout*hsign) then
+      h = tout - t
+      if ((t + h)*hsign > tout*hsign) h = h*(1.0E+00 - 4.0*uround)
+      work(ih) = h
+      if (h == 0.0) go to 670
+      iwork(ijtask) = -1
+    end if
+  end if
+!
+!  implement changes in mint, miter, and/or hmax.
+!
+  if ((mint /= iwork(imntld) .or. miter /= iwork(imtrld)) .and. &
+    mint /= 3 .and. iwork(imntld) /= 3) iwork(ijtask) = -1
+  if (hmax /= work(ihmax)) then
+    h = sign(min(abs(h), hmax), h)
+    if (h /= work(ih)) then
+      iwork(ijtask) = -1
+      work(ih) = h
+    end if
+    work(ihmax) = hmax
+  end if
+!
+ 180  nstepl = iwork(instep)
+
+  do i = 1,n
+    jyh = iyh + i - 1
+    y(i) = work(jyh)
+  end do
+
+  if (nroot /= 0) then
+    do i = 1,nroot
+      jgnow = ignow + i - 1
+      work(jgnow) = g (npar, t, y, i)
+      if (npar == 0) then
+        iwork(inroot) = i
+        nstate = 7
+        return
+      end if
+    end do
+  end if
+
+  if (ierror == 1) then
+    do i = 1,n
+      jywt = i + iywt - 1
+      work(jywt) = 1.0E+00
+    end do
+    go to 410
+  else if (ierror == 5) then
+    do i = 1,n
+      jywt = i + iywt - 1
+      work(jywt) = ewt(i)
+    end do
+    go to 410
+  end if
+!                                       reset ywt array.  looping point.
+ 260  if (ierror == 2) then
+    do i = 1,n
+      if (y(i) == 0.0) go to 290
+      jywt = i + iywt - 1
+      work(jywt) = abs(y(i))
+    end do
+    go to 410
+ 290    if (iwork(ijtask) == 0) then
+      call f (npar, t, y, work(isave2))
+      if (npar == 0) then
+        nstate = 6
+        return
+      end if
+      iwork(infe) = iwork(infe) + 1
+      if (miter == 3 .and. impl /= 0) then
+        iflag = 0
+        call users(y, work(iyh), work(iywt), work(isave1), &
+          work(isave2), t, h, work(iel), impl, npar, ndecom, iflag)
+        if (npar == 0) then
+          nstate = 10
+          return
+        end if
+      else if (impl == 1) then
+        if (miter == 1 .or. miter == 2) then
+          call fa (npar, t, y, work(ia), matdim, ml, mu, ndecom)
+          if (npar == 0) then
+            nstate = 9
+            return
+          end if
+          call sgefa (work(ia), matdim, n, iwork(indpvt), info)
+          if (info /= 0) go to 690
+          call sgesl(work(ia),matdim,n,iwork(indpvt),work(isave2),0)
+        else if (miter == 4 .or. miter == 5) then
+          jaml = ia + ml
+          call fa (npar, t, y, work(jaml), matdim, ml, mu, ndecom)
+          if (npar == 0) then
+            nstate = 9
+            return
+          end if
+          call sgbfa (work(ia),matdim,n,ml,mu,iwork(indpvt),info)
+          if (info /= 0) go to 690
+          call sgbsl (work(ia), matdim, n, ml, mu, iwork(indpvt), &
+            work(isave2), 0)
+
+        end if
+
+      else if (impl == 2) then
+
+        call fa (npar, t, y, work(ia), matdim, ml, mu, ndecom)
+        if (npar == 0) then
+          nstate = 9
+          return
+        end if
+
+        do i = 1,ndecom
+          ja = i + ia - 1
+          jsave2 = i + isave2 - 1
+          if (work(ja) == 0.0) go to 690
+          work(jsave2) = work(jsave2)/work(ja)
+        end do
+
+      end if
+
+    end if
+
+    do j = i,n
+
+      jywt = j + iywt - 1
+
+      if (y(j) /= 0.0) then
+        work(jywt) = abs(y(j))
+      else
+        if (iwork(ijtask) == 0) then
+          jsave2 = j + isave2 - 1
+          work(jywt) = abs(h*work(jsave2))
+        else
+          jhyp = j + iyh + n - 1
+          work(jywt) = abs(work(jhyp))
+        end if
+      end if
+
+      if (work(jywt) == 0.0) work(jywt) = uround
+
+    end do
+
+  else if (ierror == 3) then
+
+    do i = 1,n
+      jywt = i + iywt - 1
+      work(jywt) = max(ewt(1), abs(y(i)))
+    end do
+
+  else if (ierror == 4) then
+
+    do i = 1,n
+      jywt = i + iywt - 1
+      work(jywt) = max(ewt(i), abs(y(i)))
+    end do
+
+  end if
+
+ 410  continue
+
+  do i = 1,n
+    jywt = i + iywt - 1
+    jsave2 = i + isave2 - 1
+    work(jsave2) = y(i)/work(jywt)
+  end do
+
+  sum = snrm2(n, work(isave2), 1)/sqrt(real(n))
+
+  if (eps < sum*uround) then
+    eps = sum*uround*(1.0E+00 + 10.0*uround)
+    write ( *, * ) ' '
+    write ( *, * ) 'SDRIV3 - Warning!'
+    write ( *, * ) '  The requested accuracy EPS was not obtainable.'
+    write ( *, * ) '  EPS has been increased to ', eps
+    nstate = 4
+    go to 560
+  end if
+
+  if (abs(h) >= uround*abs(t)) then
+    iwork(indprt) = 0
+  else if (iwork(indprt) == 0) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SDRIV3 - Warning!'
+    write ( *, * ) '  The stepsize is smaller than roundoff.'
+    write ( *, * ) '  This may occur when there is an abrupt change'
+    write ( *, * ) '  in the right hand side.'
+    iwork(indprt) = 1
+  end if
+
+  if ( ntask /= 2 ) then
+    if ((iwork(instep)-nstepl) > mxstep) then
+      write ( *, * ) ' '
+      write ( *, * ) 'SDRIV3 - Warning!'
+      write ( *, * ) '  Number of steps taken = ', mxstep
+      write ( *, * ) '  TOUT not reached.'
+      nstate = 3
+      go to 560
+    end if
+  end if
+
+  call sdstp (eps, f, fa, work(ihmax), impl, jacobn, matdim, &
+    iwork(imxord), iwork(imnt), iwork(imtr), ml, mu, npar, &
+    ndecom, work(iywt), uround, users,  work(iavgh), &
+    work(iavgrd), work(ih), work(ihused), iwork(ijtask), &
+    iwork(imntld), iwork(imtrld), iwork(infe), iwork(inje), &
+    iwork(inqusd), iwork(instep), work(it), y, work(iyh), &
+    work(ia), convrg, work(idfdy), work(iel), work(ifac), &
+    work(ihold), iwork(indpvt), jstate, iwork(inq), &
+    iwork(inwait), work(irc), work(irmax), work(isave1), &
+    work(isave2), work(itq), work(itrend), mint, &
+    iwork(imtrsv), iwork(imxrds))
+
+  t = work(it)
+  h = work(ih)
+  go to (470, 670, 680, 690, 690, 660, 660, 660, 660, 660), jstate
+
+ 470  iwork(ijtask) = 1
+!
+!  determine if a root has been overtaken
+!
+  if (nroot /= 0) then
+    iroot = 0
+
+    do i = 1,nroot
+
+      jtroot = itroot + i - 1
+      jgnow = ignow + i - 1
+      glast = work(jgnow)
+      work(jgnow) = g (npar, t, y, i)
+
+      if (npar == 0) then
+        iwork(inroot) = i
+        nstate = 7
+        return
+      end if
+
+      if (glast*work(jgnow) > 0.0) then
+        work(jtroot) = t + h
+      else
+        if (work(jgnow) == 0.0) then
+          work(jtroot) = t
+          iroot = i
+        else
+          if (glast == 0.0) then
+            work(jtroot) = t + h
+          else
+            if (abs(work(ihused)) >= uround*abs(t)) then
+              tlast = t - work(ihused)
+              iroot = i
+              troot = t
+              call sdzro (ae, g, h, npar, iwork(inq), iroot, re, t, &
+                work(iyh), uround,  troot, tlast, work(jgnow), glast,  y)
+              do j = 1,n
+                y(j) = work(iyh + j -1)
+              end do
+              if (npar == 0) then
+                iwork(inroot) = i
+                nstate = 7
+                return
+              end if
+              work(jtroot) = troot
+            else
+              work(jtroot) = t
+              iroot = i
+            end if
+          end if
+        end if
+      end if
+
+    end do
+
+    if (iroot == 0) then
+      iwork(ijroot) = 0
+!                                                  select the first root
+    else
+
+      iwork(ijroot) = ntask
+      iwork(inrtld) = nroot
+      iwork(indtrt) = itroot
+      troot = t + h
+
+      do i = 1,nroot
+        jtroot = itroot + i - 1
+        if (work(jtroot)*hsign < troot*hsign) then
+          troot = work(jtroot)
+          iroot = i
+        end if
+      end do
+
+      iwork(inroot) = iroot
+      work(itout) = troot
+
+      if (troot*hsign <= tout*hsign) then
+        call sdntp (h, 0, n, iwork(inq), t, troot, work(iyh),  y)
+        nstate = 5
+        t = troot
+        go to 580
+      end if
+
+    end if
+  end if
+!                               test for ntask condition to be satisfied
+  nstate = 2
+  if (ntask == 1) then
+    if (t*hsign < tout*hsign) go to 260
+    call sdntp (h, 0, n, iwork(inq), t, tout, work(iyh),  y)
+    t = tout
+    go to 580
+!                               tout is assumed to have been attained
+!                               exactly if t is within twenty roundoff
+!                               units of tout, relative to max(tout, t).
+  else if (ntask == 2) then
+    if (abs(tout - t)<=nround*uround*max(abs(t), abs(tout))) then
+      t = tout
+    else
+      if ((t + h)*hsign > tout*hsign) then
+        h = tout - t
+        if ((t + h)*hsign>tout*hsign) h = h*(1.0E+00 - 4.0*uround)
+        work(ih) = h
+        if (h == 0.0) go to 670
+        iwork(ijtask) = -1
+      end if
+    end if
+  else if (ntask == 3) then
+    if (abs(tout - t)<=nround*uround*max(abs(t), abs(tout))) then
+      t = tout
+    else
+      if ((t + h)*hsign > tout*hsign) then
+        h = tout - t
+        if ((t + h)*hsign>tout*hsign) h = h*(1.0E+00 - 4.0*uround)
+        work(ih) = h
+        if (h == 0.0) go to 670
+        iwork(ijtask) = -1
+      end if
+      go to 260
+    end if
+  end if
+!  all returns are made through this
+!  section.  imxerr is determined.
+ 560  continue
+
+  do i = 1,n
+    jyh = i + iyh - 1
+    y(i) = work(jyh)
+  end do
+
+ 580  if (convrg) then
+    iwork(icnvrg) = 1
+  else
+    iwork(icnvrg) = 0
+  end if
+  if (iwork(ijtask) == 0) return
+  big = 0.0E+00
+  imxerr = 1
+  iwork(indmxr) = imxerr
+  do i = 1,n
+!                                            size = abs(error(i)/ywt(i))
+    jywt = i + iywt - 1
+    jerror = i + isave1 - 1
+    size = abs(work(jerror)/work(jywt))
+    if (big < size) then
+      big = size
+      imxerr = i
+      iwork(indmxr) = imxerr
+    end if
+  end do
+
+  return
+!
+ 660  nstate = jstate
+  return
+
+670 continue
+
+  write ( *, * ) ' '
+  write ( *, * ) 'SDRIV3 - Fatal error!'
+  write ( *, * ) '  The attempted stepsize has been reduced to zero.'
+  write ( *, * ) '  The problem setup may be incorrect.'
+  stop
+
+680 continue
+
+  write ( *, * ) ' '
+  write ( *, * ) 'SDRIV3 - Fatal error!'
+  write ( *, * ) '  The stepsize has been reduced about 50 times.'
+  write ( *, * ) '  The problem setup may be incorrect.'
+  stop
+
+690 continue
+
+  write ( *, * ) ' '
+  write ( *, * ) 'SDRIV3 - Fatal error!'
+  write ( *, * ) '  Matrix A is singular.'
+  stop
+end
+subroutine sdscl (hmax,n,nq,rmax,h,rc,rh,yh)
+!
+!*******************************************************************************
+!
+!! SDSCL rescales the YH array whenever the ODE step size is changed.
+!
+!
+!  SDSCL is a utility routine for the SDRIV family of ODE solvers.
+!
+  integer n
+!
+  real h
+  real hmax
+  integer j
+  integer nq
+  real r1
+  real rc
+  real rh
+  real rmax
+  real yh(n,*)
+!
+  if ( h < 1.0E+00 ) then
+    rh = min ( abs(h)*rh, abs(h)*rmax, hmax ) / abs(h)
+  else
+    rh = min ( rh, rmax, hmax/abs(h) )
+  end if
+
+  r1 = 1.0E+00
+
+  do j = 1, nq
+    r1 = r1 * rh
+    yh(1:n,j+1) = yh(1:n,j+1) * r1
+  end do
+
+  h = h*rh
+  rc = rc*rh
+
+  return
+end
+subroutine sdstp (eps,f,fa,hmax,impl,jacobn,matdim,maxord,mint, &
+  miter,ml,mu,n,nde,ywt,uround,users,avgh,avgord,h,hused,jtask, &
+  mntold,mtrold,nfe,nje,nqused,nstep,t,y,yh,a,convrg,dfdy,el,fac, &
+  hold,ipvt,jstate,nq,nwait,rc,rmax,save1,save2,tq,trend,iswflg, &
+  mtrsv,mxrdsv)
+!
+!*******************************************************************************
+!
+!! SDSTP performs one step of the integration of an initial value
+!  problem for a system of ordinary differential equations.
+!  communication with sdstp is done with the following variables:
+!
+!    yh      an n by maxord+1 array containing the dependent variables
+!              and their scaled derivatives.  maxord, the maximum order
+!              used, is currently 12 for the adams methods and 5 for the
+!              gear methods.  yh(i,j+1) contains the j-th derivative of
+!              y(i), scaled by h**j/factorial(j).  only y(i),
+!              1 <= i <= n, need be set by the calling program on
+!              the first entry.  the yh array should not be altered by
+!              the calling program.  when referencing yh as a
+!              2-dimensional array, use a column length of n, as this is
+!              the value used in sdstp.
+!    dfdy    a block of locations used for partial derivatives if miter
+!              is not 0.  if miter is 1 or 2 its length must be at least
+!              n*n.  if miter is 4 or 5 its length must be at least
+!              (2*ml+mu+1)*n.
+!    ywt     an array of n locations used in convergence and error tests
+!    save1
+!    save2   arrays of length n used for temporary storage.
+!    ipvt    an integer array of length n used by the linear system
+!              solvers for the storage of row interchange information.
+!    a       a block of locations used to store the matrix a, when using
+!              the implicit method.  if impl is 1, a is a matdim by n
+!              array.  if miter is 1 or 2 matdim is n, and if miter is 4
+!              or 5 matdim is 2*ml+mu+1.  if impl is 2 its length is n.
+!    jtask   an integer used on input.
+!              it has the following values and meanings:
+!                 == 0  perform the first step.  this value enables
+!                         the subroutine to initialize itself.
+!                > 0  take a new step continuing from the last.
+!                         assumes the last step was successful and
+!                         user has not changed any parameters.
+!                 < 0  take a new step with a new value of h and/or
+!                         mint and/or miter.
+!    jstate  a completion code with the following meanings:
+!                1  the step was successful.
+!                2  a solution could not be obtained with h /= 0.
+!                3  a solution was not obtained in mxtry attempts.
+!                4  for impl /= 0, the matrix a is singular.
+!              on a return with jstate > 1, the values of t and
+!              the yh array are as of the beginning of the last
+!              step, and h is the last step size attempted.
+!
+  integer matdim
+  integer n
+!
+  real a(matdim,*)
+  real avgh
+  real avgord
+  real bnd
+  logical convrg
+  real ctest
+  real d
+  real denom
+  real dfdy(matdim,*)
+  real d1
+  real el(13,12)
+  real eps
+  real erdn
+  real erup
+  real etest
+  logical evalfa
+  logical evaljc
+  real fac(*)
+  real h
+  real hmax
+  real hn
+  real hold
+  real hs
+  real hused
+  integer i
+  logical, save :: ier = .false.
+  integer impl
+  integer ipvt(*)
+  integer iswflg
+  integer iter
+  integer j
+  integer jstate
+  integer jtask
+  integer maxord
+  integer mint
+  integer miter
+  integer ml
+  integer mntold
+  integer mtrold
+  integer mtrsv
+  integer mu
+  integer mxrdsv
+  integer nde
+  integer nfail
+  integer nfe
+  integer nje
+  integer nq
+  integer nqused
+  integer nstep
+  integer nsv
+  integer ntry
+  real numer
+  integer nwait
+  real rc
+  real rh
+  real rh1
+  real rh2
+  real rh3
+  real rmax
+  real save1(*)
+  real save2(*)
+  real snrm2
+  logical switch
+  real t
+  real told
+  real tq(3,12)
+  real trend
+  real uround
+  real y(*)
+  real yh(n,*)
+  real ywt(*)
+  real y0nrm
+
+  real, parameter :: bias1 = 1.30
+  real, parameter :: bias2 = 1.20
+  real, parameter :: bias3 = 1.40
+  integer, parameter :: mxfail = 3
+  integer, parameter :: mxiter = 3
+  integer, parameter :: mxtry = 50
+  real, parameter :: rctest = .30
+  real, parameter :: rmfail = 2.0E+00
+  real, parameter :: rmnorm = 10.0E+00
+  real, parameter :: trshld = 1.0E+00
+!
+  external f, jacobn, fa, users
+!
+  nsv = n
+  bnd = 0.0E+00
+  switch = .false.
+  ntry = 0
+  told = t
+  nfail = 0
+  if (jtask <= 0) then
+    call sdntl (eps, f, fa, hmax, hold, impl, jtask, matdim, &
+      maxord, mint, miter, ml, mu, n, nde, save1, t, &
+      uround, users, y, ywt,  h, mntold, mtrold, nfe, rc, &
+      yh,  a, convrg, el, fac, ier, ipvt, nq, nwait, rh, &
+      rmax, save2, tq, trend, iswflg, jstate)
+    if (n == 0) go to 440
+    if (h == 0.0) go to 400
+    if (ier) go to 420
+  end if
+
+ 100  ntry = ntry + 1
+  if (ntry > mxtry) go to 410
+  t = t + h
+  call sdpsc (1, n, nq,  yh)
+  evaljc = ((abs(rc - 1.0) > rctest) .and. (miter /= 0))
+  evalfa = .not. evaljc
+
+ 110  iter = 0
+
+  y(1:n) = yh(1:n,1)
+
+  call f (n, t, y, save2)
+
+  if (n == 0) then
+    jstate = 6
+    go to 430
+  end if
+
+  nfe = nfe + 1
+
+  if (evaljc .or. ier) then
+    call sdpst (el, f, fa, h, impl, jacobn, matdim, miter, ml, &
+      mu, n, nde, nq, save2, t, users, y, yh, ywt, uround, &
+      nfe, nje,  a, dfdy, fac, ier, ipvt, save1, iswflg, &
+      bnd, jstate)
+
+    if (n == 0) go to 430
+    if (ier) go to 160
+    convrg = .false.
+    rc = 1.0E+00
+  end if
+
+  save1(1:n) = 0.0E+00
+!                      up to mxiter corrector iterations are taken.
+!                      convergence is tested by requiring the r.m.s.
+!                      norm of changes to be less than eps.  the sum of
+!                      the corrections is accumulated in the vector
+!                      save1(i).  it is approximately equal to the l-th
+!                      derivative of y multiplied by
+!                      h**l/(factorial(l-1)*el(l,nq)), and is thus
+!                      proportional to the actual errors to the lowest
+!                      power of h present (h**l).  the yh array is not
+!                      altered in the correction loop.  the norm of the
+!                      iterate difference is stored in d.  if
+!                      iter > 0, an estimate of the convergence rate
+!                      constant is stored in trend, and this is used in
+!                      the convergence test.
+!
+ 130  call sdcor (dfdy, el, fa, h, impl, ipvt, matdim, miter, ml, &
+        mu, n, nde, nq, t, users, y, yh, ywt,  evalfa, save1, &
+        save2,  a, d, jstate)
+
+    if (n == 0) go to 430
+
+  if (iswflg == 3 .and. mint == 1) then
+
+    if (iter == 0) then
+
+      numer = snrm2(n, save1, 1)
+
+      do i = 1,n
+        dfdy(1,i) = save1(i)
+      end do
+
+      y0nrm = snrm2(n, yh, 1)
+
+    else
+
+      denom = numer
+
+      do i = 1,n
+        dfdy(1,i) = save1(i) - dfdy(1,i)
+      end do
+
+      numer = snrm2(n, dfdy, matdim)
+
+      if (el(1,nq)*numer <= 100.0*uround*y0nrm) then
+        if (rmax == rmfail) then
+          switch = .true.
+          go to 170
+        end if
+      end if
+
+      do i = 1,n
+        dfdy(1,i) = save1(i)
+      end do
+
+      if (denom /= 0.0) then
+        bnd = max(bnd, numer/(denom*abs(h)*el(1,nq)))
+      end if
+
+    end if
+  end if
+
+  if (iter > 0) then
+    trend = max(.9*trend, d/d1)
+  end if
+
+  d1 = d
+  ctest = min(2.0*trend, 1.0)*d
+  if (ctest <= eps) go to 170
+  iter = iter + 1
+  if (iter < mxiter) then
+    do i = 1,n
+      y(i) = yh(i,1) + el(1,nq)*save1(i)
+    end do
+    call f (n, t, y, save2)
+    if (n == 0) then
+      jstate = 6
+      go to 430
+    end if
+    nfe = nfe + 1
+    go to 130
+  end if
+!                     the corrector iteration failed to converge in
+!                     mxiter tries.  if partials are involved but are
+!                     not up to date, they are reevaluated for the next
+!                     try.  otherwise the yh array is retracted to its
+!                     values before prediction, and h is reduced, if
+!                     possible.  if not, a no-convergence exit is taken.
+  if (convrg) then
+    evaljc = .true.
+    evalfa = .false.
+    go to 110
+  end if
+
+ 160  t = told
+  call sdpsc (-1, n, nq,  yh)
+  nwait = nq + 2
+  if (jtask /= 0 .and. jtask /= 2) rmax = rmfail
+
+  if (iter == 0) then
+    rh = .3
+  else
+    rh = .9*(eps/ctest)**(.2)
+  end if
+
+  if (rh*h == 0.0) go to 400
+  call sdscl (hmax, n, nq, rmax,  h, rc, rh, yh)
+  go to 100
+!                          the corrector has converged.  convrg is set
+!                          to .true. if partial derivatives were used,
+!                          to indicate that they may need updating on
+!                          subsequent steps.  the error test is made.
+ 170  convrg = (miter /= 0)
+
+  do i = 1,nde
+    save2(i) = save1(i)/ywt(i)
+  end do
+
+  etest = snrm2(nde, save2, 1)/(tq(2,nq)*sqrt(real(nde)))
+!
+!                           the error test failed.  nfail keeps track of
+!                           multiple failures.  restore t and the yh
+!                           array to their previous values, and prepare
+!                           to try the step again.  compute the optimum
+!                           step size for this or one lower order.
+  if (etest > eps) then
+    t = told
+    call sdpsc (-1, n, nq,  yh)
+    nfail = nfail + 1
+    if (nfail < mxfail) then
+      if (jtask /= 0 .and. jtask /= 2) rmax = rmfail
+      rh2 = 1.0/(bias2*(etest/eps)**(1.0/real(nq+1)))
+      if (nq > 1) then
+        do i = 1,nde
+          save2(i) = yh(i,nq+1)/ywt(i)
+        end do
+        erdn = snrm2(nde, save2, 1)/(tq(1,nq)*sqrt(real(nde)))
+        rh1 = 1.0/max(1.0, bias1*(erdn/eps)**(1.0/real(nq)))
+        if (rh2 < rh1) then
+          nq = nq - 1
+          rc = rc*el(1,nq)/el(1,nq+1)
+          rh = rh1
+        else
+          rh = rh2
+        end if
+      else
+        rh = rh2
+      end if
+      nwait = nq + 2
+      if (rh*h == 0.0) go to 400
+      call sdscl (hmax, n, nq, rmax,  h, rc, rh, yh)
+      go to 100
+    end if
+!                control reaches this section if the error test has
+!                failed mxfail or more times.  it is assumed that the
+!                derivatives that have accumulated in the yh array have
+!                errors of the wrong order.  hence the first derivative
+!                is recomputed, the order is set to 1, and the step is
+!                retried.
+    nfail = 0
+    jtask = 2
+    do i = 1,n
+      y(i) = yh(i,1)
+    end do
+
+    call sdntl (eps, f, fa, hmax, hold, impl, jtask, matdim, &
+      maxord, mint, miter, ml, mu, n, nde, save1, t, &
+      uround, users, y, ywt,  h, mntold, mtrold, nfe, rc, &
+      yh,  a, convrg, el, fac, ier, ipvt, nq, nwait, rh, &
+      rmax, save2, tq, trend, iswflg, jstate)
+    rmax = rmnorm
+    if (n == 0) go to 440
+    if (h == 0.0) go to 400
+    if (ier) go to 420
+    go to 100
+  end if
+!                          after a successful step, update the yh array.
+  nstep = nstep + 1
+  hused = h
+  nqused = nq
+  avgh = (real(nstep-1)*avgh + h)/real(nstep)
+  avgord = (real(nstep-1)*avgord + real(nq))/real(nstep)
+
+  do j = 1,nq+1
+    do i = 1,n
+      yh(i,j) = yh(i,j) + el(j,nq)*save1(i)
+    end do
+  end do
+
+  y(1:n) = yh(1:n,1)
+!                                          if iswflg is 3, consider
+!                                          changing integration methods.
+  if (iswflg == 3) then
+    if (bnd /= 0.0) then
+      if (mint == 1 .and. nq <= 5) then
+        hn = abs(h)/max(uround, (etest/eps)**(1.0/real(nq+1)))
+        hn = min(hn, 1.0/(2.0*el(1,nq)*bnd))
+        hs = abs(h)/max(uround,(etest/(eps*el(nq+1,1)))**(1.0/real(nq+1)))
+        if (hs > 1.2*hn) then
+          mint = 2
+          mntold = mint
+          miter = mtrsv
+          mtrold = miter
+          maxord = min(mxrdsv, 5)
+          rc = 0.0E+00
+          rmax = rmnorm
+          trend = 1.0E+00
+          call sdcst (maxord, mint, iswflg, el, tq)
+          nwait = nq + 2
+        end if
+      else if (mint == 2) then
+        hs = abs(h)/max(uround, (etest/eps)**(1.0/real(nq+1)))
+        hn = abs(h)/max(uround,(etest*el(nq+1,1)/eps)**(1.0/real(nq+1)))
+        hn = min(hn, 1.0/(2.0*el(1,nq)*bnd))
+        if (hn >= hs) then
+          mint = 1
+          mntold = mint
+          miter = 0
+          mtrold = miter
+          maxord = min(mxrdsv, 12)
+          rmax = rmnorm
+          trend = 1.0E+00
+          convrg = .false.
+          call sdcst (maxord, mint, iswflg, el, tq)
+          nwait = nq + 2
+        end if
+      end if
+    end if
+  end if
+
+  if (switch) then
+    mint = 2
+    mntold = mint
+    miter = mtrsv
+    mtrold = miter
+    maxord = min(mxrdsv, 5)
+    nq = min(nq, maxord)
+    rc = 0.0E+00
+    rmax = rmnorm
+    trend = 1.0E+00
+    call sdcst (maxord, mint, iswflg, el, tq)
+    nwait = nq + 2
+  end if
+!                           consider changing h if nwait = 1.  otherwise
+!                           decrease nwait by 1.  if nwait is then 1 and
+!                           nq<maxord, then save1 is saved for use in
+!                           a possible order increase on the next step.
+!
+  if (jtask == 0 .or. jtask == 2) then
+
+    rh = 1.0/max(uround, bias2*(etest/eps)**(1.0/real(nq+1)))
+    if (rh>trshld) call sdscl (hmax, n, nq, rmax, h, rc, rh, yh)
+
+  else if (nwait > 1) then
+
+    nwait = nwait - 1
+
+    if (nwait == 1 .and. nq < maxord) then
+      do i = 1,nde
+        yh(i,maxord+1) = save1(i)
+      end do
+    end if
+!             if a change in h is considered, an increase or decrease in
+!             order by one is considered also.  a change in h is made
+!             only if it is by a factor of at least trshld.  factors
+!             rh1, rh2, and rh3 are computed, by which h could be
+!             multiplied at order nq - 1, order nq, or order nq + 1,
+!             respectively.  the largest of these is determined and the
+!             new order chosen accordingly.  if the order is to be
+!             increased, we compute one additional scaled derivative.
+!             if there is a change of order, reset nq and the
+!             coefficients.  in any case h is reset according to rh and
+!             the yh array is rescaled.
+  else
+    if (nq == 1) then
+      rh1 = 0.0E+00
+    else
+      do i = 1,nde
+        save2(i) = yh(i,nq+1)/ywt(i)
+      end do
+      erdn = snrm2(nde, save2, 1)/(tq(1,nq)*sqrt(real(nde)))
+      rh1 = 1.0/max(uround, bias1*(erdn/eps)**(1.0/real(nq)))
+    end if
+
+    rh2 = 1.0/max(uround, bias2*(etest/eps)**(1.0/real(nq+1)))
+
+    if (nq == maxord) then
+      rh3 = 0.0E+00
+    else
+      do i = 1,nde
+        save2(i) = (save1(i) - yh(i,maxord+1))/ywt(i)
+      end do
+      erup = snrm2(nde, save2, 1)/(tq(3,nq)*sqrt(real(nde)))
+      rh3 = 1.0/max(uround, bias3*(erup/eps)**(1.0/real(nq+2)))
+    end if
+
+    if (rh1 > rh2 .and. rh1 >= rh3) then
+      rh = rh1
+      if (rh <= trshld) go to 380
+      nq = nq - 1
+      rc = rc*el(1,nq)/el(1,nq+1)
+    else if (rh2 >= rh1 .and. rh2 >= rh3) then
+      rh = rh2
+      if (rh <= trshld) go to 380
+    else
+      rh = rh3
+      if (rh <= trshld) go to 380
+      do i = 1,n
+        yh(i,nq+2) = save1(i)*el(nq+1,nq)/real(nq+1)
+      end do
+      nq = nq + 1
+      rc = rc*el(1,nq)/el(1,nq-1)
+    end if
+
+    if (iswflg == 3 .and. mint == 1) then
+      if (bnd/=0.0) rh = min(rh, 1.0/(2.0*el(1,nq)*bnd*abs(h)))
+    end if
+
+    call sdscl (hmax, n, nq, rmax,  h, rc, rh, yh)
+    rmax = rmnorm
+ 380    nwait = nq + 2
+  end if
+!               all returns are made through this section.  h is saved
+!               in hold to allow the caller to change h on the next step
+  jstate = 1
+  hold = h
+  return
+
+ 400  jstate = 2
+  hold = h
+  do i = 1,n
+    y(i) = yh(i,1)
+  end do
+  return
+
+ 410  jstate = 3
+  hold = h
+  return
+
+ 420  jstate = 4
+  hold = h
+  return
+
+ 430  t = told
+  call sdpsc (-1, nsv, nq,  yh)
+  do i = 1,nsv
+    y(i) = yh(i,1)
+  end do
+ 440  hold = h
+  return
+end
+subroutine sdzro (ae,f,h,n,nq,iroot,re,t,yh,uround,b,c,fb,fc,y)
+!
+!*******************************************************************************
+!
+!! SDZRO is a special purpose version of zeroin, modified for use with
+!     the sdriv1 package.
+!
+!     sandia mathematical program library
+!     mathematical computing services division 5422
+!     sandia laboratories
+!     p. o. box 5800
+!     albuquerque, new mexico  87115
+!     control data 6600 version 4.5, 1 november 1971
+!
+!  Discussion:
+!
+!    zeroin searches for a zero of a function f(n, t, y, iroot)
+!    between the given values b and c until the width of the
+!    interval (b, c) has collapsed to within a tolerance specified
+!    by the stopping criterion, abs(b - c) <= 2.*(rw*abs(b) + ae).
+!
+!  Parameters:
+!
+!        f     - name of the external function, which returns a
+!                real result.  this name must be in an
+!                external statement in the calling program.
+!        b     - one end of the interval (b, c).  the value returned for
+!                b usually is the better approximation to a zero of f.
+!        c     - the other end of the interval (b, c).
+!        re    - relative error used for rw in the stopping criterion.
+!                if the requested re is less than machine precision,
+!                then rw is set to approximately machine precision.
+!        ae    - absolute error used in the stopping criterion.  if the
+!                given interval (b, c) contains the origin, then a
+!                nonzero value should be chosen for ae.
+!
+!     references
+!       1.  l f shampine and h a watts, zeroin, a root-solving routine,
+!           sc-tm-70-631, sept 1970.
+!       2.  t j dekker, finding a zero by means of successive linear
+!           interpolation, "constructive aspects of the fundamental
+!           theorem of algebra", edited by b dejon and p henrici, 1969.
+!
+  integer n
+!
+  real a
+  real acbs
+  real acmb
+  real ae
+  real b
+  real c
+  real cmb
+  real er
+  real f
+  real fa
+  real fb
+  real fc
+  real h
+  integer ic
+  integer iroot
+  integer kount
+  integer nq
+  real p
+  real q
+  real re
+  real rw
+  real t
+  real tol
+  real uround
+  real y(*)
+  real yh(n,*)
+!
+  external f
+!
+  er = 4.0*uround
+  rw = max(re, er)
+  ic = 0
+  acbs = abs(b - c)
+  a = c
+  fa = fc
+  kount = 0
+!                                                    perform interchange
+ 10 continue
+
+  if (abs(fc) < abs(fb)) then
+    a = b
+    fa = fb
+    b = c
+    fb = fc
+    c = a
+    fc = fa
+  end if
+
+  cmb = 0.5*(c - b)
+  acmb = abs(cmb)
+  tol = rw*abs(b) + ae
+!                                                test stopping criterion
+  if (acmb <= tol) return
+  if (kount > 50) return
+!                                    calculate new iterate implicitly as
+!                                    b + p/q, where we arrange p >= 0.
+!                         the implicit form is used to prevent overflow.
+  p = (b - a)*fb
+  q = fa - fb
+  if (p < 0.0) then
+    p = -p
+    q = -q
+  end if
+!                          update a and check for satisfactory reduction
+!                          in the size of our bounding interval.
+  a = b
+  fa = fb
+  ic = ic + 1
+  if (ic >= 4) then
+    if (8.0*acmb >= acbs) then
+!                                                                 bisect
+      b = 0.5*(c + b)
+      go to 20
+    end if
+    ic = 0
+  end if
+  acbs = acmb
+!                                            test for too small a change
+  if (p <= abs(q)*tol) then
+!                                                 increment by tolerance
+    b = b + sign(tol, cmb)
+!                                               root ought to be between
+!                                               b and (c + b)/2.
+  else if (p < cmb*q) then
+!                                                            interpolate
+    b = b + p/q
+  else
+!                                                                 bisect
+    b = 0.5*(c + b)
+  end if
+!
+!  have completed computation for new iterate b.
+!
+ 20   continue
+
+  call sdntp (h, 0, n, nq, t, b, yh,  y)
+  fb = f(n, b, y, iroot)
+  if (n == 0) return
+  if (fb == 0.0) return
+  kount = kount + 1
+!
+!  Decide whether next step is interpolation or extrapolation
+!
+  if (sign(1.0, fb) == sign(1.0, fc)) then
+    c = a
+    fc = fa
+  end if
+  go to 10
+end
+subroutine secfac(nr,n,x,g,a,xpls,gpls,epsm,itncnt,rnf, &
+  iagflg,noupdt,s,y,u,w)
+!
+!*******************************************************************************
+!
+!! SECFAC updates the hessian by the bfgs factored method.
+!
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! x(n)         --> old iterate, x[k-1]
+! g(n)         --> gradient or approximate at old iterate
+! a(n,n)      <--> on entry: cholesky decomposition of hessian in
+!                    lower part and diagonal.
+!                  on exit:  updated cholesky decomposition of hessian
+!                    in lower triangular part and diagonal
+! xpls(n)      --> new iterate, x[k]
+! gpls(n)      --> gradient or approximate at new iterate
+! epsm         --> machine epsilon
+! itncnt       --> iteration count
+! rnf          --> relative noise in optimization function fcn
+! iagflg       --> =1 if analytic gradient supplied, =0 itherwise
+! noupdt      <--> boolean: no update yet
+!                  [retain value between successive calls]
+! s(n)         --> workspace
+! y(n)         --> workspace
+! u(n)         --> workspace
+! w(n)         --> workspace
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real alp
+  real den1
+  real den2
+  real epsm
+  real g(n)
+  real gpls(n)
+  integer i
+  integer iagflg
+  integer itncnt
+  integer j
+  logical noupdt
+  real reltol
+  real rnf
+  real s(n)
+  logical skpupd
+  real snorm2
+  real snrm2
+  real u(n)
+  real w(n)
+  real x(n)
+  real xpls(n)
+  real y(n)
+  real ynrm2
+!
+  if ( itncnt==1) noupdt=.true.
+
+  s(1:n) = xpls(1:n) - x(1:n)
+  y(1:n) = gpls(1:n) - g(1:n)
+
+  den1 = dot_product ( s, y )
+
+  snorm2 = snrm2(n,s,1)
+
+  ynrm2=snrm2(n,y,1)
+
+  if ( den1<sqrt(epsm)*snorm2*ynrm2) then
+    return
+  end if
+
+  call mvmltu(nr,n,a,s,u)
+
+  den2 = dot_product ( u, u )
+!
+!  l <-- sqrt(den1/den2)*l
+!
+  alp=sqrt(den1/den2)
+
+  if ( noupdt ) then
+
+    do j=1,n
+      u(j)=alp*u(j)
+      do i=j,n
+        a(i,j)=alp*a(i,j)
+      end do
+    end do
+
+    noupdt=.false.
+    den2=den1
+    alp=1.0E+00
+
+  end if
+
+  skpupd=.true.
+!
+!  w = l(l+)s = hs
+!
+  call mvmltl(nr,n,a,u,w)
+  i=1
+
+  if ( iagflg == 0 ) then
+    reltol=sqrt(rnf)
+  else
+    reltol=rnf
+  end if
+
+60  continue
+
+  if ( i <= n .and. skpupd ) then
+
+    if ( abs(y(i)-w(i)) < reltol * max(abs(g(i)),abs(gpls(i))) ) then
+      i = i + 1
+    else
+      skpupd=.false.
+    end if
+    go to 60
+  end if
+
+  if ( skpupd ) then
+    return
+  end if
+!
+!  w=y-alp*l(l+)s
+!
+  w(1:n)=y(1:n)-alp*w(1:n)
+!
+!  alp=1/sqrt(den1*den2)
+!
+  alp=alp/den1
+!
+!  u=(l+)/sqrt(den1*den2) = (l+)s/sqrt((y+)s * (s+)l(l+)s)
+!
+  u(1:n)=alp*u(1:n)
+!
+!  copy l into upper triangular part.  zero l.
+!
+  do i=2,n
+    do j=1,i-1
+      a(j,i)=a(i,j)
+      a(i,j)=0.0E+00
+    end do
+  end do
+!
+!  find q, (l+) such that  q(l+) = (l+) + u(w+)
+!
+  call qrupdt(nr,n,a,u,w)
+!
+!  upper triangular part and diagonal of a now contain updated
+!  cholesky decomposition of hessian.  copy back to lower triangular part.
+!
+  do i=2,n
+    do j=1,i-1
+      a(i,j)=a(j,i)
+    end do
+  end do
+
+  return
+end
+subroutine secunf(nr,n,x,g,a,udiag,xpls,gpls,epsm,itncnt, &
+  rnf,iagflg,noupdt,s,y,t)
+!
+!*******************************************************************************
+!
+!! SECUNF updates hessian by the bfgs unfactored method
+!
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! x(n)         --> old iterate, x[k-1]
+! g(n)         --> gradient or approximate at old iterate
+! a(n,n)      <--> on entry: approximate hessian at old iterate
+!                    in upper triangular part (and udiag)
+!                  on exit:  updated approx hessian at new iterate
+!                    in lower triangular part and diagonal
+!                  [lower triangular part of symmetric matrix]
+! udiag        --> on entry: diagonal of hessian
+! xpls(n)      --> new iterate, x[k]
+! gpls(n)      --> gradient or approximate at new iterate
+! epsm         --> machine epsilon
+! itncnt       --> iteration count
+! rnf          --> relative noise in optimization function fcn
+! iagflg       --> =1 if analytic gradient supplied, =0 otherwise
+! noupdt      <--> boolean: no update yet
+!                  [retain value between successive calls]
+! s(n)         --> workspace
+! y(n)         --> workspace
+! t(n)         --> workspace
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real den1
+  real den2
+  real epsm
+  real g(n)
+  real gam
+  real gpls(n)
+  integer i
+  integer iagflg
+  integer itncnt
+  integer j
+  logical noupdt
+  real rnf
+  real s(n)
+  logical skpupd
+  real snorm2
+  real snrm2
+  real t(n)
+  real tol
+  real udiag(n)
+  real x(n)
+  real xpls(n)
+  real y(n)
+  real ynrm2
+!
+! copy hessian in upper triangular part and udiag to
+! lower triangular part and diagonal
+!
+  do j = 1, n
+    a(j,j) = udiag(j)
+    do i = j+1, n
+      a(i,j) = a(j,i)
+    end do
+  end do
+
+  if ( itncnt==1) noupdt=.true.
+
+  s(1:n) = xpls(1:n) - x(1:n)
+  y(1:n) = gpls(1:n) - g(1:n)
+
+  den1 = dot_product ( s, y )
+
+  snorm2=snrm2(n,s,1)
+
+  ynrm2=snrm2(n,y,1)
+
+  if ( den1<sqrt(epsm)*snorm2*ynrm2) then
+    return
+  end if
+
+  call mvmlts(nr,n,a,s,t)
+
+  den2 = dot_product ( s, t )
+
+  if ( noupdt ) then
+!
+!         h <-- [(s+)y/(s+)hs]h
+!
+    gam=den1/den2
+    den2=gam*den2
+    do j=1,n
+      t(j)=gam*t(j)
+      do i=j,n
+        a(i,j)=gam*a(i,j)
+      end do
+    end do
+    noupdt=.false.
+
+  end if
+
+  skpupd=.true.
+!
+!  check update condition on row i
+!
+  do i=1,n
+
+    tol=rnf*max(abs(g(i)),abs(gpls(i)))
+    if ( iagflg==0) tol=tol/sqrt(rnf)
+
+    if ( abs(y(i)-t(i)) >= tol) then
+      skpupd=.false.
+      go to 70
+    end if
+
+  end do
+
+70 continue
+
+  if ( skpupd) then
+    return
+  end if
+!
+!  bfgs update
+!
+  do j=1,n
+    do i=j,n
+      a(i,j)=a(i,j)+y(i)*y(j)/den1-t(i)*t(j)/den2
+    end do
+  end do
+
+  return
+end
+subroutine sgbfa ( abd, lda, n, ml, mu, ipvt, info )
+!
+!*******************************************************************************
+!
+!! SGBFA factors a real band matrix by elimination.
+!
+!
+!  Discussion:
+!
+!     sgbfa is usually called by sgbco, but it can be called
+!     directly with a saving in time if  rcond  is not needed.
+!
+!  Parameters:
+!
+!     on entry
+!
+!        abd     real(lda, n)
+!                contains the matrix in band storage.  the columns
+!                of the matrix are stored in the columns of  abd  and
+!                the diagonals of the matrix are stored in rows
+!                ml+1 through 2*ml+mu+1 of  abd .
+!                see the comments below for details.
+!
+!        lda     integer
+!                the leading dimension of the array  abd .
+!                lda must be >= 2*ml + mu + 1 .
+!
+!        n       integer
+!                the order of the original matrix.
+!
+!        ml      integer
+!                number of diagonals below the main diagonal.
+!                0 <= ml < n .
+!
+!        mu      integer
+!                number of diagonals above the main diagonal.
+!                0 <= mu < n .
+!                more efficient if  ml <= mu .
+!     on return
+!
+!        abd     an upper triangular matrix in band storage and
+!                the multipliers which were used to obtain it.
+!                the factorization can be written  a = l*u  where
+!                l  is a product of permutation and unit lower
+!                triangular matrices and  u  is upper triangular.
+!
+!        ipvt    integer(n)
+!                an integer vector of pivot indices.
+!
+!        info    integer
+!                = 0  normal value.
+!                = k  if  u(k,k) == 0.0E+00 .  this is not an error
+!                     condition for this subroutine, but it does
+!                     indicate that sgbsl will divide by zero if
+!                     called.  use  rcond  in sgbco for a reliable
+!                     indication of singularity.
+!
+!     band storage
+!
+!           if  a  is a band matrix, the following program segment
+!           will set up the input.
+!
+!                   ml = (band width below the diagonal)
+!                   mu = (band width above the diagonal)
+!                   m = ml + mu + 1
+!                   do j = 1, n
+!                      i1 = max ( 1, j-mu )
+!                      i2 = min ( n, j+ml )
+!                      do i = i1, i2
+!                         k = i - j + m
+!                         abd(k,j) = a(i,j)
+!                      end do
+!                   end do
+!
+!           this uses rows  ml+1  through  2*ml+mu+1  of  abd .
+!           in addition, the first  ml  rows in  abd  are used for
+!           elements generated during the triangularization.
+!           the total number of rows needed in  abd  is  2*ml+mu+1 .
+!           the  ml+mu by ml+mu  upper left triangle and the
+!           ml by ml  lower right triangle are not referenced.
+!
+!     linpack. this version dated 08/14/78 .
+!     cleve moler, university of new mexico, argonne national lab.
+!
+  integer lda
+  integer n
+!
+  real abd(lda,n)
+  integer i
+  integer i0
+  integer info
+  integer ipvt(n)
+  integer isamax
+  integer j
+  integer j0
+  integer j1
+  integer ju
+  integer jz
+  integer k
+  integer l
+  integer lm
+  integer m
+  integer ml
+  integer mm
+  integer mu
+  real t
+!
+  m = ml + mu + 1
+  info = 0
+!
+!  Zero initial fill-in columns.
+!
+  j0 = mu + 2
+  j1 = min ( n, m ) - 1
+
+  do jz = j0, j1
+     i0 = m + 1 - jz
+     do i = i0, ml
+        abd(i,jz) = 0.0E+00
+     end do
+  end do
+
+  jz = j1
+  ju = 0
+!
+!  Gaussian elimination with partial pivoting.
+!
+  do k = 1, n-1
+!
+!  Zero next fill-in column.
+!
+     jz = jz + 1
+     if ( jz <= n ) then
+       abd(1:ml,jz) = 0.0E+00
+     end if
+!
+!  Find L = pivot index.
+!
+     lm = min ( ml, n-k )
+     l = isamax ( lm+1, abd(m,k), 1 ) + m - 1
+     ipvt(k) = l + k - m
+!
+!  Zero pivot implies this column already triangularized.
+!
+     if ( abd(l,k) == 0.0E+00 ) then
+
+       info = k
+!
+!  Interchange if necessary.
+!
+     else
+
+        if ( l /= m ) then
+           t = abd(l,k)
+           abd(l,k) = abd(m,k)
+           abd(m,k) = t
+        end if
+!
+!  Compute multipliers.
+!
+        t = -1.0E+00 / abd(m,k)
+        call sscal ( lm, t, abd(m+1,k), 1 )
+!
+!  Row elimination with column indexing.
+!
+        ju = min ( max ( ju, mu+ipvt(k) ), n )
+        mm = m
+
+        do j = k+1, ju
+           l = l - 1
+           mm = mm - 1
+           t = abd(l,j)
+           if ( l /= mm ) then
+              abd(l,j) = abd(mm,j)
+              abd(mm,j) = t
+           end if
+           call saxpy ( lm, t, abd(m+1,k), 1, abd(mm+1,j), 1 )
+        end do
+
+     end if
+
+  end do
+
+  ipvt(n) = n
+
+  if ( abd(m,n) == 0.0E+00 ) then
+    info = n
+  end if
+
+  return
+end
+subroutine sgbsl(abd,lda,n,ml,mu,ipvt,b,job)
+!
+!*******************************************************************************
+!
+!! SGBSL solves a banded linear system factored by SGBCO or SGBFA.
+!
+!
+!  Description:
+!
+!     sgbsl solves the real band system
+!     a * x = b  or  trans(a) * x = b
+!     using the factors computed by sbgco or sgbfa.
+!
+!     on entry
+!
+!        abd     real(lda, n)
+!                the output from sbgco or sgbfa.
+!
+!        lda     integer
+!                the leading dimension of the array  abd .
+!
+!        n       integer
+!                the order of the original matrix.
+!
+!        ml      integer
+!                number of diagonals below the main diagonal.
+!
+!        mu      integer
+!                number of diagonals above the main diagonal.
+!
+!        ipvt    integer(n)
+!                the pivot vector from sbgco or sgbfa.
+!
+!        b       real(n)
+!                the right hand side vector.
+!
+!        job     integer
+!                = 0         to solve  a*x = b ,
+!                = nonzero   to solve  trans(a)*x = b , where
+!                            trans(a)  is the transpose.
+!
+!     on return
+!
+!        b       the solution vector  x .
+!
+!     error condition
+!
+!        a division by zero will occur if the input factor contains a
+!        zero on the diagonal.  technically, this indicates singularity,
+!        but it is often caused by improper arguments or improper
+!        setting of lda .  it will not occur if the subroutines are
+!        called correctly and if sbgco has set rcond > 0.0E+00
+!        or sgbfa has set info == 0 .
+!
+!     to compute  inverse(a) * c  where  c  is a matrix
+!     with  p  columns
+!           call sbgco(abd,lda,n,ml,mu,ipvt,rcond,z)
+!           if (rcond is too small) go to ...
+!           do j = 1, p
+!              call sgbsl(abd,lda,n,ml,mu,ipvt,c(1,j),0)
+!           end do
+!
+!     linpack.  this version dated 08/14/78 .
+!     cleve moler, university of new mexico, argonne national lab.
+!
+!  references  dongarra j.j., bunch j.r., moler c.b., stewart g.w.,
+!                 *linpack users  guide*, siam, 1979.
+!
+  integer lda
+  integer n
+!
+  real abd(lda,*)
+  real b(*)
+  integer ipvt(*)
+  integer job
+  integer k
+  integer kb
+  integer l
+  integer la
+  integer lb
+  integer lm
+  integer m
+  integer ml
+  integer mu
+  real sdot
+  real t
+!
+  m = mu + ml + 1
+
+  if ( job == 0 ) then
+
+    if ( ml /= 0 ) then
+
+      do k = 1, n-1
+        lm = min(ml,n-k)
+        l = ipvt(k)
+        t = b(l)
+        if (l /= k) then
+          b(l) = b(k)
+          b(k) = t
+        end if
+        call saxpy(lm,t,abd(m+1,k),1,b(k+1),1)
+      end do
+
+    end if
+
+    do kb = 1, n
+      k = n + 1 - kb
+      b(k) = b(k)/abd(m,k)
+      lm = min(k,m) - 1
+      la = m - lm
+      lb = k - lm
+      t = -b(k)
+      call saxpy(lm,t,abd(la,k),1,b(lb),1)
+    end do
+
+  else
+
+     do k = 1, n
+       lm = min(k,m) - 1
+       la = m - lm
+       lb = k - lm
+       t = sdot(lm,abd(la,k),1,b(lb),1)
+       b(k) = (b(k) - t)/abd(m,k)
+     end do
+
+     if ( ml /= 0) then
+
+       do kb = 1, n-1
+         k = n - kb
+         lm = min(ml,n-k)
+         b(k) = b(k) + sdot(lm,abd(m+1,k),1,b(k+1),1)
+         l = ipvt(k)
+         if (l /= k) then
+           t = b(l)
+           b(l) = b(k)
+           b(k) = t
+         end if
+       end do
+
+     end if
+
+  end if
+
+  return
+end
+subroutine sgeco(a,lda,n,ipvt,rcond,z)
+!
+!*******************************************************************************
+!
+!! SGECO factors a real matrix by gaussian elimination
+!     and estimates the condition of the matrix.
+!
+!     if  rcond  is not needed, sgefa is slightly faster.
+!     to solve  a*x = b , follow sgeco by sgesl.
+!     to compute  inverse(a)*c , follow sgeco by sgesl.
+!     to compute  determinant(a) , follow sgeco by sgedi.
+!     to compute  inverse(a) , follow sgeco by sgedi.
+!
+!     on entry
+!
+!        a       real(lda, n)
+!                the matrix to be factored.
+!
+!        lda     integer
+!                the leading dimension of the array  a .
+!
+!        n       integer
+!                the order of the matrix  a .
+!
+!     on return
+!
+!        a       an upper triangular matrix and the multipliers
+!                which were used to obtain it.
+!                the factorization can be written  a = l*u , where
+!                l  is a product of permutation and unit lower
+!                triangular matrices and  u  is upper triangular.
+!
+!        ipvt    integer(n)
+!                an integer vector of pivot indices.
+!
+!        rcond   real
+!                an estimate of the reciprocal condition of  a .
+!                for the system  a*x = b , relative perturbations
+!                in  a  and  b  of size  epsilon  may cause
+!                relative perturbations in  x  of size  epsilon/rcond .
+!                if  rcond  is so small that the logical expression
+!                           1.0E+00 + rcond == 1.0E+00
+!                is true, then  a  may be singular to working
+!                precision.  in particular,  rcond  is zero  if
+!                exact singularity is detected or the estimate
+!                underflows.
+!
+!        z       real(n)
+!                a work vector whose contents are usually unimportant.
+!                if  a  is close to a singular matrix, then  z  is
+!                an approximate null vector in the sense that
+!                norm(a*z) = rcond*norm(a)*norm(z) .
+!
+!     linpack.  this version dated 08/14/78 .
+!     cleve moler, university of new mexico, argonne national lab.
+!
+!  references  dongarra j.j., bunch j.r., moler c.b., stewart g.w.,
+!                 *linpack users  guide*, siam, 1979.
+!
+  integer lda
+  integer n
+!
+  integer ipvt(n)
+  real a(lda,*)
+  real anorm
+  real ek
+  integer info
+  integer j
+  integer k
+  integer kb
+  integer l
+  real rcond
+  real s
+  real sasum
+  real sdot
+  real sm
+  real t
+  real wk
+  real wkm
+  real ynorm
+  real z(*)
+!
+!  compute 1-norm of a
+!
+  anorm = 0.0E+00
+  do j = 1, n
+     anorm = max (anorm,sasum(n,a(1,j),1))
+  end do
+!
+!  factor
+!
+  call sgefa(a,lda,n,ipvt,info)
+!
+!     rcond = 1/(norm(a)*(estimate of norm(inverse(a)))) .
+!     estimate = norm(z)/norm(y) where  a*z = y  and  trans(a)*y = e .
+!     trans(a)  is the transpose of a .  the components of  e  are
+!     chosen to cause maximum local growth in the elements of w  where
+!     trans(u)*w = e .  the vectors are frequently rescaled to avoid
+!     overflow.
+!
+!  solve trans(u)*w = e
+!
+  ek = 1.0E+00
+  z(1:n) = 0.0E+00
+
+  do k = 1, n
+
+     if (z(k) /= 0.0) ek = sign(ek,-z(k))
+
+     if (abs(ek-z(k)) > abs(a(k,k))) then
+        s = abs(a(k,k))/abs(ek-z(k))
+        call sscal(n,s,z,1)
+        ek = s*ek
+     end if
+
+     wk = ek - z(k)
+     wkm = -ek - z(k)
+     s = abs(wk)
+     sm = abs(wkm)
+
+     if (a(k,k) /= 0.0) then
+       wk = wk/a(k,k)
+       wkm = wkm/a(k,k)
+     else
+       wk = 1.0E+00
+       wkm = 1.0E+00
+     end if
+
+     if ( k+1 <= n) then
+
+       do j = k+1, n
+         sm = sm + abs(z(j)+wkm*a(k,j))
+         z(j) = z(j) + wk*a(k,j)
+         s = s + abs(z(j))
+       end do
+
+       if ( s < sm ) then
+           t = wkm - wk
+           wk = wkm
+           do j = k+1, n
+              z(j) = z(j) + t*a(k,j)
+           end do
+       end if
+
+     end if
+
+     z(k) = wk
+
+  end do
+
+  s = 1.0/sasum(n,z,1)
+  call sscal(n,s,z,1)
+!
+!  solve trans(l)*y = w
+!
+  do kb = 1, n
+
+     k = n + 1 - kb
+     if (k < n) z(k) = z(k) + sdot(n-k,a(k+1,k),1,z(k+1),1)
+     if ( abs(z(k)) > 1.0) then
+        s = 1.0/abs(z(k))
+        call sscal(n,s,z,1)
+     end if
+     l = ipvt(k)
+     t = z(l)
+     z(l) = z(k)
+     z(k) = t
+
+  end do
+
+  s = 1.0/sasum(n,z,1)
+  call sscal(n,s,z,1)
+
+  ynorm = 1.0E+00
+!
+!  solve l*v = y
+!
+  do k = 1, n
+     l = ipvt(k)
+     t = z(l)
+     z(l) = z(k)
+     z(k) = t
+     if (k < n) call saxpy(n-k,t,a(k+1,k),1,z(k+1),1)
+     if (abs(z(k)) > 1.0) then
+        s = 1.0/abs(z(k))
+        call sscal(n,s,z,1)
+        ynorm = s*ynorm
+     end if
+  end do
+
+  s = 1.0/sasum(n,z,1)
+  call sscal(n,s,z,1)
+  ynorm = s*ynorm
+!
+!  solve  u*z = v
+!
+  do kb = 1, n
+
+     k = n + 1 - kb
+
+     if (abs(z(k)) > abs(a(k,k))) then
+        s = abs(a(k,k))/abs(z(k))
+        call sscal(n,s,z,1)
+        ynorm = s*ynorm
+     end if
+
+     if (a(k,k) /= 0.0) z(k) = z(k)/a(k,k)
+     if (a(k,k) == 0.0) z(k) = 1.0E+00
+     t = -z(k)
+     call saxpy(k-1,t,a(1,k),1,z(1),1)
+
+  end do
+!
+!  make znorm = 1.0E+00
+!
+  s = 1.0/sasum(n,z,1)
+  call sscal(n,s,z,1)
+  ynorm = s*ynorm
+
+  if (anorm /= 0.0) rcond = ynorm/anorm
+  if (anorm == 0.0) rcond = 0.0E+00
+  return
+end
+subroutine sgefa(a,lda,n,ipvt,info)
+!
+!*******************************************************************************
+!
+!! SGEFA factors a real matrix by gaussian elimination.
+!
+!
+!     sgefa is usually called by sgeco, but it can be called
+!     directly with a saving in time if  rcond  is not needed.
+!     (time for sgeco) = (1 + 9/n)*(time for sgefa) .
+!
+!     on entry
+!
+!        a       real(lda, n)
+!                the matrix to be factored.
+!
+!        lda     integer
+!                the leading dimension of the array  a .
+!
+!        n       integer
+!                the order of the matrix  a .
+!
+!     on return
+!
+!        a       an upper triangular matrix and the multipliers
+!                which were used to obtain it.
+!                the factorization can be written  a = l*u , where
+!                l  is a product of permutation and unit lower
+!                triangular matrices and  u  is upper triangular.
+!
+!        ipvt    integer(n)
+!                an integer vector of pivot indices.
+!
+!        info    integer
+!                = 0  normal value.
+!                = k  if  u(k,k) == 0.0E+00 .  this is not an error
+!                     condition for this subroutine, but it does
+!                     indicate that sgesl or sgedi will divide by zero
+!                     if called.  use  rcond  in sgeco for a reliable
+!                     indication of singularity.
+!
+!  references  dongarra j.j., bunch j.r., moler c.b., stewart g.w.,
+!                 *linpack users  guide*, siam, 1979.
+!
+  integer lda
+  integer n
+!
+  real a(lda,n)
+  integer info
+  integer ipvt(*)
+  integer isamax
+  integer j
+  integer k
+  integer l
+  real t
+!
+  info = 0
+
+  do k = 1, n-1
+!
+!  find l = pivot index
+!
+     l = isamax(n-k+1,a(k,k),1) + k - 1
+     ipvt(k) = l
+!
+!  zero pivot implies this column already triangularized
+!
+     if (a(l,k) == 0.0E+00 ) then
+
+       info = k
+!
+!  interchange if necessary
+!
+    else
+
+        if ( l /= k) then
+           t = a(l,k)
+           a(l,k) = a(k,k)
+           a(k,k) = t
+        end if
+!
+!  compute multipliers
+!
+        t = -1.0/a(k,k)
+        call sscal(n-k,t,a(k+1,k),1)
+!
+!  row elimination with column indexing
+!
+        do j = k+1, n
+           t = a(l,j)
+           if (l /= k) then
+             a(l,j) = a(k,j)
+             a(k,j) = t
+           end if
+           call saxpy(n-k,t,a(k+1,k),1,a(k+1,j),1)
+        end do
+
+     end if
+
+  end do
+
+  ipvt(n) = n
+  if (a(n,n) == 0.0) info = n
+  return
+end
+subroutine sgefs(a,lda,n,v,itask,ind,work,iwork,rcond)
+!
+!*******************************************************************************
+!
+!! SGEFS solves a general nxn system of single
+!    precision linear equations using linpack subroutines sgeco
+!    and sgesl.  that is, if a is an nxn real matrix and if x
+!    and b are real n-vectors, then sgefs solves the equation
+!
+!                          a*x=b.
+!
+!    the matrix a is first factored into upper and lower tri-
+!    angular matrices u and l using partial pivoting.  these
+!    factors and the pivoting information are used to find the
+!    solution vector x.  an approximate condition number is
+!    calculated to provide a rough estimate of the number of
+!    digits of accuracy in the computed solution.
+!
+!    if the equation a*x=b is to be solved for more than one vector
+!    b, the factoring of a does not need to be performed again and
+!    the option to only solve (itask == 2) will be faster for
+!    the succeeding solutions.  in this case, the contents of a,
+!    lda, n and iwork must not have been altered by the user follow-
+!    ing factorization (itask=1).  ind will not be changed by sgefs
+!    in this case.  other settings of itask are used to solve linear
+!    systems involving the transpose of a.
+!
+!  Parameters:
+!
+!    a      real(lda,n)
+!             on entry, the doubly subscripted array with dimension
+!               (lda,n) which contains the coefficient matrix.
+!             on return, an upper triangular matrix u and the
+!               multipliers necessary to construct a matrix l
+!               so that a=l*u.
+!    lda    integer
+!             the leading dimension of the array a.  lda must be great-
+!             er than or equal to n.  (terminal error message ind=-1)
+!    n      integer
+!             the order of the matrix a.  the first n elements of
+!             the array a are the elements of the first column of
+!             the  matrix a.  n must be greater than or equal to 1.
+!             (terminal error message ind=-2)
+!    v      real(n)
+!             on entry, the singly subscripted array(vector) of di-
+!               mension n which contains the right hand side b of a
+!               system of simultaneous linear equations a*x=b.
+!             on return, v contains the solution vector, x .
+!    itask  integer
+!             if itask=1, the matrix a is factored and then the
+!               linear equation is solved.
+!             if itask=2, the equation is solved using the existing
+!               factored matrix a and iwork.
+!             if itask=3, the matrix is factored and a'x=b is solved
+!             if itask=4, the transposed equation is solved using the
+!               existing factored matrix a and iwork.
+!             if itask < 1 or itask > 4, then the terminal error
+!               message ind=-3 is printed.
+!    ind    integer
+!             gt. 0  ind is a rough estimate of the number of digits
+!                     of accuracy in the solution, x.
+!             lt. 0  see error message corresponding to ind below.
+!    work   real(n)
+!             a singly subscripted array of dimension at least n.
+!    iwork  integer(n)
+!             a singly subscripted array of dimension at least n.
+!    rcond  real
+!             estimate of 1.0/cond(a)
+!
+!  error messages printed
+!
+!    ind=-1  fatal   n is greater than lda.
+!    ind=-2  fatal   n is less than 1.
+!    ind=-3  fatal   itask is less than 1 or greater than 4.
+!    ind=-4  fatal   the matrix a is computationally singular.
+!                         a solution has not been computed.
+!    ind=-10 warning    the solution has no apparent significance.
+!                         the solution may be inaccurate or the matrix
+!                         a may be poorly scaled.
+!
+!  references  subroutine sgefs was developed by group c-3, los alamos
+!                 scientific laboratory, los alamos, nm 87545.
+!                 the linpack subroutines used by sgefs are described in
+!                 detail in the *linpack users guide* published by
+!                 the society for industrial and applied mathematics
+!                 (siam) dated 1979.
+!
+  integer lda
+  integer n
+!
+  real a(lda,n)
+  integer ind
+  integer itask
+  integer iwork(*)
+  integer job
+  real rcond
+  real v(*)
+  real work(*)
+!
+  if ( lda < n ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SGEFS - Fatal error!'
+    write ( *, * ) '  LDA < N.'
+    return
+  end if
+
+  if ( n <= 0 ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SGEFS - Fatal error!'
+    write ( *, * ) '  N <= 0.'
+    return
+  end if
+
+  if ( itask < 1 ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SGEFS - Fatal error!'
+    write ( *, * ) '  ITASK < 1.'
+    return
+  end if
+
+  if ( itask > 4 ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SGEFS - Fatal error!'
+    write ( *, * ) '  ITASK > 4.'
+    return
+  end if
+!
+!  Factor the matrix.
+!
+  if ( itask == 1 .or. itask == 3 ) then
+
+    call sgeco ( a, lda, n, iwork, rcond, work )
+!
+!  Check for computational singularity.
+!
+    if ( rcond == 0.0E+00 ) then
+      write ( *, * ) ' '
+      write ( *, * ) 'SGEFS - Error!'
+      write ( *, * ) '  The matrix is compuationally singular.'
+      return
+    end if
+!
+!  Estimate the number of significant digits.
+!
+    ind = - int ( log10 ( epsilon ( rcond ) / rcond ) )
+
+    if (ind <= 0 ) then
+      write ( *, * ) ' '
+      write ( *, * ) 'SGEFS - Warning!'
+      write ( *, * ) '  Solution may have no significant digits.'
+    end if
+
+  end if
+
+  if ( itask <= 2 ) then
+    job = 0
+  else
+    job = 1
+  end if
+
+  call sgesl ( a, lda, n, iwork, v, job )
+
+  return
+end
+subroutine sgesl(a,lda,n,ipvt,b,job)
+!
+!*******************************************************************************
+!
+!! SGESL solves a linear system factored by SGEFA or SGECO.
+!
+!
+!     on entry
+!
+!        a       real(lda, n)
+!                the output from sgeco or sgefa.
+!
+!        lda     integer
+!                the leading dimension of the array  a .
+!
+!        n       integer
+!                the order of the matrix  a .
+!
+!        ipvt    integer(n)
+!                the pivot vector from sgeco or sgefa.
+!
+!        b       real(n)
+!                the right hand side vector.
+!
+!        job     integer
+!                = 0         to solve  a*x = b ,
+!                = nonzero   to solve  trans(a)*x = b  where
+!                            trans(a)  is the transpose.
+!
+!     on return
+!
+!        b       the solution vector  x .
+!
+!     error condition
+!
+!        a division by zero will occur if the input factor contains a
+!        zero on the diagonal.  technically, this indicates singularity,
+!        but it is often caused by improper arguments or improper
+!        setting of lda .  it will not occur if the subroutines are
+!        called correctly and if sgeco has set rcond > 0.0E+00
+!        or sgefa has set info == 0 .
+!
+!     to compute  inverse(a) * c  where  c  is a matrix
+!     with  p  columns
+!           call sgeco(a,lda,n,ipvt,rcond,z)
+!           if (rcond is too small) go to ...
+!           do j = 1, p
+!              call sgesl(a,lda,n,ipvt,c(1,j),0)
+!           end do
+!
+  integer lda
+  integer n
+!
+  real a(lda,n)
+  real b(n)
+  integer ipvt(*)
+  integer job
+  integer k
+  integer kb
+  integer l
+  real sdot
+  real t
+!
+  if (job == 0) then
+!
+!        job = 0 , solve  a * x = b
+!        first solve  l*y = b
+!
+     do k = 1, n-1
+        l = ipvt(k)
+        t = b(l)
+        if (l /= k) then
+           b(l) = b(k)
+           b(k) = t
+        end if
+        call saxpy(n-k,t,a(k+1,k),1,b(k+1),1)
+      end do
+!
+!  solve  u*x = y
+!
+     do k = n, 1, -1
+        b(k) = b(k)/a(k,k)
+        t = -b(k)
+        call saxpy(k-1,t,a(1,k),1,b(1),1)
+     end do
+
+  else
+!
+!        job = nonzero, solve  trans(a) * x = b
+!        first solve  trans(u)*y = b
+!
+     do k = 1, n
+       t = sdot(k-1,a(1,k),1,b(1),1)
+       b(k) = (b(k) - t)/a(k,k)
+     end do
+!
+!  Solve trans(l)*x = y
+!
+     do kb = 1, n-1
+        k = n - kb
+        b(k) = b(k) + sdot(n-k,a(k+1,k),1,b(k+1),1)
+        l = ipvt(k)
+        if (l /= k) then
+           t = b(l)
+           b(l) = b(k)
+           b(k) = t
+        end if
+     end do
+
+  end if
+
+  return
+end
+subroutine sinqb ( n, x, wsave )
+!
+!*******************************************************************************
+!
+!! SINQB computes the fast sine transform of quarter wave data.
+!
+!
+!  Discussion:
+!
+!    SINQB computes a sequence from its representation in terms of a sine
+!    series with odd wave numbers.
+!
+!    SINQF is the unnormalized inverse of SINQB since a call of SINQB
+!    followed by a call of SINQF will multiply the input sequence X by 4*N.
+!
+!    The array WSAVE must be initialized by calling SINQI.
+!
+!    The transform is defined by:
+!
+!      X_out(I) = sum ( 1 <= K <= N )
+!
+!        4 * X_in(K) * sin ( ( 2 * K - 1 ) * I * PI / ( 2 * N ) )
+!
+!  Modified:
+!
+!    12 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array to be transformed.  The
+!    method is more efficient when N is the product of small primes.
+!
+!    Input/output, real X(N).
+!    On input, the sequence to be transformed.
+!    On output, the transformed sequence.
+!
+!    Input, real WSAVE(3*N+15), a work array.  The WSAVE array must be
+!    initialized by calling SINQI.  A different WSAVE array must be used
+!    for each different value of N.
+!
+  integer n
+!
+  integer k
+  real wsave(3*n+15)
+  real x(n)
+!
+  if ( n < 1 ) then
+    return
+  end if
+
+  if ( n == 1 ) then
+    x(1) = 4.0E+00 * x(1)
+    return
+  end if
+
+  x(2:n:2) = -x(2:n:2)
+
+  call cosqb ( n, x, wsave )
+!
+!  Reverse the X vector.
+!
+  call rvec_reverse ( n, x )
+
+  return
+end
+subroutine sinqf ( n, x, wsave )
+!
+!*******************************************************************************
+!
+!! SINQF computes the fast sine transform of quarter wave data.
+!
+!
+!  Discussion:
+!
+!    SINQF computes the coefficients in a sine series representation with
+!    only odd wave numbers.
+!
+!    SINQB is the unnormalized inverse of SINQF since a call of SINQF
+!    followed by a call of SINQB will multiply the input sequence X by 4*N.
+!
+!    The array WSAVE, which is used by SINQF, must be initialized by
+!    calling SINQI.
+!
+!    The transform is defined by:
+!
+!      X_out(I) = (-1)**(I-1) * X_in(N) + sum ( 1 <= K <= N-1 )
+!        2 * X_in(K) * sin ( ( 2 * I - 1 ) * K * PI / ( 2 * N ) )
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array to be transformed.  The
+!    method is more efficient when N is the product of small primes.
+!
+!    Input/output, real X(N).
+!    On input, the sequence to be transformed.
+!    On output, the transformed sequence.
+!
+!    Input, real WSAVE(3*N+15), a work array.  The WSAVE array must be
+!    initialized by calling SINQI.  A different WSAVE array must be used
+!    for each different value of N.
+!
+  integer n
+!
+  integer k
+  real wsave(3*n+15)
+  real x(n)
+!
+  if ( n <= 1 ) then
+    return
+  end if
+!
+!  Reverse the X vector.
+!
+  call rvec_reverse ( n, x )
+
+  call cosqf ( n, x, wsave )
+
+  x(2:n:2) = -x(2:n:2)
+
+  return
+end
+subroutine sinqi ( n, wsave )
+!
+!*******************************************************************************
+!
+!! SINQI initializes WSAVE, used in SINQF and SINQB.
+!
+!
+!  Discussion:
+!
+!    The prime factorization of N together with a tabulation of the
+!    trigonometric functions are computed and stored in WSAVE.
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array to be transformed.
+!
+!    Output, real WSAVE(3*N+15), contains data, dependent on the value
+!    of N, which is necessary for the SINQF or SINQB routines.
+!
+  integer n
+!
+  real wsave(3*n+15)
+!
+  call cosqi ( n, wsave )
+
+  return
+end
+subroutine sint ( n, x, wsave )
+!
+!*******************************************************************************
+!
+!! SINT computes the discrete Fourier sine transform of an odd sequence.
+!
+!
+!  Discussion:
+!
+!    SINT is the unnormalized inverse of itself since a call of SINT
+!    followed by another call of SINT will multiply the input sequence
+!    X by 2*(N+1).
+!
+!    The array WSAVE must be initialized by calling SINTI.
+!
+!    The transform is defined by:
+!
+!      X_out(I) = sum ( 1 <= K <= N )
+!        2 * X_in(K) * sin ( K * I * PI / ( N + 1 ) )
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.
+!    The method is most efficient when N+1 is the product of small primes.
+!
+!    Input/output, real X(N).
+!    On input, the sequence to be transformed.
+!    On output, the transformed sequence.
+!
+!    Input, real WSAVE((5*N+30)/2), a work array.  The WSAVE array must be
+!    initialized by calling SINTI.  A different WSAVE array must be used
+!    for each different value of N.
+!
+  integer n
+!
+  integer iw1
+  integer iw2
+  integer iw3
+  real wsave((5*n+30)/2)
+  real x(n)
+!
+  write ( *, * ) 'DEBUG: entered SINT'
+  iw1 = n / 2 + 1
+  iw2 = iw1 + n + 1
+  iw3 = iw2 + n + 1
+
+  call sint1 ( n, x, wsave(1), wsave(iw1), wsave(iw2), wsave(iw3) )
+  write ( *, * ) 'DEBUG: leaving SINT'
+  return
+end
+subroutine sint1 ( n, war, was, xh, x, ifac )
+!
+!*******************************************************************************
+!
+!! SINT1 is a lower level routine used by SINT.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.
+!
+!    Input/output, real WAR(N).
+!    On input, the sequence to be transformed.
+!    On output, the transformed sequence.
+!
+!    Input, real WAS(N/2).
+!
+!    Input, real XH(N).
+!
+!    Input, real X(N).
+!
+!    Input, integer IFAC(15).
+!    IFAC(1) = N, the number that was factored.
+!    IFAC(2) = NF, the number of factors.
+!    IFAC(3:2+NF), the factors.
+!
+  integer n
+!
+  integer i
+  integer ifac(15)
+  integer k
+  integer kc
+  integer ns2
+  real, parameter :: sqrt3 = 1.73205080756888E+00
+  real t1
+  real t2
+  real war(n)
+  real was(n/2)
+  real x(n)
+  real xh(n)
+  real xhold
+!
+  write ( *, * ) 'DEBUG: entered SINT1'
+  xh(1:n) = war(1:n)
+  war(1:n) = x(1:n)
+
+  if ( n <= 1 ) then
+    xh(1) = 2.0E+00 * xh(1)
+    return
+  end if
+
+  if ( n == 2 ) then
+    xhold = sqrt3 * ( xh(1) + xh(2) )
+    xh(2) = sqrt3 * ( xh(1) - xh(2) )
+    xh(1) = xhold
+    return
+  end if
+
+  ns2 = n / 2
+  x(1) = 0.0E+00
+
+  do k = 1, n/2
+    t1 = xh(k) - xh(n+1-k)
+    t2 = was(k) * ( xh(k) + xh(n+1-k) )
+    x(k+1) = t1 + t2
+    x(n+2-k) = t2 - t1
+  end do
+
+  if ( mod ( n, 2 ) /= 0 ) then
+    x(n/2+2) = 4.0E+00 * xh(n/2+1)
+  end if
+  write ( *, * ) 'DEBUG: calling RFFTF1'
+  call rfftf1 ( n+1, x, xh, war, ifac )
+  write ( *, * ) 'DEBUG: back from RFFTF1'
+  xh(1) = 0.5E+00 * x(1)
+  do i = 3, n, 2
+    xh(i-1) = -x(i)
+    xh(i) = xh(i-2) + x(i-1)
+  end do
+
+  if ( mod ( n, 2 ) == 0 ) then
+    xh(n) = -x(n+1)
+  end if
+
+  x(1:n) = war(1:n)
+  war(1:n) = xh(1:n)
+
+  write ( *, * ) 'DEBUG: leaving SINT1'
+  return
+end
+subroutine sinti ( n, wsave )
+!
+!*******************************************************************************
+!
+!! SINTI initializes WSAVE, used in SINT.
+!
+!
+!  Discussion:
+!
+!    The prime factorization of N together with a tabulation of the
+!    trigonometric functions are computed and stored in WSAVE.
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.
+!    The method is most efficient when N+1 is a product of small primes.
+!
+!    Output, real WSAVE((5*N+30)/2), contains data, dependent on the value
+!    of N, which is necessary for the SINT routine.
+!
+  integer n
+!
+  real dt
+  integer k
+  real pimach
+  real wsave((5*n+30)/2)
+!
+  if ( n <= 1 ) then
+    return
+  end if
+
+  dt = pimach() / real ( n + 1 )
+
+  do k = 1, n/2
+    wsave(k) = 2.0E+00 * sin ( real ( k ) * dt )
+  end do
+
+  call rffti ( n+1, wsave((n/2)+1) )
+
+  return
+end
+subroutine sndofd(nr,n,xpls,fcn,fpls,a,sx,rnoise,stepsz,anbr)
+!
+!*******************************************************************************
+!
+!! SNDOFD approximates a Hessian with a second order finite difference.
+!
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! xpls(n)      --> new iterate:   x[k]
+! fcn          --> name of subroutine to evaluate function
+! fpls         --> function value at new iterate, f(xpls)
+! a(n,n)      <--  finite difference approximation to hessian
+!                  only lower triangular matrix and diagonal
+!                  are returned
+! sx(n)        --> diagonal scaling matrix for x
+! rnoise       --> relative noise in fname [f(x)]
+! stepsz(n)    --> workspace (stepsize in i-th component direction)
+! anbr(n)      --> workspace (neighbor in i-th direction)
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real anbr(n)
+  real fhat
+  real fpls
+  integer i
+  integer j
+  real ov3
+  real rnoise
+  real stepsz(n)
+  real sx(n)
+  real xpls(n)
+  real xtmpi
+  real xtmpj
+!
+  external fcn
+!
+! find i-th stepsize and evaluate neighbor in direction
+! of i-th unit vector.
+!
+  ov3 = 1.0E+00 / 3.0E+00
+
+  do i = 1, n
+    stepsz(i)=rnoise**ov3 * max(abs(xpls(i)),1.0E+00 / sx(i) )
+    xtmpi=xpls(i)
+    xpls(i)=xtmpi+stepsz(i)
+    call fcn(n,xpls,anbr(i))
+    xpls(i)=xtmpi
+  end do
+!
+!  calculate column i of a
+!
+  do i = 1, n
+
+    xtmpi=xpls(i)
+    xpls(i)=xtmpi+2.0*stepsz(i)
+    call fcn(n,xpls,fhat)
+    a(i,i)=((fpls-anbr(i))+(fhat-anbr(i)))/(stepsz(i)*stepsz(i))
+!
+! calculate sub-diagonal elements of column
+!
+    if ( i /= n ) then
+
+      xpls(i)=xtmpi+stepsz(i)
+
+      do j=i+1,n
+        xtmpj=xpls(j)
+        xpls(j)=xtmpj+stepsz(j)
+        call fcn(n,xpls,fhat)
+        a(j,i)=((fpls-anbr(i))+(fhat-anbr(j)))/(stepsz(i)*stepsz(j))
+        xpls(j)=xtmpj
+      end do
+
+    end if
+
+    xpls(i) = xtmpi
+
+  end do
+
+  return
+end
+function snrm2 ( n, x, incx )
+!
+!*******************************************************************************
+!
+!! SNRM2 computes the Euclidean norm of a vector.
+!
+!
+!  Discussion:
+!
+!    The original SNRM2 algorithm is accurate but written in a bizarre,
+!    unreadable and obsolete format.  This version goes for clarity.
+!
+!  Modified:
+!
+!    01 June 2000
+!
+!  Reference:
+!
+!    Lawson, Hanson, Kincaid, Krogh,
+!    Basic Linear Algebra Subprograms for Fortran Usage,
+!    Algorithm 539,
+!    ACM Transactions on Mathematical Software,
+!    Volume 5, Number 3, September 1979, pages 308-323.
+!
+!  Author:
+!
+!    John Burkardt
+!
+!  Parameters:
+!
+!    Input, integer N, the number of entries in the vector.
+!
+!    Input, real X(*), the vector whose norm is to be computed.
+!
+!    Input, integer INCX, the increment between successive entries of X.
+!
+!    Output, real SNRM2, the Euclidean norm of X.
+!
+  integer i
+  integer incx
+  integer ix
+  integer n
+  real samax
+  real snrm2
+  real stemp
+  real x(*)
+  real xmax
+!
+  if ( n <= 0 ) then
+
+    snrm2 = 0.0E+00
+
+  else
+
+    xmax = samax ( n, x, incx )
+
+    if ( xmax == 0.0E+00 ) then
+
+      snrm2 = 0.0E+00
+
+    else
+
+      if ( incx >= 0 ) then
+        ix = 1
+      else
+        ix = ( - n + 1 ) * incx + 1
+      end if
+
+      stemp = 0.0E+00
+      do i = 1, n
+        stemp = stemp + ( x(ix) / xmax )**2
+        ix = ix + incx
+      end do
+
+      snrm2 = xmax * sqrt ( stemp )
+
+    end if
+
+  end if
+
+  return
+end
+subroutine snsq(fcn,jac,iopt,n,x,fvec,fjac,ldfjac,xtol,maxfev,ml, &
+  mu,epsfcn,diag,mode,factor,nprint,info,nfev,njev,r,lr,qtf,wa1, &
+  wa2,wa3,wa4)
+!
+!*******************************************************************************
+!
+!! SNSQ finds a zero of a system of n nonlinear functions in n variables.
+!
+!
+!  by a modification of the powell
+!            hybrid method.  this code is the combination of the minpack
+!            codes (argonne) hybrd and hybrdj.
+!
+!  Description:
+!
+! 1. purpose.
+!
+!       the purpose of snsq is to find a zero of a system of n non-
+!       linear functions in n variables by a modification of the powell
+!       hybrid method.  the user must provide a subroutine which calcu-
+!       lates the functions.  the user has the option of either to
+!       provide a subroutine which calculates the jacobian or to let the
+!       code calculate it by a forward-difference approximation.
+!       this code is the combination of the minpack codes (argonne)
+!       hybrd and hybrdj.
+!
+!
+! 2. subroutine and type statements.
+!
+!     subroutine snsq(fcn,jac,iopt,n,x,fvec,fjac,ldfjac,xtol,maxfev,
+!      *                 ml,mu,epsfcn,diag,mode,factor,nprint,info,nfev,
+!      *                 njev,r,lr,qtf,wa1,wa2,wa3,wa4)
+!       integer iopt,n,maxfev,ml,mu,mode,nprint,info,nfev,ldfjac,njev,lr
+!       real xtol,epsfcn,factor
+!       real x(n),fvec(n),diag(n),fjac(ldfjac,n),r(lr),qtf(n),
+!      *     wa1(n),wa2(n),wa3(n),wa4(n)
+!       external fcn,jac
+!
+!
+! 3. parameters.
+!
+!       parameters designated as input parameters must be specified on
+!       entry to snsq and are not changed on exit, while parameters
+!       designated as output parameters need not be specified on entry
+!       and are set to appropriate values on exit from snsq.
+!
+!       fcn is the name of the user-supplied subroutine which calculates
+!         the functions.  fcn must be declared in an external statement
+!         in the user calling program, and should be written as follows.
+!
+!       subroutine fcn(n,x,fvec,iflag)
+!         integer n,iflag
+!         real x(n),fvec(n)
+!
+!         calculate the functions at x and
+!         return this vector in fvec.
+!
+!         return
+!       end
+!
+!         the value of iflag should not be changed by fcn unless the
+!         user wants to terminate execution of snsq.  in this case, set
+!         iflag to a negative integer.
+!
+!       jac is the name of the user-supplied subroutine which calculates
+!         the jacobian.  if iopt=1, then jac must be declared in an
+!         external statement in the user calling program, and should be
+!         written as follows.
+!
+!       subroutine jac(n,x,fvec,fjac,ldfjac,iflag)
+!         integer n,ldfjac,iflag
+!         real x(n),fvec(n),fjac(ldfjac,n)
+!
+!         calculate the jacobian at x and return this
+!         matrix in fjac.  fvec contains the function
+!         values at x and should not be altered.
+!
+!         return
+!       end
+!
+!         the value of iflag should not be changed by jac unless the
+!         user wants to terminate execution of snsq.  in this case, set
+!         iflag to a negative integer.
+!
+!         if iopt=2, jac can be ignored (treat it as a dummy argument).
+!
+!       iopt is an input variable which specifies how the jacobian will
+!         be calculated.  if iopt=1, then the user must supply the
+!         jacobian through the subroutine jac.  if iopt=2, then the
+!         code will approximate the jacobian by forward-differencing.
+!
+!       n is a positive integer input variable set to the number of
+!       functions and variables.
+!
+!       x is an array of length n.  on input, x must contain an initial
+!         estimate of the solution vector.  on output, x contains the
+!         final estimate of the solution vector.
+!
+!       fvec is an output array of length n which contains the functions
+!         evaluated at the output x.
+!
+!       fjac is an output n by n array which contains the orthogonal
+!         matrix q produced by the qr factorization of the final approx-
+!         imate jacobian.
+!
+!       ldfjac is a positive integer input variable not less than n
+!         which specifies the leading dimension of the array fjac.
+!
+!       xtol is a non-negative input variable.  termination occurs when
+!         the relative error between two consecutive iterates is at most
+!         xtol.  therefore, xtol measures the relative error desired in
+!         the approximate solution.  section 4 contains more details
+!         about xtol.
+!
+!       maxfev is a positive integer input variable.  termination occurs
+!         when the number of calls to fcn is at least maxfev by the end
+!         of an iteration.
+!
+!       ml is a non-negative integer input variable which specifies the
+!         number of subdiagonals within the band of the jacobian matrix.
+!         if the jacobian is not banded or iopt=1, set ml to at
+!         least n - 1.
+!
+!       mu is a non-negative integer input variable which specifies the
+!         number of superdiagonals within the band of the jacobian
+!         matrix.  if the jacobian is not banded or iopt=1, set mu to at
+!         least n - 1.
+!
+!       epsfcn is an input variable used in determining a suitable step
+!         for the forward-difference approximation.  this approximation
+!         assumes that the relative errors in the functions are of the
+!         order of epsfcn.  if epsfcn is less than the machine preci-
+!         sion, it is assumed that the relative errors in the functions
+!         are of the order of the machine precision.  if iopt=1, then
+!         epsfcn can be ignored (treat it as a dummy argument).
+!
+!       diag is an array of length n.  if mode = 1 (see below), diag is
+!         internally set.  if mode = 2, diag must contain positive
+!         entries that serve as implicit (multiplicative) scale factors
+!         for the variables.
+!
+!       mode is an integer input variable.  if mode = 1, the variables
+!         will be scaled internally.  if mode = 2, the scaling is speci-
+!         fied by the input diag.  other values of mode are equivalent
+!         to mode = 1.
+!
+!       factor is a positive input variable used in determining the ini-
+!         tial step bound.  this bound is set to the product of factor
+!         and the euclidean norm of diag*x if nonzero, or else to factor
+!         itself.  in most cases factor should lie in the interval
+!         (.1,100.).  100. is a generally recommended value.
+!
+!       nprint is an integer input variable that enables controlled
+!         printing of iterates if it is positive.  in this case, fcn is
+!         called with iflag = 0 at the beginning of the first iteration
+!         and every nprint iteration thereafter and immediately prior
+!         to return, with x and fvec available for printing. appropriate
+!         print statements must be added to fcn(see example).  if nprint
+!         is not positive, no special calls of fcn with iflag = 0 are
+!         made.
+!
+!       info is an integer output variable.  if the user has terminated
+!         execution, info is set to the (negative) value of iflag.  see
+!         description of fcn and jac. otherwise, info is set as follows.
+!
+!         info = 0  improper input parameters.
+!
+!         info = 1  relative error between two consecutive iterates is
+!                   at most xtol.
+!
+!         info = 2  number of calls to fcn has reached or exceeded
+!                   maxfev.
+!
+!         info = 3  xtol is too small.  no further improvement in the
+!                   approximate solution x is possible.
+!
+!         info = 4  iteration is not making good progress, as measured
+!                   by the improvement from the last five jacobian eval-
+!                   uations.
+!
+!         info = 5  iteration is not making good progress, as measured
+!                   by the improvement from the last ten iterations.
+!
+!         sections 4 and 5 contain more details about info.
+!
+!       nfev is an integer output variable set to the number of calls to
+!         fcn.
+!
+!       njev is an integer output variable set to the number of calls to
+!         jac. (if iopt=2, then njev is set to zero.)
+!
+!       r is an output array of length lr which contains the upper
+!         triangular matrix produced by the qr factorization of the
+!         final approximate jacobian, stored rowwise.
+!
+!       lr is a positive integer input variable not less than
+!         (n*(n+1))/2.
+!
+!       qtf is an output array of length n which contains the vector
+!         (q transpose)*fvec.
+!
+!       wa1, wa2, wa3, and wa4 are work arrays of length n.
+!
+!
+! 4. successful completion.
+!
+!       the accuracy of snsq is controlled by the convergence parameter
+!       xtol.  this parameter is used in a test which makes a comparison
+!       between the approximation x and a solution xsol.  snsq termi-
+!       nates when the test is satisfied.  if the convergence parameter
+!       is less than the machine precision (as defined by the function
+!       r1mach(4)), then snsq only attempts to satisfy the test
+!       defined by the machine precision.  further progress is not
+!       usually possible.
+!
+!       the test assumes that the functions are reasonably well behaved,
+!       and, if the jacobian is supplied by the user, that the functions
+!       and the jacobian are coded consistently.  if these conditions
+!       are not satisfied, then snsq may incorrectly indicate conver-
+!       gence.  the coding of the jacobian can be checked by the
+!       subroutine chkder. if the jacobian is coded correctly or iopt=2,
+!       then the validity of the answer can be checked, for example, by
+!       rerunning snsq with a tighter tolerance.
+!
+!       convergence test.  if snrm2(z) denotes the euclidean norm of a
+!         vector z and d is the diagonal matrix whose entries are
+!         defined by the array diag, then this test attempts to guaran-
+!         tee that
+!
+!               snrm2(d*(x-xsol)) <= xtol*snrm2(d*xsol).
+!
+!         if this condition is satisfied with xtol = 10**(-k), then the
+!         larger components of d*x have k significant decimal digits and
+!         info is set to 1.  there is a danger that the smaller compo-
+!         nents of d*x may have large relative errors, but the fast rate
+!         of convergence of snsq usually avoids this possibility.
+!         unless high precision solutions are required, the recommended
+!         value for xtol is the square root of the machine precision.
+!
+!
+! 5. unsuccessful completion.
+!
+!       unsuccessful termination of snsq can be due to improper input
+!       parameters, arithmetic interrupts, an excessive number of func-
+!       tion evaluations, or lack of good progress.
+!
+!       improper input parameters.  info is set to 0 if iopt < 1,
+!         or iopt > 2, or n <= 0, or ldfjac < n, or
+!         xtol < 0.0, or maxfev <= 0, or ml < 0, or mu < 0,
+!         or factor <= 0.0, or lr < (n*(n+1))/2.
+!
+!       arithmetic interrupts.  if these interrupts occur in the fcn
+!         subroutine during an early stage of the computation, they may
+!         be caused by an unacceptable choice of x by snsq.  in this
+!         case, it may be possible to remedy the situation by rerunning
+!         snsq with a smaller value of factor.
+!
+!       excessive number of function evaluations.  a reasonable value
+!         for maxfev is 100*(n+1) for iopt=1 and 200*(n+1) for iopt=2.
+!         if the number of calls to fcn reaches maxfev, then this
+!         indicates that the routine is converging very slowly as
+!         measured by the progress of fvec, and info is set to 2.  this
+!         situation should be unusual because, as indicated below, lack
+!         of good progress is usually diagnosed earlier by snsq,
+!         causing termination with info = 4 or info = 5.
+!
+!       lack of good progress.  snsq searches for a zero of the system
+!         by minimizing the sum of the squares of the functions.  in so
+!         doing, it can become trapped in a region where the minimum
+!         does not correspond to a zero of the system and, in this situ-
+!         ation, the iteration eventually fails to make good progress.
+!         in particular, this will happen if the system does not have a
+!         zero.  if the system has a zero, rerunning snsq from a dif-
+!         ferent starting point may be helpful.
+!
+!
+! 6. characteristics of the algorithm.
+!
+!       snsq is a modification of the powell hybrid method.  two of its
+!       main characteristics involve the choice of the correction as a
+!       convex combination of the newton and scaled gradient directions,
+!       and the updating of the jacobian by the rank-1 method of broy-
+!       den.  the choice of the correction guarantees (under reasonable
+!       conditions) global convergence for starting points far from the
+!       solution and a fast rate of convergence.  the jacobian is
+!       calculated at the starting point by either the user-supplied
+!       subroutine or a forward-difference approximation, but it is not
+!       recalculated until the rank-1 method fails to produce satis-
+!       factory progress.
+!
+!       timing.  the time required by snsq to solve a given problem
+!         depends on n, the behavior of the functions, the accuracy
+!         requested, and the starting point.  the number of arithmetic
+!         operations needed by snsq is about 11.5*(n**2) to process
+!         each evaluation of the functions (call to fcn) and 1.3*(n**3)
+!         to process each evaluation of the jacobian (call to jac,
+!         if iopt = 1).  unless fcn and jac can be evaluated quickly,
+!         the timing of snsq will be strongly influenced by the time
+!         spent in fcn and jac.
+!
+!       storage.  snsq requires (3*n**2 + 17*n)/2 single precision
+!         storage locations, in addition to the storage required by the
+!         program.  there are no internally declared storage arrays.
+!
+!
+! 7. example.
+!
+!       the problem is to determine the values of x(1), x(2), ..., x(9),
+!       which solve the system of tridiagonal equations
+!
+!       (3-2*x(1))*x(1)           -2*x(2)                   = -1
+!               -x(i-1) + (3-2*x(i))*x(i)         -2*x(i+1) = -1, i=2-8
+!                                   -x(8) + (3-2*x(9))*x(9) = -1
+! c     **********
+!
+!       program test(input,output,tape6=output)
+! c
+! c     driver for snsq example.
+! c
+!       integer j,iopt,n,maxfev,ml,mu,mode,nprint,info,nfev,ldfjac,lr,
+!      *        nwrite
+!       real xtol,epsfcn,factor,fnorm
+!       real x(9),fvec(9),diag(9),fjac(9,9),r(45),qtf(9),
+!      *     wa1(9),wa2(9),wa3(9),wa4(9)
+!       real snrm2,r1mach
+!       external fcn
+!       data nwrite /6/
+!
+!       iopt = 2
+!       n = 9
+! c
+! c     the following starting values provide a rough solution.
+! c
+!       do j = 1, 9
+!          x(j) = -1.0E+00
+!       end do
+!
+!       ldfjac = 9
+!       lr = 45
+! c
+! c     set xtol to the square root of the machine precision.
+! c     unless high precision solutions are required,
+! c     this is the recommended setting.
+! c
+!       xtol = sqrt(r1mach(4))
+! c
+!       maxfev = 2000
+!       ml = 1
+!       mu = 1
+!       epsfcn = 0.0E+00
+!       mode = 2
+!       do j = 1, 9
+!          diag(j) = 1.0E+00
+!       end do
+!       factor = 1.e2
+!       nprint = 0
+! c
+!       call snsq(fcn,jac,iopt,n,x,fvec,fjac,ldfjac,xtol,maxfev,ml,mu,
+!      *           epsfcn,diag,mode,factor,nprint,info,nfev,njev,
+!      *           r,lr,qtf,wa1,wa2,wa3,wa4)
+!       fnorm = snrm2(n,fvec,1)
+!       write (nwrite,1000) fnorm,nfev,info,(x(j),j=1,n)
+!       stop
+!  1000 format (5x,' final l2 norm of the residuals',e15.7 //
+!      *        5x,' number of function evaluations',i10 //
+!      *        5x,' exit parameter',16x,i10 //
+!      *        5x,' final approximate solution' // (5x,3e15.7))
+!       end
+!       subroutine fcn(n,x,fvec,iflag)
+!       integer n,iflag
+!       real x(n),fvec(n)
+!       integer k
+!       real temp,temp1,temp2
+! c
+!       if (iflag /= 0) go to 5
+! c
+! c     insert print statements here when nprint is positive.
+! c
+!       return
+!     5 continue
+!       do k = 1, n
+!          temp = (3.0E+00 - 2.0*x(k))*x(k)
+!          temp1 = 0.0E+00
+!          if (k /= 1) temp1 = x(k-1)
+!          temp2 = 0.0E+00
+!          if (k /= n) temp2 = x(k+1)
+!          fvec(k) = temp - temp1 - 2.0*temp2 + 1.0E+00
+!       end do
+!       return
+!       end
+!
+!       results obtained with different compilers or machines
+!       may be slightly different.
+!
+!       final l2 norm of the residuals  0.1192636e-07
+!
+!       number of function evaluations        14
+!
+!       exit parameter                         1
+!
+!       final approximate solution
+!
+!       -0.5706545e+00 -0.6816283e+00 -0.7017325e+00
+!       -0.7042129e+00 -0.7013690e+00 -0.6918656e+00
+!       -0.6657920e+00 -0.5960342e+00 -0.4164121e+00
+!
+!  references  powell, m. j. d.
+!                 a hybrid method for nonlinear equations.
+!                 numerical methods for nonlinear algebraic equations,
+!                 p. rabinowitz, editor.  gordon and breach, 1970.
+!
+  integer ldfjac
+  integer lr
+  integer n
+!
+  real actred
+  real delta
+  real diag(n)
+  real epsfcn
+  real epsmch
+  real factor
+  real fjac(ldfjac,n)
+  real fnorm
+  real fnorm1
+  real fvec(n)
+  integer i
+  integer iflag
+  integer info
+  integer iopt
+  integer iter
+  integer iwa(1)
+  integer j
+  logical jeval
+  integer jm1
+  integer l
+  integer maxfev
+  integer ml
+  integer mode
+  integer mu
+  integer ncfail
+  integer ncsuc
+  integer nfev
+  integer njev
+  integer nprint
+  integer nslow1
+  integer nslow2
+  real p001
+  real p0001
+  real, parameter :: p1 = 0.1E+00
+  real, parameter :: p5 = 0.5E+00
+  real pnorm
+  real prered
+  real qtf(n)
+  real r(lr)
+  real r1mach
+  real ratio
+  logical sing
+  real snrm2
+  real sum
+  real temp
+  real xnorm
+  real wa1(n)
+  real wa2(n)
+  real wa3(n)
+  real wa4(n)
+  real x(n)
+  real xtol
+!
+  external fcn
+  external jac
+!
+  data p001,p0001 /1.0e-03,1.0e-04/
+!
+  epsmch = epsilon ( epsmch )
+  info = 0
+  iflag = 0
+  nfev = 0
+  njev = 0
+
+  if (iopt < 1 .or. iopt > 2 ) then
+    go to 300
+  else if ( n <= 0 .or. xtol < 0.0E+00 .or. maxfev <= 0 ) then
+    go to 300
+  else if ( ml < 0 .or. mu < 0 .or. factor <= 0.0E+00 ) then
+    go to 300
+  else if ( ldfjac < n .or. lr < (n*(n + 1))/2) then
+    go to 300
+  end if
+
+  if ( mode /= 2 ) then
+    go to 20
+  end if
+
+  do j = 1, n
+    if ( diag(j) <= 0.0E+00 ) then
+      go to 300
+    end if
+  end do
+
+   20 continue
+!
+!  evaluate the function at the starting point and calculate its norm.
+!
+  iflag = 1
+  call fcn ( n, x, fvec, iflag )
+  nfev = 1
+  if (iflag < 0) go to 300
+  fnorm = snrm2 ( n, fvec, 1 )
+!
+!  initialize iteration counter and monitors.
+!
+  iter = 1
+  ncsuc = 0
+  ncfail = 0
+  nslow1 = 0
+  nslow2 = 0
+!
+!  beginning of the outer loop.
+!
+   30 continue
+     jeval = .true.
+!
+!  calculate the jacobian matrix.
+!
+     if ( iopt /= 2 ) then
+!
+!  user supplies jacobian
+!
+        call jac(n,x,fvec,fjac,ldfjac,iflag)
+        njev = njev+1
+!
+!  code approximates the jacobian
+!
+      else
+
+        iflag = 2
+
+        call fdjac1 ( fcn, n, x, fvec, fjac, ldfjac, iflag, ml, mu, epsfcn )
+
+        nfev = nfev + min(ml+mu+1,n)
+
+     end if
+
+     if (iflag < 0) go to 300
+!
+!  compute the qr factorization of the jacobian.
+!
+     call qrfac(n,n,fjac,ldfjac,.false.,iwa,1,wa1,wa2,wa3)
+!
+!  on the first iteration and if mode is 1, scale according
+!  to the norms of the columns of the initial jacobian.
+!
+     if (iter /= 1) go to 70
+     if (mode == 2) go to 50
+     diag(1:n) = wa2(1:n)
+     do j = 1, n
+       if (wa2(j) == 0.0) diag(j) = 1.0E+00
+     end do
+
+   50    continue
+!
+!  on the first iteration, calculate the norm of the scaled x
+!  and initialize the step bound delta.
+!
+     wa3(1:n) = diag(1:n) * x(1:n)
+     xnorm = snrm2(n,wa3,1)
+     delta = factor*xnorm
+     if (delta == 0.0) delta = factor
+
+70   continue
+!
+!  form (q transpose)*fvec and store in qtf.
+!
+     qtf(1:n) = fvec(1:n)
+
+     do j = 1, n
+
+       if ( fjac(j,j) /= 0.0E+00 ) then
+
+        sum = 0.0E+00
+        do i = j, n
+           sum = sum + fjac(i,j)*qtf(i)
+        end do
+
+        temp = -sum/fjac(j,j)
+        do i = j, n
+           qtf(i) = qtf(i) + fjac(i,j)*temp
+        end do
+
+      end if
+
+    end do
+!
+!  copy the triangular factor of the qr factorization into r.
+!
+     sing = .false.
+
+     do j = 1, n
+
+        l = j
+        jm1 = j - 1
+        do i = 1, jm1
+           r(l) = fjac(i,j)
+           l = l + n - i
+        end do
+        r(l) = wa1(j)
+        if (wa1(j) == 0.0) sing = .true.
+
+     end do
+!
+!  accumulate the orthogonal factor in fjac.
+!
+     call qform(n,n,fjac,ldfjac,wa1)
+!
+!  rescale if necessary.
+!
+     if (mode == 2) go to 170
+
+     do j = 1, n
+       diag(j) = max (diag(j),wa2(j))
+     end do
+
+  170    continue
+!
+!  beginning of the inner loop.
+!
+  180    continue
+
+!
+!  if requested, call fcn to enable printing of iterates.
+!
+        if (nprint > 0) then
+          iflag = 0
+          if (mod(iter-1,nprint) == 0) call fcn(n,x,fvec,iflag)
+          if (iflag < 0) go to 300
+        end if
+!
+!  determine the direction p.
+!
+        call dogleg ( n, r, lr, diag, qtf, delta, wa1, wa2, wa3 )
+
+!
+!  store the direction p and x + p. calculate the norm of p.
+!
+        wa1(1:n) = -wa1(1:n)
+        wa2(1:n) = x(1:n) + wa1(1:n)
+        wa3(1:n) = diag(1:n)*wa1(1:n)
+        pnorm = snrm2(n,wa3,1)
+!
+!  on the first iteration, adjust the initial step bound.
+!
+        if (iter == 1) delta = min (delta,pnorm)
+!
+!  Evaluate the function at x + p and calculate its norm.
+!
+        iflag = 1
+        call fcn(n,wa2,wa4,iflag)
+        nfev = nfev + 1
+        if (iflag < 0) go to 300
+        fnorm1 = snrm2(n,wa4,1)
+!
+!  Compute the scaled actual reduction.
+!
+        actred = - 1.0E+00
+        if (fnorm1 < fnorm) actred = 1.0E+00 - (fnorm1/fnorm)**2
+!
+!  compute the scaled predicted reduction.
+!
+        l = 1
+        do i = 1, n
+           sum = 0.0E+00
+           do j = i, n
+              sum = sum + r(l)*wa1(j)
+              l = l + 1
+           end do
+           wa3(i) = qtf(i) + sum
+        end do
+
+        temp = snrm2(n,wa3,1)
+        prered = 0.0E+00
+        if (temp < fnorm) prered = 1.0E+00 - (temp/fnorm)**2
+!
+!  Compute the ratio of the actual to the predicted reduction.
+!
+        ratio = 0.0E+00
+        if (prered > 0.0) ratio = actred/prered
+!
+!  update the step bound.
+!
+        if ( ratio < p1 ) then
+
+           ncsuc = 0
+           ncfail = ncfail + 1
+           delta = p5*delta
+
+        else
+
+           ncfail = 0
+           ncsuc = ncsuc + 1
+
+           if (ratio >= p5 .or. ncsuc > 1) then
+             delta = max (delta,pnorm/p5)
+           end if
+
+           if (abs(ratio-1.0) <= p1) delta = pnorm/p5
+
+        end if
+!
+!  successful iteration. update x, fvec, and their norms.
+!
+        if ( ratio >= p0001 ) then
+          x(1:n) = wa2(1:n)
+          wa2(1:n) = diag(1:n)*x(1:n)
+          fvec(1:n) = wa4(1:n)
+          xnorm = snrm2(n,wa2,1)
+          fnorm = fnorm1
+          iter = iter + 1
+        end if
+!
+!  determine the progress of the iteration.
+!
+        nslow1 = nslow1 + 1
+        if (actred >= p001) nslow1 = 0
+        if (jeval) nslow2 = nslow2 + 1
+        if (actred >= p1) nslow2 = 0
+!
+!  test for convergence.
+!
+        if (delta <= xtol*xnorm .or. fnorm == 0.0) info = 1
+        if (info /= 0) go to 300
+!
+!  tests for termination and stringent tolerances.
+!
+        if (nfev >= maxfev) info = 2
+        if (p1* max (p1*delta,pnorm) <= epsmch*xnorm) info = 3
+        if (nslow2 == 5) info = 4
+        if (nslow1 == 10) info = 5
+        if (info /= 0) go to 300
+!
+!  criterion for recalculating jacobian
+!
+        if (ncfail == 2) go to 290
+!
+!  calculate the rank one modification to the jacobian
+!  and update qtf if necessary.
+!
+        do j = 1, n
+           sum = 0.0E+00
+           do i = 1, n
+              sum = sum + fjac(i,j)*wa4(i)
+           end do
+           wa2(j) = (sum - wa3(j))/pnorm
+           wa1(j) = diag(j)*((diag(j)*wa1(j))/pnorm)
+           if (ratio >= p0001) qtf(j) = sum
+        end do
+!
+!  compute the qr factorization of the updated jacobian.
+!
+        call r1updt(n,n,r,lr,wa1,wa2,wa3,sing)
+        call r1mpyq(n,n,fjac,ldfjac,wa2,wa3)
+        call r1mpyq(1,n,qtf,1,wa2,wa3)
+!
+!  end of the inner loop.
+!
+        jeval = .false.
+        go to 180
+  290    continue
+!
+!  end of the outer loop.
+!
+     go to 30
+  300 continue
+!
+!  termination, either normal or user imposed.
+!
+  if (iflag < 0) info = iflag
+  iflag = 0
+  if (nprint > 0) call fcn(n,x,fvec,iflag)
+  if (info < 0) call xerror( &
+    'snsq   -- execution terminated because user set iflag negative.',63,1,1)
+
+  if (info == 0) call xerror( 'snsq   -- invalid input parameter.',34,2,1)
+  if (info == 2) call xerror( 'snsq   -- too many function evaluations.',40,9,1)
+  if (info == 3) then
+    call xerror( 'snsq   -- xtol too small. no further improvement possible.', &
+      58,3,1)
+  end if
+
+  if ( info > 4 ) then
+    call xerror( 'snsq   -- iteration not making good progress.',45,1,1)
+  end if
+
+  return
+end
+subroutine snsqe(fcn,jac,iopt,n,x,fvec,tol,nprint,info,wa,lwa)
+!
+!*******************************************************************************
+!
+!! SNSQE is the easy-to-use version of SNSQ.
+!
+!
+!  Discussion:
+!
+!    SNSQ finds a zero of a system of N nonlinear functions in N variables by a
+!    modification of the Powell hybrid method.  This code is the
+!    combination of the MINPACK codes HYBRD1 and HYBRJ1.
+!
+!  Description:
+!
+! 1. purpose.
+!
+!
+!       the purpose of snsqe is to find a zero of a system of n non-
+!       linear functions in n variables by a modification of the powell
+!       hybrid method.  this is done by using the more general nonlinear
+!       equation solver snsq.  the user must provide a subroutine which
+!       calculates the functions.  the user has the option of either to
+!       provide a subroutine which calculates the jacobian or to let the
+!       code calculate it by a forward-difference approximation.  this
+!       code is the combination of the minpack codes (argonne) hybrd1
+!       and hybrj1.
+!
+!
+! 2. subroutine and type statements.
+!
+!     subroutine snsqe(fcn,jac,iopt,n,x,fvec,tol,nprint,info,
+!      *                  wa,lwa)
+!       integer iopt,n,nprint,info,lwa
+!       real tol
+!       real x(n),fvec(n),wa(lwa)
+!       external fcn,jac
+!
+! 3. parameters.
+!
+!       parameters designated as input parameters must be specified on
+!       entry to snsqe and are not changed on exit, while parameters
+!       designated as output parameters need not be specified on entry
+!       and are set to appropriate values on exit from snsqe.
+!
+!       fcn is the name of the user-supplied subroutine which calculates
+!         the functions.  fcn must be declared in an external statement
+!         in the user calling program, and should be written as follows.
+!
+!       subroutine fcn(n,x,fvec,iflag)
+!         integer n,iflag
+!         real x(n),fvec(n)
+!
+!         calculate the functions at x and
+!         return this vector in fvec.
+!
+!         return
+!       end
+!
+!         the value of iflag should not be changed by fcn unless the
+!         user wants to terminate execution of snsqe.  in this case, set
+!         iflag to a negative integer.
+!
+!       jac is the name of the user-supplied subroutine which calculates
+!         the jacobian.  if iopt=1, then jac must be declared in an
+!         external statement in the user calling program, and should be
+!         written as follows.
+!
+!       subroutine jac(n,x,fvec,fjac,ldfjac,iflag)
+!         integer n,ldfjac,iflag
+!         real x(n),fvec(n),fjac(ldfjac,n)
+!
+!         calculate the jacobian at x and return this
+!         matrix in fjac.  fvec contains the function
+!         values at x and should not be altered.
+!
+!         return
+!       end
+!
+!         the value of iflag should not be changed by jac unless the
+!         user wants to terminate execution of snsqe.  in this case, set
+!         iflag to a negative integer.
+!
+!         if iopt=2, jac can be ignored (treat it as a dummy argument).
+!
+!       iopt is an input variable which specifies how the jacobian will
+!         be calculated.  if iopt=1, then the user must supply the
+!         jacobian through the subroutine jac.  if iopt=2, then the
+!         code will approximate the jacobian by forward-differencing.
+!
+!       n is a positive integer input variable set to the number of
+!       functions and variables.
+!
+!       x is an array of length n.  on input, x must contain an initial
+!         estimate of the solution vector.  on output, x contains the
+!         final estimate of the solution vector.
+!
+!       fvec is an output array of length n which contains the functions
+!         evaluated at the output x.
+!
+!       tol is a non-negative input variable.  termination occurs when
+!         the algorithm estimates that the relative error between x and
+!         the solution is at most tol.  section 4 contains more details
+!         about tol.
+!
+!       nprint is an integer input variable that enables controlled
+!         printing of iterates if it is positive.  in this case, fcn is
+!         called with iflag = 0 at the beginning of the first iteration
+!         and every nprint iteration thereafter and immediately prior
+!         to return, with x and fvec available for printing. appropriate
+!         print statements must be added to fcn (see example). if nprint
+!         is not positive, no special calls of fcn with iflag = 0 are
+!         made.
+!
+!       info is an integer output variable.  if the user has terminated
+!         execution, info is set to the (negative) value of iflag.  see
+!         description of fcn and jac. otherwise, info is set as follows.
+!
+!         info = 0  improper input parameters.
+!
+!         info = 1  algorithm estimates that the relative error between
+!                   x and the solution is at most tol.
+!
+!         info = 2  number of calls to fcn has reached or exceeded
+!                   100*(n+1) for iopt=1 or 200*(n+1) for iopt=2.
+!
+!         info = 3  tol is too small.  no further improvement in the
+!                   approximate solution x is possible.
+!
+!         info = 4  iteration is not making good progress.
+!
+!         sections 4 and 5 contain more details about info.
+!
+!       wa is a work array of length lwa.
+!
+!       lwa is a positive integer input variable not less than
+!         (3*n**2+13*n))/2.
+!
+!
+! 4. successful completion.
+!
+!       the accuracy of snsqe is controlled by the convergence parame-
+!       ter tol.  this parameter is used in a test which makes a compar-
+!       ison between the approximation x and a solution xsol.  snsqe
+!       terminates when the test is satisfied.  if tol is less than the
+!       machine precision (as defined by the function r1mach(4)), then
+!       snsqe attemps only to satisfy the test defined by the machine
+!       precision.  further progress is not usually possible.  unless
+!       high precision solutions are required, the recommended value
+!       for tol is the square root of the machine precision.
+!
+!       the test assumes that the functions are reasonably well behaved,
+!       and, if the jacobian is supplied by the user, that the functions
+!       and the jacobian  coded consistently.  if these conditions
+!       are not satisfied, snsqe may incorrectly indicate convergence.
+!       the coding of the jacobian can be checked by the subroutine
+!       chkder.  if the jacobian is coded correctly or iopt=2, then
+!       the validity of the answer can be checked, for example, by
+!       rerunning snsqe with a tighter tolerance.
+!
+!       convergence test.  if snrm2(z) denotes the euclidean norm of a
+!         vector z, then this test attempts to guarantee that
+!
+!               snrm2(x-xsol) <=  tol*snrm2(xsol).
+!
+!         if this condition is satisfied with tol = 10**(-k), then the
+!         larger components of x have k significant decimal digits and
+!         info is set to 1.  there is a danger that the smaller compo-
+!         nents of x may have large relative errors, but the fast rate
+!         of convergence of snsqe usually avoids this possibility.
+!
+!
+! 5. unsuccessful completion.
+!
+!       unsuccessful termination of snsqe can be due to improper input
+!       parameters, arithmetic interrupts, an excessive number of func-
+!       tion evaluations, errors in the functions, or lack of good prog-
+!       ress.
+!
+!       improper input parameters.  info is set to 0 if iopt < 1, or
+!         iopt > 2, or n <= 0, or tol < 0.0, or
+!         lwa < (3*n**2+13*n)/2.
+!
+!       arithmetic interrupts.  if these interrupts occur in the fcn
+!       subroutine during an early stage of the computation, they may
+!         be caused by an unacceptable choice of x by snsqe.  in this
+!         case, it may be possible to remedy the situation by not evalu-
+!         ating the functions here, but instead setting the components
+!         of fvec to numbers that exceed those in the initial fvec.
+!
+!       excessive number of function evaluations.  if the number of
+!         calls to fcn reaches 100*(n+1) for iopt=1 or 200*(n+1) for
+!         iopt=2, then this indicates that the routine is converging
+!         very slowly as measured by the progress of fvec, and info is
+!         set to 2.  this situation should be unusual because, as
+!         indicated below, lack of good progress is usually diagnosed
+!         earlier by snsqe, causing termination with info = 4.
+!
+!       errors in the functions.  when iopt=2, the choice of step length
+!         in the forward-difference approximation to the jacobian
+!         assumes that the relative errors in the functions are of the
+!         order of the machine precision.  if this is not the case,
+!         snsqe may fail (usually with info = 4).  the user should
+!         then either use snsq and set the step length or use iopt=1
+!         and supply the jacobian.
+!
+!       lack of good progress.  snsqe searches for a zero of the system
+!         by minimizing the sum of the squares of the functions.  in so
+!         doing, it can become trapped in a region where the minimum
+!         does not correspond to a zero of the system and, in this situ-
+!         ation, the iteration eventually fails to make good progress.
+!         in particular, this will happen if the system does not have a
+!         zero.  if the system has a zero, rerunning snsqe from a dif-
+!         ferent starting point may be helpful.
+!
+!
+! 6. characteristics of the algorithm.
+!
+!       snsqe is a modification of the powell hybrid method.  two of
+!       its main characteristics involve the choice of the correction as
+!       a convex combination of the newton and scaled gradient direc-
+!       tions, and the updating of the jacobian by the rank-1 method of
+!       broyden.  the choice of the correction guarantees (under reason-
+!       able conditions) global convergence for starting points far from
+!       the solution and a fast rate of convergence.  the jacobian is
+!       calculated at the starting point by either the user-supplied
+!       subroutine or a forward-difference approximation, but it is not
+!       recalculated until the rank-1 method fails to produce satis-
+!       factory progress.
+!
+!       timing.  the time required by snsqe to solve a given problem
+!         depends on n, the behavior of the functions, the accuracy
+!         requested, and the starting point.  the number of arithmetic
+!         operations needed by snsqe is about 11.5*(n**2) to process
+!         each evaluation of the functions (call to fcn) and 1.3*(n**3)
+!         to process each evaluation of the jacobian (call to jac,
+!         if iopt = 1).  unless fcn and jac can be evaluated quickly,
+!         the timing of snsqe will be strongly influenced by the time
+!         spent in fcn and jac.
+!
+!       storage.  snsqe requires (3*n**2 + 17*n)/2 single precision
+!         storage locations, in addition to the storage required by the
+!         program.  there are no internally declared storage arrays.
+!
+!
+! 7. example.
+!
+!       the problem is to determine the values of x(1), x(2), ..., x(9),
+!       which solve the system of tridiagonal equations
+!
+!       (3-2*x(1))*x(1)           -2*x(2)                   = -1
+!               -x(i-1) + (3-2*x(i))*x(i)         -2*x(i+1) = -1, i=2-8
+!                                   -x(8) + (3-2*x(9))*x(9) = -1
+!
+!       program test(input,output,tape6=output)
+! c
+! c     driver for snsqe example.
+! c
+!       integer j,n,iopt,nprint,info,lwa,nwrite
+!       real tol,fnorm
+!       real x(9),fvec(9),wa(180)
+!       real snrm2,r1mach
+!       external fcn
+!       data nwrite /6/
+! c
+!       iopt = 2
+!       n = 9
+! c
+! c     the following starting values provide a rough solution.
+! c
+!       do j = 1, 9
+!          x(j) = -1.0E+00
+!       end do
+!
+!       lwa = 180
+!       nprint = 0
+! c
+! c     set tol to the square root of the machine precision.
+! c     unless high precision solutions are required,
+! c     this is the recommended setting.
+! c
+!       tol = sqrt(r1mach(4))
+! c
+!       call snsqe(fcn,jac,iopt,n,x,fvec,tol,nprint,info,wa,lwa)
+!       fnorm = snrm2(n,fvec)
+!       write (nwrite,1000) fnorm,info,(x(j),j=1,n)
+!       stop
+!  1000 format (5x,' final l2 norm of the residuals',e15.7 //
+!      *        5x,' exit parameter',16x,i10 //
+!      *        5x,' final approximate solution' // (5x,3e15.7))
+!     end
+!     subroutine fcn(n,x,fvec,iflag)
+!       integer n,iflag
+!       real x(n),fvec(n)
+!       integer k
+!       real temp,temp1,temp2
+!
+!       do k = 1, n
+!          temp = (3.0E+00 - 2.0*x(k))*x(k)
+!          temp1 = 0.0E+00
+!          if (k /= 1) temp1 = x(k-1)
+!          temp2 = 0.0E+00
+!          if (k /= n) temp2 = x(k+1)
+!          fvec(k) = temp - temp1 - 2.0*temp2 + 1.0E+00
+!       end do
+!
+!       return
+!     end
+!
+!       results obtained with different compilers or machines
+!       may be slightly different.
+!
+!       final l2 norm of the residuals  0.1192636e-07
+!
+!       exit parameter                         1
+!
+!       final approximate solution
+!
+!       -0.5706545e+00 -0.6816283e+00 -0.7017325e+00
+!       -0.7042129e+00 -0.7013690e+00 -0.6918656e+00
+!       -0.6657920e+00 -0.5960342e+00 -0.4164121e+00
+!
+!  references  powell, m. j. d.
+!                 a hybrid method for nonlinear equations.
+!                 numerical methods for nonlinear algebraic equations,
+!                 p. rabinowitz, editor.  gordon and breach, 1970.
+!
+  integer lwa
+  integer n
+!
+  real epsfcn
+  real, parameter :: factor = 100.0E+00
+  real fvec(n)
+  integer index
+  integer info
+  integer iopt
+  integer j
+  integer lr
+  integer maxfev
+  integer ml
+  integer mode
+  integer mu
+  integer nfev
+  integer njev
+  integer nprint
+  real tol
+  real wa(lwa)
+  real x(n)
+  real xtol
+!
+  external fcn
+  external jac
+!
+  info = 0
+!
+!  Check the input parameters for errors.
+!
+  if (iopt < 1 .or. iopt > 2 .or. n <= 0 .or. tol < 0.0E+00 .or. &
+    lwa < (3*n**2 +13*n)/2) then
+    go to 20
+  end if
+
+  maxfev = 100*(n + 1)
+  if ( iopt == 2 ) maxfev = 2*maxfev
+  xtol = tol
+  ml = n - 1
+  mu = n - 1
+  epsfcn = 0.0E+00
+  mode = 2
+  wa(1:n) = 1.0E+00
+  lr = (n*(n + 1))/2
+  index = 6*n + lr
+
+  call snsq ( fcn, jac, iopt, n, x, fvec, wa(index+1), n, xtol, maxfev, ml, mu, &
+    epsfcn, wa(1), mode, factor, nprint, info, nfev, njev, &
+    wa(6*n+1), lr, wa(n+1), wa(2*n+1), wa(3*n+1), wa(4*n+1), wa(5*n+1) )
+
+  if (info == 5) info = 4
+   20 continue
+
+  if (info == 0) then
+    call xerror( 'snsqe  -- invalid input parameter.',34,2,1)
+  end if
+
+  return
+end
+subroutine sqrank(a,lda,m,n,tol,kr,jpvt,qraux,work)
+!
+!*******************************************************************************
+!
+!! SQRANK computes the QR factorization of a rectangular matrix.
+!
+!
+!    this routine is used in conjunction with sqrlss to solve linear
+!    systems of equations in a least square sense.
+!
+!  Description:
+!
+!     sqrank is used in conjunction with sqrlss to solve
+!     overdetermined, underdetermined and singular linear systems
+!     in a least squares sense.
+!     sqrank uses the linpack subroutine sqrdc to compute the qr
+!     factorization, with column pivoting, of an  m  by  n  matrix  a .
+!     the numerical rank is determined using the tolerance tol.
+!
+!     for more information, see chapter 9 of linpack users guide,
+!     j. dongarra et all, siam, 1979.
+!
+!     on entry
+!
+!        a     real (lda,n) .
+!              the matrix whose decomposition is to be computed.
+!
+!        lda   integer.
+!              the leading dimension of a .
+!
+!        m     integer.
+!              the number of rows of a .
+!
+!        n     integer.
+!              the number of columns of  a .
+!
+!        tol   real.
+!              a relative tolerance used to determine the numerical
+!              rank.  the problem should be scaled so that all the elements
+!              of  a   have roughly the same absolute accuracy, eps.  then a
+!              reasonable value for  tol  is roughly  eps  divided by
+!              the magnitude of the largest element.
+!
+!        jpvt  integer(n)
+!
+!        qraux real(n)
+!
+!        work  real(n)
+!              three auxilliary vectors used by sqrdc .
+!
+!     on return
+!
+!        a     contains the output from sqrdc.
+!              the triangular matrix  r  of the qr factorization is
+!              contained in the upper triangle and information needed
+!              to recover the orthogonal matrix  q  is stored below
+!              the diagonal in  a  and in the vector qraux .
+!
+!        kr    integer.
+!              the numerical rank.
+!
+!        jpvt  the pivot information from sqrdc.
+!
+!     columns jpvt(1),...,jpvt(kr) of the original matrix are linearly
+!     independent to within the tolerance tol and the remaining columns
+!     are linearly dependent.  abs(a(1,1))/abs(a(kr,kr))  is an estimate
+!     of the condition number of the matrix of independent columns,
+!     and of  r .  this estimate will be <= 1/tol .
+!
+!      usage.....see subroutine sqrlss
+!
+!  reference(s)
+!
+!      dongarra, et al, linpack users guide, siam, 1979
+!
+  integer lda
+  integer n
+!
+  real a(lda,n)
+  integer j
+  integer jpvt(*)
+  integer k
+  integer kr
+  integer m
+  real qraux(*)
+  real tol
+  real work(*)
+!
+  jpvt(1:n) = 0
+
+  call sqrdc(a,lda,m,n,qraux,jpvt,work,1)
+  kr = 0
+  k = min(m,n)
+
+  do j = 1, k
+    if (abs(a(j,j)) <= tol*abs(a(1,1))) then
+      return
+    end if
+    kr = j
+  end do
+
+  return
+end
+subroutine sqrdc(x,ldx,n,p,qraux,jpvt,work,job)
+!
+!*******************************************************************************
+!
+!! SQRDC computes the QR factorization of a rectangular matrix.
+!
+!
+!  column pivoting
+!     based on the 2-norms of the reduced columns may be
+!     performed at the user's option.
+!
+!     on entry
+!
+!        x       real(ldx,p), where ldx >= n.
+!                x contains the matrix whose decomposition is to be
+!                computed.
+!
+!        ldx     integer.
+!                ldx is the leading dimension of the array x.
+!
+!        n       integer.
+!                n is the number of rows of the matrix x.
+!
+!        p       integer.
+!                p is the number of columns of the matrix x.
+!
+!        jpvt    integer(p).
+!                jpvt contains integers that control the selection
+!                of the pivot columns.  the k-th column x(k) of x
+!                is placed in one of three classes according to the
+!                value of jpvt(k).
+!
+!                   if jpvt(k) > 0, then x(k) is an initial
+!                                      column.
+!
+!                   if jpvt(k) == 0, then x(k) is a free column.
+!
+!                   if jpvt(k) < 0, then x(k) is a final column.
+!
+!                before the decomposition is computed, initial columns
+!                are moved to the beginning of the array x and final
+!                columns to the end.  both initial and final columns
+!                are frozen in place during the computation and only
+!                free columns are moved.  at the k-th stage of the
+!                reduction, if x(k) is occupied by a free column,
+!                it is interchanged with the free column of largest
+!                reduced norm.  jpvt is not referenced if
+!                job == 0.
+!
+!        work    real(p).
+!                work is a work array.  work is not referenced if
+!                job == 0.
+!
+!        job     integer.
+!                job is an integer that initiates column pivoting.
+!                if job == 0, no pivoting is done.
+!                if job /= 0, pivoting is done.
+!
+!     on return
+!
+!        x       x contains in its upper triangle the upper
+!                triangular matrix r of the qr factorization.
+!                below its diagonal x contains information from
+!                which the orthogonal part of the decomposition
+!                can be recovered.  note that if pivoting has
+!                been requested, the decomposition is not that
+!                of the original matrix x but that of x
+!                with its columns permuted as described by jpvt.
+!
+!        qraux   real(p).
+!                qraux contains further information required to recover
+!                the orthogonal part of the decomposition.
+!
+!        jpvt    jpvt(k) contains the index of the column of the
+!                original matrix that has been interchanged into
+!                the k-th column, if pivoting was requested.
+!
+!     linpack.  this version dated 08/14/78 .
+!     g. w. stewart, university of maryland, argonne national lab.
+!
+!  references  dongarra j.j., bunch j.r., moler c.b., stewart g.w.,
+!                 *linpack users  guide*, siam, 1979.
+!
+  integer ldx
+  integer p
+!
+  integer j
+  integer jj
+  integer job
+  integer jp
+  integer jpvt(p)
+  integer l
+  integer lp1
+  integer lup
+  integer maxj
+  real maxnrm
+  integer n
+  logical negj
+  real nrmxl
+  integer pl
+  integer pu
+  real qraux(1)
+  real sdot
+  real snrm2
+  logical swapj
+  real t
+  real tt
+  real work(1)
+  real x(ldx,1)
+!
+  pl = 1
+  pu = 0
+
+  if ( job /= 0 ) then
+!
+!  pivoting has been requested.  rearrange the columns according to jpvt.
+!
+     do j = 1, p
+        swapj = jpvt(j) > 0
+        negj = jpvt(j) < 0
+        jpvt(j) = j
+        if (negj) jpvt(j) = -j
+        if (swapj) then
+           if (j /= pl) call sswap(n,x(1,pl),1,x(1,j),1)
+           jpvt(j) = jpvt(pl)
+           jpvt(pl) = j
+           pl = pl + 1
+        end if
+     end do
+
+     pu = p
+
+     do jj = 1, p
+        j = p - jj + 1
+        if (jpvt(j) < 0) then
+           jpvt(j) = -jpvt(j)
+           if (j /= pu) then
+              call sswap(n,x(1,pu),1,x(1,j),1)
+              jp = jpvt(pu)
+              jpvt(pu) = jpvt(j)
+              jpvt(j) = jp
+           end if
+           pu = pu - 1
+        end if
+      end do
+
+  end if
+!
+!  compute the norms of the free columns.
+!
+  do j = pl, pu
+     qraux(j) = snrm2(n,x(1,j),1)
+     work(j) = qraux(j)
+  end do
+!
+!  perform the householder reduction of x.
+!
+  lup = min(n,p)
+
+  do l = 1, lup
+
+     if ( pl <= l .and. l < pu ) then
+!
+!  locate the column of largest norm and bring it into the pivot position.
+!
+        maxnrm = 0.0E+00
+        maxj = l
+
+        do j = l, pu
+          if ( qraux(j) > maxnrm ) then
+            maxnrm = qraux(j)
+            maxj = j
+          end if
+        end do
+
+        if (maxj /= l) then
+           call sswap(n,x(1,l),1,x(1,maxj),1)
+           qraux(maxj) = qraux(l)
+           work(maxj) = work(l)
+           jp = jpvt(maxj)
+           jpvt(maxj) = jpvt(l)
+           jpvt(l) = jp
+        end if
+
+     end if
+
+     qraux(l) = 0.0E+00
+
+     if (l == n) go to 190
+!
+!  compute the householder transformation for column l.
+!
+        nrmxl = snrm2(n-l+1,x(l,l),1)
+
+        if (nrmxl == 0.0) go to 180
+
+           if (x(l,l) /= 0.0) nrmxl = sign(nrmxl,x(l,l))
+           call sscal(n-l+1,1.0/nrmxl,x(l,l),1)
+           x(l,l) = 1.0E+00 + x(l,l)
+!
+!  apply the transformation to the remaining columns, updating the norms.
+!
+           lp1 = l + 1
+
+           do j = lp1, p
+
+              t = -sdot(n-l+1,x(l,l),1,x(l,j),1)/x(l,l)
+              call saxpy(n-l+1,t,x(l,l),1,x(l,j),1)
+
+              if (j < pl .or. j > pu) go to 150
+
+              if ( qraux(j) /= 0.0E+00 ) then
+
+                 tt = 1.0E+00 - (abs(x(l,j))/qraux(j))**2
+                 tt = max (tt,0.0)
+                 t = tt
+                 tt = 1.0E+00 + 0.05*tt*(qraux(j)/work(j))**2
+
+                 if (tt /= 1.0) then
+                    qraux(j) = qraux(j)*sqrt(t)
+                 else
+                    qraux(j) = snrm2(n-l,x(l+1,j),1)
+                    work(j) = qraux(j)
+                 end if
+
+               end if
+
+  150             continue
+           end do
+!
+!  save the transformation.
+!
+           qraux(l) = x(l,l)
+           x(l,l) = -nrmxl
+  180       continue
+  190    continue
+
+  end do
+
+  return
+end
+subroutine sqrls (a,lda,m,n,tol,kr,b,x,rsd,jpvt,qraux,work,itask,ind)
+!
+!*******************************************************************************
+!
+!! SQRLS solves an linear system in the least squares sense.
+!
+!
+!  Discussion:
+!
+!    The linear system may be overdetermined, underdetermined or singular.
+!    The solution is obtained using a QR factorization of the
+!    coefficient matrix.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     sqrls is used to solve in a least squares sense
+!     overdetermined, underdetermined and singular linear systems .
+!     the system is  a*x  approximates  b  where  a  is  m  by  n.
+!     b  is a given  m-vector, and  x  is the  n-vector to be computed.
+!     a solution  x  is found which minimimzes the sum of squares (2-norm)
+!     of the residual,  a*x - b .
+!     the numerical rank of a is determined using the tolerance tol.
+!
+!     sqrls uses the linpack subroutine sqrdc to compute the qr
+!     factorization, with column pivoting, of an  m  by  n  matrix  a .
+!     for more information, see chapter 9 of the reference below.
+!
+!
+!     on entry
+!
+!        a     real (lda,n) .
+!              the matrix whose decomposition is to be computed.
+!              in a least squares data fitting problem, a(i,j) is the
+!              value of the j-th basis (model) function at the i-th
+!              data point.
+!
+!        lda   integer.
+!              the leading dimension of a .
+!
+!        m     integer.
+!              the number of rows of a .
+!
+!        n     integer.
+!              the number of columns of  a .
+!
+!        tol   real.
+!              a relative tolerance used to determine the numerical
+!              rank.  the problem should be scaled so that all the
+!              elements of  a   have roughly the same absolute accuracy
+!              eps.  then a reasonable value for  tol  is roughly  eps
+!              divided by the magnitude of the largest element.
+!
+!        jpvt  integer(n)
+!        qraux real(n)
+!        work  real(n)
+!                    three auxiliary arrays used to factor the matrix a.
+!                    (not required if itask > 1)
+!
+!        b     real(m)
+!              the right hand side of the linear system.
+!              in a least squares data fitting problem b(i) contains the
+!              value of i-th observation.
+!
+!        itask integer.
+!              if itask=1, then sqrls factors the matrix a and
+!                          solves the least squares problem.
+!              if itask=2, then sqrls assumes that the matrix a
+!                          was factored with an earlier call to
+!                          sqrls, and only solves the least squares
+!                          problem.
+!
+!     on return
+!
+!        x     real(n) .
+!              a least squares solution to the linear system.
+!
+!        rsd   real(m) .
+!              the residual, b - a*x .  rsd may overwrite  b .
+!
+!        ind   integer
+!              error code:  ind = 0:  no error
+!                           ind = -1: n > lda   (fatal error)
+!                           ind = -2: n < 1     (fatal error)
+!                           ind = -3: itask < 1 (fatal error)
+!
+!        a     contains the output from sqrdc.
+!              the triangular matrix  r  of the qr factorization is
+!              contained in the upper triangle and information needed
+!              to recover the orthogonal matrix  q  is stored below
+!              the diagonal in  a  and in the vector qraux .
+!
+!        kr    integer.
+!              the numerical rank.
+!
+!        jpvt  the pivot information from sqrdc.
+!
+!     columns jpvt(1),...,jpvt(kr) of the original matrix are linearly
+!     independent to within the tolerance tol and the remaining columns
+!     are linearly dependent.  abs(a(1,1))/abs(a(kr,kr))  is an estimate
+!     of the condition number of the matrix of independent columns,
+!     and of  r .  this estimate will be <= 1/tol .
+!
+!      usage....
+!        sqrls can be efficiently used to solve several least squares
+!      problems with the same matrix a.  the first system is solved
+!      with itask = 1.  the subsequent systems are solved with
+!      itask = 2, to avoid the recomputation of the matrix factors.
+!      the parameters  kr, jpvt, and qraux must not be modified
+!      between calls to sqrls.
+!
+  integer lda
+  integer m
+  integer n
+!
+  real a(lda,n)
+  real b(m)
+  integer ind
+  integer itask
+  integer jpvt(n)
+  integer kr
+  real qraux(n)
+  real rsd(m)
+  real tol
+  real work(n)
+  real x(n)
+!
+  if ( lda < n ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SQRLS - Fatal error!'
+    write ( *, * ) '  LDA < N.'
+    stop
+  end if
+
+  if ( n <= 0 ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SQRLS - Fatal error!'
+    write ( *, * ) '  N <= 0.'
+    stop
+  end if
+
+  if ( itask < 1 ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SQRLS - Fatal error!'
+    write ( *, * ) '  ITASK < 1.'
+    stop
+  end if
+
+  ind = 0
+!
+!  Factor the matrix.
+!
+  if ( itask == 1 ) then
+    call sqrank ( a, lda, m, n, tol, kr, jpvt, qraux, work )
+  end if
+!
+!  Solve the least-squares problem.
+!
+  call sqrlss ( a, lda, m, n, kr, b, x, rsd, jpvt, qraux )
+
+  return
+end
+subroutine sqrlss ( a, lda, m, n, kr, b, x, rsd, jpvt, qraux )
+!
+!*******************************************************************************
+!
+!! SQRLSS solves a linear system in a least squares sense.
+!
+!
+!  Discussion:
+!
+!    SQRLSS must be preceeded by a call to SQRANK.
+!
+!    The system is to be solved is
+!      A * X = B
+!    where
+!      A is an M by N matrix with rank KR, as determined by SQRANK,
+!      B is a given M-vector,
+!      X is the N-vector to be computed.
+!
+!    A solution X, with at most KR nonzero components, is found which
+!    minimizes the 2-norm of the residual (A*X-B).
+!
+!     on entry
+!
+!        a,lda,m,n,kr,jpvt,qraux
+!              the output from sqrank .
+!
+!        b     real(m) .
+!              the right hand side of the linear system.
+!
+!     on return
+!
+!        x     real(n) .
+!              a least squares solution to the linear system.
+!
+!        rsd   real(m) .
+!              the residual, b - a*x .  rsd may overwite  b .
+!
+!      usage....
+!        once the matrix a has been formed, sqrank should be
+!      called once to decompose it.  then for each right hand
+!      side, b, sqrlss should be called once to obtain the
+!      solution and residual.
+!
+!  reference(s)
+!      dongarra, et al, linpack users guide, siam, 1979
+!
+  integer lda
+  integer n
+!
+  real a(lda,1)
+  real b(*)
+  integer info
+  integer j
+  integer jpvt(1)
+  integer k
+  integer kr
+  integer m
+  real qraux(*)
+  real rsd(*)
+  real t
+  real x(n)
+!
+  if ( kr /= 0 ) then
+    call sqrsl(a,lda,m,kr,qraux,b,rsd,rsd,x,rsd,rsd,110,info)
+  end if
+
+  jpvt(1:n) = - jpvt(1:n)
+
+  do j = 1, n
+    if (j > kr) x(j) = 0.0E+00
+  end do
+
+  do j = 1, n
+
+    if (jpvt(j) <= 0) then
+
+      k = -jpvt(j)
+      jpvt(j) = k
+
+      do while ( k /= j )
+        t = x(j)
+        x(j) = x(k)
+        x(k) = t
+        jpvt(k) = -jpvt(k)
+        k = jpvt(k)
+      end do
+
+    end if
+
+  end do
+
+  return
+end
+subroutine sqrsl(x,ldx,n,k,qraux,y,qy,qty,b,rsd,xb,job,info)
+!
+!*******************************************************************************
+!
+!! SQRSL applies the output of sqrdc to compute coordinate
+!     transformations, projections, and least squares solutions.
+!     for k <= min(n,p), let xk be the matrix
+!
+!            xk = (x(jpvt(1)),x(jpvt(2)), ... ,x(jpvt(k)))
+!
+!     formed from columnns jpvt(1), ... ,jpvt(k) of the original
+!     n x p matrix x that was input to sqrdc (if no pivoting was
+!     done, xk consists of the first k columns of x in their
+!     original order).  sqrdc produces a factored orthogonal matrix q
+!     and an upper triangular matrix r such that
+!
+!              xk = q * (r)
+!                       (0)
+!
+!     this information is contained in coded form in the arrays
+!     x and qraux.
+!
+!     on entry
+!
+!        x      real(ldx,p)
+!               x contains the output of sqrdc.
+!
+!        ldx    integer
+!               ldx is the leading dimension of the array x.
+!
+!        n      integer
+!               n is the number of rows of the matrix xk.  it must
+!               have the same value as n in sqrdc.
+!
+!        k      integer
+!               k is the number of columns of the matrix xk.  k
+!               must not be greater than min(n,p), where p is the
+!               same as in the calling sequence to sqrdc.
+!
+!        qraux  real(p)
+!               qraux contains the auxiliary output from sqrdc.
+!
+!        y      real(n)
+!               y contains an n-vector that is to be manipulated
+!               by sqrsl.
+!
+!        job    integer
+!               job specifies what is to be computed.  job has
+!               the decimal expansion abcde, with the following
+!               meaning.
+!
+!                    if a /= 0, compute qy.
+!                    if b,c,d, or e /= 0, compute qty.
+!                    if c /= 0, compute b.
+!                    if d /= 0, compute rsd.
+!                    if e /= 0, compute xb.
+!
+!               note that a request to compute b, rsd, or xb
+!               automatically triggers the computation of qty, for
+!               which an array must be provided in the calling
+!               sequence.
+!
+!     on return
+!
+!        qy     real(n).
+!               qy contains q*y, if its computation has been
+!               requested.
+!
+!        qty    real(n).
+!               qty contains trans(q)*y, if its computation has
+!               been requested.  here trans(q) is the
+!               transpose of the matrix q.
+!
+!        b      real(k)
+!               b contains the solution of the least squares problem
+!
+!                    minimize norm2(y - xk*b),
+!
+!               if its computation has been requested.  (note that
+!               if pivoting was requested in sqrdc, the j-th
+!               component of b will be associated with column jpvt(j)
+!               of the original matrix x that was input into sqrdc.)
+!
+!        rsd    real(n).
+!               rsd contains the least squares residual y - xk*b,
+!               if its computation has been requested.  rsd is
+!               also the orthogonal projection of y onto the
+!               orthogonal complement of the column space of xk.
+!
+!        xb     real(n).
+!               xb contains the least squares approximation xk*b,
+!               if its computation has been requested.  xb is also
+!               the orthogonal projection of y onto the column space
+!               of x.
+!
+!        info   integer.
+!               info is zero unless the computation of b has
+!               been requested and r is exactly singular.  in
+!               this case, info is the index of the first zero
+!               diagonal element of r and b is left unaltered.
+!
+!     the parameters qy, qty, b, rsd, and xb are not referenced
+!     if their computation is not requested and in this case
+!     can be replaced by dummy variables in the calling program.
+!     to save storage, the user may in some cases use the same
+!     array for different parameters in the calling sequence.  a
+!     frequently occuring example is when one wishes to compute
+!     any of b, rsd, or xb and does not need y or qty.  in this
+!     case one may identify y, qty, and one of b, rsd, or xb, while
+!     providing separate arrays for anything else that is to be
+!     computed.  thus the calling sequence
+!
+!          call sqrsl(x,ldx,n,k,qraux,y,dum,y,b,y,dum,110,info)
+!
+!     will result in the computation of b and rsd, with rsd
+!     overwriting y.  more generally, each item in the following
+!     list contains groups of permissible identifications for
+!     a single callinng sequence.
+!
+!          1. (y,qty,b) (rsd) (xb) (qy)
+!
+!          2. (y,qty,rsd) (b) (xb) (qy)
+!
+!          3. (y,qty,xb) (b) (rsd) (qy)
+!
+!          4. (y,qy) (qty,b) (rsd) (xb)
+!
+!          5. (y,qy) (qty,rsd) (b) (xb)
+!
+!          6. (y,qy) (qty,xb) (b) (rsd)
+!
+!     in any group the value returned in the array allocated to
+!     the group corresponds to the last member of the group.
+!
+!     linpack.  this version dated 08/14/78 .
+!     g. w. stewart, university of maryland, argonne national lab.
+!
+!  references  dongarra j.j., bunch j.r., moler c.b., stewart g.w.,
+!                 *linpack users  guide*, siam, 1979.
+!
+  integer k
+  integer ldx
+!
+  real b(k)
+  logical cb
+  logical cqty
+  logical cqy
+  logical cr
+  logical cxb
+  integer i
+  integer info
+  integer j
+  integer jj
+  integer job
+  integer ju
+  integer n
+  real qraux(1)
+  real qty(1)
+  real qy(1)
+  real rsd(1)
+  real sdot
+  real t
+  real temp
+  real x(ldx,1)
+  real xb(1)
+  real y(1)
+!
+!  set info flag.
+!
+  info = 0
+!
+!  determine what is to be computed.
+!
+  cqy = job/10000 /= 0
+  cqty = mod(job,10000) /= 0
+  cb = mod(job,1000)/100 /= 0
+  cr = mod(job,100)/10 /= 0
+  cxb = mod(job,10) /= 0
+  ju = min(k,n-1)
+!
+!  special action when n=1.
+!
+  if (ju == 0) then
+     if (cqy) qy(1) = y(1)
+     if (cqty) qty(1) = y(1)
+     if (cxb) xb(1) = y(1)
+     if ( cb ) then
+        if (x(1,1) == 0.0) then
+           info = 1
+        else
+           b(1) = y(1)/x(1,1)
+        end if
+     end if
+     if (cr) rsd(1) = 0.0E+00
+     go to 250
+  end if
+!
+!  set up to compute qy or qty.
+!
+  if (cqy) then
+    qy(1:n) = y(1:n)
+  end if
+
+  if (cqty) then
+    qty(1:n) = y(1:n)
+  end if
+!
+!  Compute QY.
+!
+  if ( cqy ) then
+
+    do jj = 1, ju
+      j = ju - jj + 1
+      if ( qraux(j) /= 0.0E+00 ) then
+        temp = x(j,j)
+        x(j,j) = qraux(j)
+        t = -sdot(n-j+1,x(j,j),1,qy(j),1)/x(j,j)
+        call saxpy(n-j+1,t,x(j,j),1,qy(j),1)
+        x(j,j) = temp
+      end if
+    end do
+
+  end if
+!
+!  Compute Q' * Y.
+!
+  if ( cqty ) then
+
+        do j = 1, ju
+           if ( qraux(j) /= 0.0) then
+              temp = x(j,j)
+              x(j,j) = qraux(j)
+              t = -sdot(n-j+1,x(j,j),1,qty(j),1)/x(j,j)
+              call saxpy(n-j+1,t,x(j,j),1,qty(j),1)
+              x(j,j) = temp
+           end if
+        end do
+
+  end if
+!
+!  set up to compute b, rsd, or xb.
+!
+  if ( cb ) then
+    b(1:k) = qty(1:k)
+  end if
+
+  if ( cxb ) then
+    xb(1:k) = qty(1:k)
+  end if
+
+  if ( cr .and. k < n ) then
+    rsd(k+1:n) = qty(k+1:n)
+  end if
+
+  if ( cxb .and. k+1 <= n ) then
+    xb(k+1:n) = 0.0E+00
+  end if
+
+  if ( cr ) then
+    rsd(1:k) = 0.0E+00
+  end if
+!
+!  compute b.
+!
+  if ( cb ) then
+
+        do jj = 1, k
+
+           j = k - jj + 1
+
+           if (x(j,j) == 0.0) then
+              info = j
+              go to 180
+           end if
+
+           b(j) = b(j)/x(j,j)
+           if (j /= 1) then
+              t = -b(j)
+              call saxpy(j-1,t,x(1,j),1,b,1)
+           end if
+
+        end do
+
+  180       continue
+
+  end if
+
+     if (.not.cr .and. .not.cxb) go to 240
+!
+!  Compute rsd or xb as required.
+!
+        do jj = 1, ju
+
+           j = ju - jj + 1
+           if (qraux(j) == 0.0E+00 ) go to 220
+
+              temp = x(j,j)
+              x(j,j) = qraux(j)
+
+              if ( cr ) then
+                 t = -sdot(n-j+1,x(j,j),1,rsd(j),1)/x(j,j)
+                 call saxpy(n-j+1,t,x(j,j),1,rsd(j),1)
+              end if
+
+              if (.not.cxb) go to 210
+                 t = -sdot(n-j+1,x(j,j),1,xb(j),1)/x(j,j)
+                 call saxpy(n-j+1,t,x(j,j),1,xb(j),1)
+  210             continue
+              x(j,j) = temp
+  220          continue
+        end do
+
+  240    continue
+  250 continue
+
+  return
+end
+subroutine srot ( n, x, incx, y, incy, c, s )
+!
+!*******************************************************************************
+!
+!! SROT applies a plane rotation.
+!
+!
+!  Modified:
+!
+!    08 April 1999
+!
+!  Reference:
+!
+!    Lawson, Hanson, Kincaid, Krogh,
+!    Basic Linear Algebra Subprograms for Fortran Usage,
+!    Algorithm 539,
+!    ACM Transactions on Mathematical Software,
+!    Volume 5, Number 3, September 1979, pages 308-323.
+!
+!  Parameters:
+!
+!    Input, integer N, the number of entries in the vectors.
+!
+!    Input/output, real X(*), one of the vectors to be rotated.
+!
+!    Input, integer INCX, the increment between successive entries of X.
+!
+!    Input/output, real Y(*), one of the vectors to be rotated.
+!
+!    Input, integer INCY, the increment between successive elements of Y.
+!
+!    Input, real C, S, parameters (presumably the cosine and sine of
+!    some angle) that define a plane rotation.
+!
+  real c
+  integer i
+  integer incx
+  integer incy
+  integer ix
+  integer iy
+  integer n
+  real s
+  real stemp
+  real x(*)
+  real y(*)
+!
+  if ( n <= 0 ) then
+
+  else if ( incx == 1 .and. incy == 1 ) then
+
+    do i = 1, n
+      stemp = c * x(i) + s * y(i)
+      y(i) = c * y(i) - s * x(i)
+      x(i) = stemp
+    end do
+
+  else
+
+    if ( incx >= 0 ) then
+      ix = 1
+    else
+      ix = ( - n + 1 ) * incx + 1
+    end if
+
+    if ( incy >= 0 ) then
+      iy = 1
+    else
+      iy = ( - n + 1 ) * incy + 1
+    end if
+
+    do i = 1, n
+      stemp = c * x(ix) + s * y(iy)
+      y(iy) = c * y(iy) - s * x(ix)
+      x(ix) = stemp
+      ix = ix + incx
+      iy = iy + incy
+    end do
+
+  end if
+
+  return
+end
+subroutine srotg ( sa, sb, c, s )
+!
+!*******************************************************************************
+!
+!! SROTG constructs a Givens plane rotation.
+!
+!
+!  Modified:
+!
+!    08 April 1999
+!
+!  Reference:
+!
+!    Lawson, Hanson, Kincaid, Krogh,
+!    Basic Linear Algebra Subprograms for Fortran Usage,
+!    Algorithm 539,
+!    ACM Transactions on Mathematical Software,
+!    Volume 5, Number 3, September 1979, pages 308-323.
+!
+!  Parameters:
+!
+!    Input/output, real SA, SB, ...
+!
+!    Output, real C, S, ...
+!
+  real c
+  real r
+  real roe
+  real s
+  real sa
+  real sb
+  real scale
+  real z
+!
+  if ( abs ( sa ) > abs ( sb ) ) then
+    roe = sa
+  else
+    roe = sb
+  end if
+
+  scale = abs ( sa ) + abs ( sb )
+
+  if ( scale == 0.0E+00 ) then
+    c = 1.0E+00
+    s = 0.0E+00
+    r = 0.0E+00
+  else
+    r = scale * sqrt ( ( sa / scale )**2 + ( sb / scale )**2 )
+    r = sign ( 1.0, roe ) * r
+    c = sa / r
+    s = sb / r
+  end if
+
+  if ( abs ( c ) > 0.0E+00 .and. abs ( c ) <= s ) then
+    z = 1.0E+00 / c
+  else
+    z = s
+  end if
+
+  sa = r
+  sb = z
+
+  return
+end
+subroutine sscal ( n, sa, x, incx )
+!
+!*******************************************************************************
+!
+!! SSCAL scales a vector by a constant.
+!
+!
+!  Modified:
+!
+!    08 April 1999
+!
+!  Reference:
+!
+!    Lawson, Hanson, Kincaid, Krogh,
+!    Basic Linear Algebra Subprograms for Fortran Usage,
+!    Algorithm 539,
+!    ACM Transactions on Mathematical Software,
+!    Volume 5, Number 3, September 1979, pages 308-323.
+!
+!  Parameters:
+!
+!    Input, integer N, the number of entries in the vector.
+!
+!    Input, real SA, the multiplier.
+!
+!    Input/output, real X(*), the vector to be scaled.
+!
+!    Input, integer INCX, the increment between successive entries of X.
+!
+  integer i
+  integer incx
+  integer ix
+  integer m
+  integer n
+  real sa
+  real x(*)
+!
+  if ( n <= 0 ) then
+
+  else if ( incx == 1 ) then
+
+    m = mod ( n, 5 )
+
+    x(1:m) = sa * x(1:m)
+
+    do i = m+1, n, 5
+      x(i)   = sa * x(i)
+      x(i+1) = sa * x(i+1)
+      x(i+2) = sa * x(i+2)
+      x(i+3) = sa * x(i+3)
+      x(i+4) = sa * x(i+4)
+    end do
+
+  else
+
+    if ( incx >= 0 ) then
+      ix = 1
+    else
+      ix = ( - n + 1 ) * incx + 1
+    end if
+
+    do i = 1, n
+      x(ix) = sa * x(ix)
+      ix = ix + incx
+    end do
+
+  end if
+
+  return
+end
+subroutine ssvdc(x,ldx,n,p,s,e,u,ldu,v,ldv,work,job,info)
+!
+!*******************************************************************************
+!
+!! SSVDC computes the singular value decomposition of a rectangular matrix.
+!
+!
+!  The routine reduces a real nxp matrix x by
+!     orthogonal transformations u and v to diagonal form.  the
+!     diagonal elements s(i) are the singular values of x.  the
+!     columns of u are the corresponding left singular vectors,
+!     and the columns of v the right singular vectors.
+!
+!     on entry
+!
+!         x         real(ldx,p), where ldx >= n.
+!                   x contains the matrix whose singular value
+!                   decomposition is to be computed.  x is
+!                   destroyed by ssvdc.
+!
+!         ldx       integer
+!                   ldx is the leading dimension of the array x.
+!
+!         n         integer
+!                   n is the number of rows of the matrix x.
+!
+!         p         integer
+!                   p is the number of columns of the matrix x.
+!
+!         ldu       integer
+!                   ldu is the leading dimension of the array u.
+!                   (see below).
+!
+!         ldv       integer
+!                   ldv is the leading dimension of the array v.
+!                   (see below).
+!
+!         work      real(n)
+!                   work is a scratch array.
+!
+!         job       integer
+!                   job controls the computation of the singular
+!                   vectors.  it has the decimal expansion ab
+!                   with the following meaning
+!
+!                        a == 0  do not compute the left singular
+!                                  vectors.
+!                        a == 1  return the n left singular vectors
+!                                  in u.
+!                        a >= 2  return the first min(n,p) singular
+!                                  vectors in u.
+!                        b == 0  do not compute the right singular
+!                                  vectors.
+!                        b == 1  return the right singular vectors
+!                                  in v.
+!
+!     on return
+!
+!         s         real(mm), where mm=min(n+1,p).
+!                   the first min(n,p) entries of s contain the
+!                   singular values of x arranged in descending
+!                   order of magnitude.
+!
+!         e         real(p).
+!                   e ordinarily contains zeros.  however, see the
+!                   discussion of info for exceptions.
+!
+!         u         real(ldu,k), where ldu >= n.  if joba == 1, then
+!                                   k == n.  if joba >= 2 , then
+!                                   k == min(n,p).
+!                   u contains the matrix of right singular vectors.
+!                   u is not referenced if joba == 0.  if n <= p
+!                   or if joba == 2, then u may be identified with x
+!                   in the subroutine call.
+!
+!         v         real(ldv,p), where ldv >= p.
+!                   v contains the matrix of right singular vectors.
+!                   v is not referenced if job == 0.  if p <= n,
+!                   then v may be identified with x in the
+!                 subroutine call.
+!
+!         info      integer.
+!                   the singular values (and their corresponding
+!                   singular vectors) s(info+1),s(info+2),...,s(m)
+!                   are correct (here m=min(n,p)).  thus if
+!                   info == 0, all the singular values and their
+!                   vectors are correct.  in any event, the matrix
+!                   b = trans(u)*x*v is the bidiagonal matrix
+!                   with the elements of s on its diagonal and the
+!                   elements of e on its super-diagonal (trans(u)
+!                   is the transpose of u).  thus the singular
+!                   values of x and b are the same.
+!
+!     linpack.  this version dated 03/19/79 .
+!     g. w. stewart, university of maryland, argonne national lab.
+!
+  integer ldu
+  integer ldv
+  integer ldx
+!
+  real b
+  real c
+  real cs
+  real e(*)
+  real el
+  real emm1
+  real f
+  real g
+  integer i
+  integer info
+  integer iter
+  integer j
+  integer job
+  integer jobu
+  integer k
+  integer kase
+  integer kk
+  integer n
+  integer p
+  real s(*)
+  real sdot
+  real t
+  real t1
+  real test
+  real u(ldu,*)
+  real v(ldv,*)
+  logical wantu
+  logical wantv
+  real work(*)
+  real x(ldx,*)
+  real ztest
+
+  integer l,ll,lls,lm1,lp1,ls,lu,m,maxit
+  integer mm,mm1,mp1,nct,nctp1,ncu,nrt,nrtp1
+  real snrm2,scale,shift,sl,sm,sn,smm1
+!
+!  set the maximum number of iterations.
+!
+  maxit = 30
+!
+!  determine what is to be computed.
+!
+  wantu = .false.
+  wantv = .false.
+  jobu = mod(job,100)/10
+  ncu = n
+  if (jobu > 1) ncu = min(n,p)
+  if (jobu /= 0) wantu = .true.
+  if (mod(job,10) /= 0) wantv = .true.
+!
+!     reduce x to bidiagonal form, storing the diagonal elements
+!     in s and the super-diagonal elements in e.
+!
+  info = 0
+  nct = min(n-1,p)
+  nrt = max(0,min(p-2,n))
+  lu = max(nct,nrt)
+
+  do l = 1, lu
+
+     lp1 = l + 1
+
+     if (l <= nct) then
+!
+!           compute the transformation for the l-th column and
+!           place the l-th diagonal in s(l).
+!
+        s(l) = snrm2(n-l+1,x(l,l),1)
+
+        if (s(l) /= 0.0) then
+           if (x(l,l) /= 0.0) s(l) = sign(s(l),x(l,l))
+           call sscal(n-l+1,1.0/s(l),x(l,l),1)
+           x(l,l) = 1.0E+00 + x(l,l)
+        end if
+
+        s(l) = -s(l)
+
+     end if
+
+     if (p < lp1) go to 50
+
+     do j = lp1, p
+!
+!  apply the transformation.
+!
+        if ( l <= nct ) then
+          if ( s(l) /= 0.0E+00 ) then
+            t = -sdot(n-l+1,x(l,l),1,x(l,j),1)/x(l,l)
+            call saxpy(n-l+1,t,x(l,l),1,x(l,j),1)
+          end if
+        end if
+!
+!           place the l-th row of x into  e for the
+!           subsequent calculation of the row transformation.
+!
+        e(j) = x(l,j)
+
+      end do
+
+   50    continue
+!
+!  place the transformation in u for subsequent back multiplication.
+!
+     if ( wantu .and. l <= nct ) then
+       u(l:n,l) = x(l:n,l)
+     end if
+
+     if (l > nrt) go to 150
+!
+!  compute the l-th row transformation and place the
+!  l-th super-diagonal in e(l).
+!
+        e(l) = snrm2(p-l,e(lp1),1)
+
+        if (e(l) /= 0.0) then
+           if (e(lp1) /= 0.0) e(l) = sign(e(l),e(lp1))
+           call sscal(p-l,1.0/e(l),e(lp1),1)
+           e(lp1) = 1.0E+00 + e(lp1)
+        end if
+
+        e(l) = -e(l)
+        if (lp1 > n .or. e(l) == 0.0) go to 120
+!
+!  apply the transformation.
+!
+           work(lp1:n) = 0.0E+00
+
+           do j = lp1, p
+             call saxpy(n-l,e(j),x(lp1,j),1,work(lp1),1)
+           end do
+
+           do j = lp1, p
+             call saxpy(n-l,-e(j)/e(lp1),work(lp1),1,x(lp1,j),1)
+           end do
+
+  120       continue
+!
+!  Place the transformation in v for subsequent back multiplication.
+!
+         if ( wantv ) then
+           v(lp1:p,l) = e(lp1:p)
+         end if
+
+  150    continue
+
+  end do
+!
+!  Set up the final bidiagonal matrix or order m.
+!
+  m = min(p,n+1)
+  nctp1 = nct + 1
+  nrtp1 = nrt + 1
+  if (nct < p) s(nctp1) = x(nctp1,nctp1)
+  if (n < m) s(m) = 0.0E+00
+  if (nrtp1 < m) e(nrtp1) = x(nrtp1,m)
+  e(m) = 0.0E+00
+!
+!  Generate u.
+!
+  if ( wantu ) then
+
+     do j = nctp1, ncu
+       u(1:n,j) = 0.0E+00
+       u(j,j) = 1.0E+00
+     end do
+
+     do ll = 1, nct
+
+       l = nct - ll + 1
+
+       if (s(l) /= 0.0) then
+
+           lp1 = l + 1
+
+           do j = l+1, ncu
+             t = -sdot(n-l+1,u(l,l),1,u(l,j),1)/u(l,l)
+             call saxpy(n-l+1,t,u(l,l),1,u(l,j),1)
+           end do
+
+           call sscal ( n-l+1, -1.0, u(l,l), 1 )
+           u(l,l) = 1.0E+00 + u(l,l)
+           u(1:l-1,l) = 0.0E+00
+
+        else
+
+           u(1:n,l) = 0.0E+00
+           u(l,l) = 1.0E+00
+
+        end if
+
+      end do
+
+  end if
+!
+!  Generate v.
+!
+  if ( wantv ) then
+
+    do ll = 1, p
+
+      l = p - ll + 1
+      lp1 = l + 1
+
+      if ( l <= nrt ) then
+
+        if ( e(l) /= 0.0E+00 ) then
+
+          do j = lp1, p
+            t = -sdot(p-l,v(lp1,l),1,v(lp1,j),1)/v(lp1,l)
+            call saxpy(p-l,t,v(lp1,l),1,v(lp1,j),1)
+          end do
+
+        end if
+
+      end if
+
+      v(1:p,l) = 0.0E+00
+      v(l,l) = 1.0E+00
+
+    end do
+
+  end if
+!
+!  main iteration loop for the singular values.
+!
+  mm = m
+  iter = 0
+
+  360 continue
+!
+!  quit if all the singular values have been found.
+!
+     if (m == 0) go to 620
+!
+!  if too many iterations have been performed, set flag and return.
+!
+     if ( iter >= maxit ) then
+       info = m
+       go to 620
+     end if
+!
+!  this section of the program inspects for
+!  negligible elements in the s and e arrays.  on
+!  completion the variables kase and l are set as follows.
+!
+!           kase = 1     if s(m) and e(l-1) are negligible and l<m
+!           kase = 2     if s(l) is negligible and l<m
+!           kase = 3     if e(l-1) is negligible, l<m, and
+!                        s(l), ..., s(m) are not negligible (qr step).
+!           kase = 4     if e(m-1) is negligible (convergence).
+!
+     do ll = 1, m
+
+        l = m - ll
+        if (l == 0) go to 400
+        test = abs(s(l)) + abs(s(l+1))
+        ztest = test + abs(e(l))
+
+        if (ztest == test) then
+           e(l) = 0.0E+00
+           go to 400
+        end if
+
+     end do
+
+  400    continue
+     if (l /= m - 1) go to 410
+        kase = 4
+     go to 480
+  410    continue
+        lp1 = l + 1
+        mp1 = m + 1
+
+        do lls = lp1, mp1
+           ls = m - lls + lp1
+           if (ls == l) go to 440
+           test = 0.0E+00
+           if (ls /= m) test = test + abs(e(ls))
+           if (ls /= l + 1) test = test + abs(e(ls-1))
+           ztest = test + abs(s(ls))
+           if (ztest /= test) go to 420
+              s(ls) = 0.0E+00
+              go to 440
+  420          continue
+        end do
+
+  440       continue
+        if (ls /= l) go to 450
+           kase = 3
+        go to 470
+  450       continue
+        if (ls /= m) go to 460
+           kase = 1
+        go to 470
+  460       continue
+           kase = 2
+           l = ls
+  470       continue
+  480    continue
+     l = l + 1
+!
+!        perform the task indicated by kase.
+!
+     go to (490,520,540,570), kase
+!
+!  deflate negligible s(m).
+!
+  490    continue
+        mm1 = m - 1
+        f = e(m-1)
+        e(m-1) = 0.0E+00
+        do kk = l, mm1
+           k = mm1 - kk + l
+           t1 = s(k)
+           call srotg(t1,f,cs,sn)
+           s(k) = t1
+           if (k == l) go to 500
+              f = -sn*e(k-1)
+              e(k-1) = cs*e(k-1)
+  500          continue
+           if (wantv) call srot(p,v(1,k),1,v(1,m),1,cs,sn)
+        end do
+
+     go to 610
+!
+!  Split at negligible s(l).
+!
+  520    continue
+        f = e(l-1)
+        e(l-1) = 0.0E+00
+
+        do k = l, m
+           t1 = s(k)
+           call srotg(t1,f,cs,sn)
+           s(k) = t1
+           f = -sn*e(k)
+           e(k) = cs*e(k)
+           if (wantu) call srot(n,u(1,k),1,u(1,l-1),1,cs,sn)
+        end do
+
+     go to 610
+!
+!  perform one qr step.
+!
+  540    continue
+!
+!  calculate the shift.
+!
+        scale = max ( abs(s(m)),abs(s(m-1)),abs(e(m-1)),abs(s(l)),abs(e(l)) )
+
+        sm = s(m)/scale
+        smm1 = s(m-1)/scale
+        emm1 = e(m-1)/scale
+        sl = s(l)/scale
+        el = e(l)/scale
+        b = ((smm1 + sm)*(smm1 - sm) + emm1**2)/2.0E+00
+        c = (sm*emm1)**2
+        shift = 0.0E+00
+
+        if ( b /= 0.0E+00 .or. c /= 0.0E+00 ) then
+           shift = sqrt(b**2+c)
+           if (b < 0.0) shift = -shift
+           shift = c/(b + shift)
+        end if
+
+        f = (sl + sm)*(sl - sm) - shift
+        g = sl*el
+!
+!  chase zeros.
+!
+        mm1 = m - 1
+
+        do k = l, m-1
+           call srotg(f,g,cs,sn)
+           if (k /= l) e(k-1) = f
+           f = cs*s(k) + sn*e(k)
+           e(k) = cs*e(k) - sn*s(k)
+           g = sn*s(k+1)
+           s(k+1) = cs*s(k+1)
+           if (wantv) call srot(p,v(1,k),1,v(1,k+1),1,cs,sn)
+           call srotg(f,g,cs,sn)
+           s(k) = f
+           f = cs*e(k) + sn*s(k+1)
+           s(k+1) = -sn*e(k) + cs*s(k+1)
+           g = sn*e(k+1)
+           e(k+1) = cs*e(k+1)
+           if (wantu .and. k < n) then
+             call srot(n,u(1,k),1,u(1,k+1),1,cs,sn)
+           end if
+        end do
+
+        e(m-1) = f
+        iter = iter + 1
+     go to 610
+!
+!  convergence.
+!
+  570    continue
+!
+!  make the singular value  positive.
+!
+        if (s(l) >= 0.0) go to 580
+           s(l) = -s(l)
+           if (wantv) call sscal(p,-1.0,v(1,l),1)
+  580       continue
+!
+!  order the singular value.
+!
+  590       if (l == mm) go to 600
+           if (s(l) >= s(l+1)) go to 600
+           t = s(l)
+           s(l) = s(l+1)
+           s(l+1) = t
+           if (wantv .and. l < p) then
+             call sswap(p,v(1,l),1,v(1,l+1),1)
+           end if
+
+           if (wantu .and. l < n) then
+             call sswap(n,u(1,l),1,u(1,l+1),1)
+           end if
+
+           l = l + 1
+        go to 590
+  600       continue
+        iter = 0
+        m = m - 1
+  610    continue
+  go to 360
+  620 continue
+  return
+end
+subroutine sswap ( n, x, incx, y, incy )
+!
+!*******************************************************************************
+!
+!! SSWAP interchanges two vectors.
+!
+!
+!  Modified:
+!
+!    08 April 1999
+!
+!  Reference:
+!
+!    Lawson, Hanson, Kincaid, Krogh,
+!    Basic Linear Algebra Subprograms for Fortran Usage,
+!    Algorithm 539,
+!    ACM Transactions on Mathematical Software,
+!    Volume 5, Number 3, September 1979, pages 308-323.
+!
+!  Parameters:
+!
+!    Input, integer N, the number of entries in the vectors.
+!
+!    Input/output, real X(*), one of the vectors to swap.
+!
+!    Input, integer INCX, the increment between successive entries of X.
+!
+!    Input/output, real Y(*), one of the vectors to swap.
+!
+!    Input, integer INCY, the increment between successive elements of Y.
+!
+  integer i
+  integer incx
+  integer incy
+  integer ix
+  integer iy
+  integer m
+  integer n
+  real stemp
+  real x(*)
+  real y(*)
+!
+  if ( n <= 0 ) then
+
+  else if ( incx == 1 .and. incy == 1 ) then
+
+    m = mod ( n, 3 )
+
+    do i = 1, m
+      stemp = x(i)
+      x(i) = y(i)
+      y(i) = stemp
+    end do
+
+    do i = m+1, n, 3
+
+      stemp = x(i)
+      x(i) = y(i)
+      y(i) = stemp
+
+      stemp = x(i + 1)
+      x(i + 1) = y(i + 1)
+      y(i + 1) = stemp
+
+      stemp = x(i + 2)
+      x(i + 2) = y(i + 2)
+      y(i + 2) = stemp
+
+    end do
+
+  else
+
+    if ( incx >= 0 ) then
+      ix = 1
+    else
+      ix = ( - n + 1 ) * incx + 1
+    end if
+
+    if ( incy >= 0 ) then
+      iy = 1
+    else
+      iy = ( - n + 1 ) * incy + 1
+    end if
+
+    do i = 1, n
+      stemp = x(ix)
+      x(ix) = y(iy)
+      y(iy) = stemp
+      ix = ix + incx
+      iy = iy + incy
+    end do
+
+  end if
+
+  return
+end
+subroutine tregup(nr,n,x,f,g,a,fcn,sc,sx,nwtake,stepmx,steptl, &
+  dlt,iretcd,xplsp,fplsp,xpls,fpls,mxtake,ipr,method,udiag)
+!
+!*******************************************************************************
+!
+!! TREGUP decides whether to accept the next optimization iterate.
+!
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! x(n)         --> old iterate x[k-1]
+! f            --> function value at old iterate, f(x)
+! g(n)         --> gradient at old iterate, g(x), or approximate
+! a(n,n)       --> cholesky decomposition of hessian in
+!                  lower triangular part and diagonal.
+!                  hessian or approx in upper triangular part
+! fcn          --> name of subroutine to evaluate function
+! sc(n)        --> current step
+! sx(n)        --> diagonal scaling matrix for x
+! nwtake       --> boolean, =.true. if newton step taken
+! stepmx       --> maximum allowable step size
+! steptl       --> relative step size at which successive iterates
+!                  considered close enough to terminate algorithm
+! dlt         <--> trust region radius
+! iretcd      <--> return code
+!                    =0 xpls accepted as next iterate;
+!                       dlt trust region for next iteration.
+!                    =1 xpls unsatisfactory but accepted as next iterate
+!                       because xpls-x < smallest allowable
+!                       step length.
+!                    =2 f(xpls) too large.  continue current iteration
+!                       with new reduced dlt.
+!                    =3 f(xpls) sufficiently small, but quadratic model
+!                       predicts f(xpls) sufficiently well to continue
+!                       current iteration with new doubled dlt.
+! xplsp(n)    <--> workspace [value needs to be retained between
+!                  succesive calls of k-th global step]
+! fplsp       <--> [retain value between successive calls]
+! xpls(n)     <--  new iterate x[k]
+! fpls        <--function value at new iterate, f(xpls)
+! mxtake      <--  boolean flag indicating step of maximum length used
+! ipr          --> device to which to send output
+! method       --> algorithm to use to solve minimization problem
+!                    =1 line search
+!                    =2 double dogleg
+!                    =3 more-hebdon
+! udiag(n)     --> diagonal of hessian in a(.,.)
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real dlt
+  real dltf
+  real dltfp
+  real dltmp
+  real dltp
+  real f
+  real fpls
+  real fplsp
+  real g(n)
+  integer i
+  integer ipr
+  integer iretcd
+  integer j
+  integer method
+  logical mxtake
+  logical nwtake
+  real rln
+  real sc(n)
+  real sdot
+  real slp
+  real stepmx
+  real steptl
+  real sx(n)
+  real temp
+  real udiag(n)
+  real x(n)
+  real xpls(n)
+  real xplsp(n)
+!
+  external fcn
+!
+  mxtake = .false.
+  xpls(1:n) = x(1:n) + sc(1:n)
+  call fcn ( n, xpls, fpls )
+  dltf = fpls - f
+  slp = sdot ( n, g, 1, sc, 1 )
+!
+! next statement added for case of compilers which do not optimize
+! evaluation of next "if" statement (in which case fplsp could be
+! undefined).
+!
+  if ( iretcd==4) fplsp=0.0E+00
+
+  if ( iretcd/=3 .or. (fpls<fplsp .and. dltf<= 1.e-4*slp)) then
+    go to 130
+  end if
+!     if ( iretcd==3 .and. (fpls>=fplsp .or. dltf> 1.e-4*slp))
+!     then
+!
+!       reset xpls to xplsp and terminate global step
+!
+    iretcd=0
+    xpls(1:n)=xplsp(1:n)
+    fpls=fplsp
+    dlt=.5*dlt
+    go to 230
+!     else
+!
+!  fpls too large
+!
+  130   if ( dltf<= 1.e-4*slp) go to 170
+!       if ( dltf> 1.e-4*slp)
+!       then
+      rln=0.
+      do i=1,n
+        rln=max(rln,abs(sc(i))/max(abs(xpls(i)),1./sx(i)))
+      end do
+
+      if ( rln>=steptl) go to 150
+!         if ( rln<steptl)
+!         then
+!
+!  cannot find satisfactory xpls sufficiently distinct from x
+!
+        iretcd=1
+        go to 230
+!         else
+!
+!  reduce trust region and continue global step
+!
+  150       iretcd=2
+        dltmp=-slp*dlt/(2.*(dltf-slp))
+        if ( dltmp>= .1*dlt) go to 155
+!           if ( dltmp< .1*dlt)
+!           then
+          dlt=.1*dlt
+          go to 160
+!           else
+  155         dlt=dltmp
+!           end if
+  160       continue
+        go to 230
+!         end if
+!       else
+!
+!  fpls sufficiently small
+!
+  170     continue
+      dltfp=0.
+      if (method == 3) go to 180
+!
+!         if (method == 2)
+!         then
+!
+      do i = 1, n
+         temp = 0.0E+00
+         do j = i, n
+            temp = temp + (a(j, i)*sc(j))
+         end do
+         dltfp = dltfp + temp*temp
+      end do
+
+      go to 190
+
+  180     continue
+
+      do i = 1, n
+         dltfp = dltfp + udiag(i)*sc(i)*sc(i)
+
+         temp = 0.0E+00
+         do j = i+1, n
+            temp = temp + a(i, j)*sc(i)*sc(j)
+         end do
+         dltfp = dltfp + 2.0*temp
+      end do
+
+  190     dltfp = slp + dltfp/2.0E+00
+      if ( iretcd==2 .or. (abs(dltfp-dltf)> .1*abs(dltf)) &
+         .or. nwtake .or. (dlt> .99*stepmx)) go to 210
+!         if ( iretcd/=2 .and. (abs(dltfp-dltf) <= .1*abs(dltf))
+!    +         .and. (.not.nwtake) .and. (dlt<= .99*stepmx))
+!         then
+!
+!           double trust region and continue global step
+!
+        iretcd=3
+        xplsp(1:n)=xpls(1:n)
+        fplsp=fpls
+        dlt=min(2.*dlt,stepmx)
+        go to 230
+!         else
+!
+!           accept xpls as next iterate.  choose new trust region.
+!
+  210       continue
+        iretcd=0
+        if ( dlt> .99*stepmx) mxtake=.true.
+        if ( dltf< .1*dltfp) go to 220
+!           if ( dltf>= .1*dltfp)
+!           then
+!
+!  decrease trust region for next iteration
+!
+          dlt=.5*dlt
+          go to 230
+!           else
+!
+!             check whether to increase trust region for next iteration
+!
+  220         if ( dltf<= .75*dltfp) dlt=min(2.*dlt,stepmx)
+!           end if
+!         end if
+!       end if
+!     end if
+  230 continue
+  return
+end
+subroutine uncmin (n,x0,fcn,x,f,info,w,lw)
+!
+!*******************************************************************************
+!
+!! UNCMIN minimizes a smooth nonlinear function of n variables.
+!
+!
+!     a subroutine that computes the function value at any point
+!     must be supplied.  derivative values are not required.
+!     this subroutine provides the simplest interface to the uncmin
+!     minimization package.  user has no control over options.
+!
+!  Discussion:
+!
+!     this routine uses a quasi-newton algorithm with line search
+!     to minimize the function represented by the subroutine fcn.
+!     at each iteration, the nonlinear function is approximated
+!     by a quadratic function derived from a taylor series.
+!     the quadratic function is minimized to obtain a search direction,
+!     and an approximate minimum of the nonlinear function along
+!     the search direction is found using a line search.  the
+!     algorithm computes an approximation to the second derivative
+!     matrix of the nonlinear function using quasi-newton techniques.
+!
+!     the uncmin package is quite general, and provides many options
+!     for the user.  however, this subroutine is designed to be
+!     easy to use, with few choices allowed.  for example:
+!
+!     1.  only function values need be computed.  first derivative
+!     values are obtained by finite-differencing.  this can be
+!     very costly when the number of variables is large.
+!
+!     2.  it is assumed that the function values can be obtained
+!     accurately (to an accuracy comparable to the precision of
+!     the computer arithmetic).
+!
+!     3.  at most 150 iterations are allowed.
+!
+!     4.  it is assumed that the function values are well-scaled,
+!     that is, that the optimal function value is not pathologically
+!     large or small.
+!
+!     for more information, see the reference listed below.
+!
+!  Parameters:
+!
+! n            --> integer
+!                  dimension of problem
+! x0(n)        --> real
+!                  initial estimate of minimum
+! fcn          --> name of routine to evaluate minimization function.
+!                  must be declared external in calling routine, and
+!                  have calling sequence
+!                    subroutine fcn(n, x, f)
+!                  with n and x as here, f the computed function value.
+! x(n)        <--  real
+!                  local minimum
+! f           <--  real
+!                function value at local minimum x
+! info        <--  integer
+!                  termination code
+!                      info =  0:  optimal solution found
+!                      info =  1:  terminated with gradient small,
+!                                  x is probably optimal
+!                      info =  2:  terminated with stepsize small,
+!                                  x is probably optimal
+!                      info =  3:  lower point cannot be found,
+!                                  x is probably optimal
+!                      info =  4:  iteration limit (150) exceeded
+!                      info =  5:  too many large steps,
+!                                function may be unbounded
+!                      info = -1:  insufficient workspace
+! w(lw)        --> real
+!                  workspace
+! lw           --> integer
+!                  size of workspace, at least n*(n+10)
+!
+!  references  r.b. schnabel, j.e. koontz, and be.e. weiss, a modular
+!                 system of algorithms for unconstrained minimization,
+!                 report cu-cs-240-82, comp. sci. dept., univ. of
+!                 colorado at boulder, 1982.
+!
+  integer lw
+  integer n
+!
+  real dlt
+  real epsm
+  character errmsg*68
+  real f
+  real fscale
+  real gradtl
+  integer ia
+  integer iagflg
+  integer iahflg
+  integer iexp
+  integer ig
+  integer info
+  integer ipr
+  integer it
+  integer itnlim
+  integer iw1
+  integer iw2
+  integer iw3
+  integer iw4
+  integer iw5
+  integer iw6
+  integer iw7
+  integer iw8
+  integer lwmin
+  integer method
+  integer msg
+  integer ndigit
+  integer nr
+  real stepmx
+  real steptl
+  real w(lw)
+  real x(n)
+  real x0(n)
+!
+  external  fcn, d1fcn, d2fcn
+!
+! subdivide workspace
+!
+  ig  = 1
+  it  = ig  + n
+  iw1 = it  + n
+  iw2 = iw1 + n
+  iw3 = iw2 + n
+  iw4 = iw3 + n
+  iw5 = iw4 + n
+  iw6 = iw5 + n
+  iw7 = iw6 + n
+  iw8 = iw7 + n
+  ia  = iw8 + n
+  lwmin = ia + n*n-1
+
+  if (lwmin > lw) then
+    info = -1
+    write ( *, * ) ' '
+    write ( *, * ) 'UNCMIN - Fatal error!'
+    write ( *, * ) '  Insufficient workspace.'
+    write ( *, * ) '  LW < LWMIN.'
+    write ( *, * ) '  LW = ', lw
+    write ( *, * ) '  LWMIN = ', lwmin
+    stop
+  end if
+!
+!  set up parameters for optdrv
+!
+!  parameters that should not be changed when using condensed code
+!
+! nr     = parameter used to divide workspace
+! method = 1 (line search) -- do not change
+! msg    = 9 => no printing, n=1 allowed
+! iahflg = 1 => analytic hessian  supplied (0 otherwise)
+! ipr    = device for output (irrelevant in current version)
+! dlt    = (irrelevant parameter for method = 1)
+! epsm   = machine epsilon
+!
+  nr = n
+  method = 1
+  msg = 9
+  iahflg = 0
+  ipr = 6
+  dlt = -1.0E+00
+  epsm = epsilon ( epsm )
+!
+! parameters that may be changed:
+!
+! iexp   = 1 => function expensive to evaluate (iexp = 0 => cheap)
+! iagflg = 1 => analytic gradient supplied (0 otherwise)
+! ndigit = -1 => optdrv assumes f is fully accurate
+! itnlim = 150 = maximum number of iterations allowed
+! gradtl = zero tolerance for gradient, for convergence tests
+! stepmx = maximum allowable step size
+! steptl = zero tolerance for step, for convergence tests
+! fscale = typical order-of-magnitude size of function
+! typsiz = typical order-of-magnitude size of x (stored in w(lt))
+!
+  iexp = 1
+  iagflg = 0
+  ndigit = -1
+  itnlim = 150
+  gradtl = epsm**(1.0/3.0)
+  stepmx = 0.0E+00
+  steptl = sqrt(epsm)
+  fscale = 1.0E+00
+  w(it:it+n-1) = 1.0E+00
+!
+! minimize function
+!
+  call optdrv (nr, n, x0, fcn, d1fcn, d2fcn, w(it), fscale, &
+                  method, iexp, msg, ndigit, itnlim, iagflg, iahflg, &
+                  ipr, dlt, gradtl, stepmx, steptl, &
+                  x, f, w(ig), info, w(ia), &
+                  w(iw1), w(iw2), w(iw3), w(iw4), &
+                  w(iw5), w(iw6), w(iw7), w(iw8))
+
+  if (info == 1) then
+    write ( *, * ) ' '
+    write ( *, * ) 'UNCMIN - Note!'
+    write ( *, * ) '  INFO = 1.'
+    write ( *, * ) '  The iteration probably converged.'
+    write ( *, * ) '  The gradient is very small.'
+    return
+  end if
+
+  if (info == 2) then
+    write ( *, * ) ' '
+    write ( *, * ) 'UNCMIN - Note!'
+    write ( *, * ) '  INFO = 2.'
+    write ( *, * ) '  The iteration probably converged.'
+    write ( *, * ) '  The stepsize is very small.'
+    return
+  end if
+
+  if (info == 3) then
+    write ( *, * ) ' '
+    write ( *, * ) 'UNCMIN - Warning!'
+    write ( *, * ) '  INFO = 3.'
+    write ( *, * ) '  Cannot find a point with lower value.'
+    write ( *, * ) '  (But not completely happy with the current value.)'
+    return
+  end if
+
+  if (info == 4) then
+    write ( *, * ) ' '
+    write ( *, * ) 'UNCMIN - Warning!'
+    write ( *, * ) '  INFO = 4.'
+    write ( *, * ) '  Too many iterations.'
+    return
+  end if
+
+  if (info == 5) then
+    write ( *, * ) ' '
+    write ( *, * ) 'UNCMIN - Warning!'
+    write ( *, * ) '  INFO = 5.'
+    write ( *, * ) '  Too many large steps.'
+    write ( *, * ) '  The function may be unbounded.'
+    return
+  end if
+
+  return
+end
+function uni ( )
+!
+!*******************************************************************************
+!
+!! UNI generates real uniform random numbers on [0,1).
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!
+!       usage:
+!              to initialize the generator
+!                   useed = ustart(iseed)
+!               where: iseed is any nonzero integer
+!                  will return floating point value of iseed.
+!
+!               subsequently
+!                       u = uni()
+!                  will return a real uniform on [0,1)
+!
+!                one initialization is necessary, but any number of evaluations
+!                  of  uni in any order, are allowed.
+!
+!           note: depending upon the value of k (see below), the output
+!                       of uni may differ from one machine to another.
+!
+!           typical usage:
+!
+!               real u,uni,ustart,useed
+!               integer iseed
+!c                 set seed
+!               iseed = 305
+!               useed = ustart(iseed)
+!               do i = 1,1000
+!                   u = uni()
+!               end do
+!c                 note: if k=24 (the default, see below) the output value of
+!c                           u will be 0.1570390462475...
+!               write(*,*) u
+!             end
+!
+!          note on portability: users can choose to run uni in its default
+!               mode (requiring no user action) which will generate the same
+!               sequence of numbers on any computer supporting floating point
+!               numbers with at least 24 bit mantissas, or in a mode that
+!               will generate numbers with a longer period on computers with
+!               larger mantissas.
+!          to exercise this option:  b e f o r e  invoking ustart insert
+!               the instruction        ubits = unib(k)      k >= 24
+!               where k is the number of bits in the mantissa of your floating
+!               point word (k=48 for cray, cyber 205). unib returns the
+!               floating point value of k that it actually used.
+!                    k input as <= 24, then ubits=24.
+!                    k input as > 24, then ubits=float(k)
+!               if k>24 the sequence of numbers generated by uni may differ
+!               from one computer to another.
+!
+!
+!
+!  references  marsaglia g., "comments on the perfect uniform random
+!                 number generator", unpublished notes, wash s. u.
+!
+  real, save :: c = 362436.0E+00 / 16777216.0E+00
+  real, parameter :: cd = 7654321.0E+00 / 16777216.0E+00
+  real, parameter :: cm = 16777213.0E+00 / 16777216.0E+00
+  real, parameter :: csave = 362436.0E+00 / 16777216.0E+00
+  integer, save :: i = 17
+  integer i1
+  integer ii
+  integer iseed
+  integer, save :: j = 5
+  integer j1
+  integer jj
+  integer, save :: k = 24
+  integer k1
+  integer kk
+  integer l1
+  integer m1
+  real s
+  real t
+  real, save, dimension ( 17 ) :: u = (/ &
+     0.8668672834288,  0.3697986366357,  0.8008968294805, &
+     0.4173889774680,  0.8254561579836,  0.9640965269077, &
+     0.4508667414265,  0.6451309529668,  0.1645456024730, &
+     0.2787901807898,  0.06761531340295, 0.9663226330820, &
+     0.01963343943798, 0.02947398211399, 0.1636231515294, &
+     0.3976343250467,  0.2631008574685 /)
+  real uni
+  real unib
+  real ustart
+!
+!      load data array in case user forgets to initialize.
+!      this array is the result of calling uni 100000 times
+!         with iseed=305 and k=64.
+!
+!   basic generator is fibonacci
+!
+  uni = u(i)-u(j)
+  if ( uni<0.0)uni = uni+1.0E+00
+  u(i) = uni
+  i = i-1
+  if ( i==0)i = 17
+  j = j-1
+  if ( j==0)j = 17
+!
+!   second generator is congruential
+!
+  c = c-cd
+  if ( c<0.0) c=c+cm
+!
+!   combination generator
+!
+  uni = uni-c
+  if ( uni<0.0)uni = uni+1.0E+00
+  return
+!
+entry ustart ( iseed )
+!
+!          set up ...
+!          convert iseed to four smallish positive integers.
+!
+    i1 = mod(abs(iseed),177)+1
+    j1 = mod(abs(iseed),167)+1
+    k1 = mod(abs(iseed),157)+1
+    l1 = mod(abs(iseed),147)+1
+!
+!              generate random bit pattern in array based on given seed.
+!
+    do ii = 1,17
+
+      s = 0.0E+00
+      t = 0.5
+!             do for each of the bits of mantissa of word
+!             loop  over k bits, where k is defaulted to 24 but can
+!               be changed by user call to unib(k)
+!
+      do jj = 1,k
+        m1 = mod(mod(i1*j1,179)*k1,179)
+        i1 = j1
+        j1 = k1
+        k1 = m1
+        l1 = mod(53*l1+1,169)
+        if ( mod(l1*m1,64)>=32)s=s+t
+        t = .5*t
+       end do
+
+       u(ii) = s
+
+    end do
+
+    ustart = real(iseed)
+    return
+!
+entry unib ( kk )
+
+  if ( kk <= 24 ) then
+    k = 24
+  else
+    k = kk
+  end if
+
+  unib = real ( k )
+
+  return
+end
+function uniform_01_sample ( iseed )
+!
+!*******************************************************************************
+!
+!! UNIFORM_01_SAMPLE is a portable random number generator.
+!
+!
+!  Formula:
+!
+!    ISEED = ISEED * (7**5) mod (2**31 - 1)
+!    RANDOM = ISEED * / ( 2**31 - 1 )
+!
+!  Modified:
+!
+!    01 March 1999
+!
+!  Parameters:
+!
+!    Input/output, integer ISEED, the integer "seed" used to generate
+!    the output random number, and updated in preparation for the
+!    next one.  ISEED should not be zero.
+!
+!    Output, real UNIFORM_01_SAMPLE, a random value between 0 and 1.
+!
+
+!
+!  IA = 7**5
+!  IB = 2**15
+!  IB16 = 2**16
+!  IP = 2**31-1
+!
+  integer, parameter :: ia = 16807
+  integer, parameter :: ib15 = 32768
+  integer, parameter :: ib16 = 65536
+  integer, parameter :: ip = 2147483647
+!
+  integer iprhi
+  integer iseed
+  integer ixhi
+  integer k
+  integer leftlo
+  integer loxa
+  real uniform_01_sample
+!
+!  Don't let ISEED be 0.
+!
+  if ( iseed == 0 ) then
+    iseed = ip
+  end if
+!
+!  Get the 15 high order bits of ISEED.
+!
+  ixhi = iseed / ib16
+!
+!  Get the 16 low bits of ISEED and form the low product.
+!
+  loxa = ( iseed - ixhi * ib16 ) * ia
+!
+!  Get the 15 high order bits of the low product.
+!
+  leftlo = loxa / ib16
+!
+!  Form the 31 highest bits of the full product.
+!
+  iprhi = ixhi * ia + leftlo
+!
+!  Get overflow past the 31st bit of full product.
+!
+  k = iprhi / ib15
+!
+!  Assemble all the parts and presubtract IP.  The parentheses are
+!  essential.
+!
+  iseed = ( ( ( loxa - leftlo * ib16 ) - ip ) + ( iprhi - k * ib15 ) * ib16 ) &
+    + k
+!
+!  Add IP back in if necessary.
+!
+  if ( iseed < 0 ) then
+    iseed = iseed + ip
+  end if
+!
+!  Multiply by 1 / (2**31-1).
+!
+  uniform_01_sample = real ( iseed ) * 4.656612875E-10
+
+  return
+end
+subroutine xerabt(messg,nmessg)
+!
+!*******************************************************************************
+!
+!! XERABT aborts program execution and prints error message.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        ***note*** machine dependent routine
+!        xerabt aborts the execution of the program.
+!        the error message causing the abort is given in the calling
+!        sequence, in case one needs it for printing on a dayfile,
+!        for example.
+!
+!     description of parameters
+!        messg and nmessg are as in xerror, except that nmessg may
+!        be zero, in which case no message is being supplied.
+!
+!     written by ron jones, with slatec common math library subcommittee
+!     latest revision ---  19 mar 1980
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  character*(*) messg
+  integer nmessg
+!
+  stop
+end
+subroutine xerclr
+!
+!*******************************************************************************
+!
+!! XERCLR resets current error number to zero.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        this routine simply resets the current error number to zero.
+!        this may be necessary to do in order to determine that
+!        a certain error has occurred again since the last time
+!        numxer was referenced.
+!
+!     written by ron jones, with slatec common math library subcommittee
+!     latest revision ---  7 june 1978
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer j4save
+  integer junk
+!
+  junk = j4save ( 1, 0, .true. )
+
+  return
+end
+subroutine xerctl(messg1,nmessg,nerr,level,kontrl)
+!
+!*******************************************************************************
+!
+!! XERCTL allows user control over handling of individual errors.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        allows user control over handling of individual errors.
+!        just after each message is recorded, but before it is
+!        processed any further (i.e., before it is printed or
+!        a decision to abort is made), a call is made to xerctl.
+!        if the user has provided his own version of xerctl, he
+!        can then override the value of kontrol used in processing
+!        this message by redefining its value.
+!        kontrl may be set to any value from -2 to 2.
+!        the meanings for kontrl are the same as in xsetf, except
+!        that the value of kontrl changes only for this message.
+!        if kontrl is set to a value outside the range from -2 to 2,
+!        it will be moved back into that range.
+!
+!     description of parameters
+!
+!      --input--
+!        messg1 - the first word (only) of the error message.
+!        nmessg - same as in the call to xerror or xerrwv.
+!        nerr   - same as in the call to xerror or xerrwv.
+!        level  - same as in the call to xerror or xerrwv.
+!        kontrl - the current value of the control flag as set
+!                 by a call to xsetf.
+!
+!      --output--
+!        kontrl - the new value of kontrl.  if kontrl is not
+!                 defined, it will remain at its original value.
+!                 this changed value of control affects only
+!                 the current occurrence of the current message.
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer kontrl
+  integer level
+  character*20 messg1
+  integer nerr
+  integer nmessg
+!
+  return
+end
+subroutine xerdmp
+!
+!*******************************************************************************
+!
+!! XERDMP prints the error tables and then clears them.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        xerdmp prints the error tables, then clears them.
+!
+!     written by ron jones, with slatec common math library subcommittee
+!     latest revision ---  7 june 1978
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer kount
+!
+  call xersav(' ',0,0,0,kount)
+
+  return
+end
+subroutine xermax ( maxnum )
+!
+!*******************************************************************************
+!
+!! XERMAX sets maximum number of times any error message is to be printed.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        xermax sets the maximum number of times any message
+!        is to be printed.  that is, non-fatal messages are
+!        not to be printed after they have occured maxnum times.
+!        such non-fatal messages may be printed less than
+!        maxnum times even if they occur maxnum times, if error
+!        suppression mode (kontrl=0) is ever in effect.
+!
+!     description of parameter
+!      --input--
+!        maxnum - the maximum number of times any one message
+!              is to be printed.
+!
+!     written by ron jones, with slatec common math library subcommittee
+!     latest revision ---  7 june 1978
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer j4save
+  integer junk
+  integer maxnum
+!
+  junk = j4save ( 4, maxnum, .true. )
+
+  return
+end
+subroutine xerprt(messg,nmessg)
+!
+!*******************************************************************************
+!
+!! XERPRT prints a message on each file indicated by xgetua.
+!
+!
+!     latest revision ---  16 sept 1987
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer ichar
+  integer iunit
+  integer kunit
+  integer last
+  integer lenmes
+  integer lun(5)
+  character*(*) messg
+  integer nmessg
+  integer nunit
+!
+!     obtain unit numbers and write line to each unit
+!
+  call xgetua(lun,nunit)
+  lenmes = len(messg)
+
+  do kunit=1,nunit
+
+     iunit = lun(kunit)
+
+     do ichar=1,lenmes,72
+        last = min(ichar+71 , lenmes)
+        if ( iunit==0 ) then
+          write (*,'(1x,a)') messg(ichar:last)
+        else
+          write (iunit,'(1x,a)') messg(ichar:last)
+        end if
+    end do
+
+  end do
+
+  return
+end
+subroutine xerror(messg,nmessg,nerr,level)
+!
+!*******************************************************************************
+!
+!! XERROR processes an error (diagnostic) message.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        xerror processes a diagnostic message, in a manner
+!        determined by the value of level and the current value
+!        of the library error control flag, kontrl.
+!        (see subroutine xsetf for details.)
+!
+!     description of parameters
+!      --input--
+!        messg - the hollerith message to be processed, containing
+!                no more than 72 characters.
+!        nmessg- the actual number of characters in messg.
+!        nerr  - the error number associated with this message.
+!                nerr must not be zero.
+!        level - error category.
+!                =2 means this is an unconditionally fatal error.
+!                =1 means this is a recoverable error.  (i.e., it is
+!                   non-fatal if xsetf has been appropriately called.)
+!                =0 means this is a warning message only.
+!                =-1 means this is a warning message which is to be
+!                   printed at most once, regardless of how many
+!                   times this call is executed.
+!
+!     examples
+!        call xerror('smooth -- num was zero.',23,1,2)
+!        call xerror('integ  -- less than full accuracy achieved.',
+!                    43,2,1)
+!        call xerror('rooter -- actual zero of f found before interval f
+!    1ully collapsed.',65,3,0)
+!        call xerror('exp    -- underflows being set to zero.',39,1,-1)
+!
+!     latest revision ---  19 mar 1980
+!     written by ron jones, with slatec common math library subcommittee
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer level
+  character*(*) messg
+  integer nerr
+  integer nmessg
+!
+  call xerrwv(messg,nmessg,nerr,level,0,0,0,0,0.,0.)
+
+  return
+end
+subroutine xerrwv(messg,nmessg,nerr,level,ni,i1,i2,nr,r1,r2)
+!
+!*******************************************************************************
+!
+!! XERRWV processes error message allowing 2 integer and two real
+!            values to be included in the message.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        xerrwv processes a diagnostic message, in a manner
+!        determined by the value of level and the current value
+!        of the library error control flag, kontrl.
+!        (see subroutine xsetf for details.)
+!        in addition, up to two integer values and two real
+!        values may be printed along with the message.
+!
+!     description of parameters
+!      --input--
+!        messg - the hollerith message to be processed.
+!        nmessg- the actual number of characters in messg.
+!        nerr  - the error number associated with this message.
+!                nerr must not be zero.
+!        level - error category.
+!                =2 means this is an unconditionally fatal error.
+!                =1 means this is a recoverable error.  (i.e., it is
+!                   non-fatal if xsetf has been appropriately called.)
+!                =0 means this is a warning message only.
+!                =-1 means this is a warning message which is to be
+!                   printed at most once, regardless of how many
+!                   times this call is executed.
+!        ni    - number of integer values to be printed. (0 to 2)
+!        i1    - first integer value.
+!        i2    - second integer value.
+!        nr    - number of real values to be printed. (0 to 2)
+!        r1    - first real value.
+!        r2    - second real value.
+!
+!     examples
+!        call xerrwv('smooth -- num (=i1) was zero.',29,1,2,
+!    1   1,num,0,0,0.,0.)
+!        call xerrwv('quadxy -- requested error (r1) less than minimum (
+!    1r2).,54,77,1,0,0,0,2,errreq,errmin)
+!
+!     latest revision ---  16 sept 1987
+!     written by ron jones, with slatec common math library subcommittee
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  character*37 form
+  integer i
+  integer i1
+  integer i1mach
+  integer i2
+  integer ifatal
+  integer isizei
+  integer isizef
+  integer iunit
+  integer j4save
+  integer junk
+  integer kdummy
+  integer kount
+  integer kunit
+  integer lerr
+  integer level
+  character*20 lfirst
+  integer lkntrl
+  integer llevel
+  integer lmessg
+  integer lun(5)
+  integer maxmes
+  character*(*) messg
+  integer mkntrl
+  integer nerr
+  integer ni
+  integer nmessg
+  integer nr
+  integer nunit
+  real r1
+  real r2
+!
+!     get flags
+!
+  lkntrl = j4save(2,0,.false.)
+  maxmes = j4save(4,0,.false.)
+!     check for valid input
+  if ((nmessg>0).and.(nerr/=0).and.(level>=(-1)).and.(level<=2)) then
+    go to 10
+  end if
+
+     if (lkntrl>0) call xerprt('fatal error in...',17)
+     call xerprt('xerror -- invalid input',23)
+
+     if (lkntrl>0) then
+       call xerprt('job abort due to fatal error.',29)
+     end if
+     if (lkntrl>0) call xersav(' ',0,0,0,kdummy)
+     call xerabt('xerror -- invalid input',23)
+     return
+   10 continue
+!     record message
+  junk = j4save(1,nerr,.true.)
+  call xersav(messg,nmessg,nerr,level,kount)
+!     let user override
+  lfirst = messg
+  lmessg = nmessg
+  lerr = nerr
+  llevel = level
+  call xerctl(lfirst,lmessg,lerr,llevel,lkntrl)
+!
+!  Reset to original values.
+!
+  lmessg = nmessg
+  lerr = nerr
+  llevel = level
+  lkntrl = max(-2,min(2,lkntrl))
+  mkntrl = abs(lkntrl)
+!     decide whether to print message
+  if ((llevel<2).and.(lkntrl==0)) go to 100
+
+  if (((llevel==(-1)).and.(kount>min(1,maxmes))) &
+    .or.((llevel==0)   .and.(kount>maxmes)) &
+    .or.((llevel==1)   .and.(kount>maxmes).and.(mkntrl==1)) &
+    .or.((llevel==2)   .and.(kount>max(1,maxmes)))) then
+    go to 100
+  end if
+
+     if (lkntrl<=0) go to 20
+
+        call xerprt(' ',1)
+
+        if (llevel==(-1)) then
+          call xerprt &
+      ('warning message...this message will only be printed once.',57)
+        end if
+
+        if (llevel==0) call xerprt('warning in...',13)
+
+        if (llevel==1) call xerprt('recoverable error in...',23)
+
+        if (llevel==2) call xerprt('fatal error in...',17)
+   20    continue
+!        message
+     call xerprt(messg,lmessg)
+     call xgetua(lun,nunit)
+     isizei = log10(real(i1mach(9))) + 1.0E+00
+     isizef = log10(real(i1mach(10))**i1mach(11)) + 1.0E+00
+
+     do kunit=1,nunit
+
+        iunit = lun(kunit)
+
+        do i=1,min(ni,2)
+           write (form,21) i,isizei
+   21          format ('(11x,21hin above message, i',i1,'=,i',i2,')   ')
+           if ( iunit==0 ) then
+             if (i==1) write (*,form) i1
+             if (i==2) write (*,form) i2
+           else
+             if (i==1) write (iunit,form) i1
+             if (i==2) write (iunit,form) i2
+           end if
+        end do
+
+        do i=1,min(nr,2)
+           write (form,23) i,isizef+10,isizef
+   23          format ('(11x,21hin above message, r',i1,'=,e',i2,'.',i2,')')
+           if ( iunit==0 ) then
+             if (i==1) write (*,form) r1
+             if (i==2) write (*,form) r2
+           else
+             if (i==1) write (iunit,form) r1
+             if (i==2) write (iunit,form) r2
+           end if
+        end do
+
+        if (lkntrl<=0) go to 40
+!              error number
+           if ( iunit==0 ) then
+             write(*,30) lerr
+           else
+             write (iunit,30) lerr
+           end if
+   30          format (15h error number =,i10)
+   40       continue
+
+     end do
+!
+!        trace-back
+
+  100 continue
+  ifatal = 0
+  if ((llevel==2).or.((llevel==1).and.(mkntrl==2))) then
+    ifatal = 1
+  end if
+
+!     quit here if message is not fatal
+  if (ifatal<=0) return
+  if ((lkntrl<=0).or.(kount>max(1,maxmes))) go to 120
+!        print reason for abort
+     if (llevel==1) call xerprt &
+        ('job abort due to unrecovered error.',35)
+
+     if (llevel==2) then
+       call xerprt('job abort due to fatal error.',29)
+     end if
+
+!        print error summary
+     call xersav(' ',-1,0,0,kdummy)
+  120 continue
+!     abort
+  if ((llevel==2).and.(kount>max(1,maxmes))) lmessg = 0
+  call xerabt(messg,lmessg)
+  return
+end
+subroutine xersav(messg,nmessg,nerr,level,icount)
+!
+!*******************************************************************************
+!
+!! XERSAV records that an error occurred.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        record that this error occurred.
+!
+!     description of parameters
+!     --input--
+!       messg, nmessg, nerr, level are as in xerror,
+!       except that when nmessg=0 the tables will be
+!       dumped and cleared, and when nmessg is less than zero the
+!       tables will be dumped and not cleared.
+!     --output--
+!       icount will be the number of times this message has
+!       been seen, or zero if the table has overflowed and
+!       does not contain this message specifically.
+!       when nmessg=0, icount will not be altered.
+!
+!     written by ron jones, with slatec common math library subcommittee
+!     latest revision ---  19 mar 1980
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer i
+  integer i1mach
+  integer icount
+  integer ii
+  integer iunit
+  integer kount(10)
+  integer, save :: kountx
+  integer kunit
+  integer level
+  integer levtab(10)
+  integer lun(5)
+  character ( len = 20 ) mes
+  character*(*) messg
+  character*20 mestab(10)
+  integer nerr
+  integer, save, dimension ( 10 ) :: nertab
+  integer nmessg
+  integer nunit
+!
+  save mestab,levtab,kount
+!
+!     next two data statements are necessary to provide a blank
+!     error table initially
+!
+  data kount(1),kount(2),kount(3),kount(4),kount(5), &
+    kount(6),kount(7),kount(8),kount(9),kount(10) &
+    /0,0,0,0,0,0,0,0,0,0/
+  data kountx/0/
+!
+  if (nmessg>0) go to 80
+!     dump the table
+     if (kount(1)==0) return
+!        print to each unit
+     call xgetua(lun,nunit)
+
+     do kunit=1,nunit
+        iunit = lun(kunit)
+        if (iunit==0) iunit = i1mach(4)
+!           print table header
+        write (iunit,10)
+   10       format (32h0          error message summary/ &
+            51h message start             nerr     level     count)
+!           print body of table
+        do i=1,10
+           if (kount(i)==0) go to 30
+           write (iunit,15) mestab(i),nertab(i),levtab(i),kount(i)
+   15          format (1x,a20,3i10)
+        end do
+   30       continue
+!           print number of other errors
+        if (kountx/=0) write (iunit,40) kountx
+   40       format (41h0other errors not individually tabulated=,i10)
+        write (iunit,50)
+   50       format (1x)
+     end do
+
+     if (nmessg<0) return
+!
+!        clear the error tables
+!
+     do i=1,10
+       kount(i) = 0
+     end do
+
+     kountx = 0
+     return
+   80 continue
+!     process a message...
+!     search for this messg, or else an empty slot for this messg,
+!     or else determine that the error table is full.
+  mes = messg
+  do 90 i=1,10
+     ii = i
+     if (kount(i)==0) go to 110
+     if (mes/=mestab(i)) go to 90
+     if (nerr/=nertab(i)) go to 90
+     if (level/=levtab(i)) go to 90
+     go to 100
+   90 continue
+!     three possible cases...
+!     table is full
+     kountx = kountx+1
+     icount = 1
+     return
+!     message found in table
+  100    kount(ii) = kount(ii) + 1
+     icount = kount(ii)
+     return
+!     empty slot found for new message
+  110    mestab(ii) = mes
+     nertab(ii) = nerr
+     levtab(ii) = level
+     kount(ii)  = 1
+     icount = 1
+     return
+end
+subroutine xgetf(kontrl)
+!
+!*******************************************************************************
+!
+!! XGETF returns current value of error control flag.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!   abstract
+!        xgetf returns the current value of the error control flag
+!        in kontrl.  see subroutine xsetf for flag value meanings.
+!        (kontrl is an output parameter only.)
+!
+!     written by ron jones, with slatec common math library subcommittee
+!     latest revision ---  7 june 1978
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer j4save
+  integer kontrl
+!
+  kontrl = j4save(2,0,.false.)
+
+  return
+end
+subroutine xgetua(iunita,n)
+!
+!*******************************************************************************
+!
+!! XGETUA returns unit number(s) to which error messages are being sent.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        xgetua may be called to determine the unit number or numbers
+!        to which error messages are being sent.
+!        these unit numbers may have been set by a call to xsetun,
+!        or a call to xsetua, or may be a default value.
+!
+!     description of parameters
+!      --output--
+!        iunit - an array of one to five unit numbers, depending
+!                on the value of n.  a value of zero refers to the
+!                default unit, as defined by the i1mach machine
+!                constant routine.  only iunit(1),...,iunit(n) are
+!                defined by xgetua.  the values of iunit(n+1),...,
+!                iunit(5) are not defined (for n < 5) or altered
+!                in any way by xgetua.
+!        n     - the number of units to which copies of the
+!                error messages are being sent.  n will be in the
+!                range from 1 to 5.
+!
+!     latest revision ---  19 mar 1980
+!     written by ron jones, with slatec common math library subcommittee
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer i
+  integer index
+  integer iunita(5)
+  integer j4save
+  integer n
+!
+  n = j4save(5,0,.false.)
+
+  do i=1,n
+     index = i+4
+     if (i==1) index = 3
+     iunita(i) = j4save(index,0,.false.)
+  end do
+
+  return
+end
+subroutine xgetun(iunit)
+!
+!*******************************************************************************
+!
+!! XGETUN returns the (first) output file to which messages are being sent.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        xgetun gets the (first) output file to which error messages
+!        are being sent.  to find out if more than one file is being
+!        used, one must use the xgetua routine.
+!
+!     description of parameter
+!      --output--
+!        iunit - the logical unit number of the  (first) unit to
+!                which error messages are being sent.
+!                a value of zero means that the default file, as
+!                defined by the i1mach routine, is being used.
+!
+!     written by ron jones, with slatec common math library subcommittee
+!     latest revision --- 23 may 1979
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer iunit
+  integer j4save
+!
+  iunit = j4save(3,0,.false.)
+
+  return
+end
+subroutine xsetf(kontrl)
+!
+!*******************************************************************************
+!
+!! XSETF sets the error control flag.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        xsetf sets the error control flag value to kontrl.
+!        (kontrl is an input parameter only.)
+!        the following table shows how each message is treated,
+!        depending on the values of kontrl and level.  (see xerror
+!        for description of level.)
+!
+!        if kontrl is zero or negative, no information other than the
+!        message itself (including numeric values, if any) will be
+!        printed.  if kontrl is positive, introductory messages,
+!        trace-backs, etc., will be printed in addition to the message.
+!
+!              abs(kontrl)
+!        level        0              1              2
+!        value
+!          2        fatal          fatal          fatal
+!
+!          1     not printed      printed         fatal
+!
+!          0     not printed      printed        printed
+!
+!         -1     not printed      printed        printed
+!                                  only           only
+!                                  once           once
+!
+!     written by ron jones, with slatec common math library subcommittee
+!     latest revision ---  19 mar 1980
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer j4save
+  integer junk
+  integer kontrl
+!
+  if ((kontrl>=(-2)).and.(kontrl<=2)) go to 10
+     call xerrwv('xsetf  -- invalid value of kontrl (i1).',33,1,2, &
+       1,kontrl,0,0,0.,0.)
+     return
+   10 junk = j4save(2,kontrl,.true.)
+  return
+end
+subroutine xsetua(iunita,n)
+!
+!*******************************************************************************
+!
+!! XSETUA sets up to 5 unit numbers to which messages are to be sent.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        xsetua may be called to declare a list of up to five
+!        logical units, each of which is to receive a copy of
+!        each error message processed by this package.
+!        the purpose of xsetua is to allow simultaneous printing
+!        of each error message on, say, a main output file,
+!        an interactive terminal, and other files such as graphics
+!        communication files.
+!
+!     description of parameters
+!      --input--
+!        iunit - an array of up to five unit numbers.
+!                normally these numbers should all be different
+!                (but duplicates are not prohibited.)
+!        n     - the number of unit numbers provided in iunit
+!                must have 1 <= n <= 5.
+!
+!     written by ron jones, with slatec common math library subcommittee
+!     latest revision ---  19 mar 1980
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer i
+  integer index
+  integer iunita(5)
+  integer j4save
+  integer junk
+  integer n
+!
+  if ((n>=1).and.(n<=5)) go to 10
+     call xerrwv('xsetua -- invalid value of n (i1).',34,1,2,1,n,0,0,0.,0.)
+     return
+   10 continue
+
+  do i=1,n
+     index = i+4
+     if (i==1) index = 3
+     junk = j4save(index,iunita(i),.true.)
+  end do
+
+  junk = j4save(5,n,.true.)
+
+  return
+end
+subroutine xsetun(iunit)
+!
+!*******************************************************************************
+!
+!! XSETUN sets the output file to which error messages are to be sent.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        xsetun sets the output file to which error messages are to
+!        be sent.  only one file will be used.  see xsetua for
+!        how to declare more than one file.
+!
+!     description of parameter
+!      --input--
+!        iunit - an input parameter giving the logical unit number
+!                to which error messages are to be sent.
+!
+!     written by ron jones, with slatec common math library subcommittee
+!     latest revision ---  7 june 1978
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer iunit
+  integer j4save
+  integer junk
+!
+  junk = j4save(3,iunit,.true.)
+  junk = j4save(5,1,.true.)
+
+  return
+end
Index: /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/set_BC_values.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/set_BC_values.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/set_BC_values.f90	(revision 6)
@@ -0,0 +1,128 @@
+!================================
+subroutine set_BC_values
+!================================
+
+#define DEBUG_LEVEL 1
+
+! ****  Most arrays available via use statements ******
+ use grid_info
+ use boundary_information
+ use dependent_variables
+ use pde_parameters
+ use dimensional_scales
+ use mpi_parameters
+ use counters_flags_etc
+ use user_parameters
+ use user_routines
+ implicit none
+!******************************************************
+ include '../input/problem_size.h'
+ include 'mpif.h'
+!******************************************************
+ real dv_dzeta,f_of_t
+ integer ifield
+
+!!! xlv
+!==================================================================
+ integer         :: field_id
+ real            :: alpha1,alpha2,alpha3,alpha4
+ real,dimension(:,:),allocatable   :: valsu,valsw 
+!===================================================================
+
+ if( istep > istart .and. steady_BCS=='yes' ) return
+!#if DEBUG_LEVEL >= 1
+ if(myid==0) write(0,*) 'hello world from set_BC_values'
+!#endif
+
+! FACE 1:  xi=0
+ BC_values1(:,:,1)=0.0    ! BC_vel1(:,:)='solid' => U
+ BC_values1(:,:,2)=0.0    ! BC_vel1(:,:)='specified_value' => v
+ BC_values1(:,:,3)=0.0    ! BC_vel1(:,:)='specified_value' => W
+ BC_values1(:,:,4)=0.0    ! BC_scalar1(:,:,1)='specified_gradient' => d/dxi (s1)
+ if(num_scalars>1)  &
+ BC_values1(:,:,5)=0.0    ! BC_scalar1(:,:,2)='specified_gradient' => d/dxi (s2)
+
+! FACE 2:  xi=1
+ BC_values2(:,:,1)=0.0    ! BC_vel1(:,:)='solid' => U
+ BC_values2(:,:,2)=0.0    ! BC_vel1(:,:)='specified_value' => v
+ BC_values2(:,:,3)=0.0    ! BC_vel1(:,:)='specified_value' => W
+ BC_values2(:,:,4)=0.0    ! BC_scalar1(:,:,1)='specified_gradient' => d/dxi (s1)
+ if(num_scalars>1)  &
+ BC_values2(:,:,5)=0.0    ! BC_scalar1(:,:,2)='specified_gradient' => d/dxi (s2)
+
+! FACE 3:  eta=0
+ BC_values3(:,:,1)=0.0    ! BC_vel3(:,:)='specified "stress"' => du/deta
+ BC_values3(:,:,2)=0.0    ! BC_vel3(:,:)='specified "stress"' => "dv/deta"
+ BC_values3(:,:,3)=0.0    ! BC_vel3(:,:)='specified "stress"' => dw/deta
+ BC_values3(:,:,4)=0.0    ! BC_scalar3(:,:,1)='specified_gradient' => ds1/deta
+ if(num_scalars>1)  &
+ BC_values3(:,:,5)=0.0    ! BC_scalar3(:,:,2)='specified_gradient' => ds2/deta
+
+! FACE 4:  eta=1
+ BC_values4(:,:,1)=0.0    ! BC_vel4(:,:)='specified "stress"' => du/deta
+ BC_values4(:,:,2)=0.0    ! BC_vel4(:,:)='specified "stress"' => "dv/deta"
+ BC_values4(:,:,3)=0.0    ! BC_vel3(:,:)='specified "stress"' => dw/deta
+ BC_values4(:,:,4)=0.0    ! BC_scalar4(:,:,1)='specified_gradient' => ds1/deta
+ if(num_scalars>1)  &
+ BC_values4(:,:,5)=0.0    ! BC_scalar4(:,:,2)='specified_gradient' => ds2/deta
+
+! FACE 5:  zeta=0   ! values set for free-slip wall
+if( myid == 0 ) then
+ BC_values5(:,:,1)=0.0    ! BC_vel5(:,:)='specified_stress' => dU/dzeta=0
+ BC_values5(:,:,2)=0.0    ! BC_vel5(:,:)='specified_stress' => dv/dzeta=0
+ BC_values5(:,:,3)=0.0    ! BC_vel5(:,:)='specified_value' => W=0
+ do j=1,ny
+  BC_values5(:,j,4)=0.0                   ! d/dzeta( s1 )=0, total gradient=ambient value
+  if(num_scalars>1)  &
+  BC_values5(:,j,5)=0.0                   ! d/dzeta( s2 )=0, total gradient=ambient value
+ enddo
+endif
+
+! FACE 6:  zeta=1
+if( myid == numprocs-1 ) then
+
+
+  if ( BC_vel6(1,1) == 'specified_stress' ) then
+
+       allocate( valsu(nx,ny) , valsw(nx,ny) )
+
+       do field_id = 1,5
+          call user_bdry_forcing( Grid(0)%x(:,1)*L_scale , Grid(0)%y(:)*L_scale , Grid(0)%z(1,:)*L_scale , &
+                                  t*t_scale , BC_values6(:,:,field_id) , field_id ,                        &
+                                  nx , ny , locnz )
+       enddo
+
+       !!! Opérations pour coller à la rotation de la grille
+       k=locnz
+       valsu = BC_values6(:,:,1)
+       valsw = BC_values6(:,:,3)
+       do i=1,nx
+          alpha1=Grid(0)%x_xi(i,k)
+          alpha2=Grid(0)%x_zeta(i,k)
+          alpha3=Grid(0)%z_xi(i,k)
+          alpha4=Grid(0)%z_zeta(i,k)
+          do j=1,ny
+               BC_values6(i,j,1)=1./(alpha1*alpha4-alpha3*alpha2)*( alpha4*valsu(i,j) - alpha2*valsw(i,j) )
+               BC_values6(i,j,3)=1./(alpha1*alpha4-alpha3*alpha2)*(-alpha3*valsu(i,j) + alpha1*valsw(i,j) )
+          enddo
+       enddo
+
+       deallocate( valsu , valsw )
+
+  else  !! any other condition
+
+    BC_values6(:,:,1)=0.0                    ! BC_vel5(:,:)='specified_stress' => dU/dzeta=0
+    BC_values6(:,:,2)=0.0                    ! BC_vel5(:,:)='specified_stress' => dv/dzeta=0
+    BC_values6(:,:,3)=0.0                    ! BC_vel5(:,:)='specified_value' => W=0
+    BC_values6(:,:,4)=0.0                    ! d/dzeta( s1 )=0, total
+    if(num_scalars>1) BC_values6(:,:,5)=0.   ! d/dzeta( s2 )=0, total
+      
+  endif
+
+
+endif
+
+
+end subroutine set_BC_values
+
+
Index: /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/set_ambient_stratification.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/set_ambient_stratification.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/set_ambient_stratification.f90	(revision 6)
@@ -0,0 +1,212 @@
+!============================================================================
+! SET_AMBIENT_STRATIFICATION
+! FUNCTION TO DEFINE s1_bar [K] & s2_bar [ppt]
+subroutine set_ambient_stratification
+
+  ! routine to set the ambient profiles for the scalars s1 and s2
+  ! where total_s1 = s1_bar(x,z) + s1(x,y,z,t)
+  ! and   total_s2 = s2_bar(x,z) + s2(x,y,z,t)
+
+  use grid_info
+  use user_parameters       ! for z_N,z_N_scale,Smax,Smin,Tmax,Tmin,dTdz
+  use dependent_variables   ! s1_bar, s2_bar,rho_bar
+  use dimensional_scales    ! s1_scale, s2_scale
+  use counters_flags_etc
+  use mpi_parameters
+  implicit none
+  include '../input/problem_size.h'
+  include 'mpif.h'
+
+!!! local variables
+  real        :: xpos,zpos,Temp,Salinity
+  integer     :: kglobal
+  real,dimension(:,:),allocatable :: tabforcing
+
+
+  print*,'Ambient_stratification, Lz',Lz 
+
+  if ( pomme_data_flag == 'no') then
+
+
+     !!! these are just values pulled out of a hat for testing
+     Smax =  35.0          ! [psu]
+     Smin =  35.0          ! [psu]
+     Tmax =  15.0          ! [deg C]
+     Tmin =  10.0          ! [deg C]   !!! must be the same as T0 in EOS.f90 if
+
+     !!! defined in params.h
+     !!! dTdz=1.4133829e-3*4
+
+     !!! we'll use s1 for temperature (deg C) and s2 for salinity (g/kg or ppt)
+     ! both of these test profiles are stable
+     do k=1,locnz
+        do i=1,nx
+
+           zpos = Grid(0)%z(i,k)*L_scale     ! [m]
+!           Salinity= Smin + (Smax-Smin)/Lz * zpos
+!           Temp    = Tmin + dTdz * zpos             !!!!!(Tmax-Tmin)/Lz * zpos
+           Salinity= (Smax-Smin)/2
+           Temp    = (Tmax-Tmin)/2
+
+           s1_bar(i,k) = Temp / s1_scale       
+           s2_bar(i,k) = Salinity / s2_scale
+
+        enddo
+     enddo
+
+  else
+
+     !!! xlv lecture profil [T,S] POMME
+     !============================================
+     allocate (tabforcing(nz,2))
+
+     if(myid==0) write(0,*) '... Reading POMME data into file : '
+     if(myid==0) print*,'   --> ',trim(pomme_filename)
+     open(911,file=pomme_filename,status='old')
+     do k=1,nz
+        read(911,*) tabforcing(k,1),tabforcing(k,2)
+     enddo
+     close(911)
+
+     do k=1,locnz
+        do i=1,nx
+           kglobal = k + myid*locnz
+           s1_bar(i,k)=tabforcing(kglobal,1)
+           s2_bar(i,k)=tabforcing(kglobal,2)
+        enddo
+     enddo
+
+     s1_bar = s1_bar / s1_scale  
+     s2_bar = s2_bar / s2_scale 
+
+     if(myid==0) write(0,*) '... POMME data saved....'
+
+     deallocate( tabforcing )
+     !===================================
+
+  endif
+
+
+  print*,'MINVAL(T)=',minval(s1_bar),'MAXVAL(T)=',maxval(s1_bar)
+  print*,'MINVAL(S)=',minval(s2_bar),'MAXVAL(S)=',maxval(s2_bar)
+
+
+
+  return
+end subroutine set_ambient_stratification
+!============================================================================
+
+
+
+!=============================================================================
+!  TEMPD
+!  FUNCTION TO GET INTERPOLATED VALUE OF TEMP FROM GRIDDED DATA
+!
+      REAL FUNCTION TEMPD(ZK)
+!
+      PARAMETER(NT=23)
+!
+      REAL ZK
+!
+      REAL ZD(NT),TD(NT)
+!
+      DATA IZTOPT/NT/
+!
+!!!      DATA ZD/-60.,-55.,-50.,-47.2,-45.,-44.3,-42.2,-40.,-38.5,-35., &
+!!!      -34.5,-32.5,-30.,-28.9,-27.4,-25.,-24.1,-20.,-17.6,-15.,-10., &
+!!!      -5.,0./
+      DATA ZD/0.,5.,10.,12.8,15.,15.7,17.8,20.,21.5,25.,25.5,27.5,30.,31.1, &
+              32.6,35.,35.9,40.,42.4,45.,50.,55.,60./
+      DATA TD/-1.15,-1.15,-1.15,-1.05,-1.16,-1.18,-0.92,-0.73,-0.55, &
+      -0.05,-0.02,-0.10,-0.28,-0.45,-0.70,-1.26,-1.43,-1.58,-1.61, &
+      -1.61,-1.62,-1.62,-1.62/
+!
+!!!      ZD(:) = 60. + ZD(:)
+      TEMPD = FK(ZK,ZD,TD,NT,IZTOPT)
+!
+      RETURN
+      END
+!==============================================================================
+
+
+
+!============================================================================
+!  SALTD
+!  FUNCTION TO GET INTERPOLATED VALUE OF SALINITY FROM GRIDDED DATA
+!
+      REAL FUNCTION SALTD(ZK)
+!
+      PARAMETER(NS=20)
+!
+      REAL ZK
+!
+      REAL ZD(NS),SD(NS)
+!
+      DATA IZTOPS/NS/
+!
+!!!      DATA ZD/-60.,-55.,-50.,-47.1,-45.,-43.3,-40.,-37.9,-35.,-32.7, &
+!!!      -30.,-28.9,-27.8,-25.,-24.3,-20.,-15.,-10.,-5.,0./
+      DATA ZD/0.,5.,10.,12.9,15.,16.7,20.,22.1,25.,27.3,30.,31.1,32.2, &
+              35.,35.7,40.,45.,50.,55.,60./
+      DATA SD/31.83,31.83,31.83,31.82,31.78,31.75,31.72,31.68,31.58, &
+      31.53,31.44,31.38,31.27,30.96,30.87,30.80,30.79,3*30.78/
+!
+!!!      ZD(:) = 60. + ZD(:)
+      SALTD = FK(ZK,ZD,SD,NS,IZTOPS)
+!
+      RETURN
+      END
+!=============================================================================
+
+
+
+!==============================================================================
+!  FK
+!  FK IS A FUNCTION THAT USES LINEAR INTERPOLATION TO FIND  FK,
+!  GIVEN  ZK  AND THE ARRAYS  Z  AND  F. FOR EXAMPLE, IN ROUTINE
+!  DERIVS,  BVF = FK(ALT,BVFZ,BVFF)  WILL BE USED TO GET  BVF  AT  ALT
+!  FROM THE ARRAYS  BVFZ  AND  BVFF.
+      REAL FUNCTION FK(ZK,Z,F,NZ,IZTOP)
+      REAL Z(*), F(*)
+!
+!  MAKE SURE Z(IZTOP) .GE. ZK
+!!      PRINT 99, zk,nz,iztop
+!!   99 FORMAT('zk,nz,iztop = ',1pe15.5,2i15)
+    5 CONTINUE
+      IF(ZK.GT.Z(IZTOP)) THEN
+         IZTOP = IZTOP + 1
+         IF(IZTOP.GT.NZ) THEN
+            WRITE(2,9) ZK,Z(NZ)
+    9       FORMAT(' ZK TOO HIGH. ZK,Z(NZ) = ',2(1PE15.5))
+            CLOSE(2)
+            CLOSE(3)
+            STOP
+         ENDIF
+         GO TO 5
+      ENDIF
+!
+      IF(ZK.EQ.Z(IZTOP)) THEN
+         FK = F(IZTOP)
+         RETURN
+      ENDIF
+!
+!  FIND IZK SUCH THAT  Z(IZK) .GT. ZK .GE. Z(IZK-1)
+      DO 100 IZ=IZTOP,2,-1
+      IZM1 = IZ - 1
+      IF(Z(IZ).GT.ZK .AND. ZK.GE.Z(IZM1)) THEN
+         ZRATIO = (ZK - Z(IZM1)) / (Z(IZ) - Z(IZM1))
+         FK = F(IZM1) + ZRATIO * (F(IZ) - F(IZM1))
+         IZTOP = IZM1 + 1
+         RETURN
+      ENDIF
+  100 CONTINUE
+!
+!  ZK TOO LOW
+      WRITE(2,109) ZK,Z(1)
+  109 FORMAT(' ZK TOO LOW. ZK,Z(1) = ',2(1PE15.5))
+      CLOSE(2)
+      CLOSE(3)
+      STOP
+!
+      END
+!
Index: /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/set_diffusion.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/set_diffusion.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/set_diffusion.f90	(revision 6)
@@ -0,0 +1,55 @@
+subroutine set_diffusion
+
+! routine to set the diffusivity profiles, Km_of_z and Kt_of_z
+
+use grid_info
+use user_parameters       ! for Km_of_z and Kt_of_z
+use dependent_variables   
+use dimensional_scales    
+use counters_flags_etc
+use mpi_parameters
+implicit none
+include '../input/problem_size.h'
+
+! local variables
+ real        :: zpos,diff
+ real        :: diffd
+!!! real, dimension(locnz)  :: zz
+
+ do k=1,locnz
+!   zpos = Grid(0)%z(1,k)*L_scale     ! [m]
+!   diff = diffd(zpos)
+!   Km_of_z(k) = diff
+!   Kt_of_z(k) = diff
+!!!   zz(k) = zpos
+   Km_of_z(k) = nu
+   Kt_of_z(k) = nu
+ enddo
+!!!      write(0,'(A4,I2.2,2F10.5)') (('PROF',myid,zz(k),Km_of_z(k)),k=1,locnz)
+ return
+end subroutine set_diffusion
+!
+!  DIFFD
+!  FUNCTION TO GET INTERPOLATED VALUE OF DIFF FROM GRIDDED DATA
+!
+      REAL FUNCTION DIFFD(ZK)
+!
+      PARAMETER(ND=14)
+!
+      REAL ZK
+!
+      REAL ZD(ND),DD(ND)
+!
+      DATA IZTOPD/ND/
+!
+!!! xlv  Km_of_z/Kt_of_z : pas assez de profondeur
+!!!      DATA ZD/0.,20.,25.,30.,35.,40.,43.,43.7,54.1,60./
+!!!      DATA DD/.00001,.00001,.00001,.0004,.0010,.0018,.0023,.0118,.0227,.0227/
+
+       DATA ZD/0.,20.,25.,30.,35.,40.,43.,43.7,54.1,60.,100.,200.,500.,1000./
+       DATA DD/1.e-6,8.e-6,1.e-5,.00004,.00006,.00008,.0001,.0004,.0010,.0018,.0023,.0118,.0227,.0227/
+!
+      DIFFD = FK(ZK,ZD,DD,ND,IZTOPD)
+!
+      RETURN
+      END
Index: /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/setup_compact_schemes.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/setup_compact_schemes.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/setup_compact_schemes.f90	(revision 6)
@@ -0,0 +1,160 @@
+subroutine setup_compact_schemes(h)
+! Routine to create & factor the various differentiation matrices
+! corresponding to the optimized 6th order compact difference 
+! operators from Lui & Lele 2001
+
+#define DEBUG_LEVEL 1
+
+use grid_info
+use mpi_parameters
+implicit none
+
+integer          :: h     ! grid level
+
+#if DEBUG_LEVEL >= 1
+  if(myid==0) then
+    write(0,*)   'hello world from setup_compact_schemes'
+    write(0,*) '       initializing for grid level: ',h
+   endif
+#endif
+
+! set parameters of the 6th order scheme described in
+! the Lui & Lele 2001 conference paper
+  alpha_1 = 0.5381301
+  beta_1  = 0.0666332
+  a1=1.3675777
+  b1=0.8234282
+  c1=0.0185208
+  alpha=0.475     ! filtering parameter
+
+! spectral like scheme of Lele 1992
+! formally 4th order but supposedly superior resolution characteristics
+! alpha_1 = 0.5771439
+! beta_1  = 0.0896406
+! a1=1.3025166
+! b1=0.9935500
+! c1=0.03750245
+! alpha=0.475
+
+  if( Grid(h)%n1 < 4 .or. Grid(h)%n2 < 4 ) then
+   write(0,*) 'skipping setup compact schemes at level ',h
+   return
+  endif
+
+! 1st derivative operators
+   call set_deriv1(Grid(h)%n1,Grid(h)%ddx,Grid(h)%piv_dx)
+   call set_deriv1(Grid(h)%n2,Grid(h)%ddy,Grid(h)%piv_dy)
+   call set_deriv1(Grid(h)%n3,Grid(h)%ddz,Grid(h)%piv_dz)
+!      if(myid == 0) then
+!      write(0,*) '********** h = ',h
+!      write(0,*) '********** %n3 = ',Grid(h)%n3
+!      write(0,*) '********** %ddz = ',Grid(h)%ddz
+!      write(0,*) '********** %piv_dz = ',Grid(h)%piv_dz
+!      endif
+
+! compact filtering operators
+   call set_filter4(Grid(h)%n1,Grid(h)%filt_x,Grid(h)%piv_fx,alpha)
+   call set_filter4(Grid(h)%n2,Grid(h)%filt_y,Grid(h)%piv_fy,alpha)
+   call set_filter4(Grid(h)%n3,Grid(h)%filt_z,Grid(h)%piv_fz,alpha)
+	
+end subroutine setup_compact_schemes
+
+!************************************************************************
+!************************************************************************
+subroutine set_deriv1(nx,AB,ipiv)	
+  use grid_info, only      :  alpha_1, beta_1
+  use user_parameters, only:  LAPACK_FLAG
+  implicit none
+  integer              :: nx,i,j,ipiv(nx),ierr
+!!!  double precision     :: AB(7,nx)
+  real     :: AB(7,nx)
+
+   AB=-9999.
+
+
+! 1st 2 rows of banded matrix array AB are reserved for fill in
+! 1st/last k elements for the kth super/sub diagonal are not accessed
+! superdiagonal 2
+ AB(3,3:5)=0.0
+ AB(3,6:nx-1)=beta_1
+ AB(3,nx)=0.0
+! superdiagonal 1
+ AB(4,2)= 0.   
+ AB(4,3)=                      0*1./2.   ! make second eqn explicit FD too
+ AB(4,4)=1./3.
+ AB(4,5:nx-2)=alpha_1
+ AB(4,nx-1)=1./3.
+ AB(4,nx)=                     0*1./6.   ! make second eqn explicit FD too
+! diagonal 
+ AB(5,1:nx)=1.0
+! subdiagonal 1
+ do i=1,nx
+  AB(6,i)=AB(4,nx-i+1)
+ enddo
+! subdiagonal 2
+ do i=1,nx
+  AB(7,i)=AB(3,nx-i+1)
+ enddo
+
+! factor the banded matrix AB using LAPACK routine SGBTF2
+! AB is overwritten with its LU factorization
+
+  if( LAPACK_FLAG == 'double' ) then
+!!!   call DGBTRF(nx,nx,2,2,AB,7,ipiv,ierr)
+      write(0,*) 'LAPACK_FLAG = double instead of single'
+      stop
+  elseif( LAPACK_FLAG == 'single' ) then
+   call SGBTRF(nx,nx,2,2,AB,7,ipiv,ierr)
+  endif
+
+! check error condition
+  if( ierr .ne. 0 ) then
+   write(0,*) ' factorization error ',ierr, ' size: ',nx
+   STOP
+  endif
+
+end subroutine set_deriv1
+
+!************************************************************************
+!************************************************************************
+subroutine set_filter4(nx,AB,ipiv,alpha)	
+  use user_parameters, only:  LAPACK_FLAG
+  implicit none
+  integer              :: nx,i,j,ipiv(nx),ierr
+!!!  double precision     :: AB(4,nx)
+  real     :: AB(4,nx)
+  real                 :: alpha
+
+  AB=-9999.
+
+! 1st row of banded matrix array AB is reserved for fill in
+! 1st/last k elements for the kth super/sub diagonal are not accessed
+! superdiagonal 1
+ AB(2,2:3)=0.0
+ AB(2,4:nx-1)=alpha
+ AB(2,nx)=0.0
+! diagonal 
+ AB(3,1:nx)=1.0
+! subdiagonal 1
+ do i=1,nx
+  AB(4,i)=AB(2,nx-i+1)
+ enddo
+
+! factor the banded matrix AB using LAPACK routine SGBTF2
+! AB is overwritten with its LU factorization
+
+  if( LAPACK_FLAG == 'double' ) then
+!!!   call DGBTRF(nx,nx,1,1,AB,4,ipiv,ierr)
+      write(0,*) 'LAPACK_FLAG = double instead of single'
+      stop
+  elseif( LAPACK_FLAG == 'single' ) then
+   call SGBTRF(nx,nx,1,1,AB,4,ipiv,ierr)
+  endif
+
+! check error condition
+  if( ierr .ne. 0 ) then
+   write(0,*) ' factorization error in filter matrix',ierr, ' size: ',nx
+   STOP
+  endif
+
+end subroutine set_filter4
Index: /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/solve_for_xyper_pressure.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/solve_for_xyper_pressure.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/solve_for_xyper_pressure.f90	(revision 6)
@@ -0,0 +1,272 @@
+subroutine psolve_xy_periodic
+#define DEBUG_LEVEL 1
+!Solve the elliptic equation for pressure subject to appropriate
+!boundary conditions. Interior and boundary differential operators
+!are defined in subroutine matvec.
+ 
+use mpi_parameters
+use grid_info
+use dependent_variables,    only: pressure   ! soln vector
+use intermediate_variables, only: b          ! rhs vector
+use counters_flags_etc
+use boundary_information
+use user_parameters,        only: LAPACK_FLAG
+use columnslab
+implicit none
+include '../input/problem_size.h'
+include 'mpif.h'
+
+real                    :: pi,xx,mean_value,kx_max,ky_max,kmax,kstar
+real                    :: XF,YF,bsum,lambda2
+real, allocatable       :: kx(:),ky(:)
+real, allocatable       :: soln(:),tmp(:),C3(:)
+real, allocatable       :: L_star(:,:)
+
+real, allocatable                   :: b_col(:,:,:),p_col(:,:,:)
+real, allocatable                   :: work(:,:,:)
+integer                             :: N,nrhs,ldb,ii,row
+integer, allocatable                :: ipiv(:)
+integer                             :: sizeofreal
+
+integer,parameter                   :: locnx=(nx-1)/numprocs
+
+#if DEBUG_LEVEL >=1
+   if(myid==0) then
+      write(0,*) 'hello world from solve_for_pressure: xy periodic case'
+   endif
+#endif
+
+! Create a derived data type for ease of swaps
+  call MPI_TYPE_EXTENT(MPI_REAL,sizeofreal,ierr)
+! data type for 1d section of basic data slice: m1/nprocs
+  call MPI_TYPE_VECTOR(locnx,1,1,MPI_REAL,oneslice,ierr)
+! data type for 2d section of basic data slice: m2=ny 1d sections
+  call MPI_TYPE_HVECTOR(ny,1,nx*sizeofreal,oneslice,twoslice,ierr)  !
+! data type for 3d section of basic data slice:locnz=nz/numprocs 2d sections
+  call MPI_TYPE_HVECTOR(locnz,1,nx*ny*sizeofreal,twoslice,subslice,ierr)
+  call MPI_TYPE_COMMIT(subslice,ierr)
+  call MPI_BARRIER(comm,ierr)
+
+current_grid_level=0
+
+!(1) exchange data so that each processor has columns of b~ --> b_col(1:locnx,1:ny,1:nz)
+  allocate( b_col(locnx,ny,nz),p_col(locnx,ny,nz) )   ! don't keep extra x endpt in col storage
+  b_col(:,:,:) = 0.
+  p_col(:,:,:) = 0.
+  call slabs_to_columns(b,b_col)
+  p_col(:,:,:)=0.
+  
+!(2) each processor compute global arrays kx&ky 
+  N=nx-1                 ! nx includes both boundary points, N only 1
+  pi=4.*atan(1.)
+  allocate(kx(N+1))
+  kx(:) = 0.
+  do i=1,N/2+1
+   kx(i)=2.*pi*(i-1.)    ! FFTW real to half-complex storage
+  enddo
+  do i=2,N/2
+   kx(N-i+2)=kx(i)       ! FFTW real to half-complex storage
+  enddo
+  kx(N+1)=0.             ! extra location, convenient for alignment of arrays
+  kx_max=2.*pi*(N/2.)
+
+
+  N=ny-1                 ! ny includes both boundary points, N only 1
+  allocate(ky(N+1))
+  ky(:) = 0.
+  do j=1,N/2+1
+   ky(j)=2.*pi*(j-1.)    ! FFTW real to half-complex storage
+  enddo
+  do j=2,N/2
+   ky(N-j+2)=ky(j)       ! FFTW real to half-complex storage
+  enddo
+  ky(N+1)=0.             ! extra location, convenient for alignment of arrays
+  ky_max=2.*pi*(N/2.)
+
+  allocate( C3(nz) )    ! global integration weights for zeta direction
+  C3(:) = 0.
+  if( nz < 9 ) then
+   write(0,*) 'nz too small for integration scheme in solve_for_xypressure'
+   stop
+  endif
+  C3(5:nz-4)=1.0
+  C3(1)=17./48.
+  C3(2)=59./48.
+  C3(3)=43./48.
+  C3(4)=49./48.
+  C3(nz)=17./48.
+  C3(nz-1)=59./48.
+  C3(nz-2)=43./48.
+  C3(nz-3)=49./48.
+
+!(3) each processor  allocate storage for L_star, a FD approximation to L
+  allocate( ipiv(nz+1), L_star(nz+1,nz+1) )
+  ipiv(:) = 0
+  L_star(:,:) = 0.
+  allocate( soln(nz),tmp(nz+1) )
+  soln(:) = 0.
+  tmp(:) = 0.
+  nrhs=1
+  ldb=nz+1   ! leading dimension of B, i.e. # of rows in augmented rhs vector
+
+!(4) loop over kx,ky space and iteratively solve the perturbed problems
+  do i=1,locnx
+   ii=i+myid*locnx       ! global kx indexing variable
+   do j=1,ny-1
+
+    bsum = sum( b_col(i,j,1:nz)*C3(1:nz) )   ! integral of b dzeta (/dzeta)
+    lambda2=  (kx(ii))**2 * (1./Grid(0)%x_xi(1,1)**2)  &
+             +(ky(j))**2 * (1./Grid(0)%y_eta(1)**2) 
+
+!   rhs of matrix eqn
+    tmp(1:nz)=b_col(i,j,1:nz)
+
+!   Augment the rhs for compatability condition
+    if( ii==1 .and. j==1 ) then
+     tmp(nz+1)=0.
+    else
+     tmp(nz+1)=-bsum/lambda2   ! augmented rhs, compatability condition
+    endif
+
+    L_star(:,:)=0.
+
+!   set diagonal elements
+
+    do row=3,nz-2
+     xx = (global_Czz(row)/global_det_J(row) )*(1./(60*Grid(0)%dzeta**2)) 
+     L_star(row,row-2)=-5.*xx
+     L_star(row,row-1)=80.*xx
+     L_star(row,row)=-150.*xx
+     L_star(row,row+1)=80.*xx
+     L_star(row,row+2)=-5.*xx
+    enddo
+!  1st row
+    row=1
+    xx = (global_Czz(row)/global_det_J(row) )*(1./(60*Grid(0)%dzeta**2)) 
+    L_star(row,1)=-(725./3.)*xx
+    L_star(row,2)=280.*xx
+    L_star(row,3)=-30.*xx
+    L_star(row,4)=-(40./3.)*xx
+    L_star(row,5)=5.*xx
+!  2nd row
+    row=2
+    xx = (global_Czz(row)/global_det_J(row) )*(1./(60*Grid(0)%dzeta**2)) 
+    L_star(row,1)=(290./3.)*xx
+    L_star(row,2)=-180.*xx
+    L_star(row,3)=90.*xx
+    L_star(row,4)=-(20./3.)*xx
+!  last row
+    row=nz
+    xx = (global_Czz(row)/global_det_J(row) )*(1./(60*Grid(0)%dzeta**2)) 
+    L_star(nz,nz)=-(725./3.)*xx
+    L_star(nz,nz-1)=280.*xx
+    L_star(nz,nz-2)=-30.*xx
+    L_star(nz,nz-3)=-(40./3.)*xx
+    L_star(nz,nz-4)=5.*xx
+!  2nd last row
+    row=nz-1
+    xx = (global_Czz(row)/global_det_J(row) )*(1./(60*Grid(0)%dzeta**2)) 
+    L_star(nz-1,nz)=(290./3.)*xx
+    L_star(nz-1,nz-1)=-180.*xx
+    L_star(nz-1,nz-2)=90.*xx
+    L_star(nz-1,nz-3)=-(20./3.)*xx
+
+!Add in the term for horizontal derivatives
+    do row=1,nz
+     L_star(row,row)=L_star(row,row) - lambda2
+    enddo
+
+! add in the terms for  a*b_zeta*p_zeta
+! (1st & nz rows don't get anything: p_zeta=0 by BCs, or use approx form, no difference)
+    do row=3,nz-2
+     xx = (1./(global_det_J(row)))*global_Cz(row)/(24.*Grid(0)%dzeta)  
+     L_star(row,row-2)=L_star(row,row-2)+(2.)*xx
+     L_star(row,row-1)=L_star(row,row-1)-(16.)*xx
+     L_star(row,row+1)=L_star(row,row+1)+(16.)*xx
+     L_star(row,row+2)=L_star(row,row+2)-(2.)*xx
+    enddo
+!  1st row
+    row=1
+    xx = (1./(global_det_J(row)))*global_Cz(row)/(24.*Grid(0)%dzeta)  
+    L_star(row,1)=L_star(row,1)-(50)*xx
+    L_star(row,2)=L_star(row,2)+(96.)*xx
+    L_star(row,3)=L_star(row,3)-(72.)*xx
+    L_star(row,4)=L_star(row,4)+(32.)*xx
+    L_star(row,5)=L_star(row,5)-(6.)*xx
+!  2nd row
+    row=2
+    xx = (1./(global_det_J(row)))*global_Cz(row)/(24.*Grid(0)%dzeta)  
+    L_star(row,1)=L_star(row,1)-(68./3.)*xx
+    L_star(row,2)=L_star(row,2)+(12.)*xx
+    L_star(row,3)=L_star(row,3)+(12.)*xx
+    L_star(row,4)=L_star(row,4)-(4./3.)*xx
+!  nz-1 row
+    row=nz-1
+    xx = (1./(global_det_J(row)))*global_Cz(row)/(24.*Grid(0)%dzeta) 
+    L_star(row,nz)=L_star(row,nz)+(28./3.)*xx
+    L_star(row,nz-1)=L_star(row,nz-1)+(12.)*xx
+    L_star(row,nz-2)=L_star(row,nz-2)-(20.)*xx
+    L_star(row,nz-3)=L_star(row,nz-3)+(8./3.)*xx
+!  nz row
+    row=nz
+    xx = (1./(global_det_J(row)))*global_Cz(row)/(24.*Grid(0)%dzeta)  
+    L_star(row,nz)=L_star(row,nz)+(50)*xx
+    L_star(row,nz-1)=L_star(row,nz-1)-(96.)*xx
+    L_star(row,nz-2)=L_star(row,nz-2)+(72.)*xx
+    L_star(row,nz-3)=L_star(row,nz-3)-(32.)*xx
+    L_star(row,nz-4)=L_star(row,nz-4)+(6.)*xx
+
+!   Augmented system for unique soln with Neumann BCs:
+    L_star(nz+1,1:nz)=C3   ! extra row: compatability condition
+    L_star(1:nz,nz+1)=1.   ! xtra col : perturb rhs such that compatability can be satisfied
+
+!   solve the augmented system
+    if( LAPACK_FLAG == 'double' ) then
+!!!     call DGESV(nz+1,nrhs,L_star,nz+1,ipiv,tmp,ldb,ierr)
+      write(0,*) 'LAPACK_FLAG = double instead of single'
+      stop
+    elseif( LAPACK_FLAG == 'single' ) then
+     call SGESV(nz+1,nrhs,L_star,nz+1,ipiv,tmp,ldb,ierr)
+    endif
+
+    soln(1:nz)=tmp(1:nz)  ! xGESV overwrites the rhs vector w/ the soln
+
+    p_col(i,j,1:nz)=soln(1:nz)   ! save soln vectors in p_col
+
+   enddo
+  enddo
+
+ deallocate( soln,tmp,C3,kx,ky )
+
+
+!(5) do the data exchanges so that each processor gets slabs of p --> work(1:nx,1:ny,1:locnz)
+ allocate( work(nx,ny,locnz) )
+ work(:,:,:) = 0.
+!!! xlv
+!!! call columns_to_slabs(p_col,work)
+   call columns_to_slabs(p_col,work)
+   work(nx,:,:)=0.
+   work(:,ny,:)=0.
+!!! xlv
+
+! Now we need to inverse transform the pressure solution
+! to recover P(xi,eta,zeta).
+  call xy_fft(work,pressure,nx,ny,locnz,-1)   ! -1 for inverse direction
+
+!Store updated total pressure in pressure(:,:,:,2).
+ if( psolve_scheme .eq. 'total_pressure' ) then
+   pressure(:,:,:,2)=pressure(:,:,:,1)
+ elseif( psolve_scheme .eq. 'change_in_pressure' ) then
+  pressure(:,:,:,2)=pressure(:,:,:,2)+pressure(:,:,:,1)
+ endif
+
+!release the MPI derived data types  (created before)
+ call MPI_BARRIER(comm,ierr)
+ call MPI_TYPE_FREE(oneslice,ierr)
+ call MPI_TYPE_FREE(twoslice,ierr)
+ call MPI_TYPE_FREE(subslice,ierr)
+ 
+ deallocate(b_col,p_col,ipiv,L_star,work)
+
+end subroutine psolve_xy_periodic
+
Index: /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/user_BCs.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/user_BCs.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/user_BCs.f90	(revision 6)
@@ -0,0 +1,44 @@
+subroutine user_BCs
+#define DEBUG_LEVEL 1
+
+!********** Nearly everything available via modules  *****
+ use grid_info
+ use dependent_variables
+ use dimensional_scales
+ use mpi_parameters
+ use user_parameters
+ use counters_flags_etc
+ use user_routines
+
+ implicit none
+
+! local variables
+ include '../input/problem_size.h'
+ real, dimension(nx,ny,locnz)  :: vals
+ integer :: field_id
+!*********************************************************
+
+if( user_BCs_flag == 'no' ) return
+
+#if DEBUG_LEVEL >=1
+ if(myid == 0) write(0,*) 'hello world from user_BCs'
+#endif
+
+ if ( istep >= 1 ) then
+!==============  
+  field_id = 1  !!! imposed surface current only for "U"  
+
+!  do i = 1,nx 
+   call user_forcing( Grid(0)%x(:,1)*L_scale , Grid(0)%y(:)*L_scale , Grid(0)%z(1,:)*L_scale ,      &
+                           t*t_scale , vals , field_id ,                                                 &
+                           nx , ny , locnz )
+!  u(i,:,:) = u(i,:,:) + vals/U_scale
+!  enddo
+   u = u + vals/U_scale
+   
+!==============
+
+ endif
+
+  
+end subroutine user_BCs
Index: /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/user_modules.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/user_modules.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/user_modules.f90	(revision 6)
@@ -0,0 +1,62 @@
+!!!!  user defined modules used in cfdXZ code  !!!!
+
+!*****************************************************************
+module stress_parameters
+ ! container for parameters of stress boundary
+  real                             :: Patch_Radius                   !! [m]
+  real                             :: Patch_Decay_Scale              !! [m]
+  real                             :: delta
+  real                             :: tau_0                          !! [kg/(ms2)]
+  real                             :: Shear                          !! [1/s]
+end module stress_parameters
+!*****************************************************************
+
+
+!*****************************************************************
+module user_parameters
+!******* ice stress problem
+!   x_0,x_1,x_2                      positions of ice/water interface [m]
+!   surface_V_of_x               surface BC for v, applied in [0,x_1] and
+!   [x_2,Lx]
+!   z_N                          center position for stratified layer [m]
+!   z_N_scale                    vertical scale of stratified layer   [m]
+!   HV_RATIO                     nu_horiz/nu where nu is taken as nu_vertical
+!   [1]
+!                                (invoked only when HV_METHOD=1)
+!   Smax,Smin                    max/min Salinity values for ambient profile
+!   [ppt]
+!   Tmax,Tmin                    max/min Temp values used for ambient profile
+!   [deg C]
+!   Km_of_z                      eddy viscosity for momentum [m2/s]
+!   Kt_of_z                      eddy diffusivity for temperature [m2/s]
+!   Kh                           horizontal eddy diffusivity for both momentum
+!                                and temperature when HV_METHOD=2 [m2/s]
+!*********************************
+ real                         :: x_0,x_1,x_2,V_0
+ real, allocatable            :: surface_V_of_x(:)
+ real, allocatable            :: Km_of_z(:),Kt_of_z(:)
+ real                         :: z_N, z_N_scale
+ real                         :: Smax,Smin,Tmax,Tmin,dTdz
+ real                         :: HV_RATIO
+ integer                      :: HV_METHOD
+ character(80)                :: LAPACK_FLAG
+ real                         :: alpha_rho
+ character(len=80)            :: pomme_filename,pomme_data_flag,ts_profil
+end module user_parameters
+!*****************************************************************
+
+
+!*****************************************************************
+module immersed_boundary
+ integer                    :: n_j,n_left,n_right
+ integer,allocatable        :: ibdry_owner(:),local_region(:,:)
+ real,allocatable           :: ibdry_locations(:,:),ibdry_normals(:,:)
+ real,allocatable           :: ibdry_data(:,:,:),ibdry_integrals(:,:,:)
+ real,allocatable           :: ibdry_rhs(:,:), z_limits(:,:)
+ real,allocatable           :: mask1(:,:), mask2(:,:),mask3(:,:)
+ real                       :: delta_1, delta_2, delta_3
+ real                       :: xalpha,xbeta,x_left,x_right,z_left,z_right
+end module immersed_boundary
+!*****************************************************************
+
+
Index: /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/write3D_netcdf.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/write3D_netcdf.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/write3D_netcdf.f90	(revision 6)
@@ -0,0 +1,289 @@
+subroutine write3D_netcdf
+
+#define DEBUG_LEVEL 1
+ use mpi_parameters
+ use grid_info
+ use dependent_variables
+ use intermediate_variables
+ use dimensional_scales
+ use counters_flags_etc
+ use pde_parameters
+ use immersed_boundary
+ use user_parameters
+ implicit none
+
+ include 'netcdf.inc'
+ include '../input/problem_size.h'
+
+ character(len=5)                     ::  cnum
+ character(len=3)                     ::  cid
+ character(len=80)                    ::  filename
+ integer                              ::  ncid,rcode 
+ integer                              ::  ix,iz 
+ integer                              ::  kglobal
+
+!Dimensions and dimension variables
+ integer                              ::  tdimensionID  
+ integer                              ::  start1D(1)
+ integer                              ::  count1D(1)   
+      
+!4D Variables
+ integer                              ::  s1VarID,s2VarID,uVarID,vVArID,divVarID
+ integer                              ::  wVarID,pVarID,KmVarID
+ integer                              ::  start4D(4),count4D(4)
+
+!Arrays for holding data
+ real,dimension(:),allocatable        ::  tdimValues         ! 1D array for holding time data
+ real,dimension(:),allocatable        ::  hold1D             ! 1D scratch array 
+ real,dimension(:,:,:),allocatable    ::  hold3D             ! 3D scratch array 
+ real                                 ::  uu,ww
+!!! real                                 ::  maxu,minu,maxv,minv
+!!! real                                 ::  maxxi,minxi,maxzeta,minzeta
+
+!Execute routine only at specified time steps
+ if( mod(istep,i_full_fields) /= 0 ) return
+ allocate ( tdimValues(1), hold1D(locnz), hold3D(nx,ny,locnz) )
+
+!Initialize a new netcdf file
+ call init3D_netcdf
+#if DEBUG_LEVEL >= 1
+ if( myid == 0 ) write(0,*) 'hello world from write3D_netcdf, init3D complete'
+#endif
+
+!Create the filename
+ write(unit=cnum,fmt=100) istep
+100 format(I5.5)
+ write(unit=cid,fmt=101) myid
+101 format(I3.3)
+ if( numprocs > 1 ) then
+  filename='../output/cfd3D_'//cnum//'_'//cid
+ else
+  filename='../output/cfd3D_'//cnum
+ endif
+
+!Open the netcdf file and get variable id's.
+ rcode = NF_OPEN(filename,NF_WRITE,ncid)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+
+ rcode = NF_INQ_VARID(ncid,'timedimension',tdimensionID)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+ rcode = NF_INQ_VARID(ncid,'TempVar',s1VarID)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+if(num_scalars>1) then
+ rcode = NF_INQ_VARID(ncid,'SalinityVar',s2VarID)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+endif
+ rcode = NF_INQ_VARID(ncid,'uVar',uVarID)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+ rcode = NF_INQ_VARID(ncid,'vVar',vVarID)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+ rcode = NF_INQ_VARID(ncid,'wVar',wVarID)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+ rcode = NF_INQ_VARID(ncid,'pVar',pVarID)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+ rcode = NF_INQ_VARID(ncid,'KmVar',KmVarID)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+ rcode = NF_INQ_VARID(ncid,'divVar',divVarID)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+
+!Write time value into time dimension
+ start1D(1) = write3D_counter
+ count1D(1) = 1
+ tdimValues(1) = t * t_scale
+ rcode = NF_PUT_VARA_REAL(ncid,tdimensionID,start1D,count1D,tdimValues)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+      
+!Write 4D data to netcdf file
+ start4D(1) = 1
+ start4D(2) = 1
+ start4D(3) = 1
+ start4D(4) = write3D_counter
+ count4D(1) = nx
+ count4D(2) = ny
+ count4D(3) = locnz   ! Local data space
+ count4D(4) = 1
+
+
+!scalar 1 (dimensional)
+ do j=1,ny
+!!  hold3D(1:nx,j,1:locnz) = (s1_bar(1:nx,1:locnz) + s1(1:nx,j,1:locnz)) - s1_scale
+     hold3D(1:nx,j,1:locnz) = (s1_bar(1:nx,1:locnz) + s1(1:nx,j,1:locnz)) * s1_scale
+ enddo
+
+!  do k=1,locnz
+!  kglobal= k + myid*locnz
+!  print*,'kglobal=',kglobal,'   s1_total=',hold3D(1,1,k)
+!  enddo
+
+  filename='../output/TEMP128_'//cnum//'_'//cid
+  open(21,file=filename,status='new')
+  do ix=1,nx
+   write(21,221) (hold3D(ix,int(ny/2),iz),iz=1,locnz)
+  enddo
+  close(21)
+221 format(6(1pe13.5))
+!
+!Write variable to netcdf file
+ rcode = NF_PUT_VARA_REAL(ncid,s1VarID,start4D,count4D,hold3D)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+
+if(num_scalars>1) then
+!scalar 2 (dimensional)
+ do j=1,ny
+  hold3D(1:nx,j,1:locnz) = (s2_bar(1:nx,1:locnz)+s2(1:nx,j,1:locnz)) * s2_scale
+ enddo
+
+!  do k=1,locnz
+!  kglobal= k + myid*locnz
+!  print*,'kglobal=',kglobal,'   s2_total=',hold3D(1,1,k)
+!  enddo
+
+!Write variable to netcdf file
+ rcode = NF_PUT_VARA_REAL(ncid,s2VarID,start4D,count4D,hold3D)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+endif
+
+!!!!density (dimensional)
+!!! do j=1,ny
+!!!  hold3D(1:nx,j,1:locnz) = (rho_bar(1:nx,1:locnz)+pd(1:nx,j,1:locnz))*density_scale
+!!! enddo
+!!!!
+!!!  filename='../output/DENS3_'//cnum//'_'//cid
+!!!  open(21,file=filename,status='new')
+!!!  do ix=1,nx
+!!!   write(21,221) (hold3D(ix,3,iz),iz=1,locnz)
+!!!  enddo
+!!!  close(21)
+!!!!!!  filename='../output/DENS65_'//cnum//'_'//cid
+!!!!!!  open(21,file=filename,status='new')
+!!!!!!  do ix=1,nx
+!!!!!!   write(21,221) (hold3D(ix,65,iz),iz=1,locnz)
+!!!!!!  enddo
+!!!!!!  close(21)
+!!!  filename='../output/DENS128_'//cnum//'_'//cid
+!!!  open(21,file=filename,status='new')
+!!!  do ix=1,nx
+!!!   write(21,221) (hold3D(ix,128,iz),iz=1,locnz)
+!!!  enddo
+!!!  close(21)
+!!!!!!  filename='../output/DENS193_'//cnum//'_'//cid
+!!!!!!  open(21,file=filename,status='new')
+!!!!!!  do ix=1,nx
+!!!!!!   write(21,221) (hold3D(ix,193,iz),iz=1,locnz)
+!!!!!!  enddo
+!!!!!!  close(21)
+!!!221 format(7(1pe11.3))
+!
+!u velocity component
+!convert to Cartesian and express in dimensional units
+!!! maxu = MAXVAL(u)
+!!! minu = MINVAL(u)
+!!! maxxi = MAXVAL(Grid(0)%x_xi(:,:))
+!!! minxi = MINVAL(Grid(0)%x_xi(:,:))
+!!! maxzeta = MAXVAL(Grid(0)%x_zeta(:,:))
+!!! minzeta = MINVAL(Grid(0)%x_zeta(:,:))
+!!! write(0,*) 'A_MAXMIN_U',myid,maxu,minu,maxxi,minxi,maxzeta,minzeta
+ do i=1,nx
+  do j=1,ny
+   do k=1,locnz
+    uu = Grid(0)%x_xi(i,k)*U(i,j,k) + Grid(0)%x_zeta(i,k)*W(i,j,k)
+!       uu = Grid(0)%x_xi(i,k)*u_star(i,j,k) + Grid(0)%x_zeta(i,k)*w_star(i,j,k)
+    hold3D(i,j,k) = uu * U_scale
+   enddo
+  enddo
+ enddo
+!!! maxu = MAXVAL(hold3D)
+!!! minu = MINVAL(hold3D)
+!!! write(0,*) 'B_MAXMIN_U',myid,maxu,minu
+!Write variable to netcdf file
+ rcode = NF_PUT_VARA_REAL(ncid,uVarID,start4D,count4D,hold3D)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+
+!v velocity component
+!!! maxv = MAXVAL(v)
+!!! minv = MINVAL(v)
+!!! write(0,*) 'A_MAXMIN_V',myid,maxv,minv
+ hold3D(:,:,:) = v(:,:,:) * U_scale
+!!! maxv = MAXVAL(hold3D)
+!!! minv = MINVAL(hold3D)
+!!! write(0,*) 'B_MAXMIN_V',myid,maxv,minv
+!Write variable to netcdf file
+ rcode = NF_PUT_VARA_REAL(ncid,vVarID,start4D,count4D,hold3D)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+
+!w velocity component
+!convert to Cartesian and express in dimensional units
+ do i=1,nx
+  do j=1,ny
+   do k=1,locnz
+    ww = Grid(0)%z_xi(i,k)*U(i,j,k) + Grid(0)%z_zeta(i,k)*W(i,j,k)
+!      ww = Grid(0)%z_xi(i,k)*u_star(i,j,k) + Grid(0)%z_zeta(i,k)*w_star(i,j,k)
+    hold3D(i,j,k) = ww * U_scale
+   enddo
+  enddo
+ enddo
+!Write variable to netcdf file
+ rcode = NF_PUT_VARA_REAL(ncid,wVarID,start4D,count4D,hold3D)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+!
+!!!  filename='../output/WVEL3_'//cnum//'_'//cid
+!!!  open(21,file=filename,status='new')
+!!!  do ix=1,nx
+!!!   write(21,221) (hold3D(ix,3,iz),iz=1,locnz)
+!!!  enddo
+!!!  close(21)
+!!!!!!  filename='../output/WVEL65_'//cnum//'_'//cid
+!!!!!!  open(21,file=filename,status='new')
+!!!!!!  do ix=1,nx
+!!!!!!   write(21,221) (hold3D(ix,65,iz),iz=1,locnz)
+!!!!!!  enddo
+!!!!!!  close(21)
+  filename='../output/WVEL128_'//cnum//'_'//cid
+  open(21,file=filename,status='new')
+  do ix=1,nx
+   write(21,221) (hold3D(ix,int(ny/2),iz),iz=1,locnz)
+  enddo
+  close(21)
+!!!!!!  filename='../output/WVEL193_'//cnum//'_'//cid
+!!!!!!  open(21,file=filename,status='new')
+!!!!!!  do ix=1,nx
+!!!!!!   write(21,221) (hold3D(ix,193,iz),iz=1,locnz)
+!!!!!!  enddo
+!!!!!!  close(21)
+!!!!
+!!!!!!   nslice = 27
+!!!!!!   nzout = 4
+!!!!!!   if(myid.eq.nslice) then
+!!!!!!      filename = '../output/TWVEL_'//cnum//'_'//cid
+!!!!!!      open(21,file=filename,status='new')
+!!!!!!      do ix=1,nx
+!!!!!!         write(21,221) (hold3D(ix,iy,nzout),iy=1,ny)
+!!!!!!      enddo
+!!!!!!      close(21)
+!!!!!!   endif
+!
+!pressure variable (total stored in block 2, dP in block 1)
+ hold3D(:,:,:) = pressure(:,:,:,2) * pressure_scale
+!Write variable to netcdf file
+ rcode = NF_PUT_VARA_REAL(ncid,pVarID,start4D,count4D,hold3D)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+
+!Km variable
+ hold3D(:,:,:) = K_m(:,:,:) * U_scale * L_scale
+!Write variable to netcdf file
+ rcode = NF_PUT_VARA_REAL(ncid,KmVarID,start4D,count4D,hold3D)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+
+!div variable
+ hold3D(:,:,:) = div_u(:,:,:,new) * (1./t_scale)
+!hold3D(:,:,:) = b
+!Write variable to netcdf file
+ rcode = NF_PUT_VARA_REAL(ncid,divVarID,start4D,count4D,hold3D)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+
+!Close netcdf file.
+ rcode = NF_CLOSE(ncid)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+
+ deallocate ( tdimValues, hold1D, hold3D )
+end subroutine write3D_netcdf
Index: /trunk/00FlowSolve_PL/PROJECTS/OIS_2D/EOS.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/OIS_2D/EOS.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/OIS_2D/EOS.f90	(revision 6)
@@ -0,0 +1,185 @@
+subroutine equation_of_state
+
+  ! routine to use the equation of state from
+  ! MILLERO et.al. (1980) DEEP-SEA RES.
+  ! to calculate the dimensionless perturbation density pd(x,y,z) 
+  ! given the scalar values s1(x,y,z), s2(x,y,z), s1_bar(x,z) and s2_bar(x,z).
+  ! The "perturbation" density is defined relative to the ambient state
+  ! rho_bar(x,z) determined by s1_bar and s2_bar. As written, we interpret
+  ! the scalar s1 to be temparature and the scalar s2 to be salinity.
+  ! Salinity in g/kg or equivilently ppt (typical value ~ 35/1000)
+
+  use mpi_parameters
+  use grid_info
+  use dependent_variables
+  use dimensional_scales
+  use counters_flags_etc
+  implicit none
+  include '../input/problem_size.h'
+
+  double precision :: rho,xx,z_surf   ! rho is external function
+  real, dimension(locnz)            ::  zz,rh
+
+  ! local variables
+  ! S,T,P all DOUBLE precision arguments of function rho:  P in MPa, T in deg C, S in ppt
+  double precision, allocatable         :: Temp(:,:),Salinity(:,:),P_Mpa(:,:),density(:,:)
+  allocate( Temp(nx,locnz),Salinity(nx,locnz),P_Mpa(nx,locnz),density(nx,locnz) )
+
+  !   pressure as function of depth, ignoring density perturbations
+  !   formula assumes surface height z is equal to L_scale
+
+!!! z_surf=L_scale  ! surface height in [m]   ! top processor should broadcast value
+!!! P_Mpa(:,:) = g*rho0*( z_surf - Grid(0)%z(:,:)*L_scale )  ! [kg/ms^2=Pa]
+!!! P_Mpa(:,:) = P_Mpa/1.e6                                  ! Mpa
+  P_Mpa(:,:) = 0.                                  ! Mpa
+
+  Temp=0.
+  Salinity=0.
+
+  do j=1,ny
+
+     !declare interpretation of s1 and s2
+     Temp(:,:) = (s1_bar(:,:) + s1(:,j,:)) * s1_scale        ! dimensional quantity: total Temp.
+     Salinity(:,:) = (s2_bar(:,:) + s2(:,j,:)) * s2_scale    ! dimensional quantity: total Salinity
+
+     do k=1,locnz
+        do i=1,nx
+           density(i,k)=rho( Salinity(i,k),Temp(i,k),P_Mpa(i,k) ) ! total density [kg/m3]
+           density(i,k) = (density(i,k)-rho0)/density_scale ! dimensionless "total"(rel. to rho0) density in j plane
+        enddo
+     enddo
+
+     !If not yet initialized, calculate rho_bar, otherwise its available via "dependent_variables" 
+     if( rho_bar(1,1) == -999.9 ) then     
+
+        if ( j == 1) print*,'**** not yet initialized, calculate rho_bar ****'
+
+        Temp(:,:) = s1_bar(:,:) * s1_scale                 ! dimensional background Temp
+        Salinity(:,:) = s2_bar(:,:) * s2_scale             ! dimensional background Salinity
+
+        do k=1,locnz
+           do i=1,nx
+              xx=rho( Salinity(i,k),Temp(i,k),P_Mpa(i,k) )
+              rho_bar(i,k)=(xx-rho0)/density_scale           ! dimensionless ambient profile, rel. to rho0
+           enddo
+           rh(k) = rho_bar(1,k)*density_scale + rho0
+           zz(k) = Grid(0)%z(1,k)*L_scale
+        enddo
+!!!      write(0,'(/A8,I2.2,2F20.5/)') (('DENSPROF',myid,zz(k),rh(k)),k=1,locnz)
+     endif
+
+
+     !store dimensionless values of perturbation densityin jth plane of pd
+     do k=1,locnz
+        do i=1,nx
+           pd(i,j,k) = density(i,k)  - rho_bar(i,k)
+        enddo
+     enddo
+
+  enddo  ! end loop over j
+
+  if ( minval(Salinity) .lt. 0.) then
+     print*,myid,'   ATTENTION Salinity NEGATIF : minval(Salinity)=',minval(Salinity)
+     !STOP
+  endif
+
+
+
+
+  deallocate( Temp,Salinity,density,P_Mpa )
+end subroutine equation_of_state
+
+
+!	"rho.f"
+
+!	Parameter	:	equation of state
+!	Source		:	MILLERO et.al. (1980) DEEP-SEA RES.
+!				Vol 27A, pp 255-264
+!	Units		:	Kg / m**3
+!!! xlv
+!!!    Input            :       s (concentration units), t (deg C), p (MPa)
+!!!    Range            :       s (0 to 0.040), t (-2 to 40), p (MPa)
+!      Input		:	s (psu), t (deg C), p (MPa)
+!      Range		:	s (0 to 40), t (-2 to 40), p (MPa)
+
+!	Ck value	:	K (0, 0, 100)      = 2.297721e4
+!				K (0.035, 0, 100)  = 2.499200e4
+!				K (0, 25, 100)     = 2.54051e4
+!				K (0.035, 25, 100) = 2.710895e4
+!	Coded		:	Ngoc Dang, July 1982
+double precision function rho (s, t, p)
+
+!!! xlv	
+  use user_parameters   , only: alpha_rho
+  use dimensional_scales, only: rho0
+
+  double precision s, t, p
+
+!!!  double precision a, b, c, d, e, k, t1, t2, t3, t4, ta, tb
+!!!  double precision k0, k0w, alpha0, alpha, rho00, aw, bw
+
+!!! xlv      
+!!!      if(s .lt. 0.) write(0,*) 's,t,p = ',s,t,p
+
+  !  convert input units
+!!! xlv  s already in psu
+!!!        s = 1000.0d0 * s     
+!!!	p = 10.0d0 * p
+
+!!$!  compute alpha0 = alpha (s, t, 0)
+!!$
+!!$	t1 = 9.99841594d-1 + t * (6.793952d-5 + t * (-9.095290d-6 + t *   &
+!!$           (1.001685d-7 + t * (-1.120083d-9 + t * 6.536332d-12))))
+!!$	t2 = 8.25917d-4 + t * (-4.4490d-6 + t * (1.0485d-7 + t *      &
+!!$           (-1.258d-9 + t * 3.315d-12)))
+!!$	t3 = -6.33761d-6 + t * (2.8441d-7 + t * (-1.6871d-8 + t *     &
+!!$      	     2.83258d-10))
+!!$	t4 = 5.4705d-7 + t * (-1.97975d-8 + t * (1.6641d-9 - t *      &
+!!$           3.1203d-11))
+!!$	rho00 = t1 + t2 * s + t3 * s**(1.5) + t4 * s**2
+!!$	alpha0 = 1.0d0 / rho00
+!!$
+!!$!  compute the pressure coefficient
+!!$
+!!$!	the first term
+!!$	k0w = 1.965221d4 + t * (1.484206d2 + t * (-2.327105d0 + t *     &
+!!$            (1.360477d-2 - t * 5.155288d-5)))
+!!$	ta = 5.46746d1 + t * (-6.03459d-1 + t * (1.09987d-2 - t *       &
+!!$           6.167d-5))
+!!$	tb = 7.944d-2 + t * (1.6483d-2 - t * 5.3009d-4)
+!!$	k0 = k0w + ta * s + tb * s**(1.5)
+!!$
+!!$!	the second term
+!!$	aw = 3.239908d0 + t * (1.43713d-3 + t * (1.16092d-4 - t *       &
+!!$          5.77905d-7))
+!!$	c = 2.2838d-3 + t * (-1.0981d-5 - t * 1.6078d-6)
+!!$	d = 1.9107d-4
+!!$	a = aw + c * s + d * s**(1.5)
+!!$
+!!$!	the third term
+!!$	bw = 8.50935d-5 + t * (-6.12293d-6 + t * 5.2787d-8)
+!!$	e = -9.9348d-7 + t * (2.0816d-8 + t * 9.1697d-10)
+!!$	b = bw + e * s
+!!$
+!!$	k = k0 + a * p + b * p**2
+!!$
+!!$!  compute density
+!!$	alpha = alpha0 * (1.0d0 - p / k)
+!!$	rho = 1.0d0 / alpha
+!!$
+!!$
+!!$!  convert to kg / m**3
+!!$	rho = 1000.0d0 * rho
+!!$!!! xlv
+!!$!!!     s = s / 1000.0d0
+!!$	p = p / 10.0d0
+
+  !=================================================
+  !!! xlv profil de rho dependant de t
+
+   rho = rho0 + alpha_rho * t
+  !=================================================
+ 
+  return
+
+end function rho
Index: /trunk/00FlowSolve_PL/PROJECTS/OIS_2D/flow_solve_user.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/OIS_2D/flow_solve_user.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/OIS_2D/flow_solve_user.f90	(revision 6)
@@ -0,0 +1,372 @@
+!!==========================================================
+!!==========================================================
+module user_routines
+!! module for user-customized subroutines and functions
+
+implicit none
+
+public   :: user_ics                 !!routine defining initial conditions
+public   :: user_forcing             !!routine defining any external forcing
+public   :: user_bdry_forcing        !!routine for specifying boundary-condition data
+
+
+!!==========================================================    
+Contains
+!!==========================================================
+
+
+!!==========================================================
+  subroutine user_ics(xval,yval,zval,id,m1,m2,m3,FF)
+    !!===========================================================
+    !!  User defined subroutine to specify initial conditions.
+    !!  Inputs and outputs are all in dimensional units.
+    !!  
+    !!
+    !!  inputs:
+    !!   x,y,z   coordinate arrays (in meters) that define 
+    !!           the region over which forcing functions
+    !!           are to be evaluated
+    !! 
+    !!   id      field id [u,v,w,s1',s2'] <---[1,2,3,4,5]
+    !!             where s1 = s1bar(z) + s1'(x,y,z,t)
+    !!             and   s2 = s2bar(z) + s2'(x,y,z,t)
+    !!
+    !!  outputs:
+    !!          F(:,:,:) the initial conditions for variable id
+    !!          F is to be returned in DIMENSIONAL units 
+    !!          (i.e. m/s or deg C etc )
+    !!   
+    !!===========================================================
+
+    use dimensional_scales ,only: f,DEL,Nsquared,g,rho0,pi,L_scale,density_scale
+    use dependent_variables,only: rho_bar,s1_bar_zeta,s2_bar_zeta
+    use mpi_parameters     ,only: myid,comm,nprocs
+    use counters_flags_etc ,only: ierr
+    use grid_info          ,only: grid,Lx,Ly,Lz
+
+    implicit none
+
+    include '../input/problem_size.h' 
+    include 'mpif.h'
+
+    integer           ::  m1,m2,m3         
+    integer           ::  id
+    real              ::  xval(m1)
+    real              ::  yval(m2)
+    real              ::  zval(m3)
+    real              ::  FF(m1,m2,m3)
+
+    integer           :: i,j,k
+    real              :: xpos,ypos,zpos,arg
+    real              :: A_ics,k_ics,l_ics,m_ics,omega2,omega_ics
+    real,dimension(2,2) :: c 
+
+    integer           :: myproc
+    real              :: ambient_density_gradient,N2_ics
+    real,dimension(m1,m3) :: drhobardz
+    real,dimension(:),allocatable :: drhobardz_tot
+
+    !! Definition du processeur pour l'echange
+    if ( myid == 0 ) then
+            myproc=0
+    else
+            myproc=1
+    endif
+    !! allocation de "rho_bar_tot" pour le processeur "myproc" seulement
+    if ( myid == myproc ) allocate ( drhobardz_tot(m3*nprocs) )
+    !! calculde la derive de rho_bar(-,z) (dimensionne) selon z
+    call compact_ddz_mpi( rho_bar*density_scale+rho0 , drhobardz , 1 , -1e32 , m1 , 1 , m3)
+    !! collecte par le processeur "myproc" de toutes les valeurs de drhobardz
+    call mpi_gather( drhobardz(1,:)/L_scale , m3 , MPI_REAL , drhobardz_tot , m3 , MPI_REAL , myproc , comm , ierr )
+    !! moyenne sur toutes les valeurs
+    if ( myid == myproc ) ambient_density_gradient = sum( drhobardz_tot ) / ( m3*nprocs)
+    !! Diffusion à tous les processeurs la valeur "ambient_density_gradient"
+    call mpi_bcast( ambient_density_gradient , 1 , MPI_REAL , myproc , comm , ierr ) 
+    !! deallocation de "drhobardz_tot"
+    if ( myid == myproc ) deallocate ( drhobardz_tot )
+
+    N2_ics = (-g/rho0) * ambient_density_gradient
+
+    !  Internal wave parameters
+    A_ics=1.                                     ! displacement [m]
+    k_ics=((1)*(2.*pi/Lx))                       ! [1/m]
+    l_ics=((0)*(2.*pi/Ly))                       ! [1/m]
+    m_ics=((1)*(pi/Lz))                          ! [1/m]
+
+    !  Internal wave dispersion relation
+    omega2 = ( ((f)**2)*m_ics**2 + N2_ics*(k_ics**2+l_ics**2) )/ &
+         ( k_ics**2 + l_ics**2 + m_ics**2 )
+    omega_ics=sqrt(omega2)                       ! [1/s]
+
+
+    !  Constants in front of u & v expressions  [m/s]
+    c(1,1)=A_ics*k_ics*m_ics*omega_ics/(k_ics**2+l_ics**2)
+    c(1,2)=A_ics*l_ics*m_ics*f/(k_ics**2+l_ics**2)
+    c(2,1)=A_ics*l_ics*m_ics*omega_ics/(k_ics**2+l_ics**2)
+    c(2,2)=A_ics*k_ics*m_ics*f/(k_ics**2+l_ics**2)
+    
+    if ( id == 1 .and. myid == 0 ) then
+           print*,'m1,m2,m3=',m1,m2,m3
+           print*,'Lx,Ly,Lz=',Lx,Ly,Lz
+           print*,'f,N,ambient_density_gradient=',f,sqrt(N2_ics),ambient_density_gradient
+           print*,'k_ics,l_ics,m_ics=',k_ics,l_ics,m_ics
+           print*,'c(1,1),c(1,2),c(2,1),c(2,2)=',c(1,1),c(1,2),c(2,1),c(2,2)
+           print*,' '
+           write(6,*) ' TEST WAVE FREQUENCY (1/s) :  ',omega_ics
+           write(6,*) ' TEST WAVE PERIOD    (min) : ', (2*pi/omega_ics)/60.
+   endif       
+
+    !     arg=k_ics*x + l_ics*y   ! generally -omega_ics*t but set t=0
+
+    select case(id)
+
+    case(1)        !! ics for u [m/s]
+       do i=1,m1
+          do j=1,m2
+             do k=1,m3        
+                xpos = xval(i)     ! [m]
+                ypos = yval(j)     ! [m]
+                zpos = zval(k)     ! [m] 
+                arg  = k_ics*xpos + l_ics*ypos 
+
+                FF(i,j,k) = c(1,1) * cos(m_ics*zpos)*cos(arg) - c(1,2) * cos(m_ics*zpos)*sin(arg)
+
+             enddo
+          enddo
+       enddo
+
+    case(2)        !! ics for v [m/s]
+       do i=1,m1         
+          do j=1,m2
+             do k=1,m3
+                xpos = xval(i)     ! [m]
+                ypos = yval(j)     ! [m]
+                zpos = zval(k)     ! [m]  
+                arg  = k_ics*xpos + l_ics*ypos
+
+                FF(i,j,k) = c(2,1) * cos(m_ics*zpos)*cos(arg) + c(2,2) * cos(m_ics*zpos)*sin(arg) 
+
+             enddo
+          enddo
+       enddo
+
+    case(3)        !! ics for w [m/s]
+       do i=1,m1
+          do j=1,m2
+             do k=1,m3 
+                xpos = xval(i)     ! [m]
+                ypos = yval(j)     ! [m]
+                zpos = zval(k)     ! [m] 
+                arg  = k_ics*xpos + l_ics*ypos
+
+                FF(i,j,k) = A_ics*omega_ics*sin(m_ics*zpos)*sin(arg)
+
+             enddo
+          enddo
+       enddo
+
+    case(4)        !! ics for s1' [in this case deg C]
+       do i=1,m1
+          do j=1,m2
+             do k=1,m3
+                xpos = xval(i)     ! [m]
+                ypos = yval(j)     ! [m]
+                zpos = zval(k)     ! [m] 
+                arg  = k_ics*xpos + l_ics*ypos
+
+                FF(i,j,k) = -A_ics*s1_bar_zeta(i,k)*sin(m_ics*zpos)*cos(arg)
+
+             enddo
+          enddo
+       enddo
+
+
+    case(5)        !! ics for s2' [concentration units]
+       do i=1,m1
+          do j=1,m2
+             do k=1,m3
+                xpos = xval(i)     ! [m]
+                ypos = yval(j)     ! [m]
+                zpos = zval(k)     ! [m] 
+                arg  = k_ics*xpos + l_ics*ypos
+
+                FF(i,j,k) = -A_ics*s2_bar_zeta(i,k)*sin(m_ics*zpos)*cos(arg)
+
+             enddo
+          enddo
+       enddo
+
+
+    case default
+       stop 'error in calling user_ics: id out of range'
+    end select
+
+    return
+  end subroutine user_ics
+!!========================================================== 
+!!==========================================================
+      
+
+      
+!!==========================================================
+!!==========================================================
+subroutine user_forcing(x,y,z,t,FF,id,m1,m2,m3)
+  !!===========================================================
+  !!  User defined subroutine to add time/space dependent
+  !!  forcing to the equations of motion. Inputs and outputs
+  !!  for this routine are all in dimensional units.
+  !!
+  !!
+  !!  inputs:
+  !!   x,y,z   coordinate arrays [m] that define
+  !!           the region over which forcing
+  !!           functions are to be evaluated
+  !!   t       current time in seconds
+  !!   id      field id [u,v,w,s1',s2'] <---[1,2,3,4,5]
+  !!
+  !!  outputs:
+  !!          FF(:,:,:) the rhs term for equation id
+  !!          FF is to be returned in DIMENSIONAL units
+  !!          (i.e. m/s2 or deg C/s etc )
+  !!
+  !!===========================================================
+  use dependent_variables, only: s1_bar_zeta,s2_bar_zeta
+  use dimensional_scales,  only: f,pi,t_scale
+  use mpi_parameters,      only: myid        
+  use counters_flags_etc,  only: istep
+  use grid_info,           only: Lx,Ly,Lz,dt
+
+  implicit none
+  integer   ::  m1,m2,m3
+  real      ::  x(m1)
+  real      ::  y(m2)
+  real      ::  z(m3)
+  real      ::  t
+  integer   ::  id
+  real,dimension(:,:,:),intent(out)  ::  FF
+
+  real      :: xpos,ypos,zpos
+  integer   :: i,j,k
+  real      :: A_ics,xfreq,arg,G1,G2,sigma1,sigma2,sigma3
+  integer   :: iend_storm
+  real      :: Vt,lt,xt,H,zscale,init,gauss,window
+  
+  iend_storm= floor((0.5*(3600*24))/(dt*t_scale))
+
+  select case(id)
+
+  case(1)   ! u
+     FF=0.d0
+
+  case(2)   ! v
+     FF=0.d0
+
+  case(3) ! w
+     FF=0.d0
+
+  case(4) ! s1
+     FF=0.d0
+
+  case(5) ! s2
+     FF=0.d0
+
+  case default
+     stop 'error in calling user_forcing: id out of range'
+
+  end select
+
+  return
+
+end subroutine user_forcing
+!!===============================================================
+!!===============================================================
+
+
+
+
+!!==========================================================
+subroutine user_bdry_forcing(x,y,z,t,FF,id,m1,m2,m3)
+!!===========================================================
+!!  User defined subroutine to add time/space dependent
+!!  forcing to the equations of motion. Inputs and outputs
+!!  for this routine are all in dimensional units.
+!!
+!!
+!!  inputs:
+!!   x,y,z   coordinate arrays [m] that define
+!!           the region over which forcing
+!!           functions are to be evaluated
+!!   t       current time in seconds
+!!   id      field id [u,v,w,s1',s2'] <---[1,2,3,4,5]
+!!
+!!  outputs:
+!!          FF(:,:,:) the rhs term for equation id
+!!          FF is to be returned in DIMENSIONAL units
+!!          (i.e. m/s2 or deg C/s etc )
+!!
+!!===========================================================
+ use stress_parameters    !! tau_0, delta, Patch_Radius
+ use dependent_variables, only: s1_bar_zeta,s2_bar_zeta
+ use dimensional_scales , only: pi,f,t_scale, rho0
+ use user_parameters    , only: Km_of_z
+ use counters_flags_etc , only: istep
+ use grid_info          , only: dt,Lx,Ly,Lz
+
+
+implicit none
+  integer   ::  m1,m2,m3
+  real      ::  x(m1)
+  real      ::  y(m2)
+  real      ::  z(m3)
+  real      ::  t
+  real      ::  FF(m1,m2)
+  integer   ::  id
+  real      ::  xpos,ypos,zpos
+  integer   ::  i,j,k,istep_Ti
+
+
+
+  !! surface stress non_zero value just for 1/2 Ti. 
+  !! 0.5 Ti
+  istep_Ti= floor((0.5*(2*pi/f))/(dt*t_scale)) 
+  !! 1 Ti
+  !istep_Ti= floor((1.0*(2*pi/f))/(dt*t_scale))
+
+  select case(id)
+  
+ case(1) ! u
+   FF=0.d0
+
+ case(2) ! v
+   FF=0.d0
+   
+  case(3) ! w
+   FF=0.d0
+  
+  case(4) ! s1
+
+    do j=1,m2
+      FF(:,j)= - s1_bar_zeta(:,m3)
+    enddo
+  
+  case(5) ! s2
+  
+    do j=1,m2
+      FF(:,j)= - s1_bar_zeta(:,m3)
+    enddo
+
+  case default
+   stop 'error in calling user_bdry_forcing: id out of range'
+  
+ end select
+
+return
+
+end subroutine user_bdry_forcing
+!!===============================================================
+!!===============================================================
+
+
+
+ 
+end module user_routines
Index: /trunk/00FlowSolve_PL/PROJECTS/OIS_2D/grid_coords
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/OIS_2D/grid_coords	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/OIS_2D/grid_coords	(revision 6)
@@ -0,0 +1,562 @@
+ 17  17  32   1.000000   1.000000    1.000000
+   0.000000e+00    0.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    3.225806e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -3.441691e-15    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    6.451613e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    9.677419e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00   -5.506706e-15
+   0.000000e+00    1.290323e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00    5.506706e-15
+   0.000000e+00    1.612903e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.032507e-14    1.000000e-02    1.000000e+00    0.000000e+00    1.101341e-14
+   0.000000e+00    1.935484e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.101341e-14
+   0.000000e+00    2.258065e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00   -5.506706e-15
+   0.000000e+00    2.580645e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00    5.506706e-15
+   0.000000e+00    2.903226e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   0.000000e+00    3.225806e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.376677e-14    1.000000e-02    1.000000e-00    0.000000e+00    1.376677e-14
+   0.000000e+00    3.548387e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   0.000000e+00    3.870968e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   0.000000e+00    4.193548e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   0.000000e+00    4.516129e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   0.000000e+00    4.838710e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -2.753353e-14
+   0.000000e+00    5.161290e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   0.000000e+00    5.483871e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.130030e-14    1.000000e-02    1.000000e-00    0.000000e+00    4.130030e-14
+   0.000000e+00    5.806452e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   0.000000e+00    6.129032e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   0.000000e+00    6.451613e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   0.000000e+00    6.774194e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.334622e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.231371e-14
+   0.000000e+00    7.096774e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   0.000000e+00    7.419355e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.087975e-14    1.000000e-02    1.000000e+00    0.000000e+00   -7.984724e-14
+   0.000000e+00    7.741935e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   0.000000e+00    8.064516e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.782042e-14
+   0.000000e+00    8.387097e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   0.000000e+00    8.709677e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   0.000000e+00    9.032258e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   0.000000e+00    9.354839e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   0.000000e+00    9.677419e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   0.000000e+00    1.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e+00    0.000000e+00    6.057377e-14
+   6.250000e-01    0.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   6.250000e-01    3.225806e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -3.441691e-15    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   6.250000e-01    6.451613e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   6.250000e-01    9.677419e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00   -5.506706e-15
+   6.250000e-01    1.290323e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00    5.506706e-15
+   6.250000e-01    1.612903e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.032507e-14    1.000000e-02    1.000000e+00    0.000000e+00    1.101341e-14
+   6.250000e-01    1.935484e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.101341e-14
+   6.250000e-01    2.258065e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00   -5.506706e-15
+   6.250000e-01    2.580645e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00    5.506706e-15
+   6.250000e-01    2.903226e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   6.250000e-01    3.225806e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.376677e-14    1.000000e-02    1.000000e-00    0.000000e+00    1.376677e-14
+   6.250000e-01    3.548387e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   6.250000e-01    3.870968e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   6.250000e-01    4.193548e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   6.250000e-01    4.516129e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   6.250000e-01    4.838710e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -2.753353e-14
+   6.250000e-01    5.161290e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   6.250000e-01    5.483871e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.130030e-14    1.000000e-02    1.000000e-00    0.000000e+00    4.130030e-14
+   6.250000e-01    5.806452e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   6.250000e-01    6.129032e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   6.250000e-01    6.451613e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   6.250000e-01    6.774194e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.334622e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.231371e-14
+   6.250000e-01    7.096774e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   6.250000e-01    7.419355e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.087975e-14    1.000000e-02    1.000000e+00    0.000000e+00   -7.984724e-14
+   6.250000e-01    7.741935e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   6.250000e-01    8.064516e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.782042e-14
+   6.250000e-01    8.387097e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   6.250000e-01    8.709677e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   6.250000e-01    9.032258e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   6.250000e-01    9.354839e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   6.250000e-01    9.677419e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   6.250000e-01    1.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e+00    0.000000e+00    6.057377e-14
+   1.250000e+00    0.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+00    3.225806e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -3.441691e-15    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+00    6.451613e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+00    9.677419e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00   -5.506706e-15
+   1.250000e+00    1.290323e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00    5.506706e-15
+   1.250000e+00    1.612903e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.032507e-14    1.000000e-02    1.000000e+00    0.000000e+00    1.101341e-14
+   1.250000e+00    1.935484e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.101341e-14
+   1.250000e+00    2.258065e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00   -5.506706e-15
+   1.250000e+00    2.580645e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00    5.506706e-15
+   1.250000e+00    2.903226e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   1.250000e+00    3.225806e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.376677e-14    1.000000e-02    1.000000e-00    0.000000e+00    1.376677e-14
+   1.250000e+00    3.548387e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   1.250000e+00    3.870968e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   1.250000e+00    4.193548e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   1.250000e+00    4.516129e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   1.250000e+00    4.838710e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -2.753353e-14
+   1.250000e+00    5.161290e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   1.250000e+00    5.483871e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.130030e-14    1.000000e-02    1.000000e-00    0.000000e+00    4.130030e-14
+   1.250000e+00    5.806452e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   1.250000e+00    6.129032e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   1.250000e+00    6.451613e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   1.250000e+00    6.774194e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.334622e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.231371e-14
+   1.250000e+00    7.096774e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   1.250000e+00    7.419355e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.087975e-14    1.000000e-02    1.000000e+00    0.000000e+00   -7.984724e-14
+   1.250000e+00    7.741935e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   1.250000e+00    8.064516e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.782042e-14
+   1.250000e+00    8.387097e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   1.250000e+00    8.709677e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   1.250000e+00    9.032258e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   1.250000e+00    9.354839e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   1.250000e+00    9.677419e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   1.250000e+00    1.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e+00    0.000000e+00    6.057377e-14
+   1.875000e+00    0.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   1.875000e+00    3.225806e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -3.441691e-15    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   1.875000e+00    6.451613e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   1.875000e+00    9.677419e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00   -5.506706e-15
+   1.875000e+00    1.290323e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00    5.506706e-15
+   1.875000e+00    1.612903e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.032507e-14    1.000000e-02    1.000000e+00    0.000000e+00    1.101341e-14
+   1.875000e+00    1.935484e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.101341e-14
+   1.875000e+00    2.258065e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00   -5.506706e-15
+   1.875000e+00    2.580645e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00    5.506706e-15
+   1.875000e+00    2.903226e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   1.875000e+00    3.225806e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.376677e-14    1.000000e-02    1.000000e-00    0.000000e+00    1.376677e-14
+   1.875000e+00    3.548387e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   1.875000e+00    3.870968e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   1.875000e+00    4.193548e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   1.875000e+00    4.516129e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   1.875000e+00    4.838710e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -2.753353e-14
+   1.875000e+00    5.161290e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   1.875000e+00    5.483871e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.130030e-14    1.000000e-02    1.000000e-00    0.000000e+00    4.130030e-14
+   1.875000e+00    5.806452e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   1.875000e+00    6.129032e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   1.875000e+00    6.451613e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   1.875000e+00    6.774194e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.334622e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.231371e-14
+   1.875000e+00    7.096774e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   1.875000e+00    7.419355e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.087975e-14    1.000000e-02    1.000000e+00    0.000000e+00   -7.984724e-14
+   1.875000e+00    7.741935e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   1.875000e+00    8.064516e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.782042e-14
+   1.875000e+00    8.387097e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   1.875000e+00    8.709677e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   1.875000e+00    9.032258e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   1.875000e+00    9.354839e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   1.875000e+00    9.677419e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   1.875000e+00    1.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e+00    0.000000e+00    6.057377e-14
+   2.500000e+00    0.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+00    3.225806e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -3.441691e-15    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+00    6.451613e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+00    9.677419e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00   -5.506706e-15
+   2.500000e+00    1.290323e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00    5.506706e-15
+   2.500000e+00    1.612903e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.032507e-14    1.000000e-02    1.000000e+00    0.000000e+00    1.101341e-14
+   2.500000e+00    1.935484e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.101341e-14
+   2.500000e+00    2.258065e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00   -5.506706e-15
+   2.500000e+00    2.580645e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00    5.506706e-15
+   2.500000e+00    2.903226e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   2.500000e+00    3.225806e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.376677e-14    1.000000e-02    1.000000e-00    0.000000e+00    1.376677e-14
+   2.500000e+00    3.548387e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   2.500000e+00    3.870968e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   2.500000e+00    4.193548e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   2.500000e+00    4.516129e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   2.500000e+00    4.838710e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -2.753353e-14
+   2.500000e+00    5.161290e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   2.500000e+00    5.483871e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.130030e-14    1.000000e-02    1.000000e-00    0.000000e+00    4.130030e-14
+   2.500000e+00    5.806452e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   2.500000e+00    6.129032e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   2.500000e+00    6.451613e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   2.500000e+00    6.774194e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.334622e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.231371e-14
+   2.500000e+00    7.096774e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   2.500000e+00    7.419355e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.087975e-14    1.000000e-02    1.000000e+00    0.000000e+00   -7.984724e-14
+   2.500000e+00    7.741935e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   2.500000e+00    8.064516e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.782042e-14
+   2.500000e+00    8.387097e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   2.500000e+00    8.709677e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   2.500000e+00    9.032258e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   2.500000e+00    9.354839e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   2.500000e+00    9.677419e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   2.500000e+00    1.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e+00    0.000000e+00    6.057377e-14
+   3.125000e+00    0.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   3.125000e+00    3.225806e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -3.441691e-15    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   3.125000e+00    6.451613e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   3.125000e+00    9.677419e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00   -5.506706e-15
+   3.125000e+00    1.290323e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00    5.506706e-15
+   3.125000e+00    1.612903e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.032507e-14    1.000000e-02    1.000000e+00    0.000000e+00    1.101341e-14
+   3.125000e+00    1.935484e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.101341e-14
+   3.125000e+00    2.258065e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00   -5.506706e-15
+   3.125000e+00    2.580645e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00    5.506706e-15
+   3.125000e+00    2.903226e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   3.125000e+00    3.225806e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.376677e-14    1.000000e-02    1.000000e-00    0.000000e+00    1.376677e-14
+   3.125000e+00    3.548387e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   3.125000e+00    3.870968e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   3.125000e+00    4.193548e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   3.125000e+00    4.516129e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   3.125000e+00    4.838710e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -2.753353e-14
+   3.125000e+00    5.161290e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   3.125000e+00    5.483871e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.130030e-14    1.000000e-02    1.000000e-00    0.000000e+00    4.130030e-14
+   3.125000e+00    5.806452e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   3.125000e+00    6.129032e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   3.125000e+00    6.451613e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   3.125000e+00    6.774194e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.334622e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.231371e-14
+   3.125000e+00    7.096774e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   3.125000e+00    7.419355e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.087975e-14    1.000000e-02    1.000000e+00    0.000000e+00   -7.984724e-14
+   3.125000e+00    7.741935e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   3.125000e+00    8.064516e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.782042e-14
+   3.125000e+00    8.387097e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   3.125000e+00    8.709677e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   3.125000e+00    9.032258e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   3.125000e+00    9.354839e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   3.125000e+00    9.677419e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   3.125000e+00    1.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e+00    0.000000e+00    6.057377e-14
+   3.750000e+00    0.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+00    3.225806e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -3.441691e-15    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+00    6.451613e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+00    9.677419e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00   -5.506706e-15
+   3.750000e+00    1.290323e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00    5.506706e-15
+   3.750000e+00    1.612903e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.032507e-14    1.000000e-02    1.000000e+00    0.000000e+00    1.101341e-14
+   3.750000e+00    1.935484e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.101341e-14
+   3.750000e+00    2.258065e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00   -5.506706e-15
+   3.750000e+00    2.580645e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00    5.506706e-15
+   3.750000e+00    2.903226e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   3.750000e+00    3.225806e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.376677e-14    1.000000e-02    1.000000e-00    0.000000e+00    1.376677e-14
+   3.750000e+00    3.548387e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   3.750000e+00    3.870968e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   3.750000e+00    4.193548e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   3.750000e+00    4.516129e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   3.750000e+00    4.838710e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -2.753353e-14
+   3.750000e+00    5.161290e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   3.750000e+00    5.483871e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.130030e-14    1.000000e-02    1.000000e-00    0.000000e+00    4.130030e-14
+   3.750000e+00    5.806452e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   3.750000e+00    6.129032e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   3.750000e+00    6.451613e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   3.750000e+00    6.774194e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.334622e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.231371e-14
+   3.750000e+00    7.096774e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   3.750000e+00    7.419355e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.087975e-14    1.000000e-02    1.000000e+00    0.000000e+00   -7.984724e-14
+   3.750000e+00    7.741935e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   3.750000e+00    8.064516e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.782042e-14
+   3.750000e+00    8.387097e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   3.750000e+00    8.709677e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   3.750000e+00    9.032258e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   3.750000e+00    9.354839e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   3.750000e+00    9.677419e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   3.750000e+00    1.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e+00    0.000000e+00    6.057377e-14
+   4.375000e+00    0.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   4.375000e+00    3.225806e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -3.441691e-15    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   4.375000e+00    6.451613e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   4.375000e+00    9.677419e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00   -5.506706e-15
+   4.375000e+00    1.290323e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00    5.506706e-15
+   4.375000e+00    1.612903e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.032507e-14    1.000000e-02    1.000000e+00    0.000000e+00    1.101341e-14
+   4.375000e+00    1.935484e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.101341e-14
+   4.375000e+00    2.258065e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00   -5.506706e-15
+   4.375000e+00    2.580645e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00    5.506706e-15
+   4.375000e+00    2.903226e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   4.375000e+00    3.225806e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.376677e-14    1.000000e-02    1.000000e-00    0.000000e+00    1.376677e-14
+   4.375000e+00    3.548387e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   4.375000e+00    3.870968e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   4.375000e+00    4.193548e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   4.375000e+00    4.516129e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   4.375000e+00    4.838710e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -2.753353e-14
+   4.375000e+00    5.161290e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   4.375000e+00    5.483871e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.130030e-14    1.000000e-02    1.000000e-00    0.000000e+00    4.130030e-14
+   4.375000e+00    5.806452e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   4.375000e+00    6.129032e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   4.375000e+00    6.451613e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   4.375000e+00    6.774194e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.334622e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.231371e-14
+   4.375000e+00    7.096774e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   4.375000e+00    7.419355e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.087975e-14    1.000000e-02    1.000000e+00    0.000000e+00   -7.984724e-14
+   4.375000e+00    7.741935e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   4.375000e+00    8.064516e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.782042e-14
+   4.375000e+00    8.387097e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   4.375000e+00    8.709677e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   4.375000e+00    9.032258e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   4.375000e+00    9.354839e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   4.375000e+00    9.677419e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   4.375000e+00    1.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e+00    0.000000e+00    6.057377e-14
+   5.000000e+00    0.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+00    3.225806e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -3.441691e-15    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+00    6.451613e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+00    9.677419e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00   -5.506706e-15
+   5.000000e+00    1.290323e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00    5.506706e-15
+   5.000000e+00    1.612903e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.032507e-14    1.000000e-02    1.000000e+00    0.000000e+00    1.101341e-14
+   5.000000e+00    1.935484e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.101341e-14
+   5.000000e+00    2.258065e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00   -5.506706e-15
+   5.000000e+00    2.580645e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00    5.506706e-15
+   5.000000e+00    2.903226e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   5.000000e+00    3.225806e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.376677e-14    1.000000e-02    1.000000e-00    0.000000e+00    1.376677e-14
+   5.000000e+00    3.548387e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   5.000000e+00    3.870968e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   5.000000e+00    4.193548e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   5.000000e+00    4.516129e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   5.000000e+00    4.838710e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -2.753353e-14
+   5.000000e+00    5.161290e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   5.000000e+00    5.483871e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.130030e-14    1.000000e-02    1.000000e-00    0.000000e+00    4.130030e-14
+   5.000000e+00    5.806452e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   5.000000e+00    6.129032e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   5.000000e+00    6.451613e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   5.000000e+00    6.774194e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.334622e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.231371e-14
+   5.000000e+00    7.096774e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   5.000000e+00    7.419355e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.087975e-14    1.000000e-02    1.000000e+00    0.000000e+00   -7.984724e-14
+   5.000000e+00    7.741935e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   5.000000e+00    8.064516e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.782042e-14
+   5.000000e+00    8.387097e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   5.000000e+00    8.709677e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   5.000000e+00    9.032258e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   5.000000e+00    9.354839e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   5.000000e+00    9.677419e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   5.000000e+00    1.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e+00    0.000000e+00    6.057377e-14
+   5.625000e+00    0.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   5.625000e+00    3.225806e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -3.441691e-15    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   5.625000e+00    6.451613e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   5.625000e+00    9.677419e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00   -5.506706e-15
+   5.625000e+00    1.290323e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00    5.506706e-15
+   5.625000e+00    1.612903e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.032507e-14    1.000000e-02    1.000000e+00    0.000000e+00    1.101341e-14
+   5.625000e+00    1.935484e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.101341e-14
+   5.625000e+00    2.258065e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00   -5.506706e-15
+   5.625000e+00    2.580645e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00    5.506706e-15
+   5.625000e+00    2.903226e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   5.625000e+00    3.225806e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.376677e-14    1.000000e-02    1.000000e-00    0.000000e+00    1.376677e-14
+   5.625000e+00    3.548387e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   5.625000e+00    3.870968e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   5.625000e+00    4.193548e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   5.625000e+00    4.516129e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   5.625000e+00    4.838710e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -2.753353e-14
+   5.625000e+00    5.161290e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   5.625000e+00    5.483871e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.130030e-14    1.000000e-02    1.000000e-00    0.000000e+00    4.130030e-14
+   5.625000e+00    5.806452e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   5.625000e+00    6.129032e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   5.625000e+00    6.451613e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   5.625000e+00    6.774194e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.334622e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.231371e-14
+   5.625000e+00    7.096774e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   5.625000e+00    7.419355e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.087975e-14    1.000000e-02    1.000000e+00    0.000000e+00   -7.984724e-14
+   5.625000e+00    7.741935e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   5.625000e+00    8.064516e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.782042e-14
+   5.625000e+00    8.387097e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   5.625000e+00    8.709677e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   5.625000e+00    9.032258e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   5.625000e+00    9.354839e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   5.625000e+00    9.677419e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   5.625000e+00    1.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e+00    0.000000e+00    6.057377e-14
+   6.250000e+00    0.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   6.250000e+00    3.225806e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -3.441691e-15    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   6.250000e+00    6.451613e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   6.250000e+00    9.677419e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00   -5.506706e-15
+   6.250000e+00    1.290323e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00    5.506706e-15
+   6.250000e+00    1.612903e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.032507e-14    1.000000e-02    1.000000e+00    0.000000e+00    1.101341e-14
+   6.250000e+00    1.935484e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.101341e-14
+   6.250000e+00    2.258065e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00   -5.506706e-15
+   6.250000e+00    2.580645e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00    5.506706e-15
+   6.250000e+00    2.903226e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   6.250000e+00    3.225806e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.376677e-14    1.000000e-02    1.000000e-00    0.000000e+00    1.376677e-14
+   6.250000e+00    3.548387e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   6.250000e+00    3.870968e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   6.250000e+00    4.193548e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   6.250000e+00    4.516129e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   6.250000e+00    4.838710e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -2.753353e-14
+   6.250000e+00    5.161290e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   6.250000e+00    5.483871e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.130030e-14    1.000000e-02    1.000000e-00    0.000000e+00    4.130030e-14
+   6.250000e+00    5.806452e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   6.250000e+00    6.129032e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   6.250000e+00    6.451613e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   6.250000e+00    6.774194e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.334622e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.231371e-14
+   6.250000e+00    7.096774e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   6.250000e+00    7.419355e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.087975e-14    1.000000e-02    1.000000e+00    0.000000e+00   -7.984724e-14
+   6.250000e+00    7.741935e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   6.250000e+00    8.064516e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.782042e-14
+   6.250000e+00    8.387097e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   6.250000e+00    8.709677e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   6.250000e+00    9.032258e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   6.250000e+00    9.354839e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   6.250000e+00    9.677419e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   6.250000e+00    1.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e+00    0.000000e+00    6.057377e-14
+   6.875000e+00    0.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   6.875000e+00    3.225806e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -3.441691e-15    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   6.875000e+00    6.451613e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   6.875000e+00    9.677419e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00   -5.506706e-15
+   6.875000e+00    1.290323e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00    5.506706e-15
+   6.875000e+00    1.612903e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.032507e-14    1.000000e-02    1.000000e+00    0.000000e+00    1.101341e-14
+   6.875000e+00    1.935484e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.101341e-14
+   6.875000e+00    2.258065e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00   -5.506706e-15
+   6.875000e+00    2.580645e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00    5.506706e-15
+   6.875000e+00    2.903226e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   6.875000e+00    3.225806e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.376677e-14    1.000000e-02    1.000000e-00    0.000000e+00    1.376677e-14
+   6.875000e+00    3.548387e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   6.875000e+00    3.870968e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   6.875000e+00    4.193548e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   6.875000e+00    4.516129e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   6.875000e+00    4.838710e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -2.753353e-14
+   6.875000e+00    5.161290e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   6.875000e+00    5.483871e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.130030e-14    1.000000e-02    1.000000e-00    0.000000e+00    4.130030e-14
+   6.875000e+00    5.806452e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   6.875000e+00    6.129032e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   6.875000e+00    6.451613e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   6.875000e+00    6.774194e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.334622e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.231371e-14
+   6.875000e+00    7.096774e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   6.875000e+00    7.419355e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.087975e-14    1.000000e-02    1.000000e+00    0.000000e+00   -7.984724e-14
+   6.875000e+00    7.741935e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   6.875000e+00    8.064516e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.782042e-14
+   6.875000e+00    8.387097e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   6.875000e+00    8.709677e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   6.875000e+00    9.032258e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   6.875000e+00    9.354839e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   6.875000e+00    9.677419e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   6.875000e+00    1.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e+00    0.000000e+00    6.057377e-14
+   7.500000e+00    0.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   7.500000e+00    3.225806e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -3.441691e-15    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   7.500000e+00    6.451613e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   7.500000e+00    9.677419e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00   -5.506706e-15
+   7.500000e+00    1.290323e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00    5.506706e-15
+   7.500000e+00    1.612903e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.032507e-14    1.000000e-02    1.000000e+00    0.000000e+00    1.101341e-14
+   7.500000e+00    1.935484e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.101341e-14
+   7.500000e+00    2.258065e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00   -5.506706e-15
+   7.500000e+00    2.580645e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00    5.506706e-15
+   7.500000e+00    2.903226e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   7.500000e+00    3.225806e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.376677e-14    1.000000e-02    1.000000e-00    0.000000e+00    1.376677e-14
+   7.500000e+00    3.548387e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   7.500000e+00    3.870968e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   7.500000e+00    4.193548e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   7.500000e+00    4.516129e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   7.500000e+00    4.838710e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -2.753353e-14
+   7.500000e+00    5.161290e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   7.500000e+00    5.483871e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.130030e-14    1.000000e-02    1.000000e-00    0.000000e+00    4.130030e-14
+   7.500000e+00    5.806452e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   7.500000e+00    6.129032e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   7.500000e+00    6.451613e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   7.500000e+00    6.774194e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.334622e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.231371e-14
+   7.500000e+00    7.096774e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   7.500000e+00    7.419355e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.087975e-14    1.000000e-02    1.000000e+00    0.000000e+00   -7.984724e-14
+   7.500000e+00    7.741935e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   7.500000e+00    8.064516e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.782042e-14
+   7.500000e+00    8.387097e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   7.500000e+00    8.709677e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   7.500000e+00    9.032258e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   7.500000e+00    9.354839e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   7.500000e+00    9.677419e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   7.500000e+00    1.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e+00    0.000000e+00    6.057377e-14
+   8.125000e+00    0.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   8.125000e+00    3.225806e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -3.441691e-15    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   8.125000e+00    6.451613e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   8.125000e+00    9.677419e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00   -5.506706e-15
+   8.125000e+00    1.290323e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00    5.506706e-15
+   8.125000e+00    1.612903e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.032507e-14    1.000000e-02    1.000000e+00    0.000000e+00    1.101341e-14
+   8.125000e+00    1.935484e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.101341e-14
+   8.125000e+00    2.258065e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00   -5.506706e-15
+   8.125000e+00    2.580645e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00    5.506706e-15
+   8.125000e+00    2.903226e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   8.125000e+00    3.225806e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.376677e-14    1.000000e-02    1.000000e-00    0.000000e+00    1.376677e-14
+   8.125000e+00    3.548387e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   8.125000e+00    3.870968e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   8.125000e+00    4.193548e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   8.125000e+00    4.516129e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   8.125000e+00    4.838710e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -2.753353e-14
+   8.125000e+00    5.161290e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   8.125000e+00    5.483871e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.130030e-14    1.000000e-02    1.000000e-00    0.000000e+00    4.130030e-14
+   8.125000e+00    5.806452e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   8.125000e+00    6.129032e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   8.125000e+00    6.451613e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   8.125000e+00    6.774194e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.334622e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.231371e-14
+   8.125000e+00    7.096774e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   8.125000e+00    7.419355e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.087975e-14    1.000000e-02    1.000000e+00    0.000000e+00   -7.984724e-14
+   8.125000e+00    7.741935e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   8.125000e+00    8.064516e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.782042e-14
+   8.125000e+00    8.387097e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   8.125000e+00    8.709677e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   8.125000e+00    9.032258e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   8.125000e+00    9.354839e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   8.125000e+00    9.677419e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   8.125000e+00    1.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e+00    0.000000e+00    6.057377e-14
+   8.750000e+00    0.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   8.750000e+00    3.225806e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -3.441691e-15    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   8.750000e+00    6.451613e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   8.750000e+00    9.677419e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00   -5.506706e-15
+   8.750000e+00    1.290323e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00    5.506706e-15
+   8.750000e+00    1.612903e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.032507e-14    1.000000e-02    1.000000e+00    0.000000e+00    1.101341e-14
+   8.750000e+00    1.935484e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.101341e-14
+   8.750000e+00    2.258065e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00   -5.506706e-15
+   8.750000e+00    2.580645e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00    5.506706e-15
+   8.750000e+00    2.903226e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   8.750000e+00    3.225806e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.376677e-14    1.000000e-02    1.000000e-00    0.000000e+00    1.376677e-14
+   8.750000e+00    3.548387e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   8.750000e+00    3.870968e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   8.750000e+00    4.193548e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   8.750000e+00    4.516129e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   8.750000e+00    4.838710e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -2.753353e-14
+   8.750000e+00    5.161290e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   8.750000e+00    5.483871e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.130030e-14    1.000000e-02    1.000000e-00    0.000000e+00    4.130030e-14
+   8.750000e+00    5.806452e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   8.750000e+00    6.129032e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   8.750000e+00    6.451613e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   8.750000e+00    6.774194e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.334622e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.231371e-14
+   8.750000e+00    7.096774e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   8.750000e+00    7.419355e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.087975e-14    1.000000e-02    1.000000e+00    0.000000e+00   -7.984724e-14
+   8.750000e+00    7.741935e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   8.750000e+00    8.064516e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.782042e-14
+   8.750000e+00    8.387097e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   8.750000e+00    8.709677e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   8.750000e+00    9.032258e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   8.750000e+00    9.354839e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   8.750000e+00    9.677419e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   8.750000e+00    1.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e+00    0.000000e+00    6.057377e-14
+   9.375000e+00    0.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   9.375000e+00    3.225806e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -3.441691e-15    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   9.375000e+00    6.451613e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   9.375000e+00    9.677419e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00   -5.506706e-15
+   9.375000e+00    1.290323e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00    5.506706e-15
+   9.375000e+00    1.612903e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.032507e-14    1.000000e-02    1.000000e+00    0.000000e+00    1.101341e-14
+   9.375000e+00    1.935484e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.101341e-14
+   9.375000e+00    2.258065e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00   -5.506706e-15
+   9.375000e+00    2.580645e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00    5.506706e-15
+   9.375000e+00    2.903226e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   9.375000e+00    3.225806e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.376677e-14    1.000000e-02    1.000000e-00    0.000000e+00    1.376677e-14
+   9.375000e+00    3.548387e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   9.375000e+00    3.870968e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   9.375000e+00    4.193548e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   9.375000e+00    4.516129e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   9.375000e+00    4.838710e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -2.753353e-14
+   9.375000e+00    5.161290e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   9.375000e+00    5.483871e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.130030e-14    1.000000e-02    1.000000e-00    0.000000e+00    4.130030e-14
+   9.375000e+00    5.806452e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   9.375000e+00    6.129032e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   9.375000e+00    6.451613e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   9.375000e+00    6.774194e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.334622e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.231371e-14
+   9.375000e+00    7.096774e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   9.375000e+00    7.419355e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.087975e-14    1.000000e-02    1.000000e+00    0.000000e+00   -7.984724e-14
+   9.375000e+00    7.741935e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   9.375000e+00    8.064516e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.782042e-14
+   9.375000e+00    8.387097e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   9.375000e+00    8.709677e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   9.375000e+00    9.032258e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   9.375000e+00    9.354839e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   9.375000e+00    9.677419e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   9.375000e+00    1.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e+00    0.000000e+00    6.057377e-14
+   1.000000e+01    0.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   1.000000e+01    3.225806e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -3.441691e-15    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   1.000000e+01    6.451613e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   1.000000e+01    9.677419e-02    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00   -5.506706e-15
+   1.000000e+01    1.290323e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00    5.506706e-15
+   1.000000e+01    1.612903e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.032507e-14    1.000000e-02    1.000000e+00    0.000000e+00    1.101341e-14
+   1.000000e+01    1.935484e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.101341e-14
+   1.000000e+01    2.258065e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    6.883383e-15    1.000000e-02    1.000000e-00    0.000000e+00   -5.506706e-15
+   1.000000e+01    2.580645e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -6.883383e-15    1.000000e-02    1.000000e+00    0.000000e+00    5.506706e-15
+   1.000000e+01    2.903226e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   1.000000e+01    3.225806e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -1.376677e-14    1.000000e-02    1.000000e-00    0.000000e+00    1.376677e-14
+   1.000000e+01    3.548387e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   1.000000e+01    3.870968e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   1.000000e+01    4.193548e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.376677e-14
+   1.000000e+01    4.516129e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    1.376677e-14    1.000000e-02    1.000000e+00    0.000000e+00   -1.652012e-14
+   1.000000e+01    4.838710e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -2.753353e-14
+   1.000000e+01    5.161290e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   1.000000e+01    5.483871e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -4.130030e-14    1.000000e-02    1.000000e-00    0.000000e+00    4.130030e-14
+   1.000000e+01    5.806452e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   1.000000e+01    6.129032e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   1.000000e+01    6.451613e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   1.000000e+01    6.774194e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.334622e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.231371e-14
+   1.000000e+01    7.096774e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   1.000000e+01    7.419355e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    8.087975e-14    1.000000e-02    1.000000e+00    0.000000e+00   -7.984724e-14
+   1.000000e+01    7.741935e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e-00    0.000000e+00   -3.028688e-14
+   1.000000e+01    8.064516e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e-00    0.000000e+00    5.782042e-14
+   1.000000e+01    8.387097e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e+00    0.000000e+00    0.000000e+00
+   1.000000e+01    8.709677e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   1.000000e+01    9.032258e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00    3.028688e-14
+   1.000000e+01    9.354839e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    2.753353e-14    1.000000e-02    1.000000e+00    0.000000e+00   -3.028688e-14
+   1.000000e+01    9.677419e-01    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e+00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00    0.000000e+00    1.000000e-02    1.000000e-00    0.000000e+00    0.000000e+00
+   1.000000e+01    1.000000e+00    1.000000e+01    0.000000e+00    0.000000e+00    1.000000e-00    0.000000e+00    0.000000e+00    0.000000e+00   0.000000e+00    0.000000e+00   -5.506706e-14    1.000000e-02    1.000000e+00    0.000000e+00    6.057377e-14
+   0.000000e+00    5.000000e+00    0.000000e+00    4.000000e-02
+   3.125000e-01    5.000000e+00    0.000000e+00    4.000000e-02
+   6.250000e-01    5.000000e+00    0.000000e+00    4.000000e-02
+   9.375000e-01    5.000000e+00    0.000000e+00    4.000000e-02
+   1.250000e+00    5.000000e+00    0.000000e+00    4.000000e-02
+   1.562500e+00    5.000000e+00    0.000000e+00    4.000000e-02
+   1.875000e+00    5.000000e+00    0.000000e+00    4.000000e-02
+   2.187500e+00    5.000000e+00    0.000000e+00    4.000000e-02
+   2.500000e+00    5.000000e+00    0.000000e+00    4.000000e-02
+   2.812500e+00    5.000000e+00    0.000000e+00    4.000000e-02
+   3.125000e+00    5.000000e+00    0.000000e+00    4.000000e-02
+   3.437500e+00    5.000000e+00    0.000000e+00    4.000000e-02
+   3.750000e+00    5.000000e+00    0.000000e+00    4.000000e-02
+   4.062500e+00    5.000000e+00    0.000000e+00    4.000000e-02
+   4.375000e+00    5.000000e+00    0.000000e+00    4.000000e-02
+   4.687500e+00    5.000000e+00    0.000000e+00    4.000000e-02
+   5.000000e+00    5.000000e+00    0.000000e+00    4.000000e-02
Index: /trunk/00FlowSolve_PL/PROJECTS/OIS_2D/grid_data.h
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/OIS_2D/grid_data.h	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/OIS_2D/grid_data.h	(revision 6)
@@ -0,0 +1,8 @@
+integer       :: nlevels,maxlevels
+parameter(nlevels=1,maxlevels=8)
+integer       :: grid_dimensions(0:maxlevels-1,3)
+
+! global grid dimensions   ! some restrictions, nz>=8 at all levels
+
+grid_file='../input/grid_coords'
+data grid_dimensions(0,1:3) /17,17,32/
Index: /trunk/00FlowSolve_PL/PROJECTS/OIS_2D/immersed_bdry_locations
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/OIS_2D/immersed_bdry_locations	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/OIS_2D/immersed_bdry_locations	(revision 6)
@@ -0,0 +1,1 @@
+   FILE INTENTIONALLY LEFT BLANK
Index: /trunk/00FlowSolve_PL/PROJECTS/OIS_2D/initialize_user.f90
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/OIS_2D/initialize_user.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/OIS_2D/initialize_user.f90	(revision 6)
@@ -0,0 +1,93 @@
+subroutine initialize_user
+  !=======================================================
+#define DEBUG_LEVEL 3
+
+  use mpi_parameters      , only: comm,myid
+  use dependent_variables
+  use grid_info           , only: Grid 
+  use counters_flags_etc  , only: user_subs_flag,restart_flag,ierr 
+  use dimensional_scales  , only: L_scale,U_scale,s1_scale,s2_scale
+  use user_parameters     , only: Km_of_z,Kt_of_z 
+  use user_routines       , only: user_ics 
+
+  implicit none
+
+  include '../input/problem_size.h'
+  include 'mpif.h'
+
+  integer    :: i,j,k,ifield,num_champ
+  real       :: alpha1,alpha2,alpha3,alpha4,Lx,Ly,Lz
+  real,dimension(:,:,:,:),allocatable   :: vals
+
+
+  !=======================================================
+
+  if( user_subs_flag == 'no' ) return
+
+#if DEBUG_LEVEL >= 1
+  if( myid==0) then
+     write(0,*) ' '
+     write(0,*) 'hello world from initialize_user'
+  endif
+#endif
+
+
+
+  !========================================================
+  !ENABLE VERTICALLY VARYING EDDY VISCOSITY AND DIFFUSIVITY
+  !
+  allocate( Km_of_z(locnz), Kt_of_z(locnz) )
+
+  call set_diffusion
+
+  !========================================================
+
+
+
+  if( restart_flag == 'yes' ) return
+
+  ! we can also specify any non-zero initial conditions
+
+
+  num_champ=3+num_scalars
+
+  allocate ( vals(nx,ny,locnz,num_champ) )
+
+  !! appel de user_ics pour definir la condition initiale
+  do ifield=1,num_champ
+     call user_ics( Grid(0)%x(:,1)*L_scale , Grid(0)%y(:)*L_scale , Grid(0)%z(1,:)*L_scale, &
+                    ifield , nx , ny , locnz, vals(:,:,:,ifield) ) 
+  enddo
+
+  !! Orientation de la grille pour U & W, affectation des champs vals(:,:,:,ifield)
+  do k=1,locnz                                                                                           
+     do i=1,nx
+        alpha1=Grid(0)%x_xi(i,k)
+        alpha2=Grid(0)%x_zeta(i,k)
+        alpha3=Grid(0)%z_xi(i,k)
+        alpha4=Grid(0)%z_zeta(i,k)
+        if ( i == 10 .and. k == 10 ) print*,'alpha1-4=',alpha1,alpha2,alpha3,alpha4
+        do j=1,ny
+           U(i,j,k)=1./( alpha1*alpha4-alpha3*alpha2 ) * (  alpha4*vals(i,j,k,1) - alpha2*vals(i,j,k,3) )
+           W(i,j,k)=1./( alpha1*alpha4-alpha3*alpha2 ) * ( -alpha3*vals(i,j,k,1) + alpha1*vals(i,j,k,3) )
+        enddo
+     enddo
+  enddo
+  V = vals(:,:,:,2)
+  s1= vals(:,:,:,4)
+  if ( num_scalars > 1 ) s2 = vals(:,:,:,5)
+
+  !! adimensionnement
+  U=U/U_scale
+  V=V/U_scale
+  W=W/U_scale
+  s1=s1/s1_scale
+  s2=s2/s2_scale
+
+  !! affichage des min/max a l'ecran
+  call maxim
+
+
+  deallocate( vals )
+
+end subroutine initialize_user
Index: /trunk/00FlowSolve_PL/PROJECTS/OIS_2D/params.h
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/OIS_2D/params.h	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/OIS_2D/params.h	(revision 6)
@@ -0,0 +1,132 @@
+
+!*****************************************************************************
+immersed_bdry_flag='no'        ! yes or no
+closure_flag='DNS'             ! DNS or LES
+psolve_scheme='total_pressure' ! change_in_pressure,total_pressure
+
+restart_flag='no'              ! 'yes' to start from a save/restart file
+save_file=00000                ! ignored if 'no' above
+user_ics_flag='yes'            ! yes invokes subroutine user_ics, sets up ics
+ics_flag='homogeneous'         ! homogeneous,user
+
+user_rhs_flag='no'             ! yes invokes execution of user_rhs.F90
+
+user_bcs_flag='no'             ! yes invokes execution of user_bcs.F90
+steady_BCS='yes'               ! yes : determines whether set_BCs is re-evaluated each time step
+	                       !       our F_of_t is applied in apply_BCs.f90, so treat as 'steady' here
+!*****************************************************************************
+
+
+!*****************************************************************************
+ts_profil='linear'             ! 'interp'/'linear'/'constant'  if 'no' POMME data
+pomme_data_flag='no'           ! 'yes' lecture des champs POMME [T,S] 
+pomme_filename='../input/pomme_ics_linear_Tcte_Scte_1x1x128.ascii'
+dTdz=4*1.4133829e-3
+alpha_rho= -3.105172e-4 / dTdz ! ambiet_density_gradient=-3.105172e-4 souhaité
+                               ! rho = rho0 + alpha_rho * T
+!*****************************************************************************
+
+
+!************************     Stress parameters     ***************************
+Patch_Radius=100.e3               !! [m]
+Patch_Decay_Scale=50.e3           !! [m]
+delta=1./(Patch_Decay_Scale**2)
+tau_0=0.                          !! [kg/(ms2)]
+!******************************************************************************
+
+
+!****************  DIMENSIONAL SCALES ****************************************
+pi=acos(-1.0)                          ! definition of pi
+g =9.81                                ! gravitational acceleration [m/s2]
+f =2 * (2*pi/(24*3600)) * sin(pi/4)    ! [rad/s] Ekman layer scale: delta=sqrt(2nu/f)
+L_scale = 100.                         ! length scale to be used in nondimensionalization [m]
+U_scale = 0.10                         ! characteristic velocity scale [m/s]
+rho0 = 1000.0                          ! characteristic fluid density [kg/m3]
+delta_rho=2.50                         ! characteristic density contrast [kg/m3]  (25)
+nu = 1.e-6           !1.e-6            ! eddy viscosity [m2/s]
+kappa1 = nu          !nu/7.            ! scalar 1 diffusivity [m2/s]    (Temp)
+kappa2 = nu          !nu/7.            ! scalar 2 diffusivity [m2/s]    (Salinity)
+kappa = nu           !nu/7.
+Kh = 0.02            !Kh = 0.02
+s1_scale=10.          !10.              ! characteristic s1 contrast     (Temp, deg C)
+s2_scale=30.          !30.              ! characteristic s2 contrast     (Salinity, psu)
+HV_RATIO=1.                            ! horizontal/vertical viscosity ratio  (50)
+HV_METHOD = 2
+!*******************************************************************************
+
+
+!************     Derived scales, DO NOT ALTER. *******************************
+t_scale = L_scale/U_scale    
+DEL = (delta_rho)/L_scale  
+density_scale=DEL*L_scale
+pressure_scale=rho0*U_scale**2
+Nsquared = (g/rho0)*DEL     
+N0 = sqrt(Nsquared)    
+if(N0 /= 0 ) then; BV_per = 2.*pi/N0; else; BV_per=-1.e32; endif
+if(f  /= 0 ) then; inertial_per = 2.*pi/f; else; inertial_per=-1.e32; endif
+!*******************************************************************************
+
+
+!*******************  TIME STEP / OUTPUT ***************************************
+dt = (36./t_scale)         ! dimensionless time step
+t_start =  0./t_scale      ! dimensionless starting time
+nsteps = 0!3*489             ! number of timesteps to integrate over
+i_full_fields = 20         ! # of steps between output of full 3d fields
+i_restart = 50             ! # of steps between output of save/restart files
+i_filter = 1               ! # of steps between compact filtering calls
+i_stat = 90                ! # of steps between executions of energetics
+i_mean_pressure=1          ! # of steps between removal of mean pressure
+!*****************************************************************************
+
+
+!*************  ALLOCATION TABLEAUX BOUNDARY CONDITIONS  *********************
+  allocate ( boundary_type1(ny,locnz),boundary_type2(ny,locnz) )
+  allocate ( boundary_type3(nx,locnz),boundary_type4(nx,locnz) )
+  allocate ( boundary_type5(nx,ny),boundary_type6(nx,ny) )
+  allocate ( BC_pressure1(ny,locnz),BC_pressure2(ny,locnz) )
+  allocate ( BC_pressure3(nx,locnz),BC_pressure4(nx,locnz) )
+  allocate ( BC_pressure5(nx,ny),BC_pressure6(nx,ny) )
+  allocate ( BC_vel1(ny,locnz),BC_vel2(ny,locnz) )
+  allocate ( BC_vel3(nx,locnz),BC_vel4(nx,locnz) )
+  allocate ( BC_vel5(nx,ny),BC_vel6(nx,ny) )
+  allocate ( BC_scalar1(ny,locnz,num_scalars),BC_scalar2(ny,locnz,num_scalars) )
+  allocate ( BC_scalar3(nx,locnz,num_scalars),BC_scalar4(nx,locnz,num_scalars) )
+  allocate ( BC_scalar5(nx,ny,num_scalars),BC_scalar6(nx,ny,num_scalars) )
+!*****************************************************************************
+
+
+!***********************   BOUNDARY TYPE  ************************************
+! periodic in X
+boundary_type1(:,:)='periodic'                   ! solid, permeable or periodic
+BC_pressure1(:,:)  ='N/A'                        ! Neumann, periodic or none
+BC_vel1(:,:)       ='N/A'                        ! specified_stress/gradient or N/A
+BC_scalar1(:,:,:)  ='N/A'                        ! ""
+
+boundary_type2(:,:)='periodic'                   ! solid, permeable or periodic
+BC_pressure2(:,:)  ='N/A'                        ! Neumann, periodic or none
+BC_vel2(:,:)       ='N/A'                        ! specified_stress/gradient or N/A
+BC_scalar2(:,:,:)  ='N/A'                        ! ""
+
+! periodic in Y
+boundary_type3(:,:)='periodic'                   ! solid, permeable or periodic
+BC_pressure3(:,:)  ='n/a'                        ! Neumann, periodic or none
+BC_vel3(:,:)       ='n/a'                        ! specified_stress/gradient or N/A
+BC_scalar3(:,:,:)   ='n/a'                        ! ""
+
+boundary_type4(:,:)='periodic '                  ! solid, permeable or periodic
+BC_pressure4(:,:)  ='n/a'                        ! Neumann, periodic or none
+BC_vel4(:,:)       ='n/a'                        ! specified_stress/gradient or N/A
+BC_scalar4(:,:,:)  ='n/a'                        ! ""
+
+! solid, free-slip, adiabatic bottom boundary
+boundary_type5(:,:)='solid'                      ! solid, permeable or periodic
+BC_pressure5(:,:)  ='Neumann'                    ! Neumann, periodic or none
+BC_vel5(:,:)       ='specified_stress'           ! 
+BC_scalar5(:,:,:)  ='specified_gradient'         ! 
+
+! solid specified stress, adiabatic upper surface 
+boundary_type6(:,:)='solid'                      ! solid, permeable or periodic
+BC_pressure6(:,:)  ='Neumann'                    ! Neumann, periodic or none
+BC_vel6(:,:)       ='specified_stress'           ! specified dv/dz as function of x 
+BC_scalar6(:,:,:)  ='specified_gradient'         ! 
+!***************************************************************************
Index: /trunk/00FlowSolve_PL/PROJECTS/OIS_2D/problem_size.h
===================================================================
--- /trunk/00FlowSolve_PL/PROJECTS/OIS_2D/problem_size.h	(revision 6)
+++ /trunk/00FlowSolve_PL/PROJECTS/OIS_2D/problem_size.h	(revision 6)
@@ -0,0 +1,23 @@
+! header file containing problem size information
+        integer           ::  nx,ny,nz      ! basic problem dimensions
+        integer           ::  num_scalars   ! can be 1 or 2 currently
+        integer           ::  numprocs,locnz
+        integer           ::  bytesperword,numbufs,numbytes
+        integer           ::  AB_order      ! # of time levels required
+        real, allocatable :: mpi_buffer_space(:)
+
+        parameter(nx=1+16,ny=1+16,nz=32)
+        parameter(num_scalars=2)            ! 1-->Temp, 2-->Salinity
+        parameter(numprocs=01)              ! must match specification in machfile
+        parameter(locnz=nz/numprocs)   
+        parameter(AB_order=3)               ! {2,3,4}
+        parameter(bytesperword=8,numbufs=2)
+
+!     mpirun command must actually use numprocs processors
+!     i.e. mpirun -np 4  where 4 matches numprocs parameter
+!
+!     Choose nz such that locnz is an integer. The partitioning
+!     logic requires this condition load balancing is optimized.
+!
+!     nx/numprocs must be an integer in the data partitioning scheme
+
Index: /trunk/00FlowSolve_PL/README
===================================================================
--- /trunk/00FlowSolve_PL/README	(revision 6)
+++ /trunk/00FlowSolve_PL/README	(revision 6)
@@ -0,0 +1,3 @@
+
+
+work in progress ...
Index: /trunk/00FlowSolve_PL/SRC/EOS.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/EOS.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/EOS.f90	(revision 6)
@@ -0,0 +1,154 @@
+subroutine equation_of_state
+
+! routine to use the equation of state from
+! MILLERO et.al. (1980) DEEP-SEA RES.
+! to calculate the dimensionless perturbation density pd(x,y,z) 
+! given the scalar values s1(x,y,z), s2(x,y,z), s1_bar(x,z) and s2_bar(x,z).
+! The "perturbation" density is defined relative to the ambient state
+! rho_bar(x,z) determined by s1_bar and s2_bar. As written, we interpret
+! the scalar s1 to be temparature and the scalar s2 to be salinity.
+! Salinity in g/kg or equivilently ppt (typical value ~ 35/1000)
+
+use mpi_parameters
+use grid_info
+use dependent_variables
+use dimensional_scales
+use counters_flags_etc
+implicit none
+include '../input/problem_size.h'
+
+double precision :: rho,xx,z_surf   ! rho is external function
+  real, dimension(locnz)            ::  zz,rh
+
+! local variables
+! S,T,P all DOUBLE precision arguments of function rho:  P in MPa, T in deg C, S in ppt
+double precision, allocatable         :: Temp(:,:),Salinity(:,:),P_Mpa(:,:),density(:,:)
+allocate( Temp(nx,locnz),Salinity(nx,locnz),P_Mpa(nx,locnz),density(nx,locnz) )
+
+!   pressure as function of depth, ignoring density perturbations
+!   formula assumes surface height z is equal to L_scale
+
+ z_surf=L_scale  ! surface height in [m]   ! top processor should broadcast value
+!!! P_Mpa(:,:) = g*rho0*( z_surf - Grid(0)%z(:,:)*L_scale )  ! [kg/ms^2=Pa]
+!!! P_Mpa(:,:) = P_Mpa/1.e6                                  ! Mpa
+ P_Mpa(:,:) = 0.                                  ! Mpa
+
+do j=1,ny
+
+!declare interpretation of s1 and s2
+ Temp(:,:) = (s1_bar(:,:) + s1(:,j,:)) - s1_scale        ! dimensional quantity: total Temp.
+ Salinity(:,:) = (s2_bar(:,:) + s2(:,j,:))*s2_scale    ! dimensional quantity: total Salinity
+ 
+  do k=1,locnz
+   do i=1,nx
+    density(i,k)=rho( Salinity(i,k),Temp(i,k),P_Mpa(i,k) ) ! total density [kg/m3]
+    density(i,k) = (density(i,k)-rho0)/density_scale ! dimensionless "total"(rel. to rho0) density in j plane
+   enddo
+  enddo
+
+!If not yet initialized, calculate rho_bar, otherwise its available via "dependent_variables" 
+ if( rho_bar(1,1) == -999.9 ) then     
+  Temp(:,:) = s1_bar(:,:) - s1_scale                 ! dimensional background Temp
+  Salinity(:,:) = s2_bar(:,:)*s2_scale             ! dimensional background Salinity
+
+  do k=1,locnz
+   do i=1,nx
+    xx=rho( Salinity(i,k),Temp(i,k),P_Mpa(i,k) )
+    rho_bar(i,k)=(xx-rho0)/density_scale           ! dimensionless ambient profile, rel. to rho0
+   enddo
+  rh(k) = rho_bar(1,k)*density_scale + rho0
+  zz(k) = Grid(0)%z(1,k)*L_scale
+  enddo
+!!!      write(0,'(/A8,I2.2,2F20.5/)') (('DENSPROF',myid,zz(k),rh(k)),k=1,locnz)
+ endif
+       
+
+!store dimensionless values of perturbation densityin jth plane of pd
+  do k=1,locnz
+   do i=1,nx
+     pd(i,j,k) = density(i,k)  - rho_bar(i,k)
+   enddo
+  enddo
+
+enddo  ! end loop over j
+
+
+deallocate( Temp,Salinity,density,P_Mpa )
+end subroutine equation_of_state
+
+
+!	"rho.f"
+
+!	Parameter	:	equation of state
+!	Source		:	MILLERO et.al. (1980) DEEP-SEA RES.
+!				Vol 27A, pp 255-264
+!	Units		:	Kg / m**3
+!	Input		:	s (concentration units), t (deg C), p (MPa)
+!	Range		:	s (0 to 0.040), t (-2 to 40), p (MPa)
+!	Ck value	:	K (0, 0, 100)      = 2.297721e4
+!				K (0.035, 0, 100)  = 2.499200e4
+!				K (0, 25, 100)     = 2.54051e4
+!				K (0.035, 25, 100) = 2.710895e4
+!	Coded		:	Ngoc Dang, July 1982
+	
+        double precision function rho (s, t, p)
+
+	double precision s, t, p
+	double precision a, b, c, d, e, k, t1, t2, t3, t4, ta, tb
+	double precision k0, k0w, alpha0, alpha, rho0, aw, bw
+
+      if(s .lt. 0.) write(0,*) 's,t,p = ',s,t,p
+!  convert input units
+
+	s = 1000.0d0 * s
+	p = 10.0d0 * p
+
+!  compute alpha0 = alpha (s, t, 0)
+
+	t1 = 9.99841594d-1 + t * (6.793952d-5 + t * (-9.095290d-6 + t *   &
+           (1.001685d-7 + t * (-1.120083d-9 + t * 6.536332d-12))))
+	t2 = 8.25917d-4 + t * (-4.4490d-6 + t * (1.0485d-7 + t *      &
+           (-1.258d-9 + t * 3.315d-12)))
+	t3 = -6.33761d-6 + t * (2.8441d-7 + t * (-1.6871d-8 + t *     &
+      	     2.83258d-10))
+	t4 = 5.4705d-7 + t * (-1.97975d-8 + t * (1.6641d-9 - t *      &
+           3.1203d-11))
+	rho0 = t1 + t2 * s + t3 * s**(1.5) + t4 * s**2
+	alpha0 = 1.0d0 / rho0
+
+!  compute the pressure coefficient
+
+!	the first term
+	k0w = 1.965221d4 + t * (1.484206d2 + t * (-2.327105d0 + t *     &
+            (1.360477d-2 - t * 5.155288d-5)))
+	ta = 5.46746d1 + t * (-6.03459d-1 + t * (1.09987d-2 - t *       &
+           6.167d-5))
+	tb = 7.944d-2 + t * (1.6483d-2 - t * 5.3009d-4)
+	k0 = k0w + ta * s + tb * s**(1.5)
+
+!	the second term
+	aw = 3.239908d0 + t * (1.43713d-3 + t * (1.16092d-4 - t *       &
+          5.77905d-7))
+	c = 2.2838d-3 + t * (-1.0981d-5 - t * 1.6078d-6)
+	d = 1.9107d-4
+	a = aw + c * s + d * s**(1.5)
+
+!	the third term
+	bw = 8.50935d-5 + t * (-6.12293d-6 + t * 5.2787d-8)
+	e = -9.9348d-7 + t * (2.0816d-8 + t * 9.1697d-10)
+	b = bw + e * s
+
+	k = k0 + a * p + b * p**2
+
+!  compute density
+	alpha = alpha0 * (1.0d0 - p / k)
+	rho = 1.0d0 / alpha
+
+!  convert to kg / m**3
+	rho = 1000.0d0 * rho
+	s = s / 1000.0d0
+	p = p / 10.0d0
+
+	return
+
+	end
Index: /trunk/00FlowSolve_PL/SRC/MPI_Time.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/MPI_Time.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/MPI_Time.f90	(revision 6)
@@ -0,0 +1,253 @@
+!************************************************************************
+!                                                                       !
+!   Module : MPI_Times           (Version : 3.4)                        !
+!                                                                       !
+!   Goal   : Measure and print on stdout CPU and Elapsed user times     !
+!            and the ratio CPU/Elapsed of MPI programs.                 !
+!                                                                       !
+!   Usage  : Insert a "USE MPI_TIMES" instruction inside each MPI       !
+!            Fortran program unit to instrument, then make calls to     !
+!            the MPI_TIME subroutine as shown in the example below :    !
+!                                                                       !
+!           PROGRAM foo                                                 !
+!             USE MPI_TIMES                                             !
+!             ...                                                       !
+!             CALL MPI_INIT(ierr)                                       !
+!                                                                       !
+!             !... Set elapsed and CPU user times                       !
+!             CALL MPI_TIME(0)                                          !
+!             ...                                                       !
+!             ... Instruction block to instrument ...                   !
+!             ...                                                       !
+!             !... Measure and print elapsed and CPU user times         !
+!             CALL MPI_TIME(1)                                          !
+!                                                                       !
+!             CALL MPI_FINALIZE(ierr)                                   !
+!           END PROGRAM foo                                             !
+!                                                                       !
+!  Notes   : 1) Standard Fortran 95 compiler has to be used to compile  !
+!               MPI_TIMES module.                                       !
+!                                                                       !
+!            2) MPI_TIME subroutine is collective over all processes    !
+!               of MPI_COMM_WORLD communicator.                         !
+!                                                                       !
+!            3) On some machines, default CPU user time may also        !
+!               include MPI wait times on communication to complete.    !
+!                                                                       !
+!            4) If Te and Tc respectively denotes the elapsed and CPU   !
+!               user times, then the ratio R=Tc/Te > 0 may lead to      !
+!               different interpretations depending on R<1 or R=1       !
+!               or R>1.                                                 !
+!                                                                       !
+!               a) If R<1, then wait time on communications and/or      !
+!                  system load could be the reason of such performance. !
+!                                                                       !
+!               b) If R is close to 1 and no hybrid parallelization     !
+!                  (e.g. MPI + OpenMP) is implemented, then wait time   !
+!                  on communications and/or system load are far to be   !
+!                  considered unless point 3) and then, one can assume  !
+!                  that 99% of the time, processes are busy performing  !
+!                  useful computations on dedicated processors.         !
+!                                                                       !
+!               c) If R>1, then process might has been multi-threaded   !
+!                  during execution as what would happen in hybrid      !
+!                  parallelization (e.g. MPI + OpenMP) on cluster       !
+!                  of SMP nodes. In such case, R may reflect the speed  !
+!                  up of the process.                                   !
+!                                                                       !
+!            5) On IBM SP machine, do not compile MPI_TIMES module      !
+!               using "-qrealsize=8" switch. This will transform        !
+!               MPI_WTIME function type from 8 to 16 bytes floating     !
+!               point precision.                                        !
+!                                                                       !
+!            6) No special switch is needed to compile this file.       !
+!               The following should be sufficient on many platforms:   !
+!               f90 -c -Ipath_to_MPI_header_file MPI_Time.f90           !
+!                                                                       !
+!   Output : At normal termination of the MPI program, process of       !
+!            rank 0 prints on stdout elapsed time, cpu time and ratio   !
+!            cpu/elapsed of all MPI_COMM_WORLD processes.               !
+!            The following is an output example from an execution       !
+!            with 4 processes:                                          !
+!                                                                       !
+!............                                                           !
+!  (C) January 2003, CNRS/IDRIS, FRANCE.                                !
+!  MPI_Time (release 3.4) summary report:                               !
+!                                                                       !
+!  Process Rank | Elapsed Time (s) | CPU Time (s) | Ratio CPU/Elapsed   !
+!  -------------|------------------|--------------|------------------   !
+!     0         |     427.098      |     270.393  |      0.633          !
+!     1         |     427.099      |     279.818  |      0.655          !
+!     2         |     427.099      |     276.064  |      0.646          !
+!     3         |     427.182      |     271.001  |      0.634          !
+!  -------------|------------------|--------------|------------------   !
+!  Total        |    1708.477      |    1097.275  |      2.569          !
+!  -------------|------------------|--------------|------------------   !
+!  Minimum      |     427.098      |     270.393  |      0.633          !
+!  -------------|------------------|--------------|------------------   !
+!  Maximum      |     427.182      |     279.818  |      0.655          !
+!  -------------|------------------|--------------|------------------   !
+!  Average      |     427.119      |     274.319  |      0.642          !
+!  -------------|------------------|--------------|------------------   !
+!                                                                       !
+!  MPI_Time started on 13/11/2002 at 16:54:59 MET +01:00 from GMT       !
+!  MPI_Time   ended on 13/11/2002 at 17:02:06 MET +01:00 from GMT       !
+!............                                                           !
+!                                                                       !
+!   Author : Jalel Chergui ; E-mail: Jalel.Chergui@idris.fr             !
+!                                                                       !
+! Permission is garanted to copy and distribute this file or modified   !
+! versions of this file for no fee, provided the copyright notice and   !
+! this permission notice are preserved on all copies.                   !
+!                                                                       !
+! Copyright (C) January 2003, CNRS/IDRIS, FRANCE.                       !
+!************************************************************************
+
+MODULE MPI_TIMES
+  IMPLICIT NONE
+  PRIVATE
+
+  !... Shared variables
+  INTEGER, PARAMETER              :: p = SELECTED_REAL_KIND(12)
+  REAL(kind=p)                    :: Eoverhead, Coverhead
+  REAL(kind=p), DIMENSION(2)      :: Etime, Ctime
+  INTEGER, DIMENSION(8)           :: values
+  CHARACTER(LEN=8), DIMENSION(2)  :: date
+  CHARACTER(LEN=10), DIMENSION(2) :: time
+  CHARACTER(LEN=5)                :: zone
+
+  PUBLIC :: MPI_Time
+
+  CONTAINS
+
+  SUBROUTINE MPI_Time(flag)
+    IMPLICIT NONE
+
+    !... MPI Header files
+    INCLUDE "mpif.h"
+
+    !... Input dummy parameter
+    INTEGER, INTENT(IN) :: flag
+
+    !... Local variables
+    INTEGER                                 :: rank, nb_procs, i, code
+    INTEGER, ALLOCATABLE, DIMENSION(:)      :: All_Rank
+    REAL(KIND=p), ALLOCATABLE, DIMENSION(:) :: All_Etime, All_Ctime, All_Ratio
+    REAL(KIND=p)                            :: Total_Etime,Total_Ctime,Total_Ratio,&
+                                               Max_Etime, Max_Ctime, Max_Ratio, &
+                                               Min_Etime, Min_Ctime, Min_Ratio, &
+                                               Avg_Etime, Avg_Ctime, Avg_Ratio, &
+                                               dummy
+    CHARACTER(LEN=128), dimension(8) :: lignes
+    CHARACTER(LEN=128)               :: hline, start_date, final_date
+    CHARACTER(LEN=2048)              :: fmt
+
+    SELECT CASE(flag)
+      CASE(0)
+
+        !... Compute clock overhead
+        Eoverhead = MPI_WTIME()
+        Eoverhead = MPI_WTIME() - Eoverhead
+        CALL CPU_TIME(dummy)
+        CALL CPU_TIME(Coverhead)
+        if (dummy < 0.0_p) &
+          WRITE(0,*) "Warning, MPI_TIME: CPU user time is not available on this machine."
+        Coverhead = Coverhead - dummy
+        CALL MPI_COMM_RANK(MPI_COMM_WORLD, rank, code)
+        !... Start of timings on "date & time"
+        IF ( rank == 0 ) &
+           CALL DATE_AND_TIME(date(1),time(1),zone,values)
+        !... Start elapsed and CPU time counters
+        Etime(1) = MPI_WTIME()
+        CALL CPU_TIME(Ctime(1))
+
+      CASE(1)
+        !... Final CPU and elapsed times
+        CALL CPU_TIME(Ctime(2))
+        Etime(2) = MPI_WTIME() - Etime(1) - Eoverhead - Coverhead
+        Ctime(2) = Ctime(2) - Ctime(1) - Coverhead
+        !... Gather all times
+        CALL MPI_COMM_RANK(MPI_COMM_WORLD, rank, code)
+        CALL MPI_COMM_SIZE(MPI_COMM_WORLD, nb_procs, code)
+        IF ( rank == 0) ALLOCATE(All_Etime(nb_procs), &
+                                 All_Ctime(nb_procs), &
+                                 All_Ratio(nb_procs), &
+                                 All_Rank(nb_procs) )
+        CALL MPI_GATHER(Etime(2), 1, MPI_DOUBLE_PRECISION,  &
+                        All_Etime, 1, MPI_DOUBLE_PRECISION, &
+                        0, MPI_COMM_WORLD, code)
+        CALL MPI_GATHER(Ctime(2), 1, MPI_DOUBLE_PRECISION,  &
+                        All_Ctime, 1, MPI_DOUBLE_PRECISION, &
+                        0, MPI_COMM_WORLD, code)
+        IF ( rank == 0) THEN
+          All_Rank(:) = (/ (i,i=0,nb_procs-1) /)
+
+          !... Compute elapse user time
+          Total_Etime = SUM(All_Etime(:))
+          Avg_Etime   = Total_Etime/REAL(nb_procs,KIND=p)
+          Max_Etime   = MAXVAL(All_Etime(:))
+          Min_Etime   = MINVAL(All_Etime(:))
+          IF( Min_Etime <= 0.0_p ) THEN
+            WRITE(0,*) "Warning, MPI_TIME: Measured elapsed user time seems to be too short"
+            WRITE(0,*) "compared to the clock precision. Timings could be erroneous."
+          END IF
+
+          !... Compute CPU user time
+          Total_Ctime = SUM(All_Ctime(:))
+          Avg_Ctime   = Total_Ctime/REAL(nb_procs,KIND=p)
+          Max_Ctime   = MAXVAL(All_Ctime(:))
+          Min_Ctime   = MINVAL(All_Ctime(:))
+          IF( Min_Ctime <= 0.0_p ) THEN
+            WRITE(0,*) "Warning, MPI_TIME: Measured CPU user time seems to be too short"
+            WRITE(0,*) "compared to the clock precision. Timings could be erroneous."
+          END IF
+
+          !... Compute cpu/elapsed ratio
+          All_Ratio(:) = All_Ctime(:) / All_Etime(:)
+          Total_Ratio  = SUM(All_Ratio(:))
+          Avg_Ratio    = Total_Ratio/REAL(nb_procs,KIND=p)
+          Max_Ratio    = MAXVAL(All_Ratio(:))
+          Min_Ratio    = MINVAL(All_Ratio(:))
+
+          !... End of timings on "date & time"
+          CALL DATE_AND_TIME(date(2),time(2),zone,values)
+
+          !... Output Format
+          hline    ='10X,13("-"),"|",18("-"),"|",14("-"),"|",18("-"),/,'
+          lignes(1)='(//,10X,"(C) January 2003, CNRS/IDRIS, FRANCE.",/,'
+          lignes(2)='10X,"MPI_Time (release 3.4) summary report:",//,'
+          lignes(3)='10X,"Process Rank |"," Elapsed Time (s) |"," CPU Time (s) |"," Ratio CPU/Elapsed",/,'
+          lignes(4)='    (10X,I4,9(" "),"|",F12.3,6(" "),"|",F12.3,2(" "),"|",4(" "),F7.3,/),'
+          WRITE(lignes(4)(1:4),'(I4)') nb_procs
+          lignes(5)='10X,"Total        |",F12.3,6(" "),"|",F12.3,2(" "),"|",4(" "),F7.3,/,'
+          lignes(6)='10X,"Minimum      |",F12.3,6(" "),"|",F12.3,2(" "),"|",4(" "),F7.3,/,'
+          lignes(7)='10X,"Maximum      |",F12.3,6(" "),"|",F12.3,2(" "),"|",4(" "),F7.3,/,'
+          lignes(8)='10X,"Average      |",F12.3,6(" "),"|",F12.3,2(" "),"|",4(" "),F7.3,/,'
+          start_date='/,10X,"MPI_Time started on ",2(A2,"/"),A4," at ",2(A2,":"),A2," MET ",A3,":",A2," from GMT",/,'
+          final_date='10X,  "MPI_Time   ended on ",2(A2,"/"),A4," at ",2(A2,":"),A2," MET ",A3,":",A2," from GMT",//)'
+          fmt=TRIM(lignes(1))//TRIM(lignes(2))//TRIM(lignes(3))//           &
+            & TRIM(hline)//TRIM(lignes(4))//TRIM(hline)//TRIM(lignes(5))//  &
+            & TRIM(hline)//TRIM(lignes(6))//TRIM(hline)//TRIM(lignes(7))//  &
+            & TRIM(hline)//TRIM(lignes(8))//TRIM(hline)//TRIM(start_date)// &
+            & TRIM(final_date)
+          WRITE(0, TRIM(fmt)) &
+              (All_rank(i),All_Etime(i),All_Ctime(i),All_Ratio(i),i=1, nb_procs), &
+              Total_Etime,  Total_Ctime,  Total_Ratio,  &
+              Min_Etime,    Min_Ctime,    Min_Ratio,    &
+              Max_Etime,    Max_Ctime,    Max_Ratio,    &
+              Avg_Etime,    Avg_Ctime,    Avg_Ratio,    &
+              date(1)(7:8), date(1)(5:6), date(1)(1:4), &
+              time(1)(1:2), time(1)(3:4), time(1)(5:6), &
+              zone(1:3),    zone(4:5),                  &
+              date(2)(7:8), date(2)(5:6), date(2)(1:4), &
+              time(2)(1:2), time(2)(3:4), time(2)(5:6), &
+              zone(1:3),    zone(4:5)
+          DEALLOCATE(All_Etime, All_Ctime, All_Ratio, All_rank)
+        END IF
+
+      CASE DEFAULT
+        WRITE(0,*) "Error, MPI_TIME: Invalid input parameter"
+
+    END SELECT
+  END SUBROUTINE MPI_Time
+END MODULE MPI_TIMES
Index: /trunk/00FlowSolve_PL/SRC/Make.inc
===================================================================
--- /trunk/00FlowSolve_PL/SRC/Make.inc	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/Make.inc	(revision 6)
@@ -0,0 +1,22 @@
+##############################################
+#  Make.inc
+##############################################
+
+SHELL=/bin/sh
+#
+SHELL=/bin/sh
+#
+FFTW_LIB = $(FFTW2_LIB_X)  -lsrfftw -lsfftw
+LIBS= $(FFTW_LIB) $(NETCDF_LIB_X) $(LAPACK_LIB_X) # $(BLAS_LIB_X)
+ALL_INCLUDE= $(NETCDF_INC_X) $(FFTW2_INC_X) $(MPI_INC_X)
+#
+# f90 compiler:
+#f90=mpif90
+f90=pgf95
+f90O_FLAGS= -pg -c -Mpreprocess -Mbounds $(ALL_INCLUDE)
+
+# c and preprocessor flags
+CFLAGS= -O2
+CPPFLAGS=
+FPPFLAGS=
+##############################################
Index: /trunk/00FlowSolve_PL/SRC/apply_BCs.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/apply_BCs.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/apply_BCs.f90	(revision 6)
@@ -0,0 +1,453 @@
+subroutine apply_BCs
+#define DEBUG_LEVEL 1
+
+! apply BCs to intermediate velocities and pd
+ use grid_info
+ use dependent_variables
+ use intermediate_variables
+ use mpi_parameters
+ use boundary_information
+ use counters_flags_etc
+ use user_parameters   ! for surface_V_of_x
+ use dimensional_scales
+ implicit none
+ include '../input/problem_size.h'
+ include 'mpif.h'
+
+ real, dimension(:,:), allocatable            :: f0,f1,f2,f3,f4
+ real                                         :: h, xval,F_of_t,thresh
+
+#if DEBUG_LEVEL >= 1
+ if(myid==0) write(0,*) 'hello world from apply_BCs'
+#endif
+
+! FACE 1: xi=0
+#if DEBUG_LEVEL >= 2
+ write(0,*) 'apply_BCs, FACE 1',myid
+#endif
+
+ h=Grid(0)%dxi
+ allocate (f0(ny,locnz),f1(ny,locnz),f2(ny,locnz),f3(ny,locnz),f4(ny,locnz))
+ i=1
+ if( BC_vel1(1,1) == 'specified_value' ) then
+  U(i,1:ny,1:locnz)=BC_values1(1:ny,1:locnz,1)
+  v(i,1:ny,1:locnz)=BC_values1(1:ny,1:locnz,2)
+  W(i,1:ny,1:locnz)=BC_values1(1:ny,1:locnz,3)
+ elseif( BC_vel1(1,1) == 'specified_stress' ) then
+  if( boundary_type1(1,1) == 'solid' ) then
+   U(i,1:ny,1:locnz)=BC_values1(1:ny,1:locnz,1)
+  elseif( boundary_type1(1,1) == 'permeable' ) then
+   f1=U(2,:,:)
+   f2=U(3,:,:)
+   f3=U(4,:,:)
+   f4=U(5,:,:)
+   f0=(-24.*h*BC_values1(:,:,1) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+   U(i,1:ny,1:locnz)=f0
+  endif
+
+  f1=v(2,:,:)
+  f2=v(3,:,:)
+  f3=v(4,:,:)
+  f4=v(5,:,:)
+  f0=(-24.*h*BC_values1(:,:,2) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+  v(i,1:ny,1:locnz)=f0
+  f1=w(2,:,:)
+  f2=w(3,:,:)
+  f3=w(4,:,:)
+  f4=w(5,:,:)
+  f0=(-24.*h*BC_values1(:,:,3) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+  w(i,1:ny,1:locnz)=f0
+ endif
+
+! bcs for scalar 1 at face 1
+ if( BC_scalar1(1,1,1) == 'specified_value' ) then
+  s1(i,1:ny,1:locnz)=BC_values1(1:ny,1:locnz,4)
+ elseif( BC_scalar1(1,1,1) == 'specified_gradient' ) then
+  f1=s1(2,:,:)
+  f2=s1(3,:,:)
+  f3=s1(4,:,:)
+  f4=s1(5,:,:)
+  f0=(-24.*h*BC_values1(:,:,4) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+  s1(i,1:ny,1:locnz)=f0
+ endif
+
+! bcs for scalar 2 at face 1
+if(num_scalars>1) then
+ if( BC_scalar1(1,1,2) == 'specified_value' ) then
+  s2(i,1:ny,1:locnz)=BC_values1(1:ny,1:locnz,5)
+ elseif( BC_scalar1(1,1,2) == 'specified_gradient' ) then
+  f1=s2(2,:,:)
+  f2=s2(3,:,:)
+  f3=s2(4,:,:)
+  f4=s2(5,:,:)
+  f0=(-24.*h*BC_values1(:,:,5) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+  s2(i,1:ny,1:locnz)=f0
+ endif
+endif
+
+
+! FACE 2: xi=1
+#if DEBUG_LEVEL >= 2
+ write(0,*) 'apply_BCs, FACE 2',myid
+#endif
+
+ i=nx
+ if( BC_vel2(1,1) == 'specified_value' ) then
+  U(i,1:ny,1:locnz)=BC_values2(1:ny,1:locnz,1)
+  v(i,1:ny,1:locnz)=BC_values2(1:ny,1:locnz,2)
+  W(i,1:ny,1:locnz)=BC_values2(1:ny,1:locnz,3)
+ elseif( BC_vel2(1,1) == 'specified_stress' ) then
+  if( boundary_type2(1,1) == 'solid' ) then
+   U(i,1:ny,1:locnz)=BC_values2(1:ny,1:locnz,1)
+  elseif( boundary_type2(1,1) == 'permeable' ) then
+   f0=U(nx-4,:,:)
+   f1=U(nx-3,:,:)
+   f2=U(nx-2,:,:)
+   f3=U(nx-1,:,:)
+   f4=(24.*h*BC_values2(:,:,1) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+   U(i,1:ny,1:locnz)=f0
+  endif
+
+   f0=v(nx-4,:,:)
+   f1=v(nx-3,:,:)
+   f2=v(nx-2,:,:)
+   f3=v(nx-1,:,:)
+   f4=(24.*h*BC_values2(:,:,2) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+   v(i,1:ny,1:locnz)=f4
+   f0=w(nx-4,:,:)
+   f1=w(nx-3,:,:)
+   f2=w(nx-2,:,:)
+   f3=w(nx-1,:,:)
+   f4=(24.*h*BC_values2(:,:,3) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+   w(i,1:ny,1:locnz)=f4
+ endif
+
+ if( BC_scalar2(1,1,1) == 'specified_value' ) then
+  s1(i,1:ny,1:locnz)=BC_values2(1:ny,1:locnz,4)
+ elseif( BC_scalar2(1,1,1) == 'specified_gradient' ) then
+  f0=s1(nx-4,:,:)
+  f1=s1(nx-3,:,:)
+  f2=s1(nx-2,:,:)
+  f3=s1(nx-1,:,:)
+  f4=(24.*h*BC_values2(:,:,4) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+  s1(i,1:ny,1:locnz)=f4
+ endif
+
+if(num_scalars>1) then
+ if( BC_scalar2(1,1,2) == 'specified_value' ) then
+  s2(i,1:ny,1:locnz)=BC_values2(1:ny,1:locnz,5)
+ elseif( BC_scalar2(1,1,2) == 'specified_gradient' ) then
+  f0=s2(nx-4,:,:)
+  f1=s2(nx-3,:,:)
+  f2=s2(nx-2,:,:)
+  f3=s2(nx-1,:,:)
+  f4=(24.*h*BC_values2(:,:,5) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+  s2(i,1:ny,1:locnz)=f4
+ endif
+endif
+
+ deallocate (f0,f1,f2,f3,f4)
+
+
+! FACE 3: eta=0
+#if DEBUG_LEVEL >= 2
+ write(0,*) 'apply_BCs, FACE 3',myid
+#endif
+
+ h=Grid(0)%deta
+ allocate (f0(nx,locnz),f1(nx,locnz),f2(nx,locnz),f3(nx,locnz),f4(nx,locnz))
+ j=1
+ if( BC_vel3(1,1) == 'specified_value' ) then
+  U(1:nx,j,1:locnz)=BC_values3(1:nx,1:locnz,1)
+  v(1:nx,j,1:locnz)=BC_values3(1:nx,1:locnz,2)
+  W(1:nx,j,1:locnz)=BC_values3(1:nx,1:locnz,3)
+ elseif( BC_vel3(1,1) == 'specified_stress' ) then
+  if( boundary_type3(1,1) == 'solid' ) then
+   v(1:nx,j,1:locnz)=BC_values3(1:nx,1:locnz,2)
+  elseif( boundary_type3(1,1) == 'permeable' ) then
+   f1=v(1:nx,2,1:locnz)
+   f2=v(1:nx,3,1:locnz)
+   f3=v(1:nx,4,1:locnz)
+   f4=v(1:nx,5,1:locnz)
+   f0=(-24.*h*BC_values3(:,:,2) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+   v(1:nx,j,1:locnz)=f0
+  endif
+
+   f1=U(1:nx,2,1:locnz)
+   f2=U(1:nx,3,1:locnz)
+   f3=U(1:nx,4,1:locnz)
+   f4=U(1:nx,5,1:locnz)
+   f0=(-24.*h*BC_values3(:,:,1) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+   U(1:nx,j,1:locnz)=f0
+   f1=W(1:nx,2,1:locnz)
+   f2=W(1:nx,3,1:locnz)
+   f3=W(1:nx,4,1:locnz)
+   f4=W(1:nx,5,1:locnz)
+   f0=(-24.*h*BC_values3(:,:,3) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+   W(1:nx,j,1:locnz)=f0
+ endif
+
+ if( BC_scalar3(1,1,1) == 'specified_value' ) then
+  s1(1:nx,j,1:locnz)=BC_values3(1:nx,1:locnz,4)
+ elseif( BC_scalar3(1,1,1) == 'specified_gradient' ) then
+  f1=s1(1:nx,2,1:locnz)
+  f2=s1(1:nx,3,1:locnz)
+  f3=s1(1:nx,4,1:locnz)
+  f4=s1(1:nx,5,1:locnz)
+  f0=(-24.*h*BC_values3(:,:,4) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+  s1(1:nx,j,1:locnz)=f0
+ endif
+
+if(num_scalars>1) then
+ if( BC_scalar3(1,1,2) == 'specified_value' ) then
+  s2(1:nx,j,1:locnz)=BC_values3(1:nx,1:locnz,5)
+ elseif( BC_scalar3(1,1,2) == 'specified_gradient' ) then
+  f1=s2(1:nx,2,1:locnz)
+  f2=s2(1:nx,3,1:locnz)
+  f3=s2(1:nx,4,1:locnz)
+  f4=s2(1:nx,5,1:locnz)
+  f0=(-24.*h*BC_values3(:,:,5) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+  s2(1:nx,j,1:locnz)=f0
+ endif
+endif
+
+! FACE 4: eta=1
+#if DEBUG_LEVEL >= 2
+ write(0,*) 'apply_BCs, FACE 4',myid
+#endif
+
+ j=ny
+ if( BC_vel4(1,1) == 'specified_value' ) then
+  U(1:nx,j,1:locnz)=BC_values4(1:nx,1:locnz,1)
+  v(1:nx,j,1:locnz)=BC_values4(1:nx,1:locnz,2)
+  W(1:nx,j,1:locnz)=BC_values4(1:nx,1:locnz,3)
+ elseif( BC_vel4(1,1) == 'specified_stress' ) then
+  if( boundary_type4(1,1) == 'solid' ) then
+   v(1:nx,j,1:locnz)=BC_values4(1:nx,1:locnz,2)
+  elseif( boundary_type4(1,1) == 'permeable' ) then
+   f0=v(1:nx,ny-4,1:locnz)
+   f1=v(1:nx,ny-3,1:locnz)
+   f2=v(1:nx,ny-2,1:locnz)
+   f3=v(1:nx,ny-1,1:locnz)
+   f4=(24.*h*BC_values4(:,:,2) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+   v(1:nx,j,1:locnz)=f4
+  endif
+
+   f0=U(1:nx,ny-4,1:locnz)
+   f1=U(1:nx,ny-3,1:locnz)
+   f2=U(1:nx,ny-2,1:locnz)
+   f3=U(1:nx,ny-1,1:locnz)
+   f4=(24.*h*BC_values4(:,:,1) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+   U(1:nx,j,1:locnz)=f4
+   f0=W(1:nx,ny-4,1:locnz)
+   f1=W(1:nx,ny-3,1:locnz)
+   f2=W(1:nx,ny-2,1:locnz)
+   f3=W(1:nx,ny-1,1:locnz)
+   f4=(24.*h*BC_values4(:,:,3) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+   W(1:nx,j,1:locnz)=f4
+ endif
+
+ if( BC_scalar4(1,1,1) == 'specified_value' ) then
+  s1(1:nx,j,1:locnz)=BC_values4(1:nx,1:locnz,4)
+ elseif( BC_scalar4(1,1,1) == 'specified_gradient' ) then
+  f0=s1(1:nx,ny-4,1:locnz)
+  f1=s1(1:nx,ny-3,1:locnz)
+  f2=s1(1:nx,ny-2,1:locnz)
+  f3=s1(1:nx,ny-1,1:locnz)
+  f4=(24.*h*BC_values4(:,:,4) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+  s1(1:nx,j,1:locnz)=f4
+ endif
+
+if(num_scalars>1) then
+ if( BC_scalar4(1,1,2) == 'specified_value' ) then
+  s2(1:nx,j,1:locnz)=BC_values4(1:nx,1:locnz,5)
+ elseif( BC_scalar4(1,1,2) == 'specified_gradient' ) then
+  f0=s2(1:nx,ny-4,1:locnz)
+  f1=s2(1:nx,ny-3,1:locnz)
+  f2=s2(1:nx,ny-2,1:locnz)
+  f3=s2(1:nx,ny-1,1:locnz)
+  f4=(24.*h*BC_values4(:,:,5) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+  s2(1:nx,j,1:locnz)=f4
+ endif
+endif
+
+ deallocate (f0,f1,f2,f3,f4)
+
+
+! FACE 5: zeta=0
+#if DEBUG_LEVEL >= 2
+ write(0,*) 'apply_BCs, FACE 5',myid
+#endif
+
+ if( myid == 0 ) then
+  h=Grid(0)%dzeta
+  allocate (f0(nx,ny),f1(nx,ny),f2(nx,ny),f3(nx,ny),f4(nx,ny))
+  k=1
+  if( BC_vel5(1,1) == 'specified_value' ) then
+   U(1:nx,1:ny,k)=BC_values5(1:nx,1:ny,1)
+   v(1:nx,1:ny,k)=BC_values5(1:nx,1:ny,2)
+   W(1:nx,1:ny,k)=BC_values5(1:nx,1:ny,3)
+  elseif( BC_vel5(1,1) == 'specified_stress' ) then
+   if( boundary_type5(1,1) == 'solid' ) then
+    W(1:nx,1:ny,k)=BC_values5(1:nx,1:ny,3)
+   elseif( boundary_type5(1,1) == 'permeable' ) then
+!!!    f1=W(:,:,2)
+!!!    f2=W(:,:,3)
+!!!    f3=W(:,:,4)
+!!!    f4=W(:,:,5)
+!!!    f0=(-24.*h*BC_values5(:,:,3) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+!!!    W(:,:,k)=f0
+      W(:,:,k)=-9999.
+   endif
+
+    f1=U(:,:,2)
+    f2=U(:,:,3)
+    f0 = (-2.*h*BC_values5(:,:,1) + 4.*f1 - f2) / 3.
+!!!    f3=U(:,:,4)
+!!!    f4=U(:,:,5)
+!!!    f0=(-24.*h*BC_values5(:,:,1) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+    U(:,:,k)=f0
+
+    f1=v(:,:,2)
+    f2=v(:,:,3)
+    f0 = (-2.*h*BC_values5(:,:,2) + 4.*f1 - f2) / 3.
+!!!    f3=v(:,:,4)
+!!!    f4=v(:,:,5)
+!!!    f0=(-24.*h*BC_values5(:,:,2) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+    v(:,:,k)=f0
+  endif
+
+  if( BC_scalar5(1,1,1) == 'specified_value' ) then
+   s1(1:nx,1:ny,k)=BC_values5(1:nx,1:ny,4)
+  elseif( BC_scalar5(1,1,1) == 'specified_gradient' ) then
+   f1=s1(:,:,2)
+   f2=s1(:,:,3)
+   f0 = (-2.*h*BC_values5(:,:,4) + 4.*f1 - f2) / 3.
+!!!   f3=s1(:,:,4)
+!!!   f4=s1(:,:,5)
+!!!   f0=(-24.*h*BC_values5(:,:,4) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+   s1(:,:,k)=f0
+  endif
+
+ if(num_scalars>1) then
+  if( BC_scalar5(1,1,2) == 'specified_value' ) then
+   s2(1:nx,1:ny,k)=BC_values5(1:nx,1:ny,5)
+  elseif( BC_scalar5(1,1,2) == 'specified_gradient' ) then
+   f1=s2(:,:,2)
+   f2=s2(:,:,3)
+   f0 = (-2.*h*BC_values5(:,:,5) + 4.*f1 - f2) / 3.
+!!!   f3=s2(:,:,4)
+!!!   f4=s2(:,:,5)
+!!!   f0=(-24.*h*BC_values5(:,:,5) + 96.*f1 -72.*f2 +32.*f3 -6.*f4)/50.
+   s2(:,:,k)=f0
+  endif
+ endif
+
+  deallocate (f0,f1,f2,f3,f4)
+ endif ! myid==0 block
+
+! FACE 6: zeta=1
+#if DEBUG_LEVEL >= 2
+ write(0,*) 'apply_BCs, FACE 6',myid
+#endif
+
+ if( myid == numprocs-1 ) then
+  h=Grid(0)%dzeta
+  allocate (f0(nx,ny),f1(nx,ny),f2(nx,ny),f3(nx,ny),f4(nx,ny))
+  k=locnz
+
+!**** ENFORCE STRESS FREE CONDITION OVER ENTIRE UPPER SURFACE ****************
+  if( BC_vel6(1,1) == 'specified_value' ) then
+   U(1:nx,1:ny,k)=BC_values6(1:nx,1:ny,1)
+   v(1:nx,1:ny,k)=BC_values6(1:nx,1:ny,2)
+   W(1:nx,1:ny,k)=BC_values6(1:nx,1:ny,3)
+  elseif( BC_vel6(1,1) == 'specified_stress' ) then
+   if( boundary_type6(1,1) == 'solid' ) then
+    W(1:nx,1:ny,k)=BC_values6(1:nx,1:ny,3)
+   elseif( boundary_type6(1,1) == 'permeable' ) then
+!!!    f0=W(:,:,k-4)
+!!!    f1=W(:,:,k-3)
+!!!    f2=W(:,:,k-2)
+!!!    f3=W(:,:,k-1)
+!!!    f4=(24.*h*BC_values6(:,:,3) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+!!!    W(:,:,k)=f4
+    W(:,:,k) = -9999.
+   endif
+
+!!!    f0=U(:,:,k-4)
+!!!    f1=U(:,:,k-3)
+!!!    f2=U(:,:,k-2)
+!!!    f3=U(:,:,k-1)
+!!!    f4=(24.*h*BC_values6(:,:,1) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+!!!    U(:,:,k)=f4
+    f0=U(:,:,k-2)
+    f1=U(:,:,k-1)
+    f2 = (2.*h*BC_values6(:,:,1) + 4.*f1 - f0) / 3.
+    U(:,:,k)=f2
+
+!!!    f0=v(:,:,k-4)
+!!!    f1=v(:,:,k-3)
+!!!    f2=v(:,:,k-2)
+!!!    f3=v(:,:,k-1)
+!!!    f4=(24.*h*BC_values6(:,:,2) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+!!!    v(:,:,k)=f4      ! set dV/dz everywhere on top surface
+    f0=v(:,:,k-2)
+    f1=v(:,:,k-1)
+    f2 = (2.*h*BC_values6(:,:,2) + 4.*f1 - f0) / 3.
+    v(:,:,k)=f2
+   endif
+!**********************************************************************
+
+!*** NOW, OVER-WRITE THE VALUES IN [0,x_1] and [x_2,L_x] with the ICE BCS***
+   F_of_t = 1.0    ! dimensional time in [s] stored in the scalar variable "t"
+   thresh=1.e-4    ! dimensionless value
+   do i=1,nx
+    xval = Grid(0)%x(i,locnz)*L_scale
+    if( abs(surface_V_of_x(i)) >= thresh .or. xval <= x_1 ) then ! SHEARED ICE MOTION
+     u(i,:,k) = 0.
+     v(i,:,k) = F_of_t*surface_V_of_x(i)
+    endif
+    if( xval >= x_2 ) then  ! stationary ice
+     u(i,:,k) = 0.
+     v(i,:,k) = 0.
+    endif
+   enddo
+!**************************************************************************
+
+
+  if( BC_scalar6(1,1,1) == 'specified_value' ) then
+   s1(1:nx,1:ny,k)=BC_values6(1:nx,1:ny,4)
+  elseif( BC_scalar6(1,1,1) == 'specified_gradient' ) then
+!!!   f0=s1(:,:,k-4)
+!!!   f1=s1(:,:,k-3)
+!!!   f2=s1(:,:,k-2)
+!!!   f3=s1(:,:,k-1)
+!!!   f4=(24.*h*BC_values6(:,:,4) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+!!!   s1(:,:,k)=f4
+   f0=s1(:,:,k-2)
+   f1=s1(:,:,k-1)
+   f2 = (2.*h*BC_values6(:,:,4) + 4.*f1 - f0) / 3.
+   s1(:,:,k)=f2
+  endif
+
+ if(num_scalars>1) then
+  if( BC_scalar6(1,1,2) == 'specified_value' ) then
+   s2(1:nx,1:ny,k)=BC_values6(1:nx,1:ny,5)
+  elseif( BC_scalar6(1,1,2) == 'specified_gradient' ) then
+!!!   f0=s2(:,:,k-4)
+!!!   f1=s2(:,:,k-3)
+!!!   f2=s2(:,:,k-2)
+!!!   f3=s2(:,:,k-1)
+!!!   f4=(24.*h*BC_values6(:,:,5) -6.*f0 +32.*f1 -72.*f2 +96.*f3)/50.
+!!!   s2(:,:,k)=f4
+   f0=s2(:,:,k-2)
+   f1=s2(:,:,k-1)
+   f2 = (2.*h*BC_values6(:,:,5) + 4.*f1 - f0) / 3.
+   s2(:,:,k)=f2
+  endif
+ endif
+
+  deallocate (f0,f1,f2,f3,f4)
+ endif
+
+end subroutine apply_BCs
Index: /trunk/00FlowSolve_PL/SRC/apply_ibdry_rhs.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/apply_ibdry_rhs.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/apply_ibdry_rhs.f90	(revision 6)
@@ -0,0 +1,110 @@
+subroutine apply_ibdry_rhs
+#define DEBUG_LEVEL 2
+
+  use grid_info
+  use mpi_parameters
+  use immersed_boundary
+  use counters_flags_etc
+  use rhs_variables
+  use dependent_variables
+  implicit none
+
+  include '../input/problem_size.h'
+  include 'mpif.h'
+
+  integer		:: ipt,npts,i1,i2,j1,j2,k1,k2,update,m1,m2
+  real			:: delta,delta_n,xloc,zloc,n1,n2
+
+#if DEBUG_LEVEL >= 1
+  if(myid==0) then
+   write(0,*) ' '
+   write(0,*) ' '
+   write(0,*) 'hello world from apply_ibdry_rhs'
+  endif
+#endif
+
+  ! damp the flow below immersed boundary
+  do j=1,ny
+   rhs1(:,j,:,MM0) = rhs1(:,j,:,MM0) - xbeta*U(:,j,:)*(1-mask2(:,:))
+   rhs2(:,j,:,MM0) = rhs2(:,j,:,MM0) - xbeta*v(:,j,:)*(1-mask2(:,:))
+   rhs3(:,j,:,MM0) = rhs3(:,j,:,MM0) - xbeta*W(:,j,:)*(1-mask2(:,:))
+  enddo
+
+
+  npts=n_j*ny
+  do ipt=1,npts
+
+   i1=local_region(1,ipt)
+   i2=local_region(2,ipt)
+
+   j1=local_region(3,ipt)
+   j2=local_region(4,ipt)
+
+   m1=local_region(5,ipt)    ! global k indexing scheme
+   m2=local_region(6,ipt)
+
+   if( m1 >= myid*locnz+1 .and. m2 <= (myid+1)*locnz ) then     ! entire region of influence on myid
+    k1 = m1-myid*locnz  ! global to local indexing
+    k2 = m2-myid*locnz  ! global to local indexing
+    update=1
+   elseif( m1 < myid*locnz+1 .and. m2 > myid*locnz+1 .and. m2 <= (myid+1)*locnz  ) then  ! region shared w/ S neighbor
+    k1 = 1
+    k2 = m2-myid*locnz  ! global to local indexing
+    update=1
+   elseif( m1 < (myid+1)*locnz .and. m1 >= myid*locnz+1 .and. m2 > (myid+1)*locnz ) then  ! region shared w/ N neighbor
+    k1 = m1-myid*locnz  ! global to local indexing
+    k2 = locnz
+    update=1
+   else
+    update=0
+   endif
+
+   xloc = ibdry_locations(1,ipt)
+   zloc = ibdry_locations(2,ipt)
+
+   if( ibdry_normals(1,ipt) == -1 ) then   ! left vertical slice
+    n1 = xloc - delta_1
+    n2 = zloc
+   elseif( ibdry_normals(1,ipt) == 1 ) then   ! right vertical slice
+    n1 = xloc + delta_1
+    n2 = zloc
+   else
+    n1 = xloc 
+    n2 = zloc - delta_3/2.
+   endif
+
+
+! if processor myid owns part of ipts region of influence, update rhs on myid
+  if( update==1 ) then 
+   do i=i1,i2    !  loop over grid points in local region of influence
+    do j=j1,j2
+     do k=k1,k2
+
+      if( i<1 .or. i>nx .or. j<1 .or. j>ny .or. k<1 .or. k>locnz ) then
+       write(0,*) '**** RANGE ERROR:  ',i,j,k,ipt
+       write(0,*) '**********  ',i1,i2,j1,j2,k1,k2
+       STOP
+      endif
+
+      delta = exp( -(                &
+            ( (Grid(0)%x(i,k)-xloc)/(delta_1))**2     &
+           +( (Grid(0)%z(i,k)-zloc)/(delta_3))**2  ) )
+
+      delta_n = exp( -(                &
+            ( 10*(Grid(0)%x(i,k)-n1)/(delta_1))**2     &
+           +( (Grid(0)%z(i,k)-n2)/(delta_3))**2  ) )
+
+      rhs1(i,j,k,MM0) = rhs1(i,j,k,MM0) + delta*ibdry_rhs(1,ipt)
+      rhs2(i,j,k,MM0) = rhs2(i,j,k,MM0) + delta*ibdry_rhs(2,ipt)
+      rhs3(i,j,k,MM0) = rhs3(i,j,k,MM0) + delta*ibdry_rhs(3,ipt)
+      rhs4(i,j,k,MM0) = rhs4(i,j,k,MM0) + delta_n*ibdry_rhs(4,ipt)
+
+     enddo
+    enddo
+   enddo     ! end loop over grid points in local region of influence
+  endif
+
+  enddo   ! end loop over all immersed bdry pts
+
+ call MPI_BARRIER(comm,ierr)    ! all processors leave routine together
+end subroutine apply_ibdry_rhs
Index: /trunk/00FlowSolve_PL/SRC/cfd.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/cfd.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/cfd.f90	(revision 6)
@@ -0,0 +1,77 @@
+program cfd                                 ! XZ version
+
+#define DEBUG_LEVEL 1
+! Module definitions in cfd_modules.F90
+use  grid_info
+use  mpi_parameters
+use  dimensional_scales
+use  boundary_information
+use  pde_parameters
+use  dependent_variables
+use  intermediate_variables
+use  counters_flags_etc
+use  immersed_boundary
+use  user_parameters
+use  mpi_times
+
+implicit none
+
+include 'mpif.h'
+include '../input/problem_size.h'
+
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ONLY EXECUTABLE STATEMENTS BELOW HERE  %%%%%%%%%%%%%%%%%%%
+
+ include 'start_MPI.h'
+
+ call MPI_Time(0)
+
+!!! LAPACK_FLAG='double'
+ LAPACK_FLAG='single'
+ call initialize_grids(0)              ! initialize spatial grids at all discretization levels
+ call initialize_cfd                   ! basic setup, read input parameters etc.
+ call initialize_user                  ! e.g. user can set nontrivial initial conditions
+
+
+ print*,'loop...'
+ 
+ do istep=istart,iend                ! MAIN TIME STEPPING LOOP
+  t = t_start + (istep-istart)*dt    ! dimensionless time
+
+  call save                          ! write restart files {i_restart}
+
+  call rhs                           ! compute rhs for U,v,W & pd neglecting
+    ! only pressure gradients
+
+  call time_step                     ! time step w/o pressure gradient => u_star
+  
+  call divergence                    ! compute "divergence" of u_star -> div_u
+  
+  call set_rhs_for_pressure          ! set the rhs for pressure equation L[p]=b
+
+  call psolve_xy_periodic            ! solve pressure using xyfft & direct solve in z
+
+  call gradient                      ! compute pressure "gradient"
+  
+  call project                       ! project u_star onto div-free subspace =>[U,v,W]
+  
+  call filter                        ! compact spatial filtering(i_filter,alpha)
+  
+  call set_BC_values                 ! compute u boundary values for faces 1:6
+  
+  call apply_BCs                     ! impose exact satisfaction of BCs on [U,v,W,pd]
+  
+  call user_BCs                      ! impose user-defined conditions on [U,v,W,pd]
+    
+  call write3d_netcdf                ! output 3d fields {i_full_fields}
+    
+  include 'toggle.h'                 ! toggle counters, indices etc
+
+enddo
+
+ call mpi_barrier(comm,ierr)
+
+ call MPI_Time(1)
+
+ call mpi_finalize(ierr)
+
+end program cfd
Index: /trunk/00FlowSolve_PL/SRC/cfd_modules.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/cfd_modules.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/cfd_modules.f90	(revision 6)
@@ -0,0 +1,192 @@
+!!!!    modules used in f90, pim, MG version of cfdXZ code   !!!!
+
+!*****************************************************************
+module grid_info
+
+! define a grid_object to hold information about each spatial grid
+type grid_object
+ integer                                ::  n1,n2,n3,locn3		! dimension sizes, locn3=n3/numprocs
+ integer                                ::  level,n_mg_levels   ! 0 = finest
+ integer     		                ::  n1_it,n2_it,n3_it 	! dimension sizes for U,V in matvec
+ real			                ::  dxi, deta, dzeta	! grid spacings
+ real, dimension(:,:), allocatable	::  x, z 		 	! spatial variables
+ real, dimension(:), allocatable	::  y	 		 	! 
+ real, dimension(:,:), allocatable	::  x_xi, x_zeta, z_xi, z_zeta	! grid metrics
+ real, dimension(:), allocatable	::  y_eta			! grid metric
+ real, dimension(:,:,:,:), allocatable	::  J_matrix	! Jacobian matrix
+ real, dimension(:,:), allocatable	::  det_J			! det of Jacobian matrix
+ real, dimension(:,:), allocatable	::  Cxx,Czz			! pressure coefficients in XZ/13
+ real, dimension(:), allocatable	::  Cyy				! pressure coefficients in Y/2
+
+ real, dimension(:,:,:), allocatable	        ::  v, f, scratch		! solution, rhs  and work vectors
+ double precision, dimension(:,:), allocatable	::  ddx, ddy, ddz		! differentiation matrices, banded
+ integer, dimension(:), allocatable             ::  piv_dx, piv_dy, piv_dz	! corresponding pivot arrays
+ double precision, dimension(:,:), allocatable	::  filt_x, filt_y, filt_z	! filtering matrices, banded
+ integer, dimension(:), allocatable             ::  piv_fx, piv_fy, piv_fz	! corresponding pivot arrays
+ integer, dimension(13)	                        ::  ipar			! PIM integer parameters
+ real, dimension(6)	                        ::  spar                        ! PIM real parameters
+
+end type grid_object
+
+! declare an allocatable array of such objects
+type(grid_object), dimension(:),allocatable	:: Grid              ! each Grid(j) contains the above
+double precision  	                        :: alpha_1, beta_1      ! for compact scheme matrix
+double precision                                :: a1, b1, c1           ! for compact scheme (rhs)
+real   		                                :: alpha                ! filtering parameter
+real, dimension(:), allocatable		        :: wrk		        ! PIM work vector
+real, dimension(:,:,:), allocatable             :: GM_uu, GM_uw, GM_ww  ! metrics for transformed eqns of motion
+real					        :: t, dt
+character(len=80)				:: grid_file,restriction_method
+character(len=7)				:: discrete_scheme             ! compact or FD
+character(len=5)				:: relax_precon                ! none or diagl
+integer                         :: current_grid_level          ! needed by matvec
+real, allocatable,dimension(:)  :: global_Czz,global_Cz,global_det_J
+
+end module grid_info
+!*****************************************************************
+
+!*****************************************************************
+module integration_weights
+
+! weight coefficients in each direction
+  real, allocatable             :: W1(:), W2(:), W3(:)
+
+end module integration_weights
+!*****************************************************************
+
+!*****************************************************************
+module dependent_variables
+! Container for dependent variable arrays
+  real, allocatable             :: U(:,:,:),v(:,:,:),W(:,:,:),s1(:,:,:),s2(:,:,:)
+  real, allocatable             :: pressure(:,:,:,:)
+  real, allocatable             :: s1_bar(:,:), s1_bar_xi(:,:), s1_bar_zeta(:,:)
+  real, allocatable             :: s2_bar(:,:), s2_bar_xi(:,:), s2_bar_zeta(:,:)
+  real, allocatable             :: rho_bar(:,:),pd(:,:,:)
+end module dependent_variables
+!*****************************************************************
+
+!*****************************************************************
+module intermediate_variables
+! Container for intermediate variable arrays
+  real, allocatable             :: div_u(:,:,:,:),L_of_p(:,:,:)
+  real, allocatable             :: b(:,:,:)
+  real, allocatable             :: grad_x(:,:,:)
+  real, allocatable             :: grad_y(:,:,:)
+  real, allocatable             :: grad_z(:,:,:)
+  real, allocatable             :: u_star(:,:,:)
+  real, allocatable             :: v_star(:,:,:)
+  real, allocatable             :: w_star(:,:,:)
+  real, allocatable             :: u_star_old(:,:,:)
+  real, allocatable             :: v_star_old(:,:,:)
+  real, allocatable             :: w_star_old(:,:,:)
+end module intermediate_variables
+!*****************************************************************
+
+!*****************************************************************
+module rhs_variables
+! Container for rhs arrays
+  real, allocatable             :: rhs1(:,:,:,:),rhs2(:,:,:,:)
+  real, allocatable             :: rhs3(:,:,:,:),rhs4(:,:,:,:)
+  real, allocatable             :: rhs5(:,:,:,:)
+end module rhs_variables
+!*****************************************************************
+
+
+!*****************************************************************
+module pde_parameters
+! Container for pde parameter data
+  real                           :: Ri,Rot,Re,Pr1,Pr2
+  real, allocatable              :: K_m(:,:,:)
+end module pde_parameters
+!*****************************************************************
+
+
+!*****************************************************************
+module dimensional_scales
+! Container for scaling data
+  real                           :: delta_rho,rho0
+  real                           :: g,nu,kappa1,kappa2,f
+  real                           :: kappa,Kh
+  real                           :: t_scale,L_scale,U_scale
+  real                           :: s1_scale,s2_scale
+  real                           :: density_scale,pressure_scale
+  real                           :: energy_scale,dissipation_scale
+  real                           :: DEL,Nsquared,N0
+  real                           :: pi
+end module dimensional_scales
+!*****************************************************************
+
+
+!*****************************************************************
+module mpi_parameters
+! Container for MPI data
+  integer                         :: myid,nprocs,comm
+  integer                         :: init_derived_type,subslice
+  integer                         :: oneslice,twoslice
+end module mpi_parameters
+!*****************************************************************
+
+
+!*****************************************************************
+module boundary_information
+! Container for boundary condition arrays
+  integer                     :: BC_flag(5,3)  ! 5 variables, 3 directions
+  character(len=80)           :: steady_BCS, immersed_bdry_flag
+
+! boundary type
+  character(len=80), allocatable     :: boundary_type1(:,:),boundary_type2(:,:)
+  character(len=80), allocatable     :: boundary_type3(:,:),boundary_type4(:,:)
+  character(len=80), allocatable     :: boundary_type5(:,:),boundary_type6(:,:)
+  character(len=80), allocatable     :: BC_pressure1(:,:),BC_pressure2(:,:)
+  character(len=80), allocatable     :: BC_pressure3(:,:),BC_pressure4(:,:)
+  character(len=80), allocatable     :: BC_pressure5(:,:),BC_pressure6(:,:)
+  character(len=80), allocatable     :: BC_vel1(:,:),BC_vel2(:,:)
+  character(len=80), allocatable     :: BC_vel3(:,:),BC_vel4(:,:)
+  character(len=80), allocatable     :: BC_vel5(:,:),BC_vel6(:,:)
+  character(len=80), allocatable     :: BC_scalar1(:,:,:),BC_scalar2(:,:,:)
+  character(len=80), allocatable     :: BC_scalar3(:,:,:),BC_scalar4(:,:,:)
+  character(len=80), allocatable     :: BC_scalar5(:,:,:),BC_scalar6(:,:,:)
+
+! boundary values
+  real, allocatable                  :: BC_values1(:,:,:),BC_values2(:,:,:)
+  real, allocatable                  :: BC_values3(:,:,:),BC_values4(:,:,:)
+  real, allocatable                  :: BC_values5(:,:,:),BC_values6(:,:,:)
+  real, allocatable                  :: phiY(:,:,:,:,:)  
+  real, allocatable                  :: inflow(:,:,:)
+
+end module boundary_information
+!*****************************************************************
+
+!*****************************************************************
+module counters_flags_etc
+! Container for misc scalar data
+  integer                         :: istep,istart,iend,nsteps,write3D_counter
+  integer                         :: i_filter,i_stat,i_full_fields
+  integer                         :: i_mean_pressure,i_restart,save_file
+  integer                         :: new,old,MM0,MM1,MM2,MM3
+  integer                         :: i,j,k,icount,itmp
+  integer                         :: ierr,local_rows,local_cols
+  integer                         :: global_rows,global_cols
+  real                            :: tol,div_rms,div_tol
+  integer                         :: maxits,n_mg_cycles,do_pressure
+  integer                         :: V_sweeps_pre, V_sweeps_post
+  integer, allocatable            :: my_node_indices(:)
+  character(len=80)               :: step_flag,psolve_scheme,closure_flag
+  character(len=80)               :: relaxation_method
+  character(len=80)               :: ics_flag,rho_bar_flag
+  character(len=80)               :: restart_flag,user_subs_flag
+  character(len=80)               :: user_rhs_flag,user_bcs_flag
+  real                            :: inertial_per,BV_per,t_start
+  real                            :: kx_val,ky_val
+end module counters_flags_etc
+!*****************************************************************
+module multigrid_parameters
+! Container for various constants related to MG preconditioning
+  character(len=80)                  :: mg_preconditioning
+  integer                            :: num_mg_levels
+  integer                            :: dof,s_width
+  integer                            :: nx_coarse,ny_coarse,nz_coarse
+  integer                            :: refine_x,refine_y,refine_z
+  integer,dimension(:),allocatable   :: n1,n2,n3
+end module multigrid_parameters
+
Index: /trunk/00FlowSolve_PL/SRC/compact_derivs6.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/compact_derivs6.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/compact_derivs6.f90	(revision 6)
@@ -0,0 +1,640 @@
+subroutine compact_ddx(data,deriv,flag,end_values,m1,m2,m3)
+! Routine to compute the x derivative (1st dimension)
+! of a 3d field stored in data(1:m1,1:m2,1:m3) assuming
+! a uniformly spaced grid mesh with dx=h.
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+!       inputs
+!              data        m1,m2,m3 array of input values
+!              m1,m2,m3    dimensions of field to be differentiated
+!              h           x grid spacing
+!              flag        flag which identifies periodicity
+!              end_values  the end values for the derivatives
+!                          (required but now obsolete)
+!
+!       output
+!              deriv       m1,m2,m3 array containing the optimized
+!                          6th order accurate d/dx(data)
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ use grid_info
+ use boundary_information
+use user_parameters,        only: LAPACK_FLAG
+ implicit none
+
+ integer, intent(in)                              :: flag,m1,m2,m3
+ real, dimension(m1,m2,m3)                        :: data
+ real, dimension(m1,m2,m3)                        :: deriv
+ real, dimension(2)                               :: end_values
+!!! double precision, dimension(:,:), allocatable    :: work
+ real, dimension(:,:), allocatable    :: work
+ integer                                          :: i,j,k,ierr,level,maxlevels
+ real                                             :: h
+ parameter(maxlevels=12)
+
+ real, allocatable                                :: kx(:),in(:),out(:)
+ real                                             :: pi
+ integer*8                                        :: plan_f, plan_i !size must match pointer size, 8 for DEC alphas
+ integer                                          :: N
+ include 'fftw_kw.inc'                            !  predefined FFTW constants
+
+ if( boundary_type2(1,1)=='periodic' ) then  ! spectral differentiation in x, use FFTW
+
+! preliminaries, setup fftw "plans"
+  pi=4.*atan(1.)
+  N=m1-1                                     ! m1 includes both boundary points, N only 1
+  allocate( kx(N),in(N),out(N) )
+
+  call rfftw_f77_create_plan(plan_f,N,FFTW_REAL_TO_COMPLEX,FFTW_ESTIMATE)
+  call rfftw_f77_create_plan(plan_i,N,FFTW_COMPLEX_TO_REAL,FFTW_ESTIMATE)
+  do i=1,N/2+1
+   kx(i)=2.*pi*(i-1.)    ! FFTW real to half-complex storage
+  enddo
+  do i=2,N/2
+   kx(N-i+2)=kx(i)       ! FFTW real to half-complex storage
+  enddo
+
+  do j=1,m2
+   do k=1,m3
+
+    in(1:N)=data(1:N,j,k)
+    call rfftw_f77_one(plan_f,in,out)   ! FORWARD TRANSFORM
+
+!   multiply by wavenumber array & normalize by N
+    out(1:N) = kx(1:N)*out(1:N)/float(N)
+!   multiply by i  (fold and negate)
+    do i=2,N/2
+     in(i)=-out(N-i+2)  ! real <-- (-imaginary)
+     in(N-i+2)=out(i)   ! imag <-- ( real )
+    enddo
+    in(1)=0.     ! dc
+    in(N/2+1)=0. !nyquist
+
+    call rfftw_f77_one(plan_i,in,out)   ! INVERSE TRANSFORM
+    deriv(1:N,j,k)=out(1:N)             ! store results in deriv
+    deriv(m1,j,k)=out(1)                ! carry 2nd periodic end point along
+    
+   enddo
+  enddo
+
+  call rfftw_f77_destroy_plan(plan_f)
+  call rfftw_f77_destroy_plan(plan_i)
+  deallocate( kx,in,out )
+  return
+ 
+ endif
+
+!*************  nonperiodic, use compact differentiation ********************
+ allocate( work(m1,m2) )
+ 
+! determine an appropriate grid level from m1
+ do level=0,maxlevels
+  if( m1 == Grid(level)%n1 ) goto 999
+ enddo
+999 continue   ! can use ddx and piv arrays from grid level 
+ h = Grid(level)%dxi
+
+!loop through each xy horizontal plane
+       
+ do k=1,m3
+
+!Create rhs vectors, store in work(:,:)
+ work(1,:)=( -(274.)*data(1,:,k)+(600.)*data(2,:,k)   &
+             -(600.)*data(3,:,k)+(400.)*data(4,:,k)   &
+             -(150.)*data(5,:,k)+ (24.)*data(6,:,k) )/(120.*h)   
+!               work(2,:)=( -(5./9.)*data(1,:,k)-(1./2.)*data(2,:,k)   &
+!                           +(1.)*data(3,:,k)+(1./18.)*data(4,:,k) )/h
+ work(2,:)=( -(24.)*data(1,:,k)-(130.)*data(2,:,k)   &
+             +(240.)*data(3,:,k)-(120.)*data(4,:,k)   &
+             +(40.)*data(5,:,k)- (6.)*data(6,:,k) )/(120.*h)   
+ work(3,:)= ( (1./36.)*(data(5,:,k)-data(1,:,k))   &
+             + (7./9.)*(data(4,:,k)-data(2,:,k)) )/h  
+
+ do i=4,m1-3
+  work(i,:)= ( (c1/6.)*(data(i+3,:,k)-data(i-3,:,k))   &
+              + (b1/4.)*(data(i+2,:,k)-data(i-2,:,k))   & 
+              + (a1/2.)*(data(i+1,:,k)-data(i-1,:,k)) )/h  
+ enddo
+
+ work(m1-2,:)= (-(1./36.)*(data(m1-4,:,k)-data(m1,:,k))   &
+                - (7./9.)*(data(m1-3,:,k)-data(m1-1,:,k)) )/h  
+!         work(m1-1,:)=( (5./9.)*data(m1,:,k)+(1./2.)*data(m1-1,:,k)  &
+!                         -(1)*data(m1-2,:,k)-(1./18.)*data(m1-3,:,k) )/h
+ work(m1-1,:)=( (24.)*data(m1,:,k)+(130.)*data(m1-1,:,k)   &
+             -(240.)*data(m1-2,:,k)+(120.)*data(m1-3,:,k)   &
+             -(40.)*data(m1-4,:,k)+ (6.)*data(m1-5,:,k) )/(120.*h)   
+ work(m1,:)=( (274.)*data(m1,:,k)-(600.)*data(m1-1,:,k)   &
+             +(600.)*data(m1-2,:,k)-(400.)*data(m1-3,:,k)   &
+             +(150.)*data(m1-4,:,k)- (24.)*data(m1-5,:,k) )/(120.*h)   
+
+!Compute the x derivatives for plane k, overwriting the array work
+
+ if( LAPACK_FLAG == 'double' ) then
+!!!  call DGBTRS('N',m1,2,2,m2,Grid(level)%ddx,7,Grid(level)%piv_dx,work(1,1),m1,ierr)
+      write(0,*) 'LAPACK_FLAG = double instead of single'
+      stop
+ elseif( LAPACK_FLAG == 'single' ) then
+  call SGBTRS('N',m1,2,2,m2,Grid(level)%ddx,7,Grid(level)%piv_dx,work(1,1),m1,ierr)
+ endif
+
+!If deriv. end conditions are 'periodic' (flag = 5) then
+!overwrite the endpts with nonlocal estimate
+ if( flag .eq. 5 ) then
+
+  work(1,:) = ( 2.*data(m1-2,:,k) -16.*data(m1-1,:,k)      &
+              +16.*data(2,:,k) -2.*data(3,:,k)  )/(24.*h)  
+  work(m1,:)=work(1,:)
+
+  work(2,:) = ( 2.*data(m1-1,:,k) -16.*data(m1,:,k)      &
+              +16.*data(3,:,k) -2.*data(4,:,k)  )/(24.*h)  
+  work(m1-1,:) = ( 2.*data(m1-3,:,k) -16.*data(m1-2,:,k)      &
+              +16.*data(1,:,k) -2.*data(2,:,k)  )/(24.*h)  
+
+  work(3,:) = ( 2.*data(m1,:,k) -16.*data(2,:,k)      &
+              +16.*data(4,:,k) -2.*data(5,:,k)  )/(24.*h)  
+  work(m1-2,:) = ( 2.*data(m1-4,:,k) -16.*data(m1-3,:,k)      &
+              +16.*data(m1-1,:,k) -2.*data(m1,:,k)  )/(24.*h)  
+
+ endif
+      
+!store the results in deriv(:,:,k)
+  deriv(:,:,k)=work(:,:) 
+
+!Go on to the next k plane
+ enddo
+
+ deallocate( work  )
+end subroutine compact_ddx
+
+
+subroutine compact_ddy(data,deriv,flag,end_values,m1,m2,m3)
+! Routine to compute the y derivative (2nd dimension)
+! of a 3d field stored in data(1:m1,1:m2,1:m3) assuming
+! a uniformly spaced grid mesh with dy=h.
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+!       inputs
+!              data        m1,m2,m3 array of input values
+!              m1,m2,m3    dimensions of field to be differentiated
+!              h           y grid spacing
+!              flag        flag which identifies periodicity
+!              end_values  the end values for the derivatives
+!                          (required but obsolete)
+!
+!       output
+!              deriv       m1,m2,m3 array containing the optimized
+!                          6th order accurate d/dy(data)
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ use grid_info
+ use boundary_information
+use user_parameters,        only: LAPACK_FLAG
+ implicit none
+
+ integer, intent(in)                              :: flag,m1,m2,m3
+ real, dimension(m1,m2,m3), intent(in)            :: data
+ real, dimension(m1,m2,m3), intent(out)           :: deriv
+ real, dimension(2), intent(in)                   :: end_values
+!!! double precision, dimension(:,:), allocatable    :: work
+ real, dimension(:,:), allocatable    :: work
+ integer                                          :: i,j,k,ierr,level,maxlevels
+ real                                             :: h
+ parameter(maxlevels=12)
+
+ real, allocatable                                :: ky(:),in(:),out(:)
+ real                                             :: pi
+ integer*8                                        :: plan_f, plan_i !size must match pointer size, 8 for DEC alphas
+ integer                                          :: N
+ include 'fftw_kw.inc'                            !  predefined FFTW constants
+
+ if( boundary_type4(1,1)=='periodic' ) then  ! spectral differentiation in y, use FFTW
+
+! preliminaries, setup fftw "plans"
+  pi=4.*atan(1.)
+  N=m2-1                                     ! m2 includes both boundary points, N only 1
+  allocate( ky(N),in(N),out(N) )
+
+  call rfftw_f77_create_plan(plan_f,N,FFTW_REAL_TO_COMPLEX,FFTW_ESTIMATE)
+  call rfftw_f77_create_plan(plan_i,N,FFTW_COMPLEX_TO_REAL,FFTW_ESTIMATE)
+  do j=1,N/2+1
+   ky(j)=2.*pi*(j-1.)    ! FFTW real to half-complex storage
+  enddo
+  do j=2,N/2
+   ky(N-j+2)=ky(j)      ! FFTW real to half-complex storage
+  enddo
+
+  do i=1,m1
+   do k=1,m3
+
+    in(1:N)=data(i,1:N,k)
+    call rfftw_f77_one(plan_f,in,out)   ! FORWARD TRANSFORM
+
+!   multiply by wavenumber array & normalize by N
+    out(1:N) = ky(1:N)*out(1:N)/float(N)
+!   multiply by i  (fold and negate)
+    do j=2,N/2
+     in(j)=-out(N-j+2)  ! real <-- (-imaginary)
+     in(N-j+2)=out(j)   ! imag <-- ( real )
+    enddo
+    in(1)=0.     ! dc
+    in(N/2+1)=0. !nyquist
+
+    call rfftw_f77_one(plan_i,in,out)   ! INVERSE TRANSFORM
+    deriv(i,1:N,k)=out(1:N)             ! store results in deriv
+    deriv(i,m2,k)=out(1)                ! carry 2nd periodic end point along
+    
+   enddo
+  enddo
+
+  call rfftw_f77_destroy_plan(plan_f)
+  call rfftw_f77_destroy_plan(plan_i)
+  deallocate( ky,in,out )
+  return
+  
+ endif
+
+!*************  nonperiodic, use compact differentiation ********************
+ allocate( work(m2,m1) )
+
+! determine an appropriate grid level from m2
+ do level=0,maxlevels-1
+  if( m2 == Grid(level)%n2 ) goto 999
+ enddo
+999 continue   ! can use ddx and piv arrays from grid level 
+ h = Grid(level)%deta
+
+!loop through each xy horizontal plane
+       
+ do k=1,m3
+
+!      create rhs vectors, store in work(:,:,1)
+ work(1,:)=( -(274.)*data(:,1,k)+(600.)*data(:,2,k)   &
+             -(600.)*data(:,3,k)+(400.)*data(:,4,k)   &
+             -(150.)*data(:,5,k)+ (24.)*data(:,6,k) )/(120.*h)   
+!         work(2,:)=( -(5./9.)*data(:,1,k)-(1./2.)*data(:,2,k)   &
+!                       +(1.)*data(:,3,k)+(1./18.)*data(:,4,k) )/h
+ work(2,:)=( -(24.)*data(:,1,k)-(130.)*data(:,2,k)   &
+             +(240.)*data(:,3,k)-(120.)*data(:,4,k)   &
+             +(40.)*data(:,5,k)- (6.)*data(:,6,k) )/(120.*h)   
+ work(3,:) = ( (1./36.)*( data(:,5,k) - data(:,1,k) )   &
+              + (7./9.)*( data(:,4,k) - data(:,2,k) ) )/h  
+ do j=4,m2-3
+  work(j,:) = (  (c1/6.)*( data(:,j+3,k) - data(:,j-3,k) )   &
+               + (b1/4.)*( data(:,j+2,k) - data(:,j-2,k) )   &
+               + (a1/2.)*( data(:,j+1,k) - data(:,j-1,k) ) )/h  
+ enddo
+
+ work(m2-2,:) = (-(1./36.)*( data(:,m2-4,k) - data(:,m2,k) )   &
+              - (7./9.)*( data(:,m2-3,k) - data(:,m2-1,k) ) )/h  
+!         work(m2-1,:)= ( (5./9.)*data(:,m2,k)+(1./2.)*data(:,m2-1,k)   &
+!                          -(1.)*data(:,m2-2,k)-(1./18.)*data(:,m2-3,k) )/h
+ work(m2-1,:)=( (24.)*data(:,m2,k)+(130.)*data(:,m2-1,k)   &
+             -(240.)*data(:,m2-2,k)+(120.)*data(:,m2-3,k)   &
+             -(40.)*data(:,m2-4,k)+ (6.)*data(:,m2-5,k) )/(120.*h)   
+ work(m2,:)=(  (274.)*data(:,m2,k)-(600.)*data(:,m2-1,k)   &
+             +(600.)*data(:,m2-2,k)-(400.)*data(:,m2-3,k)   &
+             +(150.)*data(:,m2-4,k)- (24.)*data(:,m2-5,k) )/(120.*h)   
+
+!Compute the y derivatives for plane k, overwriting the array work
+ if( LAPACK_FLAG == 'double' ) then
+!!!  call DGBTRS('N',m2,2,2,m1,Grid(level)%ddy,7,Grid(level)%piv_dy,work(1,1),m2,ierr)
+      write(0,*) 'LAPACK_FLAG = double instead of single'
+      stop
+ elseif( LAPACK_FLAG == 'single' ) then
+  call SGBTRS('N',m2,2,2,m1,Grid(level)%ddy,7,Grid(level)%piv_dy,work(1,1),m2,ierr)
+ endif
+
+!If deriv. end conditions are 'periodic' (flag = 5) then
+!overwrite the endpts with nonlocal estimate
+ if( flag .eq. 5 ) then
+  work(1,:) = ( 2.*data(:,m2-2,k) -16.*data(:,m2-1,k)      &
+              +16.*data(:,2,k) -2.*data(:,3,k)  )/(24.*h)  
+  work(m2,:)=work(1,:)
+
+  work(2,:) = ( 2.*data(:,m2-1,k) -16.*data(:,m2,k)      &
+              +16.*data(:,3,k) -2.*data(:,4,k)  )/(24.*h)  
+  work(m2-1,:) = ( 2.*data(:,m2-3,k) -16.*data(:,m2-2,k)      &
+              +16.*data(:,1,k) -2.*data(:,2,k)  )/(24.*h)  
+
+  work(3,:) = ( 2.*data(:,m2,k) -16.*data(:,2,k)      &
+              +16.*data(:,4,k) -2.*data(:,5,k)  )/(24.*h)  
+  work(m2-2,:) = ( 2.*data(:,m2-4,k) -16.*data(:,m2-3,k)      &
+              +16.*data(:,m2-1,k) -2.*data(:,m2,k)  )/(24.*h)  
+
+ endif
+      
+!Store the results in deriv(:,:,k)
+ deriv(1:m1,1:m2,k)=transpose( work(1:m2,1:m1)  )
+
+!Go on to the next k plane
+ enddo
+
+ deallocate( work )
+end subroutine compact_ddy
+
+
+subroutine compact_ddz(data,deriv,flag,end_values,m1,m2,m3)
+! Routine to compute the x derivative (3rd dimension)
+! of a 3d field stored in data(1:m1,1:m2,1:m3) assuming
+! a uniformly spaced grid mesh with dz=h.
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+!       inputs
+!              data        m1,m2,m3 array of input values
+!              m1,m2,m3    dimensions of field to be differentiated
+!              h           z grid spacing
+!              flag        flag which identifies end point scheme
+!              end_values  the end values for the derivatives
+!                          (required but obsolete)
+!
+!       output
+!              deriv       m1,m2,m3 array containing the optimized
+!                          6th order accurate d/dz(data)
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ use grid_info
+ use user_parameters,  only: LAPACK_FLAG
+ implicit none
+
+ integer, intent(in)                              :: flag,m1,m2,m3
+ real, dimension(m1,m2,m3), intent(in)            :: data
+ real, dimension(m1,m2,m3), intent(out)           :: deriv
+ real, dimension(2), intent(in)                   :: end_values
+!!! double precision, dimension(:,:), allocatable    :: work
+ real, dimension(:,:), allocatable    :: work
+ integer                                          :: i,j,k,ierr,level,maxlevels
+ real                                             :: h
+ parameter(maxlevels=12)
+
+ allocate( work(m3,m1) )
+
+! determine an appropriate grid level from m3
+ do level=0,maxlevels-1
+  if( m3 == Grid(level)%n3 ) goto 999
+ enddo
+999 continue   ! can use ddx and piv arrays from grid level 
+ h = Grid(level)%dzeta
+
+!loop through each xz plane
+       
+ do j=1,m2
+
+!create rhs vectors, store in work(:,:,1)
+ work(1,:)=( -(274.)*data(:,j,1)+(600.)*data(:,j,2)   &
+             -(600.)*data(:,j,3)+(400.)*data(:,j,4)   &
+             -(150.)*data(:,j,5)+(24.)*data(:,j,6) )/(120.*h)   
+!    work(2,:)=(-(5./9.)*data(:,j,1)-(1./2.)*data(:,j,2)   &
+!                 +(1.)*data(:,j,3)+(1./18.)*data(:,j,4) )/h
+ work(2,:)=( -(24.)*data(:,j,1)-(130.)*data(:,j,2)   &
+             +(240.)*data(:,j,3)-(120.)*data(:,j,4)   &
+             +(40.)*data(:,j,5)-(6.)*data(:,j,6) )/(120.*h)   
+ work(3,:)=( (1./36.)* ( data(:,j,5) - data(:,j,1) )  &
+            + (7./9.)* ( data(:,j,4) - data(:,j,2) ) )/h
+
+ do k=4,m3-3
+  work(k,:)=( (c1/6.)* ( data(:,j,k+3) - data(:,j,k-3) )  &
+             + (b1/4.)* ( data(:,j,k+2) - data(:,j,k-2) )  &
+             + (a1/2.)* ( data(:,j,k+1) - data(:,j,k-1) ) )/h
+ enddo
+
+ work(m3-2,:)=(-(1./36.)* ( data(:,j,m3-4) - data(:,j,m3) )  &
+            - (7./9.)* ( data(:,j,m3-3) - data(:,j,m3-1) ) )/h
+!    work(m3-1,:)= ( (5./9.)*data(:,j,m3)+(1./2.)*data(:,j,m3-1)   &
+!                      -(1.)*data(:,j,m3-2)-(1./18.)*data(:,j,m3-3) )/h
+ work(m3-1,:)=( (24.)*data(:,j,m3)+(130.)*data(:,j,m3-1)   &
+             -(240.)*data(:,j,m3-2)+(120.)*data(:,j,m3-3)   &
+             -(40.)*data(:,j,m3-4)+(6.)*data(:,j,m3-5) )/(120.*h)   
+ work(m3,:)=( (274.)*data(:,j,m3)-(600.)*data(:,j,m3-1)   &
+             +(600.)*data(:,j,m3-2)-(400.)*data(:,j,m3-3)   &
+             +(150.)*data(:,j,m3-4)-(24.)*data(:,j,m3-5) )/(120.*h)   
+
+!Compute the z derivatives for plane j, overwriting the array work
+  if( LAPACK_FLAG == 'double' ) then
+!!!   call DGBTRS('N',m3,2,2,m1,Grid(level)%ddz,7,Grid(level)%piv_dz,work(1,1),m3,ierr)
+      write(0,*) 'LAPACK_FLAG = double instead of single'
+      stop
+  elseif( LAPACK_FLAG == 'single' ) then
+!!!      write(0,*) '********** ddz = ', Grid(level)%ddz
+!!!      write(0,*) '********** piv_dz = ', Grid(level)%piv_dz
+   call SGBTRS('N',m3,2,2,m1,Grid(level)%ddz,7,Grid(level)%piv_dz,work(1,1),m3,ierr)
+  endif
+
+!!!  do i=1,m1
+!!!  do k=1,m3
+!!!     if(abs(work(k,i)) .lt. 1.e-20) work(k,i) = 0.0
+!!!  enddo
+!!!  enddo
+
+!Store the results in deriv(:,:,k)
+ do i=1,m1
+  deriv(i,j,:)=work(:,i)
+ enddo
+
+!If deriv. end conditions are 'periodic' (flag = 5) then
+!overwrite the endpts w/ the avg of the endpts
+ if( flag .eq. 5 ) then
+  work(1,:)=(deriv(:,j,1)+deriv(:,j,m3))/2.
+  deriv(:,j,1)=work(1,:)
+  deriv(:,j,m3)=work(1,:)
+ endif
+      
+!Go on to the next j plane
+ enddo
+
+ deallocate ( work )
+end subroutine compact_ddz
+
+subroutine compact_ddz_mpi(data,deriv,flag,end_values,m1,m2,m3)
+!     This version computes the z derivative of a block of 3d data.
+!     There are three ways in which this routine can be used, depending
+!     on the values of nz, m3 and nzderiv. The cases are denoted CASE1
+!     CASE2 and CASE3 as described below.
+!
+!     CASE1: nprocs=1 and nzderiv=m3=nz
+!            Serial execution. No communication calls necessary.
+!            Derivatives implemented with single call to
+!            compact_ddz with a vector length of nzderiv.
+
+!     CASE2: nprocs>1 and nzderiv=m3 < nz
+!            Parallel execution but no data exchanges between processors
+!            required. Each processor computes z derivatives over its own
+!            data space, i.e. over vector lengths of m3.
+!            Derivatives implemented by having each processor execute
+!            compact_ddz with a vector length of nzderiv.
+!
+!     CASE3: nprocs>1 and nzderiv=nz > m3. 
+!            No processor possesses the required data locally and so
+!            data exchanges between processors are required both before
+!            and after differentiation. The algorithm is described below.            
+!     On entry, each process possesses a "slice" of the total data space,
+!     i.e. a block with dimensions (m1,m2,m3). Since the compact schemes
+!     are nonlocal, i.e. all nz elements are required to compute a z derivative.
+!     In this implementation, each process will compute z derivatives within
+!     a "block of columns", i.e. a block of data of size (m1/nprocs,m2,nz)
+!     or ( (m1-1)/nprocs,m2,n2 ) if ffts are being used in x&y
+!     Since the basic data distribution consists of "blocks of rows", exchange
+!     of data between processes is required. 
+!
+!     Each process lacks (nprocs-1) blocks of size (locnx,m2,m3)
+!     needed to make up its "block of columns". On entry, each process
+!     has (nprocs-1)  data "blocks" of size (locnx,m2,m3) that are
+!     not needed locally but required by other processes to complete their
+!     "block of columns".
+!
+!     This algorithm thus proceeds as follows:
+!     (1) ship data not needed locally and receive data required to
+!           complete a "block of columns".
+!     (2) compute z derivatives over the processes "block of columns".
+!     (3) send results to other processes, receive their results
+!     (4) store the results in appropriate block locations of the original
+!           "slice" of the total data space.
+!*******************************************************
+ use mpi_parameters
+ use boundary_information
+ implicit none
+
+ integer, intent(in)                              :: flag,m1,m2,m3
+ real, dimension(m1,m2,m3), intent(in)            :: data
+ real, dimension(m1,m2,m3), intent(out)           :: deriv
+ real, dimension(2), intent(in)                   :: end_values
+ integer                                          :: i,j,k,nzderiv,locnx
+
+ include 'mpif.h'
+ integer          :: tag,ierr,status_array(MPI_STATUS_SIZE,2*nprocs),reqs(2*nprocs)
+ integer          :: dest,source,istart,iend,kstart,kend,nz
+ integer          :: sizeofreal
+ integer          :: iproc,numwords
+ real, allocatable                      :: block_of_cols(:,:,:),col_of_derivs(:,:,:)
+ real, dimension(:), allocatable        :: work
+   
+ if( boundary_type2(1,1)=='periodic' .and. boundary_type4(1,1)=='periodic' ) then
+  locnx = (m1-1)/nprocs
+ else
+  locnx = m1/nprocs
+ endif
+
+ allocate ( block_of_cols(locnx,m2,nprocs*m3) )
+ allocate ( col_of_derivs(locnx,m2,nprocs*m3) )
+ allocate ( work(m1*m2*m3*2) )
+!!! xlv mpi_attach mal placé 
+!!! call MPI_BUFFER_ATTACH( work,m1*m2*m3*16,ierr)    ! size of buffer in bytes
+!!!
+
+ nz=m3*nprocs   ! global # of points
+ nzderiv=nz     ! always do global differentiation
+
+! Both CASE1 and CASE2 require simple calls to compact_ddz
+  if( nprocs .eq. 1 .and. m3 .eq. nz .and. nzderiv .eq. nz ) then
+   goto 999   ! CASE1
+  elseif(nprocs .gt. 1 .and. nzderiv .eq. m3 .and. m3 .lt. nz) then
+   goto 999   ! CASE2
+  elseif(nprocs .gt. 1 .and. nzderiv .eq. nz .and. nz .gt. m3) then
+!  CASE3 logic
+
+!!! xlv
+   call MPI_BUFFER_ATTACH( work,m1*m2*m3*16,ierr)    ! size of buffer in
+!!!   
+
+   init_derived_type=0   ! always recompute, lots of grid cycling, confusion easy
+!  create a derived data type 
+   if( init_derived_type .eq. 0 ) then
+    call MPI_TYPE_EXTENT(MPI_REAL,sizeofreal,ierr)
+!   data type for 1d section of basic data slice: locnx
+    call MPI_TYPE_VECTOR(locnx,1,1,MPI_REAL,oneslice,ierr)
+!   data type for 2d section of basic data slice: m2 1d sections
+    call MPI_TYPE_HVECTOR(m2,1,m1*sizeofreal,oneslice,twoslice,ierr)
+!   data type for 3d section of basic data slice: nz/nprocs 2d sections
+    call MPI_TYPE_HVECTOR(m3,1,m1*m2*sizeofreal,   &
+                          twoslice,subslice,ierr)
+    call MPI_TYPE_COMMIT(subslice,ierr)
+    init_derived_type=-9999
+   endif
+
+!(1)  Ship portions of my slice needed by other processes and
+!     receive data needed to fill in "block_of_cols"
+
+!**************
+!  Post non-blocking receives first, establishing buffers for the sends to use.
+      do iproc=0,nprocs-1    ! iproc is the processor I will exchange data with
+       source=iproc
+       kstart=(iproc*m3)+1         ! start index for receiving data col
+       numwords=locnx*m2*m3        ! # of real words to store in col w/ each send
+       tag = 777
+       j=iproc+1    ! counter for message request label
+       call MPI_IRECV(block_of_cols(1,1,kstart),numwords,MPI_REAL,source,tag,comm,reqs(j),ierr)
+      enddo
+      call MPI_BARRIER(comm,ierr)  ! make sure all receive posted before any sends are executed
+
+!  Post non-blocking sends
+      do iproc=0,nprocs-1    ! iproc is the processor I will exchange data with
+       dest=iproc
+       istart=(iproc*locnx)+1         ! start index for sending data slab
+       numwords=1  ! i.e. 1 word of type subslice
+       tag = 777
+       j=nprocs+iproc+1  ! counter for message request label
+       call MPI_IBSEND(data(istart,1,1),numwords,subslice,dest,tag,comm,reqs(j),ierr)
+      enddo
+
+!     make sure all communications are done
+      call MPI_WAITALL(2*nprocs,reqs,status_array,ierr)
+!**************
+
+!(2)  Compute z derivatives over my "block of columns".
+!     Store results in the array "col_of_derivs".
+
+ call compact_ddz(block_of_cols,col_of_derivs,flag,end_values,locnx,m2,nz)
+
+
+!(3) Send derivative results to other processes
+!    and receive their results
+
+!**************
+!  Post non-blocking receives first, establishing buffers for the sends to use.
+     do iproc=0,nprocs-1    ! iproc is the processor I will exchange data with
+      source=iproc
+      istart=(iproc*locnx)+1      ! start index for recieving slab data
+      numwords=1   ! i.e. 1 word of type subslice
+      tag =778 
+      j=iproc+1
+      call MPI_IRECV(deriv(istart,1,1),numwords,subslice,source,tag,comm,reqs(j),ierr)
+     enddo
+     call MPI_BARRIER(comm,ierr)
+
+!  Post non-blocking sends
+     do iproc=0,nprocs-1    ! iproc is the processor I will exchange data with
+      dest=iproc
+      kstart=(iproc*m3)+1         ! start index for sending col data
+      numwords=locnx*m2*m3        ! # of real words to send from col w/ each send
+      tag = 778
+      j=nprocs+iproc+1
+      call MPI_IBSEND(col_of_derivs(1,1,kstart),numwords,MPI_REAL,dest,tag,comm,reqs(j),ierr)
+     enddo
+
+!     make sure all communications are done
+      call MPI_WAITALL(2*nprocs,reqs,status_array,ierr)
+!**************
+
+ if( boundary_type2(1,1)=='periodic' .and. boundary_type4(1,1)=='periodic' ) then
+  deriv(m1,:,:)=deriv(1,:,:)  ! we didn't compute the extra bdry point
+ endif
+
+
+ call MPI_BUFFER_DETACH( work,m1*m2*m3*16,ierr)    ! size of buffer in bytes
+
+ call MPI_TYPE_FREE(oneslice,ierr)
+ call MPI_TYPE_FREE(twoslice,ierr)
+ call MPI_TYPE_FREE(subslice,ierr)
+return    ! end CASE3 
+
+ else
+  write(0,*) ' size logic error using compact_ddz_mpi '
+  write(0,*) ' nz : ',nz
+  write(0,*) ' locnz : ',m3
+  write(0,*) ' nzderiv : ',nzderiv
+  write(0,*) ' nprocs : ',nprocs
+ endif
+
+999   continue   ! CASE1 & CASE2
+ call compact_ddz(data,deriv,flag,end_values,m1,m2,m3)
+
+ deallocate(work,block_of_cols,col_of_derivs)
+
+end subroutine compact_ddz_mpi
+
Index: /trunk/00FlowSolve_PL/SRC/dissipation.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/dissipation.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/dissipation.f90	(revision 6)
@@ -0,0 +1,339 @@
+subroutine dissipation
+#define DEBUG_LEVEL 1
+ use counters_flags_etc
+
+ if( closure_flag == 'DNS' ) then
+  call diss_DNS
+ elseif( closure_flag == 'LES' ) then
+! call diss_LES
+ endif
+end subroutine dissipation
+
+subroutine diss_DNS 
+#define DEBUG_LEVEL 1
+! Routine to calculate the diffusion terms  in the
+! transformed governing equations for a DNS.
+! Results are added to the partial results stored in rhs1-4/5.
+! UPDATE:  MULTIPLICATIONS BY  DLESS VISCOSITY/DIFFUSIVITY 
+!          NOW DONE IN grad2_u_cartesion SO Km Kt CAN BE
+!          FUNCTIONS OF Z
+
+ use grid_info
+ use dependent_variables
+ use rhs_variables
+ use pde_parameters
+ use counters_flags_etc
+ use boundary_information
+ use mpi_parameters
+ use user_parameters
+ use dimensional_scales
+
+ implicit none
+ include '../input/problem_size.h'
+ real, dimension(:,:,:),allocatable     :: g2_u,g2_v,g2_w
+ real, dimension(:,:,:),allocatable     :: data,g2_s1,g2_s2
+ real                                   :: viscosity,diffusivity1,diffusivity2,xx
+ integer                                :: varid
+
+#if DEBUG_LEVEL >=1
+  if(myid==0) write(0,*) 'hello world from diss_DNS'
+#endif
+
+ allocate( g2_u(nx,ny,locnz), g2_v(nx,ny,locnz) )
+ g2_u(:,:,:) = 0.
+ g2_v(:,:,:) = 0.
+ allocate( g2_w(nx,ny,locnz), g2_s1(nx,ny,locnz) )
+ g2_w(:,:,:) = 0.
+ g2_s1(:,:,:) = 0.
+ if(num_scalars>1) then
+   allocate( g2_s2(nx,ny,locnz) )
+   g2_s2(:,:,:) = 0.
+ endif
+ allocate( data(nx,ny,locnz) )
+ data(:,:,:) = 0.
+
+! Compute grad^2(total s1),store result in  data
+  varid=4
+  do j=1,ny
+   data(:,j,:)=s1(:,j,:)+s1_bar(1:nx,1:locnz)
+  enddo
+  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!call grad2_u(data,g2_rho,4)
+  call grad2_u_cartesian(data,g2_s1,varid)
+
+if(num_scalars>1) then
+! Compute grad^2(total s2),store result in  data
+  varid=5
+  do j=1,ny
+   data(:,j,:)=s2(:,j,:)+s2_bar(1:nx,1:locnz)
+  enddo
+  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!call grad2_u(data,g2_rho,4)
+  call grad2_u_cartesian(data,g2_s2,varid)
+endif
+
+! Compute grad^2(u), store in g2_u
+  varid=1
+  do j=1,ny              ! u = cartesian x velocity
+   data(:,j,:)= Grid(0)%x_xi(1:nx,1:locnz)*U(:,j,:)   &
+              + Grid(0)%x_zeta(1:nx,1:locnz)*W(:,j,:) 
+  enddo
+  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!call grad2_u(data,g2_u,1)
+  call grad2_u_cartesian(data,g2_u,varid)
+
+! Compute grad^2(v), store in g2_v
+  varid=2
+  data=v
+  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!call grad2_u(data,g2_v,2)
+  call grad2_u_cartesian(data,g2_v,varid)
+
+! Compute grad^2(w), store in g2_w
+  varid=3
+  do j=1,ny              ! w = cartesian z velocity
+   data(:,j,:)= Grid(0)%z_xi(1:nx,1:locnz)*U(:,j,:)    &
+              + Grid(0)%z_zeta(1:nx,1:locnz)*W(:,j,:) 
+  enddo
+  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!call grad2_u(data,g2_w,3)
+  call grad2_u_cartesian(data,g2_w,varid)
+
+! Add diffusion terms to the rhs of each equation (3 momentum, 1 density)
+! note that U = J_matrix(i,k,1,1)*u + J_matrix(i,k,2,1)*w
+! note that W = J_matrix(i,k,1,2)*u + J_matrix(i,k,2,2)*w
+! UPDATE VISCOSITY?DIFFUSIVITY ALREADY DONE 
+! RATHER THAN REMOVING THE STATEMENTS, JUST SET VALUES TO 1.0
+
+  viscosity = 1.
+  diffusivity1 = 1.
+  diffusivity2 = 1.
+  do j=1,ny
+
+   rhs1(:,j,:,MM0) = rhs1(:,j,:,MM0)+                                  &
+                viscosity *( g2_u(:,j,:)*Grid(0)%J_matrix(1:nx,1:locnz,1,1)    &
+                            +g2_w(:,j,:)*Grid(0)%J_matrix(1:nx,1:locnz,2,1) )
+
+   rhs2(:,j,:,MM0) = rhs2(:,j,:,MM0) + viscosity * g2_v(:,j,:)
+
+   rhs3(:,j,:,MM0) = rhs3(:,j,:,MM0)+                                  &
+                viscosity *( g2_u(:,j,:)*Grid(0)%J_matrix(1:nx,1:locnz,1,2)    &
+                            +g2_w(:,j,:)*Grid(0)%J_matrix(1:nx,1:locnz,2,2) )
+
+   rhs4(:,j,:,MM0) = rhs4(:,j,:,MM0) + diffusivity1 * g2_s1(:,j,:)
+   
+   if(num_scalars>1) rhs5(:,j,:,MM0) = rhs5(:,j,:,MM0) + diffusivity2 * g2_s2(:,j,:)
+
+  enddo
+
+ deallocate( g2_u,g2_v,g2_w,g2_s1,data )
+ if(num_scalars>1) deallocate(g2_s2)
+end subroutine diss_DNS
+
+
+subroutine grad2_u(u,g2u,id)
+#define DEBUG_LEVEL 1
+! This routine will calculate grad^2 u where
+! the laplacian is defined with respect to
+! the cartesion coordinate system, i.e. wrt x,y and z
+! and u is an arbitrary scalar of assumed size(nx,ny,locnz)
+
+ use grid_info
+ use boundary_information
+ use mpi_parameters
+ use counters_flags_etc
+
+ implicit none
+ include '../input/problem_size.h'
+ integer                               :: flag,id     
+ real                                  :: h,end_values(2)
+ real, dimension(nx,ny,locnz)          :: u,g2u
+ real, dimension(:,:,:,:), allocatable :: work
+ allocate ( work(nx,ny,locnz,5) )
+ work(:,:,:,:) = 0.
+
+#if DEBUG_LEVEL >=1
+  if(myid==0) write(0,*) ' hello world from grad2_u'
+#endif
+
+! copy u into output array g2u
+  g2u=u
+
+! Compute u_xi, u_eta, u_zeta, store in work 1,2,3
+  h=Grid(0)%dxi
+  flag=1  ! no assumed end conditions
+  end_values=-9999999
+  call compact_ddx(g2u,work(1,1,1,1),flag,end_values,nx,ny,locnz)
+
+  h=Grid(0)%deta
+  call compact_ddy(g2u,work(1,1,1,2),flag,end_values,nx,ny,locnz)
+
+  h=Grid(0)%dzeta
+  call compact_ddz_mpi(g2u,work(1,1,1,3),flag,end_values,nx,ny,locnz)
+
+! Store u_x, u_y, u_z in work 4,2,3 respectively
+  do j=1,ny
+   do i=1,nx
+    do k=1,locnz
+     work(i,j,k,4)=work(i,j,k,1)*Grid(0)%J_matrix(i,k,1,1)+work(i,j,k,3)*Grid(0)%J_matrix(i,k,1,2)
+     work(i,j,k,3)=work(i,j,k,1)*Grid(0)%J_matrix(i,k,2,1)+work(i,j,k,3)*Grid(0)%J_matrix(i,k,2,2)           
+    enddo
+   enddo
+  enddo
+  do j=1,ny
+   work(:,j,:,2)=work(:,j,:,2)/Grid(0)%y_eta(j)
+  enddo
+	
+! Compute (u_x)_zeta  (u_x)_xi , store in work 1 and 5 respectively
+  h=Grid(0)%dzeta
+  call compact_ddz_mpi(work(1,1,1,4),work(1,1,1,1),flag,end_values,nx,ny,locnz)
+     
+  h=Grid(0)%dxi
+  call compact_ddx(work(1,1,1,4),work(1,1,1,5),flag,end_values,nx,ny,locnz)
+
+! Store u_xx in g2u
+  do j=1,ny
+   g2u(:,j,:)=(work(:,j,:,5)*Grid(0)%J_matrix(1:nx,1:locnz,1,1)    &
+              +work(:,j,:,1)*Grid(0)%J_matrix(1:nx,1:locnz,1,2))
+  enddo
+
+! Compute (u_z)_zeta  (u_z)_xi , store in work 4 and 5 respectively
+  h=Grid(0)%dzeta
+  call compact_ddz_mpi(work(1,1,1,3),work(1,1,1,4),flag,end_values,nx,ny,locnz)
+
+  h=Grid(0)%dxi
+  call compact_ddx(work(1,1,1,3),work(1,1,1,5),flag,end_values,nx,ny,locnz)
+
+! Add u_zz to g2u
+  do j=1,ny
+   g2u(:,j,:)=g2u(:,j,:)                                  &
+             + work(:,j,:,5)*Grid(0)%J_matrix(1:nx,1:locnz,2,1)   &
+             + work(:,j,:,4)*Grid(0)%J_matrix(1:nx,1:locnz,2,2)   
+  enddo
+
+! Compute (u_y)_eta   store in work 5
+  h=Grid(0)%deta
+  call compact_ddy(work(1,1,1,2),work(1,1,1,5),flag,end_values,nx,ny,locnz)
+
+! Add u_yy to g2u
+  do j=1,ny
+   g2u(:,j,:) = g2u(:,j,:) + work(:,j,:,5)/Grid(0)%y_eta(j)
+  enddo
+
+! g2u now has u_xx + u_yy + u_zz
+
+ deallocate ( work )
+end subroutine grad2_u
+
+
+subroutine grad2_u_cartesian(u,g2u,varid)
+#define DEBUG_LEVEL 1
+! This routine will calculate grad^2 u where
+! the laplacian is defined with respect to
+! the cartesion coordinate system, i.e. wrt x,y and z
+! and u is an arbitrary scalar of assumed size(nx,ny,locnz)
+!********* SPECIAL CASE ****************
+! assume x_xi and y_eta are constants
+!        z_zeta varies only with zeta
+!***************************************
+
+ use grid_info
+ use boundary_information
+ use mpi_parameters
+ use counters_flags_etc
+ use user_parameters       ! Km_of_z,Kt_of_z,Kh 
+                           ! HV_METHOD,HV_RATIO
+ use dimensional_scales    ! nu/kappa are scaling factors for visc/diff
+
+ implicit none
+ include '../input/problem_size.h'
+ real                                  :: r_LU
+ integer                               :: flag,varid
+ real                                  :: h,end_values(2)
+ real, dimension(nx,ny,locnz)          :: u,g2u
+ real, dimension(:,:,:,:), allocatable :: work
+ allocate ( work(nx,ny,locnz,4) )
+ work(:,:,:,:) = 0.
+
+#if DEBUG_LEVEL >=1
+  if(myid==0) write(0,*) ' hello world from grad2_u_cartesian'
+#endif
+
+!(1) Compute u_xi, u_eta, u_zeta, store in work 1,2,3
+  h=Grid(0)%dxi
+  flag=1  ! no assumed end conditions
+  end_values=-9999999
+  call compact_ddx(u,work(1,1,1,1),flag,end_values,nx,ny,locnz)
+
+  h=Grid(0)%deta
+  call compact_ddy(u,work(1,1,1,2),flag,end_values,nx,ny,locnz)
+
+  h=Grid(0)%dzeta
+  call compact_ddz_mpi(u,work(1,1,1,3),flag,end_values,nx,ny,locnz)
+  do j=1,ny
+   work(:,j,:,3) = (1./Grid(0)%z_zeta(:,:)) * work(:,j,:,3)
+  enddo
+  
+!(1.5) Multiply by (dimensionless) spatially variable eddy viscosity/diffusivity
+  r_LU = 1./(L_scale*U_scale)
+  if( HV_METHOD==1 ) then
+   if( varid <= 3 ) then
+    do i=1,nx
+     do j=1,ny
+      work(i,j,:,1) = HV_RATIO*r_LU*Km_of_z(:) * work(i,j,:,1)
+      work(i,j,:,2) = HV_RATIO*r_LU*Km_of_z(:) * work(i,j,:,2)
+      work(i,j,:,3) = r_LU*Km_of_z(:) * work(i,j,:,3)
+     enddo
+    enddo
+   elseif( varid >=4 ) then
+    do i=1,nx
+     do j=1,ny
+      work(i,j,:,1) = HV_RATIO*r_LU*Kt_of_z(:) * work(i,j,:,1)
+      work(i,j,:,2) = HV_RATIO*r_LU*Kt_of_z(:) * work(i,j,:,2)
+      work(i,j,:,3) = r_LU*Kt_of_z(:) * work(i,j,:,3)
+     enddo
+    enddo
+   endif
+  elseif( HV_METHOD==2 ) then
+   if( varid <= 3 ) then
+    do i=1,nx
+     do j=1,ny
+      work(i,j,:,1) = r_LU*Kh * work(i,j,:,1)
+      work(i,j,:,2) = r_LU*Kh * work(i,j,:,2)
+      work(i,j,:,3) = r_LU*Km_of_z(:) * work(i,j,:,3)
+     enddo
+    enddo
+   elseif( varid >=4 ) then
+    do i=1,nx
+     do j=1,ny
+      work(i,j,:,1) = r_LU*Kh * work(i,j,:,1)
+      work(i,j,:,2) = r_LU*Kh * work(i,j,:,2)
+      work(i,j,:,3) = r_LU*Kt_of_z(:) * work(i,j,:,3)
+     enddo
+    enddo
+   endif
+  endif
+  
+
+!(2) Differentiate again
+  h=Grid(0)%dxi
+  end_values=-9999999
+  call compact_ddx(work(1,1,1,1),work(1,1,1,4),flag,end_values,nx,ny,locnz)
+
+  h=Grid(0)%deta
+  call compact_ddy(work(1,1,1,2),work(1,1,1,1),flag,end_values,nx,ny,locnz)
+
+  h=Grid(0)%dzeta
+  call compact_ddz_mpi(work(1,1,1,3),work(1,1,1,2),flag,end_values,nx,ny,locnz)
+  do j=1,ny
+   work(:,j,:,2) = (1./Grid(0)%z_zeta(:,:)) * work(:,j,:,2)
+  enddo
+
+!  HV_RATIO is a user-defined parameter defined as nu_horiz/nu where nu is taken as nu_vertical
+  do k=1,locnz
+   do j=1,ny
+    do i=1,nx
+     g2u(i,j,k) = ((1./Grid(0)%x_xi(i,k))**2) * work(i,j,k,4)                      &
+                + ((1./Grid(0)%y_eta(j))**2) * work(i,j,k,1)  + work(i,j,k,2)
+    enddo
+   enddo
+  enddo
+
+
+ deallocate ( work )
+end subroutine grad2_u_cartesian
Index: /trunk/00FlowSolve_PL/SRC/divergence.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/divergence.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/divergence.f90	(revision 6)
@@ -0,0 +1,101 @@
+subroutine divergence
+#define DEBUG_LEVEL 1
+!     Routine to take the divergence of a three dimensional
+!     flow field expressed with U and W contravariant components
+!     and a normal v component.
+!     
+!     Though the grid is stretched in the y direction, we use v rather
+!     than V for the velocity, which affects the form of
+!     the last term in the divergence. 
+!      
+!     "div_u"(U_vector) == { (det_J*U)_xi + (det_J*W)_zeta }/{det_J} + (1/y_eta) * d/d eta (v) 
+!  
+!     where   det_J  = x_xi*z_zeta - x_zeta*z_xi i.e. the determinant of the Jacobian matrix
+!
+
+ use mpi_parameters
+ use grid_info
+ use dimensional_scales
+ use intermediate_variables, U=>u_star, v=>v_star, W=>w_star
+ use boundary_information
+ use counters_flags_etc
+ use mpi_parameters
+ use integration_weights
+ use immersed_boundary
+ implicit none
+
+ real                     :: h,end_values(2)
+ real                     :: xx, mean_value
+ real, allocatable        :: work(:,:,:,:)
+ integer                  :: flag
+ include 'mpif.h'
+ include '../input/problem_size.h'
+ allocate ( work(nx,ny,locnz,2) )
+ work(:,:,:,:) = 0.
+
+
+#if DEBUG_LEVEL >= 1
+ if(myid==0) write(0,*) 'hello world from divergence'
+#endif
+
+!    modified source such that G~ dot n^ = 0 at top Marshall et al JGR 97  5738
+     if(myid==numprocs-1) W(:,:,locnz)=0.
+
+
+! form J*U and take xi derivative, store result in work(:,:,:,1)
+ do j=1,ny
+  work(:,j,:,1)=Grid(0)%det_J(:,:)*U(:,j,:)
+ enddo
+
+ flag=1    ! as default, don't prescribe end values
+ end_values=-1e19 !dummy values
+ h=Grid(0)%dxi
+ call compact_ddx(work(1,1,1,1),work(1,1,1,2),flag,end_values,nx,ny,locnz)
+
+! store  (det_J*U)_xi /{det_J} in div_u(:,:,:,new)
+ do j=1,ny
+  div_u(:,j,:,new)= work(:,j,:,2)/Grid(0)%det_J(:,:)
+ enddo
+
+! form J*W and take zeta derivative, store result in work(:,:,:,1)
+ do j=1,ny
+  work(:,j,:,1)=Grid(0)%det_J(:,:)*W(:,j,:)
+ enddo
+
+ h=Grid(0)%dzeta
+ call compact_ddz_mpi(work(1,1,1,1),work(1,1,1,2),flag,end_values,nx,ny,locnz)
+
+! add (det_J*W)_zeta }/{det_J} to ans
+ do j=1,ny
+  div_u(:,j,:,new)= div_u(:,j,:,new) +   &
+                       work(:,j,:,2)/Grid(0)%det_J(:,:)
+ enddo
+
+! Now compute the v part
+! take eta derivative of v, store result in work(:,:,:,1), use work(:,:,:,2)
+! as scratch space
+       
+ flag=1    ! don't prescribe end values
+ h=Grid(0)%deta
+ call compact_ddy(v,work(1,1,1,1),flag,end_values,nx,ny,locnz)
+
+! divide by y_eta to obtain the y derivative and add to divergence
+ do j=1,ny
+  div_u(:,j,:,new) = ( div_u(:,j,:,new)     &
+                     + work(:,j,:,1)/Grid(0)%y_eta(j) )
+ enddo
+
+
+! calculate the rms divergence
+ xx=sum( div_u(:,:,:,new)**2 )/float(nx*ny*locnz)   ! local rms value
+ call MPI_ALLREDUCE(xx,mean_value,1,MPI_REAL,MPI_SUM,comm,ierr)
+ div_rms = mean_value/(numprocs) * U_scale/t_scale   !    dimensional units
+
+ if( myid == 0 ) then
+  open(1,file='../output/div_rms',position='append')
+   write(1,*) t*t_scale,div_rms
+  close(1)
+ endif
+
+deallocate( work )      
+end subroutine divergence
Index: /trunk/00FlowSolve_PL/SRC/fftw_kw.inc
===================================================================
--- /trunk/00FlowSolve_PL/SRC/fftw_kw.inc	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/fftw_kw.inc	(revision 6)
@@ -0,0 +1,28 @@
+!     This file contains PARAMETER statements for various constants
+!     that can be passed to FFTW routines.  You should include
+!     this file in any FORTRAN program that calls the fftw_f77
+!     routines (either directly or with an #include statement
+!     if you use the C preprocessor).
+
+      integer FFTW_FORWARD,FFTW_BACKWARD
+      parameter (FFTW_FORWARD=-1,FFTW_BACKWARD=1)
+
+      integer FFTW_REAL_TO_COMPLEX,FFTW_COMPLEX_TO_REAL
+      parameter (FFTW_REAL_TO_COMPLEX=-1,FFTW_COMPLEX_TO_REAL=1)
+
+      integer FFTW_ESTIMATE,FFTW_MEASURE
+      parameter (FFTW_ESTIMATE=0,FFTW_MEASURE=1)
+
+      integer FFTW_OUT_OF_PLACE,FFTW_IN_PLACE,FFTW_USE_WISDOM
+      parameter (FFTW_OUT_OF_PLACE=0)
+      parameter (FFTW_IN_PLACE=8,FFTW_USE_WISDOM=16)
+
+      integer FFTW_THREADSAFE
+      parameter (FFTW_THREADSAFE=128)
+
+!     Constants for the MPI wrappers:
+      integer FFTW_TRANSPOSED_ORDER, FFTW_NORMAL_ORDER
+      integer FFTW_SCRAMBLED_INPUT, FFTW_SCRAMBLED_OUTPUT
+      parameter(FFTW_TRANSPOSED_ORDER=1, FFTW_NORMAL_ORDER=0)
+      parameter(FFTW_SCRAMBLED_INPUT=8192)
+      parameter(FFTW_SCRAMBLED_OUTPUT=16384)
Index: /trunk/00FlowSolve_PL/SRC/filter4.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/filter4.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/filter4.f90	(revision 6)
@@ -0,0 +1,529 @@
+subroutine filter
+#define DEBUG_LEVEL 1
+ use mpi_parameters
+ use boundary_information
+ use dependent_variables
+ use counters_flags_etc
+ implicit none
+
+ integer                               :: sizeofreal,locnx
+ include '../input/problem_size.h'
+ include 'mpif.h'
+
+! At designated time steps, apply fourth order compact spatial filters
+if( mod(istep,i_filter) == 0  .and. istep .ne. 0 ) then
+
+#if DEBUG_LEVEL >= 1
+ if(myid==0) write(0,*) 'hello world from subroutine filter '
+#endif
+
+ if( boundary_type2(1,1)=='periodic' .and. boundary_type4(1,1)=='periodic' ) then
+   locnx = (nx-1)/nprocs
+  else
+   locnx = nx/nprocs
+  endif
+
+!  create a derived data type
+  call MPI_TYPE_EXTENT(MPI_REAL,sizeofreal,ierr)
+  call MPI_TYPE_VECTOR(locnx,1,1,MPI_REAL,oneslice,ierr)
+  call MPI_TYPE_HVECTOR(ny,1,nx*sizeofreal,oneslice,twoslice,ierr)
+  call MPI_TYPE_HVECTOR(locnz,1,nx*ny*sizeofreal,twoslice,subslice,ierr)
+  call MPI_TYPE_COMMIT(subslice,ierr)
+  call MPI_BARRIER(comm,ierr)
+
+  call filter4(U)
+  call filter4(v)
+  call filter4(W)
+  call filter4(s1)
+  call filter4(s2)
+
+  call MPI_BARRIER(comm,ierr)
+  call MPI_TYPE_FREE(oneslice,ierr)
+  call MPI_TYPE_FREE(twoslice,ierr)
+  call MPI_TYPE_FREE(subslice,ierr)
+
+endif
+
+end subroutine filter
+
+subroutine filter4(U)
+#define DEBUG_LEVEL 1
+ use mpi_parameters
+ use boundary_information
+ implicit none
+ include 'mpif.h'
+
+ include '../input/problem_size.h'
+ integer                               :: tag,status_array(MPI_STATUS_SIZE,2*numprocs),reqs(2*numprocs)
+ integer                               :: j,iproc,numwords,ierr
+ integer                               :: dest,source,istart,iend,kstart,kend,n1,n2,n3
+ integer                               :: nzderiv,sizeofreal,locnx
+ real, dimension(:,:,:), allocatable   :: block_of_cols,col_of_derivs
+ real, dimension(:), allocatable       :: work
+ real, dimension(nx,ny,locnz)          :: U
+
+ if( boundary_type2(1,1)=='periodic' .and. boundary_type4(1,1)=='periodic' ) then
+   locnx = (nx-1)/nprocs
+  else
+   locnx = nx/nprocs
+  endif
+
+ allocate ( block_of_cols( locnx,ny,numprocs*locnz) )
+ allocate ( col_of_derivs( locnx,ny,numprocs*locnz) )
+ allocate ( work(nx*ny*locnz*2) )
+
+! filter in x and y directions, overwriting input array in both cases
+ call filter_x4(U,U,nx,ny,locnz)
+ call filter_y4(U,U,nx,ny,locnz)
+!!! 
+!!! call MPI_BUFFER_ATTACH(work,nx*ny*locnz*16,ierr)   ! buffer size in bytes
+!!!
+
+!filter in z direction :
+!*******************************************************
+! See compact_ddz_mpi for more details, but basically, each processor
+! needs to ship sub-blocks of its own dataslice and recieve those
+! necessary to construct a block with dimensions nx/numprocs * ny * nz.
+! Filtering is done on these blocks and the results shipped back
+! to the appropriate locations
+!*******************************************************
+
+ nzderiv=nz   ! don't use nzderiv < nz logic
+!Both CASE1 and CASE2 require simple calls to compact_ddz
+ if( numprocs == 1 .and. locnz == nz .and. nzderiv == nz ) then
+  goto 999   ! CASE1
+ elseif(numprocs > 1 .and. nzderiv == locnz .and. locnz < nz) then
+  goto 999   ! CASE2
+ elseif(numprocs > 1 .and. nzderiv == nz .and. nz > locnz) then
+!CASE3 logic
+
+!!! xlv 
+   call MPI_BUFFER_ATTACH(work,nx*ny*locnz*16,ierr)   ! buffer size in byte
+!!!   
+
+!(1)Ship portions of my slice needed by other processes and
+!   receive data needed to fill in "block_of_cols"
+
+!**************
+!  Post non-blocking receives first, establishing buffers for the sends to use.
+      do iproc=0,numprocs-1    ! iproc is the processor I will exchange data with
+       source=iproc
+       kstart=(iproc*locnz)+1         ! start index for receiving data col
+       numwords=locnx*ny*locnz        ! # of real words to store in col w/ each send
+       tag = 1
+       j=iproc+1    ! counter for message request label
+       call MPI_IRECV(block_of_cols(1,1,kstart),numwords,MPI_REAL,source,tag,comm,reqs(j),ierr)
+      enddo
+      call MPI_BARRIER(comm,ierr)  ! make sure all receive posted before any sends are executed
+
+!  Post non-blocking sends
+      do iproc=0,numprocs-1    ! iproc is the processor I will exchange data with
+       dest=iproc
+       istart=(iproc*locnx)+1         ! start index for sending data slab
+       numwords=1  ! i.e. 1 word of type subslice
+       tag = 1
+       j=numprocs+iproc+1  ! counter for message request label
+       call MPI_IBSEND(U(istart,1,1),numwords,subslice,dest,tag,comm,reqs(j),ierr)
+      enddo
+
+!     make sure all communications are done
+      call MPI_WAITALL(2*numprocs,reqs,status_array,ierr)
+!**************
+
+!(2)Apply z4 filtering to "block_of_cols"
+ n1=locnx
+ n2=ny
+ n3=locnz*numprocs
+ call filter_z4(block_of_cols,block_of_cols,n1,n2,n3)
+
+!(3) Send filtered fields to other processes
+!    and receive their results.
+
+!**************
+!  Post non-blocking receives first, establishing buffers for the sends to use.
+     do iproc=0,numprocs-1    ! iproc is the processor I will exchange data with
+      source=iproc
+      istart=(iproc*locnx)+1      ! start index for recieving slab data
+      numwords=1   ! i.e. 1 word of type subslice
+      tag = 2
+      j=iproc+1
+      call MPI_IRECV(U(istart,1,1),numwords,subslice,source,tag,comm,reqs(j),ierr)
+     enddo
+     call MPI_BARRIER(comm,ierr)
+
+!  Post non-blocking sends
+     do iproc=0,numprocs-1    ! iproc is the processor I will exchange data with
+      dest=iproc
+      kstart=(iproc*locnz)+1         ! start index for sending col data
+      numwords=locnx*ny*locnz        ! # of real words to send from col w/ each send
+      tag = 2
+      j=numprocs+iproc+1
+      call MPI_IBSEND(block_of_cols(1,1,kstart),numwords,MPI_REAL,dest,tag,comm,reqs(j),ierr)
+     enddo
+
+!     make sure all communications are done
+      call MPI_WAITALL(2*numprocs,reqs,status_array,ierr)
+
+!**************
+
+  if( boundary_type2(1,1)=='periodic' .and. boundary_type4(1,1)=='periodic' ) then
+   U(nx,:,:)=U(1,:,:)  ! we didn't compute the values at extra bdry point location in x
+  endif
+
+  call MPI_BARRIER(comm,ierr)
+  call MPI_BUFFER_DETACH(work,nx*ny*locnz*16,ierr)   ! buffer size in bytes
+  return
+ endif
+
+999 continue   ! CASE1 & CASE2
+ n1=nx
+ n2=ny
+ n3=nzderiv
+ call filter_z4(U,U,n1,n2,n3)
+
+ deallocate(block_of_cols,col_of_derivs,work)
+
+end subroutine filter4
+
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+subroutine filter_x4(data,deriv,nx,ny,nz)
+! routine to perform 4th order filtering wrt x (1st dimension)
+! of a 3d field stored in data(1:nx,1:ny,1:nz).
+!
+! inputs
+!        data       nx,ny,nz array of input values
+!        nx,ny,nz   dimensions of field to be differentiated
+!
+! output
+!        deriv      nx,ny,nz array containing the 4th order
+!                   filtered (in x) field
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ use grid_info
+ use boundary_information
+use user_parameters,        only: LAPACK_FLAG
+ implicit none
+
+!!! double precision, dimension(:,:),allocatable    :: work
+ real, dimension(:,:),allocatable    :: work
+ integer                             :: i,j,k,nx,ny,nz,ierr
+ real                                :: data(nx,ny,nz),deriv(nx,ny,nz)
+!!! double precision                    :: a,b,c
+ real                    :: a,b,c
+
+ real,allocatable,dimension(:)       :: kx,SF,in,out,tmp
+ real                                :: pi,kx_max,xnorm,kstar,dk
+ integer*8                           :: plan_f,plan_i     !size must match pointer size, 8 for DEC alphas
+ integer                             :: N
+ include 'fftw_kw.inc'               !  predefined FFTW constants
+
+
+ if( boundary_type2(1,1)=='periodic' ) then
+  N=nx-1                 ! nx includes both boundary points, N only 1
+  allocate(kx(N+1),SF(N))
+  allocate( in(N),out(N),tmp(N) )
+
+! X preliminaries, setup fftw "plan"
+  call rfftw_f77_create_plan(plan_f,N,FFTW_REAL_TO_COMPLEX,FFTW_ESTIMATE)
+  call rfftw_f77_create_plan(plan_i,N,FFTW_COMPLEX_TO_REAL,FFTW_ESTIMATE)
+
+
+! create the x array, align with the data arrays
+  pi=4.*atan(1.)
+  xnorm = 1./float(N)    ! only normalize in wavenumber space here
+  do i=1,N/2+1
+   kx(i)=2.*pi*(i-1.)    ! FFTW real to half-complex storage
+  enddo
+  do i=2,N/2
+   kx(N-i+2)=kx(i)       ! FFTW real to half-complex storage
+  enddo
+  kx(N+1)=0.             ! extra location, convenient for alignment of arrays
+
+! define smoothing filter
+  kx_max=kx(N/2+1)
+  kstar=(8./9.)*kx_max 
+  do i=1,N
+       !if( kx(i) >= (8./9.)*kx_max ) then
+       ! SF(i)=0.
+       !else
+       ! SF(i)=1.0
+       !endif
+   SF(i)=0.5*( -tanh( 8.*(kx(i)-kstar)/(kx_max) ) + 1. )
+  enddo
+
+  do k=1,nz
+   do j=1,ny
+
+! x transforms; filter & inverse transform
+    in(1:N)=data(1:N,j,k)
+    call rfftw_f77_one(plan_f,in,out)
+    tmp(1:N)=SF(1:N)*out(1:N)*xnorm
+    call rfftw_f77_one(plan_i,tmp,out)
+    deriv(1:N,j,k)=out
+    deriv(nx,j,k)=deriv(1,j,k)
+
+   enddo
+  enddo
+
+  call rfftw_f77_destroy_plan(plan_f)
+  call rfftw_f77_destroy_plan(plan_i)
+  deallocate( kx,SF,in,out,tmp )
+  return
+ endif
+
+!               GENERAL, NONPERIODIC LOGIC
+allocate ( work(nx,ny) )
+!Set filter coefficients:
+ a=(5.+6.*alpha)/8.
+ b=(1.+2.*alpha)/2.
+ c=-(1.-2.*alpha)/8.
+
+!Loop through each horizontal plane
+ do k=1,nz
+
+!Create rhs vectors, store in work(:,:,1)
+  do i=3,nx-2
+   do j=1,ny
+    work(i,j)=a*data(i,j,k) + b*( data(i+1,j,k)+data(i-1,j,k) )/2.   &
+               + c*( data(i+2,j,k)+data(i-2,j,k) )/2.
+   enddo
+  enddo
+
+  do j=1,ny
+   work(1,j)= (15./16.)*data(1,j,k) + (1./16.)*( 4*data(2,j,k)         &
+               -6.*data(3,j,k) + 4.*data(4,j,k) - data(5,j,k) )
+   work(2,j)= (3./4.)*data(2,j,k) + (1./16.)*( data(1,j,k)             &
+               +6.*data(3,j,k) - 4.*data(4,j,k) + data(5,j,k) )
+
+   work(nx,j)=(15./16.)*data(nx,j,k) + (1./16.)*( 4*data(nx-1,j,k)     &
+               -6.*data(nx-2,j,k) + 4.*data(nx-3,j,k) - data(nx-4,j,k))
+   work(nx-1,j)= (3./4.)*data(nx-1,j,k) + (1./16)*( data(nx,j,k)      &
+               +6.*data(nx-2,j,k) - 4.*data(nx-3,j,k) + data(nx-4,j,k))
+  enddo
+
+! compute the filtered fields for plane k, results overwritten onto work(:,:)
+ if( LAPACK_FLAG == 'double' ) then
+!!!  call DGBTRS('N',nx,1,1,ny,Grid(0)%filt_x,4,Grid(0)%piv_fx,work(1,1),nx,ierr)
+      write(0,*) 'LAPACK_FLAG = double instead of single'
+      stop
+ elseif( LAPACK_FLAG == 'single' ) then
+  call SGBTRS('N',nx,1,1,ny,Grid(0)%filt_x,4,Grid(0)%piv_fx,work(1,1),nx,ierr)
+ endif
+  
+  deriv(:,:,k)=work(:,:)     !store the results in deriv(:,:,k)
+
+ enddo ! next k plane
+
+ deallocate ( work )
+end subroutine filter_x4
+
+subroutine filter_y4(data,deriv,nx,ny,nz)
+! routine to perform 4th order filtering wrt y (2nd dimension)
+! of a 3d field stored in data(1:nx,1:ny,1:nz).
+!
+! inputs
+!        data       nx,ny,nz array of input values
+!        nx,ny,nz   dimensions of field to be differentiated
+
+! output
+!        deriv      nx,ny,nz array containing the 4th order
+!                   accurate filtered (in y ) field
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ use grid_info
+ use boundary_information
+use user_parameters,        only: LAPACK_FLAG
+ implicit none
+
+!!! double precision, dimension(:,:),allocatable    :: work
+ real, dimension(:,:),allocatable    :: work
+ integer                             :: i,j,k,nx,ny,nz,ierr
+ real                                :: data(nx,ny,nz),deriv(nx,ny,nz)
+!!! double precision                    :: a,b,c
+ real                    :: a,b,c
+
+ real,allocatable,dimension(:)       :: ky,SF,in,out,tmp
+ real                                :: pi,ky_max,xnorm,kstar,dk
+ integer*8                           :: plan_f,plan_i     !size must match pointer size, 8 for DEC alphas
+ integer                             :: N
+ include 'fftw_kw.inc'               !  predefined FFTW constants
+
+
+ if( boundary_type4(1,1)=='periodic' ) then
+  N=ny-1                 ! ny includes both boundary points, N only 1
+  allocate( in(N),out(N),tmp(N) )
+  allocate(ky(N+1),SF(N))
+
+! Y preliminaries, setup fftw "plan"
+  call rfftw_f77_create_plan(plan_f,N,FFTW_REAL_TO_COMPLEX,FFTW_ESTIMATE)
+  call rfftw_f77_create_plan(plan_i,N,FFTW_COMPLEX_TO_REAL,FFTW_ESTIMATE)
+
+! create the y array, align with the data arrays
+  pi=4.*atan(1.)
+  xnorm = 1./float(N)    ! only normalize in wavenumber space here
+  do j=1,N/2+1
+   ky(j)=2.*pi*(j-1.)    ! FFTW real to half-complex storage
+  enddo
+  do j=2,N/2
+   ky(N-j+2)=ky(j)       ! FFTW real to half-complex storage
+  enddo
+  ky(N+1)=0.             ! extra location, convenient for alignment of arrays
+
+! define smoothing filter
+  ky_max=ky(N/2+1)
+  kstar=(8./9.)*ky_max
+
+  if( N <= 16 ) then
+   do j=1,N
+     SF(j)=1.0    ! no filtering
+   enddo
+  elseif( N > 16 ) then
+   do j=1,N
+    SF(j)=0.5*( -tanh( 8.*(ky(j)-kstar)/(ky_max) ) + 1. )
+   enddo
+  endif
+
+  do k=1,nz
+   do i=2,nx-1
+
+! y transforms; filter & inverse transform
+    in(1:N)=data(i,1:N,k)
+    call rfftw_f77_one(plan_f,in,out)
+    tmp(1:N)=SF(1:N)*out(1:N)*xnorm
+    call rfftw_f77_one(plan_i,tmp,out)
+    deriv(i,1:N,k)=out
+    deriv(i,ny,k)=deriv(i,1,k)
+
+   enddo
+  enddo
+  deriv(1,:,:)=data(1,:,:)
+  deriv(nx,:,:)=data(nx,:,:)
+
+  call rfftw_f77_destroy_plan(plan_f)
+  call rfftw_f77_destroy_plan(plan_i)
+  deallocate( ky,SF,in,out,tmp )
+  return
+ endif
+
+!               GENERAL, NONPERIODIC LOGIC
+
+ allocate ( work(ny,nx) )
+ a=(5.+6.*alpha)/8.
+ b=(1.+2.*alpha)/2.
+ c=-(1.-2.*alpha)/8.
+
+!Loop through each horizontal plane
+ do k=1,nz
+! create rhs vectors, store in work(:,:,1)
+  do j=3,ny-2
+   do i=1,nx
+    work(j,i)=a*data(i,j,k) + b*( data(i,j+1,k)+data(i,j-1,k) )/2. &
+               + c*( data(i,j+2,k)+data(i,j-2,k) )/2.
+   enddo
+  enddo
+
+  do i=1,nx
+   work(1,i)= (15./16.)*data(i,1,k) + (1./16.)*( 4.*data(i,2,k)          &
+              -6.*data(i,3,k) + 4.*data(i,4,k) - data(i,5,k) )
+   work(2,i)= (3./4.)*data(i,2,k) + (1./16.)*( data(i,1,k)              &
+              +6.*data(i,3,k) - 4.*data(i,4,k) + data(i,5,k) )
+
+   work(ny,i)=(15./16.)*data(i,ny,k) + (1./16.)*( 4.*data(i,ny-1,k)      &
+               -6.*data(i,ny-2,k) + 4.*data(i,ny-3,k) - data(i,ny-4,k))
+   work(ny-1,i)=(3./4.)*data(i,ny-1,k) + (1./16)*( data(i,ny,k)        &
+                 +6.*data(i,ny-2,k) - 4.*data(i,ny-3,k) + data(i,ny-4,k))
+  enddo
+
+! compute the filtered fields for plane k, overwriting results into work(:,:)
+ if( LAPACK_FLAG == 'double' ) then
+!!!  call DGBTRS('N',ny,1,1,nx,Grid(0)%filt_y,4,Grid(0)%piv_fy,work(1,1),ny,ierr)
+      write(0,*) 'LAPACK_FLAG = double instead of single'
+      stop
+ elseif( LAPACK_FLAG == 'single' ) then
+  call SGBTRS('N',ny,1,1,nx,Grid(0)%filt_y,4,Grid(0)%piv_fy,work(1,1),ny,ierr)
+ endif
+
+!     store the results in deriv(:,:,k)
+  do i=1,nx
+   do j=1,ny
+    deriv(i,j,k)=work(j,i)
+   enddo
+  enddo
+
+ enddo   ! next k plane
+
+ deallocate ( work )
+end subroutine filter_y4
+
+subroutine filter_z4(data,deriv,nx,ny,nz)
+!
+!       routine to perform 4th order filtering wrt z (3rd dimension)
+!       of a 3d field stored in data(1:nx,1:ny,1:nz).
+!
+! inputs
+!        data       nx,ny,nz array of input values
+!        nx,ny,nz   dimensions of field to be filtered
+!
+! output
+!        deriv      nx,ny,nz array containing the filtered field
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ use grid_info
+ use user_parameters, only: LAPACK_FLAG
+ implicit none
+
+!!! double precision, dimension(:,:),allocatable    :: work
+ real, dimension(:,:),allocatable    :: work
+ integer                             :: i,j,k,nx,ny,nz,ierr
+ real                                :: data(nx,ny,nz),deriv(nx,ny,nz)
+!!! double precision                    :: a,b,c
+ real                    :: a,b,c
+ allocate ( work(nz,nx) )
+      
+ a=(5.+6.*alpha)/8.
+ b=(1.+2.*alpha)/2.
+ c=-(1.-2.*alpha)/8.
+
+!Loop through each xz vertical plane
+ do j=1,ny
+! create rhs vectors, store in work(:,:,1)
+
+  do k=3,nz-2
+   do i=1,nx
+    work(k,i)=a*data(i,j,k) + b*( data(i,j,k+1)+data(i,j,k-1) )/2.   &
+               + c*( data(i,j,k+2)+data(i,j,k-2) )/2.
+   enddo
+  enddo
+
+  do i=1,nx
+   work(1,i)= (15./16.)*data(i,j,1) + (1./16.)*( 4.*data(i,j,2)             &
+              -6.*data(i,j,3) + 4.*data(i,j,4) - data(i,j,5) )
+   work(2,i)= (3./4.)*data(i,j,2) + (1./16.)*( data(i,j,1)                 &
+              +6.*data(i,j,3) - 4.*data(i,j,4) + data(i,j,5) )
+
+   work(nz,i)=(15./16.)*data(i,j,nz) + (1./16.)*( 4.*data(i,j,nz-1)         &
+               -6.*data(i,j,nz-2) + 4.*data(i,j,nz-3) - data(i,j,nz-4))
+   work(nz-1,i)=(3./4.)*data(i,j,nz-1) + (1./16.)*( data(i,j,nz)           &
+                 +6.*data(i,j,nz-2) - 4.*data(i,j,nz-3) + data(i,j,nz-4))
+  enddo
+
+!Filter the fields wrt z for plane j, overwriting results into work(:,:)
+ if( LAPACK_FLAG == 'double' ) then
+!!!  call DGBTRS('N',nz,1,1,nx,Grid(0)%filt_z,4,Grid(0)%piv_fz,work(1,1),nz,ierr)
+      write(0,*) 'LAPACK_FLAG = double instead of single'
+      stop
+ elseif( LAPACK_FLAG == 'single' ) then
+  call SGBTRS('N',nz,1,1,nx,Grid(0)%filt_z,4,Grid(0)%piv_fz,work(1,1),nz,ierr)
+ endif
+
+!Store the results in deriv(:,j,:)
+  do k=1,nz
+   do i=1,nx
+    deriv(i,j,k)=work(k,i)
+   enddo
+  enddo
+
+ enddo    ! go on to the next plane
+
+ deallocate ( work )
+end subroutine filter_z4
Index: /trunk/00FlowSolve_PL/SRC/gradient.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/gradient.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/gradient.f90	(revision 6)
@@ -0,0 +1,62 @@
+subroutine gradient
+#define DEBUG_LEVEL 1
+!     Routine to calculate the "gradient" of the scalar field pressure
+!     where the "gradient is defined as:
+!
+!     "grad" P = [ (x_zeta^2 + z_zeta^2)/(J^2) P_xi,
+!                                   (1/y_eta) P_eta,
+!                  (x_xi^2 +  z_xi^2 )/(J^2) P_zeta,
+!     where   det_J = x_xi*z_zeta - x_zeta*z_xi
+
+use mpi_parameters
+use grid_info
+use dependent_variables
+use intermediate_variables
+use boundary_information
+use counters_flags_etc
+implicit none
+include '../input/problem_size.h'
+
+integer                               :: flag
+real                                  :: h,end_values(2)
+real, dimension(:,:), allocatable     :: C_1,C_3
+allocate( C_1(nx,locnz), C_3(nx,locnz) )
+
+#if DEBUG_LEVEL >= 1
+ if(myid==0) write(0,*) 'hello world from gradient'
+#endif
+
+! Take xi derivative, store result in grad_x
+  flag=BC_flag(5,1)
+  end_values=-9999999   !  dummy value, not used
+  h=Grid(0)%dxi
+  call compact_ddx(pressure(:,:,:,2),grad_x,flag,end_values,nx,ny,locnz)
+
+! multiply p_xi by the appropriate factor (see comments above)
+  C_1 = (Grid(0)%x_zeta**2 + Grid(0)%z_zeta**2)/(Grid(0)%det_J)**2
+  do j=1,ny
+   grad_x(:,j,:) = C_1*grad_x(:,j,:)
+  enddo
+
+! Take eta derivative, store result in grad_y
+  flag=BC_flag(5,2)
+  h=Grid(0)%deta
+  call compact_ddy(pressure(:,:,:,2),grad_y,flag,end_values,nx,ny,locnz)
+! divide by y_eta to get d/dy p
+  do j=1,ny
+   grad_y(:,j,:)=grad_y(:,j,:)/Grid(0)%y_eta(j)
+  enddo
+
+! Take zeta derivative, store result in p3
+  flag=BC_flag(5,3)
+  h=Grid(0)%dzeta
+  call compact_ddz_mpi(pressure(:,:,:,2),grad_z,flag,end_values,nx,ny,locnz)
+
+! multiply p_zeta by the appropriate factor (see comments above)
+  C_3 = (Grid(0)%x_xi**2  + Grid(0)%z_xi**2)/(Grid(0)%det_J)**2
+  do j=1,ny
+   grad_z(:,j,:) = C_3*grad_z(:,j,:)
+  enddo
+
+ deallocate( C_1, C_3 )
+end subroutine gradient
Index: /trunk/00FlowSolve_PL/SRC/grid_transfers.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/grid_transfers.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/grid_transfers.f90	(revision 6)
@@ -0,0 +1,585 @@
+!   file containing the various routines to 
+!   interpolate/restrict data between grids
+
+!*******************************************************
+subroutine interp1d(yc,yf,nc,nf,xc,xf)
+! data=y(x), c=coarse, f=fine, x=monotonic independent variable
+! n=number of data points
+
+ implicit none
+ integer       :: nc, nf, nwrk, ierr, i
+ real          :: yc(nc), yf(nf), xc(nc), xf(nf)
+ real, allocatable, dimension(:)   :: wrk, dc, df
+
+ nwrk=2*nc
+ allocate( wrk(nwrk), dc(nc), df(nf) )
+
+!find interpolation derivs for coarse grid function
+! .FALSE. means Hermite cubic interpolation  ( smoother )
+! .TRUE.  means cubic spline interpolation
+
+  call pchez(nc,xc,yc,dc,.TRUE.,wrk,nwrk,ierr)
+
+ if( ierr < 0 ) then
+  write(0,*) '*** PROBLEM IN INTERP1D, PCHEZ',nc,nf
+  STOP
+ endif
+
+!Evaluate interpolating polynomial at the fine grid points
+   call pchev(nc, xc, yc, dc, nf, xf, yf, df, ierr)
+
+ if( ierr < 0 ) then
+  write(0,*) '*** PROBLEM IN INTERP1D, PCHEV',nc,nf
+  STOP
+ endif
+
+ deallocate( dc, df, wrk )
+end subroutine interp1d
+!*******************************************************
+
+!*******************************************************
+subroutine restrict1d(yc,yf,nc,nf,xc,xf)
+! data=y(x), c=coarse, f=fine, x=monotonic independent variable
+! n=number of data points
+
+ use mpi_parameters      ! myid,nprocs
+ use grid_info, only: restriction_method
+ implicit none
+ integer       :: nc, nf, nwrk, ierr, i
+ real          :: yc(nc), yf(nf), xc(nc), xf(nf), hc, hf
+ real, allocatable, dimension(:)   :: wrk, dc, df
+ real, allocatable, dimension(:)   :: yl, yr, xl, xr
+ character(len=80)                    :: method
+
+ method=restriction_method
+
+ nwrk=2*nf
+ allocate( wrk(nwrk), dc(nc), df(nf) )
+
+!find interpolation derivs for fine grid function
+! .FALSE. means Hermite cubic interpolation 
+! .TRUE.  means dubic spline interpolation
+
+ call pchez(nf,xf,yf,df,.TRUE.,wrk,nwrk,ierr)
+ if( ierr < 0 ) then
+  write(0,*) '*** PROBLEM IN RESTRICT1D, PCHEZ',ierr
+  STOP
+ endif
+
+
+!Evaluate interpolating polynomial at each coarse grid point
+ call pchev(nf, xf, yf, df, nc, xc, yc, dc, ierr)
+ if( ierr < 0 ) then
+  write(0,*) '*** PROBLEM IN RESTRICT1D, PCHEV, coarse pts',nc,nf
+  STOP
+ endif
+
+ if( method == 'injection' ) then
+  deallocate( dc, df, wrk  )
+  return
+ endif
+
+! full weighting logic   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ allocate( yl(nc), yr(nc), xl(nc), xr(nc) )
+
+!nearby neighbor points
+ hf=xf(2)-xf(1)
+ xl=xc-hf
+ xr=xc+hf
+
+!GET VALUES yr(1:nc)= values just to the right of yc(1:nc)
+! N.B. values are extrapolated if xr is outside range of xc
+ call pchev(nf, xf, yf, df, nc, xr, yr, dc, ierr)  
+ if( ierr < 0 ) then
+  write(0,*) '*** PROBLEM IN RESTRICT1D, PCHEV, right pts',nc,nf
+  STOP
+ endif
+
+
+!GET VALUES yl(1:nc)= values just to the left of yc(1:nc)
+! N.B. values are extrapolated if xl is outside range of xc
+ call pchev(nf, xf, yf, df, nc, xl, yl, dc, ierr)
+ if( ierr < 0 ) then
+  write(0,*) '*** PROBLEM IN RESTRICT1D, PCHEV, left pts',nc,nf
+  STOP
+ endif
+
+!  full weighting, store result in dc for now
+ do i=2,nc-1
+  dc(i) = ( yl(i) + 2.*yc(i) + yr(i) )/4.
+ enddo
+ 
+! LEFT END
+ if( xc(1) == xf(1) ) then
+  dc(1) = yf(1)                              ! injection at endpoints
+ elseif( xc(1) > xf(1) ) then
+  dc(1) = ( yl(1) + 2.*yc(i) + yr(i) )/4.    ! FW
+ elseif( xc(1) < xf(1) ) then
+  write(0,*) ' problem in restrict1d: xc(1) < xf(1) '
+  stop
+ endif
+
+! RIGHT END
+ if( xc(nc) == xf(nf) ) then
+  dc(nc) = yf(nf)                                ! injection at endpoints
+ elseif( xc(nc) < xf(nf) ) then
+  dc(nc) = ( yl(nc) + 2.*yc(nc) + yr(nc) )/4.    ! FW
+ elseif( xc(nc) > xf(nf) ) then
+  write(0,*) ' problem in restrict1d: xc(nc) > xf(nf) '
+  stop
+ endif
+
+
+! return values in yc
+  yc = dc
+
+
+ deallocate( dc, df, wrk, yl, yr, xl, xr )
+end subroutine restrict1d
+!*******************************************************
+
+
+!*******************************************************
+subroutine restrict(yf, yc, jfine)
+! full weighting restriction of the data yf at level jfine
+! to the array yc at level (jfine+1)
+! uses the 1d routine restrict1d(coarse,fine,nc,nf,hc,hf)
+!
+ use mpi_parameters
+ use grid_info
+ implicit none
+ include 'mpif.h'
+
+ integer    :: jfine
+ real       :: yf( Grid(jfine)%n1, Grid(jfine)%n2, Grid(jfine)%locn3 )
+ real       :: yc( Grid(jfine+1)%n1, Grid(jfine+1)%n2, Grid(jfine+1)%locn3 )
+
+ integer                              :: i,j,k,nf,nc,n,npts
+ integer                              :: nf_z,k1,k2
+ integer                              :: status(MPI_STATUS_SIZE),ierr,tag
+ real,dimension(:),allocatable        :: coarse, fine, xf, xc
+ real,dimension(:,:,:),allocatable    :: temp
+
+ n=max( Grid(jfine)%n1, Grid(jfine)%n2, Grid(jfine)%locn3+2 )
+ allocate( fine(0:n-1), xf(0:n-1) )
+
+ n=max( Grid(jfine+1)%n1, Grid(jfine+1)%n2, Grid(jfine+1)%locn3 )
+ allocate( coarse(n), xc(n) )
+
+ allocate( temp(Grid(jfine)%n1, Grid(jfine)%n2, 0:Grid(jfine)%locn3+1) )  ! 2 extra locations
+
+!store input fine grid data in an array with 2 extra z planes
+ do k=1,Grid(jfine)%locn3
+  temp(:,:,k)=yf(:,:,k)
+ enddo
+ temp(:,:,0)=-9999.                      ! initially set xtra planes to junk
+ temp(:,:,Grid(jfine)%locn3+1)=-9999.
+
+! set the number of fine grid data points to use
+if( nprocs == 1 ) then
+ nf_z = Grid(jfine)%locn3
+ k1=1
+ k2=nf_z                     ! don't need extended data
+elseif( nprocs > 1) then
+  nf_z = Grid(jfine)%locn3+2
+  k1=0
+  k2= Grid(jfine)%locn3+1     ! use extended data both North and South
+ if( myid==0 ) then
+  nf_z = Grid(jfine)%locn3+1
+  k1=1
+  k2= Grid(jfine)%locn3+1    ! use extended data only to North
+ endif
+ if( myid==nprocs-1 ) then
+  nf_z = Grid(jfine)%locn3+1
+  k1=0
+  k2= Grid(jfine)%locn3      ! use extended data only to South
+ endif
+endif
+
+
+! DATA EXCHANGES
+if( nprocs > 1 ) then    !fill extra planes with data from neighboring processors
+  npts=Grid(jfine)%n1 * Grid(jfine)%n2
+  tag = 777
+  if( myid > 0 ) then
+!    exchange data with south processor
+    call MPI_SENDRECV(yf(1,1,1),npts,MPI_REAL,myid-1,tag, &
+         temp(1,1,0),npts,MPI_REAL,myid-1,tag,comm,status,ierr)
+  endif
+
+  if( myid < nprocs-1 ) then
+!   exchange data with north processor
+    call MPI_SENDRECV(yf(1,1,Grid(jfine)%locn3),npts,MPI_REAL,myid+1,tag, &
+         temp(1,1,Grid(jfine)%locn3+1),npts,MPI_REAL,myid+1,tag,comm,status,ierr)
+   endif
+endif
+
+!x direction 
+ nf=Grid(jfine)%n1
+ nc=Grid(jfine+1)%n1
+ do i=1,nf
+  xf(i)=(i-1.)*Grid(jfine)%dxi
+ enddo
+ do i=1,nc
+  xc(i)=(i-1.)*Grid(jfine+1)%dxi
+ enddo
+
+ do k=k1,k2
+  do j=1,Grid(jfine)%n2
+   fine(1:nf)=temp(1:nf,j,k)
+   call restrict1d(coarse,fine(1),nc,nf,xc,xf(1))  ! coarse <- restrict(fine)
+   temp(1:nc,j,k)=coarse(1:nc)
+  enddo
+ enddo
+
+! y direction 
+ nf=Grid(jfine)%n2
+ nc=Grid(jfine+1)%n2
+ do i=1,nf
+  xf(i)=(i-1.)*Grid(jfine)%deta
+ enddo
+ do i=1,nc
+  xc(i)=(i-1.)*Grid(jfine+1)%deta
+ enddo
+
+ do k=k1,k2
+  do i=1,Grid(jfine+1)%n1    ! already restricted to coarse grid
+   fine(1:nf)=temp(i,1:nf,k)
+   call restrict1d(coarse,fine(1),nc,nf,xc,xf(1))  ! coarse <- restrict(fine)
+   temp(i,1:nc,k)=coarse(1:nc)
+  enddo
+ enddo
+
+! z direction 
+ nc=Grid(jfine+1)%locn3
+ do i=k1,k2
+  xf(i)=(myid*Grid(jfine)%locn3 + i - 1.)*Grid(jfine)%dzeta
+ enddo
+ do i=1,nc
+  xc(i)=(myid*Grid(jfine+1)%locn3 + i - 1.)*Grid(jfine+1)%dzeta
+ enddo
+
+ do j=1,Grid(jfine+1)%n2    ! already restricted to coarse grid
+  do i=1,Grid(jfine+1)%n1    ! already restricted to coarse grid
+   fine(k1:k2)=temp(i,j,k1:k2)
+   call restrict1d(coarse,fine(k1),nc,nf_z,xc,xf(k1))  ! coarse <- restrict(fine)
+   temp(i,j,1:nc)=coarse(1:nc)
+  enddo
+ enddo
+
+! return results in the coarse array yc
+ do k=1,Grid(jfine+1)%locn3
+  do j=1,Grid(jfine+1)%n2
+   do i=1,Grid(jfine+1)%n1
+    yc(i,j,k)=temp(i,j,k)
+   enddo
+  enddo
+ enddo
+
+ deallocate( coarse, fine, temp )
+end subroutine restrict
+!*******************************************************
+
+
+!*******************************************************
+subroutine interpolate(yc, yf, jfine)
+! Cubic Hermite/spline interpolation of the data yc at level (jfine+1)
+! to the array yf at level jfine
+! uses the 1d routine interp1d(coarse,fine,nc,nf,hc,hf)
+!
+ use mpi_parameters
+ use grid_info
+ implicit none
+ include 'mpif.h'
+
+ integer    :: jfine
+ real       :: yf( Grid(jfine)%n1, Grid(jfine)%n2, Grid(jfine)%locn3 )
+ real       :: yc( Grid(jfine+1)%n1, Grid(jfine+1)%n2, Grid(jfine+1)%locn3 )
+
+ integer                              :: i,j,k,nf,nc,n,npts
+ integer                              :: nc_z,k1,k2
+ integer                              :: status(MPI_STATUS_SIZE),ierr,tag
+ real,dimension(:),allocatable        :: coarse, fine, xc, xf
+ real,dimension(:,:,:),allocatable    :: temp
+
+ n=max( Grid(jfine)%n1, Grid(jfine)%n2, Grid(jfine)%locn3 )
+ allocate( fine(n), xf(n) )
+
+ n=max( Grid(jfine+1)%n1, Grid(jfine+1)%n2, Grid(jfine+1)%locn3 + 2 )
+ allocate( coarse(0:n-1), xc(0:n-1) )
+
+ allocate( temp(Grid(jfine)%n1, Grid(jfine)%n2, 0:Grid(jfine)%locn3+1) )
+ temp=0.0
+
+! set the number of z coarse grid data points to use
+if( nprocs == 1 ) then
+ nc_z = Grid(jfine+1)%locn3
+ k1=1
+ k2=nc_z                     ! don't need extended data
+elseif( nprocs > 1) then
+  nc_z = Grid(jfine+1)%locn3+2
+  k1=0
+  k2= Grid(jfine+1)%locn3+1     ! use extended data both North and South
+ if( myid==0 ) then
+  nc_z = Grid(jfine+1)%locn3+1
+  k1=1
+  k2= Grid(jfine+1)%locn3+1    ! use extended data only to North
+ endif
+ if( myid==nprocs-1 ) then
+  nc_z = Grid(jfine+1)%locn3+1
+  k1=0
+  k2= Grid(jfine+1)%locn3      ! use extended data only to South
+ endif
+endif
+
+!put yc in temp(:,:,1:locn3), leaving room for north & south neighbor planes
+do k=1,Grid(jfine+1)%locn3
+ do j=1,Grid(jfine+1)%n2
+  do i=1,Grid(jfine+1)%n1
+   temp(i,j,k)=yc(i,j,k)
+  enddo
+ enddo
+enddo
+! initially set xtra planes to junk
+temp(:,:,0)=-9999. 
+temp(:,:,Grid(jfine+1)%locn3+1)=-9999.
+
+! put valid coarse grid data in these planes if necessary
+if( nprocs > 1 ) then
+ npts=Grid(jfine+1)%n1 * Grid(jfine+1)%n2
+ tag=777
+ if( myid > 0 ) then
+ ! exchange data with south processor
+  call MPI_SENDRECV(yc(1,1,1),npts,MPI_REAL,myid-1,tag, &
+        temp(1,1,0),npts,MPI_REAL,myid-1,tag,comm,status,ierr)
+ endif
+
+ if( myid < nprocs-1 ) then
+ ! exchange data with north processor
+  call MPI_SENDRECV(yc(1,1,Grid(jfine+1)%locn3),npts,MPI_REAL,myid+1,tag, &
+       temp(1,1,Grid(jfine+1)%locn3+1),npts,MPI_REAL,myid+1,tag,comm,status,ierr)
+ endif
+endif
+
+! x direction 
+ nf=Grid(jfine)%n1
+ nc=Grid(jfine+1)%n1
+ do i=1,nf
+  xf(i)=(i-1.)*Grid(jfine)%dxi
+ enddo
+ do i=1,nc
+  xc(i)=(i-1.)*Grid(jfine+1)%dxi
+ enddo
+
+ do k=k1,k2
+  do j=1,Grid(jfine+1)%n2
+   coarse(1:nc)=temp(1:nc,j,k)
+   call interp1d(coarse(1),fine,nc,nf,xc(1),xf)  ! fine <- interp(coarse)
+   temp(1:nf,j,k)=fine(1:nf)
+  enddo
+ enddo
+
+! y direction 
+ nf=Grid(jfine)%n2
+ nc=Grid(jfine+1)%n2
+ do i=1,nf
+  xf(i)=(i-1.)*Grid(jfine)%deta
+ enddo
+ do i=1,nc
+  xc(i)=(i-1.)*Grid(jfine+1)%deta
+ enddo
+
+ do k=k1,k2
+  do i=1,Grid(jfine)%n1
+   coarse(1:nc)=temp(i,1:nc,k)
+   call interp1d(coarse(1),fine,nc,nf,xc(1),xf)  ! fine <- interp(coarse)
+   temp(i,1:nf,k)=fine(1:nf)
+  enddo
+ enddo
+
+! z direction 
+ nf=Grid(jfine)%locn3
+ do i=1,nf
+  xf(i)=(myid*Grid(jfine)%locn3 + i - 1.)*Grid(jfine)%dzeta
+ enddo
+ do i=k1,k2
+  xc(i)=(myid*Grid(jfine+1)%locn3 + i - 1.)*Grid(jfine+1)%dzeta
+ enddo
+
+ do j=1,Grid(jfine)%n2
+  do i=1,Grid(jfine)%n1
+   coarse(k1:k2)=temp(i,j,k1:k2)
+   call interp1d(coarse(k1),fine,nc_z,nf,xc(k1),xf)  ! fine <- interp(coarse)
+   temp(i,j,1:nf)=fine(1:nf)
+  enddo
+ enddo
+
+! return results in the fine array yf
+ yf=temp(:,:,1:nf)
+
+ deallocate( coarse, fine, temp )
+end subroutine interpolate
+!*******************************************************
+
+!*******************************************************
+
+!*******************************************************
+subroutine restrictXZ(yf, yc, jfine)
+! full weighting restriction of the XZ data yf at level jfine
+! to the array yc at level (jfine+1)
+! uses the 1d routine restrict1d(coarse,fine,nc,nf,hc,hf)
+!
+ use mpi_parameters
+ use grid_info
+ implicit none
+ include 'mpif.h'
+
+ integer    :: jfine
+ real       :: yf( Grid(jfine)%n1, Grid(jfine)%locn3 )
+ real       :: yc( Grid(jfine+1)%n1, Grid(jfine+1)%locn3 )
+
+ integer                              :: i,j,k,nf,nc,n,npts
+ integer                              :: nf_z,k1,k2
+ integer                              :: status(MPI_STATUS_SIZE),ierr,tag
+ real,dimension(:),allocatable        :: coarse, fine, xf, xc
+ real,dimension(:,:),allocatable      :: temp
+
+ n=max( Grid(jfine)%n1, Grid(jfine)%locn3+2 )
+ allocate( fine(0:n-1), xf(0:n-1) )
+
+ n=max( Grid(jfine+1)%n1, Grid(jfine+1)%locn3 )
+ allocate( coarse(n), xc(n) )
+
+ allocate( temp(Grid(jfine)%n1, 0:Grid(jfine)%locn3+1) )  ! 2 extra locations
+
+!store input fine grid data in an array with 2 extra z planes
+ do k=1,Grid(jfine)%locn3
+  temp(:,k)=yf(:,k)
+ enddo
+ temp(:,0)=-9999.                      ! initially set xtra planes to junk
+ temp(:,Grid(jfine)%locn3+1)=-9999.
+
+! set the number of fine grid data points to use
+if( nprocs == 1 ) then
+ nf_z = Grid(jfine)%locn3
+ k1=1
+ k2=nf_z                     ! don't need extended data
+elseif( nprocs > 1) then
+  nf_z = Grid(jfine)%locn3+2
+  k1=0
+  k2= Grid(jfine)%locn3+1     ! use extended data both North and South
+ if( myid==0 ) then
+  nf_z = Grid(jfine)%locn3+1
+  k1=1
+  k2= Grid(jfine)%locn3+1    ! use extended data only to North
+ endif
+ if( myid==nprocs-1 ) then
+  nf_z = Grid(jfine)%locn3+1
+  k1=0
+  k2= Grid(jfine)%locn3      ! use extended data only to South
+ endif
+endif
+
+
+! DATA EXCHANGES
+ if( nprocs > 1 ) then    !fill extra planes with data from neighboring processors
+  npts=Grid(jfine)%n1 * 1
+  tag=777
+  if( myid > 0 ) then
+!   exchange data with south processor
+    call MPI_SENDRECV(yf(1,1),npts,MPI_REAL,myid-1,tag, &
+         temp(1,0),npts,MPI_REAL,myid-1,tag,comm,status,ierr)
+  endif
+
+  if( myid < nprocs-1 ) then
+!   exchange data with north processor
+    call MPI_SENDRECV(yf(1,Grid(jfine)%locn3),npts,MPI_REAL,myid+1,tag, &
+         temp(1,Grid(jfine)%locn3+1),npts,MPI_REAL,myid+1,tag,comm,status,ierr)
+   endif
+ endif
+
+!x direction 
+ nf=Grid(jfine)%n1
+ nc=Grid(jfine+1)%n1
+ do i=1,nf
+  xf(i)=(i-1.)*Grid(jfine)%dxi
+ enddo
+ do i=1,nc
+  xc(i)=(i-1.)*Grid(jfine+1)%dxi
+ enddo
+
+ do k=k1,k2
+   fine(1:nf)=temp(1:nf,k)
+   call restrict1d(coarse,fine(1),nc,nf,xc,xf(1))  ! coarse <- restrict(fine)
+   temp(1:nc,k)=coarse(1:nc)
+ enddo
+
+! z direction 
+ nc=Grid(jfine+1)%locn3
+ do i=k1,k2
+  xf(i)=(myid*Grid(jfine)%locn3 + i - 1.)*Grid(jfine)%dzeta
+ enddo
+ do i=1,nc
+  xc(i)=(myid*Grid(jfine+1)%locn3 + i - 1.)*Grid(jfine+1)%dzeta
+ enddo
+
+  do i=1,Grid(jfine+1)%n1    ! already restricted to coarse grid
+   fine(k1:k2)=temp(i,k1:k2)
+   call restrict1d(coarse,fine(k1),nc,nf_z,xc,xf(k1))  ! coarse <- restrict(fine)
+   temp(i,1:nc)=coarse(1:nc)
+  enddo
+
+! return results in the coarse array yc
+ do k=1,Grid(jfine+1)%locn3
+   do i=1,Grid(jfine+1)%n1
+    yc(i,k)=temp(i,k)
+   enddo
+ enddo
+
+ deallocate( coarse, fine, temp, xc, xf )
+end subroutine restrictXZ
+!*******************************************************
+
+!*******************************************************
+
+!*******************************************************
+subroutine restrictY(yf, yc, jfine)
+! full weighting restriction of the Y data yf at level jfine
+! to the array yc at level (jfine+1)
+! uses the 1d routine restrict1d(coarse,fine,nc,nf,hc,hf)
+!
+ use mpi_parameters
+ use grid_info
+ implicit none
+ include 'mpif.h'
+
+ integer    :: jfine
+ real       :: yf( Grid(jfine)%n2 )
+ real       :: yc( Grid(jfine+1)%n2 )
+
+ integer                              :: i,j,k,nf,nc,n,npts
+ real,dimension(:),allocatable        :: coarse, fine, xf, xc
+
+ n=Grid(jfine)%n2
+ allocate( fine(n), xf(n) )
+
+ n=Grid(jfine+1)%n2
+ allocate( coarse(n), xc(n) )
+
+!y direction 
+ nf=Grid(jfine)%n2
+ nc=Grid(jfine+1)%n2
+ do i=1,nf
+  xf(i)=(i-1.)*Grid(jfine)%deta
+ enddo
+ do i=1,nc
+  xc(i)=(i-1.)*Grid(jfine+1)%deta
+ enddo
+
+ fine(1:nf)=yf(1:nf)
+ call restrict1d(coarse,fine,nc,nf,xc,xf)  ! coarse <- restrict(fine)
+ yc(1:nc)=coarse(1:nc)
+
+ deallocate( coarse, fine, xf, xc )
+end subroutine restrictY
+!*******************************************************
Index: /trunk/00FlowSolve_PL/SRC/hydrostatic.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/hydrostatic.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/hydrostatic.f90	(revision 6)
@@ -0,0 +1,108 @@
+subroutine hydrostatic
+#define DEBUG_LEVEL 1
+!     Routine to calculate the hydrostatic pressure
+!     associated with the density fluctuations pd about
+!     a time independent reference density rho_bar(:,:)
+
+use mpi_parameters                   !! myid,numprocs,comm etc
+use pde_parameters                   !! Ri
+use grid_info                        !! z_zeta(i,k)
+use dependent_variables              !! pd, pressure
+use counters_flags_etc               !! i,j,k etc
+implicit none
+include '../input/problem_size.h'    !! nx,ny,locnz
+include 'mpif.h'
+
+real                                 :: h                      ! step size dzeta
+real, allocatable                    :: d_even(:,:),d_odd(:,:) ! correction terms
+integer                              :: p_id                   ! pressure storage id
+integer                              :: id,root
+
+#if DEBUG_LEVEL >= 1
+ if(myid==0) write(0,*) 'hello world from hydrostatic'
+#endif
+
+  allocate( d_even(nx,ny), d_odd(nx,ny) )
+  h=Grid(0)%dzeta
+  p_id=2            ! store data in 2nd block
+
+!  step 1: Each processor computes that part of the hydrostatic pressure
+!          that is independent of data stored in processors above.
+
+ do j=1,ny
+
+!   top 2 points
+  if( myid == numprocs-1 ) then    ! no corrections to be added later
+   pressure(:,j,locnz,p_id) = 0.0
+   pressure(:,j,locnz-1,p_id) = pressure(:,j,locnz,p_id)                                &
+                              + (h*Ri/2.)*( pd(:,j,locnz)*Grid(0)%z_zeta(:,locnz)       &
+                                           +pd(:,j,locnz-1)*Grid(0)%z_zeta(:,locnz-1) )
+  else  ! corrections from above will be added later
+   pressure(:,j,locnz,p_id) = (h*Ri/3.)*pd(:,j,locnz)*Grid(0)%z_zeta(:,locnz)
+   pressure(:,j,locnz-1,p_id) = (h*Ri/3.)*(4.*pd(:,j,locnz)*Grid(0)%z_zeta(:,locnz)      & 
+                                        +  pd(:,j,locnz-1)*Grid(0)%z_zeta(:,locnz-1) )
+  endif
+
+!   compute values for the rest of the points, working downward
+!   use 4th order, 3pt quadrature formula
+  do k=locnz-2,1,-1
+   pressure(:,j,k,p_id) = pressure(:,j,k+2,p_id) + (h*Ri/3.)*    &
+    ( pd(:,j,k+2)*Grid(0)%z_zeta(:,k+2) +4.*pd(:,j,k+1)*Grid(0)%z_zeta(:,k+1) + pd(:,j,k)*Grid(0)%z_zeta(:,k) )
+  enddo
+
+ enddo    ! end loop over index j
+
+!   step 2: Top processor kicks off the correction sweep by calculating the 2 correction
+!           terms needed by its southern neighbor.
+
+  if( myid == numprocs-1 .and. numprocs > 1 ) then
+   do j=1,ny
+    d_even(:,j) = pressure(:,j,2,p_id) + (h*Ri/3.)*(pd(:,j,2)*Grid(0)%z_zeta(:,2)      &
+                                         +  4.*pd(:,j,1)*Grid(0)%z_zeta(:,1) )
+    d_odd(:,j)  = pressure(:,j,1,p_id) + (h*Ri/3.)*(pd(:,j,1)*Grid(0)%z_zeta(:,1) )
+   enddo
+  endif
+ 
+!  BCAST data
+   root=numprocs-1
+   call MPI_BCAST(d_even,nx*ny,MPI_REAL,root,comm,ierr)
+   call MPI_BCAST(d_odd ,nx*ny,MPI_REAL,root,comm,ierr)
+
+!   step 3: Working sequentially downward, each processor receives data from above,
+!           corrects the locally computed pressure, calculates the correction terms
+!           needed below and issues non-blocking sends to its south neighbor (if it exists)
+
+ if( numprocs > 1 ) then
+  do id=numprocs-2,0,-1      ! start w/ second from top, work downward
+   if( myid == id ) then
+    ! correct local pressure values
+    do k=locnz,2,-2
+      pressure(:,:,k,p_id)=pressure(:,:,k,p_id)+d_even(:,:)
+    enddo
+    do k=locnz-1,1,-2
+      pressure(:,:,k,p_id)=pressure(:,:,k,p_id)+d_odd(:,:)
+    enddo
+
+    !calculate corrections required  by south neighbor
+    do j=1,ny
+     d_even(:,j) = pressure(:,j,2,p_id) + (h*Ri/3.)*(pd(:,j,2)*Grid(0)%z_zeta(:,2)      &
+                                        +  4.*pd(:,j,1)*Grid(0)%z_zeta(:,1) )
+     d_odd(:,j) = pressure(:,j,1,p_id) + (h*Ri/3.)*(pd(:,j,1)*Grid(0)%z_zeta(:,1) )
+    enddo
+
+   elseif(myid .ne. id) then
+    ! its not my turn to calculate things
+   endif
+
+   !BCAST new corrections
+   root=id
+   call MPI_BCAST(d_even,nx*ny,MPI_REAL,root,comm,ierr)
+   call MPI_BCAST(d_odd ,nx*ny,MPI_REAL,root,comm,ierr)
+
+  enddo   ! continue down to next processor until finished
+ endif
+
+! hydrostatic pressure associated with pd now stored in pressure(:,:,:,p_id)
+  deallocate( d_even, d_odd )
+
+end subroutine hydrostatic
Index: /trunk/00FlowSolve_PL/SRC/ibr.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/ibr.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/ibr.f90	(revision 6)
@@ -0,0 +1,438 @@
+subroutine ibr_1
+#define DEBUG_LEVEL 1
+!     Routine to calculate the Inertia, Buoyancy, Rotation terms of 
+!     xi momentum equation, ignoring the pressure and dissipation terms
+!
+!     inputs:
+!            U,v,W contravariant velocities (x,z) and horizontal velocity (y)
+!            GM_uu the grid metric term in front of the U^2 term
+!            GM_uw the grid metric term in front of the U*W term
+!            GM_ww the grid metric term in front of the W^2 term
+!            pd     perturbation density
+!            Rot  the inverse Rossby number U/fL
+!            Ri   the Richardson number (N2*L^2)/U^2
+!            nx,ny,locnz  size of fields
+!            dxi,deta,dzeta  regular grid spacings on the computational mesh
+!            work    work array of at least (6*nx*ny*locnz,3*nx*ny*locnz) 
+!                    for evaluation of DNS terms, no evaluation of DNS terms
+!            x_zeta  derivative of cartesion x wrt grid coordinate zeta
+!            y_eta   derivative of cartesian y wrt coordinate eta
+!            z_zeta  derivative of cartesion z wrt grid coordinate zeta
+!            det_J determinant of transformation matrix
+!            BC_flag - derivative conditions and end values
+!
+!     output:
+!            rhs1 an (nx,ny,locnz) array such that dU/dt = rhs - pressure term
+!
+ 
+ use mpi_parameters
+ use grid_info
+ use dependent_variables
+ use pde_parameters
+ use rhs_variables
+ use intermediate_variables
+ use boundary_information
+ use counters_flags_etc
+ use dimensional_scales
+ use user_parameters
+
+ implicit none
+ include '../input/problem_size.h'
+
+ integer                                :: flag
+ integer                                :: ii,jj,kk
+ real                                   :: end_values(2),h
+ real, dimension(:,:,:,:), allocatable  :: work
+ allocate ( work(nx,ny,locnz,3) )
+  work(:,:,:,:) = 0.
+
+#if DEBUG_LEVEL >= 1
+ if(myid==0)write(0,*) 'hello world from ibr_1, Rot=',Rot
+#endif
+
+!Calculate  dU/dxi, dU/dy dU/dzeta and store in work arrays 1,2,3
+ flag=BC_flag(1,1)
+ h=Grid(0)%dxi
+!!! write(0,*) 'call compact_ddx, myid = ', myid
+ call compact_ddx(U,work(1,1,1,1),flag,end_values,nx,ny,locnz)
+
+ flag=BC_flag(1,2)
+ h=Grid(0)%deta
+!!! write(0,*) 'call compact_ddy, myid = ', myid
+ call compact_ddy(U,work(1,1,1,2),flag,end_values,nx,ny,locnz)
+
+ do j=1,ny
+  work(:,j,:,2)=work(:,j,:,2)/Grid(0)%y_eta(j)
+ enddo
+
+ flag=BC_flag(1,3)  
+ h=Grid(0)%dzeta
+!!! write(0,*) 'call compact_ddz, myid = ', myid
+ call compact_ddz_mpi(U,work(1,1,1,3),flag,end_values,nx,ny,locnz)
+
+! Add up the advective terms
+!!!  write(0,*) 'at ADD 1, myid = ', myid
+!!!  do kk=1,locnz
+!!!  do jj=1,ny
+!!!  do ii=1,nx
+!!!    work(ii,jj,kk,1) = 0.
+!!!    work(ii,jj,kk,2) = 0.
+!!!    work(ii,jj,kk,3) = 0.
+!!!    U(ii,jj,kk) = 0.
+!!!    V(ii,jj,kk) = 0.
+!!!    W(ii,jj,kk) = 0.
+!!!    if(work(ii,jj,kk,3) .lt. 0.) work(ii,jj,kk,3) = 0.
+!!!  if(ii.ge.257) then
+!!!  write(0,*) 'MYID',myid,'  II,JJ,KK,WORK = ',ii,jj,kk,work(ii,jj,kk,1),work(ii,jj,kk,2),work(ii,jj,kk,3)
+!!!  endif
+!!!    rhs1(ii,jj,kk,MM0) = -(work(ii,jj,kk,1) * U(ii,jj,kk) + &
+!!!                         work(ii,jj,kk,2) * V(ii,jj,kk) +   &
+!!!                         work(ii,jj,kk,3) * W(ii,jj,kk) )
+!!!  enddo
+!!!  enddo
+!!!  enddo
+  rhs1(:,:,:,MM0) = -( work(:,:,:,1)*U + work(:,:,:,2)*V + work(:,:,:,3)*W )
+
+! Add in the terms due to grid transformation
+!!!  write(0,*) 'at ADD 2, myid = ', myid
+  do j=1,ny
+   rhs1(1:nx,j,1:locnz,MM0) =                                    &
+     rhs1(1:nx,j,1:locnz,MM0) -                                  &
+   ( GM_uu(1:nx,1:locnz,1)*U(1:nx,j,1:locnz)*U(1:nx,j,1:locnz)   &
+   + GM_uw(1:nx,1:locnz,1)*U(1:nx,j,1:locnz)*W(1:nx,j,1:locnz)   &
+   + GM_ww(1:nx,1:locnz,1)*W(1:nx,j,1:locnz)*W(1:nx,j,1:locnz) )
+  enddo
+
+! Add on the buoyancy and rotation terms
+!!!  write(0,*) 'at ADD 3, myid = ', myid
+  do j=1,ny
+   rhs1(1:nx,j,1:locnz,MM0) =                                     &
+   rhs1(1:nx,j,1:locnz,MM0)                                       &
++ Grid(0)%x_zeta(1:nx,1:locnz)*Ri*pd(1:nx,j,1:locnz)/Grid(0)%det_J(1:nx,1:locnz)  &
++ Grid(0)%z_zeta(1:nx,1:locnz)*Rot*v(1:nx,j,1:locnz)/Grid(0)%det_J(1:nx,1:locnz)
+  enddo
+ 
+ deallocate( work )    
+end subroutine ibr_1
+
+subroutine ibr_2
+#define DEBUG_LEVEL 1
+!     Routine to calculate the Inertia, Buoyancy, Rotation terms of 
+!     eta momentum equation, ignoring the pressure and dissipation terms
+!
+!     inputs:
+!            U,v,W contravariant velocities (x,z) and horizontal velocity (y)
+!            GM_uu the grid metric term in front of the U^2 term
+!            GM_uw the grid metric term in front of the U*W term
+!            GM_ww the grid metric term in front of the W^2 term
+!            Rot  the inverse Rossby number U/fL
+!            Ri   the Richardson number (N2*L^2)/U^2
+!            nx,ny,locnz  size of fields
+!            dxi,deta,dzeta  regular grid spacings on the computational mesh
+!            work    work array of at least (6*nx*ny*locnz,3*nx*ny*locnz) 
+!                    for evaluation of DNS terms, no evaluation of DNS terms
+!            x_zeta  derivative of cartesion x wrt grid coordinate zeta
+!            y_eta   derivative of cartesian y wrt coordinate eta
+!            z_zeta  derivative of cartesion z wrt grid coordinate zeta
+!            det_J determinant of transformation matrix
+!            BC_flag - derivative conditions and end values
+!
+!     output:
+!            rhs2 an (nx,ny,locnz) array such that dv/dt = rhs - pressure term
+!
+ 
+ use mpi_parameters
+ use grid_info
+ use dependent_variables
+ use intermediate_variables
+ use pde_parameters
+ use user_parameters
+ use rhs_variables
+ use boundary_information
+ use counters_flags_etc
+ use dimensional_scales
+
+ implicit none
+ include '../input/problem_size.h'
+
+ integer                                :: flag
+ real                                   :: end_values(2),h
+ real, dimension(:,:,:,:), allocatable  :: work
+ allocate ( work(nx,ny,locnz,3) )
+ work(:,:,:,:) = 0.
+ 
+#if DEBUG_LEVEL >= 1
+ if(myid==0) write(0,*) 'hello world from ibr_2'
+#endif
+
+!Calculate  dv/dxi, dv/dy dv/dzeta and store in work arrays 1,2,3
+ flag=BC_flag(1,1)
+ h=Grid(0)%dxi
+ call compact_ddx(v,work(1,1,1,1),flag,end_values,nx,ny,locnz)
+
+ flag=BC_flag(1,2)
+ h=Grid(0)%deta
+ call compact_ddy(v,work(1,1,1,2),flag,end_values,nx,ny,locnz)
+ do j=1,ny
+   work(:,j,:,2)=work(:,j,:,2)/Grid(0)%y_eta(j)
+ enddo
+
+ flag=BC_flag(1,3)  
+ h=Grid(0)%dzeta
+ call compact_ddz_mpi(v,work(1,1,1,3),flag,end_values,nx,ny,locnz)
+
+! Add up the advective terms
+  rhs2(:,:,:,MM0) = -( work(:,:,:,1)*U + work(:,:,:,2)*V + work(:,:,:,3)*W )
+	
+! Add on the buoyancy and rotation terms
+  do j=1,ny
+   rhs2(1:nx,j,1:locnz,MM0) = rhs2(1:nx,j,1:locnz,MM0)         &
+   -Rot*( Grid(0)%x_xi(1:nx,1:locnz)*U(1:nx,j,1:locnz) +       &
+          Grid(0)%x_zeta(1:nx,1:locnz)*W(1:nx,j,1:locnz) )
+  enddo
+     
+
+ deallocate( work )    
+end subroutine ibr_2
+
+subroutine ibr_3
+#define DEBUG_LEVEL 1
+!     Routine to calculate the Inertia, Buoyancy, Rotation terms of 
+!     zeta momentum equation, ignoring the pressure and dissipation terms
+!
+!     inputs:
+!            U,v,W contravariant velocities (x,z) and horizontal velocity (y)
+!            GM_uu the grid metric term in front of the U^2 term
+!            GM_uw the grid metric term in front of the U*W term
+!            GM_ww the grid metric term in front of the W^2 term
+!            pd     perturbation density
+!            Rot  the inverse Rossby number U/fL
+!            Ri   the Richardson number (N2*L^2)/U^2
+!            nx,ny,locnz  size of fields
+!            dxi,deta,dzeta  regular grid spacings on the computational mesh
+!            work    work array of at least (6*nx*ny*locnz,3*nx*ny*locnz) 
+!                    for evaluation of DNS terms, no evaluation of DNS terms
+!            x_zeta  derivative of cartesion x wrt grid coordinate zeta
+!            y_eta   derivative of cartesian y wrt coordinate eta
+!            z_zeta  derivative of cartesion z wrt grid coordinate zeta
+!            det_J determinant of transformation matrix
+!            BC_flag - derivative conditions and end values
+!
+!     output:
+!            rhs3 an (nx,ny,locnz) array such that dU/dt = rhs - pressure term
+!
+ 
+ use mpi_parameters
+ use grid_info
+ use dependent_variables
+ use intermediate_variables
+ use pde_parameters
+ use rhs_variables
+ use boundary_information
+ use counters_flags_etc
+ use user_parameters
+
+ implicit none
+ include '../input/problem_size.h'
+
+ integer                                :: flag
+ real                                   :: end_values(2),h
+ real, dimension(:,:,:,:), allocatable  :: work
+ real, dimension(:), allocatable        :: mean_value
+ allocate ( work(nx,ny,locnz,3) )
+ work(:,:,:,:) = 0.
+ allocate( mean_value(locnz) )
+ mean_value(:) = 0.
+
+#if DEBUG_LEVEL >= 1
+ if(myid==0) write(0,*) 'hello world from ibr_3'
+#endif
+
+!Calculate  dW/dxi, dW/dy dW/dzeta and store in work arrays 1,2,3
+ flag=BC_flag(1,1)
+ h=Grid(0)%dxi
+ call compact_ddx(W,work(1,1,1,1),flag,end_values,nx,ny,locnz)
+
+ flag=BC_flag(1,2)
+ h=Grid(0)%deta
+ call compact_ddy(W,work(1,1,1,2),flag,end_values,nx,ny,locnz)
+ do j=1,ny
+   work(:,j,:,2)=work(:,j,:,2)/Grid(0)%y_eta(j)
+ enddo
+
+ flag=BC_flag(1,3)  
+ h=Grid(0)%dzeta
+ call compact_ddz_mpi(W,work(1,1,1,3),flag,end_values,nx,ny,locnz)
+
+! Add up the advective terms
+  rhs3(:,:,:,MM0) = -( work(:,:,:,1)*U + work(:,:,:,2)*V + work(:,:,:,3)*W )
+	
+! Add in the terms due to grid transformation
+  do j=1,ny
+   rhs3(1:nx,j,1:locnz,MM0) =                                    &
+     rhs3(1:nx,j,1:locnz,MM0) -                                  &
+   ( GM_uu(1:nx,1:locnz,2)*U(1:nx,j,1:locnz)*U(1:nx,j,1:locnz)   &
+   + GM_uw(1:nx,1:locnz,2)*U(1:nx,j,1:locnz)*W(1:nx,j,1:locnz)   &
+   + GM_ww(1:nx,1:locnz,2)*W(1:nx,j,1:locnz)*W(1:nx,j,1:locnz) )
+  enddo
+
+! Compute the xy mean of the buoyancy term
+  do k=1,locnz
+   mean_value(k) = 0.0
+   do j=1,ny
+    do i=1,nx
+     mean_value(k) = mean_value(k) + Grid(0)%x_xi(i,k)*Ri*pd(i,j,k)/Grid(0)%det_J(i,k)
+    enddo
+   enddo
+   mean_value(k) = mean_value(k)/float(nx*ny)
+  enddo
+
+! Add on the buoyancy (- the mean component) and rotation terms
+  do j=1,ny
+   do k=1,locnz
+    rhs3(1:nx,j,k,MM0) =             &
+      rhs3(1:nx,j,k,MM0)             &
+      - ( Grid(0)%x_xi(1:nx,k)*Ri*pd(1:nx,j,k)/Grid(0)%det_J(1:nx,k) - mean_value(k) )     &
+      -   Grid(0)%z_xi(1:nx,k)*Rot*v(1:nx,j,k)/Grid(0)%det_J(1:nx,k) 
+   enddo
+  enddo
+
+ deallocate( work,mean_value )    
+end subroutine ibr_3
+
+subroutine ibr_4
+!     Routine to calculate the rhs of the perturbation scalar 1 equation
+!     ignoring the diffusive term.
+!
+!     inputs:
+!            U,v,W contravariant velocities (x,z) and horizontal velocity (y)
+!            s1     perturbation scalar 1, s1_bar; the ambient profile
+!            nx,ny,locnz  size of fields
+!            dxi,deta,dzeta  regular grid spacings on the computational mesh
+!            x_zeta  derivative of cartesion x wrt grid coordinate zeta
+!            y_eta   derivative of cartesian y wrt coordinate eta
+!            z_zeta  derivative of cartesion z wrt grid coordinate zeta
+!            det_J determinant of transformation matrix
+!            BC_flag - derivative conditions and end values
+!
+!     output:
+!            rhs4 an (nx,ny,locnz) array such that ds1/dt = rhs - diffusive term
+!
+ 
+ use mpi_parameters
+ use grid_info
+ use dependent_variables
+ use pde_parameters
+ use rhs_variables
+ use boundary_information
+ use counters_flags_etc
+ use user_parameters
+
+ implicit none
+ include '../input/problem_size.h'
+
+ integer                                :: flag
+ real                                   :: end_values(2),h
+ real, dimension(:,:,:,:), allocatable  :: work
+ allocate (work(nx,ny,locnz,4))
+ work(:,:,:,:) = 0.
+ 
+#if DEBUG_LEVEL >= 1
+ if(myid==0) write(0,*) 'hello world from ibr_4'
+#endif
+
+!Store total scalar in work(:,:,:,4)
+ do j=1,ny
+  work(1:nx,j,1:locnz,4)=s1(1:nx,j,1:locnz)+s1_bar(1:nx,1:locnz)
+ enddo
+
+!Calculate  ds1/dxi, ds1/dy ds1/dzeta and store in work arrays 1,2,3
+ flag=BC_flag(1,1)
+ h=Grid(0)%dxi
+ call compact_ddx(work(:,:,:,4),work(1,1,1,1),flag,end_values,nx,ny,locnz)
+
+ flag=BC_flag(1,2)
+ h=Grid(0)%deta
+ call compact_ddy(work(:,:,:,4),work(1,1,1,2),flag,end_values,nx,ny,locnz)
+ do j=1,ny
+   work(:,j,:,2)=work(:,j,:,2)/Grid(0)%y_eta(j)
+ enddo
+
+ flag=BC_flag(1,3)  
+ h=Grid(0)%dzeta
+ call compact_ddz_mpi(work(:,:,:,4),work(1,1,1,3),flag,end_values,nx,ny,locnz)
+
+! Add up the advective terms
+  rhs4(:,:,:,MM0) = -( work(:,:,:,1)*U + work(:,:,:,2)*V + work(:,:,:,3)*W )
+	
+ deallocate( work )    
+end subroutine ibr_4
+
+subroutine ibr_5
+!     Routine to calculate the rhs of the perturbation scalar 2 equation
+!     ignoring the diffusive term.
+!
+!     inputs:
+!            U,v,W contravariant velocities (x,z) and horizontal velocity (y)
+!            s2     perturbation scalar 1, s2_bar; the ambient profile
+!            nx,ny,locnz  size of fields
+!            dxi,deta,dzeta  regular grid spacings on the computational mesh
+!            x_zeta  derivative of cartesion x wrt grid coordinate zeta
+!            y_eta   derivative of cartesian y wrt coordinate eta
+!            z_zeta  derivative of cartesion z wrt grid coordinate zeta
+!            det_J determinant of transformation matrix
+!            BC_flag - derivative conditions and end values
+!
+!     output:
+!            rhs5 an (nx,ny,locnz) array such that ds1/dt = rhs - diffusive term
+!
+ 
+ use mpi_parameters
+ use grid_info
+ use dependent_variables
+ use pde_parameters
+ use rhs_variables
+ use boundary_information
+ use counters_flags_etc
+ use user_parameters
+
+ implicit none
+ include '../input/problem_size.h'
+
+ integer                                :: flag
+ real                                   :: end_values(2),h
+ real, dimension(:,:,:,:), allocatable  :: work
+ allocate (work(nx,ny,locnz,4))
+ work(:,:,:,:) = 0.
+ 
+#if DEBUG_LEVEL >= 1
+ if(myid==0) write(0,*) 'hello world from ibr_5'
+#endif
+
+!Store total scalar in work(:,:,:,4)
+ do j=1,ny
+  work(1:nx,j,1:locnz,4)=s2(1:nx,j,1:locnz)+s2_bar(1:nx,1:locnz)
+ enddo
+
+!Calculate  ds2/dxi, ds2/dy ds2/dzeta and store in work arrays 1,2,3
+ flag=BC_flag(1,1)
+ h=Grid(0)%dxi
+ call compact_ddx(work(:,:,:,4),work(1,1,1,1),flag,end_values,nx,ny,locnz)
+
+ flag=BC_flag(1,2)
+ h=Grid(0)%deta
+ call compact_ddy(work(:,:,:,4),work(1,1,1,2),flag,end_values,nx,ny,locnz)
+ do j=1,ny
+   work(:,j,:,2)=work(:,j,:,2)/Grid(0)%y_eta(j)
+ enddo
+
+ flag=BC_flag(1,3)  
+ h=Grid(0)%dzeta
+ call compact_ddz_mpi(work(:,:,:,4),work(1,1,1,3),flag,end_values,nx,ny,locnz)
+
+! Add up the advective terms
+  rhs5(:,:,:,MM0) = -( work(:,:,:,1)*U + work(:,:,:,2)*V + work(:,:,:,3)*W )
+	
+ deallocate( work )    
+end subroutine ibr_5
+
Index: /trunk/00FlowSolve_PL/SRC/immersed_bdry_rhs.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/immersed_bdry_rhs.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/immersed_bdry_rhs.f90	(revision 6)
@@ -0,0 +1,16 @@
+subroutine immersed_bdry_rhs
+ use boundary_information
+ use mpi_parameters
+!rhs1, rhs2, rhs3 and rhs4 arrays can be augmented using immersed bdry logic here
+#define DEBUG_LEVEL 1
+
+if( immersed_bdry_flag == 'no' ) return
+
+#if DEBUG_LEVEL >=1
+ if(myid==0) write(0,*) 'hello world from immersed_bdry_rhs'
+#endif
+
+ call update_ibdry_rhs
+ call apply_ibdry_rhs
+
+end subroutine immersed_bdry_rhs
Index: /trunk/00FlowSolve_PL/SRC/init3D_netcdf.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/init3D_netcdf.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/init3D_netcdf.f90	(revision 6)
@@ -0,0 +1,376 @@
+subroutine init3D_netcdf
+#define DEBUG_LEVEL 1
+ use mpi_parameters
+ use grid_info
+ use dependent_variables
+ use counters_flags_etc
+ use dimensional_scales, length_scale=>L_scale
+ implicit none
+
+ include 'netcdf.inc'
+ include '../input/problem_size.h'
+
+ character(len=5)    ::  cnum
+ character(len=3)    ::  cid
+ character(len=80)   ::  filename
+ integer             ::  ncid,rcode,ntimes 
+
+!Dimensions and dimension variables
+ integer             ::  iid, jid, kid, timeid   ! Dimension ids 
+ integer             ::  tdimensionID            ! time dimension variable ids
+ integer             ::  jdimensionSIZE(1)         
+ integer             ::  tdimensionSIZE(1)       ! 1D arrays containing dimension sizes
+   
+!1D Variables 
+ integer             ::  yVarID,y_etaVarID
+ integer             ::  All1DVarSIZE(2)         ! 1D array containing j and k dimension sizes
+ integer             ::  start1D(1), count1D(1)  ! 1D arrays defining shape of 1D variable
+
+! x,z grid postion and 2d grid metric matrices
+ integer             :: xVarID,zVarID            ! x,z grid position ids
+ integer             :: x_xiVarID,x_zetaVarID      
+ integer             :: z_xiVarID,z_zetaVarID      
+ integer             :: s1_barVarID,s2_barVarID  ! reference scalar ids
+ integer             :: All2DVarSIZE(2)	         ! 2D array containing variables size
+ integer             :: start2D(2),count2D(2)    ! 2D arrays defining shape of 2D variable
+
+!4D Variables (x,y,z,t)
+ integer             ::  s1VarID,s2VarID,uVarID,vVarID,divVarID
+ integer             ::  wVarId,pVarID,KmVarID   ! 4D Variable ids
+ integer             ::  All4DVarSIZE(4)         ! 4D array containing variables size
+
+!Local arrays for holding data
+ real, dimension(:), allocatable      :: jdimValues
+ real, dimension(:,:), allocatable    :: hold2D 
+
+ allocate ( jdimValues(ny), hold2D(nx,locnz) )
+
+#if DEBUG_LEVEL >=1
+ if(myid==0) write(0,*) 'hello world from init3D_netcdf'
+#endif
+
+ ntimes=1  ! Each 3D file will contain 1 time slice.
+      
+!Create the filename: cfd3D_xxxxx_xxx
+ write(unit=cnum,fmt=100) istep
+100 format(I5.5)
+ write(unit=cid,fmt=101) myid
+101 format(I3.3)
+ if( numprocs > 1 ) then
+  filename='../output/cfd3D_'//cnum//'_'//cid   ! 
+ else
+  filename='../output/cfd3D_'//cnum
+ endif
+
+!Open a new file with write access.
+ if(myid .eq. 0 ) write(0,*) ' creating 3d netcdf files: ',cnum
+ rcode = NF_CREATE(filename, NF_CLOBBER, ncid)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!Dimensions Definition
+ rcode = NF_DEF_DIM(ncid, 'idimension', nx, iid)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_DEF_DIM(ncid, 'jdimension', ny, jid)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_DEF_DIM(ncid, 'kdimension', locnz, kid)         ! LOCAL PORTION
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_DEF_DIM(ncid, 'timedimension', ntimes, timeid)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!Initialize size arrays for spatial dimensions
+ jdimensionSIZE(1) = jid
+ tdimensionSIZE(1) = timeid
+
+!Define dimension variables
+ rcode = NF_DEF_VAR(ncid,'timedimension',NF_FLOAT,1,tdimensionSIZE,tdimensionID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,tdimensionID,'long_name',4,'time')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,tdimensionID,'units',7,'seconds')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!Define 1D time independent variables
+!Initialize size arrays for time independent variables
+ All1DVarSIZE(1) = jid    ! y related variables
+ All1DVarSIZE(2) = kid    ! x-z related variables
+
+ rcode = NF_DEF_VAR(ncid,'yVar',NF_FLOAT,1,All1DVarSIZE,yVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,yVarID,'long_name',1,'y')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,yVarID,'units',6,'meters')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+ rcode = NF_DEF_VAR(ncid,'y_etaVar',NF_FLOAT,1,All1DVarSIZE,y_etaVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,yVarID,'long_name',7,'dy/deta')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,yVarID,'units',6,'meters')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+
+!Define s1_bar and x,z grid position variables
+!Initialize size arrays for time independent variables
+ All2DVarSIZE(1) = iid
+ All2DVarSIZE(2) = kid
+
+ rcode = NF_DEF_VAR(ncid,'T_barVar',NF_FLOAT,2,All2DVarSIZE,s1_barVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,s1_barVarID,'long_name',5,'T_bar')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,s1_barVarID,'units',4,'degK')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+if(num_scalars>1) then
+ rcode = NF_DEF_VAR(ncid,'Sal_barVar',NF_FLOAT,2,All2DVarSIZE,s2_barVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,s2_barVarID,'long_name',5,'S_bar')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,s2_barVarID,'units',3,'ppt')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+endif
+
+ rcode = NF_DEF_VAR(ncid,'xVar',NF_FLOAT,2,All2DVarSIZE,xVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,xVarID,'long_name',1,'x')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,xVarID,'units',6,'meters')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+ rcode = NF_DEF_VAR(ncid,'zVar',NF_FLOAT,2,All2DVarSIZE,zVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,zVarID,'long_name',1,'z')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,zVarID,'units',6,'meters')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+ rcode = NF_DEF_VAR(ncid,'x_xiVar',NF_FLOAT,2,All2DVarSIZE,x_xiVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,x_xiVarID,'long_name',4,'x_xi')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,x_xiVarID,'units',6,'meters')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+ rcode = NF_DEF_VAR(ncid,'z_xiVar',NF_FLOAT,2,All2DVarSIZE,z_xiVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,z_xiVarID,'long_name',4,'z_xi')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,z_xiVarID,'units',6,'meters')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+ rcode = NF_DEF_VAR(ncid,'x_zetaVar',NF_FLOAT,2,All2DVarSIZE,x_zetaVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,x_zetaVarID,'long_name',6,'x_zeta')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,x_zetaVarID,'units',6,'meters')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+ rcode = NF_DEF_VAR(ncid,'z_zetaVar',NF_FLOAT,2,All2DVarSIZE,z_zetaVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,z_zetaVarID,'long_name',6,'z_zeta')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,z_zetaVarID,'units',6,'meters')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!Define 4D variables
+ All4DVarSIZE(1) = iid
+ All4DVarSIZE(2) = jid
+ All4DVarSIZE(3) = kid    ! LOCAL
+ All4DVarSIZE(4) = timeid ! 1 slice
+
+!perturbation temperature = s1Var
+ rcode = NF_DEF_VAR(ncid,'TempVar',NF_FLOAT,4,All4DVarSIZE,s1VarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,s1VarID,'long_name',11,'temperature')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,s1VarID,'units',4,'degK')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+if(num_scalars>1) then
+!perturbation salinity = s2Var
+ rcode = NF_DEF_VAR(ncid,'SalinityVar',NF_FLOAT,4,All4DVarSIZE,s2VarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,s2VarID,'long_name',8,'salinity')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,s2VarID,'units',3,'ppt')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+endif
+
+!x velocity = uVar
+ rcode = NF_DEF_VAR(ncid,'uVar',NF_FLOAT,4,All4DVarSIZE,uVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,uVarID,'long_name',1,'u')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,uVarID,'units',3,'m/s')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!y velocity = vVar
+ rcode = NF_DEF_VAR(ncid,'vVar',NF_FLOAT,4,All4DVarSIZE,vVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,vVarID,'long_name',1,'v')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,vVarID,'units',3,'m/s')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!z velocity = wVar
+ rcode = NF_DEF_VAR(ncid,'wVar',NF_FLOAT,4,All4DVarSIZE,wVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,wVarID,'long_name',1,'w')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,wVarID,'units',3,'m/s')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!pressure = pVar
+ rcode = NF_DEF_VAR(ncid,'pVar',NF_FLOAT,4,All4DVarSIZE,pVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,pVarID,'long_name',8,'pressure')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,pVarID,'units',7,'kg/ms^2')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!Km = KmVar
+ rcode = NF_DEF_VAR(ncid,'KmVar',NF_FLOAT,4,All4DVarSIZE,KmVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,KmVarID,'long_name',14,'eddy viscosity')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,KmVarID,'units',5,'m^2/s')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!div(u) = divVar
+ rcode = NF_DEF_VAR(ncid,'divVar',NF_FLOAT,4,All4DVarSIZE,divVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,divVarID,'long_name',10,'divergence')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_PUT_ATT_TEXT(ncid,divVarID,'units',3,'1/s')
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!End define mode
+ rcode = NF_ENDDEF(ncid)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!Close the file
+ rcode = NF_CLOSE(ncid)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!**************************************************************
+!**************************************************************
+!**************************************************************
+
+!Reopen the file and write local portion of time independent data
+ rcode = NF_OPEN(filename,NF_WRITE,ncid)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+ rcode = NF_INQ_VARID(ncid,'xVar',xVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_INQ_VARID(ncid,'yVar',yVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_INQ_VARID(ncid,'zVar',zVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+ rcode = NF_INQ_VARID(ncid,'x_xiVar',x_xiVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_INQ_VARID(ncid,'x_zetaVar',x_zetaVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_INQ_VARID(ncid,'y_etaVar',y_etaVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_INQ_VARID(ncid,'z_xiVar',z_xiVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+ rcode = NF_INQ_VARID(ncid,'z_zetaVar',z_zetaVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+ rcode = NF_INQ_VARID(ncid,'T_barVar',s1_barVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+if(num_scalars>1) then
+ rcode = NF_INQ_VARID(ncid,'Sal_barVar',s2_barVarID)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+endif
+
+!store y values in temp array
+ jdimValues(1:ny) = Grid(0)%y(1:ny)*length_scale
+!write values to file
+ start1D(1) = 1
+ count1D(1) = ny
+ rcode = NF_PUT_VARA_REAL(ncid,yVarID,start1D,count1D,jdimValues)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!store y_eta values in temp array
+ jdimValues(1:ny) = Grid(0)%y_eta(1:ny)*length_scale
+ rcode = NF_PUT_VARA_REAL(ncid,y_etaVarID,start1D,count1D,jdimValues)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!Initialize size arrays for local xz data
+ start2D(1) = 1
+ start2D(2) = 1
+ count2D(1) = nx
+ count2D(2) = locnz 
+
+!Write (dimensional) s1_bar values
+!!! hold2D(:,:) = s1_bar(:,:)*s1_scale
+ hold2D(:,:) = s1_bar(:,:)
+!Write values to file
+ rcode = NF_PUT_VARA_REAL(ncid,s1_barVarID,start2D,count2D,hold2D)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+if(num_scalars>1) then
+!Write (dimensional) s2_bar values
+!!! hold2D(:,:) = s2_bar(:,:)*s2_scale
+ hold2D(:,:) = s2_bar(:,:)
+!Write values to file
+ rcode = NF_PUT_VARA_REAL(ncid,s2_barVarID,start2D,count2D,hold2D)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+endif
+
+!Write x grid point values
+ hold2D(:,:) = Grid(0)%x(:,:)*length_scale
+!Write values to file
+ rcode = NF_PUT_VARA_REAL(ncid,xVarID,start2D,count2D,hold2D)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!Write z grid point values
+ hold2D(:,:) = Grid(0)%z(:,:)*length_scale
+!Write values to file
+ rcode = NF_PUT_VARA_REAL(ncid,zVarID,start2D,count2D,hold2D)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!Write x_xi grid point values
+ hold2D(:,:) = Grid(0)%x_xi(:,:)*length_scale
+!Write values to file
+ rcode = NF_PUT_VARA_REAL(ncid,x_xiVarID,start2D,count2D,hold2D)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!Write x_zeta grid point values
+ hold2D(:,:) = Grid(0)%x_zeta(:,:)*length_scale
+!Write values to file
+ rcode = NF_PUT_VARA_REAL(ncid,x_zetaVarID,start2D,count2D,hold2D)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!Write z_xi grid point values
+ hold2D(:,:) = Grid(0)%z_xi(:,:)*length_scale
+!Write values to file
+ rcode = NF_PUT_VARA_REAL(ncid,z_xiVarID,start2D,count2D,hold2D)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+!Write z_zeta grid point values
+ hold2D(:,:) = Grid(0)%z_zeta(:,:)*length_scale
+!Write values to file
+ rcode = NF_PUT_VARA_REAL(ncid,z_zetaVarID,start2D,count2D,hold2D)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+
+
+!Close netcdf file
+ rcode = NF_CLOSE(ncid)
+  if(rcode /= NF_NOERR) call HANDLE_ERR(rcode)
+       
+ deallocate ( jdimValues, hold2D )
+end subroutine init3D_netcdf
+
+subroutine handle_err(status)
+ include 'netcdf.inc'
+ integer :: status
+ if ( status /= NF_NOERR ) then
+  write(0,*) NF_STRERROR(status)
+  write(0,*) 'stopping after netcdf error'
+  STOP
+ endif
+end subroutine handle_err
Index: /trunk/00FlowSolve_PL/SRC/initialize_cfd.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/initialize_cfd.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/initialize_cfd.f90	(revision 6)
@@ -0,0 +1,275 @@
+subroutine initialize_cfd
+#define DEBUG_FLAG 3
+
+  use  grid_info
+  use  mpi_parameters
+  use  integration_weights
+  use  dimensional_scales
+  use  user_parameters
+  use  pde_parameters
+  use  dependent_variables
+  use  intermediate_variables
+  use  rhs_variables
+  use  boundary_information
+  use  counters_flags_etc
+
+  integer               :: rank,flag
+  real                  :: end_values(2),gamma,drdz
+!!!  real                  :: maxu,minu,maxv,minv
+
+  include '../input/problem_size.h'
+  include 'mpif.h'
+  include '../input/params.h'
+
+!module integration_weights
+  allocate (  W1(nx), W2(ny), W3(locnz) )
+
+!module dependent_variables
+  allocate ( U(nx,ny,locnz),v(nx,ny,locnz) )
+  allocate ( W(nx,ny,locnz),pd(nx,ny,locnz) )
+  allocate ( pressure(nx,ny,locnz,2) )
+  allocate ( s1(nx,ny,locnz),s2(nx,ny,locnz) )
+  allocate ( s1_bar(nx,locnz) )          ! not a dep. variable, but goes w/ s1
+  allocate ( s1_bar_xi(nx,locnz) )      
+  allocate ( s1_bar_zeta(nx,locnz) )
+  allocate ( s2_bar(nx,locnz) )          ! not a dep. variable, but goes w/ s2
+  allocate ( s2_bar_xi(nx,locnz) )      
+  allocate ( s2_bar_zeta(nx,locnz) )
+  allocate ( rho_bar(nx,locnz) )         ! not a dep. variable, but goes w/ pd
+  
+
+!module intermediate_variables
+  allocate ( div_u(nx,ny,locnz,2),b(nx,ny,locnz) )
+  allocate ( L_of_p(nx,ny,locnz) )
+  allocate ( grad_x(nx,ny,locnz) )
+  allocate ( grad_y(nx,ny,locnz) )
+  allocate ( grad_z(nx,ny,locnz) )
+  allocate ( u_star(nx,ny,locnz) )
+  allocate ( v_star(nx,ny,locnz) )
+  allocate ( w_star(nx,ny,locnz) )
+  allocate ( u_star_old(ny,locnz,2) )
+  allocate ( v_star_old(nx,locnz,2) )
+  allocate ( w_star_old(nx,ny,2) )
+
+!module rhs_variables
+  allocate ( rhs1(nx,ny,locnz,AB_order) )
+  allocate ( rhs2(nx,ny,locnz,AB_order) )
+  allocate ( rhs3(nx,ny,locnz,AB_order) )
+  allocate ( rhs4(nx,ny,locnz,AB_order) )
+  allocate ( rhs5(nx,ny,locnz,AB_order) )
+
+!module pde_parameters
+  allocate ( K_m(nx,ny,locnz) )
+
+! module boundary_information
+!!!  allocate ( boundary_type1(ny,locnz),boundary_type2(ny,locnz) )
+!!!  allocate ( boundary_type3(nx,locnz),boundary_type4(nx,locnz) )
+!!!  allocate ( boundary_type5(nx,ny),boundary_type6(nx,ny) )
+!!!  allocate ( BC_pressure1(ny,locnz),BC_pressure2(ny,locnz) )
+!!!  allocate ( BC_pressure3(nx,locnz),BC_pressure4(nx,locnz) )
+!!!  allocate ( BC_pressure5(nx,ny),BC_pressure6(nx,ny) )
+!!!  allocate ( BC_vel1(ny,locnz),BC_vel2(ny,locnz) )
+!!!  allocate ( BC_vel3(nx,locnz),BC_vel4(nx,locnz) )
+!!!  allocate ( BC_vel5(nx,ny),BC_vel6(nx,ny) )
+!!!  allocate ( BC_scalar1(ny,locnz,num_scalars),BC_scalar2(ny,locnz,num_scalars) )
+!!!  allocate ( BC_scalar3(nx,locnz,num_scalars),BC_scalar4(nx,locnz,num_scalars) )
+!!!  allocate ( BC_scalar5(nx,ny,num_scalars),BC_scalar6(nx,ny,num_scalars) )
+  allocate ( BC_values1(ny,locnz,3+num_scalars),BC_values2(ny,locnz,3+num_scalars) )
+  allocate ( BC_values3(nx,locnz,3+num_scalars),BC_values4(nx,locnz,3+num_scalars) )
+  allocate ( BC_values5(nx,ny,3+num_scalars),BC_values6(nx,ny,3+num_scalars) )
+  allocate ( phiY(nx,locnz,6,3,5) )
+  allocate ( inflow(nx,locnz,3+num_scalars) )
+
+!*******************************************************************
+  write(0,*) 'IN INITIALIZE CFD, DEBUG_FLAG, myid = ', DEBUG_FLAG,myid
+!!!#if DEBUG_FLAG >= 1
+!!!  if(myid .eq. 0 ) then
+!!!   write(0,*) '   '
+   write(0,*) 'hello world from initialize_cfd, myid =', myid
+!!!  endif
+!!!#endif
+
+! Check sizing parameters for obvious problems.
+  if( mod(nz,numprocs) /= 0 ) then
+   write(0,*) 'nz must be divisible by numprocs'
+   STOP
+  endif
+  if( mod(nx-1,numprocs) /= 0 ) then
+   write(0,*) 'nx-1 must be divisible by numprocs for xyfft logic'
+   STOP
+  endif
+  if( locnz < 4 ) then
+   write(0,*) 'currently, locnz >= 4'
+   write(0,*) 'WILL TRY TO CARRY ON, BE CAREFUL!!!'
+  endif
+  if( AB_order /= 2 .and. AB_order /= 3 .and. AB_order /= 4) then
+   write(0,*) 'only 2nd, 3rd or 4th order Adams Bashforth time stepping is allowed'
+   STOP
+  endif
+
+ init_derived_type=0    ! MPI derived data types not yet defined
+ subslice=-9999         ! MPI derived data types not yet defined, dummy value
+
+! Each processor imports the main parameter file:
+  pi=acos(-1.0)
+
+! set some sizing parameters that depend on case xy periodic
+  do i=0,Grid(0)%n_mg_levels-1
+
+   if( boundary_type2(1,1)=='periodic' .and.  boundary_type2(1,1)=='periodic' ) then
+    Grid(i)%n1_it=1
+    Grid(i)%n2_it=1
+    Grid(i)%n3_it=Grid(i)%n3     ! sizes for U&V  arrays in matvec
+   else
+    Grid(i)%n1_it=Grid(i)%n1
+    Grid(i)%n2_it=Grid(i)%n2
+    Grid(i)%n3_it=Grid(i)%locn3     ! sizes for U&V  arrays in matvec
+   endif
+
+! setup the PIM data for iterative solves at each grid level
+   if( boundary_type2(1,1)=='periodic' .and. boundary_type4(1,1)=='periodic' ) then
+    lda = Grid(i)%n3
+    loclen = lda            ! iterations local to each processor
+    pret = 0                ! preconditioning type 1=left, 0 =none
+    stopt = 4               ! stop criteria (4 fastest, GMRES has its own)
+    tol = 1.0E-19           ! stopping tolerance eps
+    basis=maxits            ! "
+   else  ! iterative method for 3d pressur field
+    lda = Grid(i)%n1 * Grid(i)%n2 * Grid(i)%n3
+    loclen = LDA/numprocs
+    pret = 0                ! preconditioning type 1=left, 0 =none
+    stopt = 4               ! stop criteria (4 fastest, GMRES has its own)
+    tol = 1.0E-19           ! stopping tolerance eps
+    basis=maxits            ! "
+   endif
+!  REMOVING BECAUSE WE WILL USE SOLVE_FOR_XYPER_PRESSURE INSTEAD
+!   CALL PIMSSETPAR(Grid(i)%ipar,Grid(i)%spar,  &
+!                   lda,lda,loclen,loclen,basis,numprocs,myid,pret,stopt,maxits,tol)
+
+  enddo
+
+#if DEBUG_FLAG >= 1
+  if(myid .eq. 0 ) write(0,*) ' initialize_cfd: user parameter file ../input/params.h included '
+#endif
+
+   write(0,*) 'derive inside initialize_cfd, nu,kappa1,kappa2,myid =', nu,kappa1,kappa2,myid
+! Derive dimensionless parameters given user input:
+  Re = U_scale*L_scale/nu               ! bulk Reynolds number
+  Pr1 = nu/kappa1                       ! "Prandtl" number for scalar 1
+  Pr2 = nu/kappa2                       ! "Prandtl" number for scalar 2
+  if( closure_flag .eq. 'LES' ) then
+   C_s = 0.17   ! see Kaltenbach et el JFM 94, or
+                ! Lesieur & Metais Ann Rev of Fluid Mech vol28
+   Pr = 1.0
+  endif
+  Ri = (Nsquared * L_scale**2)/U_scale**2     ! bulk Richardson number
+  Rot = f*L_scale/U_scale                     ! bulk inverse Rossby number
+
+#if DEBUG_FLAG >= 1
+  if(myid .eq. 0 ) write(0,*) ' Re, Pr1, Pr2, Ri, Rot : ', Re, Pr1, Pr2, Ri, Rot
+#endif
+
+
+ if( restart_flag == 'no' ) then
+
+! Set the ambient stratification profiles s1_bar(x,z), s2_bar(x,z), d'less values returned
+  call set_ambient_stratification
+
+! set rho_bar(x,z) to -999.9  (will be overwritten in 1st call to equation_of_state)
+  rho_bar(:,:)=-999.9
+
+! Each processor initializes its portion of the dep. variable arrays
+  if( ics_flag == 'homogeneous' ) then
+   U=0.0
+   v=0.0
+   W=0.0
+   s1=0.0
+   if( num_scalars > 1 ) s2=0.0
+   pressure=0.0
+  else
+!  read in ics data
+  endif
+
+! call equation_of_state to compute d'less pd and rho_bar
+  call equation_of_state
+
+! Compute xi and zeta derivatives of s1_bar and s2_bar
+  flag=1;end_values=-1e32
+
+#if DEBUG_FLAG >= 1
+  if(myid .eq. 0 ) write(0,*) ' initialize_cfd: about to differentiate s1_bar & s2_bar '
+#endif
+
+  call compact_ddx(s1_bar,s1_bar_xi,flag,end_values,nx,1,locnz)
+  if(num_scalars>1) call compact_ddx(s2_bar,s2_bar_xi,flag,end_values,nx,1,locnz)
+  
+#if DEBUG_FLAG >= 1
+  if(myid .eq. 0 ) write(0,*) ' initialize_cfd: return from ddx '
+#endif
+
+  call compact_ddz_mpi(s1_bar,s1_bar_zeta,flag,end_values,nx,1,locnz)
+  if(num_scalars>1) call compact_ddz_mpi(s2_bar,s2_bar_zeta,flag,end_values,nx,1,locnz)
+  
+#if DEBUG_FLAG >= 1
+  if(myid .eq. 0 ) write(0,*) ' initialize_cfd: return from ddz '
+#endif
+
+  init_derived_type=0    ! MPI derived data types not yet defined
+  subslice=-9999         ! MPI derived data types not yet defined, dummy value
+
+#if DEBUG_FLAG >= 1
+  if(myid .eq. 0 ) write(0,*) ' initialize_cfd: differentiated s1/s2_bar '
+#endif
+
+
+ endif    ! end restart_flag == 'no' block
+
+! Each processor fills weight arrays for spatial integration dxi,deta&dzeta:
+  call set_integration_weights(Grid(0)%dxi,Grid(0)%deta,Grid(0)%dzeta)
+
+! Set integer BC flags
+  BC_flag(:,:)=1   ! default=no end conditions specified
+  if( boundary_type1(1,1) == 'periodic' ) BC_flag(:,1)=5
+  if( boundary_type3(1,1) == 'periodic' ) BC_flag(:,2)=5
+  if( boundary_type5(1,1) == 'periodic' ) BC_flag(:,3)=5
+
+! Initial values of counters etc
+ if( restart_flag == 'no' ) then
+  istart=0
+  iend=istart+nsteps
+  new=1;old=2
+  MM0=1;MM1=2;MM2=3;MM3=4
+  step_flag='EULER'
+  write3D_counter=1
+
+! Intermediate variables initial data values
+  b=0.0
+  div_u=0.0
+  u_star=0.0
+  v_star=0.0
+  w_star=0.0
+  u_star_old=0.0
+  v_star_old=0.0
+  w_star_old=0.0
+  grad_x=0.0
+  grad_y=0.0
+  grad_z=0.0
+  phiY=0.0
+ elseif( restart_flag == 'yes' ) then
+  call restart
+!!!      maxu = MAXVAL(u(:,:,:))
+!!!      minu = MINVAL(u(:,:,:))
+!!!      maxv = MAXVAL(v(:,:,:))
+!!!      minv = MINVAL(v(:,:,:))
+!!!      write(0,*) 'MAXMIN',myid,maxu,minu,maxv,minv
+ endif
+ 
+! Dimensionless eddy viscosity 
+  K_m(:,:,:)=1./Re
+
+#if DEBUG_FLAG >= 1
+  if(myid .eq. 0 ) write(0,*) ' initialize_cfd:  calling initialize immersed bdry'
+#endif
+
+  call initialize_immersed_bdry
+end subroutine initialize_cfd
Index: /trunk/00FlowSolve_PL/SRC/initialize_grids.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/initialize_grids.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/initialize_grids.f90	(revision 6)
@@ -0,0 +1,260 @@
+subroutine initialize_grids(testflag)     ! testflag=-999 -> explicitly set simple cartesian grid
+#define DEBUG_LEVEL 3
+
+use grid_info
+use immersed_boundary
+use mpi_parameters
+use boundary_information
+use counters_flags_etc, only:maxits
+implicit none
+
+integer			:: h,i,j,k,testflag
+integer         	:: lda,loclen,basis,pret,stopt,ierr
+real            	:: tol,xx
+real,allocatable        :: scratch1(:),scratch2(:)
+                  
+
+include 'mpif.h'
+include '../input/problem_size.h'
+include '../input/grid_data.h'      ! data statement specifying grid_dimensions(0:nlevels-1,3)
+
+#if DEBUG_LEVEL >= 1
+ if(myid == 0 ) then
+  write(0,*) ' '
+  write(0,*) ' '
+  write(0,*) 'hello world from initialize_grids, nlevels=',nlevels
+ endif
+#endif
+
+if( myid==0 ) open(1,file='../output/grid_level_data')
+allocate( Grid(0:nlevels-1) )
+
+do h=0,nlevels-1
+
+  Grid(h)%n_mg_levels = nlevels
+  Grid(h)%level=h
+  Grid(h)%n1 = grid_dimensions(h,1)
+  Grid(h)%n2 = grid_dimensions(h,2)
+  Grid(h)%n3 = grid_dimensions(h,3)
+  Grid(h)%locn3 = grid_dimensions(h,3)/numprocs
+
+  Grid(h)%dxi    = 1.0/float( Grid(h)%n1-1 )
+  Grid(h)%deta  = 1.0/float( Grid(h)%n2-1 )
+  Grid(h)%dzeta = 1.0/float( Grid(h)%n3-1 )
+
+#if DEBUG_LEVEL >= 1
+ if(myid == 0 ) then
+  write(0,*) '**** GRID LEVEL ',h
+  write(0,*) '    n1:  ',Grid(h)%n1
+  write(0,*) '    n2:  ',Grid(h)%n2
+  write(0,*) '    n3:  ',Grid(h)%n3
+  write(0,*) '    locn3:  ',Grid(h)%locn3
+  write(0,*) '    dxi:  ',Grid(h)%dxi
+  write(0,*) '    deta:  ',Grid(h)%deta
+  write(0,*) '    dzeta:  ',Grid(h)%dzeta
+  write(0,*) '***************************'
+  write(0,*) ' '
+ endif 
+#endif
+
+!allocate arrays for grid level h
+
+  allocate( Grid(h)%x( Grid(h)%n1, Grid(h)%locn3 ), Grid(h)%z( Grid(h)%n1 , Grid(h)%locn3 )  )
+  allocate( Grid(h)%x_xi( Grid(h)%n1, Grid(h)%locn3 ), Grid(h)%x_zeta( Grid(h)%n1, Grid(h)%locn3 )  )
+  allocate( Grid(h)%z_xi( Grid(h)%n1, Grid(h)%locn3 ), Grid(h)%z_zeta( Grid(h)%n1, Grid(h)%locn3 )  )
+  allocate( Grid(h)%y( Grid(h)%n2 )  , Grid(h)%y_eta( Grid(h)%n2 )  )
+
+  allocate( Grid(h)%J_matrix( Grid(h)%n1, Grid(h)%locn3, 2, 2 )  )
+  allocate( Grid(h)%det_J( Grid(h)%n1, Grid(h)%locn3 )  )
+
+  allocate( Grid(h)%Cxx( Grid(h)%n1, Grid(h)%locn3 ), Grid(h)%Czz( Grid(h)%n1 , Grid(h)%locn3 )  )
+  allocate( Grid(h)%Cyy( Grid(h)%n2 ) )
+
+! allocate( Grid(h)%H( Grid(h)%n1, Grid(h)%n2 )  )
+  allocate( Grid(h)%v( Grid(h)%n1, Grid(h)%n2, Grid(h)%locn3 )   )
+  allocate( Grid(h)%f( Grid(h)%n1, Grid(h)%n2, Grid(h)%locn3 )   )
+  allocate( Grid(h)%scratch( Grid(h)%n1, Grid(h)%n2, Grid(h)%locn3 )   )
+
+  allocate( Grid(h)%ddx(7, Grid(h)%n1), Grid(h)%filt_x(7, Grid(h)%n1) )
+  allocate(Grid(h)%ddy(7, Grid(h)%n2), Grid(h)%filt_y(7, Grid(h)%n2) )
+  allocate(Grid(h)%ddz(7, Grid(h)%n3), Grid(h)%filt_z(7, Grid(h)%n3) )
+  allocate(Grid(h)%piv_dx(Grid(h)%n1), Grid(h)%piv_fx(Grid(h)%n1) )
+  allocate(Grid(h)%piv_dy(Grid(h)%n2), Grid(h)%piv_fy(Grid(h)%n2) )
+  allocate(Grid(h)%piv_dz(Grid(h)%n3), Grid(h)%piv_fz(Grid(h)%n3) )
+
+! setup & factor differentiation arrays 
+  call setup_compact_schemes(h)
+
+! if h=0, read in fine grid data
+! Each processor reads and stores its local portion of the grid data:
+ if( h == 0 ) then
+! these next three arrays are needed in the xyperiodic z stretched case
+      allocate( global_Czz( nz ) )
+      allocate( global_Cz( nz ) )
+      allocate( global_det_J( nz ) )
+      allocate( GM_uu(nx,locnz,2), GM_uw(nx,locnz,2), GM_ww(nx,locnz,2) )
+       if( testflag == -999 ) then
+!        include '../input/test_grid.h'  ! simple cartesian grid, Poisson coefficients
+       else  ! read grid data from input file
+        do i=0,numprocs-1
+         call read_grid_data('../input/grid_coords',i)
+        enddo
+        call MPI_BARRIER(comm,ierr) ! all procesors have now read the file
+       endif
+!      for cartesian grids, set values identically to zero
+       Grid(0)%z_xi=0.0
+       Grid(0)%x_zeta=0.0
+
+! Make Czz,Det_J and d/dzeta Czz available globally
+  allocate( scratch1(nz),scratch2(nz) )
+  global_Cz(1:nz)=0.
+!Czz
+  scratch1(1:nz)=0.0
+  scratch1( myid*locnz+1:(myid+1)*locnz ) = Grid(0)%Czz(1,1:locnz)  ! assume no variation with i
+  call MPI_ALLREDUCE(scratch1,scratch2,nz,MPI_REAL,MPI_SUM,comm,ierr) 
+  global_Czz=scratch2
+!det_J
+  scratch1(1:nz)=0.0
+  scratch1( myid*locnz+1:(myid+1)*locnz ) = Grid(0)%det_J(1,1:locnz)  ! assume no variation with i
+  call MPI_ALLREDUCE(scratch1,scratch2,nz,MPI_REAL,MPI_SUM,comm,ierr) 
+  global_det_J=scratch2
+
+  xx=1./(24.*Grid(0)%dzeta)
+  do k=3,nz-2
+   global_Cz(k)=( 2.*global_Czz(k-2) -16.*global_Czz(k-1) + 16.*global_Czz(k+1) -2.*global_Czz(k+2) )*xx
+  enddo
+  global_Cz(1)=(-50.*global_Czz(1) +96.*global_Czz(2) - 72.*global_Czz(3) +32.*global_Czz(4) -6.*global_Czz(5) )*xx
+  global_Cz(2)=(-6.*global_Czz(1) -20.*global_Czz(2) + 36.*global_Czz(3) -12.*global_Czz(4) +2.*global_Czz(5) )*xx
+  global_Cz(nz)=(50.*global_Czz(nz) -96.*global_Czz(nz-1) +    &
+                 72.*global_Czz(nz-2) -32.*global_Czz(nz-3) +6.*global_Czz(nz-4) )*xx
+  global_Cz(nz-1)=(6.*global_Czz(nz) +20.*global_Czz(nz-1)     &
+                   - 36.*global_Czz(nz-2) +12.*global_Czz(nz-3) -2.*global_Czz(nz-4) )*xx
+
+  if(myid==0) then
+   write(0,*)'**********   k, Czz, Cz   ***************'
+   do k=1,nz
+    write(0,*) k,global_Czz(k),global_Cz(k)
+   enddo
+   write(0,*)'*****************************************'
+  endif
+
+ endif  ! end statements exclusive to h=0 
+
+enddo    ! end loop over h levels
+
+! restrict (h-1) fine grid data to coarse grids (h)
+do h=1,nlevels-1   ! loop over coarse grids
+ if(myid==0) then
+  write(0,*) '  Restricting grid data to level ',h,' of 0:',nlevels-1
+  write(0,*) ' Lx,Ly,Lz : ',Grid(0)%x(nx,1),Grid(0)%y(ny),Grid(0)%z(1,locnz)
+ endif
+ restriction_method = 'injection'
+ call restrictXZ( Grid(h-1)%z, Grid(h)%z, h-1 )
+ call restrictXZ( Grid(h-1)%z_xi, Grid(h)%z_xi, h-1 )
+ call restrictXZ( Grid(h-1)%z_zeta, Grid(h)%z_zeta, h-1 )
+ call restrictXZ( Grid(h-1)%x, Grid(h)%x, h-1 )
+ call restrictXZ( Grid(h-1)%x_xi, Grid(h)%x_xi, h-1 )
+ call restrictXZ( Grid(h-1)%x_zeta, Grid(h)%x_zeta, h-1 )
+ call restrictXZ( Grid(h-1)%Cxx, Grid(h)%Cxx, h-1 )
+ call restrictXZ( Grid(h-1)%Czz, Grid(h)%Czz, h-1 )
+ call restrictXZ( Grid(h-1)%det_J, Grid(h)%det_J, h-1 )
+ call restrictXZ( Grid(h-1)%J_matrix(1,1,1,1), Grid(h)%J_matrix(1,1,1,1), h-1 )
+ call restrictXZ( Grid(h-1)%J_matrix(1,1,1,2), Grid(h)%J_matrix(1,1,1,2), h-1 )
+ call restrictXZ( Grid(h-1)%J_matrix(1,1,2,1), Grid(h)%J_matrix(1,1,2,1), h-1 )
+ call restrictXZ( Grid(h-1)%J_matrix(1,1,2,2), Grid(h)%J_matrix(1,1,2,2), h-1 )
+
+ call restrictY( Grid(h-1)%y, Grid(h)%y, h-1 )
+ call restrictY( Grid(h-1)%y_eta, Grid(h)%y_eta, h-1 )
+ call restrictY( Grid(h-1)%Cyy, Grid(h)%Cyy, h-1 )
+
+enddo
+ if(myid==0) then
+  write(0,*) '  Done Restricting grid data '
+ endif
+
+
+#if DEBUG_LEVEL >= 2
+
+ do h=0,nlevels-2
+
+ write(1,*) ' RESTRICTION TEST  Z direction, from level',h
+ do j=1,Grid(h)%n2
+  Grid(h)%v(:,j,:)=Grid(h)%z   ! 3D version of z
+ enddo
+   call restrict( Grid(h)%v, Grid(h+1)%v, h )  ! 
+ do i=1,Grid(h+1)%locn3
+  write(1,*) i,(myid*Grid(h+1)%locn3+i-1.)*Grid(h+1)%dzeta, Grid(h+1)%z(1,i), &
+               Grid(h+1)%Czz(1,i),Grid(h+1)%det_J(1,i)
+ enddo
+ write(1,*) ' '
+
+ write(1,*) ' RESTRICTION TEST  X direction, from level',h
+ do j=1,Grid(h)%n2
+  Grid(h)%v(:,j,:)=Grid(h)%x   ! 3D version of x
+ enddo
+   call restrict( Grid(h)%v, Grid(h+1)%v, h )  ! 
+ do i=1,Grid(h+1)%n1
+  write(1,*) i,(i-1.)*Grid(h+1)%dxi, Grid(h+1)%x(i,1)
+ enddo
+ write(1,*) ' '
+
+ write(1,*) ' RESTRICTION TEST  Y direction, from level',h
+ do i=1,Grid(h)%n1
+ do k=1,Grid(h)%locn3
+  Grid(h)%v(i,:,k)=Grid(h)%y   ! 3D version of y
+ enddo
+ enddo
+   call restrict( Grid(h)%v, Grid(h+1)%v, h )  ! 
+ do i=1,Grid(h+1)%n2
+  write(1,*) i,(i-1.)*Grid(h+1)%deta, Grid(h+1)%y(i),Grid(h+1)%Cyy(i)
+ enddo
+ write(1,*) ' '
+
+ enddo
+
+#endif
+
+
+#if DEBUG_LEVEL >= 2
+ do h=0,nlevels-2
+
+ write(1,*) ' INTERPOLATION TEST  Z DIRECTION, to level',h
+ do j=1,Grid(h+1)%n2
+  Grid(h+1)%v(:,j,:)=Grid(h+1)%z
+ enddo
+   call interpolate( Grid(h+1)%v, Grid(h)%v, h )
+ do k=1,Grid(h)%locn3
+  if(myid==0) write(1,*) k,(Grid(h)%locn3*myid+k-1.)*Grid(h)%dzeta, Grid(h)%v(2,3,k), &
+               Grid(h)%Czz(1,k),Grid(h)%det_J(1,k)
+ enddo
+ if(myid==0) write(1,*) ' '
+ 
+ if(myid==0) write(1,*) ' INTERPOLATION TEST  X DIRECTION to level',h
+ do j=1,Grid(h+1)%n2
+  Grid(h+1)%v(:,j,:)=Grid(h+1)%x
+ enddo
+   call interpolate( Grid(h+1)%v, Grid(h)%v, h )
+ do k=1,Grid(h)%n1
+  if(myid==0) write(1,*) k,(k-1.)*Grid(h)%dxi, Grid(h)%v(k,1,1)
+ enddo
+ if(myid==0) write(1,*) ' '
+ 
+ if(myid==0) write(1,*) ' INTERPOLATION TEST  Y DIRECTION to level',h
+ do i=1,Grid(h+1)%n1
+ do k=1,Grid(h+1)%locn3
+  Grid(h+1)%v(i,:,k)=Grid(h+1)%y
+ enddo
+ enddo
+   call interpolate( Grid(h+1)%v, Grid(h)%v, h )
+ do k=1,Grid(h)%n2
+  if(myid==0) write(1,*) k,(k-1.)*Grid(h)%deta, Grid(h)%v(1,k,1),Grid(h)%Cyy(k)
+ enddo
+ if(myid==0) write(1,*) ' '
+ 
+ enddo
+ close(1)
+#endif
+
+restriction_method='full_weighting'
+
+end subroutine initialize_grids
Index: /trunk/00FlowSolve_PL/SRC/initialize_immersed_bdry.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/initialize_immersed_bdry.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/initialize_immersed_bdry.f90	(revision 6)
@@ -0,0 +1,198 @@
+subroutine initialize_immersed_bdry
+#define DEBUG_LEVEL 2
+
+  use grid_info
+  use mpi_parameters
+  use immersed_boundary
+  use counters_flags_etc
+  use boundary_information
+  use dependent_variables
+  use grid_info
+  use dimensional_scales
+  implicit none
+
+  include '../input/problem_size.h'
+  include 'mpif.h'
+
+  integer		  :: npts,j1,j2,jplane,N,root
+  real                    :: z0,z1,est
+  character(len=3)                     ::  cnum
+  character(len=80)                    ::  filename
+
+
+if( immersed_bdry_flag == 'no' ) return
+#if DEBUG_LEVEL >= 1
+  if(myid==0) then
+   write(0,*) ' '
+   write(0,*) ' '
+   write(0,*) 'hello world from initialize_immersed_bdry'
+  endif
+#endif
+
+!  set width parameters of discrete 3d delta function
+ delta_1 = 2.*( Grid(0)%x_xi(1,1)*Grid(0)%dxi )
+ delta_2 = 1.*( Grid(0)%y_eta(1)*Grid(0)%deta )
+ delta_3 = 2.*( Grid(0)%z_zeta(1,1)*Grid(0)%dzeta )     ! think if dz not constant
+
+!set the gain coefficients (set positive values here)
+! xalpha controls the oscillation frequency of the boundary forcing
+! choose value so that we have N steps per period , i.e. choose N given
+! a physically chosen value of dt
+ pi=4.*atan(1.)
+ N=50.
+                       !xalpha=( 4.*pi*pi/(N*dt) )**2    ! following GH&S I get ( 4.*pi*pi/(N*dt) )**2
+ xbeta=1./(N*dt)
+ xalpha=xbeta**2
+
+! est = (xbeta + sqrt( xbeta**2 + 2.*xalpha*1 ))/xalpha
+ if( myid == 0 ) then
+  write(0,*) '             parameters of discrete delta function:  ',delta_1,delta_2,delta_3
+  write(0,*) '             gain parameters alpha & beta : ',xalpha,xbeta
+  write(0,*) '             dimensionless time step dt   : ',dt
+! write(0,*) '             estimated time step limit,k=1: ',est
+! if( dt > est ) then
+!  write(0,*) ' alpha,beta too big for given time step  '
+!  STOP
+! endif
+ endif
+
+ if( myid == 0 ) then           
+   open(1,file='../input/immersed_bdry_locations')
+   read(1,*) n_j
+   write(0,*) '     reading ',n_j, '  immersed boundary points per j plane'
+   npts=n_j*ny
+ endif
+ root=0
+ call MPI_BCAST(n_j,1,MPI_INTEGER,root,comm,ierr)
+ call MPI_BCAST(npts,1,MPI_INTEGER,root,comm,ierr)
+
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+!allocate arrays declared in module immersed_boundary
+  allocate( z_limits(2,0:numprocs-1) ) ! lower&upper z limits for each processor
+  allocate( ibdry_locations(2,npts), ibdry_normals(2,npts) )
+  allocate( ibdry_owner(npts) )
+  allocate( ibdry_data(4,npts,3) )        ! 4 variables, 3 time levels
+  allocate( ibdry_integrals(4,npts,3) )   ! 4 variables, 3 time levels
+  allocate( ibdry_rhs(4,npts), local_region(6,npts) )
+  allocate( mask1(nx,locnz), mask2(nx,locnz), mask3(nx,locnz) )
+! mask values set in initialize_user.F90
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ if( myid == 0 ) then           
+! read in the immersed boundary data for ONE j plane
+   do i=1,n_j
+    read(1,*) ibdry_locations(1,i),ibdry_locations(2,i),   &
+              ibdry_normals(1,i),ibdry_normals(2,i)
+   enddo
+   close(1)   ! close immersed boundary data file
+   ibdry_locations=ibdry_locations/L_scale
+
+!  set the same values for all the other j planes
+   do j=2,ny
+    j1=(j-1)*n_j+1
+    j2=j1+n_j-1
+    ibdry_locations(:,j1:j2)=ibdry_locations(:,1:n_j)
+    ibdry_normals(:,j1:j2)=ibdry_normals(:,1:n_j)
+   enddo
+#if DEBUG_LEVEL >= 1
+   write(0,*)  '     immersed bdry data read in by processor 0'
+#endif
+ endif   ! end logic for myid=0 only
+
+! bcast values in ibdry_locations, ibdry_normals to ids>0
+ root=0
+ call MPI_BCAST(ibdry_locations,2*npts,MPI_REAL,root,comm,ierr)
+ call MPI_BCAST(ibdry_normals  ,2*npts,MPI_REAL,root,comm,ierr)
+
+!ALL do the following:
+ ibdry_owner(:)=-999
+ local_region(:,:)=-999.
+ z0 = Grid(0)%z(1,1) - (0.5)*Grid(0)%z_zeta(1,1)*Grid(0)%dzeta
+ z1 = Grid(0)%z(1,locnz) + (0.5)*Grid(0)%z_zeta(1,locnz)*Grid(0)%dzeta
+ z_limits(1,myid)=z0
+ z_limits(2,myid)=z1
+
+! make z_limits known globally
+  do i=0,numprocs-1
+   root=i  ! root process sends, all others receive
+   call MPI_BCAST( z_limits(1,i),2,MPI_REAL,root,comm,ierr)
+  enddo
+
+do i=1,npts
+
+  jplane=aint( float(i-1)/float(n_j) ) + 1
+
+  do k=0,numprocs-1
+   if( ibdry_locations(2,i) >= z_limits(1,k) .and.    &
+       ibdry_locations(2,i) <  z_limits(2,k)  ) then
+    ibdry_owner(i)=k
+    goto 100
+   endif
+  enddo  
+100  continue
+
+! owners determine local neighborhood of each immersed boundary point
+ if( ibdry_owner(i)==myid ) then
+   do k=1,nx
+    if( Grid(0)%x(k,1) > ibdry_locations(1,i) ) goto 101
+   enddo
+101 continue
+   local_region(1,i) = max(1,k-3)             ! 3 left of 1st point past or 1
+   local_region(2,i) = min(nx,k+2)            ! 2 right of 1st point past or nx
+
+   local_region(3,i) = jplane   !max(1,jplane-3)             
+   local_region(4,i) = jplane   !min(ny,jplane+2)           
+
+   do k=1,locnz
+    if( Grid(0)%z(1,k) > ibdry_locations(2,i) ) goto 102
+   enddo
+   k=locnz+1
+102 continue
+   local_region(5,i) = myid*locnz + k -3             ! 3 below 1st point above, global indexing
+   local_region(6,i) = myid*locnz + k +2             ! 2 above 1st point above, global indexing
+
+   if( local_region(5,i) < 1  ) local_region(5,i)=1    ! global k=1  is lowest  point to be influenced
+   if( local_region(6,i) > nz ) local_region(6,i)=nz   ! global k=nz is highest point to be influenced
+
+  endif   ! end logic for owner
+   
+! Share local region data, all processors execute the broadcasts
+  root = ibdry_owner(i)
+  call MPI_BCAST(local_region(1,i),6,MPI_INTEGER,root,comm,ierr) 
+
+enddo  ! end loop over all immersed points (in a j plane)
+
+ do i=1,npts
+  if( ibdry_owner(i) == -999 ) then
+   write(0,*) ' immersed boundary point ',n_j,' not claimed. z= ',ibdry_locations(2,i)
+   STOP
+  endif
+  if( local_region(1,i) == -999. .or. local_region(2,i) == -999. ) then
+   write(0,*) 'problem in defining local x region of bdry pt ',n_j
+   STOP
+  endif
+  if( local_region(5,i) < 0 .or. local_region(6,i) > nz ) then
+   write(0,*) 'problem in defining local z region of bdry pt ',n_j
+   write(0,*) ' z_0:  ',local_region(5,i)
+   write(0,*) ' z_1:  ',local_region(6,i)
+   STOP
+  endif
+ enddo
+
+ !Create a filename for writing out ibdry information
+  write(unit=cnum,fmt=200) myid
+200 format(I3.3)
+  filename='../output/ibdry_data_'//cnum
+  open(1,file=filename)
+  do i=1,n_j
+   write(1,201) i, ibdry_owner(i),ibdry_locations(1,i),ibdry_locations(2,i),   &
+                ibdry_normals(1,i),ibdry_normals(2,i),                         &
+                local_region(1,i), local_region(2,i),                          &
+                local_region(5,i), local_region(6,i)                           
+  enddo
+201 format(1x,2i3,4f10.6,4i6)
+  close(1)
+
+ write(0,*) ' FINISHED INITIALIZING IMMERSED BOUNDARY DATA ',myid
+ call MPI_BARRIER(comm,ierr)
+end subroutine initialize_immersed_bdry
Index: /trunk/00FlowSolve_PL/SRC/initialize_user.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/initialize_user.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/initialize_user.f90	(revision 6)
@@ -0,0 +1,106 @@
+subroutine initialize_user
+#define DEBUG_LEVEL 3
+
+use mpi_parameters
+use user_parameters
+use dependent_variables
+use dimensional_scales
+use immersed_boundary
+use grid_info
+use counters_flags_etc
+
+use dimensional_scales
+use pde_parameters
+implicit none
+
+include '../input/problem_size.h'
+include 'mpif.h'
+
+real       :: xval,yval,zval,rho_total
+real       :: near_surface_window
+real       :: near_x1_window
+real       :: near_x0_window,window_scale
+
+if( user_subs_flag == 'no' ) return
+
+#if DEBUG_LEVEL >= 1
+ if( myid==0) then
+  write(0,*) ' '
+  write(0,*) ' '
+  write(0,*) 'hello world from initialize_user'
+  write(0,*) ' setting parameters for surface BCs'
+ endif
+#endif
+
+ x_0 = 600.
+ x_1 = 1200.            ! [m]   left ice/water interface
+!!! x_2 = x_1+200.        ! [m]   right ice/water interface
+ x_2 = x_1
+ V_0 = 0.40           ! [m/s] max ice speed at x_1
+ window_scale=5.0
+
+allocate( surface_V_of_x(nx) )
+
+! define surface velocity for sheared ice motion
+  do i=1,nx
+   xval = Grid(0)%x(i,1)*L_scale
+    if(xval >= x_0) then
+     near_x0_window = 1.0 - exp( -( (xval-x_0)/(window_scale) )**2  )  ! decay like gaussian w/ given scale
+    else
+     near_x0_window = 0.0
+    endif
+    if( xval >= x_1 ) then
+     near_x1_window = exp( -( (xval-x_1)/(window_scale) )**2  )  ! decay like gaussian w/ given scale
+    else
+     near_x1_window = 1.0
+    endif
+     surface_V_of_x(i) = -V_0*((xval-x_0)/x_1)*near_x1_window*near_x0_window/U_scale
+  enddo
+
+!========================================================
+!ENABLE VERTICALLY VARYING EDDY VISCOSITY AND DIFFUSIVITY
+!
+allocate( Km_of_z(locnz), Kt_of_z(locnz) )
+
+  call set_diffusion
+
+!========================================================
+
+if( restart_flag == 'yes' ) return
+!
+  print*,'nx=',nx,'  ny=',ny,'  locnz=',locnz
+! we can also specify any non-zero initial conditions
+! here if desired, I've just re-set zeros here to illustrate
+  do i=1,nx
+!!! xlv Quelle valeur pour k ?  
+!!!   xval = Grid(0)%x(i,k)*L_scale   ! dimensional x position
+!!!
+   do j=1,ny
+    yval = Grid(0)%y(j)*L_scale    ! dimensional y position
+     do k=1,locnz
+!!! xlv
+      xval = Grid(0)%x(i,k)*L_scale   ! dimensional x positio
+!!!      
+      zval = Grid(0)%z(i,k)*L_scale   ! dimensional z position
+
+      near_surface_window = exp( -( (zval-L_scale)/(5.0) )**2  )  ! decay like gaussian w/ 5m scale
+      v(i,j,k)= 0.0*surface_V_of_x(i)*near_surface_window
+      u(i,j,k)=0.0/U_scale
+      w(i,j,k)=0.0/U_scale
+
+!!!      s1(i,j,k)=0.0/s1_scale
+!!!      s2(i,j,k)=0.0/s2_scale
+      s1(i,j,k)=0.0
+      s2(i,j,k)=0.0
+
+!     Contravariant rather than cartesian components are actually needed
+!     I'm assuming a stretched but cartesian grid for this problem
+!     no transformations needed for v or pd
+      u(i,j,k) = u(i,j,k)/Grid(0)%x_xi(i,k)       ! u --> U
+      w(i,j,k) = w(i,j,k)/Grid(0)%z_zeta(i,k)     ! w --> W
+
+     enddo
+    enddo
+   enddo
+
+end subroutine initialize_user
Index: /trunk/00FlowSolve_PL/SRC/makefile
===================================================================
--- /trunk/00FlowSolve_PL/SRC/makefile	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/makefile	(revision 6)
@@ -0,0 +1,160 @@
+SHELL=/bin/sh
+#
+include Make.inc
+#
+#FFTW_LIB = $(FFTW2_LIB_X)  -lsrfftw -lsfftw 
+#LIBS= $(FFTW_LIB) $(NETCDF_LIB_X) $(LAPACK_LIB_X) $(BLAS_LIB_X)
+#ALL_INCLUDE= $(NETCDF_INC_X) $(FFTW2_INC_X) $(MPI_INC_X)
+# f90 compiler:
+#f90=mpif90
+#f90O_FLAGS= -pg -c -Mpreprocess -Mbounds $(ALL_INCLUDE)
+# c and preprocessor flags
+#CFLAGS= -O2 
+#CPPFLAGS=
+#FPPFLAGS=
+##############################################
+
+
+cfd.x: MPI_Time.o cfd.o cfd_modules.o user_modules.o initialize_cfd.o \
+initialize_grids.o setup_compact_schemes.o compact_derivs6.o read_grid_data.o \
+initialize_immersed_bdry.o set_integration_weights.o initialize_user.o \
+rhs.o ibr.o hydrostatic.o dissipation.o user_rhs.o step.o \
+set_BC_values.o apply_BCs.o user_BCs.o divergence.o set_rhs_for_pressure.o \
+gradient.o project.o filter4.o init3D_netcdf.o write3D_netcdf.o grid_transfers.o \
+save_restart.o xy_fft.o solve_for_xyper_pressure.o apply_ibdry_rhs.o update_ibdry.o\
+nms_f90.o immersed_bdry_rhs.o noise.o EOS.o set_ambient_stratification.o \
+set_diffusion.o
+	$(f90) -pg  $(LIBS) \
+	 -o cfd.x MPI_Time.o cfd.o cfd_modules.o user_modules.o initialize_grids.o initialize_cfd.o \
+	setup_compact_schemes.o compact_derivs6.o set_integration_weights.o \
+	read_grid_data.o initialize_immersed_bdry.o initialize_user.o \
+	rhs.o ibr.o hydrostatic.o dissipation.o user_rhs.o step.o set_BC_values.o \
+	apply_BCs.o user_BCs.o divergence.o  set_rhs_for_pressure.o \
+	gradient.o project.o filter4.o init3D_netcdf.o write3D_netcdf.o save_restart.o \
+	grid_transfers.o xy_fft.o solve_for_xyper_pressure.o nms_f90.o \
+	apply_ibdry_rhs.o update_ibdry.o immersed_bdry_rhs.o  noise.o \
+        EOS.o set_ambient_stratification.o set_diffusion.o
+
+MPI_Time.o: MPI_Time.f90
+	$(f90) $(f90O_FLAGS) MPI_Time.f90
+
+cfd.o: cfd.f90 cfd_modules.o user_modules.o  \
+toggle.h  ../input/params.h  ../input/problem_size.h 
+	$(f90) $(f90O_FLAGS) cfd.f90
+
+cfd_modules.o: cfd_modules.f90 
+	$(f90) $(f90O_FLAGS) cfd_modules.f90
+
+user_modules.o: user_modules.f90 
+	$(f90) $(f90O_FLAGS) user_modules.f90
+
+initialize_grids.o: initialize_grids.f90 ../input/grid_data.h ../input/problem_size.h
+	$(f90) $(f90O_FLAGS) initialize_grids.f90
+
+initialize_cfd.o: initialize_cfd.f90 cfd.f90 ../input/params.h
+	$(f90) $(f90O_FLAGS)  initialize_cfd.f90
+
+initialize_user.o: initialize_user.f90 cfd.f90 ../input/params.h
+	$(f90) $(f90O_FLAGS)  initialize_user.f90
+
+compact_derivs6.o: compact_derivs6.f90 cfd_modules.o setup_compact_schemes.o
+	$(f90) $(f90O_FLAGS) compact_derivs6.f90 
+
+setup_compact_schemes.o: setup_compact_schemes.f90 
+	$(f90) $(f90O_FLAGS) setup_compact_schemes.f90
+
+xy_fft.o: xy_fft.f90 cfd_modules.o 
+	$(f90) $(f90O_FLAGS) xy_fft.f90
+
+initialize_immersed_bdry.o: initialize_immersed_bdry.f90 ../input/immersed_bdry_locations
+	$(f90) $(f90O_FLAGS) initialize_immersed_bdry.f90
+
+read_grid_data.o: read_grid_data.f90
+	$(f90) $(f90O_FLAGS) read_grid_data.f90
+
+set_integration_weights.o: set_integration_weights.f90
+	$(f90) $(f90O_FLAGS) set_integration_weights.f90
+
+solve_for_xyper_pressure.o: solve_for_xyper_pressure.f90
+	$(f90) $(f90O_FLAGS) solve_for_xyper_pressure.f90
+
+rhs.o: rhs.f90
+	$(f90) $(f90O_FLAGS) rhs.f90 
+
+ibr.o: ibr.f90
+	$(f90) $(f90O_FLAGS) ibr.f90
+
+apply_ibdry_rhs.o: apply_ibdry_rhs.f90
+	$(f90) $(f90O_FLAGS) apply_ibdry_rhs.f90 
+
+update_ibdry.o: update_ibdry.f90
+	$(f90) $(f90O_FLAGS) update_ibdry.f90 
+
+hydrostatic.o: hydrostatic.f90 cfd_modules.o
+	$(f90) $(f90O_FLAGS) hydrostatic.f90 ${MPIINC} 
+
+dissipation.o: dissipation.f90
+	$(f90) $(f90O_FLAGS) dissipation.f90
+
+user_rhs.o: user_rhs.f90
+	$(f90) $(f90O_FLAGS) user_rhs.f90 
+
+immersed_bdry_rhs.o: immersed_bdry_rhs.f90
+	$(f90) $(f90O_FLAGS) immersed_bdry_rhs.f90 
+
+step.o: step.f90
+	$(f90) $(f90O_FLAGS) step.f90
+
+set_BC_values.o: set_BC_values.f90
+	$(f90) $(f90O_FLAGS) set_BC_values.f90
+
+apply_BCs.o: apply_BCs.f90
+	$(f90) $(f90O_FLAGS) apply_BCs.f90 
+
+user_BCs.o: user_BCs.f90
+	$(f90) $(f90O_FLAGS) user_BCs.f90 
+
+divergence.o: divergence.f90
+	$(f90) $(f90O_FLAGS) divergence.f90 
+
+set_rhs_for_pressure.o: set_rhs_for_pressure.f90
+	$(f90)  $(f90O_FLAGS) set_rhs_for_pressure.f90 
+
+gradient.o: gradient.f90
+	$(f90) $(f90O_FLAGS) gradient.f90
+
+project.o: project.f90
+	$(f90) $(f90O_FLAGS) project.f90 
+
+filter4.o: filter4.f90
+	$(f90) $(f90O_FLAGS) filter4.f90
+
+init3D_netcdf.o: init3D_netcdf.f90
+	$(f90) $(f90O_FLAGS) init3D_netcdf.f90 
+
+write3D_netcdf.o: write3D_netcdf.f90
+	$(f90) $(f90O_FLAGS) write3D_netcdf.f90 
+
+save_restart.o: save_restart.f90
+	$(f90) $(f90O_FLAGS) save_restart.f90
+
+grid_transfers.o: grid_transfers.f90
+	$(f90) $(f90O_FLAGS) grid_transfers.f90 
+
+nms_f90.o: nms_f90.f90 
+	$(f90) $(f90O_FLAGS) nms_f90.f90
+
+noise.o: noise.f90
+	$(f90) $(f90O_FLAGS) noise.f90
+
+EOS.o: EOS.f90
+	$(f90) $(f90O_FLAGS) EOS.f90
+
+set_ambient_stratification.o: set_ambient_stratification.f90
+	$(f90) $(f90O_FLAGS) set_ambient_stratification.f90
+
+set_diffusion.o: set_diffusion.f90
+	$(f90) $(f90O_FLAGS) set_diffusion.f90
+
+clean:
+	rm -f *.x *.o *.mod runlog fort.*
Index: /trunk/00FlowSolve_PL/SRC/matvec.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/matvec.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/matvec.f90	(revision 6)
@@ -0,0 +1,455 @@
+subroutine matvec(u, v, ipar)
+
+!  routine to apply the discrete differential operator A
+!                                  v <-- Au
+!  A is the compact representation of transformed Laplacian operator
+!
+!      Interior points:
+!      V <- A[U] = 1/det_J*(Cxx U_x)_x + 1/y_eta*(Cyy U_y)_y + 1/det_J*(Czz U_z)_z
+!
+!     Boundary points:
+!     V <- B[U]
+!      B = boundary operator
+!      for Dirichlet conditions B = I
+!      for Neumann   conditions B = |d/dn|
+!                    where n is outward facing unit normal
+!**********************************************************
+
+!grid _info contains Grid(0:nlevels-1),  current_grid_level
+use grid_info
+use intermediate_variables
+use boundary_information
+use mpi_parameters
+use counters_flags_etc
+implicit none
+include 'mpif.h'
+
+real  ::  U(Grid(current_grid_level)%n1_it,Grid(current_grid_level)%n2_it,Grid(current_grid_level)%n3_it)
+real  ::  V(Grid(current_grid_level)%n1_it,Grid(current_grid_level)%n2_it,Grid(current_grid_level)%n3_it)
+
+!Local variables
+real, dimension(:,:,:), allocatable        :: dUdzeta,dUdxi,dUdeta
+real, dimension(:,:,:,:), allocatable      :: scratch
+
+integer                                    :: ipar(13),ii,flag,npts
+integer                                    :: status(MPI_STATUS_SIZE)
+real                                       :: h
+real                                       :: end_values(2)
+integer                                    :: nx,ny,nz,locnz
+real                                       :: dx,dy,dz
+real                                       :: xx, mean_value
+
+V=0.0
+ii = current_grid_level
+nx = Grid(ii)%n1            
+ny = Grid(ii)%n2            
+nz = Grid(ii)%n3            
+locnz = Grid(ii)%locn3      
+dx = Grid(ii)%dxi          
+dy = Grid(ii)%deta        
+dz = Grid(ii)%dzeta      
+
+flag=1               ! don't specify deriv values at ends
+end_values=-999999.  ! obsolete but required
+
+
+!***************************************************************************
+!    Store approximation of A[U] in V:
+!    V <-- 1/det_J*(Cxx U_x)_x + 1/y_eta*(Cyy U_y)_y + 1/det_J*(Czz U_z)_z
+!***************************************************************************
+
+
+!******************************************************************
+!               Logic branches
+!               depending on xy periodicity
+!******************************************************************
+
+ if( boundary_type2(1,1)=='periodic' .and. boundary_type4(1,1)=='periodic' ) then  
+
+  allocate ( dUdzeta(1,1,2)  )
+
+!***************************************************************************
+! z part of the problem first, U & V are nz vectors
+!***************************************************************************
+
+ h=dz
+ call compact_ddz(U,V,flag,end_values,1,1,nz)
+
+! Save dU/dzeta 
+ if( myid==0 .and. BC_pressure5(1,1) == 'Neumann' ) then   
+  dUdzeta(1,1,1) = V(1,1,1)
+ endif
+ if( myid==nprocs-1 .and. BC_pressure6(1,1) == 'Neumann' ) then   
+  dUdzeta(1,1,2) = V(1,1,nz)
+ endif
+
+!multiply U_z by Czz overwriting the result in held in V
+ V(1,1,:) = Grid(ii)%Czz(1,:)*V(1,1,:)    ! Czz is indep of x
+
+!differentiate (Czz U_z ) wrt z, overwrite results back into V
+ call compact_ddz(V,V,flag,end_values,1,1,nz)
+
+!multiply result by 1/det_J
+ V(1,1,:)=V(1,1,:)/Grid(ii)%det_J(1,:)
+
+! We've aready done the z part of the operator, now add on the algebraic, horizontal part.
+! We're working here in xy transform space so U is the current xy transformed P(z) estimate
+! at a fixed kx,ky location  (kx_val,ky_val; available via counters_flags_etc)
+
+  V(1,1,:) = V(1,1,:)         &
+           -( (kx_val)**2 * (Grid(ii)%Cxx(1,:)/Grid(ii)%det_J(1,:))   &
+             +(ky_val)**2 * (Grid(ii)%Cyy(1)/Grid(ii)%y_eta(1))  ) * U(1,1,:)
+
+! Neumann conditions at top&bottom
+  V(1,1,1)=dUdzeta(1,1,1)
+  V(1,1,nz)=dUdzeta(1,1,2)
+
+  deallocate (dUdzeta )
+
+ else    ! NONPERIODIC LOGIC
+
+!***************************************************************************
+! z part of the problem first
+!***************************************************************************
+allocate ( dUdzeta(nx,ny,2), dUdxi(ny,locnz,2), dUdeta(nx,locnz,2)  )
+
+ h=dz
+ call compact_ddz_mpi(U,V,flag,end_values,nx,ny,locnz)
+
+! Save dU/dzeta 
+ if( myid==0 .and. BC_pressure5(1,1) == 'Neumann' ) then   
+  dUdzeta(:,:,1) = V(:,:,1)
+ endif
+ if( myid==nprocs-1 .and. BC_pressure6(1,1) == 'Neumann' ) then   
+  dUdzeta(:,:,2) = V(:,:,locnz)
+ endif
+
+!multiply U_z by Czz overwriting the result in held in V
+ do j=1,ny
+   V(:,j,:) = Grid(ii)%Czz*V(:,j,:)
+ enddo
+
+!differentiate (Czz U_z ) wrt z, overwrite results back into V
+ call compact_ddz_mpi(V,V,flag,end_values,nx,ny,locnz)
+
+!multiply result by 1/det_J
+ do j=1,ny
+  V(:,j,:)=V(:,j,:)/Grid(ii)%det_J
+ enddo
+
+!******************************************************************
+!                 do x part, compact differentiation
+!******************************************************************
+
+!Take x derivative of U(:,:,1:locnz) and store result in scratch(:,:,:,1),
+ h=dx
+ call compact_ddx(U,scratch(1,1,1,1),flag,end_values,nx,ny,locnz)
+
+! Save dU/dxi on FACES 1&2
+ dUdxi(:,:,1) = scratch(1,:,:,1)
+ dUdxi(:,:,2) = scratch(nx,:,:,1)
+
+!multiply U_x by Cxx, overwriting the result in scratch(:,:,:,1)
+ do j=1,ny
+  scratch(:,j,:,1) = Grid(ii)%Cxx*scratch(:,j,:,1)
+ enddo
+
+!differentiate (Cxx U_x) wrt x, writing results into scratch(:,:,:,2)
+ call compact_ddx(scratch(1,1,1,1),scratch(1,1,1,2),flag,end_values,nx,ny,locnz)
+
+!divide (Cxx U_x)_x by det_J  and add the result to V
+!V then contains 1/det_J*{ (Cxx U_x)_x + (Czz U_z)_z  }
+ do j=1,ny
+  V(:,j,:) =  V(:,j,:) + scratch(:,j,:,2)/Grid(ii)%det_J
+ enddo
+
+!******************************************************************
+!                 do y part, compact differentiation 
+!******************************************************************
+
+!Take y derivative of U(:,:,1:locnz) and store result in scratch(:,:,:,1).
+ h=dy
+ call compact_ddy(U,scratch(1,1,1,1),flag,end_values,nx,ny,locnz)
+
+! Save dU/deta on FACES 3&4
+ dUdeta(:,:,1) = scratch(:,1,:,1)
+ dUdeta(:,:,2) = scratch(:,ny,:,1)
+
+!multiply U_y by Cyy, overwriting the result in scratch
+ do j=1,ny
+  scratch(:,j,:,1) = Grid(ii)%Cyy(j)*scratch(:,j,:,1)
+ enddo
+
+!differentiate (Cyy U_y) wrt y, write results back into scratch(:,:,:,2)
+  call compact_ddy(scratch(1,1,1,1),scratch(1,1,1,2),flag,end_values,nx,ny,locnz)
+
+!add 1/y_eta (Cyy U_y)_y to V. Note Cyy=1/y_eta. V then contains:
+!1/det_J*(Cxx U_x)_x + 1/y_eta*(Cyy U_y)_y + 1/det_J*(Czz U_z)_z
+ do j=1,ny
+  V(:,j,:) = V(:,j,:) + Grid(ii)%Cyy(j)*scratch(:,j,:,2)
+ enddo
+
+!******************************************************************
+!        overwrite boundary locations w/ boundary operators
+!******************************************************************
+
+! USE IDENTITY OPERATOR FOR DIRICHLET BCs:*************************
+ if( BC_pressure1(1,1) == 'Dirichlet' ) then   
+  V(1,:,:)=U(1,:,:)
+ endif
+ if( BC_pressure2(1,1) == 'Dirichlet' ) then   
+  V(nx,:,:)=U(nx,:,:)
+ endif
+
+ if( BC_pressure3(1,1) == 'Dirichlet' ) then   
+  V(:,1,:)=U(:,1,:)
+ endif
+ if( BC_pressure4(1,1) == 'Dirichlet' ) then   
+  V(:,ny,:)=U(:,ny,:)
+ endif
+
+ if( myid==0 .and. BC_pressure5(1,1) == 'Dirichlet' ) then   
+  V(:,:,1)=U(:,:,1)
+ endif
+ if( myid==nprocs-1 .and. BC_pressure6(1,1) == 'Dirichlet' ) then   
+  V(:,:,locnz)=U(:,:,locnz)
+ endif
+
+! USE NORMAL DERIV. OPERATOR FOR NEUMANN BCs:*************************
+ if( BC_pressure1(1,1) == 'Neumann' ) then   
+  V(1,:,:)=dUdxi(:,:,1)
+ endif
+ if( BC_pressure2(1,1) == 'Neumann' ) then   
+  V(nx,:,:)=dUdxi(:,:,2)
+ endif
+
+ if( BC_pressure3(1,1) == 'Neumann' ) then   
+  V(:,1,:)=dUdeta(:,:,1)
+ endif
+ if( BC_pressure4(1,1) == 'Neumann' ) then   
+  V(:,ny,:)=dUdeta(:,:,2)
+ endif
+
+ if( myid==0 .and. BC_pressure5(1,1) == 'Neumann' ) then   
+  V(:,:,1)=dUdzeta(:,:,1)
+ endif
+ if( myid==nprocs-1 .and. BC_pressure6(1,1) == 'Neumann' ) then   
+  V(:,:,locnz)=dUdzeta(:,:,2)
+ endif
+
+ deallocate (dUdzeta, dUdxi,dUdeta)
+endif    ! END XY PERIODIC IF BLOCK
+
+end subroutine matvec
+
+
+
+subroutine mg_solve(b,x,ipar)
+ 
+! Routine to apply M ~ A_inverse to the rhs
+! vector b, producing an approximate solution x.
+! M is defined to be n_mg_cycles full multigrid
+! cycles. The FMG cycles start and end at the
+! finest (h=0) grid level.
+!
+
+use grid_info
+use counters_flags_etc, only: n_mg_cycles,istep,istart,tol
+use mpi_parameters, only: myid
+implicit none
+
+integer        :: i,N,ipar(13)
+real           :: b(Grid(0)%n1,Grid(0)%n2,Grid(0)%locn3)
+real           :: x(Grid(0)%n1,Grid(0)%n2,Grid(0)%locn3)
+character(len=3) :: mg_cycle_type
+
+  if( istep<istart ) then
+   mg_cycle_type='FMG'
+  else
+   mg_cycle_type='V'
+  endif
+  N=n_mg_cycles
+
+! (1)  store the input vector b in the "f" location of the fine grid:
+   Grid(0)%f = b
+
+! (2) MG cycles:
+   if( mg_cycle_type=='FMG') then
+    call FMG(0)    !  use Grid(0)%f as input and updates Grid(0)%v
+   elseif(mg_cycle_type=='V') then
+    Grid(0)%v=0.0
+    do i=1,N
+     call V_cycle(0)
+     if(myid==0)write(0,*) i,Grid(0)%spar(2)
+     if( Grid(0)%spar(2) < tol ) goto 999   ! convergence
+    enddo
+   else
+    write(0,*) 'mg_cycle_type not properly defined'
+    STOP
+   endif
+   
+! (3) extract the solution from Grid(0), store in output vector x:
+999 continue
+   x = Grid(0)%v
+   
+   current_grid_level=0    ! return global variable to fine grid value
+ end subroutine mg_solve
+
+
+subroutine diagl(U,V,ipar)
+!
+! Routine to apply M ~ (1/diag) to the rhs
+! vector b, producing an approximate solution x.
+!
+
+use grid_info
+use boundary_information
+use counters_flags_etc
+use mpi_parameters
+implicit none
+
+integer        :: h,ipar(13)
+real           :: diag_FD   ! approximate diagonal element in a FD discretization at level h
+real           :: pi
+real :: U(Grid(current_grid_level)%n1,Grid(current_grid_level)%n2,Grid(current_grid_level)%locn3)
+real :: V(Grid(current_grid_level)%n1,Grid(current_grid_level)%n2,Grid(current_grid_level)%locn3)
+real, allocatable                          :: kx(:),ky(:)
+integer                                    :: N
+
+
+h=current_grid_level
+
+if( boundary_type2(1,1)=='periodic' .and. boundary_type2(1,1)=='periodic' ) then
+
+!  create the x & y wavenumber arrays, align with the data arrays
+  N=Grid(h)%n1-1         ! n1 includes both boundary points, N only 1
+  pi=4.*atan(1.)
+  allocate(kx(N+1))
+  do i=1,N/2+1
+   kx(i)=2.*pi*(i-1.)    ! FFTW real to half-complex storage
+  enddo
+  do i=2,N/2
+   kx(N-i+2)=kx(i)       ! FFTW real to half-complex storage
+  enddo
+  kx(N+1)=0.             ! extra location, convenient for alignment of arrays
+ 
+
+  N=Grid(h)%n2-1         ! n2 includes both boundary points, N only 1
+  allocate(ky(N+1))
+  do j=1,N/2+1
+   ky(j)=2.*pi*(j-1.)    ! FFTW real to half-complex storage
+  enddo
+  do j=2,N/2
+   ky(N-j+2)=ky(j)       ! FFTW real to half-complex storage
+  enddo
+  ky(N+1)=0.             ! extra location, convenient for alignment of arrays
+
+! precondition using the diagonal elements of an approximated operator
+  do i=1,Grid(h)%n1
+   do j=1,Grid(h)%n2
+    do k=1,Grid(h)%locn3
+     diag_FD = -2.*( Grid(h)%Czz(i,k)/(Grid(h)%dzeta)**2 )  &  ! diagonal term for FD approx of z operator
+                   - (kx(i)**2) * (Grid(h)%Cxx(i,k)/(Grid(h)%det_J(i,k)))           &   ! true diag term in F space
+                   - (ky(j)**2) * (Grid(h)%Cyy(j)/(Grid(h)%y_eta(j)))                   ! true diag term in F space
+
+     if( j==1 .and. k==1 ) then
+      write(0,*)'****** diag:  ',i, -2.*( Grid(h)%Czz(i,k)/(Grid(h)%dzeta)**2 ), - (kx(i)**2) * (Grid(h)%Cxx(i,k)/(Grid(h)%det_J(i,k)))
+     endif
+     V(i,j,k) = U(i,j,k)/diag_FD   ! interior points
+    enddo
+   enddo
+  enddo
+  STOP
+
+else
+
+! precondition using the diagonal elements of an approximated operator
+  do i=1,Grid(h)%n1
+   do j=1,Grid(h)%n2
+    do k=1,Grid(h)%locn3
+     diag_FD = -2.*( Grid(h)%Cxx(i,k)/(Grid(h)%dxi)**2       &
+                   + Grid(h)%Cyy(j  )/(Grid(h)%deta)**2      &
+                   + Grid(h)%Czz(i,k)/(Grid(h)%dzeta)**2 )
+     V(i,j,k) = U(i,j,k)/diag_FD   ! interior points
+    enddo
+   enddo
+  enddo
+
+endif
+
+! Redo Neumann boundaries: i.e. overwrite locations where the boundary operator differs from the interior operator
+
+if( BC_pressure1(1,1) == 'Neumann' ) then
+ do k=1,Grid(h)%locn3
+  do j=1,Grid(h)%n2
+   diag_FD = 1./Grid(h)%dxi
+   V(1,j,k)= U(1,j,k)/diag_FD
+  enddo
+ enddo
+endif
+
+ if( BC_pressure2(1,1) == 'Neumann' ) then
+ do k=1,Grid(h)%locn3
+  do j=1,Grid(h)%n2
+   diag_FD = 1./Grid(h)%dxi
+   V(Grid(h)%n1,j,k)= U(Grid(h)%n1,j,k)/diag_FD
+  enddo
+ enddo
+ endif
+
+ if( BC_pressure3(1,1) == 'Neumann' ) then 
+ do k=1,Grid(h)%locn3
+  do i=1,Grid(h)%n1
+   diag_FD = 1./Grid(h)%deta
+   V(i,1,k)= U(i,1,k)/diag_FD
+  enddo
+ enddo
+ endif
+
+ if( BC_pressure4(1,1) == 'Neumann' ) then  
+ do k=1,Grid(h)%locn3
+  do i=1,Grid(h)%n1
+   diag_FD = 1./Grid(h)%deta
+   V(i,Grid(h)%n2,k)= U(i,Grid(h)%n2,k)/diag_FD
+  enddo
+ enddo
+ endif
+
+ if( BC_pressure5(1,1) == 'Neumann' .and. myid==0 ) then
+ do i=1,Grid(h)%n1
+  do j=1,Grid(h)%n2
+   diag_FD = 1./Grid(h)%dzeta
+   V(i,j,1)= U(i,j,1)/diag_FD
+  enddo
+ enddo
+ endif
+
+ if( BC_pressure6(1,1) == 'Neumann' .and. myid==nprocs-1) then
+ do i=1,Grid(h)%n1
+  do j=1,Grid(h)%n2
+   diag_FD = 1./Grid(h)%dzeta
+   V(i,j,Grid(h)%locn3)= U(i,j,Grid(h)%locn3)/diag_FD
+  enddo
+ enddo
+ endif
+
+ if( boundary_type2(1,1)=='periodic' ) then
+ do k=1,Grid(h)%locn3
+  do j=1,Grid(h)%n2
+   diag_FD = 1.                                    ! Identity operator
+   V(Grid(h)%n1,j,k)= U(Grid(h)%n1,j,k)/diag_FD    ! only "far" endpts have I[P]=0
+  enddo
+ enddo
+ endif
+
+ if( boundary_type4(1,1)=='periodic' ) then
+ do k=1,Grid(h)%locn3
+  do i=1,Grid(h)%n1
+   diag_FD = 1
+   V(i,Grid(h)%n2,k)= U(i,Grid(h)%n2,k)/diag_FD
+  enddo
+ enddo
+ endif
+
+ return
+end
Index: /trunk/00FlowSolve_PL/SRC/multigrid.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/multigrid.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/multigrid.f90	(revision 6)
@@ -0,0 +1,243 @@
+recursive subroutine V_cycle(h)	!%%%%%%%%%%%%%%%%%%%%%%%%%%%
+!   Do a V cycle starting/ending at grid level h.
+!   Assume that the rhs vector f is stored in Grid(h)%f
+!   and that the initial guess v is stored in Grid(h)%v,
+!   both of which are available via the module grid_info.
+!   On output, the solution vector Grid(h)%v will be updated.
+ 				!see pp.40-41 of A multigrid tutorial, Briggs et al.
+
+use grid_info 			! finest grid level = 0, coarset grid level = (nlevels-1)
+use counters_flags_etc
+use mpi_parameters
+implicit none
+
+integer		      :: h, nu_1, nu_2
+
+nu_1 = V_sweeps_pre	        !  number of  (pre) relaxation sweeps
+nu_2 = V_sweeps_post	        !  number of  (post)relaxation sweeps
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+current_grid_level = h  ! matvec needs to know this value, share via module grid_info
+if(myid==0) then
+ !write(0,*)'    Starting V cycle at level ',h
+endif
+
+!(1) Relax nu_1 times on A u = f  @ level h with initial guess Grid(h)%v
+     call relax( Grid(h)%v, Grid(h)%f, nu_1,  h )     ! overwrite v, rhs in f
+
+!(2) If h is coarsest grid, then go to step 4
+     if( current_grid_level == Grid(0)%n_mg_levels-1  ) goto 4
+
+    !calculate A v  at level h, scratch <-- Av
+     call matvec( Grid(h)%v , Grid(h)%scratch, Grid(h)%ipar )   
+
+    ! use result to calculate f - A v at level h, overwrite scratch with the result
+     Grid(h)%scratch = -1*Grid(h)%scratch + Grid(h)%f
+
+    ! Restrict  ( f - A v ) at level h  to the next coarser grid (h+1), store in f
+     call restrict( Grid(h)%scratch, Grid(h+1)%f,  h )
+
+    ! set initial guess to zero at level (h+1)
+     Grid(h+1)%v = 0.0
+
+    !update Grid(h+1)%v by performing a V-cycle
+     call V_cycle(h+1)
+
+!(3) Correct Grid(h)%v  Grid(h)%v + interpolate( Grid(h+1)%v )
+     call interpolate( Grid(h+1)%v, Grid(h)%scratch, h)
+     Grid(h)%v = Grid(h)%v + Grid(h)%scratch
+
+
+!(4) Relax nu_2 times on A u = f  @ level h with initial guess Grid(h)%v
+4    continue
+     current_grid_level = h  ! matvec needs to know this value, share via module grid_info
+     call relax( Grid(h)%v, Grid(h)%f, nu_2,  h )
+
+end subroutine V_cycle 
+
+
+recursive subroutine FMG(h)   ! v <- FMG(f) ; level h
+!   Do a full multigrid V-cycle starting/ending at grid level h.
+!   Assume that the rhs vector f is stored in Grid(h)%f,
+!   which is available via the module grid_info.
+!   On output, the solution vector Grid(h)%v will be updated.
+ 				!see pp.43 of A multigrid tutorial, Briggs et al.
+
+use grid_info 			! finest grid level = 0, coarset grid level = (nlevels  1)
+use mpi_parameters, only:myid
+use counters_flags_etc, nu_0=>n_mg_cycles
+implicit none
+
+integer			            :: h
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+current_grid_level=h
+if(myid==0) then
+ write(0,*)'  Starting FMG cycle at level ',h
+ !write(0,*)'  coarsest level ',Grid(0)%n_mg_levels-1
+endif
+
+!(1) Check to see if h is coarsest grid
+if( h == Grid(0)%n_mg_levels - 1 ) then
+ Grid(h)%v = 0.0
+ goto 3
+else
+ call restrict(Grid(h)%f, Grid(h+1)%f, h ) ! f at level (h+1)  restrict( f at level h )
+ call FMG(h+1)                             ! v at level (h+1)  FMG( f at level (h+1) )
+endif
+
+!(2) Correct v at level h  interpolate( v at level h+1 )
+ call interpolate( Grid(h+1)%v, Grid(h)%v, h)
+
+!(3) do nu_0  level h V-cycles 
+3 continue
+ do i=1,nu_0
+   call V_cycle(h)     ! v  Vcycle(v,f), level (h), nu_0 times
+ enddo
+
+ current_grid_level = h  
+end subroutine FMG
+
+
+subroutine relax(v, f, n, h)	! relax at level h, for n iterations
+				! i.e. iterate n times on A v = f  (A<->matvec)
+				! overwrite result onto v
+!grid _info contains Grid(0:nlevels-1),  current_grid_level
+use grid_info
+use mpi_parameters
+use counters_flags_etc
+implicit none
+
+!Local variables
+real                             :: v(1), f(1) !only 1st location address referenced
+integer                          :: n, h
+real, dimension(:), allocatable  :: work
+
+external matvec, diagl, mg_solve, pdumr, pssum, psnrm2, progress
+
+if( current_grid_level .ne. h ) then
+ write(0,*) 'Routine relax: problem with current_grid_level/h'
+ write(0,*) current_grid_level,h
+ stop
+endif
+
+ Grid(h)%ipar(10)=n       ! set the number of iterations
+ Grid(h)%ipar(5)=n        ! set the number of basis vectors to match
+ Grid(h)%spar(1)=1.e-29   ! impossibly small, force specified number of relaxation sweeps
+
+ if( relax_precon == 'diagl' ) then
+  Grid(h)%ipar(8)=1 
+ elseif( relax_precon == 'mg' ) then
+  Grid(h)%ipar(8)=1 
+ elseif( relax_precon == 'none' ) then
+  Grid(h)%ipar(8)=0 
+ endif
+
+! Allocate work vector needed by particular method to be used
+ if( relaxation_method == 'rgmres' ) then
+  allocate( work( (4+Grid(h)%ipar(5))*Grid(h)%ipar(4) ) )  
+
+    if( relax_precon == 'diagl' ) then
+     call PIMSRGMRES(v, f, work, Grid(h)%ipar, Grid(h)%spar,   &
+                     matvec, diagl, pdumr, pssum, psnrm2, progress)
+    elseif( relax_precon == 'none' ) then
+     call PIMSRGMRES(v, f, work, Grid(h)%ipar, Grid(h)%spar,   &
+                     matvec, pdumr, pdumr, pssum, psnrm2, progress)
+    elseif( relax_precon == 'mg' ) then
+     call PIMSRGMRES(v, f, work, Grid(h)%ipar, Grid(h)%spar,   &
+                     matvec, mg_solve, pdumr, pssum, psnrm2, progress)
+    else
+     write(0,*) ' relax_precon string not valid in routine relax, multigrid.F90 '
+    endif
+
+ elseif( relaxation_method == 'rbicgstab' ) then
+  allocate( work( (6+2*Grid(h)%ipar(5))*Grid(h)%ipar(4) ) ) 
+
+    if( relax_precon == 'diagl' ) then
+     call PIMSRBICGSTAB(v, f, work, Grid(h)%ipar, Grid(h)%spar,   &
+                     matvec, diagl, pdumr, pssum, psnrm2, progress)
+    elseif( relax_precon == 'none' ) then
+     call PIMSRBICGSTAB(v, f, work, Grid(h)%ipar, Grid(h)%spar,   &
+                     matvec, pdumr, pdumr, pssum, psnrm2, progress)
+    elseif( relax_precon == 'mg' ) then
+     call PIMSRBICGSTAB(v, f, work, Grid(h)%ipar, Grid(h)%spar,   &
+                     matvec, mg_solve, pdumr, pssum, psnrm2, progress)
+    else
+     write(0,*) ' relax_precon string not valid in routine relax, multigrid.F90 '
+    endif
+
+ elseif( relaxation_method == 'bicgstab' ) then
+  allocate( work( 10*Grid(h)%ipar(4) ) )  
+
+    if( relax_precon == 'diagl' ) then
+     call PIMSBICGSTAB(v, f, work, Grid(h)%ipar, Grid(h)%spar,   &
+                     matvec, diagl, pdumr, pssum, psnrm2, progress)
+    elseif( relax_precon == 'none' ) then
+     call PIMSBICGSTAB(v, f, work, Grid(h)%ipar, Grid(h)%spar,   &
+                     matvec, pdumr, pdumr, pssum, psnrm2, progress)
+    elseif( relax_precon == 'mg' ) then
+     call PIMSBICGSTAB(v, f, work, Grid(h)%ipar, Grid(h)%spar,   &
+                     matvec, mg_solve, pdumr, pssum, psnrm2, progress)
+    else
+     write(0,*) ' relax_precon string not valid in routine relax, multigrid.F90 '
+    endif
+
+ elseif( relaxation_method == 'cg' ) then
+  allocate( work( 6*Grid(h)%ipar(4) ) )  
+
+    if( relax_precon == 'diagl' ) then
+     call PIMSCG(v, f, work, Grid(h)%ipar, Grid(h)%spar,   &
+                     matvec, diagl, pdumr, pssum, psnrm2, progress)
+    elseif( relax_precon == 'none' ) then
+     call PIMSCG(v, f, work, Grid(h)%ipar, Grid(h)%spar,   &
+                     matvec, pdumr, pdumr, pssum, psnrm2, progress)
+    elseif( relax_precon == 'mg' ) then
+     call PIMSCG(v, f, work, Grid(h)%ipar, Grid(h)%spar,   &
+                     matvec, mg_solve, pdumr, pssum, psnrm2, progress)
+    else
+     write(0,*) ' relax_precon string not valid in routine relax, multigrid.F90 '
+    endif
+
+ elseif( relaxation_method == 'cgs' ) then
+  allocate( work( 10*Grid(h)%ipar(4) ) )  
+
+    if( relax_precon == 'diagl' ) then
+     call PIMSCGS(v, f, work, Grid(h)%ipar, Grid(h)%spar,   &
+                     matvec, diagl, pdumr, pssum, psnrm2, progress)
+    elseif( relax_precon == 'none' ) then
+     call PIMSCGS(v, f, work, Grid(h)%ipar, Grid(h)%spar,   &
+                     matvec, pdumr, pdumr, pssum, psnrm2, progress)
+    elseif( relax_precon == 'mg' ) then
+     call PIMSCGS(v, f, work, Grid(h)%ipar, Grid(h)%spar,   &
+                     matvec, mg_solve, pdumr, pssum, psnrm2, progress)
+    else
+     write(0,*) ' relax_precon string not valid in routine relax, multigrid.F90 '
+    endif
+
+ elseif( relaxation_method == 'tfqmr' ) then
+  allocate( work( 12*Grid(h)%ipar(4) ) )  
+
+    if( relax_precon == 'diagl' ) then
+     call PIMSTFQMR(v, f, work, Grid(h)%ipar, Grid(h)%spar,   &
+                     matvec, diagl, pdumr, pssum, psnrm2, progress)
+    elseif( relax_precon == 'none' ) then
+     call PIMSTFQMR(v, f, work, Grid(h)%ipar, Grid(h)%spar,   &
+                     matvec, pdumr, pdumr, pssum, psnrm2, progress)
+    elseif( relax_precon == 'mg' ) then
+     call PIMSTFQMR(v, f, work, Grid(h)%ipar, Grid(h)%spar,   &
+                     matvec, mg_solve, pdumr, pssum, psnrm2, progress)
+    else
+     write(0,*) ' relax_precon string not valid in routine relax, multigrid.F90 '
+    endif
+
+ endif
+
+
+if( Grid(h)%ipar(11) < -1 ) then
+ if( myid ==0 ) write(0,*) 'problem in PIM relaxation, grid level ',h
+ stop
+endif
+
+deallocate( work )
+end subroutine relax
+
Index: /trunk/00FlowSolve_PL/SRC/nms_f90.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/nms_f90.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/nms_f90.f90	(revision 6)
@@ -0,0 +1,30779 @@
+function alngam ( x )
+!
+!*******************************************************************************
+!
+!! ALNGAM computes the log of the absolute value of the gamma function.
+!
+!
+!  Definition:
+!
+!    The Gamma function is defined as
+!
+!      GAMMA(Z) = INTEGRAL ( 0 <= T < Infinity) T**(Z-1) EXP(-T) DT
+!
+!    If Z is a positive integer, GAMMA(Z) = (Z-1)!, the factorial.
+!
+!    There is a special value:
+!
+!      GAMMA(0.5) = SQRT(PI).
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Modified:
+!
+!    31 May 2000
+!
+!  Parameters:
+!
+!    Input, real X, the argument of the gamma function.
+!
+!    Output, real ALNGAM, the logarithm of the absolute value of GAMMA(X).
+!
+  real alngam
+  real, save :: dxrel = 0.0E+00
+  real gamma
+  real, parameter :: pi = 3.14159265358979323846264338327950288419716939937510E+00
+  real r1mach
+  real r9lgmc
+  real sinpiy
+  real, parameter :: sq2pil = 0.91893853320467274E+00
+  real, parameter :: sqpi2l = 0.22579135264472743E+00
+  real x
+  real, save :: xmax = 0.0E+00
+  real y
+!
+  if ( xmax == 0.0E+00 ) then
+    xmax = huge ( xmax ) / log ( huge ( xmax ) )
+    dxrel = sqrt ( epsilon ( dxrel ) )
+  end if
+
+  y = abs ( x )
+
+  if ( y <= 10.0E+00 ) then
+
+    alngam = log ( abs ( gamma ( x ) ) )
+    return
+
+  end if
+
+  if ( y > xmax ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'ALNGAM - Fatal error!'
+    write ( *, * ) '  |X| is so big that ALNGAM will overflow.'
+    stop
+  end if
+
+  if ( x > 0.0E+00 ) then
+    alngam = sq2pil + ( x - 0.5E+00 )* log ( x ) - x + r9lgmc ( y )
+    return
+  end if
+
+  sinpiy = abs ( sin ( pi * y ) )
+
+  if ( sinpiy == 0.0E+00 ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'ALNGAM - Fatal error!'
+    write ( *, * ) '  X is a negative integer.'
+    stop
+  end if
+
+  if ( abs ( ( x - aint ( x - 0.5E+00 ) ) / x ) < dxrel ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'ALNGAM - Warning:'
+    write ( *, * ) '  Answer has less than half usual precision.'
+    write ( *, * ) '  X is very near a negative integer.'
+  end if
+
+  alngam = sqpi2l + ( x - 0.5E+00 ) * log ( y ) - x - log ( sinpiy ) &
+    - r9lgmc ( y )
+
+  return
+end
+subroutine asyjy ( funjy, x, fnu, flgjy, in, y, wk, iflw )
+!
+!*******************************************************************************
+!
+!! ASYJY computes high order Bessel functions J and Y.
+!
+!
+!  Description:
+!
+!    ASYJY implements the uniform asymptotic expansion of
+!    the J and Y Bessel functions for FNU >= 35 and real
+!    X > 0.0.  The forms are identical except for a change
+!    in sign of some of the terms.  This change in sign is
+!    accomplished by means of the flag FLGJY = 1 or -1. On
+!    flgjy = 1 the airy functions ai(x) and dai(x) are
+!    supplied by the external function jairy, and on
+!    flgjy = -1 the airy functions bi(x) and dbi(x) are
+!    supplied by the external funtion yairy.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Author:
+!
+!    D E Amos
+!
+!  Parameters:
+!
+!    Input, external FUNJY, is the function JAIRY or YAIRY.
+!
+!    Input, real X, the argument, which must be greater than 0.
+!
+!    Input, real FNU, the order of the first Bessel function.
+!    FNU is generally at least 35.
+!
+!    Input, real FLGJY, a selection flag
+!     1.0E+00 gives the j function
+!    -1.0E+00 gives the y function
+!
+!    Input, integer IN, the number of functions desired, which should be
+!    1 or 2.
+!
+!    Output, real Y(IN), contains the desired function values.
+!
+!    Output, integer IFLW, a flag indicating underflow or overflow
+!    return variables for besj only.
+!
+!    Output, real WK(7), contains the following values:
+!
+!      wk(1) = 1 - (x/fnu)**2 = w**2
+!      wk(2) = sqrt(abs(wk(1)))
+!      wk(3) = abs(wk(2) - atan(wk(2)))  or
+!              abs(ln((1 + wk(2))/(x/fnu)) - wk(2))
+!            = abs((2/3)*zeta**(3/2))
+!      wk(4) = fnu*wk(3)
+!      wk(5) = (1.5*wk(3)*fnu)**(1/3) = sqrt(zeta)*fnu**(1/3)
+!      wk(6) = sign(1.,w**2)*wk(5)**2 = sign(1.,w**2)*zeta*fnu**(2/3)
+!      wk(7) = fnu**(1/3)
+!
+  real abw2
+  real akm
+  real alfa(26,4)
+  real alfa1
+  real alfa2
+  real ap
+  real ar(8)
+  real asum
+  real az
+  real beta(26,5)
+  real beta1
+  real beta2
+  real beta3
+  real br(10)
+  real bsum
+  real c(65)
+  real con1
+  real con2
+  real con548
+  real cr(10)
+  real crz32
+  real dfi
+  real elim
+  real dr(10)
+  real fi
+  real flgjy
+  real fn
+  real fnu
+  real fn2
+  real gama(26)
+  integer i
+  integer i1mach
+  integer iflw
+  integer in
+  integer j
+  integer jn
+  integer jr
+  integer ju
+  integer k
+  integer kb
+  integer klast
+  integer kmax(5)
+  integer kp1
+  integer ks
+  integer ksp1
+  integer kstemp
+  integer l
+  integer lr
+  integer lrp1
+  real phi
+  real rcz
+  real rden
+  real relb
+  real rfn2
+  real rtz
+  real rzden
+  real sa
+  real sb
+  real suma
+  real sumb
+  real s1
+  real ta
+  real tau
+  real tb
+  real tfn
+  real tol
+  real, save :: tols = -6.90775527898214E+00
+  real t2
+  real upol(10)
+  real wk(*)
+  real x
+  real xx
+  real y(*)
+  real z
+  real z32
+  real r1mach
+
+  dimension alfa1(26,2), alfa2(26,2)
+  dimension beta1(26,2), beta2(26,2), beta3(26,1)
+!
+  external funjy
+!
+  equivalence (alfa(1,1),alfa1(1,1))
+  equivalence (alfa(1,3),alfa2(1,1))
+  equivalence (beta(1,1),beta1(1,1))
+  equivalence (beta(1,3),beta2(1,1))
+  equivalence (beta(1,5),beta3(1,1))
+!
+  data con1/6.66666666666667e-01/
+  data con2/3.33333333333333e-01/
+  data con548/1.04166666666667e-01/
+  data  ar(1),  ar(2),  ar(3),  ar(4),  ar(5),  ar(6),  ar(7), ar(8) &
+    / 8.35503472222222e-02, 1.28226574556327e-01, &
+      2.91849026464140e-01, 8.81627267443758e-01, 3.32140828186277, &
+      1.49957629868626e+01, 7.89230130115865e+01, 4.74451538868264e+02/
+
+  data  br(1), br(2), br(3), br(4), br(5), br(6), br(7), br(8), br(9), br(10) &
+    /-1.45833333333333e-01,-9.87413194444444e-02, &
+     -1.43312053915895e-01,-3.17227202678414e-01,-9.42429147957120e-01, &
+     -3.51120304082635,-1.57272636203680e+01,-8.22814390971859e+01, &
+     -4.92355370523671e+02,-3.31621856854797e+03/
+
+  data c(1), c(2), c(3), c(4), c(5), c(6), c(7), c(8), c(9), c(10), &
+     c(11), c(12), c(13), c(14), c(15), c(16), c(17), c(18), &
+     c(19), c(20), c(21), c(22), c(23), c(24)/ &
+     -2.08333333333333e-01,        1.25000000000000e-01, &
+      3.34201388888889e-01,       -4.01041666666667e-01, &
+      7.03125000000000e-02,       -1.02581259645062, &
+      1.84646267361111,       -8.91210937500000e-01, &
+      7.32421875000000e-02,        4.66958442342625, &
+     -1.12070026162230e+01,        8.78912353515625, &
+     -2.36408691406250,        1.12152099609375e-01, &
+     -2.82120725582002e+01,        8.46362176746007e+01, &
+     -9.18182415432400e+01,        4.25349987453885e+01, &
+     -7.36879435947963,        2.27108001708984e-01, &
+      2.12570130039217e+02,       -7.65252468141182e+02, &
+      1.05999045252800e+03,       -6.99579627376133e+02/
+
+  data c(25), c(26), c(27), c(28), c(29), c(30), c(31), c(32), &
+          c(33), c(34), c(35), c(36), c(37), c(38), c(39), c(40), &
+          c(41), c(42), c(43), c(44), c(45), c(46), c(47), c(48)/ &
+             2.18190511744212e+02,       -2.64914304869516e+01, &
+             5.72501420974731e-01,       -1.91945766231841e+03, &
+             8.06172218173731e+03,       -1.35865500064341e+04, &
+             1.16553933368645e+04,       -5.30564697861340e+03, &
+             1.20090291321635e+03,       -1.08090919788395e+02, &
+             1.72772750258446,        2.02042913309661e+04, &
+            -9.69805983886375e+04,        1.92547001232532e+05, &
+            -2.03400177280416e+05,        1.22200464983017e+05, &
+            -4.11926549688976e+04,        7.10951430248936e+03, &
+            -4.93915304773088e+02,        6.07404200127348, &
+            -2.42919187900551e+05,        1.31176361466298e+06, &
+            -2.99801591853811e+06,        3.76327129765640e+06/
+
+  data c(49), c(50), c(51), c(52), c(53), c(54), c(55), c(56), &
+          c(57), c(58), c(59), c(60), c(61), c(62), c(63), c(64), &
+          c(65)/ &
+            -2.81356322658653e+06,        1.26836527332162e+06, &
+            -3.31645172484564e+05,        4.52187689813627e+04, &
+            -2.49983048181121e+03,        2.43805296995561e+01, &
+             3.28446985307204e+06,       -1.97068191184322e+07, &
+             5.09526024926646e+07,       -7.41051482115327e+07, &
+             6.63445122747290e+07,       -3.75671766607634e+07, &
+             1.32887671664218e+07,       -2.78561812808645e+06, &
+             3.08186404612662e+05,       -1.38860897537170e+04, &
+             1.10017140269247e+02/
+
+  data alfa1(1,1), alfa1(2,1), alfa1(3,1), alfa1(4,1), alfa1(5,1), &
+          alfa1(6,1), alfa1(7,1), alfa1(8,1), alfa1(9,1), alfa1(10,1), &
+          alfa1(11,1),alfa1(12,1),alfa1(13,1),alfa1(14,1),alfa1(15,1), &
+          alfa1(16,1),alfa1(17,1),alfa1(18,1),alfa1(19,1),alfa1(20,1), &
+          alfa1(21,1),alfa1(22,1),alfa1(23,1),alfa1(24,1),alfa1(25,1), &
+          alfa1(26,1)     /-4.44444444444444e-03,-9.22077922077922e-04, &
+     -8.84892884892885e-05, 1.65927687832450e-04, 2.46691372741793e-04, &
+      2.65995589346255e-04, 2.61824297061501e-04, 2.48730437344656e-04, &
+      2.32721040083232e-04, 2.16362485712365e-04, 2.00738858762752e-04, &
+      1.86267636637545e-04, 1.73060775917876e-04, 1.61091705929016e-04, &
+      1.50274774160908e-04, 1.40503497391270e-04, 1.31668816545923e-04, &
+      1.23667445598253e-04, 1.16405271474738e-04, 1.09798298372713e-04, &
+      1.03772410422993e-04, 9.82626078369363e-05, 9.32120517249503e-05, &
+      8.85710852478712e-05, 8.42963105715700e-05, 8.03497548407791e-05/
+
+  data alfa1(1,2), alfa1(2,2), alfa1(3,2), alfa1(4,2), alfa1(5,2), &
+          alfa1(6,2), alfa1(7,2), alfa1(8,2), alfa1(9,2), alfa1(10,2), &
+          alfa1(11,2),alfa1(12,2),alfa1(13,2),alfa1(14,2),alfa1(15,2), &
+          alfa1(16,2),alfa1(17,2),alfa1(18,2),alfa1(19,2),alfa1(20,2), &
+          alfa1(21,2),alfa1(22,2),alfa1(23,2),alfa1(24,2),alfa1(25,2), &
+          alfa1(26,2)     / 6.93735541354589e-04, 2.32241745182922e-04, &
+     -1.41986273556691e-05,-1.16444931672049e-04,-1.50803558053049e-04,&
+     -1.55121924918096e-04,-1.46809756646466e-04,-1.33815503867491e-04, &
+     -1.19744975684254e-04,-1.06184319207974e-04,-9.37699549891194e-05, &
+     -8.26923045588193e-05,-7.29374348155221e-05,-6.44042357721016e-05, &
+     -5.69611566009369e-05,-5.04731044303562e-05,-4.48134868008883e-05, &
+     -3.98688727717599e-05,-3.55400532972042e-05,-3.17414256609022e-05, &
+     -2.83996793904175e-05,-2.54522720634871e-05,-2.28459297164725e-05, &
+     -2.05352753106481e-05,-1.84816217627666e-05,-1.66519330021394e-05/
+
+  data alfa2(1,1), alfa2(2,1), alfa2(3,1), alfa2(4,1), alfa2(5,1), &
+          alfa2(6,1), alfa2(7,1), alfa2(8,1), alfa2(9,1), alfa2(10,1), &
+          alfa2(11,1),alfa2(12,1),alfa2(13,1),alfa2(14,1),alfa2(15,1), &
+          alfa2(16,1),alfa2(17,1),alfa2(18,1),alfa2(19,1),alfa2(20,1), &
+          alfa2(21,1),alfa2(22,1),alfa2(23,1),alfa2(24,1),alfa2(25,1), &
+          alfa2(26,1)     /-3.54211971457744e-04,-1.56161263945159e-04, &
+      3.04465503594936e-05, 1.30198655773243e-04, 1.67471106699712e-04, &
+      1.70222587683593e-04, 1.56501427608595e-04, 1.36339170977445e-04, &
+      1.14886692029825e-04, 9.45869093034688e-05, 7.64498419250898e-05, &
+      6.07570334965197e-05, 4.74394299290509e-05, 3.62757512005344e-05, &
+      2.69939714979225e-05, 1.93210938247939e-05, 1.30056674793963e-05, &
+      7.82620866744497e-06, 3.59257485819352e-06, 1.44040049814252e-07, &
+     -2.65396769697939e-06,-4.91346867098486e-06,-6.72739296091248e-06, &
+     -8.17269379678658e-06,-9.31304715093561e-06,-1.02011418798016e-05/
+
+  data alfa2(1,2), alfa2(2,2), alfa2(3,2), alfa2(4,2), alfa2(5,2), &
+          alfa2(6,2), alfa2(7,2), alfa2(8,2), alfa2(9,2), alfa2(10,2), &
+          alfa2(11,2),alfa2(12,2),alfa2(13,2),alfa2(14,2),alfa2(15,2), &
+          alfa2(16,2),alfa2(17,2),alfa2(18,2),alfa2(19,2),alfa2(20,2), &
+          alfa2(21,2),alfa2(22,2),alfa2(23,2),alfa2(24,2),alfa2(25,2), &
+          alfa2(26,2)     / 3.78194199201773e-04, 2.02471952761816e-04, &
+     -6.37938506318862e-05,-2.38598230603006e-04,-3.10916256027362e-04, &
+     -3.13680115247576e-04,-2.78950273791323e-04,-2.28564082619141e-04, &
+     -1.75245280340847e-04,-1.25544063060690e-04,-8.22982872820208e-05, &
+     -4.62860730588116e-05,-1.72334302366962e-05, 5.60690482304602e-06, &
+      2.31395443148287e-05, 3.62642745856794e-05, 4.58006124490189e-05, &
+      5.24595294959114e-05, 5.68396208545815e-05, 5.94349820393104e-05, &
+      6.06478527578422e-05, 6.08023907788436e-05, 6.01577894539460e-05, &
+      5.89199657344698e-05, 5.72515823777593e-05, 5.52804375585853e-05/
+
+  data beta1(1,1), beta1(2,1), beta1(3,1), beta1(4,1), beta1(5,1), &
+          beta1(6,1), beta1(7,1), beta1(8,1), beta1(9,1), beta1(10,1), &
+          beta1(11,1),beta1(12,1),beta1(13,1),beta1(14,1),beta1(15,1), &
+          beta1(16,1),beta1(17,1),beta1(18,1),beta1(19,1),beta1(20,1), &
+          beta1(21,1),beta1(22,1),beta1(23,1),beta1(24,1),beta1(25,1), &
+          beta1(26,1)     / 1.79988721413553e-02, 5.59964911064388e-03, &
+      2.88501402231133e-03, 1.80096606761054e-03, 1.24753110589199e-03, &
+      9.22878876572938e-04, 7.14430421727287e-04, 5.71787281789705e-04, &
+      4.69431007606482e-04, 3.93232835462917e-04, 3.34818889318298e-04, &
+      2.88952148495752e-04, 2.52211615549573e-04, 2.22280580798883e-04, &
+      1.97541838033063e-04, 1.76836855019718e-04, 1.59316899661821e-04, &
+      1.44347930197334e-04, 1.31448068119965e-04, 1.20245444949303e-04, &
+      1.10449144504599e-04, 1.01828770740567e-04, 9.41998224204238e-05, &
+      8.74130545753834e-05, 8.13466262162801e-05, 7.59002269646219e-05/
+
+  data beta1(1,2), beta1(2,2), beta1(3,2), beta1(4,2), beta1(5,2), &
+          beta1(6,2), beta1(7,2), beta1(8,2), beta1(9,2), beta1(10,2), &
+          beta1(11,2),beta1(12,2),beta1(13,2),beta1(14,2),beta1(15,2), &
+          beta1(16,2),beta1(17,2),beta1(18,2),beta1(19,2),beta1(20,2), &
+          beta1(21,2),beta1(22,2),beta1(23,2),beta1(24,2),beta1(25,2), &
+          beta1(26,2)     /-1.49282953213429e-03,-8.78204709546389e-04, &
+     -5.02916549572035e-04,-2.94822138512746e-04,-1.75463996970783e-04, &
+     -1.04008550460816e-04,-5.96141953046458e-05,-3.12038929076098e-05, &
+     -1.26089735980230e-05,-2.42892608575730e-07, 8.05996165414274e-06, &
+      1.36507009262147e-05, 1.73964125472926e-05, 1.98672978842134e-05, &
+      2.14463263790823e-05, 2.23954659232457e-05, 2.28967783814713e-05, &
+      2.30785389811178e-05, 2.30321976080909e-05, 2.28236073720349e-05, &
+      2.25005881105292e-05, 2.20981015361991e-05, 2.16418427448104e-05, &
+      2.11507649256221e-05, 2.06388749782171e-05, 2.01165241997082e-05/
+
+  data beta2(1,1), beta2(2,1), beta2(3,1), beta2(4,1), beta2(5,1), &
+          beta2(6,1), beta2(7,1), beta2(8,1), beta2(9,1), beta2(10,1), &
+          beta2(11,1),beta2(12,1),beta2(13,1),beta2(14,1),beta2(15,1), &
+          beta2(16,1),beta2(17,1),beta2(18,1),beta2(19,1),beta2(20,1), &
+          beta2(21,1),beta2(22,1),beta2(23,1),beta2(24,1),beta2(25,1), &
+          beta2(26,1)     / 5.52213076721293e-04, 4.47932581552385e-04, &
+      2.79520653992021e-04, 1.52468156198447e-04, 6.93271105657044e-05, &
+      1.76258683069991e-05,-1.35744996343269e-05,-3.17972413350427e-05, &
+     -4.18861861696693e-05,-4.69004889379141e-05,-4.87665447413787e-05, &
+     -4.87010031186735e-05,-4.74755620890087e-05,-4.55813058138628e-05, &
+     -4.33309644511266e-05,-4.09230193157750e-05,-3.84822638603221e-05, &
+     -3.60857167535411e-05,-3.37793306123367e-05,-3.15888560772110e-05, &
+     -2.95269561750807e-05,-2.75978914828336e-05,-2.58006174666884e-05, &
+     -2.41308356761280e-05,-2.25823509518346e-05,-2.11479656768913e-05/
+
+  data beta2(1,2), beta2(2,2), beta2(3,2), beta2(4,2), beta2(5,2), &
+          beta2(6,2), beta2(7,2), beta2(8,2), beta2(9,2), beta2(10,2), &
+          beta2(11,2),beta2(12,2),beta2(13,2),beta2(14,2),beta2(15,2), &
+          beta2(16,2),beta2(17,2),beta2(18,2),beta2(19,2),beta2(20,2), &
+          beta2(21,2),beta2(22,2),beta2(23,2),beta2(24,2),beta2(25,2), &
+          beta2(26,2)     /-4.74617796559960e-04,-4.77864567147321e-04, &
+     -3.20390228067038e-04,-1.61105016119962e-04,-4.25778101285435e-05, &
+      3.44571294294968e-05, 7.97092684075675e-05, 1.03138236708272e-04, &
+      1.12466775262204e-04, 1.13103642108481e-04, 1.08651634848774e-04, &
+      1.01437951597662e-04, 9.29298396593364e-05, 8.40293133016090e-05, &
+      7.52727991349134e-05, 6.69632521975731e-05, 5.92564547323195e-05, &
+      5.22169308826976e-05, 4.58539485165361e-05, 4.01445513891487e-05, &
+      3.50481730031328e-05, 3.05157995034347e-05, 2.64956119950516e-05, &
+      2.29363633690998e-05, 1.97893056664022e-05, 1.70091984636413e-05/
+
+  data beta3(1,1), beta3(2,1), beta3(3,1), beta3(4,1), beta3(5,1), &
+          beta3(6,1), beta3(7,1), beta3(8,1), beta3(9,1), beta3(10,1), &
+          beta3(11,1),beta3(12,1),beta3(13,1),beta3(14,1),beta3(15,1), &
+          beta3(16,1),beta3(17,1),beta3(18,1),beta3(19,1),beta3(20,1), &
+          beta3(21,1),beta3(22,1),beta3(23,1),beta3(24,1),beta3(25,1), &
+          beta3(26,1)     / 7.36465810572578e-04, 8.72790805146194e-04, &
+      6.22614862573135e-04, 2.85998154194304e-04, 3.84737672879366e-06, &
+     -1.87906003636972e-04,-2.97603646594555e-04,-3.45998126832656e-04, &
+     -3.53382470916038e-04,-3.35715635775049e-04,-3.04321124789040e-04, &
+     -2.66722723047613e-04,-2.27654214122820e-04,-1.89922611854562e-04, &
+     -1.55058918599094e-04,-1.23778240761874e-04,-9.62926147717644e-05, &
+     -7.25178327714425e-05,-5.22070028895634e-05,-3.50347750511901e-05, &
+     -2.06489761035552e-05,-8.70106096849767e-06, 1.13698686675100e-06, &
+      9.16426474122779e-06, 1.56477785428873e-05, 2.08223629482467e-05/
+
+  data gama(1),   gama(2),   gama(3),   gama(4),   gama(5), &
+          gama(6),   gama(7),   gama(8),   gama(9),   gama(10), &
+          gama(11),  gama(12),  gama(13),  gama(14),  gama(15), &
+          gama(16),  gama(17),  gama(18),  gama(19),  gama(20), &
+          gama(21),  gama(22),  gama(23),  gama(24),  gama(25), &
+          gama(26)        / 6.29960524947437e-01, 2.51984209978975e-01, &
+      1.54790300415656e-01, 1.10713062416159e-01, 8.57309395527395e-02, &
+      6.97161316958684e-02, 5.86085671893714e-02, 5.04698873536311e-02, &
+      4.42600580689155e-02, 3.93720661543510e-02, 3.54283195924455e-02, &
+      3.21818857502098e-02, 2.94646240791158e-02, 2.71581677112934e-02, &
+      2.51768272973862e-02, 2.34570755306079e-02, 2.19508390134907e-02, &
+      2.06210828235646e-02, 1.94388240897881e-02, 1.83810633800683e-02, &
+      1.74293213231963e-02, 1.65685837786612e-02, 1.57865285987918e-02, &
+      1.50729501494096e-02, 1.44193250839955e-02, 1.38184805735342e-02/
+!
+  ta = epsilon ( ta )
+  tol = max ( ta, 1.0E-15 )
+  tb = r1mach(5)
+  ju = i1mach(12)
+
+  if ( flgjy /= 1.0E+00 ) then
+    jr = i1mach(11)
+    elim = 2.303E+00 * tb * ( real ( - ju ) - real ( jr ) )
+  else
+    elim = 2.303 * ( tb * real ( - ju ) - 3.0E+00 )
+  end if
+
+  fn = fnu
+  iflw = 0
+
+  do jn = 1, in
+
+    xx = x / fn
+    wk(1) = 1.0E+00 - xx * xx
+    abw2 = abs ( wk(1) )
+    wk(2) = sqrt ( abw2 )
+    wk(7) = fn**con2
+
+    if ( abw2 > 0.27750 ) go to 80
+!
+!  asymptotic expansion
+!  cases near x=fn, abs(1.-(x/fn)**2)<=0.2775
+!  coefficients of asymptotic expansion by series
+!
+!  zeta and truncation for a(zeta) and b(zeta) series
+!
+!  kmax is truncation index for a(zeta) and b(zeta) series=max(2,sa)
+!
+    if ( abw2 == 0.0E+00 ) then
+      sa = 0.0E+00
+    else
+      sa = tols / log ( abw2 )
+    end if
+
+    sb = sa
+
+    do i = 1, 5
+      akm = max ( sa, 2.0E+00 )
+      kmax(i) = int ( akm )
+      sa = sa + sb
+    end do
+
+    kb = kmax(5)
+    klast = kb - 1
+    sa = gama(kb)
+
+    do k = 1, klast
+      kb = kb - 1
+      sa = sa * wk(1) + gama(kb)
+    end do
+
+    z = wk(1) * sa
+    az = abs ( z )
+    rtz = sqrt ( az )
+    wk(3) = con1 * az * rtz
+    wk(4) = wk(3) * fn
+    wk(5) = rtz * wk(7)
+    wk(6) = - wk(5) * wk(5)
+    if ( z <= 0.0E+00 ) go to 35
+    if ( wk(4) > elim ) go to 75
+    wk(6) = - wk(6)
+
+   35   continue
+
+    phi = sqrt ( sqrt ( sa + sa + sa + sa ) )
+!
+!     b(zeta) for s=0
+!
+    kb = kmax(5)
+    klast = kb - 1
+    sb = beta(kb,1)
+
+    do k = 1, klast
+      kb = kb - 1
+      sb = sb * wk(1) + beta(kb,1)
+    end do
+
+    ksp1 = 1
+    fn2 = fn * fn
+    rfn2 = 1.0E+00 / fn2
+    rden = 1.0E+00
+    asum = 1.0E+00
+    relb = tol * abs ( sb )
+    bsum = sb
+
+    do ks = 1, 4
+
+      ksp1 = ksp1 + 1
+      rden = rden * rfn2
+!
+!     a(zeta) and b(zeta) for s=1,2,3,4
+!
+      kstemp = 5 - ks
+      kb = kmax(kstemp)
+      klast = kb - 1
+      sa = alfa(kb,ks)
+      sb = beta(kb,ksp1)
+
+      do k = 1, klast
+        kb = kb - 1
+        sa = sa * wk(1) + alfa(kb,ks)
+        sb = sb * wk(1) + beta(kb,ksp1)
+      end do
+
+      ta = sa * rden
+      tb = sb * rden
+      asum = asum + ta
+      bsum = bsum + tb
+
+      if ( abs ( ta ) <= tol .and. abs ( tb ) <= relb ) then
+        exit
+      end if
+
+    end do
+
+!  70   continue
+
+    bsum = bsum / ( fn * wk(7) )
+
+    go to 160
+
+   75   continue
+    iflw = 1
+    return
+
+   80   continue
+
+    upol(1) = 1.0E+00
+    tau = 1.0E+00 / wk(2)
+    t2 = 1.0E+00 / wk(1)
+    if ( wk(1) >= 0.0E+00 ) go to 90
+!
+!  cases for (x/fn)>sqrt(1.2775)
+!
+    wk(3) = abs(wk(2)-atan(wk(2)))
+    wk(4) = wk(3)*fn
+    rcz = -con1/wk(4)
+    z32 = 1.5*wk(3)
+    rtz = z32**con2
+    wk(5) = rtz*wk(7)
+    wk(6) = -wk(5)*wk(5)
+    go to 100
+   90   continue
+!
+!     cases for (x/fn)<sqrt(0.7225)
+!
+    wk(3) = abs( log((1.0+wk(2))/xx)-wk(2))
+    wk(4) = wk(3)*fn
+    rcz = con1/wk(4)
+    if ( wk(4)>elim) go to 75
+    z32 = 1.5*wk(3)
+    rtz = z32**con2
+    wk(7) = fn**con2
+    wk(5) = rtz*wk(7)
+    wk(6) = wk(5)*wk(5)
+  100   continue
+    phi = sqrt((rtz+rtz)*tau)
+    tb = 1.0E+00
+    asum = 1.0E+00
+    tfn = tau/fn
+    upol(2) = (c(1)*t2+c(2))*tfn
+    crz32 = con548*rcz
+    bsum = upol(2) + crz32
+    relb = tol*abs(bsum)
+    ap = tfn
+    ks = 0
+    kp1 = 2
+    rzden = rcz
+    l = 2
+
+    do lr=2,8,2
+!
+!     compute two u polynomials for next a(zeta) and b(zeta)
+!
+      lrp1 = lr + 1
+      do k=lr,lrp1
+        ks = ks + 1
+        kp1 = kp1 + 1
+        l = l + 1
+        s1 = c(l)
+        do j=2,kp1
+          l = l + 1
+          s1 = s1*t2 + c(l)
+        end do
+        ap = ap*tfn
+        upol(kp1) = ap*s1
+        cr(ks) = br(ks)*rzden
+        rzden = rzden*rcz
+        dr(ks) = ar(ks)*rzden
+      end do
+
+      suma = upol(lrp1)
+      sumb = upol(lr+2) + upol(lrp1)*crz32
+      ju = lrp1
+
+      do jr = 1, lr
+        ju = ju - 1
+        suma = suma + cr(jr)*upol(ju)
+        sumb = sumb + dr(jr)*upol(ju)
+      end do
+
+      tb = -tb
+      if (wk(1)>0.0) tb = abs(tb)
+      asum = asum + suma*tb
+      bsum = bsum + sumb*tb
+
+      if ( abs(suma)<=tol .and. abs(sumb)<=relb ) then
+        exit
+      end if
+
+    end do
+
+! 150 continue
+
+    tb = wk(5)
+    if ( wk(1) > 0.0E+00 ) tb = -tb
+    bsum = bsum/tb
+
+  160   continue
+    call funjy(wk(6), wk(5), wk(4), fi, dfi)
+    y(jn) = flgjy*phi*(fi*asum+dfi*bsum)/wk(7)
+    fn = fn - flgjy
+
+  end do
+
+  return
+end
+subroutine bakslv ( nr, n, a, x, b )
+!
+!*******************************************************************************
+!
+!! BAKSLV solves A*x=b where A is an upper triangular matrix.
+!
+!
+!  Discussion:
+!
+!    BAKSLV solves the linear equations TRANSPOSE(A)*x=b, where A is a
+!    lower triangular matrix.  This routine is required by the UNCMIN
+!    minimization program.
+!
+!    If B is no longer required by calling routine, then vectors B and
+!    X may share the same storage, and the output value of X will
+!    overwrite the input value of B.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+!    Input, integer NR, the leading dimension of A.
+!
+!    Input, integer N, the number of rows and columns in A.
+!
+!    Input, real A(NR,N), the N by N matrix, containing the lower
+!    triangular matrix.  A is not altered by this routine.
+!
+!    Output, real X(N), the solution vector.
+!
+!    Input, real B(N), the right hand side vector.
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real b(n)
+  integer i
+  integer ip1
+  integer j
+  real x(n)
+!
+!  Solve (l-transpose)x=b. (back solve)
+!
+  i = n
+  x(i) = b(i) / a(i,i)
+
+  if ( n == 1 ) then
+    return
+  end if
+
+  do
+
+    ip1 = i
+    i = i - 1
+
+    x(i) = ( b(i) - dot_product ( x(ip1:n), a(ip1:n,i) ) ) / a(i,i)
+
+    if ( i == 1 ) then
+      exit
+    end if
+
+  end do
+
+  return
+end
+function besi0 ( x )
+!
+!*******************************************************************************
+!
+!! BESI0 computes the hyperbolic Bessel function of the first kind of order zero.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+!    Input, real X, the argument of the Bessel function.
+!
+!    Output, real BESI0, the value of the Bessel function at X.
+!
+  real besi0
+  real besi0e
+  real bi0cs(12)
+  real csevl
+  integer inits
+  integer, save :: nti0 = 0
+  real r1mach
+  real x
+  real, save :: xmax = 0.0E+00
+  real, save :: xsml = 0.0E+00
+  real y
+!
+  data bi0cs( 1) /   -0.07660547252839144951E+00 /
+  data bi0cs( 2) /    1.927337953993808270E+00 /
+  data bi0cs( 3) /    0.2282644586920301339E+00 /
+  data bi0cs( 4) /    0.01304891466707290428E+00 /
+  data bi0cs( 5) /    0.00043442709008164874E+00 /
+  data bi0cs( 6) /    0.00000942265768600193E+00 /
+  data bi0cs( 7) /    0.00000014340062895106E+00 /
+  data bi0cs( 8) /    0.00000000161384906966E+00 /
+  data bi0cs( 9) /    0.00000000001396650044E+00 /
+  data bi0cs(10) /    0.00000000000009579451E+00 /
+  data bi0cs(11) /    0.00000000000000053339E+00 /
+  data bi0cs(12) /    0.00000000000000000245E+00 /
+!
+  if ( nti0 == 0 ) then
+    nti0 = inits ( bi0cs, 12, 0.1E+00 * r1mach(3) )
+    xsml = 2.0E+00 * sqrt ( epsilon ( xsml ) )
+    xmax = log ( huge ( xmax ) )
+  end if
+
+  y = abs ( x )
+
+  if ( y <= 3.0E+00 ) then
+
+    if ( y > xsml ) then
+      besi0 = 2.75E+00 + csevl ( y*y/4.5E+00-1.0E+00, bi0cs, nti0 )
+    else
+      besi0 = 1.0E+00
+    end if
+
+    return
+
+  end if
+
+  if ( y > xmax ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'BESI0 - Fatal error!'
+    write ( *, * ) '  |X| is so big that BESI0 will overflow.'
+    stop
+  end if
+
+  besi0 = exp(y) * besi0e(x)
+
+  return
+end
+function besi0e ( x )
+!
+!*******************************************************************************
+!
+!! BESI0E computes the exponentially scaled hyperbolic Bessel function of the first kind of order ze
+!
+!
+!  Discussion:
+!
+!    BESI0E calculates the exponentially scaled modified hyperbolic
+!    Bessel function of the first kind of order zero for real argument X.
+!
+!      besi0e(x) = exp ( - abs ( x ) ) * i0 ( x ).
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+!    Input, real X, the argument of the Bessel function.
+!
+!    Output, real BESI0E, the value of the Bessel function at X.
+!
+  real ai02cs(22)
+  real ai0cs(21)
+  real besi0e
+  real bi0cs(12)
+  real csevl
+  integer inits
+  integer ntai0
+  integer ntai02
+  integer nti0
+  real r1mach
+  real x
+  real, save :: xsml = 0.0E+00
+  real y
+!
+  data bi0cs( 1) /   -.07660547252839144951 /
+  data bi0cs( 2) /   1.927337953993808270 /
+  data bi0cs( 3) /    .2282644586920301339 /
+  data bi0cs( 4) /    .01304891466707290428 /
+  data bi0cs( 5) /    .00043442709008164874 /
+  data bi0cs( 6) /    .00000942265768600193 /
+  data bi0cs( 7) /    .00000014340062895106 /
+  data bi0cs( 8) /    .00000000161384906966 /
+  data bi0cs( 9) /    .00000000001396650044 /
+  data bi0cs(10) /    .00000000000009579451 /
+  data bi0cs(11) /    .00000000000000053339 /
+  data bi0cs(12) /    .00000000000000000245 /
+  data ai0cs( 1) /    .07575994494023796 /
+  data ai0cs( 2) /    .00759138081082334 /
+  data ai0cs( 3) /    .00041531313389237 /
+  data ai0cs( 4) /    .00001070076463439 /
+  data ai0cs( 5) /   -.00000790117997921 /
+  data ai0cs( 6) /   -.00000078261435014 /
+  data ai0cs( 7) /    .00000027838499429 /
+  data ai0cs( 8) /    .00000000825247260 /
+  data ai0cs( 9) /   -.00000001204463945 /
+  data ai0cs(10) /    .00000000155964859 /
+  data ai0cs(11) /    .00000000022925563 /
+  data ai0cs(12) /   -.00000000011916228 /
+  data ai0cs(13) /    .00000000001757854 /
+  data ai0cs(14) /    .00000000000112822 /
+  data ai0cs(15) /   -.00000000000114684 /
+  data ai0cs(16) /    .00000000000027155 /
+  data ai0cs(17) /   -.00000000000002415 /
+  data ai0cs(18) /   -.00000000000000608 /
+  data ai0cs(19) /    .00000000000000314 /
+  data ai0cs(20) /   -.00000000000000071 /
+  data ai0cs(21) /    .00000000000000007 /
+  data ai02cs( 1) /    .05449041101410882 /
+  data ai02cs( 2) /    .00336911647825569 /
+  data ai02cs( 3) /    .00006889758346918 /
+  data ai02cs( 4) /    .00000289137052082 /
+  data ai02cs( 5) /    .00000020489185893 /
+  data ai02cs( 6) /    .00000002266668991 /
+  data ai02cs( 7) /    .00000000339623203 /
+  data ai02cs( 8) /    .00000000049406022 /
+  data ai02cs( 9) /    .00000000001188914 /
+  data ai02cs(10) /   -.00000000003149915 /
+  data ai02cs(11) /   -.00000000001321580 /
+  data ai02cs(12) /   -.00000000000179419 /
+  data ai02cs(13) /    .00000000000071801 /
+  data ai02cs(14) /    .00000000000038529 /
+  data ai02cs(15) /    .00000000000001539 /
+  data ai02cs(16) /   -.00000000000004151 /
+  data ai02cs(17) /   -.00000000000000954 /
+  data ai02cs(18) /    .00000000000000382 /
+  data ai02cs(19) /    .00000000000000176 /
+  data ai02cs(20) /   -.00000000000000034 /
+  data ai02cs(21) /   -.00000000000000027 /
+  data ai02cs(22) /    .00000000000000003 /
+  data nti0, ntai0, ntai02 / 3*0 /
+!
+  if ( nti0 == 0 ) then
+    nti0 = inits ( bi0cs, 12, 0.1E+00*r1mach(3) )
+    ntai0 = inits ( ai0cs, 21, 0.1E+00*r1mach(3) )
+    ntai02 = inits ( ai02cs, 22, 0.1E+00*r1mach(3) )
+    xsml = 2.0E+00 * sqrt ( epsilon ( xsml ) )
+  end if
+
+  y = abs(x)
+
+       if ( y <= xsml ) then
+
+    besi0e = 1.0E+00
+
+  else if ( y <= 3.0E+00 ) then
+
+    besi0e = exp(-y) * ( 2.75 + csevl (y*y/4.5-1.0, bi0cs, nti0) )
+
+  else if ( y <= 8.0E+00 ) then
+
+    besi0e = ( 0.375E+00 + csevl ((48.0/y-11.0)/5.0, ai0cs, ntai0) ) / sqrt(y)
+
+  else if ( y > 8.0E+00 ) then
+
+    besi0e = ( 0.375E+00 + csevl (16.0/y-1.0, ai02cs, ntai02)) / sqrt(y)
+
+  end if
+
+  return
+end
+subroutine besj ( x, alpha, n, y, nz )
+!
+!*******************************************************************************
+!
+!! BESJ computes an N member sequence of J Bessel functions.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    D. E. Amos, S. L. Daniel, M. K. Weston,
+!    SAND-75-0147
+!    CDC 6600 subroutines IBESS and JBESS for Bessel functions
+!      I(NU,X) and J(NU,X), X .GE. 0, NU .GE. 0
+!    ACM Transactions on Mathematical Software,
+!    Volume 3, pages 76-92, 1977.
+!
+!    F. W. J. Olver,
+!    Tables of Bessel Functions of Moderate or Large Orders,
+!    NPL Mathematical Tables, Vol. 6,
+!    Her Majesty's Stationery Office, London, 1962.
+!
+!  Discussion:
+!
+!    BESJ computes an N member sequence of J Bessel functions
+!
+!      J(ALPHA+K-1) (X)
+!
+!    for K=1,..,N for non-negative order ALPHA and X.
+!
+!    A combination of the power series, the asymptotic expansion for X
+!    to infinity and the uniform asymptotic expansion for NU to infinity
+!    are applied over subdivisions of the (NU,X) plane.  For values of
+!    (NU,X) not covered by one of these formulae, the order is
+!    incremented or decremented by integer values into a region where
+!    one of the formulas apply.
+!
+!    Backward recursion is applied to reduce orders by integer values
+!    except where the entire sequence lies in the oscillatory region.
+!    In this case forward recursion is stable and values from the
+!    asymptotic expansion for X to infinity start the recursion when it
+!    is efficient to do so.
+!
+!    Leading terms of the series and uniform expansion are tested for
+!    underflow.  If a sequence is requested and the last member would
+!    underflow, the result is set to zero and the next lower order
+!    tried, etc., until a member comes on scale or all members are set
+!    to zero.
+!
+!    Overflow cannot occur.
+!
+!  Parameters:
+!
+!    Input, real X, X .GE. 0.0, the argument of the Bessel function.
+!
+!    Input, real ALPHA, order of first member of the sequence.
+!    ALPHA must be at least 0.0.
+!
+!    Input, integer N, number of members in the sequence,
+!    N must be at least 1.
+!
+!    Output, real Y(N), a vector whose first N components contain
+!    values for J/sub(ALPHA+K-1)/(X), K=1,...,N
+!
+!    Output, integer NZ, the number of components of Y set to zero
+!    due to underflow,
+!
+!    NZ=0, normal return, computation completed
+!
+!    NZ .NE. 0, Y(N-NZ+1) through Y(N) were set to 0.
+!
+  external jairy
+!
+  real ak
+  real akm
+  real alngam
+  real alpha
+  real ans
+  real ap
+  real arg
+  real coef
+  real dalpha
+  real dfn
+  real dtm
+  real earg
+  real elim1
+  real etx
+  real fidal
+  real flgjy
+  real fn
+  real fnf
+  real fni
+  real fnp1
+  real fnu
+  real fnulim(2)
+  real gln
+  integer i
+  integer i1
+  integer i1mach
+  integer i2
+  integer ialp
+  integer idalp
+  integer iflw
+  integer in
+  integer, parameter :: inlim = 150
+  integer is
+  integer k
+  integer kk
+  integer km
+  integer kt
+  integer n
+  integer nn
+  integer ns
+  integer nz
+  real, parameter :: pdf = 0.785398163397448E+00
+  real pidt
+  real pp(4)
+  real r1mach
+  real rden
+  real relb
+  real rttp
+  real, parameter :: rtwo = 1.34839972492648E+00
+  real rtx
+  real rzden
+  real s
+  real sa
+  real sb
+  real sxo2
+  real s1
+  real s2
+  real t
+  real ta
+  real tau
+  real tb
+  real temp(3)
+  real tfn
+  real tm
+  real tol
+  real tolln
+  real trx
+  real tx
+  real t1
+  real t2
+  real wk(7)
+  real x
+  real xo2
+  real xo2l
+  real y(1)
+!
+  data rttp,pidt / 7.97884560802865e-01, 1.57079632679490/
+  data  pp(1),  pp(2),  pp(3),  pp(4) / 8.72909153935547, &
+    2.65693932265030e-01, 1.24578576865586e-01, 7.70133747430388e-04/
+  data fnulim(1), fnulim(2) /      100.0,     60.0E+00     /
+!
+  nz = 0
+  kt = 1
+!     i1mach(14) replaces i1mach(11) in a double precision code
+!     i1mach(15) replaces i1mach(12) in a double precision code
+  ta = epsilon ( ta )
+  tol = max (ta,1.0e-15)
+  i1 = i1mach(11) + 1
+  i2 = i1mach(12)
+  tb = r1mach(5)
+  elim1 = 2.303*(real(-i2)*tb-3.0)
+!
+!     tolln = -ln(tol)
+!
+  tolln = 2.303*tb*real(i1)
+  tolln = min (tolln,34.5388)
+  if (n-1) 720, 10, 20
+   10 kt = 2
+   20 nn = n
+  if (x) 730, 30, 80
+   30 if (alpha) 710, 40, 50
+   40 y(1) = 1.0E+00
+  if (n==1) return
+  i1 = 2
+  go to 60
+   50 i1 = 1
+   60 continue
+
+  y(i1:n) = 0.0E+00
+
+  return
+   80 continue
+  if (alpha<0.0) go to 710
+
+  ialp = int(alpha)
+  fni = real(ialp+n-1)
+  fnf = alpha - real(ialp)
+  dfn = fni + fnf
+  fnu = dfn
+  xo2 = x*0.5
+  sxo2 = xo2*xo2
+!
+!     decision tree for region where series, asymptotic expansion for x
+!     to infinity and asymptotic expansion for nu to infinity are
+!     applied.
+!
+  if (sxo2<=(fnu+1.0)) go to 90
+  ta = max (20.0,fnu)
+  if (x>ta) go to 120
+  if (x>12.0) go to 110
+  xo2l = log(xo2)
+  ns = int(sxo2-fnu) + 1
+  go to 100
+   90 fn = fnu
+  fnp1 = fn + 1.0E+00
+  xo2l = log(xo2)
+  is = kt
+  if (x<=0.50) go to 330
+  ns = 0
+  100 fni = fni + real(ns)
+  dfn = fni + fnf
+  fn = dfn
+  fnp1 = fn + 1.0E+00
+  is = kt
+  if (n-1+ns>0) is = 3
+  go to 330
+  110 ans = max (36.0-fnu,0.0)
+  ns = int(ans)
+  fni = fni + real(ns)
+  dfn = fni + fnf
+  fn = dfn
+  is = kt
+  if (n-1+ns>0) is = 3
+  go to 130
+  120 continue
+  rtx = sqrt(x)
+  tau = rtwo*rtx
+  ta = tau + fnulim(kt)
+  if (fnu<=ta) go to 480
+  fn = fnu
+  is = kt
+!
+!  Uniform asymptotic expansion for nu to infinity
+!
+  130 continue
+  i1 = abs(3-is)
+  i1 = max(i1,1)
+  flgjy = 1.0E+00
+  call asyjy(jairy,x,fn,flgjy,i1,temp(is),wk,iflw)
+  if ( iflw/=0) go to 380
+  go to (320, 450, 620), is
+  310 temp(1) = temp(3)
+  kt = 1
+  320 is = 2
+  fni = fni - 1.0E+00
+  dfn = fni + fnf
+  fn = dfn
+  if ( i1==2) go to 450
+  go to 130
+!
+!  Series for (x/2)**2<=nu+1
+!
+  330 continue
+  gln = alngam(fnp1)
+  arg = fn*xo2l - gln
+  if (arg<(-elim1)) go to 400
+  earg = exp(arg)
+  340 continue
+  s = 1.0E+00
+  if (x<tol) go to 360
+  ak = 3.0E+00
+  t2 = 1.0E+00
+  t = 1.0E+00
+  s1 = fn
+
+  do k=1, 17
+    s2 = t2 + s1
+    t = -t*sxo2/s2
+    s = s + t
+    if (abs(t)<tol) go to 360
+    t2 = t2 + ak
+    ak = ak + 2.0E+00
+    s1 = s1 + fn
+  end do
+
+  360 continue
+  temp(is) = s*earg
+  go to (370, 450, 610), is
+  370 earg = earg*fn/xo2
+  fni = fni - 1.0E+00
+  dfn = fni + fnf
+  fn = dfn
+  is = 2
+  go to 340
+!
+!  Set underflow value and update parameters
+!
+  380 y(nn) = 0.0E+00
+  nn = nn - 1
+  fni = fni - 1.0E+00
+  dfn = fni + fnf
+  fn = dfn
+  if (nn-1) 440, 390, 130
+  390 kt = 2
+  is = 2
+  go to 130
+  400 y(nn) = 0.0E+00
+  nn = nn - 1
+  fnp1 = fn
+  fni = fni - 1.0E+00
+  dfn = fni + fnf
+  fn = dfn
+  if (nn-1) 440, 410, 420
+  410 continue
+  kt = 2
+  is = 2
+  420 if (sxo2<=fnp1) go to 430
+  go to 130
+  430 arg = arg - xo2l + log(fnp1)
+  if (arg<(-elim1)) go to 400
+  go to 330
+  440 nz = n - nn
+  return
+!
+!  Backward recursion section
+!
+  450 continue
+  nz = n - nn
+  if (kt==2) go to 470
+!     backward recur from index alpha+nn-1 to alpha
+  y(nn) = temp(1)
+  y(nn-1) = temp(2)
+  if (nn==2) return
+  trx = 2.0/x
+  dtm = fni
+  tm = (dtm+fnf)*trx
+  k = nn + 1
+  do i=3,nn
+    k = k - 1
+    y(k-2) = tm*y(k-1) - y(k)
+    dtm = dtm - 1.0E+00
+    tm = (dtm+fnf)*trx
+  end do
+  return
+  470 y(1) = temp(2)
+  return
+!
+!     asymptotic expansion for x to infinity with forward recursion in
+!     oscillatory region x>max(20, nu), provided the last member
+!     of the sequence is also in the region.
+!
+  480 continue
+  in = int(alpha-tau+2.0)
+  if (in<=0) go to 490
+  idalp = ialp - in - 1
+  kt = 1
+  go to 500
+  490 continue
+  idalp = ialp
+  in = 0
+  500 is = kt
+  fidal = real(idalp)
+  dalpha = fidal + fnf
+  arg = x - pidt*dalpha - pdf
+  sa = sin(arg)
+  sb = cos(arg)
+  coef = rttp/rtx
+  etx = 8.0*x
+  510 continue
+  dtm = fidal + fidal
+  dtm = dtm*dtm
+  tm = 0.0E+00
+  if (fidal==0.0E+00 .and. abs(fnf)<tol) go to 520
+  tm = 4.0*fnf*(fidal+fidal+fnf)
+  520 continue
+  trx = dtm - 1.0E+00
+  t2 = (trx+tm)/etx
+  s2 = t2
+  relb = tol*abs(t2)
+  t1 = etx
+  s1 = 1.0E+00
+  fn = 1.0E+00
+  ak = 8.0E+00
+
+  do k=1,13
+    t1 = t1 + etx
+    fn = fn + ak
+    trx = dtm - fn
+    ap = trx + tm
+    t2 = -t2*ap/t1
+    s1 = s1 + t2
+    t1 = t1 + etx
+    ak = ak + 8.0E+00
+    fn = fn + ak
+    trx = dtm - fn
+    ap = trx + tm
+    t2 = t2*ap/t1
+    s2 = s2 + t2
+    if (abs(t2)<=relb) go to 540
+    ak = ak + 8.0E+00
+  end do
+
+  540 temp(is) = coef*(s1*sb-s2*sa)
+  if ( is==2) go to 560
+  550 fidal = fidal + 1.0E+00
+  dalpha = fidal + fnf
+  is = 2
+  tb = sa
+  sa = -sb
+  sb = tb
+  go to 510
+!
+!  Forward recursion section
+!
+  560 if (kt==2) go to 470
+  s1 = temp(1)
+  s2 = temp(2)
+  tx = 2.0/x
+  tm = dalpha*tx
+  if (in==0) go to 580
+!
+!   Forward recur to index alpha
+!
+  do i = 1, in
+    s = s2
+    s2 = tm*s2 - s1
+    tm = tm + tx
+    s1 = s
+  end do
+
+  if (nn==1) go to 600
+  s = s2
+  s2 = tm*s2 - s1
+  tm = tm + tx
+  s1 = s
+  580 continue
+!
+!  Forward recur from index alpha to alpha+n-1
+!
+  y(1) = s1
+  y(2) = s2
+  if (nn==2) return
+  do i=3,nn
+    y(i) = tm*y(i-1) - y(i-2)
+    tm = tm + tx
+  end do
+  return
+  600 y(1) = s2
+  return
+!
+!     backward recursion with normalization by
+!     asymptotic expansion for nu to infinity or power series.
+!
+  610 continue
+!     computation of last order for series normalization
+  akm = max (3.0-fn,0.0)
+  km = int(akm)
+  tfn = fn + real(km)
+  ta = (gln+tfn-0.9189385332-0.0833333333/tfn)/(tfn+0.5)
+  ta = xo2l - ta
+  tb = -(1.0-1.5/tfn)/tfn
+  akm = tolln/(-ta+sqrt(ta*ta-tolln*tb)) + 1.5
+  in = km + int(akm)
+  go to 660
+  620 continue
+!
+!     computation of last order for asymptotic expansion normalization
+!
+  gln = wk(3) + wk(2)
+  if (wk(6)>30.0) go to 640
+  rden = (pp(4)*wk(6)+pp(3))*wk(6) + 1.0E+00
+  rzden = pp(1) + pp(2)*wk(6)
+  ta = rzden/rden
+  if (wk(1)<0.10) go to 630
+  tb = gln/wk(5)
+  go to 650
+  630 continue
+
+  tb=(1.259921049+(0.1679894730+0.0887944358*wk(1))*wk(1))/wk(7)
+  go to 650
+  640 continue
+  ta = 0.5*tolln/wk(4)
+  ta=((0.0493827160*ta-0.1111111111)*ta+0.6666666667)*ta*wk(6)
+  if (wk(1)<0.10) go to 630
+  tb = gln/wk(5)
+  650 in = int(ta/tb+1.5)
+  if (in>inlim) go to 310
+  660 continue
+  dtm = fni + real(in)
+  trx = 2.0/x
+  tm = (dtm+fnf)*trx
+  ta = 0.0E+00
+  tb = tol
+  kk = 1
+  670 continue
+!
+!     backward recur unindexed
+!
+  do i=1,in
+    s = tb
+    tb = tm*tb - ta
+    ta = s
+    dtm = dtm - 1.0E+00
+    tm = (dtm+fnf)*trx
+  end do
+!
+!     normalization
+  if (kk/=1) go to 690
+  ta = (ta/tb)*temp(3)
+  tb = temp(3)
+  kk = 2
+  in = ns
+  if (ns/=0) go to 670
+  690 y(nn) = tb
+  nz = n - nn
+  if (nn==1) return
+  k = nn - 1
+  y(k) = tm*tb - ta
+  if (nn==2) return
+  dtm = dtm - 1.0E+00
+  tm = (dtm+fnf)*trx
+  km = k - 1
+!
+!  backward recur indexed
+!
+  do i=1,km
+    y(k-1) = tm*y(k) - y(k+1)
+    dtm = dtm - 1.0E+00
+    tm = (dtm+fnf)*trx
+    k = k - 1
+  end do
+
+  return
+
+  710 continue
+  call xerror( 'besj - order, alpha, less than zero.', 36, 2, 1)
+  return
+  720 continue
+  call xerror( 'besj - n less than one.', 23, 2, 1)
+  return
+  730 continue
+  call xerror( 'besj - x less than zero.', 24, 2, 1)
+  return
+end
+subroutine bp ( n, b, x )
+!
+!*******************************************************************************
+!
+!! BP evaluates the N+1 Bernstein basis functions of degree N on [0,1].
+!
+!
+!  Definition:
+!
+!    The I-th Bernstein basis polynomial of degree N is defined as:
+!
+!      B(N,I,X)= N!/(I!*(N-I)!) * (1-X)**(N-I) * X**I
+!
+!    although this is not how the values are computed.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+!    Input, integer N, should be 0 or greater.
+!
+!    Input, real X, the point where the functions should be evaluated.
+!
+!    Output, real B(0:N), the values of the Bernstein polynomials
+!    at the point X.
+!
+  integer n
+!
+  real b(0:n)
+  integer i
+  integer j
+  real x
+!
+  if ( n == 0 ) then
+
+    b(0) = 1.0E+00
+
+  else if ( n > 0 ) then
+
+    do i = 1, n
+
+       if ( i == 1 ) then
+         b(1) = x
+       else
+         b(i) = x * b(i-1)
+       end if
+
+       do j = i-1, 1, -1
+         b(j) = x * b(j-1) + ( 1.0E+00 - x ) * b(j)
+       end do
+
+       if ( i == 1 ) then
+         b(0) = 1.0E+00 - x
+       else
+         b(0) = ( 1.0E+00 - x ) * b(0)
+       end if
+
+    end do
+
+  end if
+
+  return
+end
+subroutine cfftb ( n, c, wsave )
+!
+!*******************************************************************************
+!
+!! CFFTB computes the backward complex discrete Fourier transform.
+!
+!
+!  Discussion:
+!
+!    This process is sometimes called Fourier synthesis.
+!
+!    CFFTB computes a complex periodic sequence from its Fourier coefficients.
+!
+!    A call of CFFTF followed by a call of CFFTB will multiply the
+!    sequence by N.  In other words, the transforms are not normalized.
+!
+!    The array WSAVE must be initialized by CFFTI.
+!
+!    The transform is defined by:
+!
+!      C_out(J) = sum ( 1 <= K <= N )
+!        C_in(K) * exp ( sqrt ( - 1 ) * ( J - 1 ) * ( K - 1 ) * 2 * PI / N )
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.
+!    The method is more efficient when N is the product of small primes.
+!
+!    Input/output, complex C(N).
+!    On input, C contains the sequence of Fourier coefficients.
+!    On output, C contains the sequence of data values that correspond
+!    to the input coefficients.
+!
+!    Input, real WSAVE(4*N+15).  The array must be initialized by calling
+!    CFFTI.  A different WSAVE array must be used for each different
+!    value of N.
+!
+  integer n
+!
+  complex c(n)
+  real wsave(4*n+15)
+!
+  if ( n <= 1 ) then
+    return
+  end if
+
+  call cfftb1 ( n, c, wsave(1), wsave(2*n+1), wsave(4*n+1) )
+
+  return
+end
+subroutine cfftb1 ( n, c, ch, wa, ifac )
+!
+!*******************************************************************************
+!
+!! CFFTB1 is a lower-level routine used by CFFTB.
+!
+!
+!  Modified:
+!
+!    12 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.
+!
+!    Input/output, complex C(N).
+!    On input, C contains the sequence of Fourier coefficients.
+!    On output, C contains the sequence of data values that correspond
+!    to the input coefficients.
+!
+!    Input, complex CH(N).
+!
+!    Input, real WA(2*N).
+!
+!    Input, integer IFAC(15).
+!    IFAC(1) = N, the number that was factored.
+!    IFAC(2) = NF, the number of factors.
+!    IFAC(3:2+NF), the factors.
+!
+  integer n
+!
+  complex c(n)
+  complex ch(n)
+  integer idl1
+  integer ido
+  integer ifac(15)
+  integer ip
+  integer iw
+  integer ix2
+  integer ix3
+  integer ix4
+  integer k1
+  integer l1
+  integer l2
+  integer na
+  integer nac
+  integer nf
+  real wa(2*n)
+!
+  nf = ifac(2)
+  na = 0
+  l1 = 1
+  iw = 1
+
+  do k1 = 1, nf
+
+    ip = ifac(k1+2)
+    l2 = ip * l1
+    ido = n / l2
+    idl1 = 2 * ido * l1
+
+    if ( ip == 4 ) then
+
+      ix2 = iw + 2 * ido
+      ix3 = ix2 + 2 * ido
+
+      if ( na == 0 ) then
+        call passb4 ( 2*ido, l1, c, ch, wa(iw), wa(ix2), wa(ix3) )
+      else
+        call passb4 ( 2*ido, l1, ch, c, wa(iw), wa(ix2), wa(ix3) )
+      end if
+
+      na = 1 - na
+
+    else if ( ip == 2 ) then
+
+      if ( na == 0 ) then
+        call passb2 ( 2*ido, l1, c, ch, wa(iw) )
+      else
+        call passb2 ( 2*ido, l1, ch, c, wa(iw) )
+      end if
+
+      na = 1 - na
+
+    else if ( ip == 3 ) then
+
+      ix2 = iw + 2 * ido
+
+      if ( na == 0 ) then
+        call passb3 ( 2*ido, l1, c, ch, wa(iw), wa(ix2) )
+      else
+        call passb3 ( 2*ido, l1, ch, c, wa(iw), wa(ix2) )
+      end if
+
+      na = 1 - na
+
+    else if ( ip == 5 ) then
+
+      ix2 = iw + 2 * ido
+      ix3 = ix2 + 2 * ido
+      ix4 = ix3 + 2 * ido
+
+      if ( na == 0 ) then
+        call passb5 ( 2*ido, l1, c, ch, wa(iw), wa(ix2), wa(ix3), wa(ix4) )
+      else
+        call passb5 ( 2*ido, l1, ch, c, wa(iw), wa(ix2), wa(ix3), wa(ix4) )
+      end if
+
+      na = 1 - na
+
+    else
+
+      if ( na == 0 ) then
+        call passb ( nac, 2*ido, ip, l1, idl1, c, c, c, ch, ch, wa(iw) )
+      else
+        call passb ( nac, 2*ido, ip, l1, idl1, ch, ch, ch, c, c, wa(iw) )
+      end if
+
+      if ( nac /= 0 ) then
+        na = 1 - na
+      end if
+
+    end if
+
+    l1 = l2
+    iw = iw + ( ip - 1 ) * 2 * ido
+
+  end do
+
+  if ( na /= 0 ) then
+    c(1:n) = ch(1:n)
+  end if
+
+  return
+end
+subroutine cfftb_2d ( ldf, n, f, wsave )
+!
+!*******************************************************************************
+!
+!! CFFTB_2D computes a backward two dimensional complex fast Fourier transform.
+!
+!
+!  Discussion:
+!
+!    The routine computes the backward two dimensional fast Fourier transform,
+!    of a complex N by N matrix of data.
+!
+!    The output is unscaled, that is, a call to CFFTB_2D followed by a call
+!    to CFFTF_2D will return the original data multiplied by N*N.
+!
+!    For some applications it is desirable to have the transform scaled so
+!    the center of the N by N frequency square corresponds to zero
+!    frequency.  The user can do this replacing the original input data
+!    F(I,J) by F(I,J) * (-1.)**(I+J),  I,J =0,...,N-1.
+!
+!    Before calling CFFTF_2D or CFFTB_2D, it is necessary to initialize
+!    the array WSAVE by calling CFFTI.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Modified:
+!
+!    12 March 2001
+!
+!  Parameters:
+!
+!    Input, integer LDF, the leading dimension of the matrix.
+!
+!    Input, integer N, the number of rows and columns in the matrix.
+!
+!    Input/output, complex F(LDF,N),
+!    On input, an N by N array of complex values to be transformed.
+!    On output, the transformed values.
+!
+!    Input, real WSAVE(4*N+15), a work array whose values depend on N,
+!    and which must be initialized by calling CFFTI.
+!
+  integer ldf
+  integer n
+!
+  complex f(ldf,n)
+  integer i
+  real wsave(4*n+15)
+!
+!  Row transforms:
+!
+  f(1:n,1:n) = transpose ( f(1:n,1:n) )
+
+  do i = 1, n
+    call cfftb ( n, f(1,i), wsave )
+  end do
+
+  f(1:n,1:n) = transpose ( f(1:n,1:n) )
+!
+!  Column transforms:
+!
+  do i = 1, n
+    call cfftb ( n, f(1,i), wsave )
+  end do
+
+  return
+end
+subroutine cfftf ( n, c, wsave )
+!
+!*******************************************************************************
+!
+!! CFFTF computes the forward complex discrete Fourier transform.
+!
+!
+!  Discussion:
+!
+!    This process is sometimes called Fourier analysis.
+!
+!    CFFTF computes the Fourier coefficients of a complex periodic sequence.
+!
+!    The transform is not normalized.  To obtain a normalized transform,
+!    the output must be divided by N.  Otherwise a call of CFFTF
+!    followed by a call of CFFTB will multiply the sequence by N.
+!
+!    The array WSAVE must be initialized by calling CFFTI.
+!
+!    The transform is defined by:
+!
+!      C_out(J) = sum ( 1 <= K <= N )
+!        C_in(K) * exp ( - sqrt ( -1 ) * ( J - 1 ) * ( K - 1 ) * 2 * PI / N )
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.
+!    The method is more efficient when N is the product of small primes.
+!
+!    Input/output, complex C(N).
+!    On input, the data sequence to be transformed.
+!    On output, the Fourier coefficients.
+!
+!    Input, real WSAVE(4*N+15).  The array must be initialized by calling
+!    CFFTI.  A different WSAVE array must be used for each different
+!    value of N.
+!
+  integer n
+!
+  complex c(n)
+  real wsave(4*n+15)
+!
+  if ( n <= 1 ) then
+    return
+  end if
+
+  call cfftf1 ( n, c, wsave(1), wsave(2*n+1), wsave(4*n+1) )
+
+  return
+end
+subroutine cfftf1 ( n, c, ch, wa, ifac )
+!
+!*******************************************************************************
+!
+!! CFFTF1 is a lower level routine used by CFFTF.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.
+!
+!    Input/output, complex C(N).
+!    On input, the data sequence to be transformed.
+!    On output, the Fourier coefficients.
+!
+!    Input, complex CH(N).
+!
+!    Input, real WA(2*N).
+!
+!    Input, integer IFAC(15).
+!    IFAC(1) = N, the number that was factored.
+!    IFAC(2) = NF, the number of factors.
+!    IFAC(3:2+NF), the factors.
+!
+  integer n
+!
+  complex c(n)
+  complex ch(n)
+  integer idl1
+  integer ido
+  integer ifac(15)
+  integer ip
+  integer iw
+  integer ix2
+  integer ix3
+  integer ix4
+  integer k1
+  integer l1
+  integer l2
+  integer na
+  integer nac
+  integer nf
+  real wa(2*n)
+!
+  nf = ifac(2)
+  na = 0
+  l1 = 1
+  iw = 1
+
+  do k1 = 1, nf
+
+    ip = ifac(k1+2)
+    l2 = ip * l1
+    ido = n / l2
+    idl1 = 2 * ido * l1
+
+    if ( ip == 4 ) then
+
+      ix2 = iw + 2 * ido
+      ix3 = ix2 + 2 * ido
+
+      if ( na == 0 ) then
+        call passf4 ( 2*ido, l1, c, ch, wa(iw), wa(ix2), wa(ix3) )
+      else
+        call passf4 ( 2*ido, l1, ch, c, wa(iw), wa(ix2), wa(ix3) )
+      end if
+
+      na = 1 - na
+
+    else if ( ip == 2 ) then
+
+      if ( na == 0 ) then
+        call passf2 ( 2*ido, l1, c, ch, wa(iw) )
+      else
+        call passf2 ( 2*ido, l1, ch, c, wa(iw) )
+      end if
+
+      na = 1 - na
+
+    else if ( ip == 3 ) then
+
+      ix2 = iw + 2 * ido
+
+      if ( na == 0 ) then
+        call passf3 ( 2*ido, l1, c, ch, wa(iw), wa(ix2) )
+      else
+        call passf3 ( 2*ido, l1, ch, c, wa(iw), wa(ix2) )
+      end if
+
+      na = 1 - na
+
+    else if ( ip == 5 ) then
+
+      ix2 = iw + 2 * ido
+      ix3 = ix2 + 2 * ido
+      ix4 = ix3 + 2 * ido
+
+      if ( na == 0 ) then
+        call passf5 ( 2*ido, l1, c, ch, wa(iw), wa(ix2), wa(ix3), wa(ix4) )
+      else
+        call passf5 ( 2*ido, l1, ch, c, wa(iw), wa(ix2), wa(ix3), wa(ix4) )
+      end if
+
+      na = 1 - na
+
+    else
+
+      if ( na == 0 ) then
+        call passf ( nac, 2*ido, ip, l1, idl1, c, c, c, ch, ch, wa(iw) )
+      else
+        call passf ( nac, 2*ido, ip, l1, idl1, ch, ch, ch, c, c, wa(iw) )
+      end if
+
+      if ( nac /= 0 ) then
+        na = 1 - na
+      end if
+
+    end if
+
+    l1 = l2
+    iw = iw + ( ip - 1 ) * 2 * ido
+
+  end do
+
+  if ( na /= 0 ) then
+    c(1:n) = ch(1:n)
+  end if
+
+  return
+end
+subroutine cfftf_2d ( ldf, n, f, wsave )
+!
+!*******************************************************************************
+!
+!! CFFTF_2D computes a two dimensional complex fast Fourier transform.
+!
+!
+!  Discussion:
+!
+!    The routine computes the forward two dimensional fast Fourier transform,
+!    of a complex N by N matrix of data.
+!
+!    The output is unscaled, that is, a call to CFFTF_2D,
+!    followed by a call to CFFTB_2D will return the original data
+!    multiplied by N*N.
+!
+!    For some applications it is desirable to have the transform scaled so
+!    the center of the N by N frequency square corresponds to zero
+!    frequency.  The user can do this replacing the original input data
+!    F(I,J) by F(I,J) *(-1.)**(I+J),  I,J =0,...,N-1.
+!
+!    Before calling CFFTF_2D or CFFTB_2D, it is necessary to initialize
+!    the array WSAVE by calling CFFTI.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Modified:
+!
+!    12 March 2001
+!
+!  Parameters:
+!
+!    Input, integer LDF, the leading dimension of the matrix.
+!
+!    Input, integer N, the number of rows and columns in the matrix.
+!
+!    Input/output, complex F(LDF,N),
+!    On input, an N by N array of complex values to be transformed.
+!    On output, the transformed values.
+!
+!    Input, real WSAVE(4*N+15), a work array whose values depend on N,
+!    and which must be initialized by calling CFFTI.
+!
+  integer ldf
+  integer n
+!
+  complex f(ldf,n)
+  integer i
+  real wsave(4*n+15)
+!
+!  Row transforms:
+!
+  f(1:n,1:n) = transpose ( f(1:n,1:n) )
+
+  do i = 1, n
+    call cfftf ( n, f(1,i), wsave )
+  end do
+
+  f(1:n,1:n) = transpose ( f(1:n,1:n) )
+!
+!  Column transforms:
+!
+  do i = 1, n
+    call cfftf ( n, f(1,i), wsave )
+  end do
+
+  return
+end
+subroutine cffti ( n, wsave )
+!
+!*******************************************************************************
+!
+!! CFFTI initializes WSAVE, used in CFFTF and CFFTB.
+!
+!
+!  Discussion:
+!
+!    The prime factorization of N together with a tabulation of the
+!    trigonometric functions are computed and stored in WSAVE.
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.
+!
+!    Output, real WSAVE(4*N+15), contains data, dependent on the value
+!    of N, which is necessary for the CFFTF or CFFTB routines.
+!
+  integer n
+!
+  real wsave(4*n+15)
+!
+  if ( n <= 1 ) then
+    return
+  end if
+
+  call cffti1 ( n, wsave(2*n+1), wsave(4*n+1) )
+
+  return
+end
+subroutine cffti1 ( n, wa, ifac )
+!
+!*******************************************************************************
+!
+!! CFFTI1 is a lower level routine used by CFFTI.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.
+!
+!    Input, real WA(2*N).
+!
+!    Input, integer IFAC(15).
+!    IFAC(1) = N, the number that was factored.
+!    IFAC(2) = NF, the number of factors.
+!    IFAC(3:2+NF), the factors.
+!
+  integer n
+!
+  real arg
+  real argh
+  real argld
+  real fi
+  integer i
+  integer i1
+  integer ib
+  integer ido
+  integer ifac(15)
+  integer ii
+  integer ip
+  integer j
+  integer k1
+  integer l1
+  integer l2
+  integer ld
+  integer nf
+  real pimach
+  real wa(2*n)
+!
+  call i_factor ( n, ifac )
+
+  nf = ifac(2)
+
+  argh = 2.0E+00 * pimach() / real ( n )
+  i = 2
+  l1 = 1
+
+  do k1 = 1, nf
+
+    ip = ifac(k1+2)
+    ld = 0
+    l2 = l1 * ip
+    ido = n / l2
+
+    do j = 1, ip-1
+
+      i1 = i
+      wa(i-1) = 1.0E+00
+      wa(i) = 0.0E+00
+      ld = ld + l1
+      fi = 0.0E+00
+      argld = real ( ld ) * argh
+
+      do ii = 4, 2*ido+2, 2
+        i = i + 2
+        fi = fi + 1.0E+00
+        arg = fi * argld
+        wa(i-1) = cos ( arg )
+        wa(i) = sin ( arg )
+      end do
+
+      if ( ip > 5 ) then
+        wa(i1-1) = wa(i-1)
+        wa(i1) = wa(i)
+      end if
+
+    end do
+
+    l1 = l2
+
+  end do
+
+  return
+end
+subroutine chfdv ( x1, x2, f1, f2, d1, d2, ne, xe, fe, de, next, ierr )
+!
+!*******************************************************************************
+!
+!! CHFDV evaluates a cubic polynomial and its derivative given in Hermite form.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Discussion:
+!
+!    CHFDV evaluates a cubic polynomial given in Hermite form and its
+!    first derivative at an array of points.  While designed for
+!    use by PCHFD, it may be useful directly as an evaluator for
+!    a piecewise cubic Hermite function in applications, such as
+!    graphing, where the interval is known in advance.
+!
+!    If only function values are required, use CHFEV instead.
+!
+!  Parameters:
+!
+!     x1,x2 -- (input) endpoints of interval of definition of cubic.
+!           (error return if  x1==x2 .)
+!
+!     f1,f2 -- (input) values of function at x1 and x2, respectively.
+!
+!     d1,d2 -- (input) values of derivative at x1 and x2, respectively.
+!
+!     ne -- (input) number of evaluation points.  (error return if
+!           ne<1 .)
+!
+!     xe -- (input) real array of points at which the functions are to
+!           be evaluated.  if any of the xe are outside the interval
+!           [x1,x2], a warning error is returned in next.
+!
+!     fe -- (output) real array of values of the cubic function defined
+!           by  x1,x2, f1,f2, d1,d2  at the points  xe.
+!
+!     de -- (output) real array of values of the first derivative of
+!           the same function at the points  xe.
+!
+!     next -- (output) integer array indicating number of extrapolation
+!           points:
+!            next(1) = number of evaluation points to left of interval.
+!            next(2) = number of evaluation points to right of interval.
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           "recoverable" errors:
+!              ierr = -1  if ne<1 .
+!              ierr = -2  if x1==x2 .
+!                (output arrays have not been changed in either case.)
+!
+  integer ne
+!
+  real c2
+  real c2t2
+  real c3
+  real c3t3
+  real d1
+  real d2
+  real de(ne)
+  real del1
+  real del2
+  real delta
+  real f1
+  real f2
+  real fe(ne)
+  real h
+  integer i
+  integer ierr
+  integer next(2)
+  real x
+  real x1
+  real x2
+  real xe(ne)
+  real xma
+  real xmi
+!
+!  validity-check arguments.
+!
+  if ( ne < 1 ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'CHFDV - Fatal error!'
+    write ( *, * ) '  The number of evaluation points was less than 1.'
+    stop
+  end if
+
+  h = x2 - x1
+  if (h == 0.0)  go to 5002
+!
+!  initialize.
+!
+  ierr = 0
+  next(1) = 0
+  next(2) = 0
+  xmi = min (0.0, h)
+  xma = max (0.0, h)
+!
+!  compute cubic coefficients (expanded about x1).
+!
+  delta = (f2 - f1)/h
+  del1 = (d1 - delta)/h
+  del2 = (d2 - delta)/h
+!                                           (delta is no longer needed.)
+  c2 = -(del1+del1 + del2)
+  c2t2 = c2 + c2
+  c3 = (del1 + del2)/h
+!                               (h, del1 and del2 are no longer needed.)
+  c3t3 = c3+c3+c3
+!
+!  evaluation loop.
+!
+  do i = 1, ne
+     x = xe(i) - x1
+     fe(i) = f1 + x*(d1 + x*(c2 + x*c3))
+     de(i) = d1 + x*(c2t2 + x*c3t3)
+!          count extrapolation points.
+     if ( x<xmi )  next(1) = next(1) + 1
+     if ( x>xma )  next(2) = next(2) + 1
+!        (note redundancy--if either condition is true, other is false.)
+  end do
+
+  return
+!
+!  error returns.
+!
+ 5002 continue
+
+  ierr = -2
+  call xerror ('chfdv -- interval endpoints equal', 33, ierr, 1)
+  return
+end
+subroutine chfev ( x1, x2, f1, f2, d1, d2, ne, xe, fe, next, ierr )
+!
+!*******************************************************************************
+!
+!! CHFEV evaluates a cubic polynomial given in Hermite form.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  purpose  evaluate a cubic polynomial given in hermite form at an
+!            array of points.  while designed for use by PCHFE, it may
+!            be useful directly as an evaluator for a piecewise cubic
+!            hermite function in applications, such as graphing, where
+!            the interval is known in advance.
+!
+!  Description:
+!
+!     CHFEV evaluates the cubic polynomial determined by function values
+!     f1,f2 and derivatives d1,d2 on interval (x1,x2) at the points
+!     xe(j), j=1(1)ne.
+!
+!  Parameters:
+!
+!     x1,x2 -- (input) endpoints of interval of definition of cubic.
+!           (error return if  x1==x2 .)
+!
+!     f1,f2 -- (input) values of function at x1 and x2, respectively.
+!
+!     d1,d2 -- (input) values of derivative at x1 and x2, respectively.
+!
+!     ne -- (input) number of evaluation points.  (error return if
+!           ne<1 .)
+!
+!     xe -- (input) real array of points at which the function is to be
+!           evaluated.  if any of the xe are outside the interval
+!           [x1,x2], a warning error is returned in next.
+!
+!     fe -- (output) real array of values of the cubic function defined
+!           by  x1,x2, f1,f2, d1,d2  at the points  xe.
+!
+!     next -- (output) integer array indicating number of extrapolation
+!           points:
+!            next(1) = number of evaluation points to left of interval.
+!            next(2) = number of evaluation points to right of interval.
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           "recoverable" errors:
+!              ierr = -1  if ne<1 .
+!              ierr = -2  if x1==x2 .
+!                (the fe-array has not been changed in either case.)
+!
+  integer ne
+!
+  real c2
+  real c3
+  real d1
+  real d2
+  real del1
+  real del2
+  real delta
+  real f1
+  real f2
+  real fe(ne)
+  real h
+  integer i
+  integer ierr
+  integer next(2)
+  real x
+  real x1
+  real x2
+  real xe(ne)
+  real xma
+  real xmi
+!
+  if (ne < 1)  go to 5001
+  h = x2 - x1
+  if (h == 0.0)  go to 5002
+!
+!  initialize.
+!
+  ierr = 0
+  next(1) = 0
+  next(2) = 0
+  xmi = min ( 0.0, h )
+  xma = max ( 0.0, h )
+!
+!  compute cubic coefficients (expanded about x1).
+!
+  delta = (f2 - f1)/h
+  del1 = (d1 - delta)/h
+  del2 = (d2 - delta)/h
+!                                           (delta is no longer needed.)
+  c2 = -(del1+del1 + del2)
+  c3 = (del1 + del2)/h
+!                               (h, del1 and del2 are no longer needed.)
+!
+!  evaluation loop.
+!
+  do i = 1, ne
+     x = xe(i) - x1
+     fe(i) = f1 + x*(d1 + x*(c2 + x*c3))
+!          count extrapolation points.
+     if ( x<xmi )  next(1) = next(1) + 1
+     if ( x>xma )  next(2) = next(2) + 1
+!        (note redundancy--if either condition is true, other is false.)
+  end do
+
+  return
+!
+!  error returns.
+!
+ 5001 continue
+!     ne<1 return.
+  ierr = -1
+  call xerror ('chfev -- number of evaluation points less than one', 50, &
+    ierr, 1)
+  return
+
+ 5002 continue
+!     x1==x2 return.
+  ierr = -2
+  call xerror ('chfev -- interval endpoints equal', 33, ierr, 1)
+  return
+end
+function chfiv ( x1, x2, f1, f2, d1, d2, a, b, ierr )
+!
+!*******************************************************************************
+!
+!! CHFIV evaluates the integral of a cubic polynomial in Hermite form.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!          chfiv:  cubic hermite function integral evaluator.
+!
+!     called by  PCHIA  to evaluate the integral of a single cubic (in
+!     hermite form) over an arbitrary interval (a,b).
+!
+!  Parameters:
+!
+!     value -- (output) value of the requested integral.
+!
+!     x1,x2 -- (input) endpoints if interval of definition of cubic.
+!           (must be distinct.  error return if not.)
+!
+!     f1,f2 -- (input) function values at the ends of the interval.
+!
+!     d1,d2 -- (input) derivative values at the ends of the interval.
+!
+!     a,b -- (input) endpoints of interval of integration.
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0 (no errors).
+!           "recoverable errors":
+!              ierr = -1  if x1==x2 .
+!                (value has not been set in this case.)
+!
+  real a
+  real b
+  real chfiv
+  real d1
+  real d2
+  real dterm
+  real f1
+  real f2
+  real fterm
+  real h
+  integer ierr
+  real phia1
+  real phia2
+  real phib1
+  real phib2
+  real psia1
+  real psia2
+  real psib1
+  real psib2
+  real ta1
+  real ta2
+  real tb1
+  real tb2
+  real ua1
+  real ua2
+  real ub1
+  real ub2
+  real x1
+  real x2
+!
+!  validity check input.
+!
+  if (x1 == x2)  go to 5001
+  ierr = 0
+!
+!  compute integral.
+!
+  h = x2 - x1
+  ta1 = (a - x1) / h
+  ta2 = (x2 - a) / h
+  tb1 = (b - x1) / h
+  tb2 = (x2 - b) / h
+
+  ua1 = ta1**3
+  phia1 = ua1 * ( 2.0E+00 - ta1 )
+  psia1 = ua1 * ( 3.0E+00 * ta1 - 4.0E+00 )
+  ua2 = ta2**3
+  phia2 =  ua2 * ( 2.0E+00 - ta2)
+  psia2 = -ua2 * ( 3.0E+00 * ta2 - 4.0E+00 )
+
+  ub1 = tb1**3
+  phib1 = ub1 * ( 2.0E+00 - tb1 )
+  psib1 = ub1 * ( 3.0E+00 * tb1 - 4.0E+00 )
+  ub2 = tb2**3
+  phib2 =  ub2 * ( 2.0E+00 - tb2 )
+  psib2 = -ub2 * ( 3.0E+00 * tb2 - 4.0E+00 )
+
+  fterm =   f1*(phia2 - phib2) + f2*(phib1 - phia1)
+  dterm = ( d1*(psia2 - psib2) + d2*(psib1 - psia1) )*(h/6.0)
+
+  chfiv = 0.5 * h * ( fterm + dterm )
+
+  return
+!
+!  error return.
+!
+ 5001 continue
+  ierr = -1
+  call xerror ('chfiv -- x1 equal to x2', 23, ierr, 1)
+  return
+end
+function chfmc ( d1, d2, delta )
+!
+!*******************************************************************************
+!
+!! CHFMC determines the monotonicity properties of a cubic polynomial.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!          chfmc:  cubic hermite function monotonicity checker.
+!
+!    called by  pchmc  to determine the monotonicity properties of the
+!    cubic with boundary derivative values d1,d2 and chord slope delta.
+!
+!  Parameters:
+!
+!     d1,d2 -- (input) derivative values at the ends of an interval.
+!
+!     delta -- (input) data slope over that interval.
+!
+!     ismon -- (output) integer function value, indicating the monoto-
+!           nicity of the cubic segment:
+!             ismon = -1  if function is strictly decreasing;
+!             ismon =  0  if function is constant;
+!             ismon =  1  if function is strictly increasing;
+!             ismon =  2  if function is non-monotonic;
+!             ismon =  3  if unable to determine.
+!
+  real a
+  real b
+  integer chfmc
+  real d1
+  real d2
+  real delta
+  real eps
+  integer ismon
+  integer itrue
+  real phi
+!
+  eps = 10.0E+00 * epsilon ( eps )
+!
+!  make the check.
+!
+  if ( delta == 0.0E+00 )  then
+
+    if ( d1 == 0.0E+00 .and. d2 == 0.0E+00 )  then
+      ismon = 0
+    else
+      ismon = 2
+    end if
+
+  else
+
+     itrue = sign ( 1.0, delta)
+     a = d1/delta
+     b = d2/delta
+     if ((a<0.0) .or. (b<0.0))  then
+        ismon = 2
+     else if ((a<=3.0-eps) .and. (b<=3.0-eps))  then
+!           inside square (0,3)x(0,3)  implies   ok.
+        ismon = itrue
+     else if ( a > 4.0+eps .and. b > 4.0+eps )  then
+!           outside square (0,4)x(0,4)  implies   nonmonotonic.
+        ismon = 2
+     else
+!           must check against boundary of ellipse.
+        a = a - 2.0E+00
+        b = b - 2.0E+00
+        phi = ((a*a + b*b) + a*b) - 3.0E+00
+        if (phi < -eps)  then
+           ismon = itrue
+        else if (phi > eps)  then
+           ismon = 2
+        else
+!
+!  Too close to boundary to tell,
+!                  in the presence of round-off errors.
+!
+           ismon = 3
+        end if
+     end if
+  end if
+
+  chfmc = ismon
+
+  return
+end
+subroutine chkder ( m, n, x, fvec, fjac, ldfjac, xp, fvecp, mode, err )
+!
+!*******************************************************************************
+!
+!! CHKDER checks the gradients of M nonlinear functions in N variables.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!   this subroutine is a companion routine to snls1,snls1e,snsq,and
+!   snsqe which may be used to check the calculation of the jacobian.
+!
+!   subroutine chkder
+!
+!     this subroutine checks the gradients of m nonlinear functions
+!     in n variables, evaluated at a point x, for consistency with
+!     the functions themselves. the user must call ckder twice,
+!     first with mode = 1 and then with mode = 2.
+!
+!     mode = 1. on input, x must contain the point of evaluation.
+!               on output, xp is set to a neighboring point.
+!
+!     mode = 2. on input, fvec must contain the functions and the
+!                         rows of fjac must contain the gradients
+!                         of the respective functions each evaluated
+!                         at x, and fvecp must contain the functions
+!                         evaluated at xp.
+!               on output, err contains measures of correctness of
+!                          the respective gradients.
+!
+!     the subroutine does not perform reliably if cancellation or
+!     rounding errors cause a severe loss of significance in the
+!     evaluation of a function. therefore, none of the components
+!     of x should be unusually small (in particular, zero) or any
+!     other value which may cause loss of significance.
+!
+!     the subroutine statement is
+!
+!     subroutine chkder(m,n,x,fvec,fjac,ldfjac,xp,fvecp,mode,err)
+!
+!     where
+!
+!       m is a positive integer input variable set to the number
+!         of functions.
+!
+!       n is a positive integer input variable set to the number
+!         of variables.
+!
+!       x is an input array of length n.
+!
+!       fvec is an array of length m. on input when mode = 2,
+!         fvec must contain the functions evaluated at x.
+!
+!       fjac is an m by n array. on input when mode = 2,
+!         the rows of fjac must contain the gradients of
+!         the respective functions evaluated at x.
+!
+!       ldfjac is a positive integer input parameter not less than m
+!         which specifies the leading dimension of the array fjac.
+!
+!       xp is an array of length n. on output when mode = 1,
+!         xp is set to a neighboring point of x.
+!
+!       fvecp is an array of length m. on input when mode = 2,
+!         fvecp must contain the functions evaluated at xp.
+!
+!       mode is an integer input variable set to 1 on the first call
+!         and 2 on the second. other values of mode are equivalent
+!         to mode = 1.
+!
+!       err is an array of length m. on output when mode = 2,
+!         err contains measures of correctness of the respective
+!         gradients. if there is no severe loss of significance,
+!         then if err(i) is 1.0E+00 the i-th gradient is correct,
+!         while if err(i) is 0.0E+00 the i-th gradient is incorrect.
+!         for values of err between 0.0E+00 and 1.0, the categorization
+!         is less certain. in general, a value of err(i) greater
+!         than 0.5 indicates that the i-th gradient is probably
+!         correct, while a value of err(i) less than 0.5 indicates
+!         that the i-th gradient is probably incorrect.
+!
+!     argonne national laboratory. minpack project. march 1980.
+!     burton s. garbow, kenneth e. hillstrom, jorge j. more
+!
+!  references  powell, m. j. d., *a hybrid method for nonlinear
+!                 equations*, 'numerical methods for nonlinear
+!                 algebraic equations', p. rabinowitz, editor,
+!                 gordon and breach, 1970.
+!
+  integer ldfjac
+  integer m
+  integer n
+!
+  real eps
+  real epsf
+  real epslog
+  real epsmch
+  real err(m)
+  real, parameter :: factor = 100.0E+00
+  real fjac(ldfjac,n)
+  real fvec(m)
+  real fvecp(m)
+  integer i
+  integer j
+  integer mode
+  real r1mach
+  real temp
+  real x(n)
+  real xp(n)
+!
+  epsmch = epsilon ( epsmch )
+  eps = sqrt ( epsmch )
+
+  if ( mode == 2 ) go to 20
+!
+!        mode = 1.
+!
+    do j = 1, n
+      temp = eps * abs(x(j))
+      if (temp == 0.0) temp = eps
+      xp(j) = x(j) + temp
+    end do
+
+     go to 70
+   20 continue
+!
+!        mode = 2.
+!
+     epsf = factor*epsmch
+     epslog = log10(eps)
+     err(1:m) = 0.0E+00
+
+     do j = 1, n
+        temp = abs(x(j))
+        if (temp == 0.0) temp = 1.0E+00
+        do i = 1, m
+           err(i) = err(i) + temp*fjac(i,j)
+        end do
+     end do
+
+     do i = 1, m
+        temp = 1.0E+00
+        if ( fvec(i) /= 0.0E+00 .and. fvecp(i) /= 0.0E+00 .and. &
+          abs(fvecp(i)-fvec(i)) >= epsf*abs(fvec(i)) ) then
+          temp = eps*abs((fvecp(i)-fvec(i))/eps-err(i)) &
+                      /(abs(fvec(i)) + abs(fvecp(i)))
+        end if
+
+        err(i) = 1.0E+00
+
+        if ( temp > epsmch .and. temp < eps ) then
+          err(i) = (log10(temp) - epslog)/epslog
+        end if
+
+        if (temp >= eps) err(i) = 0.0E+00
+      end do
+
+   70 continue
+
+  return
+end
+subroutine chlhsn ( nr, n, a, epsm, sx, udiag )
+!
+!*******************************************************************************
+!
+!! CHLHSN finds the l(l-transpose) [written ll+] decomposition of the perturbed
+! model hessian matrix a+mu*i(where mu\0 and i is the identity matrix)
+! which is safely positive definite.
+!
+!  if a is safely positive definite upon entry, then mu=0.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+! parameters
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! a(n,n)      <--> on entry; "a" is model hessian (only lower
+!                  triangular part and diagonal stored)
+!                  on exit:  a contains l of ll+ decomposition of
+!                  perturbed model hessian in lower triangular
+!                  part and diagonal and contains hessian in upper
+!                  triangular part and udiag
+! epsm         --> machine epsilon
+! sx(n)        --> diagonal scaling matrix for x
+! udiag(n)    <--  on exit: contains diagonal of hessian
+!
+! internal variables
+!
+! tol              tolerance
+! diagmn           minimum element on diagonal of a
+! diagmx           maximum element on diagonal of a
+! offmax           maximum off-diagonal element of a
+! offrow           sum of off-diagonal elements in a row of a
+! evmin            minimum eigenvalue of a
+! evmax            maximum eigenvalue of a
+!
+!  Description:
+!
+! 1. if "a" has any negative diagonal elements, then choose mu>0
+! such that the diagonal of a:=a+mu*i is all positive
+! with the ratio of its smallest to largest element on the
+! order of sqrt(epsm).
+!
+! 2. "a" undergoes a perturbed cholesky decomposition which
+! results in an ll+ decomposition of a+d, where d is a
+! non-negative diagonal matrix which is implicitly added to
+! "a" during the decomposition if "a" is not positive definite.
+! "a" is retained and not changed during this process by
+! copying l into the upper triangular part of "a" and the
+! diagonal into udiag.  then the cholesky decomposition routine
+! is called.  on return, addmax contains maximum element of d.
+!
+! 3. if addmax=0, "a" was positive definite going into step 2
+! and return is made to calling program.  otherwise,
+! the minimum number sdd which must be added to the
+! diagonal of a to make it safely strictly diagonally dominant
+! is calculated.  since a+addmax*i and a+sdd*i are safely
+! positive definite, choose mu=min(addmax,sdd) and decompose
+! a+mu*i to obtain l.
+!
+  integer n
+  integer nr
+!
+  real a(nr,*)
+  real addmax
+  real amu
+  real diagmx
+  real diagmn
+  real epsm
+  real evmax
+  real evmin
+  integer i
+  integer j
+  real offmax
+  real offro
+  real offrow
+  real posmax
+  real sdd
+  real sx(n)
+  real tol
+  real udiag(n)
+!
+! scale hessian
+! pre- and post- multiply "a" by inv(sx)
+!
+  do j=1,n
+    do i=j,n
+      a(i,j)=a(i,j)/(sx(i)*sx(j))
+    end do
+  end do
+!
+! step1
+!
+! note:  if a different tolerance is desired throughout this
+! algorithm, change tolerance here:
+!
+  tol=sqrt(epsm)
+!
+  diagmx=a(1,1)
+  diagmn=a(1,1)
+
+  do i=2,n
+    if ( a(i,i)<diagmn) diagmn=a(i,i)
+    if ( a(i,i)>diagmx) diagmx=a(i,i)
+  end do
+
+  posmax = max(diagmx,0.0)
+
+  if ( diagmn > posmax*tol) go to 100
+
+    amu=tol*(posmax-diagmn)-diagmn
+
+    if ( amu/=0.) go to 60
+!
+!  Find largest off-diagonal element of A.
+!
+      offmax=0.0E+00
+
+      do i=2,n
+        do j=1,i-1
+          if ( abs(a(i,j))>offmax) offmax=abs(a(i,j))
+        end do
+      end do
+
+      amu=offmax
+
+      if ( amu == 0.0E+00 ) then
+        amu=1.0E+00
+      else
+        amu=amu*(1.0+tol)
+      end if
+!
+! a=a + mu*i
+!
+   60 continue
+
+    do i=1,n
+      a(i,i)=a(i,i)+amu
+    end do
+
+    diagmx=diagmx+amu
+!
+! step2
+!
+! copy lower triangular part of "a" to upper triangular part
+! and diagonal of "a" to udiag
+!
+  100 continue
+
+  do j=1,n
+    udiag(j)=a(j,j)
+    do i=j+1,n
+      a(j,i)=a(i,j)
+    end do
+  end do
+
+  call choldc ( nr, n, a, diagmx, tol, addmax )
+!
+! step3
+!
+! if addmax=0, "a" was positive definite going into step 2,
+! the ll+ decomposition has been done, and we return.
+! otherwise, addmax>0.  perturb "a" so that it is safely
+! diagonally dominant and find ll+ decomposition
+!
+  if ( addmax<=0.) go to 170
+!     if ( addmax>0.)
+!     then
+!
+! restore original "a" (lower triangular part and diagonal)
+!
+    do j = 1, n
+      a(j,j)=udiag(j)
+      do i=j+1,n
+        a(i,j)=a(j,i)
+      end do
+    end do
+!
+! find sdd such that a+sdd*i is safely positive definite
+! note:  evmin<0 since a is not positive definite;
+!
+    evmin=0.0E+00
+    evmax=a(1,1)
+
+    do i=1,n
+
+      offrow=0.0E+00
+
+      do j=1,i-1
+        offrow=offrow+abs(a(i,j))
+      end do
+!
+!  I'm not sure about the text of this loop.
+!  It seems to have been damaged earlier, and read
+!
+!    offrow = offro
+!
+      do j=i+1,n
+        offrow = offrow + abs(a(j,i))
+      end do
+
+      evmin=min(evmin,a(i,i)-offrow)
+      evmax=max(evmax,a(i,i)+offrow)
+
+    end do
+
+    sdd=tol*(evmax-evmin)-evmin
+!
+! perturb "a" and decompose again
+!
+    amu=min(sdd,addmax)
+
+    do i=1,n
+      a(i,i)=a(i,i)+amu
+      udiag(i)=a(i,i)
+    end do
+!
+! "a" now guaranteed safely positive definite
+!
+    call choldc ( nr, n, a, 0.0, tol, addmax )
+!
+! unscale hessian and cholesky decomposition matrix
+!
+  170 continue
+
+  do j=1,n
+
+    do i=j,n
+      a(i,j)=sx(i)*a(i,j)
+    end do
+
+    do i=1,j-1
+      a(i,j)=sx(i)*sx(j)*a(i,j)
+    end do
+
+    udiag(j)=udiag(j)*sx(j)*sx(j)
+
+  end do
+
+  return
+end
+subroutine choldc ( nr, n, a, diagmx, tol, addmax )
+!
+!*******************************************************************************
+!
+!! CHOLDC finds the perturbed l(l-transpose) [written ll+] decomposition
+! of a+d, where d is a non-negative diagonal matrix added to a if
+! necessary to allow the cholesky decomposition to continue.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! a(n,n)      <--> on entry: matrix for which to find perturbed
+!                       cholesky decomposition
+!                  on exit:  contains l of ll+ decomposition
+!                  in lower triangular part and diagonal of "a"
+! diagmx       --> maximum diagonal element of "a"
+! tol          --> tolerance
+! addmax      <--  maximum amount implicitly added to diagonal of "a"
+!                  in forming the cholesky decomposition of a+d
+! internal variables
+!
+! aminl    smallest element allowed on diagonal of l
+! amnlsq   =aminl**2
+! offmax   maximum off-diagonal element in column of a
+!
+!  Description:
+!
+! the normal cholesky decomposition is performed.  however, if at any
+! point the algorithm would attempt to set l(i,i)=sqrt(temp)
+! with temp < tol*diagmx, then l(i,i) is set to sqrt(tol*diagmx)
+! instead.  this is equivalent to adding tol*diagmx-temp to a(i,i)
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real addmax
+  real aminl
+  real amnlsq
+  real diagmx
+  integer i
+  integer j
+  integer k
+  real offmax
+  real sum
+  real temp
+  real tol
+!
+  addmax = 0.0E+00
+  aminl = sqrt(diagmx*tol)
+  amnlsq = aminl*aminl
+!
+! form column j of l
+!
+  do j = 1, n
+!
+! find diagonal elements of l
+!
+    sum = 0.0E+00
+    do k = 1,j-1
+      sum = sum + a(j,k)**2
+    end do
+
+    temp = a(j,j)-sum
+
+    if ( temp<amnlsq) go to 30
+
+      a(j,j)=sqrt(temp)
+      go to 40
+!
+! find maximum off-diagonal element in column
+   30     offmax=0.
+
+      do i=j+1,n
+        if ( abs(a(i,j))>offmax) offmax=abs(a(i,j))
+      end do
+
+      if ( offmax<=amnlsq) offmax=amnlsq
+!
+! add to diagonal element  to allow cholesky decomposition to continue
+!
+      a(j,j)=sqrt(offmax)
+      addmax=max(addmax,offmax-temp)
+!
+! find i,j element of lower triangular matrix
+!
+   40   continue
+
+    do i=j+1,n
+      sum=0.0E+00
+      do k=1,j-1
+        sum=sum+a(i,k)*a(j,k)
+      end do
+      a(i,j)=(a(i,j)-sum)/a(j,j)
+    end do
+
+  end do
+
+  return
+end
+subroutine cosqb ( n, x, wsave )
+!
+!*******************************************************************************
+!
+!! COSQB computes the fast cosine transform of quarter wave data.
+!
+!
+!  Discussion:
+!
+!    COSQB computes a sequence from its representation in terms of a cosine
+!    series with odd wave numbers.
+!
+!    The transform is defined by:
+!
+!      X_out(I) = sum ( 1 <= K <= N )
+!
+!        4 * X_in(K) * cos ( ( 2 * K - 1 ) * ( I - 1 ) * PI / ( 2 * N ) )
+!
+!    COSQB is the unnormalized inverse of COSQF since a call of COSQB
+!    followed by a call of COSQF will multiply the input sequence X by 4*N.
+!
+!    The array WSAVE must be initialized by calling COSQI.
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array X.  The method is
+!    more efficient when N is the product of small primes.
+!
+!    Input/output, real X(N).
+!    On input, the cosine series coefficients.
+!    On output, the corresponding data vector.
+!
+!    Input, real WSAVE(3*N+15), contains data, depending on N, and
+!    required by the algorithm.  The WSAVE array must be initialized by
+!    calling COSQI.  A different WSAVE array must be used for each different
+!    value of N.
+!
+  integer n
+!
+  real, parameter :: tsqrt2 = 2.82842712474619E+00
+  real wsave(3*n+15)
+  real x(n)
+  real x1
+!
+  if ( n < 2 ) then
+    x(1) = 4.0E+00 * x(1)
+  else if ( n == 2 ) then
+    x1 = 4.0E+00 * ( x(1) + x(2) )
+    x(2) = tsqrt2 * ( x(1) - x(2) )
+    x(1) = x1
+  else
+    call cosqb1 ( n, x, wsave(1), wsave(n+1) )
+  end if
+
+  return
+end
+subroutine cosqb1 ( n, x, w, xh )
+!
+!*******************************************************************************
+!
+!! COSQB1 is a lower level routine used by COSQB.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array.
+!
+!    Input/output, real X(N).
+!    On input, the cosine series coefficients.
+!    On output, the corresponding data vector.
+!
+!    Input, real W(N).
+!
+!    Input, real XH(2*N+15).
+!
+  integer n
+!
+  integer i
+  integer k
+  integer kc
+  integer ns2
+  real w(n)
+  real x(n)
+  real xh(2*n+15)
+  real xim1
+!
+  ns2 = ( n + 1 ) / 2
+
+  do i = 3, n, 2
+    xim1 = x(i-1) + x(i)
+    x(i) = x(i) - x(i-1)
+    x(i-1) = xim1
+  end do
+
+  x(1) = x(1) + x(1)
+
+  if ( mod ( n, 2 ) == 0 ) then
+    x(n) = 2.0E+00 * x(n)
+  end if
+
+  call rfftb ( n, x, xh )
+
+  do k = 2, ns2
+    kc = n + 2 - k
+    xh(k) = w(k-1) * x(kc) + w(kc-1) * x(k)
+    xh(kc) = w(k-1) * x(k) - w(kc-1) * x(kc)
+  end do
+
+  if ( mod ( n, 2 ) == 0 ) then
+    x(ns2+1) = w(ns2) * ( x(ns2+1) + x(ns2+1) )
+  end if
+
+  do k = 2, ns2
+    kc = n + 2 - k
+    x(k) = xh(k) + xh(kc)
+    x(kc) = xh(k) - xh(kc)
+  end do
+
+  x(1) = 2.0E+00 * x(1)
+
+  return
+end
+subroutine cosqf ( n, x, wsave )
+!
+!*******************************************************************************
+!
+!! COSQF computes the fast cosine transform of quarter wave data.
+!
+!
+!  Discussion:
+!
+!    COSQF computes the coefficients in a cosine series representation
+!    with only odd wave numbers.
+!
+!    COSQF is the unnormalized inverse of COSQB since a call of COSQF
+!    followed by a call of COSQB will multiply the input sequence X
+!    by 4*N.
+!
+!    The array WSAVE must be initialized by calling COSQI.
+!
+!    The transform is defined by:
+!
+!      X_out(I) = X_in(1) + sum ( 2 <= K <= N )
+!
+!        2 * X_in(K) * cos ( ( 2 * I - 1 ) * ( K - 1 ) * PI / ( 2 * N ) )
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array X.  The method is
+!    more efficient when N is the product of small primes.
+!
+!    Input/output, real X(N).
+!    On input, the data to be transformed.
+!    On output, the transformed data.
+!
+!    Input, real WSAVE(3*N+15), contains data, depending on N, and
+!    required by the algorithm.  The WSAVE array must be initialized by
+!    calling COSQI.  A different WSAVE array must be used for each different
+!    value of N.
+!
+  integer n
+!
+  real, parameter :: sqrt2 = 1.4142135623731E+00
+  real tsqx
+  real wsave(3*n+15)
+  real x(n)
+!
+  if ( n < 2 ) then
+
+  else if ( n == 2 ) then
+    tsqx = sqrt2 * x(2)
+    x(2) = x(1) - tsqx
+    x(1) = x(1) + tsqx
+  else
+    call cosqf1 ( n, x, wsave(1), wsave(n+1) )
+  end if
+
+  return
+end
+subroutine cosqf1 ( n, x, w, xh )
+!
+!*******************************************************************************
+!
+!! COSQF1 is a lower level routine used by COSQF.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array to be transformed.
+!
+!    Input/output, real X(N).
+!    On input, the data to be transformed.
+!    On output, the transformed data.
+!
+!    Input, real W(N).
+!
+!    Input, real XH(2*N+15).
+!
+  integer n
+!
+  integer i
+  integer k
+  integer kc
+  integer ns2
+  real w(n)
+  real x(n)
+  real xh(2*n+15)
+  real xim1
+!
+  ns2 = ( n + 1 ) / 2
+
+  do k = 2, ns2
+    kc = n + 2 - k
+    xh(k) = x(k) + x(kc)
+    xh(kc) = x(k) - x(kc)
+  end do
+
+  if ( mod ( n, 2 ) == 0 ) then
+    xh(ns2+1) = x(ns2+1) + x(ns2+1)
+  end if
+
+  do k = 2, ns2
+    kc = n+2-k
+    x(k) = w(k-1) * xh(kc) + w(kc-1) * xh(k)
+    x(kc) = w(k-1) * xh(k) - w(kc-1) * xh(kc)
+  end do
+
+  if ( mod ( n, 2 ) == 0 ) then
+    x(ns2+1) = w(ns2) * xh(ns2+1)
+  end if
+
+  call rfftf ( n, x, xh )
+
+  do i = 3, n, 2
+    xim1 = x(i-1) - x(i)
+    x(i) = x(i-1) + x(i)
+    x(i-1) = xim1
+  end do
+
+  return
+end
+subroutine cosqi ( n, wsave )
+!
+!*******************************************************************************
+!
+!! COSQI initializes WSAVE, used in COSQF and COSQB.
+!
+!
+!  Discussion:
+!
+!    The prime factorization of N together with a tabulation of the
+!    trigonometric functions are computed and stored in WSAVE.
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array to be transformed.  The method
+!    is more efficient when N is the product of small primes.
+!
+!    Output, real WSAVE(3*N+15), contains data, depending on N, and
+!    required by the COSQB and COSQF algorithms.
+!
+  integer n
+!
+  real dt
+  integer k
+  real pimach
+  real wsave(3*n+15)
+!
+  dt = 0.5E+00 * pimach() / real ( n )
+
+  do k = 1, n
+    wsave(k) = cos ( real ( k ) * dt )
+  end do
+
+  call rffti ( n, wsave(n+1) )
+
+  return
+end
+subroutine cost ( n, x, wsave )
+!
+!*******************************************************************************
+!
+!! COST computes the discrete Fourier cosine transform of an even sequence.
+!
+!
+!  Discussion:
+!
+!    COST is the unnormalized inverse of itself since a call of COST
+!    followed by another call of COST will multiply the input sequence
+!    X by 2*(N-1).
+!
+!    The array WSAVE must be initialized by calling COSTI.
+!
+!    The transform is defined by:
+!
+!      X_out(I) = X_in(1) + (-1) **(I-1) * X_in(N) + sum ( 2 <= K <= N-1 )
+!
+!        2 * X_in(K) * cos ( ( K - 1 ) * ( I - 1 ) * PI / ( N - 1 ) )
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.  The
+!    method is more efficient when N-1 is the product of small primes.
+!
+!    Input/output, real X(N).
+!    On input, the sequence to be transformed.
+!    On output, the transformed sequence.
+!
+!    Input, real WSAVE(3*N+15).
+!    The WSAVE array must be initialized by calling COSTI.  A different
+!    array must be used for each different value of N.
+!
+  integer n
+!
+  real c1
+  integer i
+  integer k
+  integer kc
+  integer ns2
+  real t1
+  real t2
+  real tx2
+  real wsave(3*n+15)
+  real x(n)
+  real x1h
+  real x1p3
+  real xi
+  real xim2
+!
+  ns2 = n / 2
+
+  if ( n <= 1 ) then
+    return
+  end if
+
+  if ( n == 2 ) then
+    x1h = x(1) + x(2)
+    x(2) = x(1) - x(2)
+    x(1) = x1h
+    return
+  end if
+
+  if ( n == 3 ) then
+    x1p3 = x(1) + x(3)
+    tx2 = x(2) + x(2)
+    x(2) = x(1) - x(3)
+    x(1) = x1p3 + tx2
+    x(3) = x1p3 - tx2
+    return
+  end if
+
+  c1 = x(1) - x(n)
+  x(1) = x(1) + x(n)
+
+  do k = 2, ns2
+    kc = n + 1 - k
+    t1 = x(k) + x(kc)
+    t2 = x(k) - x(kc)
+    c1 = c1 + wsave(kc) * t2
+    t2 = wsave(k) * t2
+    x(k) = t1 - t2
+    x(kc) = t1 + t2
+  end do
+
+  if ( mod ( n, 2 ) /= 0 ) then
+    x(ns2+1) = x(ns2+1) + x(ns2+1)
+  end if
+
+  call rfftf ( n-1, x, wsave(n+1) )
+
+  xim2 = x(2)
+  x(2) = c1
+
+  do i = 4, n, 2
+    xi = x(i)
+    x(i) = x(i-2) - x(i-1)
+    x(i-1) = xim2
+    xim2 = xi
+  end do
+
+  if ( mod ( n, 2 ) /= 0 ) then
+    x(n) = xim2
+  end if
+
+  return
+end
+subroutine costi ( n, wsave )
+!
+!*******************************************************************************
+!
+!! COSTI initializes WSAVE, used in COST.
+!
+!
+!  Discussion:
+!
+!    The prime factorization of N together with a tabulation of the
+!    trigonometric functions are computed and stored in WSAVE.
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.  The
+!    method is more efficient when N-1 is the product of small primes.
+!
+!    Output, real WSAVE(3*N+15), contains data, depending on N, and
+!    required by the COST algorithm.
+!
+  integer n
+!
+  real dt
+  integer k
+  real pimach
+  real wsave(3*n+15)
+!
+  if ( n <= 3 ) then
+    return
+  end if
+
+  dt = pimach ( ) / real ( n - 1 )
+
+  do k = 2, ( n / 2 )
+    wsave(k)     = 2.0E+00 * sin ( real ( k - 1 ) * dt )
+    wsave(n+1-k) = 2.0E+00 * cos ( real ( k - 1 ) * dt )
+  end do
+
+  call rffti ( n-1, wsave(n+1) )
+
+  return
+end
+function csevl ( x, cs, n )
+!
+!*******************************************************************************
+!
+!! CSEVL evaluates an N term Chebyshev series.
+!
+!
+!  Reference:
+!
+!    R Broucke,
+!    algorithm 446, c.a.c.m.,
+!    volume 16, page 254, 1973.
+!
+!    Fox and Parker,
+!    chebyshev polynomials in numerical analysis,
+!    oxford press, page 56.
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  parameters:
+!
+! x    value at which the series is to be evaluated.
+! cs   array of n terms of a chebyshev series.  in eval-
+!      uating cs, only half the first coefficient is summed.
+! n    number of terms in array cs.
+!
+  integer n
+!
+  real b0
+  real b1
+  real b2
+  real cs(n)
+  real csevl
+  integer i
+  real x
+!
+  if ( n < 1 ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'CSEVL - Fatal error!'
+    write ( *, * ) '  Number of terms N is less than 1.'
+    stop
+  end if
+
+  if ( n > 1000 ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'CSEVL - Fatal error!'
+    write ( *, * ) '  The number of terms is more than 1000.'
+    stop
+  end if
+
+  if ( x < -1.0E+00 .or. x > 1.0E+00 ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'CSEVL - Fatal error!'
+    write ( *, * ) '  The input argument X is outside the interval [-1,1].'
+    stop
+  end if
+
+  b1 = 0.0E+00
+  b0 = 0.0E+00
+
+  do i = n, 1, -1
+    b2 = b1
+    b1 = b0
+    b0 = 2.0E+00 * x * b1 - b2 + cs(i)
+  end do
+
+  csevl = 0.5 * ( b0 - b2 )
+
+  return
+end
+subroutine cvec_random ( alo, ahi, n, a )
+!
+!*******************************************************************************
+!
+!! CVEC_RANDOM returns a random complex vector in a given range.
+!
+!
+!  Modified:
+!
+!    08 March 2001
+!
+!  Author:
+!
+!    John Burkardt
+!
+!  Parameters:
+!
+!    Input, real ALO, AHI, the range allowed for the entries.
+!
+!    Input, integer N, the number of entries in the vector.
+!
+!    Output, complex A(N), the vector of randomly chosen values.
+!
+  integer n
+!
+  complex a(n)
+  real ahi
+  real ai
+  real alo
+  real ar
+  integer i
+!
+  do i = 1, n
+
+    call r_random ( alo, ahi, ar )
+    call r_random ( alo, ahi, ai )
+
+    a(i) = cmplx ( ar, ai )
+
+  end do
+
+  return
+end
+subroutine d1fcn
+!
+!*******************************************************************************
+!
+!! D1FCN is a dummy routine.
+!
+  write ( *, * ) ' '
+  write ( *, * ) 'D1FCN accidentally called!'
+
+  stop
+end
+function d1mach(i)
+!
+!*******************************************************************************
+!
+!! D1MACH returns double precision machine constants.
+!
+!
+!  Assuming that the internal representation of a double precision number is
+!  in base B, with T the number of base-B digits in the mantissa, and EMIN the
+!  smallest possible exponent and EMAX the largest possible exponent, then
+!
+!    D1MACH(1) = B**(EMIN-1), the smallest positive magnitude.
+!    D1MACH(2) = B**EMAX*(1-B**(-T)), the largest magnitude.
+!    D1MACH(3) = B**(-T), the smallest relative spacing.
+!    D1MACH(4) = B**(1-T), the largest relative spacing.
+!    D1MACH(5) = log10(B).
+!
+!  To alter this function for a particular environment, the desired set of DATA
+!  statements should be activated by removing the C from column 1.  On rare
+!  machines, a STATIC statement may need to be added, but probably more systems
+!  prohibit than require it.
+!
+!  For IEEE-arithmetic machines (binary standard), one of the first two sets of
+!  constants below should be appropriate.
+!
+!  Where possible, octal or hexadecimal constants have been used to specify the
+!  constants exactly, which has in some cases required the use of EQUIVALENCED
+!  integer arrays.
+!
+  double precision d1mach
+  integer diver(4)
+  double precision dmach(5)
+  integer i
+  integer large(4)
+  integer log10(4)
+  integer right(4)
+  integer small(4)
+!
+  equivalence (dmach(1),small(1))
+  equivalence (dmach(2),large(1))
+  equivalence (dmach(3),right(1))
+  equivalence (dmach(4),diver(1))
+  equivalence (dmach(5),log10(1))
+!
+!  IEEE arithmetic machines, such as the ATT 3B series and
+!  Motorola 68000 based machines such as the SUN 3 and ATT PC
+!  7300, and the SGI Iris, in which the most significant byte is
+!  stored first.
+!
+   data small(1),small(2) /    1048576,          0 /
+   data large(1),large(2) / 2146435071,         -1 /
+   data right(1),right(2) / 1017118720,          0 /
+   data diver(1),diver(2) / 1018167296,          0 /
+   data log10(1),log10(2) / 1070810131, 1352628735 /
+!
+!  IEEE arithmetic machines and 8087-based micros, such as the IBM PC,
+!  ATT 6300, DEC PMAX, DEC ALPHA, NEXT, in which the most
+!  significant byte is stored last.
+!
+!      data small(1),small(2) /          0,    1048576 /
+!      data large(1),large(2) /         -1, 2146435071 /
+!      data right(1),right(2) /          0, 1017118720 /
+!      data diver(1),diver(2) /          0, 1018167296 /
+!      data log10(1),log10(2) / 1352628735, 1070810131 /
+!
+!  ALLIANT FX/8 UNIX FORTRAN compiler.
+!
+!      data dmach(1) / 2.22507385850721D-308 /
+!      data dmach(2) / 1.79769313486231D+308 /
+!      data dmach(3) / 1.1101827117665D-16 /
+!      data dmach(4) / 2.2203654423533D-16 /
+!      data dmach(5) / 3.01029995663981E-1 /
+!
+!  AMDAHL machines.
+!
+!      data small(1),small(2) /    1048576,          0 /
+!      data large(1),large(2) / 2147483647,         -1 /
+!      data right(1),right(2) /  856686592,          0 /
+!      data diver(1),diver(2) /  873463808,          0 /
+!      data log10(1),log10(2) / 1091781651, 1352628735 /
+!
+!  BURROUGHS 1700 system.
+!
+!      data small(1) / ZC00800000 /
+!      data small(2) / Z000000000 /
+!
+!      data large(1) / ZDFFFFFFFF /
+!      data large(2) / ZFFFFFFFFF /
+!
+!      data right(1) / ZCC5800000 /
+!      data right(2) / Z000000000 /
+!
+!      data diver(1) / ZCC6800000 /
+!      data diver(2) / Z000000000 /
+!
+!      data log10(1) / ZD00E730E7 /
+!      data log10(2) / ZC77800DC0 /
+!
+!  BURROUGHS 5700 system.
+!
+!      data small(1) / O1771000000000000 /
+!      data small(2) / O0000000000000000 /
+!
+!      data large(1) / O0777777777777777 /
+!      data large(2) / O0007777777777777 /
+!
+!      data right(1) / O1461000000000000 /
+!      data right(2) / O0000000000000000 /
+!
+!      data diver(1) / O1451000000000000 /
+!      data diver(2) / O0000000000000000 /
+!
+!      data log10(1) / O1157163034761674 /
+!      data log10(2) / O0006677466732724 /
+!
+!  BURROUGHS 6700/7700 systems.
+!
+!      data small(1) / O1771000000000000 /
+!      data small(2) / O7770000000000000 /
+!
+!      data large(1) / O0777777777777777 /
+!      data large(2) / O7777777777777777 /
+!
+!      data right(1) / O1461000000000000 /
+!      data right(2) / O0000000000000000 /
+!
+!      data diver(1) / O1451000000000000 /
+!      data diver(2) / O0000000000000000 /
+!
+!      data log10(1) / O1157163034761674 /
+!      data log10(2) / O0006677466732724 /
+!
+!  CDC CYBER 170/180 series using NOS
+!
+!      data small(1) / O"00604000000000000000" /
+!      data small(2) / O"00000000000000000000" /
+!
+!      data large(1) / O"37767777777777777777" /
+!      data large(2) / O"37167777777777777777" /
+!
+!      data right(1) / O"15604000000000000000" /
+!      data right(2) / O"15000000000000000000" /
+!
+!      data diver(1) / O"15614000000000000000" /
+!      data diver(2) / O"15010000000000000000" /
+!
+!      data log10(1) / O"17164642023241175717" /
+!      data log10(2) / O"16367571421742254654" /
+!
+!  CDC CYBER 170/180 series using NOS/VE
+!
+!      data small(1) / Z"3001800000000000" /
+!      data small(2) / Z"3001000000000000" /
+!
+!      data large(1) / Z"4FFEFFFFFFFFFFFE" /
+!      data large(2) / Z"4FFE000000000000" /
+!
+!      data right(1) / Z"3FD2800000000000" /
+!      data right(2) / Z"3FD2000000000000" /
+!
+!      data diver(1) / Z"3FD3800000000000" /
+!      data diver(2) / Z"3FD3000000000000" /
+!
+!      data log10(1) / Z"3FFF9A209A84FBCF" /
+!      data log10(2) / Z"3FFFF7988F8959AC" /
+!
+!  CDC CYBER 200 series
+!
+!      data small(1) / X'9000400000000000' /
+!      data small(2) / X'8FD1000000000000' /
+!
+!      data large(1) / X'6FFF7FFFFFFFFFFF' /
+!      data large(2) / X'6FD07FFFFFFFFFFF' /
+!
+!      data right(1) / X'FF74400000000000' /
+!      data right(2) / X'FF45000000000000' /
+!
+!      data diver(1) / X'FF75400000000000' /
+!      data diver(2) / X'FF46000000000000' /
+!
+!      data log10(1) / X'FFD04D104D427DE7' /
+!      data log10(2) / X'FFA17DE623E2566A' /
+!
+!  CDC 6000/7000 series using FTN4.
+!
+!      data small(1) / 00564000000000000000B /
+!      data small(2) / 00000000000000000000B /
+!
+!      data large(1) / 37757777777777777777B /
+!      data large(2) / 37157777777777777774B /
+!
+!      data right(1) / 15624000000000000000B /
+!      data right(2) / 00000000000000000000B /
+!
+!      data diver(1) / 15634000000000000000B /
+!      data diver(2) / 00000000000000000000B /
+!
+!      data log10(1) / 17164642023241175717B /
+!      data log10(2) / 16367571421742254654B /
+!
+!  CDC 6000/7000 series using FTN5.
+!
+!      data small(1) / O"00564000000000000000" /
+!      data small(2) / O"00000000000000000000" /
+!
+!      data large(1) / O"37757777777777777777" /
+!      data large(2) / O"37157777777777777774" /
+!
+!      data right(1) / O"15624000000000000000" /
+!      data right(2) / O"00000000000000000000" /
+!
+!      data diver(1) / O"15634000000000000000" /
+!      data diver(2) / O"00000000000000000000" /
+!
+!      data log10(1) / O"17164642023241175717" /
+!      data log10(2) / O"16367571421742254654" /
+!
+!  CONVEX C-1
+!
+!      data small(1),small(2) / '00100000'X, '00000000'X /
+!      data large(1),large(2) / '7FFFFFFF'X, 'FFFFFFFF'X /
+!      data right(1),right(2) / '3CC00000'X, '00000000'X /
+!      data diver(1),diver(2) / '3CD00000'X, '00000000'X /
+!      data log10(1),log10(2) / '3FF34413'X, '509F79FF'X /
+!
+!  CONVEX C-120 (native mode) with or without -R8 option
+!
+!      data dmach(1) / 5.562684646268007D-309 /
+!      data dmach(2) / 8.988465674311577D+307 /
+!      data dmach(3) / 1.110223024625157D-016 /
+!      data dmach(4) / 2.220446049250313D-016 /
+!      data dmach(5) / 3.010299956639812D-001 /
+!
+!  CONVEX C-120 (IEEE mode) with or without -R8 option
+!
+!      data dmach(1) / 2.225073858507202D-308 /
+!      data dmach(2) / 1.797693134862315D+308 /
+!      data dmach(3) / 1.110223024625157D-016 /
+!      data dmach(4) / 2.220446049250313D-016 /
+!      data dmach(5) / 3.010299956639812D-001 /
+!
+!  CRAY 1, 2, XMP and YMP.
+!
+!      data small(1) / 201354000000000000000B /
+!      data small(2) / 000000000000000000000B /
+!
+!      data large(1) / 577767777777777777777B /
+!      data large(2) / 000007777777777777776B /
+!
+!      data right(1) / 376434000000000000000B /
+!      data right(2) / 000000000000000000000B /
+!
+!      data diver(1) / 376444000000000000000B /
+!      data diver(2) / 000000000000000000000B /
+!
+!      data log10(1) / 377774642023241175717B /
+!      data log10(2) / 000007571421742254654B /
+!
+!  DATA GENERAL ECLIPSE S/200
+!  Note - It may be appropriate to include the line: STATIC dmach(5)
+!
+!      data small /20K,3*0/
+!      data large /77777K,3*177777K/
+!      data right /31420K,3*0/
+!      data diver /32020K,3*0/
+!      data log10 /40423K,42023K,50237K,74776K/
+!
+!  ELXSI 6400, assuming REAL*8 is the default DOUBLE PRECISION type.
+!
+!      data small(1), small(2) / '00100000'X,'00000000'X /
+!      data large(1), large(2) / '7FEFFFFF'X,'FFFFFFFF'X /
+!      data right(1), right(2) / '3CB00000'X,'00000000'X /
+!      data diver(1), diver(2) / '3CC00000'X,'00000000'X /
+!      data log10(1), diver(2) / '3FD34413'X,'509F79FF'X /
+!
+!  HARRIS 220
+!
+!      data small(1),small(2) / '20000000, '00000201 /
+!      data large(1),large(2) / '37777777, '37777577 /
+!      data right(1),right(2) / '20000000, '00000333 /
+!      data diver(1),diver(2) / '20000000, '00000334 /
+!      data log10(1),log10(2) / '23210115, '10237777 /
+!
+!  HARRIS SLASH 6 and SLASH 7
+!
+!      data small(1),small(2) / '20000000, '00000201 /
+!      data large(1),large(2) / '37777777, '37777577 /
+!      data right(1),right(2) / '20000000, '00000333 /
+!      data diver(1),diver(2) / '20000000, '00000334 /
+!      data log10(1),log10(2) / '23210115, '10237777 /
+!
+!  HONEYWELL DPS 8/70 and 600/6000 series.
+!
+!      data small(1),small(2) / O402400000000, O000000000000 /
+!      data large(1),large(2) / O376777777777, O777777777777 /
+!      data right(1),right(2) / O604400000000, O000000000000 /
+!      data diver(1),diver(2) / O606400000000, O000000000000 /
+!      data log10(1),log10(2) / O776464202324, O117571775714 /
+!
+!  HP 2100, three word double precision option with FTN4.
+!
+!      data small(1), small(2), small(3) / 40000B,       0,       1 /
+!      data large(1), large(2), large(3) / 77777B, 177777B, 177776B /
+!      data right(1), right(2), right(3) / 40000B,       0,    265B /
+!      data diver(1), diver(2), diver(3) / 40000B,       0,    276B /
+!      data log10(1), log10(2), log10(3) / 46420B,  46502B,  77777B /
+!
+!  HP 2100, four word double precision option with FTN4.
+!
+!      data small(1), small(2) /  40000B,       0 /
+!      data small(3), small(4) /       0,       1 /
+!      data large(1), large(2) /  77777B, 177777B /
+!      data large(3), large(4) / 177777B, 177776B /
+!      data right(1), right(2) /  40000B,       0 /
+!      data right(3), right(4) /       0,    225B /
+!      data diver(1), diver(2) /  40000B,       0 /
+!      data diver(3), diver(4) /       0,    227B /
+!      data log10(1), log10(2) /  46420B,  46502B /
+!      data log10(3), log10(4) /  76747B, 176377B /
+!
+!  HP 9000
+!
+!      d1mach(1) = 2.8480954D-306
+!      d1mach(2) = 1.40444776D+306
+!      d1mach(3) = 2.22044605D-16
+!      d1mach(4) = 4.44089210D-16
+!      d1mach(5) = 3.01029996D-1
+!
+!      data small(1), small(2) / 00040000000B, 00000000000B /
+!      data large(1), large(2) / 17737777777B, 37777777777B /
+!      data right(1), right(2) / 07454000000B, 00000000000B /
+!      data diver(1), diver(2) / 07460000000B, 00000000000B /
+!      data log10(1), log10(2) / 07764642023B, 12047674777B /
+!
+!  IBM 360/370 series, XEROX SIGMA 5/7/9, SEL SYSTEMS 85/86, PERKIN ELMER 3230,
+!  and PERKIN ELMER (INTERDATA) 3230.
+!
+!      data small(1),small(2) / Z00100000, Z00000000 /
+!      data large(1),large(2) / Z7FFFFFFF, ZFFFFFFFF /
+!      data right(1),right(2) / Z33100000, Z00000000 /
+!      data diver(1),diver(2) / Z34100000, Z00000000 /
+!      data log10(1),log10(2) / Z41134413, Z509F79FF /
+!
+!  IBM PC - Microsoft FORTRAN
+!
+!      data small(1), small(2) / #00000000, #00100000 /
+!      data large(1), large(2) / #FFFFFFFF, #7FEFFFFF /
+!      data right(1), right(2) / #00000000, #3CA00000 /
+!      data diver(1), diver(2) / #00000000, #3CB00000 /
+!      data log10(1), log10(2) / #509F79FF, #3FD34413 /
+!
+!  IBM PC - Professional FORTRAN and Lahey FORTRAN
+!
+!      data small(1), small(2) / Z'00000000', Z'00100000' /
+!      data large(1), large(2) / Z'FFFFFFFF', Z'7FEFFFFF' /
+!      data right(1), right(2) / Z'00000000', Z'3CA00000' /
+!      data diver(1), diver(2) / Z'00000000', Z'3CB00000' /
+!      data log10(1), log10(2) / Z'509F79FF', Z'3FD34413' /
+!
+!  INTERDATA 8/32 with the UNIX system FORTRAN 77 compiler.
+!  For the INTERDATA FORTRAN VII compiler, replace the Z's specifying hex
+!  constants with Y's.
+!
+!      data small(1),small(2) / Z'00100000', Z'00000000' /
+!      data large(1),large(2) / Z'7EFFFFFF', Z'FFFFFFFF' /
+!      data right(1),right(2) / Z'33100000', Z'00000000' /
+!      data diver(1),diver(2) / Z'34100000', Z'00000000' /
+!      data log10(1),log10(2) / Z'41134413', Z'509F79FF' /
+!
+!  PDP-10 (KA processor).
+!
+!      data small(1),small(2) / "033400000000, "000000000000 /
+!      data large(1),large(2) / "377777777777, "344777777777 /
+!      data right(1),right(2) / "113400000000, "000000000000 /
+!      data diver(1),diver(2) / "114400000000, "000000000000 /
+!      data log10(1),log10(2) / "177464202324, "144117571776 /
+!
+!  PDP-10 (KI processor).
+!
+!      data small(1),small(2) / "000400000000, "000000000000 /
+!      data large(1),large(2) / "377777777777, "377777777777 /
+!      data right(1),right(2) / "103400000000, "000000000000 /
+!      data diver(1),diver(2) / "104400000000, "000000000000 /
+!      data log10(1),log10(2) / "177464202324, "047674776746 /
+!
+!  PDP-11 FORTRANS supporting 32-bit integers (integer version).
+!
+!      data small(1),small(2) /    8388608,           0 /
+!      data large(1),large(2) / 2147483647,          -1 /
+!      data right(1),right(2) /  612368384,           0 /
+!      data diver(1),diver(2) /  620756992,           0 /
+!      data log10(1),log10(2) / 1067065498, -2063872008 /
+!
+!  PDP-11 FORTRANS supporting 32-bit integers (octal version)
+!
+!      data small(1),small(2) / O00040000000, O00000000000 /
+!      data large(1),large(2) / O17777777777, O37777777777 /
+!      data right(1),right(2) / O04440000000, O00000000000 /
+!      data diver(1),diver(2) / O04500000000, O00000000000 /
+!      data log10(1),log10(2) / O07746420232, O20476747770 /
+!
+!  PDP-11 FORTRANS supporting 16-bit integers (integer version).
+!
+!      data small(1),small(2) /    128,      0 /
+!      data small(3),small(4) /      0,      0 /
+!
+!      data large(1),large(2) /  32767,     -1 /
+!      data large(3),large(4) /     -1,     -1 /
+!
+!      data right(1),right(2) /   9344,      0 /
+!      data right(3),right(4) /      0,      0 /
+!
+!      data diver(1),diver(2) /   9472,      0 /
+!      data diver(3),diver(4) /      0,      0 /
+!
+!      data log10(1),log10(2) /  16282,   8346 /
+!      data log10(3),log10(4) / -31493, -12296 /
+!
+!  PDP-11 FORTRANS supporting 16-bit integers (octal version).
+!
+!      data small(1),small(2) / O000200, O000000 /
+!      data small(3),small(4) / O000000, O000000 /
+!
+!      data large(1),large(2) / O077777, O177777 /
+!      data large(3),large(4) / O177777, O177777 /
+!
+!      data right(1),right(2) / O022200, O000000 /
+!      data right(3),right(4) / O000000, O000000 /
+!
+!      data diver(1),diver(2) / O022400, O000000 /
+!      data diver(3),diver(4) / O000000, O000000 /
+!
+!      data log10(1),log10(2) / O037632, O020232 /
+!      data log10(3),log10(4) / O102373, O147770 /
+!
+!  PRIME 50 series systems with 32-bit integers and 64V MODE instructions,
+!  supplied by Igor Bray.
+!
+!      data small(1),small(2) / :10000000000, :00000100001 /
+!      data large(1),large(2) / :17777777777, :37777677775 /
+!      data right(1),right(2) / :10000000000, :00000000122 /
+!      data diver(1),diver(2) / :10000000000, :00000000123 /
+!      data log10(1),log10(2) / :11504046501, :07674600177 /
+!
+!  SEQUENT BALANCE 8000
+!
+!      data small(1),small(2) / $00000000,  $00100000 /
+!      data large(1),large(2) / $FFFFFFFF,  $7FEFFFFF /
+!      data right(1),right(2) / $00000000,  $3CA00000 /
+!      data diver(1),diver(2) / $00000000,  $3CB00000 /
+!      data log10(1),log10(2) / $509F79FF,  $3FD34413 /
+!
+!  SUN Microsystems UNIX F77 compiler.
+!
+!      data dmach(1) / 2.22507385850720D-308 /
+!      data dmach(2) / 1.79769313486231D+308 /
+!      data dmach(3) / 1.1101827117665D-16 /
+!      data dmach(4) / 2.2203654423533D-16 /
+!      data dmach(5) / 3.01029995663981D-1 /
+!
+!  SUN 3 (68881 or FPA)
+!
+!      data small(1),small(2) / X'00100000', X'00000000' /
+!      data large(1),large(2) / X'7FEFFFFF', X'FFFFFFFF' /
+!      data right(1),right(2) / X'3CA00000', X'00000000' /
+!      data diver(1),diver(2) / X'3CB00000', X'00000000' /
+!      data log10(1),log10(2) / X'3FD34413', X'509F79FF' /
+!
+!  UNIVAC 1100 series.
+!
+!      data small(1),small(2) / O000040000000, O000000000000 /
+!      data large(1),large(2) / O377777777777, O777777777777 /
+!      data right(1),right(2) / O170540000000, O000000000000 /
+!      data diver(1),diver(2) / O170640000000, O000000000000 /
+!      data log10(1),log10(2) / O177746420232, O411757177572 /
+!
+!  VAX/ULTRIX F77 compiler
+!
+!      data small(1),small(2) /        128,           0 /
+!      data large(1),large(2) /     -32769,          -1 /
+!      data right(1),right(2) /       9344,           0 /
+!      data diver(1),diver(2) /       9472,           0 /
+!      data log10(1),log10(2) /  546979738,  -805796613 /
+!
+!  VAX/ULTRIX F77 compiler, G floating
+!
+!      data small(1), small(2) /         16,           0 /
+!      data large(1), large(2) /     -32769,          -1 /
+!      data right(1), right(2) /      15552,           0 /
+!      data diver(1), diver(2) /      15568,           0 /
+!      data log10(1), log10(2) /  1142112243, 2046775455 /
+!
+!  VAX-11 with FORTRAN IV-PLUS compiler
+!
+!      data small(1),small(2) / Z00000080, Z00000000 /
+!      data large(1),large(2) / ZFFFF7FFF, ZFFFFFFFF /
+!      data right(1),right(2) / Z00002480, Z00000000 /
+!      data diver(1),diver(2) / Z00002500, Z00000000 /
+!      data log10(1),log10(2) / Z209A3F9A, ZCFF884FB /
+!
+!  VAX/VMS version 2.2
+!
+!      data small(1),small(2) /       '80'X,        '0'X /
+!      data large(1),large(2) / 'FFFF7FFF'X, 'FFFFFFFF'X /
+!      data right(1),right(2) /     '2480'X,        '0'X /
+!      data diver(1),diver(2) /     '2500'X,        '0'X /
+!      data log10(1),log10(2) / '209A3F9A'X, 'CFF884FB'X /
+!
+!  VAX/VMS 11/780
+!
+!      data small(1), small(2) / Z00000080, Z00000000 /
+!      data large(1), large(2) / ZFFFF7FFF, ZFFFFFFFF /
+!      data right(1), right(2) / Z00002480, Z00000000 /
+!      data diver(1), diver(2) / Z00002500, Z00000000 /
+!      data log10(1), log10(2) / Z209A3F9A, ZCFF884FB /
+!
+!  VAX/VMS 11/780 (G-FLOATING)
+!
+!      data small(1), small(2) / Z00000010, Z00000000 /
+!      data large(1), large(2) / ZFFFF7FFF, ZFFFFFFFF /
+!      data right(1), right(2) / Z00003CC0, Z00000000 /
+!      data diver(1), diver(2) / Z00003CD0, Z00000000 /
+!      data log10(1), log10(2) / Z44133FF3, Z79FF509F /
+!
+  if(i<1.or.i>5)then
+    write ( *, * ) ' '
+    write(*,*)'D1MACH - Fatal error!'
+    write(*,*)'I is out of bounds:',i
+    d1mach=0.0d0
+    stop
+  else
+    d1mach = dmach(i)
+  end if
+
+  return
+end
+subroutine d2fcn
+!
+!*******************************************************************************
+!
+!! D2FCN ??
+!
+  write ( *, * ) ' '
+  write ( *, * ) 'd2fcn accidentally called!'
+  stop
+end
+subroutine dfault ( n, x, typsiz, fscale, method, iexp, msg, ndigit, itnlim, &
+  iagflg, iahflg, ipr, dlt, gradtl, stepmx, steptl )
+!
+!*******************************************************************************
+!
+!! DFAULT sets default values for the optimization algorithm.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+! parameters
+!
+! n            --> dimension of problem
+! x(n)         --> initial guess to solution (to compute max step size)
+! typsiz(n)   <--  typical size for each component of x
+! fscale      <--  estimate of scale of minimization function
+! method      <--  algorithm to use to solve minimization problem
+! iexp        <--  =0 if minimization function not expensive to evaluate
+! msg         <--  message to inhibit certain automatic checks + output
+! ndigit      <--  number of good digits in minimization function
+! itnlim      <--  maximum number of allowable iterations
+! iagflg      <--  =0 if analytic gradient not supplied
+! iahflg      <--  =0 if analytic hessian not supplied
+! ipr         <--  device to which to send output
+! dlt         <--  trust region radius
+! gradtl      <--  tolerance at which gradient considered close enough
+!                  to zero to terminate algorithm
+! stepmx      <--  value of zero to trip default maximum in optchk
+! steptl      <--  tolerance at which successive iterates considered
+!                  close enough to terminate algorithm
+!
+  integer n
+!
+  real dlt
+  real epsm
+  real fscale
+  real gradtl
+  integer i1mach
+  integer iagflg
+  integer iahflg
+  integer iexp
+  integer ipr
+  integer itnlim
+  integer method
+  integer msg
+  integer ndigit
+  real stepmx
+  real steptl
+  real typsiz(n)
+  real x(n)
+!
+  x(n)=x(n)
+!
+!  Typical size of x and minimization function
+!
+  typsiz(1:n)=1.0E+00
+  fscale=1.0E+00
+!
+!  Tolerances
+!
+  dlt=-1.0E+00
+  epsm = epsilon ( epsm )
+  gradtl=epsm**(1.0/3.0)
+  stepmx=0.0E+00
+  steptl=sqrt(epsm)
+!
+!  Flags
+!
+  method=1
+  iexp=1
+  msg=9
+  ndigit=-1
+  itnlim=150
+  iagflg=0
+  iahflg=0
+  ipr = 6
+
+  return
+end
+subroutine dogdrv ( nr, n, x, f, g, a, p, xpls, fpls, fcn, sx, stepmx, &
+  steptl, dlt, iretcd, mxtake, sc, wrk1, wrk2, wrk3, ipr )
+!
+!*******************************************************************************
+!
+!! DOGDRV finds a next newton iterate (xpls) by the double dogleg method.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! x(n)         --> old iterate x[k-1]
+! f            --> function value at old iterate, f(x)
+! g(n)         --> gradient  at old iterate, g(x), or approximate
+! a(n,n)       --> cholesky decomposition of hessian
+!                  in lower triangular part and diagonal
+! p(n)         --> newton step
+! xpls(n)     <--  new iterate x[k]
+! fpls        <--function value at new iterate, f(xpls)
+! fcn          --> name of subroutine to evaluate function
+! sx(n)        --> diagonal scaling matrix for x
+! stepmx       --> maximum allowable step size
+! steptl       --> relative step size at which successive iterates
+!                  considered close enough to terminate algorithm
+! dlt         <--> trust region radius
+!                  [retain value between successive calls]
+! iretcd      <--  return code
+!                    =0 satisfactory xpls found
+!                    =1 failed to find satisfactory xpls sufficiently
+!                       distinct from x
+! mxtake      <--  boolean flag indicating step of maximum length used
+! sc(n)        --> workspace [current step]
+! wrk1(n)      --> workspace (and place holding argument to tregup)
+! wrk2(n)      --> workspace
+! wrk3(n)      --> workspace
+! ipr          --> device to which to send output
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real cln
+  real dlt
+  real eta
+  real f
+  real fpls
+  real fplsp
+  logical fstdog
+  real g(n)
+  integer i
+  integer ipr
+  integer iretcd
+  logical mxtake
+  logical nwtake
+  real p(n)
+  real rnwtln
+  real sc(n)
+  real stepmx
+  real steptl
+  real sx(n)
+  real tmp
+  real wrk1(n)
+  real wrk2(n)
+  real wrk3(n)
+  real x(n)
+  real xpls(n)
+!
+  external fcn
+!
+  iretcd=4
+  fstdog=.true.
+  tmp=0.
+  do i=1,n
+    tmp=tmp+sx(i)*sx(i)*p(i)*p(i)
+  end do
+
+  rnwtln=sqrt(tmp)
+
+  100 continue
+!
+! find new step by double dogleg algorithm
+!
+  call dogstp ( nr, n, g, a, p, sx, rnwtln, dlt, nwtake, fstdog, wrk1, &
+    wrk2, cln, eta, sc, ipr, stepmx )
+!
+! check new point and update trust region
+!
+  call tregup(nr,n,x,f,g,a,fcn,sc,sx,nwtake,stepmx,steptl,dlt, &
+    iretcd,wrk3,fplsp,xpls,fpls,mxtake,ipr,2,wrk1)
+
+  if ( iretcd<=1) return
+  go to 100
+  950 format(' dogdrv    initial trust region not given.', &
+             '  compute cauchy step.')
+  951 format(' dogdrv    alpha =',e20.13/' dogdrv    beta  =',e20.13/ &
+             ' dogdrv    dlt   =',e20.13/' dogdrv    nwtake=',l1    )
+  952 format(' dogdrv    current step (sc)')
+  954 format('0dogdrv    rnwtln=',e20.13)
+  955 format(' dogdrv       ',5(e20.13,3x))
+end
+subroutine dogleg ( n, r, lr, diag, qtb, delta, x, wa1, wa2 )
+!
+!*******************************************************************************
+!
+!! DOGLEG ??
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!   subroutine dogleg
+!
+!     given an m by n matrix a, an n by n nonsingular diagonal
+!     matrix d, an m-vector b, and a positive number delta, the
+!     problem is to determine the convex combination x of the
+!     gauss-newton and scaled gradient directions that minimizes
+!     (a*x - b) in the least squares sense, subject to the
+!     restriction that the euclidean norm of d*x be at most delta.
+!
+!     this subroutine completes the solution of the problem
+!     if it is provided with the necessary information from the
+!     qr factorization of a. that is, if a = q*r, where q has
+!     orthogonal columns and r is an upper triangular matrix,
+!     then dogleg expects the full upper triangle of r and
+!     the first n components of (q transpose)*b.
+!
+!  Parameters:
+!
+!       n is a positive integer input variable set to the order of r.
+!
+!       r is an input array of length lr which must contain the upper
+!         triangular matrix r stored by rows.
+!
+!       lr is a positive integer input variable not less than
+!         (n*(n+1))/2.
+!
+!       diag is an input array of length n which must contain the
+!         diagonal elements of the matrix d.
+!
+!       qtb is an input array of length n which must contain the first
+!         n elements of the vector (q transpose)*b.
+!
+!       delta is a positive input variable which specifies an upper
+!         bound on the euclidean norm of d*x.
+!
+!       x is an output array of length n which contains the desired
+!         convex combination of the gauss-newton direction and the
+!         scaled gradient direction.
+!
+!       wa1 and wa2 are work arrays of length n.
+!
+  integer lr
+  integer n
+!
+  real alpha
+  real bnorm
+  real delta
+  real diag(n)
+  real epsmch
+  real gnorm
+  integer i
+  integer j
+  integer jj
+  integer jp1
+  integer k
+  integer l
+  real qnorm
+  real qtb(n)
+  real r(lr)
+  real r1mach
+  real sgnorm
+  real snrm2
+  real sum
+  real temp
+  real wa1(n)
+  real wa2(n)
+  real x(n)
+!
+  epsmch = epsilon ( epsmch )
+!
+!  First, calculate the gauss-newton direction.
+!
+  jj = (n*(n + 1))/2 + 1
+
+  do k = 1, n
+
+     j = n - k + 1
+     jp1 = j + 1
+     jj = jj - k
+     l = jj + 1
+     sum = 0.0E+00
+
+     do i = jp1, n
+       sum = sum + r(l) * x(i)
+       l = l + 1
+     end do
+
+     temp = r(jj)
+
+     if ( temp == 0.0E+00 ) then
+
+       l = j
+       do i = 1, j
+         temp = max ( temp, abs ( r(l) ) )
+         l = l + n - i
+       end do
+       temp = epsmch * temp
+       if (temp == 0.0) temp = epsmch
+
+     end if
+
+     x(j) = (qtb(j) - sum)/temp
+
+  end do
+!
+!  test whether the gauss-newton direction is acceptable.
+!
+  wa1(1:n) = 0.0E+00
+  wa2(1:n) = diag(1:n) * x(1:n)
+
+  qnorm = snrm2(n,wa2,1)
+
+  if (qnorm <= delta) go to 140
+!
+!     the gauss-newton direction is not acceptable.
+!     next, calculate the scaled gradient direction.
+!
+  l = 1
+  do j = 1, n
+    temp = qtb(j)
+    do i = j, n
+      wa1(i) = wa1(i) + r(l)*temp
+      l = l + 1
+    end do
+    wa1(j) = wa1(j)/diag(j)
+  end do
+!
+!     calculate the norm of the scaled gradient direction,
+!     normalize, and rescale the gradient.
+!
+  gnorm = snrm2(n,wa1,1)
+  sgnorm = 0.0E+00
+  alpha = delta/qnorm
+  if (gnorm == 0.0) go to 120
+
+  do j = 1, n
+     wa1(j) = (wa1(j)/gnorm)/diag(j)
+  end do
+!
+!     calculate the point along the scaled gradient
+!     at which the quadratic is minimized.
+!
+  l = 1
+  do j = 1, n
+     sum = 0.0E+00
+     do i = j, n
+       sum = sum + r(l)*wa1(i)
+       l = l + 1
+     end do
+     wa2(j) = sum
+  end do
+  temp = snrm2(n,wa2,1)
+  sgnorm = (gnorm/temp)/temp
+!
+!  Test whether the scaled gradient direction is acceptable.
+!
+  alpha = 0.0E+00
+  if (sgnorm >= delta) go to 120
+!
+!     the scaled gradient direction is not acceptable.
+!     finally, calculate the point along the dogleg
+!     at which the quadratic is minimized.
+!
+  bnorm = snrm2(n,qtb,1)
+  temp = (bnorm/gnorm)*(bnorm/qnorm)*(sgnorm/delta)
+  temp = temp - (delta/qnorm)*(sgnorm/delta)**2 &
+    + sqrt((temp-(delta/qnorm))**2 &
+    + (1.0-(delta/qnorm)**2)*(1.0-(sgnorm/delta)**2))
+
+  alpha = ((delta/qnorm)*(1.0E+00 - (sgnorm/delta)**2))/temp
+  120 continue
+!
+!     form appropriate convex combination of the gauss-newton
+!     direction and the scaled gradient direction.
+!
+  temp = (1.0E+00 - alpha)* min (sgnorm,delta)
+  do j = 1, n
+    x(j) = temp*wa1(j) + alpha*x(j)
+  end do
+
+  140 continue
+
+  return
+end
+subroutine dogstp ( nr, n, g, a, p, sx, rnwtln, dlt, nwtake, fstdog, ssd, v, &
+  cln, eta, sc, ipr, stepmx )
+!
+!*******************************************************************************
+!
+!! DOGSTP finds a new step by double dogleg algorithm.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+! parameters
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! g(n)         --> gradient at current iterate, g(x)
+! a(n,n)       --> cholesky decomposition of hessian in
+!                  lower part and diagonal
+! p(n)         --> newton step
+! sx(n)        --> diagonal scaling matrix for x
+! rnwtln       --> newton step length
+! dlt         <--> trust region radius
+! nwtake      <--> boolean, =.true. if newton step taken
+! fstdog      <--> boolean, =.true. if on first leg of dogleg
+! ssd(n)      <--> workspace [cauchy step to the minimum of the
+!                  quadratic model in the scaled steepest descent
+!                  direction] [retain value between successive calls]
+! v(n)        <--> workspace  [retain value between successive calls]
+! cln         <--> cauchy length
+!                  [retain value between successive calls]
+! eta              [retain value between successive calls]
+! sc(n)       <--  current step
+! ipr          --> device to which to send output
+! stepmx       --> maximum allowable step size
+!
+! internal variables
+!
+! cln              length of cauchy step
+!
+  integer n
+  integer nr
+!
+  real a(nr,*)
+  real alam
+  real alpha
+  real beta
+  real cln
+  real dlt
+  real dot1
+  real dot2
+  real eta
+  logical fstdog
+  real g(n)
+  integer i
+  integer ipr
+  integer j
+  logical nwtake
+  real p(n)
+  real rnwtln
+  real sc(n)
+  real ssd(n)
+  real stepmx
+  real sx(n)
+  real tmp
+  real v(n)
+!
+!  Can we take a newton step?
+!
+  if ( rnwtln <= dlt ) then
+
+    nwtake = .true.
+    sc(1:n) = p(1:n)
+    dlt = rnwtln
+
+  else
+!
+! newton step too long
+! cauchy step is on double dogleg curve
+!
+    nwtake = .false.
+
+    if ( fstdog ) then
+!
+!         calculate double dogleg curve (ssd)
+!
+      fstdog = .false.
+      alpha = 0.0E+00
+      do i = 1, n
+        alpha = alpha + (g(i)*g(i))/(sx(i)*sx(i))
+      end do
+
+      beta = 0.0E+00
+      do i = 1, n
+        tmp = 0.0E+00
+        do j = i, n
+          tmp = tmp + (a(j,i)*g(j))/(sx(j)*sx(j))
+        end do
+        beta = beta+tmp*tmp
+      end do
+
+      do i = 1, n
+        ssd(i) = - (alpha/beta)*g(i)/sx(i)
+      end do
+
+      cln = alpha * sqrt ( alpha ) / beta
+
+      eta = 0.2 + ( 0.8*alpha*alpha) / ( - beta * dot_product ( g, p ) )
+
+      do i = 1, n
+        v(i) = eta*sx(i)*p(i) - ssd(i)
+      end do
+
+      if ( dlt == - 1.0E+00 ) then
+        dlt = min ( cln, stepmx )
+      end if
+
+    end if
+!
+!  Take a partial step in the Newton direction.
+!
+      if ( eta * rnwtln <= dlt ) then
+
+        sc(1:n) = ( dlt / rnwtln ) * p(1:n)
+!
+!  Take a step in steepest descent direction
+!
+      else if ( cln >= dlt ) then
+
+        sc(1:n) = ( dlt / cln ) * ssd(1:n) / sx(1:n)
+!
+!  convex combination of ssd and eta*p which has scaled length dlt
+!
+      else
+
+        dot1 = dot_product ( v, ssd )
+        dot2 = dot_product ( v, v )
+        alam = (-dot1+sqrt((dot1*dot1)-dot2*(cln*cln-dlt*dlt)))/dot2
+
+        sc(1:n) = ( ssd(1:n) + alam * v(1:n) ) / sx(1:n)
+
+      end if
+
+  end if
+
+  return
+end
+subroutine ea ( newflg, svalue, limexp, result, abserr, epstab, ierr )
+!
+!*******************************************************************************
+!
+!! EA performs extrapolation to accelerate the convergence of a sequence.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  purpose  given a slowly convergent sequence, this routine attempts
+!            to extrapolate nonlinearly to a better estimate of the
+!            sequence's limiting value, thus improving the rate of
+!            convergence. routine is based on the epsilon algorithm
+!            of p. wynn. an estimate of the absolute error is also
+!            given.
+!
+  real abserr
+  real delta1
+  real delta2
+  real delta3
+  real eprn
+  real epstab(*)
+  real error
+  real err1
+  real err2
+  real err3
+  real e0
+  real e1
+  real e2
+  real e3
+  integer i
+  integer ib
+  integer ib2
+  integer ie
+  integer ierr
+  integer in
+  integer k1
+  integer k2
+  integer k3
+  integer limexp
+  integer n
+  integer newelm
+  integer num
+  integer nres
+  logical newflg
+  real relpr
+  real res
+  real result
+  real res3la(3)
+  real r1mach
+  real ss
+  real svalue
+  real tol1
+  real tol2
+  real tol3
+!
+  if ( limexp < 3 ) then
+    ierr = 1
+    call xerror('limexp is less than 3',21,1,1)
+    go to 110
+  end if
+
+  ierr = 0
+  res3la(1)=epstab(limexp+5)
+  res3la(2)=epstab(limexp+6)
+  res3la(3)=epstab(limexp+7)
+  result=svalue
+
+  if ( newflg) then
+    n=1
+    nres=0
+    newflg=.false.
+    epstab(n)=svalue
+    abserr=abs(result)
+    go to 100
+  else
+    n=int(epstab(limexp+3))
+    nres=int(epstab(limexp+4))
+    if ( n==2) then
+      epstab(n)=svalue
+      abserr=6.0*abs(result-epstab(1))
+      go to 100
+    end if
+  end if
+
+  epstab(n)=svalue
+  relpr=r1mach(4)
+  eprn=10.0*relpr
+  epstab(n+2)=epstab(n)
+  newelm=(n-1)/2
+  num=n
+  k1=n
+
+  do i=1,newelm
+
+    k2=k1-1
+    k3=k1-2
+    res=epstab(k1+2)
+    e0=epstab(k3)
+    e1=epstab(k2)
+    e2=res
+    delta2=e2-e1
+    err2=abs(delta2)
+    tol2=max(abs(e2),abs(e1))*relpr
+    delta3=e1-e0
+    err3=abs(delta3)
+    tol3=max(abs(e1),abs(e0))*relpr
+
+!
+!  if e0, e1 and e2 are equal to within machine accuracy, convergence is assumed.
+!
+    if ( err2 > tol2 .or. err3 > tol3 ) go to 10
+    result=res
+    abserr=err2+err3
+    go to 50
+
+   10   continue
+
+    if ( i/=1) then
+      e3=epstab(k1)
+      epstab(k1)=e1
+      delta1=e1-e3
+      err1=abs(delta1)
+      tol1=max(abs(e1),abs(e3))*relpr
+!
+!           if two elements are very close to each other, omit
+!           a part of the table by adjusting the value of n
+!
+      if ( err1<=tol1.or.err2<=tol2.or.err3<=tol3) go to 20
+      ss=1.0/delta1+1.0/delta2-1.0/delta3
+    else
+      epstab(k1)=e1
+      if ( err2<=tol2.or.err3<=tol3) go to 20
+      ss=1.0/delta2-1.0/delta3
+    end if
+!
+!           test to detect irregular behaviour in the table, and
+!           eventually omit a part of the table adjusting the value
+!           of n
+!
+    if ( abs(ss*e1)>0.1e-03) go to 30
+   20   n=i+i-1
+
+    if ( nres==0) then
+      abserr=err2+err3
+      result=res
+    else if ( nres==1) then
+      result=res3la(1)
+    else if ( nres==2) then
+      result=res3la(2)
+    else
+      result=res3la(3)
+    end if
+
+    go to 50
+!
+!  compute a new element and eventually adjust the value of result
+!
+   30   res=e1+1.0/ss
+    epstab(k1)=res
+    k1=k1-2
+    if ( nres==0) then
+      abserr=err2+abs(res-e2)+err3
+      result=res
+      go to 40
+    else if ( nres==1) then
+      error=6.0*(abs(res-res3la(1)))
+    else if ( nres==2) then
+      error=2.0*(abs(res-res3la(2))+abs(res-res3la(1)))
+    else
+      error=abs(res-res3la(3))+abs(res-res3la(2))+abs(res-res3la(1))
+    end if
+
+    if ( error <= 10.0E+00 * abserr ) then
+      abserr = error
+      result = res
+    end if
+
+   40 continue
+
+  end do
+!
+!  compute error estimate
+!
+    if ( nres==1) then
+      abserr=6.0*(abs(result-res3la(1)))
+    else if ( nres==2) then
+      abserr=2.0*abs(result-res3la(2))+abs(result-res3la(1))
+    else if ( nres>2) then
+      abserr=abs(result-res3la(3))+abs(result-res3la(2)) &
+        +abs(result-res3la(1))
+    end if
+!
+!  shift the table
+!
+   50 if ( n==limexp) n=2*(limexp/2)-1
+  ib=1
+  if ( (num/2)*2==num) ib=2
+  ie=newelm+1
+
+  do i = 1, ie
+    ib2=ib+2
+    epstab(ib)=epstab(ib2)
+    ib=ib2
+  end do
+
+  if ( num==n) go to 80
+  in=num-n+1
+
+  do i=1,n
+    epstab(i)=epstab(in)
+    in=in+1
+  end do
+!
+!  update res3la
+!
+   80 continue
+
+  if ( nres==0) then
+    res3la(1)=result
+  else if ( nres==1) then
+    res3la(2)=result
+  else if ( nres==2) then
+    res3la(3)=result
+  else
+    res3la(1)=res3la(2)
+    res3la(2)=res3la(3)
+    res3la(3)=result
+  end if
+
+90 continue
+
+  abserr=max(abserr,eprn*abs(result))
+  nres=nres+1
+
+100 continue
+
+  n=n+1
+  epstab(limexp+3)=real(n)
+  epstab(limexp+4)=real(nres)
+  epstab(limexp+5)=res3la(1)
+  epstab(limexp+6)=res3la(2)
+  epstab(limexp+7)=res3la(3)
+
+110 continue
+
+  return
+end
+function erf ( x )
+!
+!*******************************************************************************
+!
+!! ERF computes the error function.
+!
+!
+!  Definition:
+!
+!    ERF(X) = ( 2 / SQRT ( PI ) ) * Integral ( 0 <= T <= X ) EXP ( -T**2 ) dT
+!
+!  Modified:
+!
+!    10 November 1999
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+!    Input, real X, the argument of the error function.
+!
+!    Output, real ERF, the value of the error function at X.
+!
+  real, parameter :: sqrtpi = 1.7724538509055160
+!
+  real csevl
+  real erf
+  real erfc
+  real erfcs(13)
+  integer inits
+  integer, save :: nterf = 0
+  real r1mach
+  real sqeps
+  real x
+  real, save :: xbig = 0.0E+00
+  real y
+!
+  data erfcs( 1) /   -0.049046121234691808 /
+  data erfcs( 2) /   -0.14226120510371364 /
+  data erfcs( 3) /    0.010035582187599796 /
+  data erfcs( 4) /   -0.000576876469976748 /
+  data erfcs( 5) /    0.000027419931252196 /
+  data erfcs( 6) /   -0.000001104317550734 /
+  data erfcs( 7) /    0.000000038488755420 /
+  data erfcs( 8) /   -0.000000001180858253 /
+  data erfcs( 9) /    0.000000000032334215 /
+  data erfcs(10) /   -0.000000000000799101 /
+  data erfcs(11) /    0.000000000000017990 /
+  data erfcs(12) /   -0.000000000000000371 /
+  data erfcs(13) /    0.000000000000000007 /
+  data sqeps / 0.0E+00 /
+!
+  if ( nterf == 0 ) then
+    nterf = inits ( erfcs, 13, 0.1*r1mach(3) )
+    xbig = sqrt ( - log ( sqrtpi * r1mach(3) ) )
+    sqeps = sqrt ( 2.0E+00 * epsilon ( sqeps ) )
+  end if
+
+  y = abs ( x )
+
+  if ( y <= sqeps ) then
+    erf = 2.0E+00 * x / sqrtpi
+  else if ( y <= 1.0E+00 ) then
+    erf = x * ( 1.0E+00 + csevl ( 2.0E+00 * x**2 - 1.0, erfcs, nterf ) )
+  else if ( y <= xbig ) then
+    erf = sign ( 1.0E+00 - erfc ( y ), x )
+  else
+    erf = sign ( 1.0, x )
+  end if
+
+  return
+end
+function erfc ( x )
+!
+!*******************************************************************************
+!
+!! ERFC computes the complementary error function.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+! erfc(x) calculates the single precision complementary error
+! function for single precision argument x.
+!
+! series for erf        on the interval  0.          to  1.00000d+00
+!                                        with weighted error   7.10e-18
+!                                         log weighted error  17.15
+!                               significant figures required  16.31
+!                                    decimal places required  17.71
+!
+! series for erfc       on the interval  0.          to  2.50000d-01
+!                                        with weighted error   4.81e-17
+!                                         log weighted error  16.32
+!                        approx significant figures required  15.0E+00
+!
+!
+! series for erc2       on the interval  2.50000d-01 to  1.00000d+00
+!                                        with weighted error   5.22e-17
+!                                         log weighted error  16.28
+!                        approx significant figures required  15.0E+00
+!                                    decimal places required  16.96
+!
+  real csevl
+  real erfc
+  real erfcs(13)
+  real erfccs(24)
+  real erc2cs(23)
+  real eta
+  integer inits
+  integer nterc2
+  integer nterf
+  integer nterfc
+  real r1mach
+  real sqeps
+  real sqrtpi
+  real x
+  real xmax
+  real xsml
+  real y
+!
+  data erfcs( 1) /   -.049046121234691808e0 /
+  data erfcs( 2) /   -.14226120510371364e0 /
+  data erfcs( 3) /    .010035582187599796e0 /
+  data erfcs( 4) /   -.000576876469976748e0 /
+  data erfcs( 5) /    .000027419931252196e0 /
+  data erfcs( 6) /   -.000001104317550734e0 /
+  data erfcs( 7) /    .000000038488755420e0 /
+  data erfcs( 8) /   -.000000001180858253e0 /
+  data erfcs( 9) /    .000000000032334215e0 /
+  data erfcs(10) /   -.000000000000799101e0 /
+  data erfcs(11) /    .000000000000017990e0 /
+  data erfcs(12) /   -.000000000000000371e0 /
+  data erfcs(13) /    .000000000000000007e0 /
+  data erc2cs( 1) /   -.069601346602309501e0 /
+  data erc2cs( 2) /   -.041101339362620893e0 /
+  data erc2cs( 3) /    .003914495866689626e0 /
+  data erc2cs( 4) /   -.000490639565054897e0 /
+  data erc2cs( 5) /    .000071574790013770e0 /
+  data erc2cs( 6) /   -.000011530716341312e0 /
+  data erc2cs( 7) /    .000001994670590201e0 /
+  data erc2cs( 8) /   -.000000364266647159e0 /
+  data erc2cs( 9) /    .000000069443726100e0 /
+  data erc2cs(10) /   -.000000013712209021e0 /
+  data erc2cs(11) /    .000000002788389661e0 /
+  data erc2cs(12) /   -.000000000581416472e0 /
+  data erc2cs(13) /    .000000000123892049e0 /
+  data erc2cs(14) /   -.000000000026906391e0 /
+  data erc2cs(15) /    .000000000005942614e0 /
+  data erc2cs(16) /   -.000000000001332386e0 /
+  data erc2cs(17) /    .000000000000302804e0 /
+  data erc2cs(18) /   -.000000000000069666e0 /
+  data erc2cs(19) /    .000000000000016208e0 /
+  data erc2cs(20) /   -.000000000000003809e0 /
+  data erc2cs(21) /    .000000000000000904e0 /
+  data erc2cs(22) /   -.000000000000000216e0 /
+  data erc2cs(23) /    .000000000000000052e0 /
+  data erfccs( 1) /   0.0715179310202925e0 /
+  data erfccs( 2) /   -.026532434337606719e0 /
+  data erfccs( 3) /    .001711153977920853e0 /
+  data erfccs( 4) /   -.000163751663458512e0 /
+  data erfccs( 5) /    .000019871293500549e0 /
+  data erfccs( 6) /   -.000002843712412769e0 /
+  data erfccs( 7) /    .000000460616130901e0 /
+  data erfccs( 8) /   -.000000082277530261e0 /
+  data erfccs( 9) /    .000000015921418724e0 /
+  data erfccs(10) /   -.000000003295071356e0 /
+  data erfccs(11) /    .000000000722343973e0 /
+  data erfccs(12) /   -.000000000166485584e0 /
+  data erfccs(13) /    .000000000040103931e0 /
+  data erfccs(14) /   -.000000000010048164e0 /
+  data erfccs(15) /    .000000000002608272e0 /
+  data erfccs(16) /   -.000000000000699105e0 /
+  data erfccs(17) /    .000000000000192946e0 /
+  data erfccs(18) /   -.000000000000054704e0 /
+  data erfccs(19) /    .000000000000015901e0 /
+  data erfccs(20) /   -.000000000000004729e0 /
+  data erfccs(21) /    .000000000000001432e0 /
+  data erfccs(22) /   -.000000000000000439e0 /
+  data erfccs(23) /    .000000000000000138e0 /
+  data erfccs(24) /   -.000000000000000048e0 /
+  data sqrtpi /1.7724538509055160e0/
+  data nterf, nterfc, nterc2, xsml, xmax, sqeps /3*0, 3*0./
+!
+  if ( nterf == 0 ) then
+
+    eta = 0.1 * r1mach(3)
+    nterf = inits ( erfcs, 13, eta )
+    nterfc = inits ( erfccs, 24, eta )
+    nterc2 = inits ( erc2cs, 23, eta )
+
+    xsml = -sqrt ( - log ( sqrtpi * r1mach(3) ) )
+    xmax = sqrt ( - log ( sqrtpi * r1mach(1) ) )
+    xmax = xmax - 0.5 * log ( xmax ) / xmax - 0.01
+    sqeps = sqrt ( 2.0E+00 * r1mach(3) )
+
+  end if
+
+  if ( x <= xsml ) then
+    erfc = 2.0E+00
+    return
+  end if
+
+  if ( x > xmax ) go to 40
+  y = abs(x)
+  if (y>1.0) go to 30
+!
+!  erfc(x) = 1.0E+00 - erf(x) for -1. <= x <= 1.
+!
+  if ( y < sqeps ) then
+    erfc = 1.0E+00 - 2.0*x/sqrtpi
+  else if (y>=sqeps) then
+    erfc = 1.0E+00 - x*(1.0E+00 + csevl (2.*x*x-1., erfcs, nterf) )
+  end if
+
+  return
+!
+! erfc(x) = 1.0E+00 - erf(x) for 1. < abs(x) <= xmax
+!
+30 continue
+
+  y = y*y
+
+  if (y<=4.) then
+    erfc = exp(-y)/abs(x) * (0.5 + csevl ((8./y-5.)/3.,erc2cs, nterc2) )
+  else
+    erfc = exp(-y)/abs(x) * (0.5 + csevl (8./y-1.,erfccs, nterfc) )
+  end if
+
+  if ( x < 0.0E+00 ) erfc = 2.0E+00 - erfc
+
+  return
+
+40  continue
+
+  call xerror ( 'erfc    x so big erfc underflows', 32, 1, 1)
+  erfc = 0.0E+00
+
+  return
+end
+subroutine ezfftb ( n, r, azero, a, b, wsave )
+!
+!*******************************************************************************
+!
+!! EZFFTB computes a real periodic sequence from its Fourier coefficients.
+!
+!
+!  Discussion:
+!
+!    This process is sometimes called Fourier synthesis.
+!
+!    EZFFTB is a simplified but slower version of RFFTB.
+!
+!    The transform is defined by:
+!
+!      R(I) = AZERO + sum ( 1 <= K <= N/2 )
+!
+!          A(K) * cos ( K * ( I - 1 ) * 2 * PI / N )
+!        + B(K) * sin ( K * ( I - 1 ) * 2 * PI / N )
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the output array.  The
+!    method is more efficient when N is the product of small primes.
+!
+!    Output, real R(N), the reconstructed data sequence.
+!
+!    Input, real AZERO, the constant Fourier coefficient.
+!
+!    Input, real A(N/2), B(N/2), the Fourier coefficients.
+!
+!    Input, real WSAVE(3*N+15), a work array.  The WSAVE array must be
+!    initialized by calling EZFFFTI.  A different WSAVE array must be used
+!    for each different value of N.
+!
+  integer n
+!
+  real a(n/2)
+  real azero
+  real b(n/2)
+  integer i
+  integer ns2
+  real r(n)
+  real wsave(3*n+15)
+!
+  if ( n < 2 ) then
+
+    r(1) = azero
+
+  else if ( n == 2 ) then
+
+    r(1) = azero + a(1)
+    r(2) = azero - a(1)
+
+  else
+
+    ns2 = ( n - 1 ) / 2
+
+    do i = 1, ns2
+      r(2*i) = 0.5E+00 * a(i)
+      r(2*i+1) = -0.5E+00 * b(i)
+    end do
+
+    r(1) = azero
+
+    if ( mod ( n, 2 ) == 0 ) then
+      r(n) = a(ns2+1)
+    end if
+
+    call rfftb ( n, r, wsave(n+1) )
+
+  end if
+
+  return
+end
+subroutine ezfftf ( n, r, azero, a, b, wsave )
+!
+!*******************************************************************************
+!
+!! EZFFTF computes the Fourier coefficients of a real periodic sequence.
+!
+!
+!  Discussion:
+!
+!    This process is sometimes called Fourier analysis.
+!
+!    EZFFTF is a simplified but slower version of RFFTF.
+!
+!    The transform is defined by:
+!
+!      AZERO = sum ( 1 <= I <= N ) R(I) / N,
+!
+!    and, for K = 1 to (N-1)/2,
+!
+!      A(K) = sum ( 1 <= I <= N )
+!        ( 2 / N ) * R(I) * cos ( K * ( I - 1 ) * 2 * PI / N )
+!
+!    and, if N is even, then
+!
+!      A(N/2) = sum ( 1 <= I <= N ) (-1) **(I-1) * R(I) / N
+!
+!    For K = 1 to (N-1)/2,
+!
+!      B(K) = sum ( 1 <= I <= N )
+!        ( 2 / N ) * R(I) * sin ( K * ( I - 1 ) * 2 * PI / N )
+!
+!    and, if N is even, then
+!
+!      B(N/2) = 0.
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array to be transformed.  The
+!    method is more efficient when N is the product of small primes.
+!
+!    Input, real R(N), the sequence to be transformed.
+!
+!    Input, real WSAVE(3*N+15), a work array.  The WSAVE array must be
+!    initialized by calling EZFFTI.  A different WSAVE array must be used
+!    for each different value of N.
+!
+!    Output, real AZERO, the constant Fourier coefficient.
+!
+!    Output, real A(N/2), B(N/2), the Fourier coefficients.
+!
+  integer n
+!
+  real a(n/2)
+  real azero
+  real b(n/2)
+  real cf
+  integer i
+  integer ns2
+  real r(n)
+  real wsave(3*n+15)
+!
+  if ( n < 2 ) then
+
+    azero = r(1)
+
+  else if ( n == 2 ) then
+
+    azero = 0.5E+00 * ( r(1) + r(2) )
+    a(1) = 0.5E+00 * ( r(1) - r(2) )
+
+  else
+
+    wsave(1:n) = r(1:n)
+
+    call rfftf ( n, wsave(1), wsave(n+1) )
+
+    cf = 2.0E+00 / real ( n )
+    azero = 0.5E+00 * cf * wsave(1)
+    ns2 = ( n + 1 ) / 2
+
+    do i = 1, ns2-1
+      a(i) = cf * wsave(2*i)
+      b(i) = -cf * wsave(2*i+1)
+    end do
+
+    if ( mod ( n, 2 ) /= 1 ) then
+      a(ns2) = 0.5E+00 * cf * wsave(n)
+      b(ns2) = 0.0E+00
+    end if
+
+  end if
+
+  return
+end
+subroutine ezffti ( n, wsave )
+!
+!*******************************************************************************
+!
+!! EZFFTI initializes WSAVE, used in EZFFTF and EZFFTB.
+!
+!
+!  Discussion:
+!
+!    The prime factorization of N together with a tabulation of the
+!    trigonometric functions are computed and stored in WSAVE.
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array to be transformed.  The
+!    method is more efficient when N is the product of small primes.
+!
+!    Output, real WSAVE(3*N+15), contains data, dependent on the value
+!    of N, which is necessary for the EZFFTF or EZFFTB routines.
+!
+  integer n
+!
+  real wsave(3*n+15)
+!
+  if ( n <= 1 ) then
+    return
+  end if
+
+  call ezffti1 ( n, wsave(2*n+1), wsave(3*n+1) )
+
+  return
+end
+subroutine ezffti1 ( n, wa, ifac )
+!
+!*******************************************************************************
+!
+!! EZFFTI1 is a lower level routine used by EZFFTI.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array to be transformed.
+!
+!    Output, real WA(N).
+!
+!    Input, integer IFAC(15).
+!    IFAC(1) = N, the number that was factored.
+!    IFAC(2) = NF, the number of factors.
+!    IFAC(3:2+NF), the factors.
+!
+  integer n
+!
+  real arg1
+  real argh
+  real ch1
+  real ch1h
+  real dch1
+  real dsh1
+  integer i
+  integer ib
+  integer ido
+  integer ifac(15)
+  integer ii
+  integer ip
+  integer is
+  integer j
+  integer k1
+  integer l1
+  integer l2
+  integer nf
+  real pimach
+  real sh1
+  real wa(n)
+!
+  call i_factor ( n, ifac )
+
+  nf = ifac(2)
+
+  argh = 2.0E+00 * pimach() / real ( n )
+  is = 0
+  l1 = 1
+
+  do k1 = 1, nf-1
+
+    ip = ifac(k1+2)
+    l2 = l1 * ip
+    ido = n / l2
+    arg1 = real ( l1 ) * argh
+    ch1 = 1.0E+00
+    sh1 = 0.0E+00
+    dch1 = cos ( arg1 )
+    dsh1 = sin ( arg1 )
+
+    do j = 1, ip-1
+
+      ch1h = dch1 * ch1 - dsh1 * sh1
+      sh1  = dch1 * sh1 + dsh1 * ch1
+      ch1 = ch1h
+      i = is + 2
+      wa(i-1) = ch1
+      wa(i) = sh1
+
+      do ii = 5, ido, 2
+        i = i + 2
+        wa(i-1) = ch1 * wa(i-3) - sh1 * wa(i-2)
+        wa(i)   = ch1 * wa(i-2) + sh1 * wa(i-3)
+      end do
+
+      is = is + ido
+
+    end do
+
+    l1 = l2
+
+  end do
+
+  return
+end
+subroutine fdjac1 ( fcn, n, x, fvec, fjac, ldfjac, iflag, ml, mu, epsfcn )
+!
+!*******************************************************************************
+!
+!! FDJAC1 computes a forward-difference approximation to a jacobian matrix.
+!
+!
+!  Discussion:
+!
+!    The n by n jacobian matrix is associated with a specified
+!    problem of n functions in n variables. if the jacobian has
+!    a banded form, then function evaluations are saved by only
+!    approximating the nonzero terms.
+!
+!  Modified:
+!
+!    25 August 2000
+!
+!  Parameters:
+!
+!       fcn is the name of the user-supplied subroutine which
+!         calculates the functions. fcn must be declared
+!         in an external statement in the user calling
+!         program, and should be written as follows.
+!
+!         subroutine fcn(n,x,fvec,iflag)
+!         integer n,iflag
+!         real x(n),fvec(n)
+!
+!         calculate the functions at x and
+!         return this vector in fvec.
+!
+!         return
+!         end
+!
+!         the value of iflag should not be changed by fcn unless
+!         the user wants to terminate execution of FDJAC1.
+!         in this case set iflag to a negative integer.
+!
+!       n is a positive integer input variable set to the number
+!         of functions and variables.
+!
+!       x is an input array of length n.
+!
+!       fvec is an input array of length n which must contain the
+!       functions evaluated at x.
+!
+!       fjac is an output n by n array which contains the
+!         approximation to the jacobian matrix evaluated at x.
+!
+!       ldfjac is a positive integer input variable not less than n
+!         which specifies the leading dimension of the array fjac.
+!
+!       iflag is an integer variable which can be used to terminate
+!         the execution of FJDAC1. see description of fcn.
+!
+!       ml is a nonnegative integer input variable which specifies
+!         the number of subdiagonals within the band of the
+!         jacobian matrix. if the jacobian is not banded, set
+!         ml to at least n - 1.
+!
+!       epsfcn is an input variable used in determining a suitable
+!         step length for the forward-difference approximation. this
+!         approximation assumes that the relative errors in the
+!       functions are of the order of epsfcn. if epsfcn is less
+!         than the machine precision, it is assumed that the relative
+!         errors in the functions are of the order of the machine
+!         precision.
+!
+!       mu is a nonnegative integer input variable which specifies
+!         the number of superdiagonals within the band of the
+!         jacobian matrix. if the jacobian is not banded, set
+!         mu to at least n - 1.
+!
+  integer ldfjac
+  integer n
+!
+  real eps
+  real epsfcn
+  real epsmch
+  real fjac(ldfjac,n)
+  real fvec(n)
+  real h
+  integer i
+  integer iflag
+  integer j
+  integer k
+  integer ml
+  integer msum
+  integer mu
+  real r1mach
+  real temp
+  real wa1(n)
+  real wa2(n)
+  real x(n)
+!
+  external fcn
+!
+  epsmch = epsilon ( 1.0E+00 )
+!
+  eps = sqrt( max (epsfcn,epsmch))
+  msum = ml + mu + 1
+  if (msum < n) go to 40
+!
+!  computation of dense approximate jacobian.
+!
+     do j = 1, n
+
+       temp = x(j)
+       h = eps*abs(temp)
+       if (h == 0.0) h = eps
+       x(j) = temp + h
+       call fcn(n,x,wa1,iflag)
+       if (iflag < 0) go to 30
+       x(j) = temp
+       fjac(1:n,j) = (wa1(1:n) - fvec(1:n))/h
+
+    end do
+
+   30    continue
+
+     go to 110
+
+   40 continue
+!
+!  Computation of banded approximate jacobian.
+!
+     do k = 1, msum
+
+        do j = k, n, msum
+           wa2(j) = x(j)
+           h = eps*abs(wa2(j))
+           if (h == 0.0) h = eps
+           x(j) = wa2(j) + h
+        end do
+
+        call fcn(n,x,wa1,iflag)
+        if (iflag < 0) go to 100
+
+        do j = k, n, msum
+
+           x(j) = wa2(j)
+           h = eps*abs(wa2(j))
+           if (h == 0.0) h = eps
+
+           do i = 1, n
+              fjac(i,j) = 0.0E+00
+              if (i >= j - mu .and. i <= j + ml) then
+                fjac(i,j) = (wa1(i) - fvec(i))/h
+              end if
+           end do
+
+        end do
+
+      end do
+
+  100    continue
+  110 continue
+
+  return
+end
+function fmin ( ax, bx, f, tol )
+!
+!*******************************************************************************
+!
+!! FMIN seeks a minimizer of a scalar function of a scalar variable.
+!
+!
+!  Discussion:
+!
+!    FMIN seeks an approximation to the point where F attains a minimum on
+!    the interval (ax,bx).
+!
+!     the method used is a combination of golden section search and
+!     successive parabolic interpolation.  convergence is never much
+!     slower than that for a fibonacci search.  if f has a continuous
+!     second derivative which is positive at the minimum (which is not
+!     at ax or bx), then convergence is superlinear, and usually of the
+!     order of about 1.324....
+!
+!     the function f is never evaluated at two points closer together
+!     than eps*abs(fmin) + (tol/3), where eps is approximately the
+!     square root of the relative machine precision.  if f is a unimodal
+!     function and the computed values of f are always unimodal when
+!     separated by at least eps*abs(xstar) + (tol/3), then fmin
+!     approximates the abcissa of the global minimum of f on the
+!     interval ax,bx with an error less than 3*eps*abs(fmin) + tol.
+!     if f is not unimodal, then fmin may approximate a local, but
+!     perhaps non-global, minimum to the same accuracy.
+!
+!     this function subprogram is a slightly modified version of the
+!     algol 60 procedure localmin given in richard brent, algorithms for
+!     minimization without derivatives, prentice-hall, inc. (1973).
+!
+!  Reference:
+!
+!    Richard Brent,
+!    Algorithms for Minimization without Derivatives,
+!    Prentice Hall, 1973.
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+! input parameters
+!
+!  ax    (real)  left endpoint of initial interval
+!  bx    (real) right endpoint of initial interval
+!  f     real function of the form real function f(x) which evaluates
+!          f(x)  for any  x in the interval  (ax,bx)
+!        must be declared external in calling routine.
+!  tol   (real) desired length of the interval of uncertainty of the
+!        final result ( >= 0.0)
+!
+!
+! output parameters
+!
+! fmin   abcissa approximating the minimizer of f.
+!
+! ax     lower bound for minimizer.
+!
+! bx     upper bound for minimizer
+!
+  real a
+  real ax
+  real b
+  real bx
+  real c
+  real d
+  real e
+  real eps
+  real f
+  real fmin
+  real fu
+  real fv
+  real fw
+  real fx
+  real p
+  real q
+  real r
+  real tol
+  real tol1
+  real tol2
+  real u
+  real v
+  real w
+  real x
+  real xm
+!
+  external f
+!
+  c = 0.5 * ( 3.0E+00 - sqrt ( 5.0E+00 ) )
+!
+!  C is the squared inverse of the golden ratio.
+!
+!  EPS is the square root of the relative machine precision.
+!
+  eps = sqrt ( epsilon ( eps ) )
+!
+!  initialization
+!
+  a = ax
+  b = bx
+  v = a + c*(b - a)
+  w = v
+  x = v
+  e = 0.0E+00
+  fx = f(x)
+  fv = fx
+  fw = fx
+!
+!  main loop starts here
+!
+   20 continue
+
+  xm = 0.5 * ( a + b )
+  tol1 = eps*abs(x) + tol/3.0E+00
+  tol2 = 2.0*tol1
+!
+!  Check the stopping criterion.
+!
+  if (abs(x - xm) <= (tol2 - 0.5*(b - a))) go to 90
+!
+! is golden-section necessary
+!
+  if (abs(e) <= tol1) go to 40
+!
+!  fit parabola
+!
+  r = (x - w)*(fx - fv)
+  q = (x - v)*(fx - fw)
+  p = (x - v)*q - (x - w)*r
+  q = 2.0*(q - r)
+  if (q > 0.0) p = -p
+  q = abs(q)
+  r = e
+  e = d
+!
+!  is parabola acceptable
+!
+   30 continue
+
+  if (abs(p) >= abs(0.5*q*r)) go to 40
+  if (p <= q*(a - x)) go to 40
+  if (p >= q*(b - x)) go to 40
+!
+!  a parabolic interpolation step
+!
+  d = p/q
+  u = x + d
+!
+!  f must not be evaluated too close to ax or bx
+!
+  if ((u - a) < tol2) d = sign(tol1, xm - x)
+  if ((b - u) < tol2) d = sign(tol1, xm - x)
+  go to 50
+!
+!  a golden-section step
+!
+   40 continue
+
+  if (x >= xm) e = a - x
+  if (x < xm) e = b - x
+  d = c*e
+!
+!  f must not be evaluated too close to x
+!
+   50 if (abs(d) >= tol1) u = x + d
+  if (abs(d) < tol1) u = x + sign(tol1, d)
+  fu = f(u)
+!
+!  update  a, b, v, w, and x
+!
+  if (fu > fx) go to 60
+
+  if (u >= x) a = x
+  if (u < x) b = x
+  v = w
+  fv = fw
+  w = x
+  fw = fx
+  x = u
+  fx = fu
+  go to 20
+
+60 continue
+
+  if (u < x) a = u
+  if (u >= x) b = u
+  if (fu <= fw) go to 70
+  if (w == x) go to 70
+  if (fu <= fv) go to 80
+  if (v == x) go to 80
+  if (v == w) go to 80
+  go to 20
+
+   70 v = w
+  fv = fw
+  w = u
+  fw = fu
+  go to 20
+   80 v = u
+  fv = fu
+  go to 20
+!
+!end of main loop
+!
+   90 fmin = x
+  return
+end
+subroutine forslv ( nr, n, a, x, b )
+!
+!*******************************************************************************
+!
+!! FORSLV solves A*x=b where A is lower triangular matrix.
+!
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! a(n,n)       --> lower triangular matrix (preserved)
+! x(n)        <--  solution vector
+! b(n)         --> right-hand side vector
+!
+! note
+!
+! if b is no longer required by calling routine,
+! then vectors b and x may share the same storage.
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real b(n)
+  integer i
+  integer j
+  real sum
+  real x(n)
+!
+  x(1) = b(1) / a(1,1)
+
+  do i = 2, n
+    sum = 0.0E+00
+    do j = 1, i-1
+      sum = sum + a(i,j) * x(j)
+    end do
+    x(i) = ( b(i) - sum ) / a(i,i)
+  end do
+
+  return
+end
+subroutine fstocd ( n, x, fcn, sx, rnoise, g )
+!
+!*******************************************************************************
+!
+!! FSTOCD approximates the gradient of a function using central differences.
+!
+!
+! parameters
+!
+! n            --> dimension of problem
+! x            --> point at which gradient is to be approximated.
+! fcn          --> name of subroutine to evaluate function.
+! sx           --> diagonal scaling matrix for x.
+! rnoise       --> relative noise in fcn [f(x)].
+! g           <--  central difference approximation to gradient.
+!
+!
+  integer n
+!
+  real fminus
+  real fplus
+  real g(n)
+  integer i
+  real rnoise
+  real stepi
+  real sx(n)
+  real third
+  real x(n)
+  real xtempi
+!
+  external fcn
+!
+! find i th  stepsize, evaluate two neighbors in direction of i th
+! unit vector, and evaluate i th  component of gradient.
+!
+  third = 1.0 /3.0E+00
+
+  do i = 1, n
+     stepi = rnoise**third * max(abs(x(i)), 1.0 /sx(i))
+     xtempi = x(i)
+     x(i) = xtempi + stepi
+     call fcn (n, x, fplus)
+     x(i) = xtempi - stepi
+     call fcn (n, x, fminus)
+     x(i) = xtempi
+     g(i) = (fplus - fminus)/(2.0 *stepi)
+  end do
+
+  return
+end
+subroutine fstofd ( nr, m, n, xpls, fcn, fpls, a, sx, rnoise, fhat, icase )
+!
+!*******************************************************************************
+!
+!! FSTOFD finds first order forward finite difference approximation "a" to the
+! first derivative of the function defined by the subprogram "fname"
+! evaluated at the new iterate "xpls".
+!
+!
+! for optimization use this routine to estimate:
+! 1) the first derivative (gradient) of the optimization function "fcn
+!    analytic user routine has been supplied;
+! 2) the second derivative (hessian) of the optimization function
+!    if no analytic user routine has been supplied for the hessian but
+!    one has been supplied for the gradient ("fcn") and if the
+!    optimization function is inexpensive to evaluate
+!
+! note
+!
+! _m=1 (optimization) algorithm estimates the gradient of the function
+!      (fcn).   fcn(x) # f: r(n)-->r(1)
+! _m=n (systems) algorithm estimates the jacobian of the function
+!      fcn(x) # f: r(n)-->r(n).
+! _m=n (optimization) algorithm estimates the hessian of the optimizatio
+!    function, where the hessian is the first derivative of "fcn"
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! m            --> number of rows in a
+! n            --> number of columns in a; dimension of problem
+! xpls(n)      --> new iterate:  x[k]
+! fcn          --> name of subroutine to evaluate function
+! fpls(m)      --> _m=1 (optimization) function value at new iterate:
+!                       fcn(xpls)
+!                  _m=n (optimization) value of first derivative
+!                       (gradient) given by user function fcn
+!                  _m=n (systems)function value of associated
+!                       minimization function
+! a(nr,n)     <--  finite difference approximation (see note).  only
+!                  lower triangular matrix and diagonal are returned
+! sx(n)        --> diagonal scaling matrix for x
+! rnoise       --> relative noise in fcn [f(x)]
+! fhat(m)      --> workspace
+! icase        --> =1 optimization (gradient)
+!                  =2 systems
+!                  =3 optimization (hessian)
+!
+! internal variables
+!
+! stepsz - stepsize in the j-th variable direction
+!
+  integer m
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real fhat(m)
+  real fpls(m)
+  integer i
+  integer icase
+  integer j
+  real rnoise
+  real stepsz
+  real sx(n)
+  real xpls(n)
+  real xtmpj
+!
+  external fcn
+!
+! find j-th column of a
+! each column is derivative of f(fcn) with respect to xpls(j)
+!
+  do j=1,n
+    stepsz=sqrt(rnoise)*max(abs(xpls(j)),1./sx(j))
+    xtmpj=xpls(j)
+    xpls(j)=xtmpj+stepsz
+    call fcn(n,xpls,fhat)
+    xpls(j)=xtmpj
+    do i=1,m
+      a(i,j)=(fhat(i)-fpls(i))/stepsz
+    end do
+  end do
+
+  if ( icase/=3) then
+    return
+  end if
+!
+! if computing hessian, a must be symmetric
+!
+  do j=1,n-1
+    do i=j+1,m
+      a(i,j)=(a(i,j)+a(j,i))/2.0E+00
+    end do
+  end do
+
+  return
+end
+subroutine fzero ( f, b, c, r, re, ae, iflag )
+!
+!*******************************************************************************
+!
+!! FZERO searches for a zero of a function F(X) in a given interval.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    L. f. shampine and h. a. watts,
+!    fzero, a root-solving code*,
+!    sc-tm-70-631, september 1970.
+!
+!    t. j. dekker,
+!    finding a zero by means of successive linear interpolation*,
+!    'constructive aspects of the fundamental theorem of algebra',
+!    edited by b. dejon, p. henrici, 1969.
+!
+!  Discussion:
+!
+!    fzero searches for a zero of a function f(x) between
+!    the given values b and c until the width of the interval
+!    (b,c) has collapsed to within a tolerance specified by
+!    the stopping criterion, abs(b-c) <= 2.*(rw*abs(b)+ae).
+!    the method used is an efficient combination of bisection
+!    and the secant rule.
+!
+!  Parameters:
+!
+!     f,b,c,r,re and ae are input parameters
+!     b,c and iflag are output parameters (flagged by an * below)
+!
+!        f     - name of the real valued external function.  this name
+!                must be in an external statement in the calling
+!                program.  f must be a function of one real argument.
+!
+!       *b     - one end of the interval (b,c).  the value returned for
+!                b usually is the better approximation to a zero of f.
+!
+!       *c     - the other end of the interval (b,c)
+!
+!        r     - a (better) guess of a zero of f which could help in
+!                speeding up convergence.  if f(b) and f(r) have
+!                opposite signs, a root will be found in the interval
+!                (b,r); if not, but f(r) and f(c) have opposite
+!                signs, a root will be found in the interval (r,c);
+!                otherwise, the interval (b,c) will be searched for a
+!                possible root.  when no better guess is known, it is
+!                recommended that r be set to b or c; because if r is
+!                not interior to the interval (b,c), it will be ignored.
+!
+!        re    - relative error used for rw in the stopping criterion.
+!                if the requested re is less than machine precision,
+!                then rw is set to approximately machine precision.
+!
+!        ae    - absolute error used in the stopping criterion.  if the
+!                given interval (b,c) contains the origin, then a
+!                nonzero value should be chosen for ae.
+!
+!       *iflag - a status code.  user must check iflag after each call.
+!                control returns to the user from fzero in all cases.
+!
+!                1  b is within the requested tolerance of a zero.
+!                   the interval (b,c) collapsed to the requested
+!                   tolerance, the function changes sign in (b,c), and
+!                   f(x) decreased in magnitude as (b,c) collapsed.
+!
+!                2  f(b) = 0.  however, the interval (b,c) may not have
+!                   collapsed to the requested tolerance.
+!
+!                3  b may be near a singular point of f(x).
+!                   the interval (b,c) collapsed to the requested tol-
+!                   erance and the function changes sign in (b,c), but
+!                   f(x) increased in magnitude as (b,c) collapsed,i.e.
+!                     abs(f(b out)) > max(abs(f(b in)),abs(f(c in)))
+!
+!                4  no change in sign of f(x) was found although the
+!                   interval (b,c) collapsed to the requested tolerance.
+!                   the user must examine this case and decide whether
+!                   b is near a local minimum of f(x), or b is near a
+!                   zero of even multiplicity, or neither of these.
+!
+!                5  too many (> 500) function evaluations used.
+!
+  real a
+  real acbs
+  real acmb
+  real ae
+  real aw
+  real b
+  real c
+  real cmb
+  real er
+  real f
+  real fa
+  real fb
+  real fc
+  real fx
+  real fz
+  integer ic
+  integer iflag
+  integer kount
+  real p
+  real q
+  real r
+  real re
+  real rw
+  real t
+  real tol
+  real z
+!
+  external f
+!
+  er = 2.0E+00 * epsilon ( er )
+!
+!     initialize
+!
+  z=r
+  if ( r<= min (b,c).or.r>= max (b,c)) z=c
+  rw= max (re,er)
+  aw= max (ae,0.0)
+  ic=0
+  t=z
+  fz=f(t)
+  fc=fz
+  t=b
+  fb=f(t)
+  kount=2
+  if ( sign(1.0,fz)==sign(1.0,fb)) go to 1
+  c=z
+  go to 2
+    1 if ( z==c) go to 2
+  t=c
+  fc=f(t)
+  kount=3
+  if ( sign(1.0,fz)==sign(1.0,fc)) go to 2
+  b=z
+  fb=fz
+    2 a=c
+  fa=fc
+  acbs=abs(b-c)
+  fx= max (abs(fb),abs(fc))
+!
+    3 if (abs(fc) >= abs(fb)) go to 4
+!     perform interchange
+  a=b
+  fa=fb
+  b=c
+  fb=fc
+  c=a
+  fc=fa
+
+4 continue
+
+  cmb=0.5*(c-b)
+  acmb=abs(cmb)
+  tol=rw*abs(b)+aw
+!
+!  test stopping criterion and function count
+!
+  if (acmb <= tol) go to 10
+  if ( fb==0.) go to 11
+  if ( kount>=500) go to 14
+!
+!  calculate new iterate implicitly as b+p/q
+!     where we arrange p >= 0.
+!     the implicit form is used to prevent overflow.
+!
+  p=(b-a)*fb
+  q=fa-fb
+  if (p >= 0.) go to 5
+  p=-p
+  q=-q
+!
+!  update a and check for satisfactory reduction
+!  in the size of the bracketing interval.
+!  if not, perform bisection.
+!
+    5 a=b
+  fa=fb
+  ic=ic+1
+  if (ic < 4) go to 6
+  if (8.*acmb >= acbs) go to 8
+  ic=0
+  acbs=acmb
+!
+!  test for too small a change
+!
+    6 if (p > abs(q)*tol) go to 7
+!
+!  increment by tolerance
+!
+  b=b+sign(tol,cmb)
+  go to 9
+!
+!  root ought to be between b and (c+b)/2.
+!
+    7 if (p >= cmb*q) go to 8
+!
+!  use secant rule
+!
+  b=b+p/q
+  go to 9
+!
+!  use bisection
+!
+    8 b=b+cmb
+!
+!  have completed computation for new iterate b
+!
+    9 t=b
+  fb=f(t)
+  kount=kount+1
+!
+!     decide whether next step is interpolation or extrapolation
+!
+  if (sign(1.0,fb) /= sign(1.0,fc)) go to 3
+  c=a
+  fc=fa
+  go to 3
+!
+!
+!     finished. process results for proper setting of iflag
+!
+   10 if (sign(1.0E+00,fb) == sign(1.0E+00,fc)) go to 13
+  if (abs(fb) > fx) go to 12
+  iflag = 1
+  return
+   11 iflag = 2
+  return
+   12 iflag = 3
+  return
+   13 iflag = 4
+  return
+   14 iflag = 5
+  return
+end
+subroutine gamlim ( xmin, xmax )
+!
+!*******************************************************************************
+!
+!! GAMLIM computes the minimum and maximum bounds for X in GAMMA(X).
+!
+!
+!  Discussion:
+!
+!    GAMLIM calculates the minimum and maximum legal bounds for X in GAMMA(X).
+!
+!  Parameters:
+!
+!    Output, real XMIN, the minimum legal value of X in GAMMA(X).
+!    Any smaller value might result in underflow.
+!
+!    Output, real XMAX, the maximum legal value of X in GAMMA(X).
+!    Any larger value will cause overflow.
+!
+  real alnbig
+  real alnsml
+  integer i
+  real r1mach
+  real xln
+  real xmax
+  real xmin
+  real xold
+!
+  alnsml = log ( tiny ( alnsml ) )
+  xmin = -alnsml
+
+  do i=1,10
+    xold = xmin
+    xln = log(xmin)
+    xmin = xmin - xmin*((xmin+0.5)*xln - xmin - 0.2258 + alnsml) &
+      / (xmin*xln + 0.5)
+    if (abs(xmin-xold)<0.005) go to 20
+  end do
+
+  write ( *, * ) ' '
+  write ( *, * ) 'GAMLIM - Fatal error!'
+  write ( *, * ) '  Unable to determine XMIN.'
+  stop
+
+ 20   continue
+
+  xmin = -xmin + 0.01
+
+  alnbig = log ( huge ( alnbig ) )
+  xmax = alnbig
+
+  do i=1,10
+    xold = xmax
+    xln = log(xmax)
+    xmax = xmax - xmax*((xmax-0.5)*xln - xmax + 0.9189 - alnbig) &
+      / (xmax*xln - 0.5)
+    if (abs(xmax-xold)<0.005) go to 40
+  end do
+
+  write ( *, * ) ' '
+  write ( *, * ) 'GAMLIM - Fatal error!'
+  write ( *, * ) '  Unable to determine XMAX.'
+  stop
+
+ 40 continue
+
+  xmax = xmax - 0.01E+00
+  xmin = max (xmin, -xmax+1.0E+00 )
+
+  return
+end
+function gamma ( x )
+!
+!*******************************************************************************
+!
+!! GAMMA computes the gamma function.
+!
+!
+!  Parameters:
+!
+!    Input, real X, the argument of the gamma function, which must not
+!    be 0, -1, or any other negative integral value.
+!
+!    Output, real GAMMA, the value of the gamma function of X.
+!
+  real csevl
+  real dxrel
+  real gamma
+  real gcs(23)
+  integer i
+  integer inits
+  integer n
+  integer ngcs
+  real, parameter :: pi = 3.14159265358979323846264338327950288419716939937510
+  real r1mach
+  real r9lgmc
+  real sinpiy
+  real sq2pil
+  real x
+  real xmax
+  real xmin
+  real y
+!
+  data gcs( 1) / .008571195590989331e0/
+  data gcs( 2) / .004415381324841007e0/
+  data gcs( 3) / .05685043681599363e0/
+  data gcs( 4) /-.004219835396418561e0/
+  data gcs( 5) / .001326808181212460e0/
+  data gcs( 6) /-.0001893024529798880e0/
+  data gcs( 7) / .0000360692532744124e0/
+  data gcs( 8) /-.0000060567619044608e0/
+  data gcs( 9) / .0000010558295463022e0/
+  data gcs(10) /-.0000001811967365542e0/
+  data gcs(11) / .0000000311772496471e0/
+  data gcs(12) /-.0000000053542196390e0/
+  data gcs(13) / .0000000009193275519e0/
+  data gcs(14) /-.0000000001577941280e0/
+  data gcs(15) / .0000000000270798062e0/
+  data gcs(16) /-.0000000000046468186e0/
+  data gcs(17) / .0000000000007973350e0/
+  data gcs(18) /-.0000000000001368078e0/
+  data gcs(19) / .0000000000000234731e0/
+  data gcs(20) /-.0000000000000040274e0/
+  data gcs(21) / .0000000000000006910e0/
+  data gcs(22) /-.0000000000000001185e0/
+  data gcs(23) / .0000000000000000203e0/
+!
+! sq2pil is log (sqrt (2.*pi) )
+!
+  data sq2pil / 0.91893853320467274e0/
+  data ngcs, xmin, xmax, dxrel /0, 3*0.0E+00 /
+
+!
+! initialize.  find legal bounds for x, and determine the number of
+! terms in the series required to attain an accuracy ten times better
+! than machine precision.
+!
+  if ( ngcs == 0 ) then
+    ngcs = inits (gcs, 23, 0.1*r1mach(3))
+    call gamlim (xmin, xmax)
+    dxrel = sqrt ( epsilon ( dxrel ) )
+  end if
+
+  y = abs(x)
+  if (y>10.0) go to 50
+!
+! compute gamma(x) for abs(x) <= 10.0.  reduce interval and
+! find gamma(1+y) for 0. <= y < 1. first of all.
+!
+  n = x
+  if (x<0.0) n = n - 1
+  y = x - real(n)
+  n = n - 1
+  gamma = 0.9375 + csevl(2.*y-1., gcs, ngcs)
+  if (n==0) return
+
+  if (n>0) go to 30
+!
+! compute gamma(x) for x < 1.
+!
+  n = -n
+  if (x==0.) call xerror ( 'gamma   x is 0', 14, 4, 2)
+
+  if (x<0. .and. x+real(n-2)==0.) then
+     call xerror (  'gamma   x is a negative integer', 31, 4, 2)
+  end if
+
+  if (x<(-0.5) .and. abs((x-aint(x-0.5))/x)<dxrel) then
+    call xerror ( &
+      'gamma   answer lt half precision because x too near negative integer', &
+      68, 1, 1)
+  end if
+
+  do i=1,n
+    gamma = gamma / (x+real(i-1))
+  end do
+
+  return
+!
+! gamma(x) for x >= 2.
+!
+ 30 continue
+
+  do i=1,n
+    gamma = (y+real(i))*gamma
+  end do
+
+  return
+!
+! compute gamma(x) for abs(x) > 10.0.  recall y = abs(x).
+!
+ 50   continue
+
+  if (x>xmax) then
+    call xerror ( 'gamma   x so big gamma overflows', 32, 3, 2)
+  end if
+
+  gamma = 0.
+  if (x<xmin) then
+    call xerror ( 'gamma   x so small gamma underflows', 35, 2, 1)
+  end if
+
+  if (x<xmin) return
+
+  gamma = exp((y-0.5)*log(y) - y + sq2pil + r9lgmc(y) )
+  if (x>0.) return
+
+  if (abs((x-aint(x-0.5))/x)<dxrel) then
+    call xerror ( &
+      'gamma   answer lt half precision, x too near negative integer', &
+      61, 1, 1)
+  end if
+
+  sinpiy = sin (pi*y)
+
+  if (sinpiy==0.) then
+    write ( *, * ) ' '
+    write ( *, * ) 'GAMMA - Fatal error!'
+    write ( *, * ) '  The argument X is a negative integer.'
+    stop
+  end if
+
+  gamma = -pi / (y*sinpiy*gamma)
+
+  return
+end
+subroutine gl15t ( f, a, b, xl, xr, r, ae, ra, rasc, fmin, fmax )
+!
+!*******************************************************************************
+!
+!! GL15T computes integral of g(x) over (a,b), with error estimate.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+!            on entry
+!              f      - real
+!                     function subprogram defining the integrand
+!                     function f(x). the actual name for f needs
+!                       to be declared e x t e r n a l in the
+!                       calling program.
+!                       the function g(x) is defined to be
+!                       g(x)=f(phi(x))*phip(x)
+!                       where phi(x) is the cubic given by
+!                       the arithmetic statement function below.
+!                       phip(x) is its derivative.  the variables
+!                       xl and xr are the left and right endpoints
+!                       of a parent interval of which (a,b) is a part.
+!
+!              a      - real
+!                       lower limit of integration
+!
+!              b      - real
+!                       upper limit of integration
+!
+!              xl     - double precision
+!              xr     - double precision
+!                       lower and upper limits of parent interval
+!                       of which [a,b] is a part.
+!
+!            on return
+!              r - real
+!                       approximation to the integral i
+!                       r is computed by applying the 15-point
+!                       kronrod rule (resk) obtained by optimal
+!                       addition of abscissae to the 7-point gauss
+!                       rule (resg).
+!
+!              ae - real
+!                       estimate of the modulus of the absolute error,
+!                       which should not exceed abs(i-r)
+!
+!              ra - real
+!                       approximation to the integral j
+!
+!              rasc - real
+!                       approximation to the integral of abs(g-i/(b-a))
+!                       over (a,b)
+!
+!              fmax, fmin - real
+!                       max and min values of the function f on (a,b)
+!
+  real a
+  double precision absc
+  real ae
+  real b
+  double precision centr
+  real dhlgth
+  real, save :: epmach = 0.0E+00
+  real f
+  real fc
+  real fmax
+  real fmin
+  real fsum
+  real fv1(7)
+  real fv2(7)
+  real fval1
+  real fval2
+  real hlgth
+  integer j
+  integer jtw
+  integer jtwm1
+  real phi
+  real phip
+  real phiu
+  real r
+  real r1mach
+  real ra
+  real rasc
+  real resg
+  real resk
+  real reskh
+  real sl
+  real sr
+  double precision u
+  real, save :: uflow = 0.0E+00
+  real wg(4)
+  real wgk(8)
+  real xgk(8)
+  double precision xl
+  double precision xr
+!
+  external f
+!
+!           the abscissae and weights are given for the interval (-1,1)
+!           because of symmetry only the positive abscissae and their
+!           corresponding weights are given.
+!
+!           xgk    - abscissae of the 15-point kronrod rule
+!                    xgk(2), xgk(4), ...  abscissae of the 7-point
+!                    gauss rule
+!                    xgk(1), xgk(3), ...  abscissae which are optimally
+!                    added to the 7-point gauss rule
+!
+!           wgk    - weights of the 15-point kronrod rule
+!
+!           wg     - weights of the 7-point gauss rule
+!
+  data wg(  1) / 0.129484966168869693270611432679082d0 /
+  data wg(  2) / 0.279705391489276667901467771423780d0 /
+  data wg(  3) / 0.381830050505118944950369775488975d0 /
+  data wg(  4) / 0.417959183673469387755102040816327d0 /
+!
+  data xgk(  1) / 0.991455371120812639206854697526329d0 /
+  data xgk(  2) / 0.949107912342758524526189684047851d0 /
+  data xgk(  3) / 0.864864423359769072789712788640926d0 /
+  data xgk(  4) / 0.741531185599394439863864773280788d0 /
+  data xgk(  5) / 0.586087235467691130294144838258730d0 /
+  data xgk(  6) / 0.405845151377397166906606412076961d0 /
+  data xgk(  7) / 0.207784955007898467600689403773245d0 /
+  data xgk(  8) / 0.000000000000000000000000000000000d0 /
+!
+  data wgk(  1) / 0.022935322010529224963732008058970d0 /
+  data wgk(  2) / 0.063092092629978553290700663189204d0 /
+  data wgk(  3) / 0.104790010322250183839876322541518d0 /
+  data wgk(  4) / 0.140653259715525918745189590510238d0 /
+  data wgk(  5) / 0.169004726639267902826583426598550d0 /
+  data wgk(  6) / 0.190350578064785409913256402421014d0 /
+  data wgk(  7) / 0.204432940075298892414161999234649d0 /
+  data wgk(  8) / 0.209482141084727828012999174891714d0 /
+!
+  phi(u)=xr-(xr-xl)*u*u*(2.*u+3.)
+  phip(u)=-6.*u*(u+1.)
+!
+!           list of major variables
+!
+!           centr  - mid point of the interval
+!           hlgth  - half-length of the interval
+!           absc   - abscissa
+!           fval*  - function value
+!           resg   - r of the 7-point gauss formula
+!           resk   - r of the 15-point kronrod formula
+!           reskh  - approximation to the mean value of f over (a,b),
+!                    i.e. to i/(b-a)
+!
+  if ( epmach == 0.0E+00 ) then
+    epmach = epsilon ( 1.0E+00 )
+    uflow = tiny ( uflow )
+  end if
+!
+  if ( xl<xr ) then
+     sl=sngl(xl)
+     sr=sngl(xr)
+  else
+     sl=sngl(xr)
+     sr=sngl(xl)
+  end if
+
+  hlgth = 0.5 * (b-a)
+  centr = a+hlgth
+  dhlgth = abs(hlgth)
+!
+!           compute the 15-point kronrod approximation to
+!           the integral, and estimate the absolute error.
+!
+  u=(centr-xr)/(xr-xl)
+  phiu=phi(u)
+  if ( phiu<=sl .or. phiu>=sr) phiu=centr
+  fmin=f(phiu)
+  fmax=fmin
+  fc=fmin*phip(u)
+  resg = fc*wg(4)
+  resk = fc*wgk(8)
+  ra = abs(resk)
+
+  do j=1,3
+    jtw = j*2
+    absc = hlgth*xgk(jtw)
+    u=(centr-absc-xr)/(xr-xl)
+    phiu=phi(u)
+    if ( phiu<=sl .or. phiu>=sr) phiu=centr
+    fval1=f(phiu)
+    fmax=max(fmax,fval1)
+    fmin=min(fmin,fval1)
+    fval1=fval1*phip(u)
+    u=(centr+absc-xr)/(xr-xl)
+    phiu=phi(u)
+    if ( phiu<=sl .or. phiu>=sr) phiu=centr
+    fval2=f(phiu)
+    fmax=max(fmax,fval2)
+    fmin=min(fmin,fval2)
+    fval2=fval2*phip(u)
+    fv1(jtw) = fval1
+    fv2(jtw) = fval2
+    fsum = fval1+fval2
+    resg = resg+wg(j)*fsum
+    resk = resk+wgk(jtw)*fsum
+    ra = ra+wgk(jtw)*(abs(fval1)+abs(fval2))
+  end do
+
+  do j = 1,4
+    jtwm1 = j*2-1
+    absc = hlgth*xgk(jtwm1)
+    u=(centr-absc-xr)/(xr-xl)
+    phiu=phi(u)
+    if ( phiu<=sl .or. phiu>=sr) phiu=centr
+    fval1=f(phiu)
+    fmax=max(fmax,fval1)
+    fmin=min(fmin,fval1)
+    fval1=fval1*phip(u)
+    u=(centr+absc-xr)/(xr-xl)
+    phiu=phi(u)
+    if ( phiu<=sl .or. phiu>=sr) phiu=centr
+    fval2=f(phiu)
+    fmax=max(fmax,fval2)
+    fmin=min(fmin,fval2)
+    fval2=fval2*phip(u)
+    fv1(jtwm1) = fval1
+    fv2(jtwm1) = fval2
+    fsum = fval1+fval2
+    resk = resk+wgk(jtwm1)*fsum
+    ra = ra+wgk(jtwm1)*(abs(fval1)+abs(fval2))
+  end do
+
+  reskh = resk*0.5
+  rasc = wgk(8)*abs(fc-reskh)
+
+  do j=1,7
+    rasc = rasc+wgk(j)*(abs(fv1(j)-reskh)+abs(fv2(j)-reskh))
+  end do
+
+  r = resk*hlgth
+  ra = ra*dhlgth
+  rasc = rasc*dhlgth
+  ae = abs((resk-resg)*hlgth)
+
+  if ( rasc/=0.0.and.ae/=0.0) then
+    ae = rasc*min(1.0,(0.2e+03*ae/rasc)**1.5)
+  end if
+
+  if ( ra>uflow/(0.5e+02*epmach)) then
+    ae = max((epmach*0.5e+02)*ra,ae)
+  end if
+
+  return
+end
+subroutine grdchk ( n, x, fcn, f, g, typsiz, sx, fscale, rnf, analtl, &
+  wrk1, msg, ipr )
+!
+!*******************************************************************************
+!
+!! GRDCHK checks an analytic gradient against an estimated gradient.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+! n            --> dimension of problem
+! x(n)         --> estimate to a root of fcn
+! fcn          --> name of subroutine to evaluate optimization function
+!                  must be declared external in calling routine
+!                       fcn:  r(n) --> r(1)
+! f            --> function value:  fcn(x)
+! g(n)         --> gradient:  g(x)
+! typsiz(n)    --> typical size for each component of x
+! sx(n)        --> diagonal scaling matrix:  sx(i)=1./typsiz(i)
+! fscale       --> estimate of scale of objective function fcn
+! rnf          --> relative noise in optimization function fcn
+! analtl       --> tolerance for comparison of estimated and
+!                  analytical gradients
+! wrk1(n)      --> workspace
+! msg         <--  message or error code
+!                    on output: =-21, probable coding error of gradient
+! ipr          --> device to which to send output
+!
+  integer n
+!
+  real analtl
+  real f
+  real fscale
+  real g(n)
+  real gs
+  integer i
+  integer ipr
+  integer ker
+  integer msg
+  real rnf
+  real sx(n)
+  real typsiz(n)
+  real wrk
+  real wrk1(n)
+  real x(n)
+!
+  external fcn
+!
+!  Compute the first order finite difference gradient;
+!  compare it to the analytic gradient.
+!
+  call fstofd(1,1,n,x,fcn,f,wrk1,sx,rnf,wrk,1)
+
+  ker = 0
+
+  do i = 1, n
+
+    gs = max ( abs(f), fscale ) / max ( abs(x(i)), typsiz(i) )
+
+    if ( abs(g(i)-wrk1(i))>max(abs(g(i)),gs)*analtl) then
+      ker=1
+    end if
+
+  end do
+
+  if ( ker /= 0 ) then
+    write ( ipr, * ) ' '
+    write ( ipr, * ) 'GRDCHK - probable error in analytic gradient.'
+    write ( ipr, * ) ' '
+    write ( ipr, * ) ' grdchk     comp            analytic            est'
+    write ( ipr, 902 ) (i,g(i),wrk1(i),i=1,n)
+    msg = -21
+  end if
+
+  return
+
+  902 format(' grdchk    ',i5,3x,e20.13,3x,e20.13)
+end
+subroutine heschk ( nr, n, x, fcn, d1fcn, d2fcn, f, g, a, typsiz, sx, rnf, &
+  analtl, iagflg, udiag, wrk1, wrk2, msg, ipr )
+!
+!*******************************************************************************
+!
+!! HESCHK checks an analytic hessian against a computed estimate.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! x(n)         --> estimate to a root of fcn
+! fcn          --> name of subroutine to evaluate optimization function
+!                  must be declared external in calling routine
+!                       fcn:  r(n) --> r(1)
+! d1fcn        --> name of subroutine to evaluate gradient of fcn.
+!                  must be declared external in calling routine
+! d2fcn        --> name of subroutine to evaluate hessian of fcn.
+!                  must be declared external in calling routine
+! f            --> function value:  fcn(x)
+! g(n)        <--  gradient:  g(x)
+! a(n,n)      <--  on exit:  hessian in lower triangular part and diag
+! typsiz(n)    --> typical size for each component of x
+! sx(n)        --> diagonal scaling matrix:  sx(i)=1./typsiz(i)
+! rnf          --> relative noise in optimization function fcn
+! analtl       --> tolerance for comparison of estimated and
+!                  analytical gradients
+! iagflg       --> =1 if analytic gradient supplied
+! udiag(n)     --> workspace
+! wrk1(n)      --> workspace
+! wrk2(n)      --> workspace
+! msg         <--> message or error code
+!                    on input : if =1xx do not compare anal + est hess
+!                    on output: =-22, probable coding error of hessian
+! ipr          --> device to which to send output
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real analtl
+  real f
+  real g(n)
+  real hs
+  integer i
+  integer iagflg
+  integer ipr
+  integer j
+  integer ker
+  integer msg
+  real rnf
+  real sx(n)
+  real typsiz(n)
+  real udiag(n)
+  real wrk1(n)
+  real wrk2(n)
+  real x(n)
+!
+  external fcn
+  external d1fcn
+  external d2fcn
+!
+!  Compute finite difference approximation a to the hessian.
+!
+  if ( iagflg==1) then
+    call fstofd(nr,n,n,x,d1fcn,g,a,sx,rnf,wrk1,3)
+  else
+    call sndofd(nr,n,x,fcn,f,a,sx,rnf,wrk1,wrk2)
+  end if
+
+  ker=0
+!
+! copy lower triangular part of "a" to upper triangular part
+! and diagonal of "a" to udiag
+!
+  do j=1,n
+    udiag(j)=a(j,j)
+    do i=j+1,n
+      a(j,i)=a(i,j)
+    end do
+  end do
+!
+! compute analytic hessian and compare to finite difference
+! approximation.
+!
+  call d2fcn(nr,n,x,a)
+
+  do j=1,n
+
+    hs=max(abs(g(j)),1.0)/max(abs(x(j)),typsiz(j))
+
+    if ( abs(a(j,j)-udiag(j))>max(abs(udiag(j)),hs)*analtl) then
+      ker=1
+    end if
+
+    do i=j+1,n
+      if ( abs(a(i,j)-a(j,i))>max(abs(a(i,j)),hs)*analtl) then
+        ker=1
+      end if
+    end do
+
+  end do
+
+  if ( ker==0) go to 90
+
+    write(ipr,901)
+    do i=1,n
+      do j=1,i-1
+        write(ipr,902) i,j,a(i,j),a(j,i)
+      end do
+      write(ipr,902) i,i,a(i,i),udiag(i)
+    end do
+
+    msg=-22
+!     end if
+   90 continue
+  return
+  901 format('heschk    probable error in coding of analytic hessian.'/ &
+             'heschk      row  col',14x,'analytic',14x,'(estimate)')
+  902 format('heschk    ',2i5,2x,e20.13,2x,'(',e20.13,')')
+end
+subroutine hookdr ( nr, n, x, f, g, a, udiag, p, xpls, fpls, fcn, sx, stepmx, &
+  steptl, dlt, iretcd, mxtake, amu, dltp, phi, phip0, sc, xplsp, wrk0, epsm, &
+  itncnt, ipr )
+!
+!*******************************************************************************
+!
+!! HOOKDR finds the next Newton iterate by the More-Hebdon method.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+! parameters
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! x(n)         --> old iterate x[k-1]
+! f            --> function value at old iterate, f(x)
+! g(n)         --> gradient at old iterate, g(x), or approximate
+! a(n,n)       --> cholesky decomposition of hessian in lower
+!                  triangular part and diagonal.
+!                  hessian in upper triangular part and udiag.
+! udiag(n)     --> diagonal of hessian in a(.,.)
+! p(n)         --> newton step
+! xpls(n)     <--  new iterate x[k]
+! fpls        <--function value at new iterate, f(xpls)
+! fcn          --> name of subroutine to evaluate function
+! sx(n)        --> diagonal scaling matrix for x
+! stepmx       --> maximum allowable step size
+! steptl       --> relative step size at which successive iterates
+!                  considered close enough to terminate algorithm
+! dlt         <--> trust region radius
+! iretcd      <--  return code
+!                    =0 satisfactory xpls found
+!                    =1 failed to find satisfactory xpls sufficiently
+!                       distinct from x
+! mxtake      <--  boolean flag indicating step of maximum length used
+! amu         <--> [retain value between successive calls]
+! dltp        <--> [retain value between successive calls]
+! phi         <--> [retain value between successive calls]
+! phip0       <--> [retain value between successive calls]
+! sc(n)        --> workspace
+! xplsp(n)     --> workspace
+! wrk0(n)      --> workspace
+! epsm         --> machine epsilon
+! itncnt       --> iteration count
+! ipr          --> device to which to send output
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real alpha
+  real amu
+  real beta
+  real dlt
+  real dltp
+  real epsm
+  real f
+  real fpls
+  real fplsp
+  logical fstime
+  real g(n)
+  integer i
+  integer ipr
+  integer iretcd
+  integer itncnt
+  integer j
+  logical mxtake
+  logical nwtake
+  real p(n)
+  real phi
+  real phip0
+  real rnwtln
+  real sc(n)
+  real stepmx
+  real steptl
+  real sx(n)
+  real tmp
+  real udiag(n)
+  real x(n)
+  real xpls(n)
+  real xplsp(n)
+  real wrk0(n)
+!
+  external fcn
+!
+  iretcd=4
+  fstime=.true.
+
+  tmp=0.
+  do i=1,n
+    tmp=tmp+sx(i)*sx(i)*p(i)*p(i)
+  end do
+
+  rnwtln=sqrt(tmp)
+
+  if ( itncnt>1) go to 100
+    amu=0.
+!
+!  if first iteration and trust region not provided by user,
+!  compute initial trust region.
+!
+    if ( dlt/= (-1.)) go to 100
+
+      alpha=0.
+      do i=1,n
+        alpha=alpha+(g(i)*g(i))/(sx(i)*sx(i))
+      end do
+
+      beta=0.0E+00
+      do i=1,n
+        tmp=0.0E+00
+        do j=i,n
+          tmp=tmp + (a(j,i)*g(j))/(sx(j)*sx(j))
+        end do
+        beta=beta+tmp*tmp
+      end do
+      dlt=alpha*sqrt(alpha)/beta
+      dlt = min(dlt, stepmx)
+!       end if
+!     end if
+!
+  100 continue
+!
+!  Find new step by more-hebdon algorithm.
+!
+  call hookst(nr,n,g,a,udiag,p,sx,rnwtln,dlt,amu,dltp,phi,phip0, &
+    fstime,sc,nwtake,wrk0,epsm,ipr)
+
+  dltp=dlt
+!
+!  check new point and update trust region
+!
+  call tregup(nr,n,x,f,g,a,fcn,sc,sx,nwtake,stepmx,steptl, &
+    dlt,iretcd,xplsp,fplsp,xpls,fpls,mxtake,ipr,3,udiag)
+
+  if ( iretcd > 1 ) then
+    go to 100
+  end if
+
+  return
+end
+subroutine hookst ( nr, n, g, a, udiag, p, sx, rnwtln, dlt, amu, &
+  dltp, phi, phip0, fstime, sc, nwtake, wrk0, epsm, ipr )
+!
+!*******************************************************************************
+!
+!! HOOKST finds the new step by the More-Hebdon algorithm.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+! parameters
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! g(n)         --> gradient at current iterate, g(x)
+! a(n,n)       --> cholesky decomposition of hessian in
+!                  lower triangular part and diagonal.
+!                  hessian or approx in upper triangular part
+! udiag(n)     --> diagonal of hessian in a(.,.)
+! p(n)         --> newton step
+! sx(n)        --> diagonal scaling matrix for n
+! rnwtln       --> newton step length
+! dlt         <--> trust region radius
+! amu         <--> [retain value between successive calls]
+! dltp         --> trust region radius at last exit from this routine
+! phi         <--> [retain value between successive calls]
+! phip0       <--> [retain value between successive calls]
+! fstime      <--> boolean. =.true. if first entry to this routine
+!                  during k-th iteration
+! sc(n)       <--  current step
+! nwtake      <--  boolean, =.true. if newton step taken
+! wrk0         --> workspace
+! epsm         --> machine epsilon
+! ipr          --> device to which to send output
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real addmax
+  real alo
+  real amu
+  real amulo
+  real amuup
+  real dlt
+  real dltp
+  logical done
+  real epsm
+  logical fstime
+  real g(n)
+  real hi
+  integer i
+  integer ipr
+  integer j
+  logical nwtake
+  real p(n)
+  real phi
+  real phip
+  real phip0
+  real rnwtln
+  real sc(n)
+  real snrm2
+  real stepln
+  real sx(n)
+  real udiag(n)
+  real wrk0(n)
+!
+! hi and alo are constants used in this routine.
+! change here if other values are to be substituted.
+!
+  ipr=ipr
+  hi=1.5
+  alo=.75
+  if ( rnwtln>hi*dlt) go to 15
+!     if ( rnwtln<=hi*dlt)
+!     then
+!
+!       take newton step
+!
+    nwtake=.true.
+    do i=1,n
+      sc(i)=p(i)
+    end do
+    dlt=min(dlt,rnwtln)
+    amu=0.0E+00
+    return
+
+!     else
+!
+!       newton step not taken
+!
+   15   continue
+    nwtake=.false.
+    if ( amu<=0.) go to 20
+!       if ( amu>0.)
+!       then
+!!!      amu=amu- (phi+dltp) *((dltp-dlt)+phi)/(dlt*phip)
+      amu=amu- (phi+dltp) *((dltp-dlt)+phi)/(dlt*phip0)
+!       end if
+   20   continue
+    phi=rnwtln-dlt
+    if ( .not.fstime) go to 28
+!       if ( fstime)
+!       then
+      wrk0(1:n) = sx(1:n) * sx(1:n) * p(1:n)
+!
+!  solve l*y = (sx**2)*p
+!
+      call forslv(nr,n,a,wrk0,wrk0)
+
+      phip0=-snrm2(n,wrk0,1)**2/rnwtln
+      fstime=.false.
+
+   28   phip = phip0
+    amulo = -phi/phip
+    amuup = 0.0E+00
+    do i = 1, n
+      amuup = amuup+(g(i)*g(i))/(sx(i)*sx(i))
+    end do
+    amuup = sqrt(amuup)/dlt
+    done=.false.
+!
+!  test value of amu; generate next amu if necessary
+!
+  100   continue
+    if ( done) return
+    if ( amu>=amulo .and. amu<=amuup) go to 110
+!       if ( amu<amulo .or.  amu>amuup)
+!       then
+      amu=max(sqrt(amulo*amuup),amuup*1.0e-3)
+!       end if
+  110   continue
+!
+!  copy (h,udiag) to l
+!  where h <-- h+amu*(sx**2) [do not actually change (h,udiag)]
+!
+    do j=1,n
+
+      a(j,j)=udiag(j) + amu*sx(j)*sx(j)
+      a(j+1:n,j)=a(j,j+1:n)
+
+    end do
+!
+!  factor h=l(l+)
+!
+    call choldc(nr,n,a,0.0,sqrt(epsm),addmax)
+!
+!  solve h*p = l(l+)*sc = -g
+!
+    wrk0(1:n)=-g(1:n)
+
+    call lltslv(nr,n,a,sc,wrk0)
+!
+!  reset h.  note since udiag has not been destroyed we need do
+!  nothing here.  h is in the upper part and in udiag, still intact
+!
+    stepln=0.0E+00
+    do i=1,n
+      stepln=stepln + sx(i)*sx(i)*sc(i)*sc(i)
+    end do
+
+    stepln=sqrt(stepln)
+    phi=stepln-dlt
+
+    do i=1,n
+      wrk0(i)=sx(i)*sx(i)*sc(i)
+    end do
+
+    call forslv(nr,n,a,wrk0,wrk0)
+
+    phip=-snrm2(n,wrk0,1)**2/stepln
+
+    if ( (alo*dlt>stepln .or. stepln>hi*dlt) .and.(amuup-amulo>0.)) then
+      go to 170
+    end if
+
+!       if ( (alo*dlt<=stepln .and. stepln<=hi*dlt) .or.
+!            (amuup-amulo<=0.))
+!       then
+!
+!         sc is acceptable hookstep
+!
+      done=.true.
+      go to 100
+!       else
+!
+!         sc not acceptable hookstep.  select new amu
+!
+  170     continue
+      amulo=max(amulo,amu-(phi/phip))
+      if ( phi<0.) amuup=min(amuup,amu)
+      amu=amu-(stepln*phi)/(dlt*phip)
+      go to 100
+!       end if
+!     end if
+!
+  951 format('0hookst    take newton step')
+  952 format('0hookst    newton step not taken')
+  953 format(' hookst    sc is not acceptable')
+  954 format(' hookst    sc is acceptable')
+  955 format(' hookst    current step (sc)')
+  956 format(' hookst    amu   =',e20.13)
+  957 format(' hookst    amulo =',e20.13)
+  958 format(' hookst    amuup =',e20.13)
+  959 format(' hookst    phi   =',e20.13)
+  960 format(' hookst    phip  =',e20.13)
+  961 format(' hookst    dlt   =',e20.13/' hookst    stepln=',e20.13)
+  962 format('0hookst    find new amu')
+  963 format(' hookst       ',5(e20.13,3x))
+end
+subroutine hsnint ( nr, n, a, sx, method )
+!
+!*******************************************************************************
+!
+!! HSNINT provides initial hessian when using secant updates.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+! parameters
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! a(n,n)      <--  initial hessian (lower triangular matrix)
+! sx(n)        --> diagonal scaling matrix for x
+! method       --> algorithm to use to solve minimization problem
+!                    =1,2 factored secant method used
+!                    =3   unfactored secant method used
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  integer j
+  integer method
+  real sx(n)
+!
+  do j = 1, n
+
+    if ( method == 3 ) then
+      a(j,j)=sx(j)**2
+    else
+      a(j,j)=sx(j)
+    end if
+
+    a(j+1:n,j)=0.0E+00
+
+  end do
+
+  return
+end
+function i1mach ( i )
+!
+!*******************************************************************************
+!
+!! I1MACH returns integer machine constants.
+!
+!
+!  I/O unit numbers.
+!
+!    I1MACH(1) = the standard input unit.
+!    I1MACH(2) = the standard output unit.
+!    I1MACH(3) = the standard punch unit.
+!    I1MACH(4) = the standard error message unit.
+!
+!  Words.
+!
+!    I1MACH(5) = the number of bits per integer storage unit.
+!    I1MACH(6) = the number of characters per integer storage unit.
+!
+!  Integers.
+!
+!  Assume integers are represented in the S digit base A form:
+!
+!  Sign * (X(S-1)*A**(S-1) + ... + X(1)*A + X(0))
+!  where 0<=X(I)<A for I=0 to S-1.
+!
+!    I1MACH(7) = A, the base.
+!    I1MACH(8) = S, the number of base A digits.
+!    I1MACH(9) = A**S-1, the largest integer.
+!
+!  Floating point numbers
+!
+!  Assume floating point numbers are represented in the T digit base B form:
+!
+!    Sign * (B**E) * ((X(1)/B) + ... + (X(T)/B**T) )
+!
+!  where 0<=X(I)<B for I=1 to T, 0<X(1) and EMIN<=E<=EMAX
+!
+!    I1MACH(10) = B, the base.
+!
+!  Single precision
+!
+!    I1MACH(11) = T, the number of base B digits.
+!    I1MACH(12) = EMIN, the smallest exponent E.
+!    I1MACH(13) = EMAX, the largest exponent E.
+!
+!  Double precision
+!
+!    I1MACH(14) = T, the number of base B digits.
+!    I1MACH(15) = EMIN, the smallest exponent E.
+!    I1MACH(16) = EMAX, the largest exponent E.
+!
+!  To alter this function for a particular environment, the desired set of DATA
+!  statements should be activated by removing the C from column 1.  On rare
+!  machines, a STATIC statement may need to be added, but probably more systems
+!  prohibit than require it.
+!
+!  Also, the values of I1MACH(1) through I1MACH(4) should be checked for
+!  consistency with the local operating system.  For FORTRAN 77, you may wish
+!  to adjust the data statement so imach(6) is set to 1, and then to comment
+!  out the executable test on I.EQ.6 below.
+!
+!  For IEEE-arithmetic machines (binary standard), the first set of constants
+!  below should be appropriate, except perhaps for IMACH(1) - IMACH(4).
+!
+  integer i
+  integer i1mach
+  integer imach(16)
+  integer output
+!
+  equivalence (imach(4),output)
+!
+!  IEEE arithmetic machines, such as the ATT 3B series, Motorola
+!  68000 based machines such as the SUN 3 and ATT PC 7300, and
+!  8087 based micros such asthe IBM PC and ATT 6300.
+!
+   data imach( 1) /    5 /
+   data imach( 2) /    6 /
+   data imach( 3) /    7 /
+   data imach( 4) /    6 /
+   data imach( 5) /   32 /
+   data imach( 6) /    4 /
+   data imach( 7) /    2 /
+   data imach( 8) /   31 /
+   data imach( 9) / 2147483647 /
+   data imach(10) /    2 /
+   data imach(11) /   24 /
+   data imach(12) / -125 /
+   data imach(13) /  128 /
+   data imach(14) /   53 /
+   data imach(15) / -1021 /
+   data imach(16) /  1024 /
+!
+!  ALLIANT FX/8 UNIX FORTRAN compiler.
+!
+!      data imach( 1) /     5 /
+!      data imach( 2) /     6 /
+!      data imach( 3) /     6 /
+!      data imach( 4) /     0 /
+!      data imach( 5) /    32 /
+!      data imach( 6) /     4 /
+!      data imach( 7) /     2 /
+!      data imach( 8) /    32 /
+!      data imach( 9) /2147483647/
+!      data imach(10) /     2 /
+!      data imach(11) /    24 /
+!      data imach(12) /  -126 /
+!      data imach(13) /   128 /
+!      data imach(14) /    53 /
+!      data imach(15) / -1022 /
+!      data imach(16) /  1024 /
+!
+!  AMDAHL machines.
+!
+!      data imach( 1) /   5 /
+!      data imach( 2) /   6 /
+!      data imach( 3) /   7 /
+!      data imach( 4) /   6 /
+!      data imach( 5) /  32 /
+!      data imach( 6) /   4 /
+!      data imach( 7) /   2 /
+!      data imach( 8) /  31 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /  16 /
+!      data imach(11) /   6 /
+!      data imach(12) / -64 /
+!      data imach(13) /  63 /
+!      data imach(14) /  14 /
+!      data imach(15) / -64 /
+!      data imach(16) /  63 /
+!
+!  BURROUGHS 1700 system.
+!
+!      data imach( 1) /    7 /
+!      data imach( 2) /    2 /
+!      data imach( 3) /    2 /
+!      data imach( 4) /    2 /
+!      data imach( 5) /   36 /
+!      data imach( 6) /    4 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   33 /
+!      data imach( 9) / Z1FFFFFFFF /
+!      data imach(10) /    2 /
+!      data imach(11) /   24 /
+!      data imach(12) / -256 /
+!      data imach(13) /  255 /
+!      data imach(14) /   60 /
+!      data imach(15) / -256 /
+!      data imach(16) /  255 /
+!
+!  BURROUGHS 5700 system.
+!
+!      data imach( 1) /   5 /
+!      data imach( 2) /   6 /
+!      data imach( 3) /   7 /
+!      data imach( 4) /   6 /
+!      data imach( 5) /  48 /
+!      data imach( 6) /   6 /
+!      data imach( 7) /   2 /
+!      data imach( 8) /  39 /
+!      data imach( 9) / O0007777777777777 /
+!      data imach(10) /   8 /
+!      data imach(11) /  13 /
+!      data imach(12) / -50 /
+!      data imach(13) /  76 /
+!      data imach(14) /  26 /
+!      data imach(15) / -50 /
+!      data imach(16) /  76 /
+!
+!  BURROUGHS 6700/7700 systems.
+!
+!      data imach( 1) /   5 /
+!      data imach( 2) /   6 /
+!      data imach( 3) /   7 /
+!      data imach( 4) /   6 /
+!      data imach( 5) /  48 /
+!      data imach( 6) /   6 /
+!      data imach( 7) /   2 /
+!      data imach( 8) /  39 /
+!      data imach( 9) / O0007777777777777 /
+!      data imach(10) /   8 /
+!      data imach(11) /  13 /
+!      data imach(12) / -50 /
+!      data imach(13) /  76 /
+!      data imach(14) /  26 /
+!      data imach(15) / -32754 /
+!      data imach(16) /  32780 /
+!
+!  CDC CYBER 170/180 series using NOS
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    7 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   60 /
+!      data imach( 6) /   10 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   48 /
+!      data imach( 9) / O"00007777777777777777" /
+!      data imach(10) /    2 /
+!      data imach(11) /   48 /
+!      data imach(12) / -974 /
+!      data imach(13) / 1070 /
+!      data imach(14) /   96 /
+!      data imach(15) / -927 /
+!      data imach(16) / 1070 /
+!
+!  CDC CYBER 170/180 series using NOS/VE
+!
+!      data imach( 1) /     5 /
+!      data imach( 2) /     6 /
+!      data imach( 3) /     7 /
+!      data imach( 4) /     6 /
+!      data imach( 5) /    64 /
+!      data imach( 6) /     8 /
+!      data imach( 7) /     2 /
+!      data imach( 8) /    63 /
+!      data imach( 9) / 9223372036854775807 /
+!      data imach(10) /     2 /
+!      data imach(11) /    47 /
+!      data imach(12) / -4095 /
+!      data imach(13) /  4094 /
+!      data imach(14) /    94 /
+!      data imach(15) / -4095 /
+!      data imach(16) /  4094 /
+!
+!  CDC CYBER 200 series
+!
+!      data imach( 1) /      5 /
+!      data imach( 2) /      6 /
+!      data imach( 3) /      7 /
+!      data imach( 4) /      6 /
+!      data imach( 5) /     64 /
+!      data imach( 6) /      8 /
+!      data imach( 7) /      2 /
+!      data imach( 8) /     47 /
+!      data imach( 9) / X'00007FFFFFFFFFFF' /
+!      data imach(10) /      2 /
+!      data imach(11) /     47 /
+!      data imach(12) / -28625 /
+!      data imach(13) /  28718 /
+!      data imach(14) /     94 /
+!      data imach(15) / -28625 /
+!      data imach(16) /  28718 /
+!
+!  CDC 6000/7000 series using FTN4.
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    7 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   60 /
+!      data imach( 6) /   10 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   48 /
+!      data imach( 9) / 00007777777777777777B /
+!      data imach(10) /    2 /
+!      data imach(11) /   47 /
+!      data imach(12) / -929 /
+!      data imach(13) / 1070 /
+!      data imach(14) /   94 /
+!      data imach(15) / -929 /
+!      data imach(16) / 1069 /
+!
+!  CDC 6000/7000 series using FTN5.
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    7 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   60 /
+!      data imach( 6) /   10 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   48 /
+!      data imach( 9) / O"00007777777777777777" /
+!      data imach(10) /    2 /
+!      data imach(11) /   47 /
+!      data imach(12) / -929 /
+!      data imach(13) / 1070 /
+!      data imach(14) /   94 /
+!      data imach(15) / -929 /
+!      data imach(16) / 1069 /
+!
+!  CONVEX C-1.
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    7 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   32 /
+!      data imach( 6) /    4 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   31 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /    2 /
+!      data imach(11) /   24 /
+!      data imach(12) / -128 /
+!      data imach(13) /  127 /
+!      data imach(14) /   53 /
+!      data imach(15) /-1024 /
+!      data imach(16) / 1023 /
+!
+!  CONVEX C-120 (native mode) without -R8 option
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    0 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   32 /
+!      data imach( 6) /    4 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   31 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /    2 /
+!      data imach(11) /   24 /
+!      data imach(12) / -127 /
+!      data imach(13) /  127 /
+!      data imach(14) /   53 /
+!      data imach(15) / -1023 /
+!      data imach(16) /  1023 /
+!
+!  CONVEX C-120 (native mode) with -R8 option
+!
+!      data imach( 1) /     5 /
+!      data imach( 2) /     6 /
+!      data imach( 3) /     0 /
+!      data imach( 4) /     6 /
+!      data imach( 5) /    32 /
+!      data imach( 6) /     4 /
+!      data imach( 7) /     2 /
+!      data imach( 8) /    31 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /     2 /
+!      data imach(11) /    53 /
+!      data imach(12) / -1023 /
+!      data imach(13) /  1023 /
+!      data imach(14) /    53 /
+!      data imach(15) / -1023 /
+!      data imach(16) /  1023 /
+!
+!  CONVEX C-120 (IEEE mode) without -R8 option
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    0 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   32 /
+!      data imach( 6) /    4 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   31 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /    2 /
+!      data imach(11) /   24 /
+!      data imach(12) / -125 /
+!      data imach(13) /  128 /
+!      data imach(14) /   53 /
+!      data imach(15) / -1021 /
+!      data imach(16) /  1024 /
+!
+!  CONVEX C-120 (IEEE mode) with -R8 option
+!
+!      data imach( 1) /     5 /
+!      data imach( 2) /     6 /
+!      data imach( 3) /     0 /
+!      data imach( 4) /     6 /
+!      data imach( 5) /    32 /
+!      data imach( 6) /     4 /
+!      data imach( 7) /     2 /
+!      data imach( 8) /    31 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /     2 /
+!      data imach(11) /    53 /
+!      data imach(12) / -1021 /
+!      data imach(13) /  1024 /
+!      data imach(14) /    53 /
+!      data imach(15) / -1021 /
+!      data imach(16) /  1024 /
+!
+!  CRAY 1, 2, XMP and YMP.
+!
+!      data imach( 1) /     5 /
+!      data imach( 2) /     6 /
+!      data imach( 3) /   102 /
+!      data imach( 4) /     6 /
+!      data imach( 5) /    64 /
+!      data imach( 6) /     8 /
+!      data imach( 7) /     2 /
+!      data imach( 8) /    63 /
+!      data imach( 9) /  777777777777777777777B /
+!      data imach(10) /     2 /
+!      data imach(11) /    47 /
+!      data imach(12) / -8189 /
+!      data imach(13) /  8190 /
+!      data imach(14) /    94 /
+!      data imach(15) / -8099 /
+!      data imach(16) /  8190 /
+!
+!  DATA GENERAL ECLIPSE S/200.
+!
+!      data imach( 1) /   11 /
+!      data imach( 2) /   12 /
+!      data imach( 3) /    8 /
+!      data imach( 4) /   10 /
+!      data imach( 5) /   16 /
+!      data imach( 6) /    2 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   15 /
+!      data imach( 9) /32767 /
+!      data imach(10) /   16 /
+!      data imach(11) /    6 /
+!      data imach(12) /  -64 /
+!      data imach(13) /   63 /
+!      data imach(14) /   14 /
+!      data imach(15) /  -64 /
+!      data imach(16) /   63 /
+!
+!  ELXSI 6400
+!
+!      data imach( 1) /     5 /
+!      data imach( 2) /     6 /
+!      data imach( 3) /     6 /
+!      data imach( 4) /     6 /
+!      data imach( 5) /    32 /
+!      data imach( 6) /     4 /
+!      data imach( 7) /     2 /
+!      data imach( 8) /    32 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /     2 /
+!      data imach(11) /    24 /
+!      data imach(12) /  -126 /
+!      data imach(13) /   127 /
+!      data imach(14) /    53 /
+!      data imach(15) / -1022 /
+!      data imach(16) /  1023 /
+!
+!  HARRIS 220
+!
+!      data imach( 1) /       5 /
+!      data imach( 2) /       6 /
+!      data imach( 3) /       0 /
+!      data imach( 4) /       6 /
+!      data imach( 5) /      24 /
+!      data imach( 6) /       3 /
+!      data imach( 7) /       2 /
+!      data imach( 8) /      23 /
+!      data imach( 9) / 8388607 /
+!      data imach(10) /       2 /
+!      data imach(11) /      23 /
+!      data imach(12) /    -127 /
+!      data imach(13) /     127 /
+!      data imach(14) /      38 /
+!      data imach(15) /    -127 /
+!      data imach(16) /     127 /
+!
+!  HARRIS SLASH 6 and SLASH 7.
+!
+!      data imach( 1) /       5 /
+!      data imach( 2) /       6 /
+!      data imach( 3) /       0 /
+!      data imach( 4) /       6 /
+!      data imach( 5) /      24 /
+!      data imach( 6) /       3 /
+!      data imach( 7) /       2 /
+!      data imach( 8) /      23 /
+!      data imach( 9) / 8388607 /
+!      data imach(10) /       2 /
+!      data imach(11) /      23 /
+!      data imach(12) /    -127 /
+!      data imach(13) /     127 /
+!      data imach(14) /      38 /
+!      data imach(15) /    -127 /
+!      data imach(16) /     127 /
+!
+!  HONEYWELL DPS 8/70 and 600/6000 series.
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /   43 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   36 /
+!      data imach( 6) /    4 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   35 /
+!      data imach( 9) / O377777777777 /
+!      data imach(10) /    2 /
+!      data imach(11) /   27 /
+!      data imach(12) / -127 /
+!      data imach(13) /  127 /
+!      data imach(14) /   63 /
+!      data imach(15) / -127 /
+!      data imach(16) /  127 /
+!
+!  HP 2100, 3 word double precision option with FTN4
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    4 /
+!      data imach( 4) /    1 /
+!      data imach( 5) /   16 /
+!      data imach( 6) /    2 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   15 /
+!      data imach( 9) / 32767 /
+!      data imach(10) /    2 /
+!      data imach(11) /   23 /
+!      data imach(12) / -128 /
+!      data imach(13) /  127 /
+!      data imach(14) /   39 /
+!      data imach(15) / -128 /
+!      data imach(16) /  127 /
+!
+!  HP 2100, 4 word double precision option with FTN4
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    4 /
+!      data imach( 4) /    1 /
+!      data imach( 5) /   16 /
+!      data imach( 6) /    2 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   15 /
+!      data imach( 9) / 32767 /
+!      data imach(10) /    2 /
+!      data imach(11) /   23 /
+!      data imach(12) / -128 /
+!      data imach(13) /  127 /
+!      data imach(14) /   55 /
+!      data imach(15) / -128 /
+!      data imach(16) /  127 /
+!
+!  HP 9000
+!
+!      data imach( 1) /     5 /
+!      data imach( 2) /     6 /
+!      data imach( 3) /     6 /
+!      data imach( 4) /     7 /
+!      data imach( 5) /    32 /
+!      data imach( 6) /     4 /
+!      data imach( 7) /     2 /
+!      data imach( 8) /    32 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /     2 /
+!      data imach(11) /    24 /
+!      data imach(12) /  -126 /
+!      data imach(13) /   127 /
+!      data imach(14) /    53 /
+!      data imach(15) / -1015 /
+!      data imach(16) /  1017 /
+!
+!  IBM 360/370 series, XEROX SIGMA 5/7/9, SEL systems 85/86, PERKIN ELMER 3230,
+!  and PERKIN ELMER (INTERDATA) 3230.
+!
+!      data imach( 1) /   5 /
+!      data imach( 2) /   6 /
+!      data imach( 3) /   7 /
+!      data imach( 4) /   6 /
+!      data imach( 5) /  32 /
+!      data imach( 6) /   4 /
+!      data imach( 7) /   2 /
+!      data imach( 8) /  31 /
+!      data imach( 9) / Z7FFFFFFF /
+!      data imach(10) /  16 /
+!      data imach(11) /   6 /
+!      data imach(12) / -64 /
+!      data imach(13) /  63 /
+!      data imach(14) /  14 /
+!      data imach(15) / -64 /
+!      data imach(16) /  63 /
+!
+!  IBM PC - Microsoft FORTRAN
+!
+!      data imach( 1) /     5 /
+!      data imach( 2) /     6 /
+!      data imach( 3) /     6 /
+!      data imach( 4) /     0 /
+!      data imach( 5) /    32 /
+!      data imach( 6) /     4 /
+!      data imach( 7) /     2 /
+!      data imach( 8) /    31 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /     2 /
+!      data imach(11) /    24 /
+!      data imach(12) /  -126 /
+!      data imach(13) /   127 /
+!      data imach(14) /    53 /
+!      data imach(15) / -1022 /
+!      data imach(16) /  1023 /
+!
+!  IBM PC - Professional FORTRAN and Lahey FORTRAN
+!
+!      data imach( 1) /     4 /
+!      data imach( 2) /     7 /
+!      data imach( 3) /     7 /
+!      data imach( 4) /     0 /
+!      data imach( 5) /    32 /
+!      data imach( 6) /     4 /
+!      data imach( 7) /     2 /
+!      data imach( 8) /    31 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /     2 /
+!      data imach(11) /    24 /
+!      data imach(12) /  -126 /
+!      data imach(13) /   127 /
+!      data imach(14) /    53 /
+!      data imach(15) / -1022 /
+!      data imach(16) /  1023 /
+!
+!  INTERDATA 8/32 with the UNIX system FORTRAN 77 compiler.
+!  For the INTERDATA FORTRAN VII compiler, replace the Z's specifying hex
+!  constants with Y's.
+!
+!      data imach( 1) /   5 /
+!      data imach( 2) /   6 /
+!      data imach( 3) /   6 /
+!      data imach( 4) /   6 /
+!      data imach( 5) /  32 /
+!      data imach( 6) /   4 /
+!      data imach( 7) /   2 /
+!      data imach( 8) /  31 /
+!      data imach( 9) / Z'7FFFFFFF' /
+!      data imach(10) /  16 /
+!      data imach(11) /   6 /
+!      data imach(12) / -64 /
+!      data imach(13) /  62 /
+!      data imach(14) /  14 /
+!      data imach(15) / -64 /
+!      data imach(16) /  62 /
+!
+!  PDP-10 (KA processor).
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    7 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   36 /
+!      data imach( 6) /    5 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   35 /
+!      data imach( 9) / "377777777777 /
+!      data imach(10) /    2 /
+!      data imach(11) /   27 /
+!      data imach(12) / -128 /
+!      data imach(13) /  127 /
+!      data imach(14) /   54 /
+!      data imach(15) / -101 /
+!      data imach(16) /  127 /
+!
+!  PDP-10 (KI processor).
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    7 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   36 /
+!      data imach( 6) /    5 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   35 /
+!      data imach( 9) / "377777777777 /
+!      data imach(10) /    2 /
+!      data imach(11) /   27 /
+!      data imach(12) / -128 /
+!      data imach(13) /  127 /
+!      data imach(14) /   62 /
+!      data imach(15) / -128 /
+!      data imach(16) /  127 /
+!
+!  PDP-11 FORTRANS supporting 32-bit integer arithmetic.
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    7 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   32 /
+!      data imach( 6) /    4 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   31 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /    2 /
+!      data imach(11) /   24 /
+!      data imach(12) / -127 /
+!      data imach(13) /  127 /
+!      data imach(14) /   56 /
+!      data imach(15) / -127 /
+!      data imach(16) /  127 /
+!
+!  PDP-11 FORTRANS supporting 16-bit integer arithmetic.
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    7 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   16 /
+!      data imach( 6) /    2 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   15 /
+!      data imach( 9) / 32767 /
+!      data imach(10) /    2 /
+!      data imach(11) /   24 /
+!      data imach(12) / -127 /
+!      data imach(13) /  127 /
+!      data imach(14) /   56 /
+!      data imach(15) / -127 /
+!      data imach(16) /  127 /
+!
+!  PRIME 50 series systems with 32-bit integers and 64V MODE instructions,
+!  supplied by Igor Bray.
+!
+!      data imach( 1) /            1 /
+!      data imach( 2) /            1 /
+!      data imach( 3) /            2 /
+!      data imach( 4) /            1 /
+!      data imach( 5) /           32 /
+!      data imach( 6) /            4 /
+!      data imach( 7) /            2 /
+!      data imach( 8) /           31 /
+!      data imach( 9) / :17777777777 /
+!      data imach(10) /            2 /
+!      data imach(11) /           23 /
+!      data imach(12) /         -127 /
+!      data imach(13) /         +127 /
+!      data imach(14) /           47 /
+!      data imach(15) /       -32895 /
+!      data imach(16) /       +32637 /
+!
+!  SEQUENT BALANCE 8000.
+!
+!      data imach( 1) /     0 /
+!      data imach( 2) /     0 /
+!      data imach( 3) /     7 /
+!      data imach( 4) /     0 /
+!      data imach( 5) /    32 /
+!      data imach( 6) /     1 /
+!      data imach( 7) /     2 /
+!      data imach( 8) /    31 /
+!      data imach( 9) /  2147483647 /
+!      data imach(10) /     2 /
+!      data imach(11) /    24 /
+!      data imach(12) /  -125 /
+!      data imach(13) /   128 /
+!      data imach(14) /    53 /
+!      data imach(15) / -1021 /
+!      data imach(16) /  1024 /
+!
+!  SUN Microsystems UNIX F77 compiler.
+!
+!      data imach( 1) /     5 /
+!      data imach( 2) /     6 /
+!      data imach( 3) /     6 /
+!      data imach( 4) /     0 /
+!      data imach( 5) /    32 /
+!      data imach( 6) /     4 /
+!      data imach( 7) /     2 /
+!      data imach( 8) /    32 /
+!      data imach( 9) /2147483647/
+!      data imach(10) /     2 /
+!      data imach(11) /    24 /
+!      data imach(12) /  -126 /
+!      data imach(13) /   128 /
+!      data imach(14) /    53 /
+!      data imach(15) / -1022 /
+!      data imach(16) /  1024 /
+!
+!  SUN 3 (68881 or FPA)
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    6 /
+!      data imach( 4) /    0 /
+!      data imach( 5) /   32 /
+!      data imach( 6) /    4 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   31 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /    2 /
+!      data imach(11) /   24 /
+!      data imach(12) / -125 /
+!      data imach(13) /  128 /
+!      data imach(14) /   53 /
+!      data imach(15) / -1021 /
+!      data imach(16) /  1024 /
+!
+!  UNIVAC 1100 series.
+!  Note that the punch unit, I1MACH(3), has been set to 7, which is appropriate
+!  for the UNIVAC-FOR system.  If you have the UNIVAC-FTN system, set it to 1
+!  instead.
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    7 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   36 /
+!      data imach( 6) /    6 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   35 /
+!      data imach( 9) / O377777777777 /
+!      data imach(10) /    2 /
+!      data imach(11) /   27 /
+!      data imach(12) / -128 /
+!      data imach(13) /  127 /
+!      data imach(14) /   60 /
+!      data imach(15) /-1024 /
+!      data imach(16) / 1023 /
+!
+!  VAX.
+!
+!      data imach( 1) /    5 /
+!      data imach( 2) /    6 /
+!      data imach( 3) /    7 /
+!      data imach( 4) /    6 /
+!      data imach( 5) /   32 /
+!      data imach( 6) /    4 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   31 /
+!      data imach( 9) / 2147483647 /
+!      data imach(10) /    2 /
+!      data imach(11) /   24 /
+!      data imach(12) / -127 /
+!      data imach(13) /  127 /
+!      data imach(14) /   56 /
+!      data imach(15) / -127 /
+!      data imach(16) /  127 /
+!
+!  Z80 microprocessor.
+!
+!      data imach( 1) /    1 /
+!      data imach( 2) /    1 /
+!      data imach( 3) /    0 /
+!      data imach( 4) /    1 /
+!      data imach( 5) /   16 /
+!      data imach( 6) /    2 /
+!      data imach( 7) /    2 /
+!      data imach( 8) /   15 /
+!      data imach( 9) / 32767 /
+!      data imach(10) /    2 /
+!      data imach(11) /   24 /
+!      data imach(12) / -127 /
+!      data imach(13) /  127 /
+!      data imach(14) /   56 /
+!      data imach(15) / -127 /
+!      data imach(16) /  127 /
+!
+  if ( i < 1 .or. i > 16 )then
+    write ( *, * ) ' '
+    write(*,*)'I1MACH - Fatal error!'
+    write(*,*)'I is out of bounds:',i
+    i1mach=0
+    stop
+  else
+    i1mach=imach(i)
+  end if
+
+  return
+end
+subroutine i_factor ( n, ifac )
+!
+!*******************************************************************************
+!
+!! I_FACTOR factors an integer.
+!
+!
+!  Modified:
+!
+!    14 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+!    Input, integer N, the number to be factored.
+!
+!    Output, integer IFAC(15).
+!    IFAC(1) = N, the number that was factored.
+!    IFAC(2) = NF, the number of factors.
+!    IFAC(3:2+NF), the factors.
+!
+  integer i
+  integer ib
+  integer ifac(15)
+  integer j
+  integer n
+  integer nf
+  integer nl
+  integer nq
+  integer nr
+  integer ntry
+!
+  ifac(1) = n
+
+  nf = 0
+  nl = n
+
+  if ( n == 0 ) then
+    nf = 1
+    ifac(2) = nf
+    ifac(2+nf) = 0
+    return
+  end if
+
+  if ( n < 1 ) then
+    nf = nf + 1
+    ifac(2+nf) = -1
+    nl = - n
+  end if
+
+  if ( nl == 1 ) then
+    nf = nf + 1
+    ifac(2) = nf
+    ifac(2+nf) = 1
+    return
+  end if
+
+  j = 0
+
+  do while ( nl > 1 )
+
+    j = j + 1
+!
+!  Choose a trial divisor, NTRY.
+!
+    if ( j == 1 ) then
+      ntry = 4
+    else if ( j == 2 ) then
+      ntry = 2
+    else if ( j == 3 ) then
+      ntry = 3
+    else if ( j == 4 ) then
+      ntry = 5
+    else
+      ntry = ntry + 2
+    end if
+!
+!  Divide by the divisor as many times as possible.
+!
+    do
+
+      nq = nl / ntry
+      nr = nl - ntry * nq
+
+      if ( nr /= 0 ) then
+        exit
+      end if
+
+      nl = nq
+      nf = nf + 1
+!
+!  Make sure factors of 2 appear in the front of the list.
+!
+      if ( ntry /= 2 ) then
+
+        ifac(2+nf) = ntry
+
+      else
+
+        do i = nf, 2, -1
+          ifac(i+2) = ifac(i+1)
+        end do
+        ifac(3) = 2
+
+      end if
+
+    end do
+
+  end do
+
+  ifac(2) = nf
+
+  return
+end
+function inits ( os, nos, eta )
+!
+!*******************************************************************************
+!
+!! INITS estimates the order of an orthogonal series guaranteeing a given accuracy.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Ordinarily, ETA will be chosen to be one-tenth machine precision.
+!
+!             input arguments --
+! os     array of nos coefficients in an orthogonal series.
+! nos    number of coefficients in os.
+! eta    requested accuracy of series.
+!
+  integer nos
+
+  integer ii,i
+  integer inits
+  real os,err,eta
+  dimension os(nos)
+!
+  if (nos<1) then
+    call xerror ( 'inits   number of coefficients lt 1', 35, 2, 2)
+  end if
+
+  err = 0.
+  do ii=1,nos
+    i = nos + 1 - ii
+    err = err + abs(os(i))
+    if (err>eta) go to 20
+  end do
+
+ 20   if (i==nos) call xerror ( 'inits   eta may be too small', 28, 1, 2)
+  inits = i
+
+  return
+end
+function isamax ( n, x, incx )
+!
+!*******************************************************************************
+!
+!! ISAMAX finds the index of the vector element of maximum absolute value.
+!
+!
+!  Modified:
+!
+!    08 April 1999
+!
+!  Reference:
+!
+!    Lawson, Hanson, Kincaid, Krogh,
+!    Basic Linear Algebra Subprograms for Fortran Usage,
+!    Algorithm 539,
+!    ACM Transactions on Mathematical Software,
+!    Volume 5, Number 3, September 1979, pages 308-323.
+!
+!  Parameters:
+!
+!    Input, integer N, the number of entries in the vector.
+!
+!    Input, real X(*), the vector to be examined.
+!
+!    Input, integer INCX, the increment between successive entries of SX.
+!
+!    Output, integer ISAMAX, the index of the element of SX of maximum
+!    absolute value.
+!
+  integer i
+  integer incx
+  integer isamax
+  integer ix
+  integer n
+  real samax
+  real x(*)
+!
+  if ( n <= 0 ) then
+
+    isamax = 0
+
+  else if ( n == 1 ) then
+
+    isamax = 1
+
+  else if ( incx == 1 ) then
+
+    isamax = 1
+    samax = abs ( x(1) )
+
+    do i = 2, n
+
+      if ( abs ( x(i) ) > samax ) then
+        isamax = i
+        samax = abs ( x(i) )
+      end if
+
+    end do
+
+  else
+
+    if ( incx >= 0 ) then
+      ix = 1
+    else
+      ix = ( - n + 1 ) * incx + 1
+    end if
+
+    isamax = 1
+    samax = abs ( x(ix) )
+
+    ix = ix + incx
+
+    do i = 2, n
+      if ( abs ( x(ix) ) > samax ) then
+        isamax = i
+        samax = abs ( x(ix) )
+      end if
+      ix = ix + incx
+    end do
+
+  end if
+
+  return
+end
+function j4save ( iwhich, ivalue, iset )
+!
+!*******************************************************************************
+!
+!! J4SAVE saves variables needed by the library error handling routines.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters
+!      --input--
+!        iwhich - index of item desired.
+!                = 1 refers to current error number.
+!                = 2 refers to current error control flag.
+!                 = 3 refers to current unit number to which error
+!                    messages are to be sent.  (0 means use standard.)
+!                 = 4 refers to the maximum number of times any
+!                     message is to be printed (as set by xermax).
+!                 = 5 refers to the total number of units to which
+!                     each error message is to be written.
+!                 = 6 refers to the 2nd unit for error messages
+!                 = 7 refers to the 3rd unit for error messages
+!                 = 8 refers to the 4th unit for error messages
+!                 = 9 refers to the 5th unit for error messages
+!        ivalue - the value to be set for the iwhich-th parameter,
+!                 if iset is .true. .
+!        iset   - if iset=.true., the iwhich-th parameter will be
+!                 given the value, ivalue.  if iset=.false., the
+!                 iwhich-th parameter will be unchanged, and ivalue
+!                 is a dummy parameter.
+!      --output--
+!        the (old) value of the iwhich-th parameter will be returned
+!        in the function value, j4save.
+!
+!     written by ron jones, with slatec common math library subcommittee
+!    adapted from bell laboratories port library error handler
+!     latest revision: 23 may 1979
+!
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer, save, dimension ( 9 ) :: iparam = (/ 0, 2, 0, 10, 1, 0, 0, 0, 0 /)
+  logical iset
+  integer ivalue
+  integer iwhich
+  integer j4save
+!
+  j4save = iparam(iwhich)
+  if (iset) then
+    iparam(iwhich) = ivalue
+  end if
+
+  return
+end
+function inbin ( x, nbins, xmin, xmax, width )
+!
+!*******************************************************************************
+!
+!! INBIN takes a real value X and finds the correct bin for it.
+!
+!
+!  Discussion:
+!
+!    Values below XMIN come back in 1.  Values above XMAX come back
+!    in NBINS.
+!
+!  Parameters:
+!
+!    Input, real X, a value to be binned.
+!
+!    Input, integer NBINS, the number of bins.
+!
+!    Input, real XMIN, XMAX, the minimum and maximum bin limits.
+!
+!    Input, real WIDTH, the width of each bin.
+!
+!    Output, integer INBIN, the index of the bin containing X.
+!
+  integer inbin
+  integer nbins
+  real width
+  real x
+  real xmax
+  real xmin
+!
+  if ( x < xmin ) then
+    inbin = 1
+  else if ( x >= xmax ) then
+    inbin = nbins
+  else
+    inbin = 2 + int ( ( x - xmin ) / width )
+  end if
+
+  return
+end
+subroutine jairy ( x, rx, c, ai, dai )
+!
+!*******************************************************************************
+!
+!! JAIRY computes the Airy function and its derivative.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!                                   input
+!
+!         x - argument, computed by asyjy, x unrestricted
+!        rx - rx=sqrt(abs(x)), computed by asyjy
+!         c - c=2.*(abs(x)**1.5)/3., computed by asyjy
+!
+!                                  output
+!
+!        ai - value of function ai(x)
+!       dai - value of the derivative dai(x)
+!
+!                                written by
+!
+!                                d. e. amos
+!                               s. l. daniel
+!                               m. k. weston
+!
+  real a
+  real ai
+  real ajn
+  real ajp, ak1, ak2, ak3
+  real b(15)
+  real c, ccv, con2, con3
+  real con4, con5, cv
+  real da
+  real dai, dajn, dajp, dak1, dak2, dak3, db, ec
+  real e1, e2, fpi12, f1, f2
+  integer i
+  integer j
+  integer m1
+  integer m1d
+  integer m2
+  integer m2d
+  integer m3
+  integer m3d
+  integer m4
+  integer m4d
+  integer n1
+  integer n1d
+  integer n2
+  integer n2d, n3, n3d, n4, n4d
+  real rtrx, rx, scv, t, temp1, temp2, tt
+  real x
+  dimension ajp(19), ajn(19), a(15)
+  dimension ak1(14), ak2(23), ak3(14)
+  dimension dajp(19), dajn(19), da(15), db(15)
+  dimension dak1(14), dak2(24), dak3(14)
+
+  data n1,n2,n3,n4/14,23,19,15/
+  data m1,m2,m3,m4/12,21,17,13/
+  data fpi12,con2,con3,con4,con5/ &
+    1.30899693899575, 5.03154716196777, &
+    3.80004589867293e-01, 8.33333333333333e-01, 8.66025403784439e-01/
+
+  data ak1(1), ak1(2), ak1(3), ak1(4), ak1(5), ak1(6), ak1(7), &
+          ak1(8), ak1(9), ak1(10),ak1(11),ak1(12),ak1(13), &
+          ak1(14)         / 2.20423090987793e-01,-1.25290242787700e-01, &
+      1.03881163359194e-02, 8.22844152006343e-04,-2.34614345891226e-04, &
+      1.63824280172116e-05, 3.06902589573189e-07,-1.29621999359332e-07, &
+      8.22908158823668e-09, 1.53963968623298e-11,-3.39165465615682e-11, &
+      2.03253257423626e-12,-1.10679546097884e-14,-5.16169497785080e-15/
+
+  data ak2(1), ak2(2), ak2(3), ak2(4), ak2(5), ak2(6), ak2(7), &
+          ak2(8), ak2(9), ak2(10),ak2(11),ak2(12),ak2(13),ak2(14), &
+          ak2(15),ak2(16),ak2(17),ak2(18),ak2(19),ak2(20),ak2(21), &
+          ak2(22),ak2(23) / 2.74366150869598e-01, 5.39790969736903e-03, &
+     -1.57339220621190e-03, 4.27427528248750e-04,-1.12124917399925e-04, &
+      2.88763171318904e-05,-7.36804225370554e-06, 1.87290209741024e-06, &
+     -4.75892793962291e-07, 1.21130416955909e-07,-3.09245374270614e-08, &
+      7.92454705282654e-09,-2.03902447167914e-09, 5.26863056595742e-10, &
+     -1.36704767639569e-10, 3.56141039013708e-11,-9.31388296548430e-12, &
+      2.44464450473635e-12,-6.43840261990955e-13, 1.70106030559349e-13, &
+     -4.50760104503281e-14, 1.19774799164811e-14,-3.19077040865066e-15/
+
+  data ak3(1), ak3(2), ak3(3), ak3(4), ak3(5), ak3(6), ak3(7), &
+          ak3(8), ak3(9), ak3(10),ak3(11),ak3(12),ak3(13), &
+          ak3(14)         / 2.80271447340791e-01,-1.78127042844379e-03, &
+      4.03422579628999e-05,-1.63249965269003e-06, 9.21181482476768e-08, &
+     -6.52294330229155e-09, 5.47138404576546e-10,-5.24408251800260e-11, &
+      5.60477904117209e-12,-6.56375244639313e-13, 8.31285761966247e-14, &
+     -1.12705134691063e-14, 1.62267976598129e-15,-2.46480324312426e-16/
+
+  data ajp(1), ajp(2), ajp(3), ajp(4), ajp(5), ajp(6), ajp(7), &
+          ajp(8), ajp(9), ajp(10),ajp(11),ajp(12),ajp(13),ajp(14), &
+          ajp(15),ajp(16),ajp(17),ajp(18), &
+          ajp(19)         / 7.78952966437581e-02,-1.84356363456801e-01, &
+      3.01412605216174e-02, 3.05342724277608e-02,-4.95424702513079e-03, &
+     -1.72749552563952e-03, 2.43137637839190e-04, 5.04564777517082e-05, &
+     -6.16316582695208e-06,-9.03986745510768e-07, 9.70243778355884e-08, &
+      1.09639453305205e-08,-1.04716330588766e-09,-9.60359441344646e-11, &
+      8.25358789454134e-12, 6.36123439018768e-13,-4.96629614116015e-14, &
+     -3.29810288929615e-15, 2.35798252031104e-16/
+
+  data ajn(1), ajn(2), ajn(3), ajn(4), ajn(5), ajn(6), ajn(7), &
+          ajn(8), ajn(9), ajn(10),ajn(11),ajn(12),ajn(13),ajn(14), &
+          ajn(15),ajn(16),ajn(17),ajn(18), &
+          ajn(19)         / 3.80497887617242e-02,-2.45319541845546e-01, &
+      1.65820623702696e-01, 7.49330045818789e-02,-2.63476288106641e-02, &
+     -5.92535597304981e-03, 1.44744409589804e-03, 2.18311831322215e-04, &
+     -4.10662077680304e-05,-4.66874994171766e-06, 7.15218807277160e-07, &
+      6.52964770854633e-08,-8.44284027565946e-09,-6.44186158976978e-10, &
+      7.20802286505285e-11, 4.72465431717846e-12,-4.66022632547045e-13, &
+     -2.67762710389189e-14, 2.36161316570019e-15/
+
+  data a(1),   a(2),   a(3),   a(4),   a(5),   a(6),   a(7), &
+          a(8),   a(9),   a(10),  a(11),  a(12),  a(13),  a(14), &
+          a(15)           / 4.90275424742791e-01, 1.57647277946204e-03, &
+     -9.66195963140306e-05, 1.35916080268815e-07, 2.98157342654859e-07, &
+     -1.86824767559979e-08,-1.03685737667141e-09, 3.28660818434328e-10, &
+     -2.57091410632780e-11,-2.32357655300677e-12, 9.57523279048255e-13, &
+     -1.20340828049719e-13,-2.90907716770715e-15, 4.55656454580149e-15, &
+     -9.99003874810259e-16/
+
+  data b(1),   b(2),   b(3),   b(4),   b(5),   b(6),   b(7), &
+          b(8),   b(9),   b(10),  b(11),  b(12),  b(13),  b(14), &
+          b(15)           / 2.78593552803079e-01,-3.52915691882584e-03, &
+     -2.31149677384994e-05, 4.71317842263560e-06,-1.12415907931333e-07, &
+     -2.00100301184339e-08, 2.60948075302193e-09,-3.55098136101216e-11, &
+     -3.50849978423875e-11, 5.83007187954202e-12,-2.04644828753326e-13, &
+     -1.10529179476742e-13, 2.87724778038775e-14,-2.88205111009939e-15, &
+     -3.32656311696166e-16/
+
+  data n1d,n2d,n3d,n4d/14,24,19,15/
+  data m1d,m2d,m3d,m4d/12,22,17,13/
+
+  data dak1(1), dak1(2), dak1(3), dak1(4), dak1(5), dak1(6), &
+          dak1(7), dak1(8), dak1(9), dak1(10),dak1(11),dak1(12), &
+         dak1(13),dak1(14)/ 2.04567842307887e-01,-6.61322739905664e-02, &
+     -8.49845800989287e-03, 3.12183491556289e-03,-2.70016489829432e-04, &
+     -6.35636298679387e-06, 3.02397712409509e-06,-2.18311195330088e-07, &
+     -5.36194289332826e-10, 1.13098035622310e-09,-7.43023834629073e-11, &
+      4.28804170826891e-13, 2.23810925754539e-13,-1.39140135641182e-14/
+
+  data dak2(1), dak2(2), dak2(3), dak2(4), dak2(5), dak2(6), &
+          dak2(7), dak2(8), dak2(9), dak2(10),dak2(11),dak2(12), &
+          dak2(13),dak2(14),dak2(15),dak2(16),dak2(17),dak2(18), &
+          dak2(19),dak2(20),dak2(21),dak2(22),dak2(23), &
+          dak2(24)        / 2.93332343883230e-01,-8.06196784743112e-03, &
+      2.42540172333140e-03,-6.82297548850235e-04, 1.85786427751181e-04, &
+     -4.97457447684059e-05, 1.32090681239497e-05,-3.49528240444943e-06, &
+      9.24362451078835e-07,-2.44732671521867e-07, 6.49307837648910e-08, &
+     -1.72717621501538e-08, 4.60725763604656e-09,-1.23249055291550e-09, &
+      3.30620409488102e-10,-8.89252099772401e-11, 2.39773319878298e-11, &
+     -6.48013921153450e-12, 1.75510132023731e-12,-4.76303829833637e-13, &
+      1.29498241100810e-13,-3.52679622210430e-14, 9.62005151585923e-15, &
+     -2.62786914342292e-15/
+
+  data dak3(1), dak3(2), dak3(3), dak3(4), dak3(5), dak3(6), &
+          dak3(7), dak3(8), dak3(9), dak3(10),dak3(11),dak3(12), &
+         dak3(13),dak3(14)/ 2.84675828811349e-01, 2.53073072619080e-03, &
+     -4.83481130337976e-05, 1.84907283946343e-06,-1.01418491178576e-07, &
+      7.05925634457153e-09,-5.85325291400382e-10, 5.56357688831339e-11, &
+     -5.90889094779500e-12, 6.88574353784436e-13,-8.68588256452194e-14, &
+      1.17374762617213e-14,-1.68523146510923e-15, 2.55374773097056e-16/
+
+  data dajp(1), dajp(2), dajp(3), dajp(4), dajp(5), dajp(6), &
+          dajp(7), dajp(8), dajp(9), dajp(10),dajp(11),dajp(12), &
+          dajp(13),dajp(14),dajp(15),dajp(16),dajp(17),dajp(18), &
+          dajp(19)        / 6.53219131311457e-02,-1.20262933688823e-01, &
+      9.78010236263823e-03, 1.67948429230505e-02,-1.97146140182132e-03, &
+     -8.45560295098867e-04, 9.42889620701976e-05, 2.25827860945475e-05, &
+     -2.29067870915987e-06,-3.76343991136919e-07, 3.45663933559565e-08, &
+      4.29611332003007e-09,-3.58673691214989e-10,-3.57245881361895e-11, &
+      2.72696091066336e-12, 2.26120653095771e-13,-1.58763205238303e-14, &
+     -1.12604374485125e-15, 7.31327529515367e-17/
+
+  data dajn(1), dajn(2), dajn(3), dajn(4), dajn(5), dajn(6), &
+          dajn(7), dajn(8), dajn(9), dajn(10),dajn(11),dajn(12), &
+          dajn(13),dajn(14),dajn(15),dajn(16),dajn(17),dajn(18), &
+          dajn(19)        / 1.08594539632967e-02, 8.53313194857091e-02, &
+     -3.15277068113058e-01,-8.78420725294257e-02, 5.53251906976048e-02, &
+      9.41674060503241e-03,-3.32187026018996e-03,-4.11157343156826e-04, &
+      1.01297326891346e-04, 9.87633682208396e-06,-1.87312969812393e-06, &
+     -1.50798500131468e-07, 2.32687669525394e-08, 1.59599917419225e-09, &
+     -2.07665922668385e-10,-1.24103350500302e-11, 1.39631765331043e-12, &
+      7.39400971155740e-14,-7.32887475627500e-15/
+
+  data da(1),  da(2),  da(3),  da(4),  da(5),  da(6),  da(7), &
+          da(8),  da(9),  da(10), da(11), da(12), da(13), da(14), &
+          da(15)          / 4.91627321104601e-01, 3.11164930427489e-03, &
+      8.23140762854081e-05,-4.61769776172142e-06,-6.13158880534626e-08, &
+      2.87295804656520e-08,-1.81959715372117e-09,-1.44752826642035e-10, &
+      4.53724043420422e-11,-3.99655065847223e-12,-3.24089119830323e-13, &
+      1.62098952568741e-13,-2.40765247974057e-14, 1.69384811284491e-16, &
+      8.17900786477396e-16/
+
+  data db(1),  db(2),  db(3),  db(4),  db(5),  db(6),  db(7), &
+          db(8),  db(9),  db(10), db(11), db(12), db(13), db(14), &
+          db(15)          /-2.77571356944231e-01, 4.44212833419920e-03, &
+     -8.42328522190089e-05,-2.58040318418710e-06, 3.42389720217621e-07, &
+     -6.24286894709776e-09,-2.36377836844577e-09, 3.16991042656673e-10, &
+     -4.40995691658191e-12,-5.18674221093575e-12, 9.64874015137022e-13, &
+     -4.90190576608710e-14,-1.77253430678112e-14, 5.55950610442662e-15, &
+     -7.11793337579530e-16/
+!
+  if (x<0.0) go to 90
+  if (c>5.0) go to 60
+  if (x>1.20) go to 30
+  t = (x+x-1.2)*con4
+  tt = t + t
+  j = n1
+  f1 = ak1(j)
+  f2 = 0.0E+00
+
+  do i=1,m1
+    j = j - 1
+    temp1 = f1
+    f1 = tt*f1 - f2 + ak1(j)
+    f2 = temp1
+  end do
+
+  ai = t*f1 - f2 + ak1(1)
+
+  j = n1d
+  f1 = dak1(j)
+  f2 = 0.0E+00
+  do i=1,m1d
+    j = j - 1
+    temp1 = f1
+    f1 = tt*f1 - f2 + dak1(j)
+    f2 = temp1
+  end do
+
+  dai = -(t*f1-f2+dak1(1))
+
+  return
+!
+   30 continue
+  t = (x+x-con2)*con3
+  tt = t + t
+  j = n2
+  f1 = ak2(j)
+  f2 = 0.0E+00
+
+  do i=1,m2
+    j = j - 1
+    temp1 = f1
+    f1 = tt*f1 - f2 + ak2(j)
+    f2 = temp1
+  end do
+
+  rtrx = sqrt(rx)
+  ec = exp(-c)
+  ai = ec*(t*f1-f2+ak2(1))/rtrx
+  j = n2d
+  f1 = dak2(j)
+  f2 = 0.0E+00
+
+  do i =1,m2d
+    j = j - 1
+    temp1 = f1
+    f1 = tt*f1 - f2 + dak2(j)
+    f2 = temp1
+  end do
+  dai = -ec*(t*f1-f2+dak2(1))*rtrx
+  return
+
+   60 continue
+  t = 10.0/c - 1.0E+00
+  tt = t + t
+  j = n1
+  f1 = ak3(j)
+  f2 = 0.0E+00
+
+  do i=1,m1
+    j = j - 1
+    temp1 = f1
+    f1 = tt*f1 - f2 + ak3(j)
+    f2 = temp1
+  end do
+  rtrx = sqrt(rx)
+  ec = exp(-c)
+  ai = ec*(t*f1-f2+ak3(1))/rtrx
+  j = n1d
+  f1 = dak3(j)
+  f2 = 0.0E+00
+
+  do i=1,m1d
+    j = j - 1
+    temp1 = f1
+    f1 = tt*f1 - f2 + dak3(j)
+    f2 = temp1
+  end do
+  dai = -rtrx*ec*(t*f1-f2+dak3(1))
+  return
+
+   90 continue
+  if (c>5.0) go to 120
+  t = 0.4*c - 1.0E+00
+  tt = t + t
+  j = n3
+  f1 = ajp(j)
+  e1 = ajn(j)
+  f2 = 0.0E+00
+  e2 = 0.0E+00
+
+  do i=1,m3
+    j = j - 1
+    temp1 = f1
+    temp2 = e1
+    f1 = tt*f1 - f2 + ajp(j)
+    e1 = tt*e1 - e2 + ajn(j)
+    f2 = temp1
+    e2 = temp2
+  end do
+
+  ai = (t*e1-e2+ajn(1)) - x*(t*f1-f2+ajp(1))
+  j = n3d
+  f1 = dajp(j)
+  e1 = dajn(j)
+  f2 = 0.0E+00
+  e2 = 0.0E+00
+
+  do i=1,m3d
+    j = j - 1
+    temp1 = f1
+    temp2 = e1
+    f1 = tt*f1 - f2 + dajp(j)
+    e1 = tt*e1 - e2 + dajn(j)
+    f2 = temp1
+    e2 = temp2
+  end do
+
+  dai = x*x*(t*f1-f2+dajp(1)) + (t*e1-e2+dajn(1))
+
+  return
+!
+  120 continue
+  t = 10.0/c - 1.0E+00
+  tt = t + t
+  j = n4
+  f1 = a(j)
+  e1 = b(j)
+  f2 = 0.0E+00
+  e2 = 0.0E+00
+
+  do i=1,m4
+    j = j - 1
+    temp1 = f1
+    temp2 = e1
+    f1 = tt*f1 - f2 + a(j)
+    e1 = tt*e1 - e2 + b(j)
+    f2 = temp1
+    e2 = temp2
+  end do
+  temp1 = t*f1 - f2 + a(1)
+  temp2 = t*e1 - e2 + b(1)
+  rtrx = sqrt(rx)
+  cv = c - fpi12
+  ccv = cos(cv)
+  scv = sin(cv)
+  ai = (temp1*ccv-temp2*scv)/rtrx
+  j = n4d
+  f1 = da(j)
+  e1 = db(j)
+  f2 = 0.0E+00
+  e2 = 0.0E+00
+
+  do i = 1, m4d
+    j = j - 1
+    temp1 = f1
+    temp2 = e1
+    f1 = tt*f1 - f2 + da(j)
+    e1 = tt*e1 - e2 + db(j)
+    f2 = temp1
+    e2 = temp2
+  end do
+
+  temp1 = t*f1 - f2 + da(1)
+  temp2 = t*e1 - e2 + db(1)
+  e1 = ccv*con5 + 0.5*scv
+  e2 = scv*con5 - 0.5*ccv
+  dai = (temp1*e1-temp2*e2)*rtrx
+
+  return
+end
+subroutine lltslv ( nr, n, a, x, b )
+!
+!*******************************************************************************
+!
+!! LLTSLV solves A*x=b where A = L * Transpose(L), and only L is stored.
+!
+!
+!  Discussion:
+!
+!    L is a lower triangular matrix.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! a(n,n)       --> matrix of form l(l-transpose).
+!                  on return a is unchanged.
+! x(n)        <--  solution vector
+! b(n)         --> right-hand side vector
+!                  if b is not required by calling program, then
+!                  b and x may share the same storage.
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real b(n)
+  real x(n)
+!
+!  Forward solve, result in X.
+!
+  call forslv ( nr, n, a, x, b )
+!
+!  Back solve, result in X.
+!
+  call bakslv ( nr, n, a, x, x )
+
+  return
+end
+subroutine lnsrch ( n, x, f, g, p, xpls, fpls, fcn, mxtake, iretcd, stepmx, &
+  steptl, sx, ipr )
+!
+!*******************************************************************************
+!
+!! LNSRCH finds a next newton iterate by line search.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+! parameters
+!
+! n            --> dimension of problem
+! x(n)         --> old iterate:   x[k-1]
+! f            --> function value at old iterate, f(x)
+! g(n)         --> gradient at old iterate, g(x), or approximate
+! p(n)         --> non-zero newton step
+! xpls(n)     <--  new iterate x[k]
+! fpls        <--function value at new iterate, f(xpls)
+! fcn          --> name of subroutine to evaluate function
+! iretcd      <--  return code
+! mxtake      <--  boolean flag indicating step of maximum length used
+! stepmx       --> maximum allowable step size
+! steptl       --> relative step size at which successive iterates
+!                  considered close enough to terminate algorithm
+! sx(n)        --> diagonal scaling matrix for x
+! ipr          --> device to which to send output
+!
+! internal variables
+!
+! sln              newton length
+! rln              relative length of newton step
+!
+  integer n
+!
+  real a
+  real almbda
+  real b
+  real disc
+  real f
+  real fpls
+  real g(n)
+  integer i
+  integer ipr
+  integer iretcd
+  logical mxtake
+  real p(n)
+  real pfpls
+  real plmbda
+  real rln
+  real rmnlmb
+  real scl
+  real sln
+  real slp
+  real stepmx
+  real steptl
+  real sx(n)
+  real t1
+  real t2
+  real t3
+  real tlmbda
+  real tmp
+  real x(n)
+  real xpls(n)
+!
+  external fcn
+!
+  mxtake = .false.
+  iretcd = 2
+
+  sln = sqrt ( sum ( ( sx(1:n) * p(1:n) )**2 ) )
+!
+!  Newton step longer than maximum allowed.
+!
+  if ( sln > stepmx ) then
+    scl=stepmx / sln
+    p(1:n) = scl * p(1:n)
+    sln = stepmx
+  end if
+
+  slp = dot_product ( g, p )
+
+  rln=0.
+  do i=1,n
+    rln=max(rln,abs(p(i))/max(abs(x(i)),1./sx(i)))
+  end do
+
+  rmnlmb=steptl/rln
+  almbda=1.0E+00
+!
+! loop
+! check if new iterate satisfactory.  generate new lambda if necessary.
+!
+  100 continue
+
+  if ( iretcd < 2 ) return
+
+  xpls(1:n) = x(1:n) + almbda * p(1:n)
+
+  call fcn ( n, xpls, fpls )
+
+  if ( fpls> f+slp*1.0e-4*almbda) go to 130
+!
+! solution found
+!
+    iretcd=0
+    if ( almbda==1.0E+00 .and. sln> .99*stepmx) mxtake=.true.
+    go to 100
+!
+! solution not (yet) found
+!
+!     else
+  130   if ( almbda >= rmnlmb) go to 140
+!       if ( almbda < rmnlmb)
+!       then
+!
+! no satisfactory xpls found sufficiently distinct from x
+!
+      iretcd=1
+      go to 100
+!
+! calculate new lambda
+!
+  140     continue
+
+          if ( almbda/=1.0) go to 150
+!         if ( almbda==1.0)
+!         then
+!
+! first backtrack: quadratic fit
+!
+        tlmbda=-slp/(2.*(fpls-f-slp))
+        go to 170
+!         else
+!
+! all subsequent backtracks: cubic fit
+!
+  150       t1=fpls-f-almbda*slp
+        t2=pfpls-f-plmbda*slp
+        t3=1.0/(almbda-plmbda)
+        a=t3*(t1/(almbda*almbda) - t2/(plmbda*plmbda))
+        b=t3*(t2*almbda/(plmbda*plmbda) - t1*plmbda/(almbda*almbda) )
+        disc=b*b-3.0*a*slp
+        if ( disc<= b*b) go to 160
+!           if ( disc> b*b)
+!           then
+!
+! only one positive critical point, must be minimum
+!
+          tlmbda=(-b+sign(1.0,a)*sqrt(disc))/(3.0*a)
+          go to 165
+!           else
+!
+! both critical points positive, first is minimum
+!
+  160         tlmbda=(-b-sign(1.0,a)*sqrt(disc))/(3.0*a)
+!           end if
+  165       if ( tlmbda> .5*almbda) tlmbda=.5*almbda
+!         end if
+  170     plmbda=almbda
+      pfpls=fpls
+      if ( tlmbda>= almbda*.1) go to 180
+!         if ( tlmbda<almbda/10.)
+!         then
+        almbda=almbda*.1
+        go to 190
+!         else
+  180       almbda=tlmbda
+!         end if
+!       end if
+!     end if
+  190 go to 100
+  950 format(' lnsrch    almbda=',e20.13)
+  951 format(' lnsrch    new iterate (xpls)')
+  952 format(' lnsrch    sln   =',e20.13/' lnsrch    slp   =',e20.13/ &
+             ' lnsrch    rmnlmb=',e20.13/' lnsrch    stepmx=',e20.13/ &
+             ' lnsrch    steptl=',e20.13)
+  953 format(' lnsrch    f(xpls)=',e20.13)
+  954 format('0lnsrch    newton step (p)')
+  955 format(' lnsrch       ',5(e20.13,3x))
+end
+subroutine mvmltl ( nr, n, a, x, y )
+!
+!*******************************************************************************
+!
+!! MVMLTL computes y = L*x where l is a lower triangular matrix stored in A.
+!
+!
+! parameters
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! a(n,n)       --> lower triangular (n*n) matrix
+! x(n)         --> operand vector
+! y(n)        <--  result vector
+!
+! note
+!
+! x and y cannot share storage
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  integer i
+  integer j
+  real sum
+  real x(n)
+  real y(n)
+!
+  do i = 1, n
+    sum = 0.0E+00
+    do j = 1, i
+      sum = sum + a(i,j) * x(j)
+    end do
+    y(i) = sum
+  end do
+
+  return
+end
+subroutine mvmlts ( nr, n, a, x, y )
+!
+!*******************************************************************************
+!
+!! MVMLTS computes y = A*x where "a" is a symmetric (n*n) matrix stored in its lower
+! triangular part and x,y are n-vectors
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+! parameters
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! a(n,n)       --> symmetric (n*n) matrix stored in
+!                  lower triangular part and diagonal
+! x(n)         --> operand vector
+! y(n)        <--  result vector
+!
+! note
+!
+! x and y cannot share storage.
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  integer i
+  integer j
+  real sum
+  real x(n)
+  real y(n)
+!
+  do i = 1, n
+
+    sum = 0.0E+00
+
+    do j = 1, i
+      sum = sum + a(i,j) * x(j)
+    end do
+
+    do j = i+1, n
+      sum = sum + a(j,i) * x(j)
+    end do
+
+    y(i) = sum
+
+  end do
+
+  return
+end
+subroutine mvmltu ( nr, n, a, x, y )
+!
+!*******************************************************************************
+!
+!! MVMLTU computes y=(l+)x where l is a lower triangular matrix stored in a
+! (l-transpose (l+) is taken implicitly)
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+! parameters
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! a(nr,1)       --> lower triangular (n*n) matrix
+! x(n)         --> operand vector
+! y(n)        <--  result vector
+!
+! note
+!
+! x and y cannot share storage
+!
+  integer n
+  integer nr
+!
+  real a(nr,1)
+  integer i
+  integer j
+  real sum
+  real x(n)
+  real y(n)
+!
+  do i = 1, n
+    sum = 0.0E+00
+    do j = i, n
+      sum = sum + a(j,i) * x(j)
+    end do
+    y(i) = sum
+  end do
+
+  return
+end
+function numxer ( nerr )
+!
+!*******************************************************************************
+!
+!! NUMXER returns the most recent error number.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     written by ron jones, with slatec common math library subcommittee
+!     latest revision:  7 june 1978
+!
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+  integer j4save
+  integer nerr
+  integer numxer
+!
+  nerr = j4save(1,0,.false.)
+  numxer = nerr
+  return
+end
+subroutine optchk ( n, x, typsiz, sx, fscale, gradtl, itnlim, ndigit, epsm, &
+  dlt, method, iexp, iagflg, iahflg, stepmx, msg, ipr )
+!
+!*******************************************************************************
+!
+!! OPTCHK checks the input to the optimization routine.
+!
+!
+!  Parameters:
+!
+! n            --> dimension of problem
+! x(n)         --> on entry, estimate to root of fcn
+! typsiz(n)   <--> typical size of each component of x
+! sx(n)       <--  diagonal scaling matrix for x
+! fscale      <--> estimate of scale of objective function fcn
+! gradtl       --> tolerance at which gradient considered close
+!                  enough to zero to terminate algorithm
+! itnlim      <--> maximum number of allowable iterations
+! ndigit      <--> number of good digits in optimization function fcn
+! epsm         --> machine epsilon
+! dlt         <--> trust region radius
+! method      <--> algorithm indicator
+! iexp        <--> expense flag
+! iagflg      <--> =1 if analytic gradient supplied
+! iahflg      <--> =1 if analytic hessian supplied
+! stepmx      <--> maximum step size
+! msg         <--> message and error code
+! ipr          --> device to which to send output
+!
+  integer n
+!
+  real dlt
+  real epsm
+  real fscale
+  real gradtl
+  integer i
+  integer iagflg
+  integer iahflg
+  integer iexp
+  integer ipr
+  integer itnlim
+  integer method
+  integer msg
+  integer ndigit
+  real stepmx
+  real stpsiz
+  real sx(n)
+  real typsiz(n)
+  real x(n)
+!
+! check that parameters only take on acceptable values.
+! if not, set them to default values.
+!
+  if ( method<1 .or. method>3) method=1
+  if ( iagflg/=1) iagflg=0
+  if ( iahflg/=1) iahflg=0
+  if ( iexp/=0) iexp=1
+  if ( mod(msg/2,2)==1 .and. iagflg==0) go to 830
+  if ( mod(msg/4,2)==1 .and. iahflg==0) go to 835
+!
+!  check dimension of problem
+!
+  if ( n<=0) go to 805
+  if ( n==1 .and. mod(msg,2)==0) go to 810
+!
+!  compute scale matrix
+!
+  do i=1,n
+    if ( typsiz(i)==0.) typsiz(i)=1.0E+00
+    if ( typsiz(i)<0.) typsiz(i)=-typsiz(i)
+    sx(i)=1.0/typsiz(i)
+  end do
+!
+!  check maximum step size
+!
+  if (stepmx > 0.0) go to 20
+  stpsiz = 0.0E+00
+  do i = 1, n
+     stpsiz = stpsiz + x(i)*x(i)*sx(i)*sx(i)
+  end do
+
+  stpsiz = sqrt(stpsiz)
+
+  stepmx = max(1.0e3*stpsiz, 1.0e3)
+   20 continue
+!
+! check function scale
+!
+  if ( fscale==0.) fscale=1.0E+00
+  if ( fscale<0.) fscale=-fscale
+!
+! check gradient tolerance
+!
+  if ( gradtl<0.) go to 815
+!
+! check iteration limit
+!
+  if ( itnlim<=0) go to 820
+!
+! check number of digits of accuracy in function fcn
+!
+  if ( ndigit==0) go to 825
+  if ( ndigit<0) ndigit=-log10(epsm)
+!
+! check trust region radius
+!
+  if ( dlt<=0.) dlt=-1.0E+00
+  if (dlt > stepmx) dlt = stepmx
+  return
+!
+! error exits
+!
+  805 write(ipr,901) n
+  msg=-1
+  go to 895
+  810 write(ipr,902)
+  msg=-2
+  go to 895
+  815 write(ipr,903) gradtl
+  msg=-3
+  go to 895
+  820 write(ipr,904) itnlim
+  msg=-4
+  go to 895
+  825 write(ipr,905) ndigit
+  msg=-5
+  go to 895
+  830 write(ipr,906) msg,iagflg
+  msg=-6
+  go to 895
+  835 write(ipr,907) msg,iahflg
+  msg=-7
+  895 return
+  901 format('0optchk    illegal dimension, n=',i5)
+  902 format('0optchk    +++ warning +++  this package is inefficient', &
+    'for problems of size n=1.'/ &
+    ' optchk    check installation libraries for more appropriate routines.'/ &
+    ' optchk    if none, set msg and resubmit.')
+  903 format('0optchk    illegal tolerance.  gradtl=',e20.13)
+  904 format('0optchk    illegal iteration limit.  itnlim=',i5)
+  905 format('0optchk    minimization function has no good digits.', &
+     'ndigit=',i5)
+  906 format('0optchk    user requests that analytic gradient be', &
+     ' accepted as properly coded (msg=',i5, '),'/ &
+     ' optchk    but analytic gradient not supplied (iagflg=',i5, ').')
+  907 format('0optchk    user requests that analytic hessian be', &
+     ' accepted as properly coded (msg=',i5, '),'/ &
+     ' optchk    but analytic hessian not supplied(iahflg=',i5, ').')
+end
+subroutine optdrv(nr,n,x,fcn,d1fcn,d2fcn,typsiz,fscale,method,iexp,msg, &
+  ndigit,itnlim,iagflg,iahflg,ipr,dlt,gradtl,stepmx,steptl,xpls,fpls,gpls, &
+  itrmcd,a,udiag,g,p,sx,wrk0,wrk1,wrk2,wrk3)
+!
+!*******************************************************************************
+!
+!! OPTDRV is a driver for the nonlinear optimization package.
+!
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! x(n)         --> on entry: estimate to a root of fcn
+! fcn          --> name of subroutine to evaluate optimization function
+!                  must be declared external in calling routine
+!                            fcn: r(n) --> r(1)
+! d1fcn        --> (optional) name of subroutine to evaluate gradient
+!                  of fcn.  must be declared external in calling routine
+! d2fcn        --> (optional) name of subroutine to evaluate hessian of
+!                  of fcn.  must be declared external in calling routine
+! typsiz(n)    --> typical size for each component of x
+! fscale       --> estimate of scale of objective function
+! method       --> algorithm to use to solve minimization problem
+!                    =1 line search
+!                    =2 double dogleg
+!                    =3 more-hebdon
+! iexp         --> =1 if optimization function fcn is expensive to
+!                  evaluate, =0 otherwise.  if set then hessian will
+!                  be evaluated by secant update instead of
+!                  analytically or by finite differences
+! msg         <--> on input:  (>0) message to inhibit certain
+!                    automatic checks
+!                  on output: (<0) error code; =0 no error
+! ndigit       --> number of good digits in optimization function fcn
+! itnlim       --> maximum number of allowable iterations
+! iagflg       --> =1 if analytic gradient supplied
+! iahflg       --> =1 if analytic hessian supplied
+! ipr          --> device to which to send output
+! dlt          --> trust region radius
+! gradtl       --> tolerance at which gradient considered close
+!                  enough to zero to terminate algorithm
+! stepmx       --> maximum allowable step size
+! steptl       --> relative step size at which successive iterates
+!                  considered close enough to terminate algorithm
+! xpls(n)     <--> on exit:  xpls is local minimum
+! fpls        <--> on exit:function value at solution, xpls
+! gpls(n)     <--> on exit:  gradient at solution xpls
+! itrmcd      <--  termination code
+! a(n,n)       --> workspace for hessian (or estimate)
+!                  and its cholesky decomposition
+! udiag(n)     --> workspace [for diagonal of hessian]
+! g(n)         --> workspace (for gradient at current iterate)
+! p(n)         --> workspace for step
+! sx(n)        --> workspace (for diagonal scaling matrix)
+! wrk0(n)      --> workspace
+! wrk1(n)      --> workspace
+! wrk2(n)      --> workspace
+! wrk3(n)      --> workspace
+!
+!
+! internal variables
+!
+! analtl           tolerance for comparison of estimated and
+!                  analytical gradients and hessians
+! epsm             machine epsilon
+! f              function value: fcn(x)
+! itncnt           current iteration, k
+! rnf              relative noise in optimization function fcn.
+!                       noise=10.**(-ndigit)
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real amu
+  real amusav
+  real analtl
+  real dlpsav
+  real dlt
+  real dltp
+  real dltsav
+  real epsm
+  real f
+  real fpls
+  real fscale
+  real g(n)
+  real gpls(n)
+  real gradtl
+  integer i
+  integer iagflg
+  integer iahflg
+  integer icscmx
+  integer iexp
+  integer ipr
+  integer iretcd
+  integer itncnt
+  integer itnlim
+  integer itrmcd
+  integer method
+  integer msg
+  logical mxtake
+  integer ndigit
+  logical noupdt
+  real p(n)
+  real phi
+  real phip0
+  real phisav
+  real phpsav
+  real r1mach
+  real rnf
+  real stepmx
+  real steptl
+  real sx(n)
+  real typsiz(n)
+  real udiag(n)
+  real wrk
+  real wrk0(n)
+  real wrk1(n)
+  real wrk2(n)
+  real wrk3(n)
+  real x(n)
+  real xpls(n)
+!
+  external fcn,d1fcn,d2fcn
+!
+! initialization
+!
+  p(1:n) = 0.0E+00
+  itncnt=0
+  iretcd=-1
+  epsm=r1mach(4)
+
+  call optchk(n,x,typsiz,sx,fscale,gradtl,itnlim,ndigit,epsm, &
+    dlt,method,iexp,iagflg,iahflg,stepmx,msg,ipr)
+  if ( msg<0) return
+
+  rnf=max(10.0**(-ndigit),epsm)
+
+  analtl=max(1.0e-2,sqrt(rnf))
+
+  if ( mod(msg/8,2)==1) go to 15
+  write(ipr,901)
+  write(ipr,900) (typsiz(i),i=1,n)
+  write(ipr,902)
+  write(ipr,900) (sx(i),i=1,n)
+  write(ipr,903) fscale
+  write(ipr,904) ndigit,iagflg,iahflg,iexp,method,itnlim,epsm
+  write(ipr,905) stepmx,steptl,gradtl,dlt,rnf,analtl
+   15 continue
+!
+! evaluate fcn(x)
+!
+  call fcn(n,x,f)
+!
+! evaluate analytic or finite difference gradient and check analytic
+! gradient, if requested.
+!
+  if (iagflg /= 1) then
+
+    call fstofd (1, 1, n, x, fcn, f, g, sx, rnf, wrk, 1)
+
+  else
+
+    call d1fcn (n, x, g)
+
+    if ( mod(msg/2,2) /= 1) then
+      call grdchk (n, x, fcn, f, g, typsiz, sx, fscale, rnf, analtl, wrk1, &
+        msg, ipr)
+      if (msg < 0) return
+    end if
+
+  end if
+
+  call optstp(n,x,f,g,wrk1,itncnt,icscmx,itrmcd,gradtl,steptl,sx,fscale, &
+    itnlim,iretcd,mxtake,ipr,msg)
+
+  if ( itrmcd/=0) go to 700
+
+  if ( iexp/=1) go to 80
+!
+! if optimization function expensive to evaluate (iexp=1), then
+! hessian will be obtained by secant updates.  get initial hessian.
+!
+  call hsnint(nr,n,a,sx,method)
+  go to 90
+   80 continue
+!
+! evaluate analytic or finite difference hessian and check analytic
+! hessian if requested (only if user-supplied analytic hessian
+! routine d2fcn fills only lower triangular part and diagonal of a).
+!
+  if (iahflg == 1) go to 82
+
+     if (iagflg == 1) then
+       call fstofd (nr, n, n, x, d1fcn, g, a, sx, rnf, wrk1, 3)
+     else
+       call sndofd (nr, n, x, fcn, f, a, sx, rnf, wrk1, wrk2)
+     end if
+
+     go to 88
+!
+!     else
+   82    if (mod(msg/4,2)==0) go to 85
+!        if (mod(msg/4, 2) == 1)
+!        then
+        call d2fcn (nr, n, x, a)
+        go to 88
+!
+!        else
+   85     continue
+
+          call heschk (nr, n, x, fcn, d1fcn, d2fcn, f, g, a, typsiz, &
+            sx, rnf, analtl, iagflg, udiag, wrk1, wrk2, msg, ipr)
+!
+!           heschk evaluates d2fcn and checks it against the finite
+!           difference hessian which it calculates by calling fstofd
+!           (if iagflg == 1) or sndofd (otherwise).
+!
+        if (msg < 0) return
+   88 continue
+
+   90 continue
+
+      if ( mod(msg/8,2)==0) then
+        call result(nr,n,x,f,g,a,p,itncnt,1,ipr)
+      end if
+!
+! iteration
+!
+  100 itncnt=itncnt+1
+!
+!  find perturbed local model hessian and its ll+ decomposition
+!  (skip this step if line search or dogstep techniques being used with
+!  secant updates.  cholesky decomposition l already obtained from
+!  secfac.)
+!
+  if ( iexp==1 .and. method/=3) go to 105
+  103   call chlhsn(nr,n,a,epsm,sx,udiag)
+  105 continue
+!
+! solve for newton step:  ap=-g
+!
+  wrk1(1:n) = - g(1:n)
+
+  call lltslv(nr,n,a,p,wrk1)
+!
+! decide whether to accept newton step  xpls=x + p
+! or to choose xpls by a global strategy.
+!
+  if (iagflg /= 0 .or. method == 1) go to 111
+  dltsav = dlt
+
+  if ( method /= 2 ) then
+    amusav = amu
+    dlpsav = dltp
+    phisav = phi
+    phpsav = phip0
+  end if
+
+  111 continue
+
+  if ( method==1) then
+    call lnsrch(n,x,f,g,p,xpls,fpls,fcn,mxtake,iretcd, &
+      stepmx,steptl,sx,ipr)
+  end if
+
+  if ( method==2) then
+    call dogdrv(nr,n,x,f,g,a,p,xpls,fpls,fcn,sx,stepmx, &
+      steptl,dlt,iretcd,mxtake,wrk0,wrk1,wrk2,wrk3,ipr)
+  end if
+
+  if ( method==3) then
+    call hookdr(nr,n,x,f,g,a,udiag,p,xpls,fpls,fcn,sx,stepmx, &
+      steptl,dlt,iretcd,mxtake,amu,dltp,phi,phip0,wrk0, &
+      wrk1,wrk2,epsm,itncnt,ipr)
+  end if
+!
+! if could not find satisfactory step and forward difference
+! gradient was used, retry using central difference gradient.
+!
+  if ( iretcd /= 1 .or. iagflg /= 0 ) then
+    go to 112
+  end if
+!
+!  set iagflg for central differences
+!
+     iagflg = -1
+     write(ipr,906) itncnt
+     call fstocd (n, x, fcn, sx, rnf, g)
+     if (method == 1) go to 105
+     dlt = dltsav
+     if (method == 2) go to 105
+     amu = amusav
+     dltp = dlpsav
+     phi = phisav
+     phip0 = phpsav
+     go to 103
+!     end if
+!
+! calculate step for output
+!
+  112 continue
+
+  p(1:n) = xpls(1:n) - x(1:n)
+!
+! calculate gradient at xpls
+!
+  if (iagflg == (-1)) go to 116
+  if (iagflg == 0) go to 118
+!
+! analytic gradient
+  call d1fcn (n, xpls, gpls)
+  go to 120
+!
+! central difference gradient
+  116 call fstocd (n, xpls, fcn, sx, rnf, gpls)
+  go to 120
+!
+! forward difference gradient
+  118 call fstofd (1, 1, n, xpls, fcn, fpls, gpls, sx, rnf, wrk, 1)
+  120 continue
+!
+! check whether stopping criteria satisfied
+!
+  call optstp(n,xpls,fpls,gpls,x,itncnt,icscmx,itrmcd,gradtl,steptl,sx,&
+    fscale,itnlim,iretcd,mxtake,ipr,msg)
+  if ( itrmcd/=0) go to 690
+!
+! evaluate hessian at xpls
+!
+  if ( iexp==0) go to 130
+
+  if ( method==3) then
+     call secunf(nr,n,x,g,a,udiag,xpls,gpls,epsm,itncnt,rnf, &
+       iagflg,noupdt,wrk1,wrk2,wrk3)
+  end if
+
+  if ( method/=3) then
+    call secfac(nr,n,x,g,a,xpls,gpls,epsm,itncnt,rnf,iagflg, &
+      noupdt,wrk0,wrk1,wrk2,wrk3)
+  end if
+
+  go to 150
+  130 if ( iahflg==1) go to 140
+
+  if ( iagflg==1) then
+    call fstofd(nr,n,n,xpls,d1fcn,gpls,a,sx,rnf,wrk1,3)
+  else
+    call sndofd(nr,n,xpls,fcn,fpls,a,sx,rnf,wrk1,wrk2)
+  end if
+
+  go to 150
+  140 call d2fcn(nr,n,xpls,a)
+  150 continue
+
+  if ( mod(msg/16,2)==1) then
+    call result(nr,n,xpls,fpls,gpls,a,p,itncnt,1,ipr)
+  end if
+!
+! x <-- xpls  and  g <-- gpls  and  f <-- fpls
+!
+  f=fpls
+  x(1:n)=xpls(1:n)
+  g(1:n)=gpls(1:n)
+
+  go to 100
+!
+! termination
+!
+! reset xpls,fpls,gpls,  if previous iterate solution
+!
+  690 if ( itrmcd/=3) go to 710
+  700 continue
+
+  fpls=f
+  xpls(1:n)=x(1:n)
+  gpls(1:n)=g(1:n)
+!
+! print results
+!
+  710 continue
+
+  if ( mod(msg/8,2)==0) then
+    call result(nr,n,xpls,fpls,gpls,a,p,itncnt,0,ipr)
+  end if
+
+  msg=0
+  return
+!
+  900 format(' optdrv       ',5(e20.13,3x))
+  901 format('0optdrv    typical x')
+  902 format(' optdrv    diagonal scaling matrix for x')
+  903 format(' optdrv    typical f =',e20.13)
+  904 format('0optdrv    number of good digits in fcn=',i5/ &
+             ' optdrv    gradient flag  =',i5,'   (=1 if analytic', &
+             ' gradient supplied)'/ &
+             ' optdrv    hessian flag   =',i5,'   (=1 if analytic', &
+             ' hessian supplied)'/ &
+             ' optdrv    expense flag   =',i5, '   (=1 if', &
+             ' minimization function expensive to evaluate)'/ &
+             ' optdrv    method to use  =',i5,'   (=1,2,3 for line', &
+             ' search, double dogleg, more-hebdon respectively)'/ &
+             ' optdrv    iteration limit=',i5/ &
+             ' optdrv    machine epsilon=',e20.13)
+
+  905 format('0optdrv    maximum step size =',e20.13/ &
+             ' optdrv    step tolerance    =',e20.13/ &
+             ' optdrv    gradient tolerance=',e20.13/ &
+             ' optdrv    trust reg radius  =',e20.13/ &
+             ' optdrv    rel noise in fcn  =',e20.13/ &
+             ' optdrv    anal-fd tolerance =',e20.13)
+
+  906 format(' optdrv    shift from forward to central differences', &
+     ' in iteration ', i5)
+end
+subroutine optif0(nr,n,x,fcn,xpls,fpls,gpls,itrmcd,a,wrk)
+!
+!*******************************************************************************
+!
+!! OPTIF0 provides simplest interface to minimization package.
+!
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! x(n)         --> initial estimate of minimum
+! fcn          --> name of routine to evaluate minimization function.
+!                  must be declared external in calling routine.
+! xpls(n)     <--  local minimum
+! fpls        <--function value at local minimum xpls
+! gpls(n)     <--  gradient at local minimum xpls
+! itrmcd      <--  termination code
+! a(n,n)       --> workspace
+! wrk(n,9)     --> workspace
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real dlt
+  real fscale
+  real fpls
+  real gpls(n)
+  real gradtl
+  integer iagflg
+  integer iahflg
+  integer iexp
+  integer ipr
+  integer itnlim
+  integer itrmcd
+  integer method
+  integer msg
+  integer ndigit
+  real stepmx
+  real steptl
+  real wrk(nr,9)
+  real x(n)
+  real xpls(n)
+!
+  external fcn,d1fcn,d2fcn
+!
+! equivalence wrk(n,1) = udiag(n)
+!             wrk(n,2) = g(n)
+!             wrk(n,3) = p(n)
+!             wrk(n,4) = typsiz(n)
+!             wrk(n,5) = sx(n)
+!             wrk(n,6) = wrk0(n)
+!             wrk(n,7) = wrk1(n)
+!             wrk(n,8) = wrk2(n)
+!             wrk(n,9) = wrk3(n)
+!
+  call dfault(n,x,wrk(1,4),fscale,method,iexp,msg,ndigit, &
+    itnlim,iagflg,iahflg,ipr,dlt,gradtl,stepmx,steptl)
+
+  call optdrv(nr,n,x,fcn,d1fcn,d2fcn,wrk(1,4),fscale, &
+    method,iexp,msg,ndigit,itnlim,iagflg,iahflg,ipr, &
+    dlt,gradtl,stepmx,steptl,xpls,fpls,gpls,itrmcd, &
+    a,wrk(1,1),wrk(1,2),wrk(1,3),wrk(1,5),wrk(1,6), &
+    wrk(1,7),wrk(1,8),wrk(1,9))
+
+  return
+end
+subroutine optstp(n,xpls,fpls,gpls,x,itncnt,icscmx, &
+  itrmcd,gradtl,steptl,sx,fscale,itnlim,iretcd,mxtake,ipr,msg)
+!
+!*******************************************************************************
+!
+!! OPTSTP: unconstrained minimization stopping criteria
+!
+!
+! find whether the algorithm should terminate, due to any
+! of the following:
+! 1) problem solved within user tolerance
+! 2) convergence within user tolerance
+! 3) iteration limit reached
+! 4) divergence or too restrictive maximum step (stepmx) suspected
+!
+!
+! parameters
+!
+! n            --> dimension of problem
+! xpls(n)      --> new iterate x[k]
+! fpls         --> function value at new iterate f(xpls)
+! gpls(n)      --> gradient at new iterate, g(xpls), or approximate
+! x(n)         --> old iterate x[k-1]
+! itncnt       --> current iteration k
+! icscmx      <--> number consecutive steps >= stepmx
+!                  [retain value between successive calls]
+! itrmcd      <--  termination code
+! gradtl       --> tolerance at which relative gradient considered close
+!                  enough to zero to terminate algorithm
+! steptl       --> relative step size at which successive iterates
+!                  considered close enough to terminate algorithm
+! sx(n)        --> diagonal scaling matrix for x
+! fscale       --> estimate of scale of objective function
+! itnlim       --> maximum number of allowable iterations
+! iretcd       --> return code
+! mxtake       --> boolean flag indicating step of maximum length used
+! ipr          --> device to which to send output
+! msg          --> if msg includes a term 8, suppress output
+!
+!
+  integer n
+!
+  real d
+  real fpls
+  real fscale
+  real gpls(n)
+  real gradtl
+  integer i
+  integer icscmx
+  integer ipr
+  integer iretcd
+  integer itncnt
+  integer itnlim
+  integer itrmcd
+  integer jtrmcd
+  integer msg
+  logical mxtake
+  real relgrd
+  real relstp
+  real rgx
+  real rsx
+  real steptl
+  real sx(n)
+  real x(n)
+  real xpls(n)
+!
+  itrmcd=0
+!
+! last global step failed to locate a point lower than x.
+!
+  if ( iretcd == 1 ) then
+    jtrmcd=3
+    go to 600
+  end if
+!
+!  Find direction in which relative gradient maximum.
+!  Check whether within tolerance
+!
+  d=max(abs(fpls),fscale)
+  rgx=0.0E+00
+
+  do i=1,n
+    relgrd=abs(gpls(i))*max(abs(xpls(i)),1./sx(i))/d
+    rgx=max(rgx,relgrd)
+  end do
+
+  jtrmcd=1
+  if ( rgx<=gradtl) go to 600
+
+  if ( itncnt==0) return
+!
+! find direction in which relative stepsize maximum
+! check whether within tolerance.
+!
+  rsx=0.0E+00
+  do i=1,n
+    relstp=abs(xpls(i)-x(i))/max(abs(xpls(i)),1./sx(i))
+    rsx=max(rsx,relstp)
+  end do
+
+  jtrmcd=2
+  if ( rsx<=steptl) go to 600
+!
+! check iteration limit
+!
+  jtrmcd=4
+  if ( itncnt>=itnlim) go to 600
+!
+! check number of consecutive steps \ stepmx
+!
+  if ( .not.mxtake) then
+    icscmx=0
+    return
+  else
+    if (mod(msg/8,2) == 0) write(ipr,900)
+    icscmx=icscmx+1
+    if ( icscmx<5) return
+    jtrmcd=5
+  end if
+!
+! print termination code
+!
+  600 itrmcd=jtrmcd
+  if (mod(msg/8,2) == 0) go to(601,602,603,604,605), itrmcd
+  go to 700
+  601 write(ipr,901)
+  go to 700
+  602 write(ipr,902)
+  go to 700
+  603 write(ipr,903)
+  go to 700
+  604 write(ipr,904)
+  go to 700
+  605 write(ipr,905)
+!
+  700 return
+!
+  900 format('0optstp    step of maximum length (stepmx) taken')
+  901 format('0optstp    relative gradient close to zero.'/ &
+             ' optstp    current iterate is probably solution.')
+  902 format('0optstp    successive iterates within tolerance.'/ &
+             ' optstp    current iterate is probably solution')
+  903 format('0optstp    last global step failed to locate a point', &
+             ' lower than x.'/ &
+             ' optstp    either x is an approximate local minimum', &
+             ' of the function',/ &
+             ' optstp    the function is too non-linear for this algorithm,'/ &
+             ' optstp    or steptl is too large.')
+  904 format('optstp    iteration limit exceeded.'/'optstp    algorithm failed.')
+  905 format('0optstp    maximum step size exceeded 5 consecutive times.'/ &
+             ' optstp    either the function is unbounded below',/ &
+             ' optstp    becomes asymptotic to a finite value', &
+             ' from above in some direction',/ &
+             ' optstp    or stepmx is too small')
+end
+subroutine passb ( nac, ido, ip, l1, idl1, cc, c1, c2, ch, ch2, wa )
+!
+!*******************************************************************************
+!
+!! PASSB is a lower level routine used by CFFTB1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer idl1
+  integer ido
+  integer ip
+  integer l1
+!
+  real c1(ido,l1,ip)
+  real c2(idl1,ip)
+  real cc(ido,ip,l1)
+  real ch(ido,l1,ip)
+  real ch2(idl1,ip)
+  integer i
+  integer idij
+  integer idj
+  integer idl
+  integer idlj
+  integer idp
+  integer ik
+  integer inc
+  integer ipph
+  integer j
+  integer jc
+  integer k
+  integer l
+  integer lc
+  integer nac
+  integer nt
+  real wa(*)
+  real wai
+  real war
+!
+  nt = ip * idl1
+  ipph = ( ip + 1 ) / 2
+  idp = ip * ido
+
+  if ( ido >= l1 ) then
+
+    do j = 2, ipph
+      jc = ip + 2 - j
+      do k = 1, l1
+        ch(1:ido,k,j)  = cc(1:ido,j,k) + cc(1:ido,jc,k)
+        ch(1:ido,k,jc) = cc(1:ido,j,k) - cc(1:ido,jc,k)
+      end do
+    end do
+
+    ch(1:ido,1:l1,1) = cc(1:ido,1,1:l1)
+
+  else
+
+    do j = 2, ipph
+      jc = ip + 2 - j
+      do i = 1, ido
+        ch(i,1:l1,j)  = cc(i,j,1:l1) + cc(i,jc,1:l1)
+        ch(i,1:l1,jc) = cc(i,j,1:l1) - cc(i,jc,1:l1)
+      end do
+    end do
+
+    ch(1:ido,1:l1,1) = cc(1:ido,1,1:l1)
+
+  end if
+
+  idl = 2 - ido
+  inc = 0
+
+  do l = 2, ipph
+
+    lc = ip + 2 - l
+    idl = idl + ido
+
+    do ik = 1, idl1
+      c2(ik,l) = ch2(ik,1) + wa(idl-1) * ch2(ik,2)
+      c2(ik,lc) =            wa(idl)   * ch2(ik,ip)
+    end do
+
+    idlj = idl
+    inc = inc + ido
+
+    do j = 3, ipph
+
+      jc = ip + 2 - j
+      idlj = idlj + inc
+      if ( idlj > idp ) then
+        idlj = idlj - idp
+      end if
+
+      war = wa(idlj-1)
+      wai = wa(idlj)
+
+      do ik = 1, idl1
+        c2(ik,l)  = c2(ik,l)  + war * ch2(ik,j)
+        c2(ik,lc) = c2(ik,lc) + wai * ch2(ik,jc)
+      end do
+
+    end do
+
+  end do
+
+  do j = 2, ipph
+    ch2(1:idl1,1) = ch2(1:idl1,1) + ch2(1:idl1,j)
+  end do
+
+  do j = 2, ipph
+    jc = ip + 2 - j
+    do ik = 2, idl1, 2
+      ch2(ik-1,j)  = c2(ik-1,j) - c2(ik,jc)
+      ch2(ik-1,jc) = c2(ik-1,j) + c2(ik,jc)
+      ch2(ik,j)    = c2(ik,j)   + c2(ik-1,jc)
+      ch2(ik,jc)   = c2(ik,j)   - c2(ik-1,jc)
+    end do
+  end do
+
+  nac = 1
+
+  if ( ido == 2 ) then
+    return
+  end if
+
+  nac = 0
+  c2(1:idl1,1) = ch2(1:idl1,1)
+  c1(1:2,1:l1,2:ip) = ch(1:2,1:l1,2:ip)
+
+  if ( ( ido / 2 ) <= l1 ) then
+
+    idij = 0
+    do j = 2, ip
+      idij = idij + 2
+      do i = 4, ido, 2
+        idij = idij + 2
+        c1(i-1,1:l1,j) = wa(idij-1) * ch(i-1,1:l1,j) - wa(idij) * ch(i,1:l1,j)
+        c1(i,1:l1,j)   = wa(idij-1) * ch(i,1:l1,j)   + wa(idij) * ch(i-1,1:l1,j)
+      end do
+    end do
+
+  else
+
+    idj = 2 - ido
+
+    do j = 2, ip
+      idj = idj + ido
+      do k = 1, l1
+        idij = idj
+        do i = 4, ido, 2
+          idij = idij + 2
+          c1(i-1,k,j) = wa(idij-1) * ch(i-1,k,j) - wa(idij) * ch(i,k,j)
+          c1(i,k,j)   = wa(idij-1) * ch(i,k,j)   + wa(idij) * ch(i-1,k,j)
+        end do
+      end do
+    end do
+
+  end if
+
+  return
+end
+subroutine passb2 ( ido, l1, cc, ch, wa1 )
+!
+!*******************************************************************************
+!
+!! PASSB2 is a lower level routine used by CFFTB1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,2,l1)
+  real ch(ido,l1,2)
+  integer i
+  integer k
+  real ti2
+  real tr2
+  real wa1(ido)
+!
+  if ( ido <= 2 ) then
+
+    ch(1,1:l1,1) = cc(1,1,1:l1) + cc(1,2,1:l1)
+    ch(1,1:l1,2) = cc(1,1,1:l1) - cc(1,2,1:l1)
+    ch(2,1:l1,1) = cc(2,1,1:l1) + cc(2,2,1:l1)
+    ch(2,1:l1,2) = cc(2,1,1:l1) - cc(2,2,1:l1)
+
+  else
+
+    do k = 1, l1
+      do i = 2, ido, 2
+
+        ch(i-1,k,1) = cc(i-1,1,k) + cc(i-1,2,k)
+        tr2         = cc(i-1,1,k) - cc(i-1,2,k)
+        ch(i,k,1)   = cc(i,1,k)   + cc(i,2,k)
+        ti2         = cc(i,1,k)   - cc(i,2,k)
+
+        ch(i,k,2)   = wa1(i-1) * ti2 + wa1(i) * tr2
+        ch(i-1,k,2) = wa1(i-1) * tr2 - wa1(i) * ti2
+
+      end do
+    end do
+
+  end if
+
+  return
+end
+subroutine passb3 ( ido, l1, cc, ch, wa1, wa2 )
+!
+!*******************************************************************************
+!
+!! PASSB3 is a lower level routine used by CFFTB1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,3,l1)
+  real ch(ido,l1,3)
+  real ci2
+  real ci3
+  real cr2
+  real cr3
+  real di2
+  real di3
+  real dr2
+  real dr3
+  integer i
+  integer k
+  real, parameter :: taui = 0.866025403784439E+00
+  real, parameter :: taur = -0.5E+00
+  real ti2
+  real tr2
+  real wa1(ido)
+  real wa2(ido)
+!
+  if ( ido == 2 ) then
+
+    do k = 1, l1
+
+      tr2 = cc(1,2,k) + cc(1,3,k)
+      cr2 = cc(1,1,k) + taur * tr2
+      ch(1,k,1) = cc(1,1,k) + tr2
+
+      ti2 = cc(2,2,k) + cc(2,3,k)
+      ci2 = cc(2,1,k) + taur * ti2
+      ch(2,k,1) = cc(2,1,k) + ti2
+
+      cr3 = taui * ( cc(1,2,k) - cc(1,3,k) )
+      ci3 = taui * ( cc(2,2,k) - cc(2,3,k) )
+
+      ch(1,k,2) = cr2 - ci3
+      ch(1,k,3) = cr2 + ci3
+      ch(2,k,2) = ci2 + cr3
+      ch(2,k,3) = ci2 - cr3
+
+    end do
+
+  else
+
+    do k = 1, l1
+      do i = 2, ido, 2
+
+        tr2 = cc(i-1,2,k) + cc(i-1,3,k)
+        cr2 = cc(i-1,1,k) + taur * tr2
+        ch(i-1,k,1) = cc(i-1,1,k) + tr2
+
+        ti2 = cc(i,2,k) + cc(i,3,k)
+        ci2 = cc(i,1,k) + taur * ti2
+        ch(i,k,1) = cc(i,1,k) + ti2
+
+        cr3 = taui * ( cc(i-1,2,k) - cc(i-1,3,k) )
+        ci3 = taui * ( cc(i,2,k) - cc(i,3,k) )
+
+        dr2 = cr2 - ci3
+        dr3 = cr2 + ci3
+        di2 = ci2 + cr3
+        di3 = ci2 - cr3
+
+        ch(i,k,2)   = wa1(i-1) * di2 + wa1(i) * dr2
+        ch(i-1,k,2) = wa1(i-1) * dr2 - wa1(i) * di2
+        ch(i,k,3)   = wa2(i-1) * di3 + wa2(i) * dr3
+        ch(i-1,k,3) = wa2(i-1) * dr3 - wa2(i) * di3
+
+      end do
+    end do
+
+  end if
+
+  return
+end
+subroutine passb4 ( ido, l1, cc, ch, wa1, wa2, wa3 )
+!
+!*******************************************************************************
+!
+!! PASSB4 is a lower level routine used by CFFTB1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,4,l1)
+  real ch(ido,l1,4)
+  real ci1
+  real ci2
+  real ci3
+  real ci4
+  real cr1
+  real cr2
+  real cr3
+  real cr4
+  integer i
+  integer k
+  real ti1
+  real ti2
+  real ti3
+  real ti4
+  real tr1
+  real tr2
+  real tr3
+  real tr4
+  real wa1(ido)
+  real wa2(ido)
+  real wa3(ido)
+!
+  if ( ido == 2 ) then
+
+    do k = 1, l1
+
+      ti1 = cc(2,1,k) - cc(2,3,k)
+      ti2 = cc(2,1,k) + cc(2,3,k)
+      tr4 = cc(2,4,k) - cc(2,2,k)
+      ti3 = cc(2,2,k) + cc(2,4,k)
+      tr1 = cc(1,1,k) - cc(1,3,k)
+      tr2 = cc(1,1,k) + cc(1,3,k)
+      ti4 = cc(1,2,k) - cc(1,4,k)
+      tr3 = cc(1,2,k) + cc(1,4,k)
+
+      ch(1,k,1) = tr2 + tr3
+      ch(1,k,3) = tr2 - tr3
+      ch(2,k,1) = ti2 + ti3
+      ch(2,k,3) = ti2 - ti3
+      ch(1,k,2) = tr1 + tr4
+      ch(1,k,4) = tr1 - tr4
+      ch(2,k,2) = ti1 + ti4
+      ch(2,k,4) = ti1 - ti4
+
+    end do
+
+  else
+
+    do k = 1, l1
+      do i = 2, ido, 2
+
+        ti1 = cc(i,1,k) - cc(i,3,k)
+        ti2 = cc(i,1,k) + cc(i,3,k)
+        ti3 = cc(i,2,k) + cc(i,4,k)
+        tr4 = cc(i,4,k) - cc(i,2,k)
+
+        tr1 = cc(i-1,1,k) - cc(i-1,3,k)
+        tr2 = cc(i-1,1,k) + cc(i-1,3,k)
+        ti4 = cc(i-1,2,k) - cc(i-1,4,k)
+        tr3 = cc(i-1,2,k) + cc(i-1,4,k)
+
+        ch(i-1,k,1) = tr2 + tr3
+        cr3 = tr2 - tr3
+        ch(i,k,1) = ti2 + ti3
+        ci3 = ti2 - ti3
+
+        cr2 = tr1 + tr4
+        cr4 = tr1 - tr4
+        ci2 = ti1 + ti4
+        ci4 = ti1 - ti4
+
+        ch(i-1,k,2) = wa1(i-1) * cr2 - wa1(i) * ci2
+        ch(i,k,2)   = wa1(i-1) * ci2 + wa1(i) * cr2
+        ch(i-1,k,3) = wa2(i-1) * cr3 - wa2(i) * ci3
+        ch(i,k,3)   = wa2(i-1) * ci3 + wa2(i) * cr3
+        ch(i-1,k,4) = wa3(i-1) * cr4 - wa3(i) * ci4
+        ch(i,k,4)   = wa3(i-1) * ci4 + wa3(i) * cr4
+
+      end do
+    end do
+
+  end if
+
+  return
+end
+subroutine passb5 ( ido, l1, cc, ch, wa1, wa2, wa3, wa4 )
+!
+!*******************************************************************************
+!
+!! PASSB5 is a lower level routine used by CFFTB1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,5,l1)
+  real ch(ido,l1,5)
+  real ci2
+  real ci3
+  real ci4
+  real ci5
+  real cr2
+  real cr3
+  real cr4
+  real cr5
+  real di2
+  real di3
+  real di4
+  real di5
+  real dr2
+  real dr3
+  real dr4
+  real dr5
+  integer i
+  integer k
+  real, parameter :: ti11 = 0.951056516295154E+00
+  real, parameter :: ti12 = 0.587785252292473E+00
+  real ti2
+  real ti3
+  real ti4
+  real ti5
+  real, parameter :: tr11 = 0.309016994374947E+00
+  real, parameter :: tr12 = -0.809016994374947E+00
+  real tr2
+  real tr3
+  real tr4
+  real tr5
+  real wa1(ido)
+  real wa2(ido)
+  real wa3(ido)
+  real wa4(ido)
+!
+  if ( ido == 2 ) then
+
+    do k = 1, l1
+
+      ti5 = cc(2,2,k) - cc(2,5,k)
+      ti2 = cc(2,2,k) + cc(2,5,k)
+      ti4 = cc(2,3,k) - cc(2,4,k)
+      ti3 = cc(2,3,k) + cc(2,4,k)
+      tr5 = cc(1,2,k) - cc(1,5,k)
+      tr2 = cc(1,2,k) + cc(1,5,k)
+      tr4 = cc(1,3,k) - cc(1,4,k)
+      tr3 = cc(1,3,k) + cc(1,4,k)
+
+      ch(1,k,1) = cc(1,1,k) + tr2 + tr3
+      ch(2,k,1) = cc(2,1,k) + ti2 + ti3
+
+      cr2 = cc(1,1,k) + tr11 * tr2 + tr12 * tr3
+      ci2 = cc(2,1,k) + tr11 * ti2 + tr12 * ti3
+      cr3 = cc(1,1,k) + tr12 * tr2 + tr11 * tr3
+      ci3 = cc(2,1,k) + tr12 * ti2 + tr11 * ti3
+
+      cr5 = ti11 * tr5 + ti12 * tr4
+      ci5 = ti11 * ti5 + ti12 * ti4
+      cr4 = ti12 * tr5 - ti11 * tr4
+      ci4 = ti12 * ti5 - ti11 * ti4
+
+      ch(1,k,2) = cr2 - ci5
+      ch(1,k,5) = cr2 + ci5
+      ch(2,k,2) = ci2 + cr5
+      ch(2,k,3) = ci3 + cr4
+      ch(1,k,3) = cr3 - ci4
+      ch(1,k,4) = cr3 + ci4
+      ch(2,k,4) = ci3 - cr4
+      ch(2,k,5) = ci2 - cr5
+
+    end do
+
+  else
+
+    do k = 1, l1
+      do i = 2, ido, 2
+
+        ti5 = cc(i,2,k) - cc(i,5,k)
+        ti2 = cc(i,2,k) + cc(i,5,k)
+        ti4 = cc(i,3,k) - cc(i,4,k)
+        ti3 = cc(i,3,k) + cc(i,4,k)
+
+        tr5 = cc(i-1,2,k) - cc(i-1,5,k)
+        tr2 = cc(i-1,2,k) + cc(i-1,5,k)
+        tr4 = cc(i-1,3,k) - cc(i-1,4,k)
+        tr3 = cc(i-1,3,k) + cc(i-1,4,k)
+
+        ch(i-1,k,1) = cc(i-1,1,k) + tr2 + tr3
+        ch(i,k,1)   = cc(i,1,k)   + ti2 + ti3
+
+        cr2 = cc(i-1,1,k) + tr11 * tr2 + tr12 * tr3
+        ci2 = cc(i,1,k)   + tr11 * ti2 + tr12 * ti3
+        cr3 = cc(i-1,1,k) + tr12 * tr2 + tr11 * tr3
+        ci3 = cc(i,1,k)   + tr12 * ti2 + tr11 * ti3
+
+        cr5 = ti11 * tr5 + ti12 * tr4
+        ci5 = ti11 * ti5 + ti12 * ti4
+        cr4 = ti12 * tr5 - ti11 * tr4
+        ci4 = ti12 * ti5 - ti11 * ti4
+
+        dr3 = cr3 - ci4
+        dr4 = cr3 + ci4
+        di3 = ci3 + cr4
+        di4 = ci3 - cr4
+        dr5 = cr2 + ci5
+        dr2 = cr2 - ci5
+        di5 = ci2 - cr5
+        di2 = ci2 + cr5
+
+        ch(i-1,k,2) = wa1(i-1) * dr2 - wa1(i) * di2
+        ch(i,k,2)   = wa1(i-1) * di2 + wa1(i) * dr2
+        ch(i-1,k,3) = wa2(i-1) * dr3 - wa2(i) * di3
+        ch(i,k,3)   = wa2(i-1) * di3 + wa2(i) * dr3
+        ch(i-1,k,4) = wa3(i-1) * dr4 - wa3(i) * di4
+        ch(i,k,4)   = wa3(i-1) * di4 + wa3(i) * dr4
+        ch(i-1,k,5) = wa4(i-1) * dr5 - wa4(i) * di5
+        ch(i,k,5)   = wa4(i-1) * di5 + wa4(i) * dr5
+
+      end do
+    end do
+
+  end if
+
+  return
+end
+subroutine passf ( nac, ido, ip, l1, idl1, cc, c1, c2, ch, ch2, wa )
+!
+!*******************************************************************************
+!
+!! PASSF is a lower level routine used by CFFTF1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer idl1
+  integer ido
+  integer ip
+  integer l1
+!
+  real c1(ido,l1,ip)
+  real c2(idl1,ip)
+  real cc(ido,ip,l1)
+  real ch(ido,l1,ip)
+  real ch2(idl1,ip)
+  integer i
+  integer idij
+  integer idj
+  integer idl
+  integer idlj
+  integer idp
+  integer ik
+  integer inc
+  integer ipph
+  integer j
+  integer jc
+  integer k
+  integer l
+  integer lc
+  integer nac
+  integer nt
+  real wa(*)
+  real wai
+  real war
+!
+  nt = ip * idl1
+  ipph = (ip+1) / 2
+  idp = ip * ido
+
+  if ( ido >= l1 ) then
+
+    do j = 2, ipph
+      jc = ip + 2 - j
+      ch(1:ido,1:l1,j)  = cc(1:ido,j,1:l1) + cc(1:ido,jc,1:l1)
+      ch(1:ido,1:l1,jc) = cc(1:ido,j,1:l1) - cc(1:ido,jc,1:l1)
+    end do
+
+    ch(1:ido,1:l1,1) = cc(1:ido,1,1:l1)
+
+  else
+
+    do j = 2, ipph
+      jc = ip + 2 - j
+      ch(1:ido,1:l1,j)  = cc(1:ido,j,1:l1) + cc(1:ido,jc,1:l1)
+      ch(1:ido,1:l1,jc) = cc(1:ido,j,1:l1) - cc(1:ido,jc,1:l1)
+    end do
+
+    ch(1:ido,1:l1,1) = cc(1:ido,1,1:l1)
+
+  end if
+
+  idl = 2 - ido
+  inc = 0
+
+  do l = 2, ipph
+
+    lc = ip + 2 - l
+    idl = idl + ido
+
+    do ik = 1, idl1
+      c2(ik,l)  = ch2(ik,1) + wa(idl-1) * ch2(ik,2)
+      c2(ik,lc) =           - wa(idl)   * ch2(ik,ip)
+    end do
+
+    idlj = idl
+    inc = inc + ido
+
+    do j = 3, ipph
+
+      jc = ip + 2 - j
+
+      idlj = idlj + inc
+      if ( idlj > idp ) then
+        idlj = idlj - idp
+      end if
+
+      war = wa(idlj-1)
+      wai = wa(idlj)
+
+      do ik = 1, idl1
+        c2(ik,l)  = c2(ik,l)  + war * ch2(ik,j)
+        c2(ik,lc) = c2(ik,lc) - wai * ch2(ik,jc)
+      end do
+
+    end do
+
+  end do
+
+  do j = 2, ipph
+    ch2(1:idl1,1) = ch2(1:idl1,1) + ch2(1:idl1,j)
+  end do
+
+  do j = 2, ipph
+    jc = ip + 2 - j
+    do ik = 2, idl1, 2
+      ch2(ik-1,j)  = c2(ik-1,j) - c2(ik,jc)
+      ch2(ik-1,jc) = c2(ik-1,j) + c2(ik,jc)
+      ch2(ik,j)    = c2(ik,j)   + c2(ik-1,jc)
+      ch2(ik,jc)   = c2(ik,j)   - c2(ik-1,jc)
+    end do
+  end do
+
+  if ( ido == 2 ) then
+    nac = 1
+    return
+  end if
+
+  nac = 0
+
+  c2(1:idl1,1)    = ch2(1:idl1,1)
+  c1(1,1:l1,2:ip) = ch(1,1:l1,2:ip)
+  c1(2,1:l1,2:ip) = ch(2,1:l1,2:ip)
+
+  if ( ( ido / 2 ) <= l1 ) then
+
+    idij = 0
+    do j = 2, ip
+      idij = idij + 2
+      do i = 4, ido, 2
+        idij = idij + 2
+        c1(i-1,1:l1,j) = wa(idij-1) * ch(i-1,1:l1,j) + wa(idij) * ch(i,1:l1,j)
+        c1(i,1:l1,j)   = wa(idij-1) * ch(i,1:l1,j)   - wa(idij) * ch(i-1,1:l1,j)
+      end do
+    end do
+
+  else
+
+    idj = 2 - ido
+
+    do j = 2, ip
+      idj = idj + ido
+      do k = 1, l1
+        idij = idj
+        do i = 4, ido, 2
+          idij = idij + 2
+          c1(i-1,k,j) = wa(idij-1) * ch(i-1,k,j) + wa(idij) * ch(i,k,j)
+          c1(i,k,j)   = wa(idij-1) * ch(i,k,j)   - wa(idij) * ch(i-1,k,j)
+        end do
+      end do
+    end do
+
+  end if
+
+  return
+end
+subroutine passf2 ( ido, l1, cc, ch, wa1 )
+!
+!*******************************************************************************
+!
+!! PASSF2 is a lower level routine used by CFFTF1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,2,l1)
+  real ch(ido,l1,2)
+  integer i
+  integer k
+  real ti2
+  real tr2
+  real wa1(ido)
+!
+  if ( ido <= 2 ) then
+
+    ch(1,1:l1,1) = cc(1,1,1:l1) + cc(1,2,1:l1)
+    ch(1,1:l1,2) = cc(1,1,1:l1) - cc(1,2,1:l1)
+    ch(2,1:l1,1) = cc(2,1,1:l1) + cc(2,2,1:l1)
+    ch(2,1:l1,2) = cc(2,1,1:l1) - cc(2,2,1:l1)
+
+  else
+
+    do k = 1, l1
+      do i = 2, ido, 2
+
+        ch(i-1,k,1) = cc(i-1,1,k) + cc(i-1,2,k)
+        tr2         = cc(i-1,1,k) - cc(i-1,2,k)
+
+        ch(i,k,1) = cc(i,1,k) + cc(i,2,k)
+        ti2       = cc(i,1,k) - cc(i,2,k)
+
+        ch(i,k,2)   = wa1(i-1) * ti2 - wa1(i) * tr2
+        ch(i-1,k,2) = wa1(i-1) * tr2 + wa1(i) * ti2
+
+      end do
+    end do
+
+  end if
+
+  return
+end
+subroutine passf3 ( ido, l1, cc, ch, wa1, wa2 )
+!
+!*******************************************************************************
+!
+!! PASSF3 is a lower level routine used by CFFTF1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,3,l1)
+  real ch(ido,l1,3)
+  real ci2
+  real ci3
+  real cr2
+  real cr3
+  real di2
+  real di3
+  real dr2
+  real dr3
+  integer i
+  integer k
+  real, parameter :: taui = -0.866025403784439E+00
+  real, parameter :: taur = -0.5E+00
+  real ti2
+  real tr2
+  real wa1(ido)
+  real wa2(ido)
+!
+  if ( ido == 2 ) then
+
+    do k = 1, l1
+
+      tr2 = cc(1,2,k) + cc(1,3,k)
+      cr2 = cc(1,1,k) + taur * tr2
+      ch(1,k,1) = cc(1,1,k) + tr2
+
+      ti2 = cc(2,2,k) + cc(2,3,k)
+      ci2 = cc(2,1,k) + taur * ti2
+      ch(2,k,1) = cc(2,1,k) + ti2
+
+      cr3 = taui * ( cc(1,2,k) - cc(1,3,k) )
+      ci3 = taui * ( cc(2,2,k) - cc(2,3,k) )
+
+      ch(1,k,2) = cr2 - ci3
+      ch(1,k,3) = cr2 + ci3
+      ch(2,k,2) = ci2 + cr3
+      ch(2,k,3) = ci2 - cr3
+
+    end do
+
+  else
+
+    do k = 1, l1
+      do i = 2, ido, 2
+
+        tr2 = cc(i-1,2,k) + cc(i-1,3,k)
+        cr2 = cc(i-1,1,k) + taur * tr2
+        ch(i-1,k,1) = cc(i-1,1,k) + tr2
+
+        ti2 = cc(i,2,k) + cc(i,3,k)
+        ci2 = cc(i,1,k) + taur * ti2
+        ch(i,k,1) = cc(i,1,k) + ti2
+
+        cr3 = taui * ( cc(i-1,2,k) - cc(i-1,3,k) )
+        ci3 = taui * ( cc(i,2,k)   - cc(i,3,k) )
+
+        dr2 = cr2 - ci3
+        dr3 = cr2 + ci3
+        di2 = ci2 + cr3
+        di3 = ci2 - cr3
+
+        ch(i,k,2)   = wa1(i-1) * di2 - wa1(i) * dr2
+        ch(i-1,k,2) = wa1(i-1) * dr2 + wa1(i) * di2
+        ch(i,k,3)   = wa2(i-1) * di3 - wa2(i) * dr3
+        ch(i-1,k,3) = wa2(i-1) * dr3 + wa2(i) * di3
+
+      end do
+    end do
+
+  end if
+
+  return
+end
+subroutine passf4 ( ido, l1, cc, ch, wa1, wa2, wa3 )
+!
+!*******************************************************************************
+!
+!! PASSF4 is a lower level routine used by CFFTF1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,4,l1)
+  real ch(ido,l1,4)
+  real ci1
+  real ci2
+  real ci3
+  real ci4
+  real cr1
+  real cr2
+  real cr3
+  real cr4
+  integer i
+  integer k
+  real ti1
+  real ti2
+  real ti3
+  real ti4
+  real tr1
+  real tr2
+  real tr3
+  real tr4
+  real wa1(ido)
+  real wa2(ido)
+  real wa3(ido)
+!
+  if ( ido == 2 ) then
+
+    do k = 1, l1
+
+      ti1 = cc(2,1,k) - cc(2,3,k)
+      ti2 = cc(2,1,k) + cc(2,3,k)
+      tr4 = cc(2,2,k) - cc(2,4,k)
+      ti3 = cc(2,2,k) + cc(2,4,k)
+      tr1 = cc(1,1,k) - cc(1,3,k)
+      tr2 = cc(1,1,k) + cc(1,3,k)
+      ti4 = cc(1,4,k) - cc(1,2,k)
+      tr3 = cc(1,2,k) + cc(1,4,k)
+
+      ch(1,k,1) = tr2 + tr3
+      ch(1,k,3) = tr2 - tr3
+      ch(2,k,1) = ti2 + ti3
+      ch(2,k,3) = ti2 - ti3
+      ch(1,k,2) = tr1 + tr4
+      ch(1,k,4) = tr1 - tr4
+      ch(2,k,2) = ti1 + ti4
+      ch(2,k,4) = ti1 - ti4
+
+    end do
+
+  else
+
+    do k = 1, l1
+      do i = 2, ido, 2
+
+        ti1 = cc(i,1,k)   - cc(i,3,k)
+        ti2 = cc(i,1,k)   + cc(i,3,k)
+        ti3 = cc(i,2,k)   + cc(i,4,k)
+        tr4 = cc(i,2,k)   - cc(i,4,k)
+        tr1 = cc(i-1,1,k) - cc(i-1,3,k)
+        tr2 = cc(i-1,1,k) + cc(i-1,3,k)
+        ti4 = cc(i-1,4,k) - cc(i-1,2,k)
+        tr3 = cc(i-1,2,k) + cc(i-1,4,k)
+
+        ch(i-1,k,1) = tr2 + tr3
+        cr3         = tr2 - tr3
+        ch(i,k,1)   = ti2 + ti3
+        ci3         = ti2 - ti3
+
+        cr2 = tr1 + tr4
+        cr4 = tr1 - tr4
+        ci2 = ti1 + ti4
+        ci4 = ti1 - ti4
+
+        ch(i-1,k,2) = wa1(i-1) * cr2 + wa1(i) * ci2
+        ch(i,k,2)   = wa1(i-1) * ci2 - wa1(i) * cr2
+        ch(i-1,k,3) = wa2(i-1) * cr3 + wa2(i) * ci3
+        ch(i,k,3)   = wa2(i-1) * ci3 - wa2(i) * cr3
+        ch(i-1,k,4) = wa3(i-1) * cr4 + wa3(i) * ci4
+        ch(i,k,4)   = wa3(i-1) * ci4 - wa3(i) * cr4
+
+      end do
+    end do
+
+  end if
+
+  return
+end
+subroutine passf5 ( ido, l1, cc, ch, wa1, wa2, wa3, wa4 )
+!
+!*******************************************************************************
+!
+!! PASSF5 is a lower level routine used by CFFTF1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,5,l1)
+  real ch(ido,l1,5)
+  real ci2
+  real ci3
+  real ci4
+  real ci5
+  real cr2
+  real cr3
+  real cr4
+  real cr5
+  real di2
+  real di3
+  real di4
+  real di5
+  real dr2
+  real dr3
+  real dr4
+  real dr5
+  integer i
+  integer k
+  real, parameter :: ti11 = -0.951056516295154E+00
+  real, parameter :: ti12 = -0.587785252292473E+00
+  real ti2
+  real ti3
+  real ti4
+  real ti5
+  real tr2
+  real tr3
+  real tr4
+  real tr5
+  real, parameter :: tr11 =  0.309016994374947E+00
+  real, parameter :: tr12 = -0.809016994374947E+00
+  real wa1(ido)
+  real wa2(ido)
+  real wa3(ido)
+  real wa4(ido)
+!
+  if ( ido == 2 ) then
+
+    do k = 1, l1
+
+      ti5 = cc(2,2,k) - cc(2,5,k)
+      ti2 = cc(2,2,k) + cc(2,5,k)
+      ti4 = cc(2,3,k) - cc(2,4,k)
+      ti3 = cc(2,3,k) + cc(2,4,k)
+      tr5 = cc(1,2,k) - cc(1,5,k)
+      tr2 = cc(1,2,k) + cc(1,5,k)
+      tr4 = cc(1,3,k) - cc(1,4,k)
+      tr3 = cc(1,3,k) + cc(1,4,k)
+
+      ch(1,k,1) = cc(1,1,k) + tr2 + tr3
+      ch(2,k,1) = cc(2,1,k) + ti2 + ti3
+
+      cr2 = cc(1,1,k) + tr11 * tr2 + tr12 * tr3
+      ci2 = cc(2,1,k) + tr11 * ti2 + tr12 * ti3
+      cr3 = cc(1,1,k) + tr12 * tr2 + tr11 * tr3
+      ci3 = cc(2,1,k) + tr12 * ti2 + tr11 * ti3
+
+      cr5 = ti11 * tr5 + ti12 * tr4
+      ci5 = ti11 * ti5 + ti12 * ti4
+      cr4 = ti12 * tr5 - ti11 * tr4
+      ci4 = ti12 * ti5 - ti11 * ti4
+
+      ch(1,k,2) = cr2 - ci5
+      ch(1,k,5) = cr2 + ci5
+      ch(2,k,2) = ci2 + cr5
+      ch(2,k,3) = ci3 + cr4
+      ch(1,k,3) = cr3 - ci4
+      ch(1,k,4) = cr3 + ci4
+      ch(2,k,4) = ci3 - cr4
+      ch(2,k,5) = ci2 - cr5
+
+    end do
+
+  else
+
+    do k = 1, l1
+      do i = 2, ido, 2
+
+        ti5 = cc(i,2,k) - cc(i,5,k)
+        ti2 = cc(i,2,k) + cc(i,5,k)
+        ti4 = cc(i,3,k) - cc(i,4,k)
+        ti3 = cc(i,3,k) + cc(i,4,k)
+
+        tr5 = cc(i-1,2,k) - cc(i-1,5,k)
+        tr2 = cc(i-1,2,k) + cc(i-1,5,k)
+        tr4 = cc(i-1,3,k) - cc(i-1,4,k)
+        tr3 = cc(i-1,3,k) + cc(i-1,4,k)
+
+        ch(i-1,k,1) = cc(i-1,1,k) + tr2 + tr3
+        ch(i,k,1)   = cc(i,1,k)   + ti2 + ti3
+
+        cr2 = cc(i-1,1,k) + tr11 * tr2 + tr12 * tr3
+        ci2 = cc(i,1,k)   + tr11 * ti2 + tr12 * ti3
+        cr3 = cc(i-1,1,k) + tr12 * tr2 + tr11 * tr3
+        ci3 = cc(i,1,k)   + tr12 * ti2 + tr11 * ti3
+
+        cr5 = ti11 * tr5 + ti12 * tr4
+        ci5 = ti11 * ti5 + ti12 * ti4
+        cr4 = ti12 * tr5 - ti11 * tr4
+        ci4 = ti12 * ti5 - ti11 * ti4
+
+        dr3 = cr3 - ci4
+        dr4 = cr3 + ci4
+        di3 = ci3 + cr4
+        di4 = ci3 - cr4
+        dr5 = cr2 + ci5
+        dr2 = cr2 - ci5
+        di5 = ci2 - cr5
+        di2 = ci2 + cr5
+
+        ch(i-1,k,2) = wa1(i-1) * dr2 + wa1(i) * di2
+        ch(i,k,2)   = wa1(i-1) * di2 - wa1(i) * dr2
+        ch(i-1,k,3) = wa2(i-1) * dr3 + wa2(i) * di3
+        ch(i,k,3)   = wa2(i-1) * di3 - wa2(i) * dr3
+        ch(i-1,k,4) = wa3(i-1) * dr4 + wa3(i) * di4
+        ch(i,k,4)   = wa3(i-1) * di4 - wa3(i) * dr4
+        ch(i-1,k,5) = wa4(i-1) * dr5 + wa4(i) * di5
+        ch(i,k,5)   = wa4(i-1) * di5 - wa4(i) * dr5
+
+      end do
+    end do
+
+  end if
+
+  return
+end
+subroutine pchce(ic,vc,n,x,h,slope,d,incfd,ierr)
+!
+!*******************************************************************************
+!
+!! PCHCE is called by pchic to set end derivatives as requested by the user.
+!
+!
+!    it must be called after interior derivative values have been set.
+!
+!
+!    to facilitate two-dimensional applications, includes an increment
+!    between successive values of the d-array.
+!
+!  Parameters:
+!
+!     ic -- (input) integer array of length 2 specifying desired
+!           boundary conditions:
+!           ic(1) = ibeg, desired condition at beginning of data.
+!           ic(2) = iend, desired condition at end of data.
+!           ( see prologue to pchic for details. )
+!
+!     vc -- (input) real array of length 2 specifying desired boundary
+!           values.  vc(1) need be set only if ic(1) = 2 or 3 .
+!                    vc(2) need be set only if ic(2) = 2 or 3 .
+!
+!     n -- (input) number of data points.  (assumes n>=2)
+!
+!     x -- (input) real array of independent variable values.  (the
+!           elements of x are assumed to be strictly increasing.)
+!
+!     h -- (input) real array of interval lengths.
+!     slope -- (input) real array of data slopes.
+!           if the data are (x(i),y(i)), i=1(1)n, then these inputs are:
+!                  h(i) =  x(i+1)-x(i),
+!              slope(i) = (y(i+1)-y(i))/h(i),  i=1(1)n-1.
+!
+!     d -- (input) real array of derivative values at the data points.
+!           the value corresponding to x(i) must be stored in
+!                d(1+(i-1)*incfd),  i=1(1)n.
+!          (output) the value of d at x(1) and/or x(n) is changed, if
+!           necessary, to produce the requested boundary conditions.
+!           no other entries in d are changed.
+!
+!     incfd -- (input) increment between successive values in d.
+!           this argument is provided primarily for 2-d applications.
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           warning errors:
+!              ierr = 1  if ibeg<0 and d(1) had to be adjusted for
+!                        monotonicity.
+!              ierr = 2  if iend<0 and d(1+(n-1)*incfd) had to be
+!                        adjusted for monotonicity.
+!              ierr = 3  if both of the above are true.
+!
+!  programming notes:
+!
+!     1. the function  pchst(arg1,arg2)  is assumed to return zero if
+!        either argument is zero, +1 if they are of the same sign, and
+!        -1 if they are of opposite sign.
+!     3. one could reduce the number of arguments and amount of local
+!        storage, at the expense of reduced code clarity, by passing in
+!        the array wk (rather than splitting it into h and slope) and
+!        increasing its length enough to incorporate stemp and xtemp.
+!     4. the two monotonicity checks only use the sufficient conditions.
+!        thus, it is possible (but unlikely) for a boundary condition to
+!        be changed, even though the original interpolant was monotonic.
+!        (at least the result is a continuous function of the data.)
+!
+  integer incfd
+  integer n
+!
+  real d(incfd,n)
+  real h(n)
+  integer ibeg
+  integer ic(2)
+  integer iend
+  integer ierf
+  integer ierr
+  integer index
+  integer j
+  integer k
+  real pchdf
+  real pchst
+  real slope(n)
+  real stemp(3)
+  real vc(2)
+  real x(n)
+  real xtemp(4)
+!
+  ibeg = ic(1)
+  iend = ic(2)
+  ierr = 0
+!
+!  set to default boundary conditions if n is too small.
+!
+  if ( abs(ibeg)>n )  ibeg = 0
+  if ( abs(iend)>n )  iend = 0
+!
+!  treat beginning boundary condition.
+!
+  if (ibeg == 0)  go to 2000
+
+  k = abs(ibeg)
+  if (k == 1)  then
+!        boundary value provided.
+     d(1,1) = vc(1)
+  else if (k == 2)  then
+!        boundary second derivative provided.
+!
+     d(1,1) = 0.5 *( (3.0*slope(1) - d(1,2)) - 0.5*vc(1)*h(1) )
+  else if (k < 5)  then
+!        use k-point derivative formula.
+!        pick up first k points, in reverse order.
+!
+     do j = 1, k
+        index = k-j+1
+        xtemp(j) = x(index)
+        if (j < k)  stemp(j) = slope(index-1)
+     end do
+
+     d(1,1) = pchdf (k, xtemp, stemp, ierf)
+
+     if (ierf /= 0)  go to 5001
+  else
+!        use 'not a knot' condition.
+     d(1,1) = ( 3.0*(h(1)*slope(2) + h(2)*slope(1)) &
+       - 2.0E+00 * (h(1)+h(2))*d(1,2) - h(1)*d(1,3) ) / h(2)
+  end if
+!
+!  check d(1,1) for compatibility with monotonicity.
+!
+  if ( ibeg <= 0 ) then
+
+    if (slope(1) == 0.0)  then
+      if (d(1,1) /= 0.0)  then
+        d(1,1) = 0.0E+00
+        ierr = ierr + 1
+      end if
+    else if ( pchst(d(1,1),slope(1)) < 0.0)  then
+      d(1,1) = 0.0E+00
+      ierr = ierr + 1
+    else if ( abs(d(1,1)) > 3.0*abs(slope(1)) )  then
+      d(1,1) = 3.0*slope(1)
+      ierr = ierr + 1
+    end if
+
+  end if
+
+2000 continue
+!
+!  treat end boundary condition.
+!
+  if (iend == 0)  go to 5000
+  k = abs(iend)
+  if (k == 1)  then
+!        boundary value provided.
+     d(1,n) = vc(2)
+  else if (k == 2)  then
+!        boundary second derivative provided.
+     d(1,n) = 0.5 *( (3.0*slope(n-1) - d(1,n-1)) + 0.5 *vc(2)*h(n-1) )
+  else if (k < 5)  then
+!
+!  use k-point derivative formula.  pick up last k points.
+!
+     do j = 1, k
+        index = n-k+j
+        xtemp(j) = x(index)
+        if (j < k)  stemp(j) = slope(index)
+     end do
+
+     d(1,n) = pchdf (k, xtemp, stemp, ierf)
+
+     if (ierf /= 0)  go to 5001
+  else
+!        use 'not a knot' condition.
+     d(1,n) = ( 3.0*(h(n-1)*slope(n-2) + h(n-2)*slope(n-1)) &
+       - 2.0E+00 * (h(n-1)+h(n-2))*d(1,n-1) - h(n-1)*d(1,n-2) ) / h(n-2)
+  end if
+!
+  if (iend > 0)  go to 5000
+!
+!  check d(1,n) for compatibility with monotonicity.
+!
+  if (slope(n-1) == 0.0)  then
+     if (d(1,n) /= 0.0)  then
+        d(1,n) = 0.0E+00
+        ierr = ierr + 2
+     end if
+  else if ( pchst(d(1,n),slope(n-1)) < 0.0)  then
+     d(1,n) = 0.0E+00
+     ierr = ierr + 2
+  else if ( abs(d(1,n)) > 3.0*abs(slope(n-1)) )  then
+     d(1,n) = 3.0*slope(n-1)
+     ierr = ierr + 2
+  end if
+!
+!  normal return.
+!
+ 5000 continue
+  return
+!
+!  error return.
+!
+ 5001 continue
+!     error return from pchdf.
+!  This case should never occur.
+!
+  ierr = -1
+  call xerror ('pchce -- error return from pchdf', 32, ierr, 1)
+  return
+end
+subroutine pchci(n,h,slope,d,incfd)
+!
+!*******************************************************************************
+!
+!! PCHCI sets derivatives for a monotone piecewise cubic hermite interpolant.
+!
+!
+!  Discussion:
+!
+!    default boundary conditions are provided which are compatible
+!    with monotonicity.  if the data are only piecewise monotonic, the
+!    interpolant will have an extremum at each point where monotonicity
+!    switches direction.
+!
+!    to facilitate two-dimensional applications, includes an increment
+!    between successive values of the d-array.
+!
+!    the resulting piecewise cubic hermite function should be identical
+!    (within roundoff error) to that produced by pchim.
+!
+!  Parameters:
+!
+!     n -- (input) number of data points.
+!           if n=2, simply does linear interpolation.
+!
+!     h -- (input) real array of interval lengths.
+!     slope -- (input) real array of data slopes.
+!           if the data are (x(i),y(i)), i=1(1)n, then these inputs are:
+!                  h(i) =  x(i+1)-x(i),
+!              slope(i) = (y(i+1)-y(i))/h(i),  i=1(1)n-1.
+!
+!     d -- (output) real array of derivative values at the data points.
+!           if the data are monotonic, these values will determine a
+!           a monotone cubic hermite function.
+!           the value corresponding to x(i) is stored in
+!                d(1+(i-1)*incfd),  i=1(1)n.
+!           no other entries in d are changed.
+!
+!     incfd -- (input) increment between successive values in d.
+!           this argument is provided primarily for 2-d applications.
+!
+!  programmed by:  fred n. fritsch,  fts 532-4275, (415) 422-4275,
+!                  mathematics and statistics division,
+!                  lawrence livermore national laboratory.
+!
+!  programming notes:
+!
+!     1. the function  pchst(arg1,arg2)  is assumed to return zero if
+!        either argument is zero, +1 if they are of the same sign, and
+!        -1 if they are of opposite sign.
+!
+  integer incfd
+  integer n
+!
+  real d(incfd,n)
+  real del1
+  real del2
+  real dmax
+  real dmin
+  real drat1
+  real drat2
+  real h(n)
+  real hsum
+  real hsumt3
+  integer i
+  integer nless1
+  real pchst
+  real slope(n)
+  real w1
+  real w2
+!
+  nless1 = n - 1
+  del1 = slope(1)
+!
+!  special case n=2 -- use linear interpolation.
+!
+  if (nless1 > 1)  go to 10
+  d(1,1) = del1
+  d(1,n) = del1
+  go to 5000
+!
+!  normal case  (n >= 3).
+!
+   10 continue
+  del2 = slope(2)
+!
+!  set d(1) via non-centered three-point formula, adjusted to be shape-preserving.
+!
+  hsum = h(1) + h(2)
+  w1 = (h(1) + hsum)/hsum
+  w2 = -h(1)/hsum
+  d(1,1) = w1*del1 + w2*del2
+
+  if ( pchst(d(1,1),del1) <= 0.0)  then
+     d(1,1) = 0.0E+00
+  else if ( pchst(del1,del2) < 0.0)  then
+!        need do this check only if monotonicity switches.
+     dmax = 3.0*del1
+     if (abs(d(1,1)) > abs(dmax))  d(1,1) = dmax
+  end if
+!
+!  loop through interior points.
+!
+  do i = 2, nless1
+
+    if (i /= 2)  then
+      hsum = h(i-1) + h(i)
+      del1 = del2
+      del2 = slope(i)
+    end if
+!
+!  set d(i)=0 unless data are strictly monotonic.
+!
+    d(1,i) = 0.0E+00
+!
+!  use brodlie modification of butland formula.
+!
+    if ( pchst(del1,del2) > 0.0E+00 ) then
+
+      hsumt3 = hsum+hsum+hsum
+      w1 = (hsum + h(i-1))/hsumt3
+      w2 = (hsum + h(i)  )/hsumt3
+      dmax = max( abs(del1), abs(del2) )
+      dmin = min ( abs(del1), abs(del2) )
+      drat1 = del1/dmax
+      drat2 = del2/dmax
+      d(1,i) = dmin/(w1*drat1 + w2*drat2)
+
+    end if
+
+  end do
+!
+!  set d(n) via non-centered three-point formula, adjusted to be shape-preserving.
+!
+  w1 = -h(n-1)/hsum
+  w2 = (h(n-1) + hsum)/hsum
+  d(1,n) = w1*del1 + w2*del2
+
+  if ( pchst(d(1,n),del2) <= 0.0)  then
+    d(1,n) = 0.0E+00
+  else if ( pchst(del1,del2) < 0.0)  then
+    dmax = 3.0*del2
+    if (abs(d(1,n)) > abs(dmax)) then
+      d(1,n) = dmax
+    end if
+  end if
+
+ 5000 continue
+  return
+end
+subroutine pchcs(switch,n,h,slope,d,incfd,ierr)
+!
+!*******************************************************************************
+!
+!! PCHCS is called by  pchic  to adjust the values of d in the vicinity of a
+!     switch in direction of monotonicity, to produce a more "visually
+!     pleasing" curve than that given by  pchim .
+!
+!  Parameters:
+!
+!     switch -- (input) indicates the amount of control desired over
+!           local excursions from data.
+!
+!     n -- (input) number of data points.  (assumes n>2 .)
+!
+!     h -- (input) real array of interval lengths.
+!     slope -- (input) real array of data slopes.
+!           if the data are (x(i),y(i)), i=1(1)n, then these inputs are:
+!                  h(i) =  x(i+1)-x(i),
+!              slope(i) = (y(i+1)-y(i))/h(i),  i=1(1)n-1.
+!
+!     d -- (input) real array of derivative values at the data points,
+!           as determined by pchci.
+!          (output) derivatives in the vicinity of switches in direction
+!           of monotonicity may be adjusted to produce a more "visually
+!           pleasing" curve.
+!           the value corresponding to x(i) is stored in
+!                d(1+(i-1)*incfd),  i=1(1)n.
+!           no other entries in d are changed.
+!
+!     incfd -- (input) increment between successive values in d.
+!           this argument is provided primarily for 2-d applications.
+!
+!     ierr -- (output) error flag.  should be zero.
+!           if negative, trouble in pchsw.  (should never happen.)
+!
+!    warning:  this routine does no validity-checking of arguments.
+!
+!  programmed by:  fred n. fritsch,  fts 532-4275, (415) 422-4275,
+!                  mathematics and statistics division,
+!                  lawrence livermore national laboratory.
+!
+!  programming notes:
+!
+!     1. the function  pchst(arg1,arg2)  is assumed to return zero if
+!        either argument is zero, +1 if they are of the same sign, and
+!        -1 if they are of opposite sign.
+!
+  integer incfd
+  integer n
+!
+  real d(incfd,n)
+  real h(n)
+  integer ierr
+  real slope(n)
+  real switch
+
+  integer  i, indx, k, nless1
+  real  del(3), dext, dfloc, dfmx, fact, fudge, slmax
+  real wtave(2)
+  real  pchst
+!
+!  define inline function for weighted average of slopes.
+!
+  real  pchsd, s1, s2, h1, h2
+  pchsd(s1,s2,h1,h2) = (h2/(h1+h2))*s1 + (h1/(h1+h2))*s2
+!
+!  initialize.
+!
+  data  fudge /4./
+!
+  ierr = 0
+  nless1 = n - 1
+!
+!  loop over segments.
+!
+  do 900  i = 2, nless1
+
+     if ( pchst(slope(i-1),slope(i)) )  100, 300, 900
+
+  100    continue
+!
+!  slope switches monotonicity at i-th point
+!
+!           do not change d if 'up-down-up'.
+        if (i > 2)  then
+           if ( pchst(slope(i-2),slope(i)) > 0.0)  go to 900
+
+        end if
+        if (i < nless1)  then
+           if ( pchst(slope(i+1),slope(i-1)) > 0.0)  go to 900
+
+        end if
+!
+!  compute provisional value for d(1,i).
+!
+        dext = pchsd (slope(i-1), slope(i), h(i-1), h(i))
+!
+!  determine which interval contains the extremum.
+!
+        if ( pchst(dext, slope(i-1)) )  200, 900, 250
+!
+  200       continue
+!              dext and slope(i-1) have opposite signs --
+!                        extremum is in (x(i-1),x(i)).
+           k = i-1
+!              set up to compute new values for d(1,i-1) and d(1,i).
+           wtave(2) = dext
+           if (k > 1) then
+             wtave(1) = pchsd (slope(k-1), slope(k), h(k-1), h(k))
+           end if
+           go to 400
+!
+  250       continue
+!              dext and slope(i) have opposite signs --
+!                        extremum is in (x(i),x(i+1)).
+           k = i
+!              set up to compute new values for d(1,i) and d(1,i+1).
+           wtave(1) = dext
+           if (k < nless1) then
+             wtave(2) = pchsd (slope(k), slope(k+1), h(k), h(k+1))
+           end if
+           go to 400
+!
+  300    continue
+!
+!  at least one of slope(i-1) and slope(i) is zero
+!  check for flat-topped peak
+!
+        if (i == nless1)  go to 900
+        if ( pchst(slope(i-1), slope(i+1)) >= 0.0)  go to 900
+
+!
+!           we have flat-topped peak on (x(i),x(i+1)).
+!
+        k = i
+!           set up to compute new values for d(1,i) and d(1,i+1).
+        wtave(1) = pchsd (slope(k-1), slope(k), h(k-1), h(k))
+        wtave(2) = pchsd (slope(k), slope(k+1), h(k), h(k+1))
+!
+  400    continue
+!
+!  at this point we have determined that there will be an extremum
+!        on (x(k),x(k+1)), where k=i or i-1, and have set array wtave--
+!           wtave(1) is a weighted average of slope(k-1) and slope(k),
+!                    if k>1
+!           wtave(2) is a weighted average of slope(k) and slope(k+1),
+!                    if k<n-1
+!
+     slmax = abs(slope(k))
+     if (k > 1)    slmax = max ( slmax, abs(slope(k-1)) )
+     if (k<nless1) slmax = max ( slmax, abs(slope(k+1)) )
+!
+     if (k > 1)  del(1) = slope(k-1) / slmax
+     del(2) = slope(k) / slmax
+     if (k<nless1)  del(3) = slope(k+1) / slmax
+!
+     if ((k>1) .and. (k<nless1))  then
+!           normal case -- extremum is not in a boundary interval.
+        fact = fudge* abs(del(3)*(del(1)-del(2))*(wtave(2)/slmax))
+        d(1,k) = d(1,k) + min (fact,1.0)*(wtave(1) - d(1,k))
+        fact = fudge* abs(del(1)*(del(3)-del(2))*(wtave(1)/slmax))
+        d(1,k+1) = d(1,k+1) + min (fact,1.0)*(wtave(2) - d(1,k+1))
+     else
+!           special case k=1 (which can occur only if i=2) or
+!                        k=nless1 (which can occur only if i=nless1).
+        fact = fudge* abs(del(2))
+        d(1,i) = min (fact,1.0) * wtave(i-k+1)
+!              note that i-k+1 = 1 if k=i  (=nless1),
+!                        i-k+1 = 2 if k=i-1(=1).
+     end if
+!
+!  adjust if necessary to limit excursions from data.
+!
+     if (switch <= 0.0)  go to 900
+
+     dfloc = h(k)*abs(slope(k))
+     if (k > 1)    dfloc = max ( dfloc, h(k-1)*abs(slope(k-1)) )
+     if (k<nless1) dfloc = max ( dfloc, h(k+1)*abs(slope(k+1)) )
+     dfmx = switch*dfloc
+     indx = i-k+1
+!        indx = 1 if k=i, 2 if k=i-1.
+
+     call pchsw (dfmx, indx, d(1,k), d(1,k+1), h(k), slope(k), ierr)
+
+     if (ierr /= 0)  return
+
+  900 continue
+
+  return
+end
+function pchdf ( k, x, s, ierr )
+!
+!*******************************************************************************
+!
+!! PCHDF approximates a derivative using divided differences of data.
+!
+!
+!  Discussion:
+!
+!    The routine uses a divided difference formulation to compute a K-point
+!    approximation to the derivative at X(K) based on the data in X and S.
+!
+!    It is called by PCHCE and PCHSP to compute 3- and 4-point boundary
+!    derivative approximations.
+!
+!  Reference:
+!
+!    Carl de Boor,
+!    a practical guide to splines,
+!    springer-verlag (new york, 1978), pp. 10-16.
+!
+!  Parameters:
+!
+!     on input:
+!        k      is the order of the desired derivative approximation.
+!               k must be at least 3 (error return if not).
+!        x      contains the k values of the independent variable.
+!               x need not be ordered, but the values **must** be
+!               distinct.  (not checked here.)
+!        s      contains the associated slope values:
+!                  s(i) = (f(i+1)-f(i))/(x(i+1)-x(i)), i=1(1)k-1.
+!               (note that s need only be of length k-1.)
+!
+!     on return:
+!        s      will be destroyed.
+!        ierr   will be set to -1 if k<2 .
+!        pchdf  will be set to the desired derivative approximation if
+!               ierr=0 or to zero if ierr=-1.
+!
+!  programmed by:  fred n. fritsch,  fts 532-4275, (415) 422-4275,
+!                  mathematics and statistics division,
+!                  lawrence livermore national laboratory.
+!
+  integer k
+!
+  integer i
+  integer ierr
+  integer j
+  real pchdf
+  real s(k)
+  real value
+  real x(k)
+!
+!  check for legal value of k.
+!
+  if (k < 3)  go to 5001
+!
+!  compute coefficients of interpolating polynomial.
+!
+  do j = 2, k-1
+    do i = 1, k-j
+      s(i) = (s(i+1)-s(i))/(x(i+j)-x(i))
+    end do
+  end do
+!
+!  evaluate derivative at x(k).
+!
+  value = s(1)
+
+  do i = 2, k-1
+    value = s(i) + value * ( x(k) - x(i) )
+  end do
+!
+!  normal return.
+!
+  ierr = 0
+  pchdf = value
+  return
+!
+!  error return.
+!
+ 5001 continue
+!     k<3 return.
+  ierr = -1
+  call xerror ('pchdf -- k less than three', 26, ierr, 1)
+  pchdf = 0.0E+00
+  return
+end
+subroutine pchev ( n, x, f, d, nval, xval, fval, dval, ierr )
+!
+!*******************************************************************************
+!
+!! PCHEV evaluates the function and first derivative of a piecewise
+!            cubic hermite or spline function at an array of points xval,
+!            easy to use.
+!
+!  Description
+!
+!          pchev:  piecewise cubic hermite or spline derivative evaluator,
+!                  easy to use.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!
+!     evaluates the function and first derivative of the cubic hermite
+!     or spline function defined by  n, x, f, d, at the array of points xval.
+!
+!     this is an easy to use driver for the routines by f.n. fritsch
+!     described in reference (2) below. those also have other capabilities.
+!
+!  Parameters:
+!
+!     n -- (input) number of data points.  (error return if n<2 .)
+!
+!     x -- (input) real array of independent variable values.  the
+!           elements of x must be strictly increasing:
+!             x(i-1) < x(i),  i = 2(1)n. (error return if not.)
+!
+!     f -- (input) real array of function values.  f(i) is
+!           the value corresponding to x(i).
+!
+!     d -- (input) real array of derivative values.  d(i) is
+!           the value corresponding to x(i).
+!
+!  nval -- (input) number of points at which the functions are to be
+!           evaluated. ( error return if nval<1 )
+!
+!  xval -- (input) real array of points at which the functions are to
+!           be evaluated.
+!
+!          notes:
+!           1. the evaluation will be most efficient if the elements
+!              of xval are increasing relative to x;
+!              that is,   xval(j) >= x(i)
+!              implies    xval(k) >= x(i),  all k>=j .
+!           2. if any of the xval are outside the interval [x(1),x(n)],
+!              values are extrapolated from the nearest extreme cubic,
+!              and a warning error is returned.
+!
+!  fval -- (output) real array of values of the cubic hermite function
+!           defined by  n, x, f, d  at the points  xval.
+!
+!  dval -- (output) real array of values of the first derivative of
+!           the same function at the points  xval.
+!
+!  ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           warning error:
+!              ierr>0  means that extrapolation was performed at
+!                 ierr points.
+!           "recoverable" errors:
+!              ierr = -1  if n<2 .
+!              ierr = -3  if the x-array is not strictly increasing.
+!              ierr = -4  if nval<1 .
+!           (output arrays have not been changed in any of these cases.)
+!               note:  the above errors are checked in the order listed,
+!                   and following arguments have **not** been validated.
+!              ierr = -5  if an error has occurred in the lower-level
+!                         routine chfdv.  nb: this should never happen.
+!                         notify the author **immediately** if it does.
+!
+!
+!  references  1. f.n.fritsch and r.e.carlson, 'monotone piecewise
+!                 cubic interpolation,' siam j.numer.anal. 17, 2 (april
+!                 1980), 238-246.
+!               2. f.n.fritsch, 'piecewise cubic hermite interpolation
+!                 package, final specifications', lawrence livermore
+!                 national laboratory, computer documentation ucid-30194,
+!                 august 1982.
+!
+  integer n
+  integer nval
+!
+  real d(n)
+  real dval(nval)
+  real f(n)
+  real fval(nval)
+  integer ierr
+  integer, save :: incfd = 1
+  logical, save :: skip = .true.
+  real x(n)
+  real xval(nval)
+!
+  call pchfd ( n, x, f, d, incfd, skip, nval, xval, fval, dval, ierr )
+
+  return
+end
+subroutine pchez ( n, x, f, d, spline, wk, lwk, ierr )
+!
+!*******************************************************************************
+!
+!! PCHEZ carries out easy to use spline or cubic hermite interpolation.
+!
+!
+!  Description
+!
+!          pchez:  piecewise cubic interpolation, easy to use.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!
+!     sets derivatives for spline (two continuous derivatives) or
+!     hermite cubic (one continuous derivative) interpolation.
+!     spline interpolation is smoother, but may not "look" right if the
+!     data contains both "steep" and "flat" sections.  hermite cubics
+!     can produce a "visually pleasing" and monotone interpolant to
+!     monotone data. this is an easy to use driver for the routines
+!     by f. n. fritsch in reference (4) below. various boundary
+!     conditions are set to default values by pchez. many other choices
+!     are available in the subroutines pchic, pchim and pchsp.
+!
+!     use pchev to evaluate the resulting function and its derivative.
+!
+!  Parameters:
+!
+!     n -- (input) number of data points.  (error return if n<2 .)
+!           if n=2, simply does linear interpolation.
+!
+!     x -- (input) real array of independent variable values.  the
+!           elements of x must be strictly increasing:
+!                x(i-1) < x(i),  i = 2(1)n.
+!           (error return if not.)
+!
+!     f -- (input) real array of dependent variable values to be inter-
+!           polated.  f(i) is value corresponding to x(i).
+!
+!     d -- (output) real array of derivative values at the data points.
+!
+!     spline -- (input) logical variable to specify if the interpolant
+!           is to be a spline with two continuous derivaties
+!           (set spline=.true.) or a hermite cubic interpolant with one
+!           continuous derivative (set spline=.false.).
+!        note: if spline=.true. the interpolating spline satisfies the
+!           default "not-a-knot" boundary condition, with a continuous
+!           third derivative at x(2) and x(n-1). see reference (3).
+!              if spline=.false. the interpolating hermite cubic will be
+!           monotone if the input data is monotone. boundary conditions are
+!           computed from the derivative of a local quadratic unless this
+!           alters monotonicity.
+!
+!     wk -- (scratch) real work array, which must be declared by the calling
+!           program to be at least 2*n if spline is .true. and not used
+!           otherwise.
+!
+!     lwk -- (input) length of work array wk. (error return if
+!           lwk<2*n and spline is .true., not checked otherwise.)
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           warning error:
+!              ierr>0  (can only occur when spline=.false.) means that
+!                 ierr switches in the direction of monotonicity were detected.
+!                 when spline=.false.,  pchez guarantees that if the input
+!                 data is monotone, the interpolant will be too. this warning
+!                 is to alert you to the fact that the input data was not
+!                 monotone.
+!           "recoverable" errors:
+!              ierr = -1  if n<2 .
+!              ierr = -3  if the x-array is not strictly increasing.
+!              ierr = -7  if lwk is less than 2*n and spline is .true.
+!             (the d-array has not been changed in any of these cases.)
+!               note:  the above errors are checked in the order listed,
+!                   and following arguments have **not** been validated.
+!
+!  references  1. f.n.fritsch and r.e.carlson, 'monotone piecewise
+!                 cubic interpolation,' siam j.numer.anal. 17, 2 (april
+!                 1980), 238-246.
+!               2. f.n.fritsch and j.butland, 'a method for constructing
+!                 local monotone piecewise cubic interpolants,' llnl
+!                 preprint ucrl-87559 (april 1982).
+!               3. carl de boor, a practical guide to splines, springer-
+!                 verlag (new york, 1978).  (esp. chapter iv, pp.49-62.)
+!               4. f.n.fritsch, 'piecewise cubic hermite interpolation
+!                 package, final specifications', lawrence livermore
+!                 national laboratory, computer documentation ucid-30194,
+!                 august 1982.
+!
+  integer lwk
+  integer n
+!
+  real d(n)
+  real f(n)
+  integer, save, dimension ( 2 ) :: ic = (/ 0, 0 /)
+  integer ierr
+  integer, parameter :: incfd = 1
+  logical spline
+  real vc(2)
+  real wk(lwk)
+  real x(n)
+!
+  if ( spline ) then
+    call  pchsp ( ic, vc, n, x, f, d, incfd, wk, lwk, ierr )
+  else
+    call  pchim ( n, x, f, d, incfd, ierr )
+  end if
+
+  return
+end
+subroutine pchfd(n,x,f,d,incfd,skip,ne,xe,fe,de,ierr)
+!
+!*******************************************************************************
+!
+!! PCHFD evaluates a piecewise cubic hermite function and its first
+!            derivative at an array of points.  may be used by itself
+!            for hermite interpolation, or as an evaluator for pchim
+!            or pchic.  if only function values are required, use
+!            PCHFE instead.
+!
+!  Description:
+!
+!          pchfd:  piecewise cubic hermite function and derivative
+!                  evaluator
+!
+!     evaluates the cubic hermite function defined by  n, x, f, d,  to-
+!     gether with its first derivative, at the points  xe(j), j=1(1)ne.
+!
+!     if only function values are required, use PCHFE, instead.
+!
+!     to provide compatibility with pchim and pchic, includes an
+!     increment between successive values of the f- and d-arrays.
+!
+!  Parameters:
+!
+!     n -- (input) number of data points.  (error return if n<2 .)
+!
+!     x -- (input) real array of independent variable values.  the
+!           elements of x must be strictly increasing:
+!                x(i-1) < x(i),  i = 2(1)n.
+!           (error return if not.)
+!
+!     f -- (input) real array of function values.  f(1+(i-1)*incfd) is
+!           the value corresponding to x(i).
+!
+!     d -- (input) real array of derivative values.  d(1+(i-1)*incfd) is
+!           the value corresponding to x(i).
+!
+!     incfd -- (input) increment between successive values in f and d.
+!           (error return if  incfd<1 .)
+!
+!     skip -- (input/output) logical variable which should be set to
+!           .true. if the user wishes to skip checks for validity of
+!           preceding parameters, or to .false. otherwise.
+!           this will save time in case these checks have already
+!           been performed (say, in pchim or pchic).
+!           skip will be set to .true. on normal return.
+!
+!     ne -- (input) number of evaluation points.  (error return if
+!           ne<1 .)
+!
+!     xe -- (input) real array of points at which the functions are to
+!           be evaluated.
+!
+!
+!          notes:
+!           1. the evaluation will be most efficient if the elements
+!              of xe are increasing relative to x;
+!              that is,   xe(j) >= x(i)
+!              implies    xe(k) >= x(i),  all k>=j .
+!           2. if any of the xe are outside the interval [x(1),x(n)],
+!              values are extrapolated from the nearest extreme cubic,
+!              and a warning error is returned.
+!
+!     fe -- (output) real array of values of the cubic hermite function
+!           defined by  n, x, f, d  at the points  xe.
+!
+!     de -- (output) real array of values of the first derivative of
+!           the same function at the points  xe.
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           warning error:
+!              ierr>0  means that extrapolation was performed at
+!                 ierr points.
+!           "recoverable" errors:
+!              ierr = -1  if n<2 .
+!              ierr = -2  if incfd<1 .
+!              ierr = -3  if the x-array is not strictly increasing.
+!              ierr = -4  if ne<1 .
+!           (output arrays have not been changed in any of these cases.)
+!               note:  the above errors are checked in the order listed,
+!                   and following arguments have **not** been validated.
+!              ierr = -5  if an error has occurred in the lower-level
+!                         routine chfdv.  nb: this should never happen.
+!                         notify the author **immediately** if it does.
+!
+!  programming notes:
+!
+!     2. most of the coding between the call to chfdv and the end of
+!        the ir-loop could be eliminated if it were permissible to
+!        assume that xe is ordered relative to x.
+!
+!     3. chfdv does not assume that x1 is less than x2.  thus, it would
+!        be possible to write a version of pchfd that assumes a strict-
+!        ly decreasing x-array by simply running the ir-loop backwards
+!        (and reversing the order of appropriate tests).
+!
+!     4. the present code has a minor bug, which i have decided is not
+!        worth the effort that would be required to fix it.
+!        if xe contains points in [x(n-1),x(n)], followed by points <
+!        x(n-1), followed by points >x(n), the extrapolation points
+!        will be counted (at least) twice in the total returned in ierr.
+!
+  integer incfd
+  integer n
+  integer ne
+!
+  real d(incfd,n)
+  real de(ne)
+  real f(incfd,n)
+  real fe(ne)
+  integer i
+  integer ierc
+  integer ierr
+  integer ir
+  integer j
+  integer jfirst
+  integer next(2)
+  integer nj
+  logical skip
+  real x(n)
+  real xe(ne)
+!
+!  validity-check arguments.
+!
+  if (skip)  go to 5
+
+  if ( n<2 )  go to 5001
+  if ( incfd<1 )  go to 5002
+
+  do i = 2, n
+    if ( x(i)<=x(i-1) ) then
+      go to 5003
+    end if
+  end do
+!
+!  function definition is ok, go on.
+!
+    5 continue
+  if ( ne<1 )  go to 5004
+  ierr = 0
+  skip = .true.
+!
+!  loop over intervals.        (   interval index is  il = ir-1  . )
+!                              ( interval is x(il)<=x<x(ir) . )
+  jfirst = 1
+  ir = 2
+   10 continue
+!
+!     skip out of loop if have processed all evaluation points.
+!
+     if (jfirst > ne)  go to 5000
+!
+!     locate all points in interval.
+!
+     do j = jfirst, ne
+       if (xe(j) >= x(ir))  go to 30
+     end do
+
+     j = ne + 1
+     go to 40
+!
+!     have located first point beyond interval.
+!
+   30    continue
+     if (ir == n)  j = ne + 1
+!
+   40    continue
+     nj = j - jfirst
+!
+!     skip evaluation if no points in interval.
+!
+     if (nj == 0)  go to 50
+!
+!     evaluate cubic at xe(i),  i = jfirst (1) j-1 .
+!
+    call chfdv (x(ir-1),x(ir), f(1,ir-1),f(1,ir), d(1,ir-1),d(1,ir), &
+      nj, xe(jfirst), fe(jfirst), de(jfirst), next, ierc)
+
+     if (ierc < 0)  go to 5005
+
+     if (next(2) == 0)  go to 42
+!        if (next(2) > 0)  then
+!           in the current set of xe-points, there are next(2) to the
+!           right of x(ir).
+!
+        if (ir < n)  go to 41
+!           if (ir == n)  then
+!              these are actually extrapolation points.
+           ierr = ierr + next(2)
+           go to 42
+   41       continue
+!           else
+!              we should never have gotten here.
+           go to 5005
+!           end if
+!        end if
+   42    continue
+!
+     if (next(1) == 0)  go to 49
+!        if (next(1) > 0)  then
+!           in the current set of xe-points, there are next(1) to the
+!           left of x(ir-1).
+!
+        if (ir > 2)  go to 43
+!           if (ir == 2)  then
+!              these are actually extrapolation points.
+           ierr = ierr + next(1)
+           go to 49
+   43       continue
+!           else
+!              xe is not ordered relative to x, so must adjust
+!              evaluation interval.
+!
+!              first, locate first point to left of x(ir-1).
+!
+           do i = jfirst, j-1
+              if (xe(i) < x(ir-1))  go to 45
+           end do
+!
+!              note-- cannot drop through here unless there is an error
+!                     in chfdv.
+           go to 5005
+!
+   45          continue
+!              reset j.  (this will be the new jfirst.)
+           j = i
+!
+!  now find out how far to back up in the x-array.
+!
+           do i = 1, ir-1
+              if (xe(j) < x(i)) go to 47
+           end do
+!
+!              nb-- can never drop through here, since xe(j)<x(ir-1).
+!
+   47          continue
+!              at this point, either  xe(j) < x(1)
+!                 or      x(i-1) <= xe(j) < x(i) .
+!              reset ir, recognizing that it will be incremented before
+!              cycling.
+           ir = max(1, i-1)
+!           end if
+!        end if
+   49    continue
+!
+     jfirst = j
+!
+!   end of ir-loop.
+!
+   50 continue
+  ir = ir + 1
+  if (ir <= n)  go to 10
+!
+!  normal return.
+!
+ 5000 continue
+  return
+!
+!  error returns.
+!
+ 5001 continue
+!     n<2 return.
+  ierr = -1
+  call xerror ('pchfd -- number of data points less than two', 44, ierr, 1)
+  return
+
+ 5002 continue
+!     incfd<1 return.
+  ierr = -2
+  call xerror ('pchfd -- increment less than one', 32, ierr, 1)
+  return
+!
+ 5003 continue
+!     x-array not strictly increasing.
+  ierr = -3
+  call xerror ('pchfd -- x-array not strictly increasing', 40, ierr, 1)
+  return
+!
+ 5004 continue
+!     ne<1 return.
+  ierr = -4
+  call xerror ('pchfd -- number of evaluation points less than one', 50, &
+    ierr, 1)
+  return
+!
+ 5005 continue
+!     error return from chfdv.
+!  this case should never occur.
+  ierr = -5
+  call xerror ('pchfd -- error return from chfdv -- fatal', 41, ierr, 2)
+  return
+end
+subroutine pchfe ( n, x, f, d, incfd, skip, ne, xe, fe, ierr )
+!
+!*******************************************************************************
+!
+!! PCHFE evaluates a piecewise cubic hermite function at an array of points.
+!
+!  may be used by itself for hermite interpolation,
+!            or as an evaluator for pchim or pchic.
+!
+!  Description:
+!
+!          pchfe:  piecewise cubic hermite function evaluator
+!
+!     evaluates the cubic hermite function defined by  n, x, f, d  at
+!     the points  xe(j), j=1(1)ne.
+!
+!     to provide compatibility with pchim and pchic, includes an
+!     increment between successive values of the f- and d-arrays.
+!
+!  Parameters:
+!
+!     n -- (input) number of data points.  (error return if n<2 .)
+!
+!     x -- (input) real array of independent variable values.  the
+!           elements of x must be strictly increasing:
+!                x(i-1) < x(i),  i = 2(1)n.
+!           (error return if not.)
+!
+!     f -- (input) real array of function values.  f(1+(i-1)*incfd) is
+!           the value corresponding to x(i).
+!
+!     d -- (input) real array of derivative values.  d(1+(i-1)*incfd) is
+!           the value corresponding to x(i).
+!
+!     incfd -- (input) increment between successive values in f and d.
+!           (error return if  incfd<1 .)
+!
+!     skip -- (input/output) logical variable which should be set to
+!           .true. if the user wishes to skip checks for validity of
+!           preceding parameters, or to .false. otherwise.
+!           this will save time in case these checks have already
+!           been performed (say, in pchim or pchic).
+!           skip will be set to .true. on normal return.
+!
+!     ne -- (input) number of evaluation points.  (error return if
+!           ne<1 .)
+!
+!     xe -- (input) real array of points at which the function is to be
+!           evaluated.
+!
+!          notes:
+!           1. the evaluation will be most efficient if the elements
+!              of xe are increasing relative to x;
+!              that is,   xe(j) >= x(i)
+!              implies    xe(k) >= x(i),  all k>=j .
+!           2. if any of the xe are outside the interval [x(1),x(n)],
+!              values are extrapolated from the nearest extreme cubic,
+!              and a warning error is returned.
+!
+!     fe -- (output) real array of values of the cubic hermite function
+!           defined by  n, x, f, d  at the points  xe.
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           warning error:
+!              ierr>0  means that extrapolation was performed at
+!                 ierr points.
+!           "recoverable" errors:
+!              ierr = -1  if n<2 .
+!              ierr = -2  if incfd<1 .
+!              ierr = -3  if the x-array is not strictly increasing.
+!              ierr = -4  if ne<1 .
+!             (the fe-array has not been changed in any of these cases.)
+!               note:  the above errors are checked in the order listed,
+!                   and following arguments have **not** been validated.
+!
+!     2. most of the coding between the call to chfev and the end of
+!        the ir-loop could be eliminated if it were permissible to
+!        assume that xe is ordered relative to x.
+!
+!     3. chfev does not assume that x1 is less than x2.  thus, it would
+!        be possible to write a version of pchfe that assumes a strict-
+!        ly decreasing x-array by simply running the ir-loop backwards
+!        (and reversing the order of appropriate tests).
+!
+!     4. the present code has a minor bug, which i have decided is not
+!        worth the effort that would be required to fix it.
+!        if xe contains points in [x(n-1),x(n)], followed by points <
+!        x(n-1), followed by points >x(n), the extrapolation points
+!        will be counted (at least) twice in the total returned in ierr.
+!
+  integer  n, incfd, ne, ierr
+  real  x(n), f(incfd,n), d(incfd,n), xe(ne), fe(ne)
+  logical  skip
+  integer  i, ierc, ir, j, jfirst, next(2), nj
+!
+!  validity-check arguments.
+!
+  if (skip)  go to 5
+!
+  if ( n<2 )  go to 5001
+  if ( incfd<1 )  go to 5002
+
+  do i = 2, n
+     if ( x(i)<=x(i-1) )  go to 5003
+  end do
+!
+!function definition is ok, go on.
+!
+    5 continue
+  if ( ne<1 )  go to 5004
+  ierr = 0
+  skip = .true.
+!
+!  loop over intervals.        (   interval index is  il = ir-1  . )
+!                              ( interval is x(il)<=x<x(ir) . )
+  jfirst = 1
+  ir = 2
+   10 continue
+!
+! skip out of loop if have processed all evaluation points.
+!
+     if (jfirst > ne)  go to 5000
+!
+!  locate all points in interval.
+!
+     do j = jfirst, ne
+       if (xe(j) >= x(ir))  go to 30
+     end do
+
+     j = ne + 1
+     go to 40
+!
+!  have located first point beyond interval.
+!
+   30    continue
+     if (ir == n)  j = ne + 1
+
+   40    continue
+     nj = j - jfirst
+!
+!  skip evaluation if no points in interval.
+!
+     if (nj == 0)  go to 50
+!
+!  evaluate cubic at xe(i),  i = jfirst (1) j-1 .
+!
+    call chfev (x(ir-1),x(ir), f(1,ir-1),f(1,ir), d(1,ir-1),d(1,ir), &
+      nj, xe(jfirst), fe(jfirst), next, ierc)
+
+     if (ierc < 0)  go to 5005
+!
+     if (next(2) == 0)  go to 42
+!        if (next(2) > 0)  then
+!           in the current set of xe-points, there are next(2) to the
+!           right of x(ir).
+!
+        if (ir < n)  go to 41
+!           if (ir == n)  then
+!              these are actually extrapolation points.
+           ierr = ierr + next(2)
+           go to 42
+   41       continue
+!           else
+!              we should never have gotten here.
+           go to 5005
+!           end if
+!        end if
+   42    continue
+!
+     if (next(1) == 0)  go to 49
+!        if (next(1) > 0)  then
+!           in the current set of xe-points, there are next(1) to the
+!           left of x(ir-1).
+!
+        if (ir > 2)  go to 43
+!           if (ir == 2)  then
+!              these are actually extrapolation points.
+           ierr = ierr + next(1)
+           go to 49
+   43       continue
+!           else
+!              xe is not ordered relative to x, so must adjust
+!              evaluation interval.
+!
+!              first, locate first point to left of x(ir-1).
+           do i = jfirst, j-1
+              if (xe(i) < x(ir-1))  go to 45
+           end do
+!              note-- cannot drop through here unless there is an error
+!                     in chfev.
+           go to 5005
+!
+   45          continue
+!              reset j.  (this will be the new jfirst.)
+           j = i
+!
+!              now find out how far to back up in the x-array.
+           do i = 1, ir-1
+              if (xe(j) < x(i)) go to 47
+           end do
+!              nb-- can never drop through here, since xe(j)<x(ir-1).
+!
+   47          continue
+!              at this point, either  xe(j) < x(1)
+!                 or      x(i-1) <= xe(j) < x(i) .
+!              reset ir, recognizing that it will be incremented before
+!              cycling.
+           ir = max(1, i-1)
+!           end if
+!        end if
+   49    continue
+!
+     jfirst = j
+!
+!   end of ir-loop.
+!
+   50 continue
+  ir = ir + 1
+  if (ir <= n)  go to 10
+!
+!  normal return.
+!
+ 5000 continue
+  return
+!
+!  error returns.
+!
+ 5001 continue
+!     n<2 return.
+  ierr = -1
+  call xerror ('pchfe -- number of data points less than two', 44, ierr, 1)
+  return
+!
+ 5002 continue
+!     incfd<1 return.
+  ierr = -2
+  call xerror ('pchfe -- increment less than one', 32, ierr, 1)
+  return
+!
+ 5003 continue
+!     x-array not strictly increasing.
+  ierr = -3
+  call xerror ('pchfe -- x-array not strictly increasing', 40, ierr, 1)
+  return
+!
+ 5004 continue
+!     ne<1 return.
+  ierr = -4
+  call xerror ('pchfe -- number of evaluation points less than one', 50, ierr, 1)
+  return
+!
+ 5005 continue
+!     error return from chfev.
+!   *** this case should never occur.
+  ierr = -5
+  call xerror ('pchfe -- error return from chfev -- fatal', 41, ierr, 2)
+  return
+end
+function pchia(n,x,f,d,incfd,skip,a,b,ierr)
+!
+!*******************************************************************************
+!
+!! PCHIA evaluates the integral of a piecewise cubic Hermite function.
+!
+!
+!  Description:
+!
+!          pchia:  piecewise cubic hermite integrator, arbitrary limits
+!
+!     evaluates the definite integral of the cubic hermite function
+!     defined by  n, x, f, d  over the interval [a, b].
+!
+!     to provide compatibility with pchim and pchic, includes an
+!     increment between successive values of the f- and d-arrays.
+!
+!  Parameters:
+!
+!     value -- (output) value of the requested integral.
+!
+!     n -- (input) number of data points.  (error return if n<2 .)
+!
+!     x -- (input) real array of independent variable values.  the
+!           elements of x must be strictly increasing:
+!                x(i-1) < x(i),  i = 2(1)n.
+!           (error return if not.)
+!
+!     f -- (input) real array of function values.  f(1+(i-1)*incfd) is
+!           the value corresponding to x(i).
+!
+!     d -- (input) real array of derivative values.  d(1+(i-1)*incfd) is
+!           the value corresponding to x(i).
+!
+!     incfd -- (input) increment between successive values in f and d.
+!           (error return if  incfd<1 .)
+!
+!     skip -- (input/output) logical variable which should be set to
+!           .true. if the user wishes to skip checks for validity of
+!           preceding parameters, or to .false. otherwise.
+!           this will save time in case these checks have already
+!           been performed (say, in pchim or pchic).
+!           skip will be set to .true. on return with ierr>=0 .
+!
+!     a,b -- (input) the limits of integration.
+!           note:  there is no requirement that [a,b] be contained in
+!                  [x(1),x(n)].  however, the resulting integral value
+!                  will be highly suspect, if not.
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           warning errors:
+!              ierr = 1  if  a  is outside the interval [x(1),x(n)].
+!              ierr = 2  if  b  is outside the interval [x(1),x(n)].
+!              ierr = 3  if both of the above are true.  (note that this
+!                        means that either [a,b] contains data interval
+!                        or the intervals do not intersect at all.)
+!           "recoverable" errors:
+!              ierr = -1  if n<2 .
+!              ierr = -2  if incfd<1 .
+!              ierr = -3  if the x-array is not strictly increasing.
+!                (value has not been computed in any of these cases.)
+!               note:  the above errors are checked in the order listed,
+!                   and following arguments have **not** been validated.
+!
+  integer incfd
+  integer n
+!
+  real a
+  real b
+  real chfiv
+  real d(incfd,n)
+  real f(incfd,n)
+  integer i
+  integer ia
+  integer ib
+  integer ierd
+  integer ierr
+  integer ierv
+  integer il
+  integer ir
+  real pchia
+  real pchid
+  logical skip
+  real value
+  real x(n)
+  real xa
+  real xb
+!
+!  validity-check arguments.
+!
+  if (skip)  go to 5
+!
+  if ( n<2 )  go to 5001
+  if ( incfd<1 )  go to 5002
+
+  do i = 2, n
+    if ( x(i)<=x(i-1) )  go to 5003
+  end do
+!
+!function definition is ok, go on.
+!
+    5 continue
+  skip = .true.
+  ierr = 0
+  if ( (a<x(1)) .or. (a>x(n)) )  ierr = ierr + 1
+  if ( (b<x(1)) .or. (b>x(n)) )  ierr = ierr + 2
+!
+!  compute integral value.
+!
+  if (a == b)  then
+     value = 0.0E+00
+  else
+     xa = min (a, b)
+     xb = max (a, b)
+     if (xb <= x(2))  then
+!           interval is to left of x(2), so use first cubic.
+!
+        value = chfiv ( x(1), x(2), f(1,1),f(1,2), &
+          d(1,1),d(1,2), a, b, ierv)
+
+        if (ierv < 0)  go to 5004
+     else if (xa >= x(n-1))  then
+!           interval is to right of x(n-1), so use last cubic.
+!
+        value = chfiv(x(n-1),x(n), f(1,n-1),f(1,n), &
+          d(1,n-1),d(1,n), a, b, ierv)
+
+        if (ierv < 0)  go to 5004
+     else
+!           'normal' case -- xa<xb, xa<x(n-1), xb>x(2).
+!      ......locate ia and ib such that
+!               x(ia-1)<xa<=x(ia)<=x(ib)<=xb<=x(ib+1)
+        ia = 1
+        do i = 1, n-1
+           if (xa > x(i))  ia = i + 1
+        end do
+!             ia = 1 implies xa<x(1) .  otherwise,
+!             ia is largest index such that x(ia-1)<xa,.
+!
+        ib = n
+        do i = n, ia, -1
+           if (xb < x(i))  ib = i - 1
+        end do
+!             ib = n implies xb>x(n) .  otherwise,
+!             ib is smallest index such that xb<x(ib+1) .
+!
+!  Compute the integral.
+!
+        ierv = 0
+        if (ib < ia)  then
+!              this means ib = ia-1 and
+!                 (a,b) is a subset of (x(ib),x(ia)).
+!
+           value = chfiv (x(ib),x(ia), f(1,ib),f(1,ia), &
+             d(1,ib),d(1,ia), a, b, ierv)
+
+           if (ierv < 0)  go to 5004
+        else
+!
+!              first compute integral over (x(ia),x(ib)).
+           if (ib == ia)  then
+              value = 0.0E+00
+           else
+
+              value = pchid (n, x, f, d, incfd, skip, ia, ib, ierd)
+!
+              if (ierd < 0)  go to 5005
+           end if
+!
+!              then add on integral over (xa,x(ia)).
+           if (xa < x(ia))  then
+              il = max (1, ia-1)
+              ir = il + 1
+
+              value = value + chfiv (x(il),x(ir), f(1,il),f(1,ir), &
+                d(1,il),d(1,ir), xa, x(ia), ierv)
+
+              if (ierv < 0)  go to 5004
+           end if
+!
+!              then add on integral over (x(ib),xb).
+           if (xb > x(ib))  then
+              ir = min (ib+1, n)
+              il = ir - 1
+
+              value = value + chfiv (x(il),x(ir), f(1,il),f(1,ir), &
+                d(1,il),d(1,ir), x(ib), xb, ierv)
+
+              if (ierv < 0)  go to 5004
+           end if
+!
+!              finally, adjust sign if necessary.
+           if (a > b)  value = -value
+        end if
+     end if
+  end if
+!
+!  normal return.
+!
+  pchia = value
+  return
+!
+!  error returns.
+!
+ 5001 continue
+!     n<2 return.
+  ierr = -1
+  call xerror ('pchia -- number of data points less than two', 44, ierr, 1)
+  return
+!
+ 5002 continue
+!     incfd<1 return.
+  ierr = -2
+  call xerror ('pchia -- increment less than one', 32, ierr, 1)
+  return
+!
+ 5003 continue
+!     x-array not strictly increasing.
+  ierr = -3
+  call xerror ('pchia -- x-array not strictly increasing', 40, ierr, 1)
+  return
+!
+ 5004 continue
+!     trouble in chfiv.  (should never occur.)
+  ierr = -4
+  call xerror ('pchia -- trouble in chfiv', 25, ierr, 1)
+  return
+!
+ 5005 continue
+!     trouble in pchid.  (should never occur.)
+  ierr = -5
+  call xerror ('pchia -- trouble in pchid', 25, ierr, 1)
+  return
+end
+subroutine pchic(ic,vc,switch,n,x,f,d,incfd,wk,nwk,ierr)
+!
+!*******************************************************************************
+!
+!! PCHIC sets derivatives needed to determine a piecewise monotone
+!            piecewise cubic hermite interpolant to given data.
+!
+!            user control is available over boundary conditions and/or
+!            treatment of points where monotonicity switches direction.
+!
+!  Description:
+!
+!         pchic:  piecewise cubic hermite interpolation coefficients.
+!
+!     sets derivatives needed to determine a piecewise monotone piece-
+!     wise cubic interpolant to the data given in x and f satisfying the
+!     boundary conditions specified by ic and vc.
+!
+!     the treatment of points where monotonicity switches direction is
+!     controlled by argument switch.
+!
+!     to facilitate two-dimensional applications, includes an increment
+!     between successive values of the f- and d-arrays.
+!
+!     the resulting piecewise cubic hermite function may be evaluated
+!     by pchfe or pchfd.
+!
+!  Parameters:
+!
+!     ic -- (input) integer array of length 2 specifying desired
+!           boundary conditions:
+!           ic(1) = ibeg, desired condition at beginning of data.
+!           ic(2) = iend, desired condition at end of data.
+!
+!           ibeg = 0  for the default boundary condition (the same as
+!                     used by pchim).
+!           if ibeg/=0, then its sign indicates whether the boundary
+!                     derivative is to be adjusted, if necessary, to be
+!                     compatible with monotonicity:
+!              ibeg>0  if no adjustment is to be performed.
+!              ibeg<0  if the derivative is to be adjusted for
+!                     monotonicity.
+!
+!           allowable values for the magnitude of ibeg are:
+!           ibeg = 1  if first derivative at x(1) is given in vc(1).
+!           ibeg = 2  if second derivative at x(1) is given in vc(1).
+!           ibeg = 3  to use the 3-point difference formula for d(1).
+!                     (reverts to the default b.c. if n<3 .)
+!           ibeg = 4  to use the 4-point difference formula for d(1).
+!                     (reverts to the default b.c. if n<4 .)
+!           ibeg = 5  to set d(1) so that the second derivative is con-
+!              tinuous at x(2). (reverts to the default b.c. if n<4.)
+!              this option is somewhat analogous to the "not a knot"
+!              boundary condition provided by pchsp.
+!
+!          notes (ibeg):
+!           1. an error return is taken if abs(ibeg)>5 .
+!           2. only in case  ibeg<=0  is it guaranteed that the
+!              interpolant will be monotonic in the first interval.
+!              if the returned value of d(1) lies between zero and
+!              3*slope(1), the interpolant will be monotonic.  this
+!              is **not** checked if ibeg>0 .
+!           3. if ibeg<0 and d(1) had to be changed to achieve mono-
+!              tonicity, a warning error is returned.
+!
+!           iend may take on the same values as ibeg, but applied to
+!           derivative at x(n).  in case iend = 1 or 2, the value is
+!           given in vc(2).
+!
+!          notes (iend):
+!           1. an error return is taken if abs(iend)>5 .
+!           2. only in case  iend<=0  is it guaranteed that the
+!              interpolant will be monotonic in the last interval.
+!              if the returned value of d(1+(n-1)*incfd) lies between
+!              zero and 3*slope(n-1), the interpolant will be monotonic.
+!              this is **not** checked if iend>0 .
+!           3. if iend<0 and d(1+(n-1)*incfd) had to be changed to
+!              achieve monotonicity, a warning error is returned.
+!
+!     vc -- (input) real array of length 2 specifying desired boundary
+!           values, as indicated above.
+!           vc(1) need be set only if ic(1) = 1 or 2 .
+!           vc(2) need be set only if ic(2) = 1 or 2 .
+!
+!     switch -- (input) indicates desired treatment of points where
+!           direction of monotonicity switches:
+!           set switch to zero if interpolant is required to be mono-
+!           tonic in each interval, regardless of monotonicity of data.
+!             notes:
+!              1. this will cause d to be set to zero at all switch
+!                 points, thus forcing extrema there.
+!              2. the result of using this option with the default boun-
+!                 dary conditions will be identical to using pchim, but
+!                 will generally cost more compute time.
+!                 this option is provided only to facilitate comparison
+!                 of different switch and/or boundary conditions.
+!           set switch nonzero to use a formula based on the 3-point
+!              difference formula in the vicinity of switch points.
+!           if switch is positive, the interpolant on each interval
+!              containing an extremum is controlled to not deviate from
+!              the data by more than switch*dfloc, where dfloc is the
+!              maximum of the change of f on this interval and its two
+!              immediate neighbors.
+!           if switch is negative, no such control is to be imposed.
+!
+!     n -- (input) number of data points.  (error return if n<2 .)
+!
+!     x -- (input) real array of independent variable values.  the
+!           elements of x must be strictly increasing:
+!                x(i-1) < x(i),  i = 2(1)n.
+!           (error return if not.)
+!
+!     f -- (input) real array of dependent variable values to be inter-
+!           polated.  f(1+(i-1)*incfd) is value corresponding to x(i).
+!
+!     d -- (output) real array of derivative values at the data points.
+!           these values will determine a monotone cubic hermite func-
+!           tion on each subinterval on which the data are monotonic,
+!           except possibly adjacent to switches in monotonicity.
+!           the value corresponding to x(i) is stored in
+!                d(1+(i-1)*incfd),  i=1(1)n.
+!           no other entries in d are changed.
+!
+!     incfd -- (input) increment between successive values in f and d.
+!           this argument is provided primarily for 2-d applications.
+!           (error return if  incfd<1 .)
+!
+!     wk -- (scratch) real array of working storage.  the user may wish
+!           to know that the returned values are:
+!              wk(i)     = h(i)     = x(i+1) - x(i) ;
+!              wk(n-1+i) = slope(i) = (f(1,i+1) - f(1,i)) / h(i)
+!           for  i = 1(1)n-1.
+!
+!     nwk -- (input) length of work array.
+!           (error return if  nwk<2*(n-1) .)
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           warning errors:
+!              ierr = 1  if ibeg<0 and d(1) had to be adjusted for
+!                        monotonicity.
+!              ierr = 2  if iend<0 and d(1+(n-1)*incfd) had to be
+!                        adjusted for monotonicity.
+!              ierr = 3  if both of the above are true.
+!           "recoverable" errors:
+!              ierr = -1  if n<2 .
+!              ierr = -2  if incfd<1 .
+!              ierr = -3  if the x-array is not strictly increasing.
+!              ierr = -4  if abs(ibeg)>5 .
+!              ierr = -5  if abs(iend)>5 .
+!              ierr = -6  if both of the above are true.
+!              ierr = -7  if nwk<2*(n-1) .
+!             (the d-array has not been changed in any of these cases.)
+!               note:  the above errors are checked in the order listed,
+!                   and following arguments have **not** been validated.
+!
+!  references  1. f.n.fritsch and r.e.carlson, 'monotone piecewise
+!                 cubic interpolation,' siam j.numer.anal. 17, 2 (april
+!                 1980), 238-246.
+!               2. f.n.fritsch and j.butland, 'a method for constructing
+!                 local monotone piecewise cubic interpolants,' llnl
+!                 preprint ucrl-87559 (april 1982).
+!               3. f.n.fritsch, 'piecewise cubic interpolation package,'
+!                 llnl preprint ucrl-87285 (july 1982).
+!
+  integer incfd
+  integer n
+  integer nwk
+!
+  integer ic(2)
+  integer ierr
+  real switch
+  real vc(2)
+  real x(n), f(incfd,n), d(incfd,n), wk(nwk)
+  integer  i, ibeg, iend, nless1
+!
+  if ( n<2 )  go to 5001
+  if ( incfd<1 )  go to 5002
+
+  do i = 2, n
+    if ( x(i)<=x(i-1) )  go to 5003
+  end do
+
+  ibeg = ic(1)
+  iend = ic(2)
+  ierr = 0
+  if (abs(ibeg) > 5)  ierr = ierr - 1
+  if (abs(iend) > 5)  ierr = ierr - 2
+  if (ierr < 0)  go to 5004
+!
+!  function definition is ok -- go on.
+!
+  nless1 = n - 1
+  if ( nwk < 2*nless1 )  go to 5007
+!
+!  set up h and slope arrays.
+!
+  do i = 1, nless1
+    wk(i) = x(i+1) - x(i)
+    wk(nless1+i) = (f(1,i+1) - f(1,i)) / wk(i)
+  end do
+!
+!  special case n=2 -- use linear interpolation.
+!
+  if (nless1 > 1)  go to 1000
+  d(1,1) = wk(2)
+  d(1,n) = wk(2)
+  go to 3000
+!
+!  normal case  (n >= 3) .
+!
+ 1000 continue
+!
+!  set interior derivatives and default end conditions.
+!
+  call pchci (n, wk(1), wk(n), d, incfd)
+!
+!  set derivatives at points where monotonicity switches direction.
+!
+  if (switch == 0.0)  go to 3000
+
+  call pchcs (switch, n, wk(1), wk(n), d, incfd, ierr)
+
+  if (ierr /= 0)  go to 5008
+!
+!  set end conditions.
+!
+ 3000 continue
+  if ( (ibeg==0) .and. (iend==0) )  go to 5000
+
+  call pchce (ic, vc, n, x, wk(1), wk(n), d, incfd, ierr)
+
+  if (ierr < 0)  go to 5009
+!
+!  normal return.
+!
+ 5000 continue
+  return
+!
+!  error returns.
+!
+ 5001 continue
+!     n<2 return.
+  ierr = -1
+  call xerror ('pchic -- number of data points less than two', 44, ierr, 1)
+  return
+
+ 5002 continue
+!     incfd<1 return.
+  ierr = -2
+  call xerror ('pchic -- increment less than one', 32, ierr, 1)
+  return
+
+ 5003 continue
+!     x-array not strictly increasing.
+  ierr = -3
+  call xerror ('pchic -- x-array not strictly increasing', 40, ierr, 1)
+  return
+!
+ 5004 continue
+!     ic out of range return.
+  ierr = ierr - 3
+  call xerror ('pchic -- ic out of range', 24, ierr, 1)
+  return
+!
+ 5007 continue
+!     nwk < 2*(n-1)  return.
+  ierr = -7
+  call xerror ('pchic -- work array too small', 29, ierr, 1)
+  return
+!
+ 5008 continue
+!     error return from pchcs.
+  ierr = -8
+  call xerror ('pchic -- error return from pchcs', 32, ierr, 1)
+  return
+!
+ 5009 continue
+!     error return from pchce.
+!   *** this case should never occur.
+  ierr = -9
+  call xerror ('pchic -- error return from pchce', 32, ierr, 1)
+  return
+end
+function pchid(n,x,f,d,incfd,skip,ia,ib,ierr)
+!
+!*******************************************************************************
+!
+!! PCHID evaluates the definite integral of a piecewise cubic
+!            hermite function over an interval whose endpoints are
+!            data points.
+!
+!  Description:
+!
+!          pchid:  piecewise cubic hermite integrator, data limits
+!
+!     evaluates the definite integral of the cubic hermite function
+!     defined by  n, x, f, d  over the interval [x(ia), x(ib)].
+!
+!     to provide compatibility with pchim and pchic, includes an
+!     increment between successive values of the f- and d-arrays.
+!
+!  Parameters:
+!
+!     value -- (output) value of the requested integral.
+!
+!     n -- (input) number of data points.  (error return if n<2 .)
+!
+!     x -- (input) real array of independent variable values.  the
+!           elements of x must be strictly increasing:
+!                x(i-1) < x(i),  i = 2(1)n.
+!           (error return if not.)
+!
+!     f -- (input) real array of function values.  f(1+(i-1)*incfd) is
+!           the value corresponding to x(i).
+!
+!     d -- (input) real array of derivative values.  d(1+(i-1)*incfd) is
+!           the value corresponding to x(i).
+!
+!     incfd -- (input) increment between successive values in f and d.
+!           (error return if  incfd<1 .)
+!
+!     skip -- (input/output) logical variable which should be set to
+!           .true. if the user wishes to skip checks for validity of
+!           preceding parameters, or to .false. otherwise.
+!           this will save time in case these checks have already
+!           been performed (say, in pchim or pchic).
+!           skip will be set to .true. on return with ierr = 0 or -4.
+!
+!     ia,ib -- (input) indices in x-array for the limits of integration.
+!           both must be in the range [1,n].  (error return if not.)
+!           no restrictions on their relative values.
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           "recoverable" errors:
+!              ierr = -1  if n<2 .
+!              ierr = -2  if incfd<1 .
+!              ierr = -3  if the x-array is not strictly increasing.
+!              ierr = -4  if ia or ib is out of range.
+!                (value has not been computed in any of these cases.)
+!               note:  the above errors are checked in the order listed,
+!                   and following arguments have **not** been validated.
+!
+  integer incfd
+  integer  n
+!
+  real d(incfd,n)
+  real f(incfd,n)
+  real h
+  integer i
+  integer ia
+  integer ib
+  integer ierr
+  integer iup
+  integer low
+  real pchid
+  logical skip
+  real sum
+  real value
+  real x(n)
+!
+!  validity-check arguments.
+!
+  if (skip)  go to 5
+!
+  if ( n<2 )  go to 5001
+  if ( incfd<1 )  go to 5002
+
+  do i = 2, n
+    if ( x(i)<=x(i-1) )  go to 5003
+  end do
+!
+!function definition is ok, go on.
+!
+    5 continue
+  skip = .true.
+  if ((ia<1) .or. (ia>n))  go to 5004
+  if ((ib<1) .or. (ib>n))  go to 5004
+  ierr = 0
+!
+!  compute integral value.
+!
+  if (ia == ib)  then
+     value = 0.0E+00
+  else
+     low = min(ia, ib)
+     iup = max(ia, ib) - 1
+     sum = 0.0E+00
+     do i = low, iup
+        h = x(i+1) - x(i)
+        sum = sum + h*( (f(1,i) + f(1,i+1)) + (d(1,i) - d(1,i+1))*(h/6.0) )
+     end do
+     value = 0.5 * sum
+     if (ia > ib)  value = -value
+  end if
+!
+!  normal return.
+!
+  pchid = value
+  return
+!
+!  error returns.
+!
+ 5001 continue
+!     n<2 return.
+  ierr = -1
+  call xerror ('pchid -- number of data points less than two', 44, ierr, 1)
+  return
+!
+ 5002 continue
+!     incfd<1 return.
+  ierr = -2
+  call xerror ('pchid -- increment less than one', 32, ierr, 1)
+  return
+!
+ 5003 continue
+!     x-array not strictly increasing.
+  ierr = -3
+  call xerror ('pchid -- x-array not strictly increasing', 40, ierr, 1)
+  return
+!
+ 5004 continue
+!     ia or ib out of range return.
+  ierr = -4
+  call xerror ('pchid -- ia or ib out of range', 30, ierr, 1)
+  return
+end
+subroutine pchim ( n, x, f, d, incfd, ierr )
+!
+!*******************************************************************************
+!
+!! PCHIM sets derivatives for a piecewise cubic Hermite interpolant.
+!
+!
+!  Discussion:
+!
+!    The routine set derivatives needed to determine a monotone piecewise
+!    cubic hermite interpolant to given data.  the
+!    interpolant will have an extremum at each point where monotonicity
+!    switches direction.  (see pchic if user control is
+!    desired over boundary or switch conditions.)
+!
+!    if the data are only piecewise monotonic, the interpolant will
+!    have an extremum at each point where monotonicity switches direc-
+!    tion.  (see pchic if user control is desired in such cases.)
+!
+!    to facilitate two-dimensional applications, includes an increment
+!    between successive values of the f- and d-arrays.
+!
+!    the resulting piecewise cubic hermite function may be evaluated
+!    by pchfe or pchfd.
+!
+!  References:
+!
+!    f.n.fritsch and r.e.carlson,
+!    'monotone piecewise cubic interpolation,'
+!    siam j.numer.anal.
+!    17, 2 (april 1980), 238-246.
+!
+!    f.n.fritsch and j.butland,
+!    'a method for constructing local monotone piecewise cubic interpolants,'
+!    llnl preprint ucrl-87559 (april 1982).
+!
+!  Parameters:
+!
+!     n -- (input) number of data points.  (error return if n<2 .)
+!           if n=2, simply does linear interpolation.
+!
+!     x -- (input) real array of independent variable values.  the
+!           elements of x must be strictly increasing:
+!                x(i-1) < x(i),  i = 2(1)n.
+!           (error return if not.)
+!
+!     f -- (input) real array of dependent variable values to be inter-
+!           polated.  f(1+(i-1)*incfd) is value corresponding to x(i).
+!           pchim is designed for monotonic data, but it will work for
+!           any f-array.  it will force extrema at points where mono-
+!           tonicity switches direction.  if some other treatment of
+!           switch points is desired, pchic should be used instead.
+!
+!     d -- (output) real array of derivative values at the data points.
+!           if the data are monotonic, these values will determine a
+!           a monotone cubic hermite function.
+!           the value corresponding to x(i) is stored in
+!                d(1+(i-1)*incfd),  i=1(1)n.
+!           no other entries in d are changed.
+!
+!     incfd -- (input) increment between successive values in f and d.
+!           this argument is provided primarily for 2-d applications.
+!           (error return if  incfd<1 .)
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           warning error:
+!              ierr>0  means that ierr switches in the direction
+!                 of monotonicity were detected.
+!           "recoverable" errors:
+!              ierr = -1  if n<2 .
+!              ierr = -2  if incfd<1 .
+!              ierr = -3  if the x-array is not strictly increasing.
+!             (the d-array has not been changed in any of these cases.)
+!               note:  the above errors are checked in the order listed,
+!                   and following arguments have **not** been validated.
+!
+  integer incfd
+  integer n
+!
+  real d(incfd,n)
+  real del1
+  real del2
+  real dmax
+  real dmin
+  real drat1
+  real drat2
+  real dsave
+  real f(incfd,n)
+  real h1
+  real h2
+  real hsum
+  real hsumt3
+  integer i
+  integer ierr
+  integer nless1
+  real pchst
+  real w1
+  real w2
+  real x(n)
+!
+!  Check arguments.
+!
+  if ( n < 2 ) then
+    ierr = -1
+    call xerror ('pchim -- number of data points less than two', 44, ierr, 1)
+    return
+  end if
+
+  if ( incfd < 1 ) then
+    ierr = -2
+    call xerror ('pchim -- increment less than one', 32, ierr, 1)
+    return
+  end if
+
+  do i = 2, n
+    if ( x(i)<=x(i-1) ) then
+      ierr = -3
+      call xerror ('pchim -- x-array not strictly increasing', 40, ierr, 1)
+      return
+    end if
+  end do
+
+  ierr = 0
+  nless1 = n - 1
+  h1 = x(2) - x(1)
+  del1 = (f(1,2) - f(1,1))/h1
+  dsave = del1
+!
+!  special case n=2 -- use linear interpolation.
+!
+  if ( n == 2 ) then
+    d(1,1) = del1
+    d(1,n) = del1
+    return
+  end if
+!
+!  normal case  (n >= 3).
+!
+  h2 = x(3) - x(2)
+  del2 = (f(1,3) - f(1,2))/h2
+!
+!  set d(1) via non-centered three-point formula, adjusted to be
+!  shape-preserving.
+!
+  hsum = h1 + h2
+  w1 = (h1 + hsum)/hsum
+  w2 = -h1/hsum
+  d(1,1) = w1*del1 + w2*del2
+
+  if ( pchst(d(1,1),del1) <= 0.0E+00 )  then
+     d(1,1) = 0.0E+00
+  else if ( pchst(del1,del2) < 0.0E+00 )  then
+!        need do this check only if monotonicity switches.
+     dmax = 3.0*del1
+     if (abs(d(1,1)) > abs(dmax))  d(1,1) = dmax
+  end if
+!
+!  loop through interior points.
+!
+  do i = 2, nless1
+
+    if ( i > 2 ) then
+      h1 = h2
+      h2 = x(i+1) - x(i)
+      hsum = h1 + h2
+      del1 = del2
+      del2 = (f(1,i+1) - f(1,i))/h2
+    end if
+!
+!  set d(i)=0 unless data are strictly monotonic.
+!
+    d(1,i) = 0.0E+00
+    if ( pchst(del1,del2) )  42, 41, 45
+!
+!  count number of changes in direction of monotonicity.
+!
+   41    continue
+    if ( del2 /= 0.0E+00 ) then
+      if ( pchst(dsave,del2) < 0.0E+00 )  ierr = ierr + 1
+      dsave = del2
+    end if
+    go to 50
+
+42  continue
+    ierr = ierr + 1
+    dsave = del2
+    go to 50
+!
+!  use brodlie modification of butland formula.
+!
+45  continue
+
+    hsumt3 = hsum+hsum+hsum
+    w1 = (hsum + h1)/hsumt3
+    w2 = (hsum + h2)/hsumt3
+    dmax = max ( abs(del1), abs(del2) )
+    dmin = min ( abs(del1), abs(del2) )
+    drat1 = del1/dmax
+    drat2 = del2/dmax
+    d(1,i) = dmin/(w1*drat1 + w2*drat2)
+
+   50 continue
+
+  end do
+!
+!  set d(n) via non-centered three-point formula, adjusted to be
+!  shape-preserving.
+!
+  w1 = -h2/hsum
+  w2 = (h2 + hsum)/hsum
+  d(1,n) = w1*del1 + w2*del2
+  if ( pchst(d(1,n),del2) <= 0.0E+00 )  then
+     d(1,n) = 0.0E+00
+  else if ( pchst(del1,del2) < 0.0E+00 )  then
+!        need do this check only if monotonicity switches.
+     dmax = 3.0*del2
+     if (abs(d(1,n)) > abs(dmax))  d(1,n) = dmax
+  end if
+
+  return
+end
+subroutine pchmc(n,x,f,d,incfd,skip,ismon,ierr)
+!
+!*******************************************************************************
+!
+!! PCHMC:  piecewise cubic hermite monotonicity checker.
+!
+!     checks the cubic hermite function defined by  n, x, f, d  for
+!     monotonicity.
+!
+!     to provide compatibility with pchim and pchic, includes an
+!     increment between successive values of the f- and d-arrays.
+!
+!  Parameters:
+!
+!     n -- (input) number of data points.  (error return if n<2 .)
+!
+!     x -- (input) real array of independent variable values.  the
+!           elements of x must be strictly increasing:
+!                x(i-1) < x(i),  i = 2(1)n.
+!           (error return if not.)
+!
+!     f -- (input) real array of function values.  f(1+(i-1)*incfd) is
+!           the value corresponding to x(i).
+!
+!     d -- (input) real array of derivative values.  d(1+(i-1)*incfd) is
+!           the value corresponding to x(i).
+!
+!     incfd -- (input) increment between successive values in f and d.
+!           (error return if  incfd<1 .)
+!
+!     skip -- (input/output) logical variable which should be set to
+!           .true. if the user wishes to skip checks for validity of
+!           preceding parameters, or to .false. otherwise.
+!           this will save time in case these checks have already
+!           been performed.
+!           skip will be set to .true. on normal return.
+!
+!     ismon -- (output) integer array indicating on which intervals the
+!           pch function defined by  n, x, f, d  is monotonic.
+!           for data interval [x(i),x(i+1)],
+!             ismon(i) = -1  if function is strictly decreasing;
+!             ismon(i) =  0  if function is constant;
+!             ismon(i) =  1  if function is strictly increasing;
+!             ismon(i) =  2  if function is non-monotonic;
+!             ismon(i) =  3  if unable to determine.  (this means that
+!                            the d-values are near the boundary of the
+!                            monotonicity region.  a small increase pro-
+!                            duces non-monotonicity; decrease, strict
+!                            monotonicity.)
+!           the above applies to i=1(1)n-1.  ismon(n) indicates whether
+!              the entire function is monotonic on [x(1),x(n)].
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           "recoverable" errors:
+!              ierr = -1  if n<2 .
+!              ierr = -2  if incfd<1 .
+!              ierr = -3  if the x-array is not strictly increasing.
+!          (the ismon-array has not been changed in any of these cases.)
+!               note:  the above errors are checked in the order listed,
+!                   and following arguments have **not** been validated.
+!
+!  references  f.n.fritsch and r.e.carlson, 'monotone piecewise cubic
+!                 interpolation,' siam j.numer.anal. 17, 2 (april 1980),
+!                 238-246.
+!
+  integer incfd
+  integer  n
+!
+  real chfmc
+  real d(incfd,n)
+  real delta
+  real f(incfd,n)
+  integer i
+  integer ierr
+  integer ismon(n)
+  integer nseg
+  logical skip
+  real x(n)
+!
+  if ( .not. skip ) then
+
+    if ( n < 2 )  go to 5001
+    if ( incfd<1 )  go to 5002
+
+    do i = 2, n
+      if ( x(i)<=x(i-1) )  go to 5003
+    end do
+
+    skip = .true.
+
+  end if
+
+  nseg = n - 1
+
+  do i = 1, nseg
+
+     delta = (f(1,i+1)-f(1,i))/(x(i+1)-x(i))
+
+     ismon(i) = chfmc (d(1,i), d(1,i+1), delta)
+
+     if (i == 1)  then
+        ismon(n) = ismon(1)
+     else
+!           need to figure out cumulative monotonicity from following
+!           'multiplication table'--
+!
+!                    *      i s m o n (i)
+!                     *  -1   0   1   2   3
+!               i      *--------------------*
+!               s   -1 i -1  -1   2   2   3 i
+!               m    0 i -1   0   1   2   3 i
+!               o    1 i  2   1   1   2   3 i
+!               n    2 i  2   2   2   2   2 i
+!              (n)   3 i  3   3   3   2   3 i
+!                      *--------------------*
+!
+!           if equal or already declared nonmonotonic, no change needed.
+        if ((ismon(i)/=ismon(n)) .and. (ismon(n)/=2))  then
+           if ( max(ismon(i), ismon(n)) > 1)  then
+!                 at least one is either 'no' or 'maybe'.
+              if (ismon(i) == 2)  then
+                 ismon(n) = 2
+              else
+                 ismon(n) = 3
+              end if
+           else if (ismon(i)*ismon(n) < 0)  then
+!                 both monotonic, but in opposite senses.
+              ismon(n) = 2
+           else
+!                 at this point, one is zero, the other is +-1.
+              ismon(n) = ismon(n) + ismon(i)
+           end if
+        end if
+     end if
+
+  end do
+
+  ierr = 0
+  return
+!
+!  error returns.
+!
+ 5001 continue
+!     n<2 return.
+  ierr = -1
+  call xerror ('pchmc -- number of data points less than two', 44, ierr, 1)
+  return
+!
+ 5002 continue
+!     incfd<1 return.
+  ierr = -2
+  call xerror ('pchmc -- increment less than one', 32, ierr, 1)
+  return
+!
+ 5003 continue
+!     x-array not strictly increasing.
+  ierr = -3
+  call xerror ('pchmc -- x-array not strictly increasing', 40, ierr, 1)
+  return
+end
+function pchqa(n,x,f,d,a,b,ierr)
+!
+!*******************************************************************************
+!
+!! PCHQA: easy to use cubic hermite or spline integration
+!             numerical integration, quadrature
+!
+!  purpose
+!
+!    evaluates the definite integral of a piecewise cubic hermite
+!            or spline function over an arbitrary interval, easy to use.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!
+!     evaluates the definite integral of the cubic hermite or spline
+!     function defined by  n, x, f, d  over the interval [a, b].  this
+!     is an easy to use driver for the routine pchia by f.n. fritsch
+!     described in reference (2) below. that routine also has other
+!     capabilities.
+!
+!  Parameters:
+!
+!     value -- (output) value of the requested integral.
+!
+!     n -- (input) number of data points.  (error return if n<2 .)
+!
+!     x -- (input) real array of independent variable values.  the
+!           elements of x must be strictly increasing:
+!                x(i-1) < x(i),  i = 2(1)n.
+!           (error return if not.)
+!
+!     f -- (input) real array of function values.  f(i) is
+!           the value corresponding to x(i).
+!
+!     d -- (input) real array of derivative values.  d(i) is
+!           the value corresponding to x(i).
+!
+!     a,b -- (input) the limits of integration.
+!           note:  there is no requirement that [a,b] be contained in
+!                  [x(1),x(n)].  however, the resulting integral value
+!                  will be highly suspect, if not.
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           warning errors:
+!              ierr = 1  if  a  is outside the interval [x(1),x(n)].
+!              ierr = 2  if  b  is outside the interval [x(1),x(n)].
+!              ierr = 3  if both of the above are true.  (note that this
+!                        means that either [a,b] contains data interval
+!                        or the intervals do not intersect at all.)
+!           "recoverable" errors:
+!              ierr = -1  if n<2 .
+!              ierr = -3  if the x-array is not strictly increasing.
+!                (value has not been computed in any of these cases.)
+!               note:  the above errors are checked in the order listed,
+!                   and following arguments have **not** been validated.
+!
+!  references  1. f.n.fritsch and r.e.carlson, 'monotone piecewise
+!                 cubic interpolation,' siam j.numer.anal. 17, 2 (april
+!                 1980), 238-246.
+!               2. f.n.fritsch, 'piecewise cubic hermite interpolation
+!                 package, final specifications', lawrence livermore
+!                 national laboratory, computer documentation ucid-30194,
+!                 august 1982.
+!
+  integer n
+!
+  real a
+  real b
+  real d(n)
+  real f(n)
+  integer ierr
+  integer, save :: incfd = 1
+  real pchia
+  real pchqa
+  logical, save :: skip = .true.
+  real x(n)
+!
+  pchqa  =  pchia( n, x, f, d, incfd, skip, a, b, ierr )
+
+  return
+end
+subroutine pchsp(ic,vc,n,x,f,d,incfd,wk,nwk,ierr)
+!
+!*******************************************************************************
+!
+!! PCHSP: set derivatives needed to determine the hermite represen-
+!            tation of the cubic spline interpolant to given data, with
+!            specified boundary conditions.
+!
+!  Description:
+!
+!          pchsp:   piecewise cubic hermite spline
+!
+!     computes the hermite representation of the cubic spline inter-
+!     polant to the data given in x and f satisfying the boundary
+!     conditions specified by ic and vc.
+!
+!     to facilitate two-dimensional applications, includes an increment
+!     between successive values of the f- and d-arrays.
+!
+!     the resulting piecewise cubic hermite function may be evaluated
+!     by pchfe or pchfd.
+!
+!     note:  this is a modified version of c. de boor's cubic spline
+!            routine cubspl.
+!
+!  Parameters:
+!
+!     ic -- (input) integer array of length 2 specifying desired
+!           boundary conditions:
+!           ic(1) = ibeg, desired condition at beginning of data.
+!           ic(2) = iend, desired condition at end of data.
+!
+!           ibeg = 0  to set d(1) so that the third derivative is con-
+!              tinuous at x(2).  this is the "not a knot" condition
+!              provided by de boor's cubic spline routine cubspl.
+!              < this is the default boundary condition. >
+!           ibeg = 1  if first derivative at x(1) is given in vc(1).
+!           ibeg = 2  if second derivative at x(1) is given in vc(1).
+!           ibeg = 3  to use the 3-point difference formula for d(1).
+!                     (reverts to the default b.c. if n<3 .)
+!           ibeg = 4  to use the 4-point difference formula for d(1).
+!                     (reverts to the default b.c. if n<4 .)
+!          notes:
+!           1. an error return is taken if ibeg is out of range.
+!           2. for the "natural" boundary condition, use ibeg=2 and
+!              vc(1)=0.
+!
+!           iend may take on the same values as ibeg, but applied to
+!           derivative at x(n).  in case iend = 1 or 2, the value is
+!           given in vc(2).
+!
+!          notes:
+!           1. an error return is taken if iend is out of range.
+!           2. for the "natural" boundary condition, use iend=2 and
+!              vc(2)=0.
+!
+!     vc -- (input) real array of length 2 specifying desired boundary
+!           values, as indicated above.
+!           vc(1) need be set only if ic(1) = 1 or 2 .
+!           vc(2) need be set only if ic(2) = 1 or 2 .
+!
+!     n -- (input) number of data points.  (error return if n<2 .)
+!
+!     x -- (input) real array of independent variable values.  the
+!           elements of x must be strictly increasing:
+!                x(i-1) < x(i),  i = 2(1)n.
+!           (error return if not.)
+!
+!     f -- (input) real array of dependent variable values to be inter-
+!           polated.  f(1+(i-1)*incfd) is value corresponding to x(i).
+!
+!     d -- (output) real array of derivative values at the data points.
+!           these values will determine the cubic spline interpolant
+!           with the requested boundary conditions.
+!           the value corresponding to x(i) is stored in
+!                d(1+(i-1)*incfd),  i=1(1)n.
+!           no other entries in d are changed.
+!
+!     incfd -- (input) increment between successive values in f and d.
+!           this argument is provided primarily for 2-d applications.
+!           (error return if  incfd<1 .)
+!
+!     wk -- (scratch) real array of working storage.
+!
+!     nwk -- (input) length of work array.
+!           (error return if nwk<2*n .)
+!
+!     ierr -- (output) error flag.
+!           normal return:
+!              ierr = 0  (no errors).
+!           "recoverable" errors:
+!              ierr = -1  if n<2 .
+!              ierr = -2  if incfd<1 .
+!              ierr = -3  if the x-array is not strictly increasing.
+!              ierr = -4  if ibeg<0 or ibeg>4 .
+!              ierr = -5  if iend<0 of iend>4 .
+!              ierr = -6  if both of the above are true.
+!              ierr = -7  if nwk is too small.
+!               note:  the above errors are checked in the order listed,
+!                   and following arguments have **not** been validated.
+!             (the d-array has not been changed in any of these cases.)
+!              ierr = -8  in case of trouble solving the linear system
+!                         for the interior derivative values.
+!             (the d-array may have been changed in this case.)
+!             (             do **not** use it!                )
+!
+!  references  carl de boor, a practical guide to splines, springer-
+!                 verlag (new york, 1978), pp. 53-59.
+!
+  integer incfd
+  integer n
+!
+  real d(incfd,n)
+  real f(incfd,n)
+  real g
+  integer ibeg
+  integer ic(2)
+  integer iend
+  integer ierr
+  integer index
+  integer j
+  integer nwk
+  real pchdf
+  real stemp(3)
+  real vc(2)
+  real wk(2,n)
+  real x(n)
+  real xtemp(4)
+!
+  if ( n<2 )  go to 5001
+  if ( incfd<1 )  go to 5002
+
+  do j = 2, n
+     if ( x(j)<=x(j-1) )  go to 5003
+  end do
+
+  ibeg = ic(1)
+  iend = ic(2)
+  ierr = 0
+  if ( (ibeg<0).or.(ibeg>4) )  ierr = ierr - 1
+  if ( (iend<0).or.(iend>4) )  ierr = ierr - 2
+  if ( ierr<0 )  go to 5004
+!
+!function definition is ok -- go on.
+!
+  if ( nwk < 2*n )  go to 5007
+!
+!  compute first differences of x sequence and store in wk(1,.). also,
+!  compute first divided difference of data and store in wk(2,.).
+!
+  do j=2,n
+     wk(1,j) = x(j) - x(j-1)
+     wk(2,j) = (f(1,j) - f(1,j-1))/wk(1,j)
+  end do
+!
+!  set to default boundary conditions if n is too small.
+!
+  if ( ibeg>n )  ibeg = 0
+  if ( iend>n )  iend = 0
+!
+!  set up for boundary conditions.
+!
+  if ( (ibeg==1).or.(ibeg==2) )  then
+     d(1,1) = vc(1)
+  else if (ibeg > 2)  then
+!
+!        pick up first ibeg points, in reverse order.
+!
+     do j = 1, ibeg
+        index = ibeg-j+1
+        xtemp(j) = x(index)
+        if (j < ibeg)  stemp(j) = wk(2,index)
+     end do
+
+     d(1,1) = pchdf (ibeg, xtemp, stemp, ierr)
+     if (ierr /= 0)  go to 5009
+     ibeg = 1
+  end if
+
+  if ( (iend==1).or.(iend==2) )  then
+     d(1,n) = vc(2)
+  else if (iend > 2)  then
+!
+!        pick up last iend points.
+!
+     do j = 1, iend
+        index = n-iend+j
+        xtemp(j) = x(index)
+        if (j < iend)  stemp(j) = wk(2,index+1)
+     end do
+
+     d(1,n) = pchdf (iend, xtemp, stemp, ierr)
+
+     if (ierr /= 0)  go to 5009
+     iend = 1
+  end if
+!
+!  begin coding from cubspl
+!
+!  a tridiagonal linear system for the unknown slopes s(j) of
+!  f  at x(j), j=1,...,n, is generated and then solved by gauss elim-
+!  ination, with s(j) ending up in d(1,j), all j.
+!     wk(1,.) and wk(2,.) are used for temporary storage.
+!
+!  construct first equation from first boundary condition, of the form
+!             wk(2,1)*s(1) + wk(1,1)*s(2) = d(1,1)
+!
+  if (ibeg == 0)  then
+     if (n == 2)  then
+!           no condition at left end and n = 2.
+        wk(2,1) = 1.0E+00
+        wk(1,1) = 1.0E+00
+        d(1,1) = 2.0E+00 * wk(2,2)
+     else
+!           not-a-knot condition at left end and n > 2.
+        wk(2,1) = wk(1,3)
+        wk(1,1) = wk(1,2) + wk(1,3)
+        d(1,1) =((wk(1,2) + 2.0E+00 * wk(1,1))*wk(2,2)*wk(1,3) &
+                             + wk(1,2)**2*wk(2,3)) / wk(1,1)
+     end if
+  else if (ibeg == 1)  then
+!        slope prescribed at left end.
+     wk(2,1) = 1.0E+00
+     wk(1,1) = 0.0E+00
+  else
+!        second derivative prescribed at left end.
+     wk(2,1) = 2.0E+00
+     wk(1,1) = 1.0E+00
+     d(1,1) = 3.0*wk(2,2) - 0.5*wk(1,2)*d(1,1)
+  end if
+!
+!  if there are interior knots, generate the corresponding equations and
+!  carry out the forward pass of gauss elimination, after which the j-th
+!  equation reads    wk(2,j)*s(j) + wk(1,j)*s(j+1) = d(1,j).
+!
+  if (n-1 > 1)  then
+    do j=2,n-1
+        if (wk(2,j-1) == 0.0E+00 )  go to 5008
+        g = -wk(1,j+1)/wk(2,j-1)
+        d(1,j) = g*d(1,j-1) + 3.0*(wk(1,j)*wk(2,j+1) + wk(1,j+1)*wk(2,j))
+        wk(2,j) = g*wk(1,j-1) + 2.0E+00 *(wk(1,j) + wk(1,j+1))
+    end do
+  end if
+!
+!  construct last equation from second boundary condition, of the form
+!           (-g*wk(2,n-1))*s(n-1) + wk(2,n)*s(n) = d(1,n)
+!
+!     if slope is prescribed at right end, one can go directly to back-
+!     substitution, since arrays happen to be set up just right for it
+!     at this point.
+  if (iend == 1)  go to 30
+!
+  if (iend == 0)  then
+     if (n==2 .and. ibeg==0)  then
+!           not-a-knot at right endpoint and at left endpoint and n = 2.
+        d(1,2) = wk(2,2)
+        go to 30
+     else if ((n==2) .or. (n==3 .and. ibeg==0))  then
+!           either (n=3 and not-a-knot also at left) or (n=2 and *not*
+!           not-a-knot at left end point).
+        d(1,n) = 2.0E+00 *wk(2,n)
+        wk(2,n) = 1.0E+00
+        if (wk(2,n-1) == 0.0E+00 )  go to 5008
+        g = -1.0/wk(2,n-1)
+     else
+!           not-a-knot and n >= 3, and either n>3 or  also not-a-
+!           knot at left end point.
+        g = wk(1,n-1) + wk(1,n)
+!           do not need to check following denominators (x-differences).
+        d(1,n) = ((wk(1,n)+2.0E+00 *g)*wk(2,n)*wk(1,n-1) &
+          + wk(1,n)**2*(f(1,n-1)-f(1,n-2))/wk(1,n-1))/g
+        if (wk(2,n-1) == 0.0E+00 )  go to 5008
+        g = -g/wk(2,n-1)
+        wk(2,n) = wk(1,n-1)
+     end if
+  else
+!        second derivative prescribed at right endpoint.
+     d(1,n) = 3.0*wk(2,n) + 0.5*wk(1,n)*d(1,n)
+     wk(2,n) = 2.0E+00
+     if (wk(2,n-1) == 0.0E+00 )  go to 5008
+     g = -1.0/wk(2,n-1)
+  end if
+!
+!  complete forward pass of gauss elimination.
+!
+  wk(2,n) = g*wk(1,n-1) + wk(2,n)
+  if (wk(2,n) == 0.0E+00 )   go to 5008
+  d(1,n) = (g*d(1,n-1) + d(1,n))/wk(2,n)
+!
+!  carry out back substitution
+!
+   30 continue
+
+  do j=n-1,1,-1
+     if (wk(2,j) == 0.0E+00 )  go to 5008
+     d(1,j) = (d(1,j) - wk(1,j)*d(1,j+1))/wk(2,j)
+  end do
+
+  return
+!
+!  error returns.
+!
+ 5001 continue
+!     n<2 return.
+  ierr = -1
+  call xerror ('pchsp -- number of data points less than two', 44, ierr, 1)
+  return
+
+ 5002 continue
+!     incfd<1 return.
+  ierr = -2
+  call xerror ('pchsp -- increment less than one', 32, ierr, 1)
+  return
+
+ 5003 continue
+!     x-array not strictly increasing.
+  ierr = -3
+  call xerror ('pchsp -- x-array not strictly increasing', 40, ierr, 1)
+  return
+!
+ 5004 continue
+!     ic out of range return.
+  ierr = ierr - 3
+  call xerror ('pchsp -- ic out of range', 24, ierr, 1)
+  return
+
+ 5007 continue
+!     nwk too small return.
+  ierr = -7
+  call xerror ('pchsp -- work array too small', 29, ierr, 1)
+  return
+!
+ 5008 continue
+!     singular system.
+!   *** theoretically, this can only occur if successive x-values
+!   *** are equal, which should already have been caught (ierr=-3).
+  ierr = -8
+  call xerror ('pchsp -- singular linear system', 31, ierr, 1)
+  return
+!
+ 5009 continue
+!     error return from pchdf.
+!   *** this case should never occur.
+  ierr = -9
+  call xerror ('pchsp -- error return from pchdf', 32, ierr, 1)
+  return
+end
+function pchst(arg1,arg2)
+!
+!*******************************************************************************
+!
+!! PCHST: pchip sign-testing routine.
+!
+!
+!     returns:
+!        -1. if arg1 and arg2 are of opposite sign.
+!         0. if either argument is zero.
+!        +1. if arg1 and arg2 are of the same sign.
+!
+!     the object is to do this without multiplying arg1*arg2, to avoid
+!     possible over/underflow problems.
+!
+!  programmed by:  fred n. fritsch,  fts 532-4275, (415) 422-4275,
+!                  mathematics and statistics division,
+!                  lawrence livermore national laboratory.
+!
+!
+  real arg1
+  real arg2
+  real pchst
+!
+!  perform the test.
+!
+  pchst = sign(1.0,arg1) * sign(1.0,arg2)
+  if ((arg1==0.0) .or. (arg2==0.0))  pchst = 0.0E+00
+!
+  return
+end
+subroutine pchsw(dfmax,iextrm,d1,d2,h,slope,ierr)
+!
+!*******************************************************************************
+!
+!! PCHSW: pchcs switch excursion limiter.
+!
+!
+!     called by  pchcs  to adjust d1 and d2 if necessary to insure that
+!     the extremum on this interval is not further than dfmax from the
+!     extreme data value.
+!
+!  Parameters:
+!
+!     dfmax -- (input) maximum allowed difference between f(iextrm) and
+!           the cubic determined by derivative values d1,d2.  (assumes
+!           dfmax>0.)
+!
+!     iextrm -- (input) index of the extreme data value.  (assumes
+!           iextrm = 1 or 2 .  any value /=1 is treated as 2.)
+!
+!     d1,d2 -- (input) derivative values at the ends of the interval.
+!           (assumes d1*d2 <= 0.)
+!          (output) may be modified if necessary to meet the restriction
+!           imposed by dfmax.
+!
+!     h -- (input) interval length.  (assumes  h>0.)
+!
+!     slope -- (input) data slope on the interval.
+!
+!     ierr -- (output) error flag.  should be zero.
+!           if ierr=-1, assumption on d1 and d2 is not satisfied.
+!           if ierr=-2, quadratic equation locating extremum has
+!                       negative descriminant (should never occur).
+!
+  real cp
+  real d1
+  real d2
+  real dfmax
+  real dmax
+  real, parameter :: fact = 100.0E+00
+  real h
+  integer ierr
+  integer iextrm
+  real lambda
+  real nu
+  real phi
+  real radcal
+  real rho
+  real r1mach
+  real sigma
+  real slope
+  real small
+  real that
+  real, parameter :: third = 0.33333
+!
+!  notation and general remarks.
+!
+!     rho is the ratio of the data slope to the derivative being tested.
+!     lambda is the ratio of d2 to d1.
+!     that = t-hat(rho) is the normalized location of the extremum.
+!     phi is the normalized value of p(x)-f1 at x = xhat = x-hat(rho),
+!           where  that = (xhat - x1)/h .
+!        that is, p(xhat)-f1 = d*h*phi,  where d=d1 or d2.
+!     similarly,  p(xhat)-f2 = d*h*(phi-rho) .
+!
+!      small should be a few orders of magnitude greater than macheps.
+!
+  small = fact * epsilon ( 1.0E+00 )
+!
+!  do main calculation.
+!
+  if (d1 == 0.0)  then
+!
+!        special case -- d1==0.0E+00 .
+!
+!          if d2 is also zero, this routine should not have been called.
+     if (d2 == 0.0)  go to 5001
+!
+     rho = slope/d2
+!          extremum is outside interval when rho >= 1/3 .
+     if (rho >= third)  go to 5000
+     that = (2.0*(3.0*rho-1.0)) / (3.0*(2.0*rho-1.0))
+     phi = that**2 * ((3.0*rho-1.0)/3.0)
+!
+!          convert to distance from f2 if iextrm/=1 .
+     if (iextrm /= 1)  phi = phi - rho
+!
+!          test for exceeding limit, and adjust accordingly.
+     dmax = dfmax / (h*abs(phi))
+     if (abs(d2) > dmax)  d2 = sign (dmax, d2)
+  else
+!
+     rho = slope/d1
+     lambda = -d2/d1
+     if (d2 == 0.0)  then
+!
+!           special case -- d2==0.0E+00 .
+!
+!             extremum is outside interval when rho >= 1/3 .
+        if (rho >= third)  go to 5000
+        cp = 2.0E+00 - 3.0*rho
+        nu = 1.0E+00 - 2.0*rho
+        that = 1.0E+00 / (3.0*nu)
+     else
+        if (lambda <= 0.0)  go to 5001
+!
+!           normal case -- d1 and d2 both nonzero, opposite signs.
+!
+        nu = 1.0E+00 - lambda - 2.0*rho
+        sigma = 1.0E+00 - rho
+        cp = nu + sigma
+        if (abs(nu) > small)  then
+           radcal = (nu - (2.0*rho+1.0))*nu + sigma**2
+           if (radcal < 0.0)  go to 5002
+           that = (cp - sqrt(radcal)) / (3.0*nu)
+        else
+           that = 1.0/(2.0*sigma)
+        end if
+     end if
+     phi = that*((nu*that - cp)*that + 1.0)
+!
+!          convert to distance from f2 if iextrm/=1 .
+     if (iextrm /= 1)  phi = phi - rho
+!
+!          test for exceeding limit, and adjust accordingly.
+     dmax = dfmax / (h*abs(phi))
+     if (abs(d1) > dmax)  then
+        d1 = sign (dmax, d1)
+        d2 = -lambda*d1
+     end if
+  end if
+!
+!  normal return.
+!
+ 5000 continue
+  ierr = 0
+  return
+!
+!  error returns.
+!
+ 5001 continue
+!     d1 and d2 both zero, or both nonzero and same sign.
+  ierr = -1
+  call xerror ('pchsw -- d1 and/or d2 invalid', 29, ierr, 1)
+  return
+!
+ 5002 continue
+!     negative value of radical (should never occur).
+  ierr = -2
+  call xerror ('pchsw -- negative radical', 25, ierr, 1)
+
+  return
+end
+function pi ( )
+!
+!*******************************************************************************
+!
+!! PI returns the value of pi.
+!
+!
+!  Modified:
+!
+!    04 December 1998
+!
+!  Author:
+!
+!    John Burkardt
+!
+!  Parameters:
+!
+!    Output, real PI, the value of pi.
+!
+  real pi
+!
+  pi = 3.14159265358979323846264338327950288419716939937510E+00
+
+  return
+end
+function pimach ()
+!
+!*******************************************************************************
+!
+!! PIMACH returns the value of pi.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+!    Output, real PIMACH, the value of PI.
+!
+  real pimach
+!
+  pimach = 4.0E+00 * atan ( 1.0E+00 )
+
+  return
+end
+subroutine q1da(f,a,b,eps,r,e,kf,iflag)
+!
+!*******************************************************************************
+!
+!! Q1DA approximates the definite integral of a user defined function of one variable.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+!       f     (input) the name of the external function which
+!             evaluates the integrand.
+!       a
+!       b     (input) the endpoints of the integration interval
+!       eps   (input) the accuracy to which you want the integral
+!                computed.  if you want 2 digits of accuracy set
+!                eps=.01, for 3 digits set eps=.001, etc.
+!                eps must be positive.
+!       r     (output) q1da's best estimate of your integral
+!       e     (output) an estimate of abs(integral-r)
+!       kf    (output) the cost of the integration, measured in
+!                   number of evaluations of your integrand.
+!                   kf will always be at least 30.
+!       iflag (output) termination flag...possible values are
+!               0   normal completion, e satisfies
+!                        e<eps  and  e<eps*abs(r)
+!               1   normal completion, e satisfies
+!                        e<eps, but e>eps*abs(r)
+!               2   normal completion, e satisfies
+!                        e<eps*abs(r), but e>eps
+!               3   normal completion but eps was too small to
+!                     satisfy absolute or relative error request.
+!
+!               4   aborted calculation because of serious rounding
+!                     error.  probably e and r are consistent.
+!               5   aborted calculation because of insufficient storage.
+!                     r and e are consistent.
+!               6   aborted calculation because of serious difficulties
+!                     meeting your error request.
+!               7   aborted calculation because eps was set <= 0.0E+00
+!
+!            note...if iflag=3, 4, 5 or 6 consider using q1dax instead.
+!
+!    w h e r e   i s   y o u r   i n t e g r a n d ?
+!
+!        you must write a fortran function, called f, to evaluate
+!        the integrand.  usually this looks like...
+!               function f(x)
+!                    f=(evaluate the integrand at the point x)
+!                    return
+!               end
+!
+!
+!    t y p i c a l   p r o b l e m   s e t u p
+!
+!          a=0.0E+00
+!          b=1.0E+00          (set interval endpoints to [0,1])
+!          eps=0.001       (set accuracy request for 3 digits)
+!          call q1da(f,a,b,eps,r,e,kf,iflag)
+!        end
+!        function f(x)
+!            f=sin(2.*x)-sqrt(x)     (for example)
+!            return
+!        end
+!      for this sample problem, the output is
+!  0.0E+00    1.0E+00     .001    .041406750    .69077e-07    30    0
+!
+!    r e m a r k   i.
+!
+!           a small amout of randomization is built into this program.
+!           calling q1da a few times in succession will give different
+!           but hopefully consistent results.
+!
+!   r e m a r k   ii.
+!
+!           this routine is designed for integration over a finite
+!           interval.  thus the input arguments a and b must be
+!           valid real numbers on your computer.  if you want to do
+!           an integral over an infinite interval set a or b or both
+!           large enough so that the interval [a,b] contains most of
+!           the integrand.  care is necessary, however.  for example,
+!           to integrate exp(-x*x) on the entire real line one could
+!           take a=-20., b=20. or similar values to get good results.
+!           if you took a=-1.e10 and b=+1.e10 two bad things would
+!           occur. first, you will certainly get an error message from
+!           the exp routine, as its argument is too small.  other
+!           things could happen too, for example an underflow.
+!           second, even if the arithmetic worked properly q1da will
+!           surely give an incorrect answer, because its first try
+!           at sampling the integrand is based on your scaling and
+!           it is very unlikely to select evaluation points in the
+!           infinitesmally small interval [-20,20] where all the
+!           integrand is concentrated, when a, b are so large.
+!
+!    m o r e   f l e x i b i l i t y
+!
+!           q1da is an easy to use driver for another program, q1dax.
+!           q1dax provides several options which are not available
+!                with q1da.
+!
+  integer, parameter :: nmax = 50
+!
+  real a
+  real b
+  real e
+  real eps
+  real f
+  real fmax
+  real fmin
+  integer iflag
+  integer kf
+  integer nint
+  real r
+  logical rst
+  real w(nmax,6)
+!
+  external f
+!
+  nint=1
+  rst = .false.
+  call q1dax(f,a,b,eps,r,e,nint,rst,w,nmax,fmin,fmax,kf,iflag)
+
+  return
+end
+subroutine q1dax(f,a,b,eps,r,e,nint,rst,w,nmax,fmin,fmax,kf,iflag)
+!
+!*******************************************************************************
+!
+!! Q1DAX approximates the integral of a function of one variable.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!
+!             for an easier to use routine see q1da.
+!
+!             capabilities of q1dax (in addition to those of q1da)
+!             include:
+!                ability to restart a calculation to greater
+!                  accuracy without penalty...
+!                ability to specify an initial partition of
+!                  the integration interval...
+!                ability to increase the work space to handle
+!                  more difficult problems...
+!                output of largest/smallest integrand value for
+!                  applications such as scaling graphs...
+!
+!       a r g u m e n t s   i n   t h e   c a l l   s e q u e n c e
+!
+!       f      (input) the name of your integrand function.
+!                      this name must appear in an external statement
+!                      in any program which calls q1dax.
+!                      you must write f in the form
+!                         function f(x)
+!                              f=(evaluate integrand at the point x)
+!                              return
+!                         end
+!       a
+!       b       (input) endpoints of integration interval
+!       eps     (input)  accuracy to which the integral is to be calculated.
+!                          q1dax will try to achieve relative accuracy,
+!                          e.g. set eps=.01 for 2 digits, .001 for 3, etc.
+!       r       (output) the estimate of the integral
+!       e       (output) the estimate of the absolute error in r.
+!       nint    (input
+!                output)
+!                        as an input quantity, nint must be set to
+!                          the number of subintervals in the initial
+!                          partition of [a,b].  for most problems
+!                          this is just 1, the interval [a,b] itself.
+!                          nint must be less than nmax, see below.
+!                          nint is useful if you would like to help
+!                          q1dax locate a difficult spot on [a,b].
+!                          in this regard nint is used along
+!                          with the array w (see below).  if you set
+!                          nint=1 it is not necessary to be concerned
+!                          with w, except that it must be dimensioned...
+!                          as an example of more general applications,
+!                          if [a,b]=[0,1] but the integrand jumps at 0.3,
+!                          it would be wise to set nint=2 and then set
+!                                  w(1,1)=0.0E+00  (left endpoint)
+!                                  w(2,1)=0.3  (singular point)
+!                                  w(3,1)=1.0E+00  (right endpoint)
+!                          if you set nint greater than 1, be sure to
+!                          check that you have also set
+!                                w(1,1)=a  and  w(nint+1,1)=b
+!                        as an output quantity, nint gives the
+!                          number of subintervals in the final
+!                          partition of [a,b].
+!       rst     (input) a logical variable (e.g. true or false)
+!                       set rst=.false. for initial call to q1dax
+!                       set rst=.true. for a subsequent call,
+!                           e.g. one for which more accuracy is
+!                           desired (smaller eps).  a restart only
+!                           makes sense if the preceding call returned
+!                           with a value of iflag (see below) less than 3.
+!                           on a restart you may not change the values of any
+!                           other arguments in the call sequence, except eps.
+!       w(nmax,6) (input and
+!                  scratch)
+!                       w is an array used by q1dax.
+!                        you  m u s t  include a dimension statement in
+!                        your calling program to allocate this storage.
+!                        this should be of the form
+!                                   dimension w(nmax,6)
+!                        where nmax is an integer. an adequate value of
+!                        nmax is 50.  if you set nint>1 you must also
+!                        initialize w, see nint above.
+!       nmax    (input) an integer equal to the first subscript in the
+!                        dimension statement for the array w.  this is
+!                        also equal to the maximum number of subintervals
+!                        permitted in the internal partition of [a,b].
+!                        a value of 50 is ample for most problems.
+!       fmin
+!       fmax    (output) the smallest and largest values of the integrand
+!                          which occurred during the calculation.  the
+!                          actual integrand range on [a,b] may, of course,
+!                          be greater but probably not by more than 10%.
+!       kf      (output) the actual number of integrand evaluations used
+!                          by q1dax to approximate this integral.  kf
+!                          will always be at least 30.
+!       iflag   (output) termination flag...possible values are
+!                  0   normal completion, e satisfies
+!                           e<eps  and  e<eps*abs(r)
+!                  1   normal completion, e satisfies
+!                           e<eps, but e>eps*abs(r)
+!                  2   normal completion, e satisfies
+!                           e<eps*abs(r), but e>eps
+!                  3   normal completion but eps was too small to
+!                        satisfy absolute or relative error request.
+!                  4   aborted calculation because of serious rounding
+!                        error.  probably e and r are consistent.
+!                  5   aborted calculation because of insufficient storage.
+!                        r and e are consistent.  perhaps increasing nmax
+!                        will produce better results.
+!                  6   aborted calculation because of serious difficulties
+!                        meeting your error request.
+!                  7   aborted calculation because either eps, nint or nmax
+!                        has been set to an illegal value.
+!                  8   aborted calculation because you set nint>1 but forgot
+!                        to set w(1,1)=a  and  w(nint+1,1)=b
+!
+!     t y p i c a l   p r o b l e m   s e t   u p
+!
+!      dimension w(50,6)
+!      logical rst
+!      external f
+!      a=0.0E+00
+!      b=1.0E+00
+!      w(1,1)=a
+!      w(2,1)=.3      [set internal partition point at .3]
+!      w(3,1)=b
+!      nint=2         [initial partition has 2 intervals]
+!      rst=.false.
+!      eps=.001
+!      nmax=50
+!
+!    1 call q1dax(f,a,b,eps,r,e,nint,rst,w,nmax,fmin,fmax,kf,iflag)
+!
+!      if ( eps== .0001 .or. iflag>=3)stop
+!      rst=.true
+!      eps=.0001      [ask for another digit]
+!      go to 1
+!    end
+!    function f(x)
+!      if ( x< .3)
+!     1  then
+!          f=x**(0.2)*log(x)
+!        else
+!          f=sin(x)
+!      end if
+!      return
+!    end
+!
+!
+!            r e m a r k
+!
+!               when you use q1adx with nint=1, we have built a small
+!            amount of randomization into it.  repeated calls during
+!            the same run will produce different, but hopefully
+!            consistent, results.
+!
+  integer nmax
+!
+  real a
+  real b
+  integer c
+  real e
+  real eb
+  real epmach
+  real eps
+  real f
+  real fmax
+  real fmaxl
+  real fmaxr
+  real fmin
+  real fminl
+  real fminr
+  real fmn
+  real fmx
+  integer i
+  integer iflag
+  integer iroff
+  integer isamax
+  integer kf
+  integer loc
+  integer mxtry
+  integer nint
+  real r
+  real r1mach
+  real rab
+  real rabs
+  real rav
+  logical rst
+  real t
+  real te
+  real te1
+  real te2
+  real tr
+  real tr1
+  real tr2
+  real uflow
+  real uni
+  real w(nmax,6)
+  real xm
+!
+  external f
+!
+  epmach = epsilon ( epmach )
+  uflow = tiny ( uflow )
+  mxtry=nmax/2
+!
+!  in case there is no more room, we can toss out easy intervals,
+!  at most mxtry times.
+!
+  if ( a==b) then
+    r=0.0E+00
+    e=0.0E+00
+    nint=0
+    iflag=0
+    kf=1
+    fmin=f(a)
+    fmax=fmin
+    go to 20
+  end if
+
+  if ( rst) then
+     if ( iflag<3) then
+       eb=max(100.*uflow,max(eps,50.*epmach)*abs(r))
+       do i=1,nint
+           if ( abs(w(i,3))>(eb*(w(i,2)-w(i,1))/(b-a)) ) then
+                             w(i,3)=abs(w(i,3))
+           else
+                             w(i,3)=-abs(w(i,3))
+           end if
+       end do
+       go to 15
+     else
+       go to 20
+     end if
+  end if
+
+  kf=0
+
+  if ( eps <= 0. .or. nint <= 0 .or. nint >= nmax) then
+      iflag=7
+      go to 20
+  end if
+
+  if ( nint==1) then
+      w(1,1)=a
+      w(2,2)=b
+      w(1,5)=a
+      w(1,6)=b
+      w(2,5)=a
+      w(2,6)=b
+!
+!  Select the first subdivision randomly.
+!
+      w(1,2) = a + ( b - a ) / 2.0 * ( 2.0 * uni() + 7.0 ) / 8.0
+      w(2,1) = w(1,2)
+      nint = 2
+    else
+      if ( w(1,1)/=a .or. w(nint+1,1)/=b) then
+           iflag=8
+           go to 20
+      end if
+      w(1,5)=a
+      do i=1,nint
+         w(i,2)=w(i+1,1)
+         w(i,5)=w(i,1)
+         w(i,6)=w(i,2)
+      end do
+  end if
+
+  iflag = 0
+  iroff=0
+  rabs=0.0E+00
+
+  do i=1,nint
+
+      call gl15t(f,w(i,1),w(i,2),dble(w(i,5)),dble(w(i,6)), &
+               w(i,4),w(i,3),rab,rav,fmn,fmx)
+      kf=kf+15
+
+      if ( i==1) then
+        r=w(i,4)
+        e=w(i,3)
+        rabs=rabs+rab
+        fmin=fmn
+        fmax=fmx
+      else
+        r=r+w(i,4)
+        e=e+w(i,3)
+        rabs=rabs+rab
+        fmax=max(fmax,fmx)
+        fmin=min(fmin,fmn)
+      end if
+
+  end do
+
+  w(nint+1:nmax,3) = 0.0E+00
+
+   15 continue
+!
+!   main subprogram loop
+!
+  if ( 100.*epmach*rabs>=abs(r) .and. e<eps)go to 20
+  eb=max(100.*uflow,max(eps,50.*epmach)*abs(r))
+  if ( e<=eb) go to 20
+
+  if (nint<nmax) then
+    nint = nint+1
+    c = nint
+  else
+    c=0
+16  continue
+    if ( c==nmax .or. mxtry<=0) then
+        iflag=5
+        go to 20
+    end if
+
+    c=c+1
+    if ( w(c,3)>0.0) go to 16
+!
+!  found an interval to throw out
+!
+    mxtry=mxtry-1
+  end if
+
+  loc=isamax(nint,w(1,3),1)
+  xm = w(loc,1)+(w(loc,2)-w(loc,1))/2.
+  if ((max(abs(w(loc,1)),abs(w(loc,2))))> &
+    ((1.+100.*epmach)*(abs(xm)+0.1e+04*uflow))) then
+
+        call gl15t(f,w(loc,1),xm,dble(w(loc,5)),dble(w(loc,6)), &
+          tr1,te1,rab,rav,fminl,fmaxl)
+
+        kf=kf+15
+        if (te1<(eb*(xm-w(loc,1))/(b-a))) te1=-te1
+        call gl15t(f,xm,w(loc,2),dble(w(loc,5)),dble(w(loc,6)), &
+          tr2,te2,rab,rav,fminr,fmaxr)
+
+        kf=kf+15
+        fmin=min(fmin,fminl,fminr)
+        fmax=max(fmax,fmaxl,fmaxr)
+        if (te2<(eb*(w(loc,2)-xm)/(b-a))) te2=-te2
+        te = abs(w(loc,3))
+        tr = w(loc,4)
+        w(c,3) = te2
+        w(c,4) = tr2
+        w(c,1) = xm
+        w(c,2) = w(loc,2)
+        w(c,5) = w(loc,5)
+        w(c,6) = w(loc,6)
+        w(loc,3) = te1
+        w(loc,4) = tr1
+        w(loc,2) = xm
+        e = e-te+(abs(te1)+abs(te2))
+        r = r-tr+(tr1+tr2)
+        if ( abs(abs(te1)+abs(te2)-te)<0.001*te) then
+            iroff=iroff+1
+            if ( iroff>=10) then
+                 iflag=4
+                 go to 20
+            end if
+        end if
+      else
+        if (eb>w(loc,3))then
+               w(loc,3) = 0.
+           else
+               iflag=6
+               go to 20
+        end if
+  end if
+  go to 15
+!
+!  all exits from here
+!
+   20 continue
+  if ( iflag>=4)return
+  iflag=3
+  t=eps*abs(r)
+  if ( e>eps .and. e>t)return
+  iflag=2
+  if ( e>eps .and. e<t)return
+  iflag=1
+  if ( e<eps .and. e>t)return
+  iflag=0
+  return
+end
+subroutine qagi(f,bound,inf,epsabs,epsrel,result,abserr,neval, &
+  ier,limit,lenw,last,iwork,work)
+!
+!*******************************************************************************
+!
+!! QAGI calculates an approximation result to a given
+!            integral   i = integral of f over (bound,+infinity)
+!                    or i = integral of f over (-infinity,bound)
+!                    or i = integral of f over (-infinity,+infinity)
+!            hopefully satisfying following claim for accuracy
+!            abs(i-result)<=max(epsabs,epsrel*abs(i)).
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+!         on entry
+!            f      - real
+!                   function subprogram defining the integrand
+!                   function f(x). the actual name for f needs to be
+!                     declared e x t e r n a l in the driver program.
+!
+!            bound  - real
+!                     finite bound of integration range
+!                     (has no meaning if interval is doubly-infinite)
+!
+!            inf    - integer
+!                     indicating the kind of integration range involved
+!                     inf = 1 corresponds to  (bound,+infinity),
+!                     inf = -1            to  (-infinity,bound),
+!                     inf = 2             to (-infinity,+infinity).
+!
+!            epsabs - real
+!                     absolute accuracy requested
+!            epsrel - real
+!                     relative accuracy requested
+!                     if  epsabs<=0
+!                     and epsrel<max(50*rel.mach.acc.,0.5d-28),
+!                     the routine will end with ier = 6.
+!
+!
+!         on return
+!            result - real
+!                     approximation to the integral
+!
+!            abserr - real
+!                     estimate of the modulus of the absolute error,
+!                     which should equal or exceed abs(i-result)
+!
+!            neval  - integer
+!                     number of integrand evaluations
+!
+!            ier    - integer
+!                     ier = 0 normal and reliable termination of the
+!                             routine. it is assumed that the requested
+!                             accuracy has been achieved.
+!                   - ier>0 abnormal termination of the routine. the
+!                             estimates for result and error are less
+!                             reliable. it is assumed that the requested
+!                             accuracy has not been achieved.
+!            error messages
+!                     ier = 1 maximum number of subdivisions allowed
+!                             has been achieved. one can allow more
+!                             subdivisions by increasing the value of
+!                             limit (and taking the according dimension
+!                             adjustments into account). however, if
+!                             this yields no improvement it is advised
+!                             to analyze the integrand in order to
+!                             determine the integration difficulties. if
+!                             the position of a local difficulty can be
+!                             determined (e.g. singularity,
+!                             discontinuity within the interval) one
+!                             will probably gain from splitting up the
+!                             interval at this point and calling the
+!                             integrator on the subranges. if possible,
+!                             an appropriate special-purpose integrator
+!                             should be used, which is designed for
+!                             handling the type of difficulty involved.
+!                         = 2 the occurrence of roundoff error is
+!                             detected, which prevents the requested
+!                             tolerance from being achieved.
+!                             the error may be under-estimated.
+!                         = 3 extremely bad integrand behaviour occurs
+!                             at some points of the integration
+!                             interval.
+!                         = 4 the algorithm does not converge.
+!                             roundoff error is detected in the
+!                             extrapolation table.
+!                             it is assumed that the requested tolerance
+!                             cannot be achieved, and that the returned
+!                             result is the best which can be obtained.
+!                         = 5 the integral is probably divergent, or
+!                             slowly convergent. it must be noted that
+!                             divergence can occur with any other value
+!                             of ier.
+!                         = 6 the input is invalid, because
+!                             (epsabs<=0 and
+!                              epsrel<max(50*rel.mach.acc.,0.5d-28))
+!                              or limit<1 or leniw<limit*4.
+!                             result, abserr, neval, last are set to
+!                             zero. exept when limit or leniw is
+!                             invalid, iwork(1), work(limit*2+1) and
+!                             work(limit*3+1) are set to zero, work(1)
+!                             is set to a and work(limit+1) to b.
+!
+!         dimensioning parameters
+!            limit - integer
+!                    dimensioning parameter for iwork
+!                    limit determines the maximum number of subintervals
+!                    in the partition of the given integration interval
+!                    (a,b), limit>=1. in many cases limit = 100 is ok.
+!                    if limit<1, the routine will end with ier = 6.
+!
+!            lenw  - integer
+!                    dimensioning parameter for work
+!                    lenw must be at least limit*4.
+!                    if lenw<limit*4, the routine will end
+!                    with ier = 6.
+!
+!            last  - integer
+!                    on return, last equals the number of subintervals
+!                    produced in the subdivision process, which
+!                    determines the number of significant elements
+!                    actually in the work arrays.
+!
+!         work arrays
+!            iwork - integer
+!                    vector of dimension at least limit, the first
+!                    k elements of which contain pointers
+!                    to the error estimates over the subintervals,
+!                    such that work(limit*3+iwork(1)),... ,
+!                    work(limit*3+iwork(k)) form a decreasing
+!                    sequence, with k = last if last<=(limit/2+2), and
+!                    k = limit+1-last otherwise
+!
+!            work  - real
+!                    vector of dimension at least lenw
+!                    on return
+!                    work(1), ..., work(last) contain the left
+!                   end points of the subintervals in the
+!                     partition of (a,b),
+!                    work(limit+1), ..., work(limit+last) contain
+!                     the right end points,
+!                    work(limit*2+1), ...,work(limit*2+last) contain the
+!                     integral approximations over the subintervals,
+!                    work(limit*3+1), ..., work(limit*3)
+!                     contain the error estimates.
+!
+  integer lenw
+  integer limit
+!
+  real abserr
+  real bound
+  real epsabs
+  real epsrel
+  real f
+  integer ier
+  integer inf
+  integer iwork(limit)
+  integer last
+  integer lvl
+  integer l1
+  integer l2
+  integer l3
+  integer neval
+  real result
+  real work(lenw)
+!
+  external f
+!
+!  check validity of limit and lenw.
+!
+  ier = 6
+  neval = 0
+  last = 0
+  result = 0.0E+00
+  abserr = 0.0E+00
+
+  if ( limit < 1 .or. lenw < limit * 4 ) go to 10
+!
+!  prepare call for qagie.
+!
+  l1 = limit+1
+  l2 = limit+l1
+  l3 = limit+l2
+
+  call qagie(f,bound,inf,epsabs,epsrel,limit,result,abserr, &
+    neval,ier,work(1),work(l1),work(l2),work(l3),iwork,last)
+!
+!  call error handler if necessary.
+!
+  lvl = 0
+
+10    continue
+
+  if ( ier==6) lvl = 1
+  if ( ier/=0) call xerror( 'abnormal return from  qagi', 26,ier,lvl)
+
+  return
+end
+subroutine qagie(f,bound,inf,epsabs,epsrel,limit,result,abserr, &
+  neval,ier,alist,blist,rlist,elist,iord,last)
+!
+!*******************************************************************************
+!
+!! QAGIE ??
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+  integer, parameter :: limexp = 50
+  integer limit
+!
+  real abseps
+  real abserr
+  real alist(limit)
+  real area
+  real area1
+  real area12
+  real area2
+  real a1
+  real a2
+  real blist(limit)
+  real boun
+  real bound
+  real b1
+  real b2
+  real correc
+  real defabs
+  real defab1
+  real defab2
+  real dres
+  real elist(limit)
+  real epmach
+  real epsabs
+  real epsrel
+  real erlarg
+  real erlast
+  real errbnd
+  real errmax
+  real error1
+  real error2
+  real erro12
+  real errsum
+  real ertest
+  logical extrap
+  real f
+  integer id
+  integer ier
+  integer ierr
+  integer ierro
+  integer inf
+  integer iord(limit)
+  integer iroff1
+  integer iroff2
+  integer iroff3
+  integer jupbnd
+  integer k
+  integer ksgn
+  integer ktmin
+  integer last
+  logical lerr
+  integer maxerr
+  integer neval
+  logical newflg
+  logical noext
+  integer nrmax
+  real resabs
+  real reseps
+  real result
+  real rlist(limit)
+  real rlist2(limexp+7)
+  real r1mach
+  real small
+  real uflow
+!
+!           limexp is the size of the epsilon table that can be
+!           generated in ea
+!
+  external f
+!
+   epmach = epsilon ( epmach )
+!
+!           test on validity of parameters
+!
+  ier = 0
+  neval = 0
+  last = 0
+  result = 0.0E+00
+  abserr = 0.0E+00
+  alist(1) = 0.0E+00
+  blist(1) = 1.0E+00
+  rlist(1) = 0.0E+00
+  elist(1) = 0.0E+00
+  iord(1) = 0
+  newflg = .true.
+
+  if ( epsabs<=0.0E+00 .and. epsrel< max (0.5e+02*epmach,0.5e-14) ) then
+    ier = 6
+    go to 999
+  end if
+!
+!  first approximation to the integral
+!
+!  determine the interval to be mapped onto (0,1).
+!  if inf = 2 the integral is computed as i = i1+i2, where
+!  i1 = integral of f over (-infinity,0),
+!  i2 = integral of f over (0,+infinity).
+!
+  boun = bound
+  if ( inf==2) boun = 0.0E+00
+  call qk15i(f,boun,inf,0.0,1.0,result,abserr, defabs,resabs)
+!
+!  test on accuracy
+!
+  last = 1
+  rlist(1) = result
+  elist(1) = abserr
+  iord(1) = 1
+  dres = abs(result)
+  errbnd = max (epsabs,epsrel*dres)
+  if ( abserr<=1.0e+02*epmach*defabs.and.abserr>errbnd) ier = 2
+  if ( limit==1) ier = 1
+
+  if ( ier/=0.or.(abserr<=errbnd.and.abserr/=resabs).or.abserr==0.0) then
+    go to 130
+  end if
+!
+!  Initialization.
+!
+  uflow = 2.0E+00 * tiny ( uflow )
+  lerr = .false.
+  call ea(newflg,result,limexp,reseps,abseps,rlist2,ierr)
+  errmax = abserr
+  maxerr = 1
+  area = result
+  errsum = abserr
+  nrmax = 1
+  ktmin = 0
+  extrap = .false.
+  noext = .false.
+  ierro = 0
+  iroff1 = 0
+  iroff2 = 0
+  iroff3 = 0
+  ksgn = -1
+  if ( dres>=(1.0-0.5e+02*epmach)*defabs) ksgn = 1
+!
+!  main do-loop
+!
+  do 90 last = 2,limit
+!
+!  bisect the subinterval with nrmax-th largest error estimate.
+!
+    a1 = alist(maxerr)
+    b1 = 0.5*(alist(maxerr)+blist(maxerr))
+    a2 = b1
+    b2 = blist(maxerr)
+    erlast = errmax
+    call qk15i(f,boun,inf,a1,b1,area1,error1,resabs,defab1)
+    call qk15i(f,boun,inf,a2,b2,area2,error2,resabs,defab2)
+!
+!  Improve previous approximations to integral
+!  and error and test for accuracy.
+!
+    area12 = area1+area2
+    erro12 = error1+error2
+    errsum = errsum+erro12-errmax
+    area = area+area12-rlist(maxerr)
+    if ( defab1==error1.or.defab2==error2)go to 15
+
+    if ( abs(rlist(maxerr)-area12)>0.1e-04*abs(area12) .or. &
+      erro12<0.99*errmax) go to 10
+
+    if ( extrap) iroff2 = iroff2+1
+    if ( .not.extrap) iroff1 = iroff1+1
+   10   if ( last>10.and.erro12>errmax) iroff3 = iroff3+1
+   15   rlist(maxerr) = area1
+    rlist(last) = area2
+    errbnd = max (epsabs,epsrel*abs(area))
+!
+!  Test for roundoff error and eventually set error flag.
+!
+    if ( iroff1+iroff2>=10.or.iroff3>=20) ier = 2
+    if ( iroff2>=5) ierro = 3
+!
+!  Set error flag in the case that the number of subintervals equals limit.
+!
+    if ( last==limit) ier = 1
+!
+!  Set error flag in the case of bad integrand behaviour
+!  at some points of the integration range.
+!
+    if ( max (abs(a1),abs(b2))<=(1.0+0.1e+03*epmach)* &
+      (abs(a2)+0.1e+04*uflow)) then
+      ier = 4
+    end if
+!
+!  Append the newly-created intervals to the list.
+!
+    if ( error2>error1) go to 20
+    alist(last) = a2
+    blist(maxerr) = b1
+    blist(last) = b2
+    elist(maxerr) = error1
+    elist(last) = error2
+    go to 30
+   20   alist(maxerr) = a2
+    alist(last) = a1
+    blist(last) = b1
+    rlist(maxerr) = area2
+    rlist(last) = area1
+    elist(maxerr) = error2
+    elist(last) = error1
+!
+!           call subroutine qpsrt to maintain the descending ordering
+!           in the list of error estimates and select the
+!           subinterval with nrmax-th largest error estimate (to be
+!           bisected next).
+!
+   30   call qpsrt(limit,last,maxerr,errmax,elist,iord,nrmax)
+    if ( errsum<=errbnd) go to 115
+    if ( ier/=0) go to 100
+    if ( last==2) go to 80
+    if ( noext) go to 90
+    erlarg = erlarg-erlast
+    if ( abs(b1-a1)>small) erlarg = erlarg+erro12
+    if ( extrap) go to 40
+!
+!           test whether the interval to be bisected next is the
+!           smallest interval.
+!
+    if ( abs(blist(maxerr)-alist(maxerr))>small) go to 90
+    extrap = .true.
+    nrmax = 2
+   40   if ( ierro==3.or.erlarg<=ertest) go to 60
+!
+!           the smallest interval has the largest error.
+!           before bisecting decrease the sum of the errors
+!           over the larger intervals (erlarg) and perform
+!           extrapolation.
+!
+    id = nrmax
+    jupbnd = last
+    if ( last>(2+limit/2)) then
+      jupbnd = limit+3-last
+    end if
+
+    do k = id,jupbnd
+      maxerr = iord(nrmax)
+      errmax = elist(maxerr)
+      if ( abs(blist(maxerr)-alist(maxerr))>small) go to 90
+      nrmax = nrmax+1
+    end do
+!
+!           perform extrapolation.
+!
+   60   call ea(newflg,area,limexp,reseps,abseps,rlist2,ierr)
+    ktmin = ktmin+1
+
+    if ( (ktmin>5).and.(abserr<0.1e-02*errsum).and.(lerr)) then
+      ier = 5
+    end if
+
+    if ( (abseps>=abserr).and.(lerr)) go to 70
+    ktmin = 0
+    abserr = abseps
+    lerr = .true.
+    result = reseps
+    correc = erlarg
+    ertest = max (epsabs,epsrel*abs(reseps))
+    if ( (abserr<=ertest).and.(lerr)) go to 100
+!
+!            prepare bisection of the smallest interval.
+!
+   70   if ( rlist2(limexp+3)==1) noext = .true.
+    if ( ier==5) go to 100
+    maxerr = iord(1)
+    errmax = elist(maxerr)
+    nrmax = 1
+    extrap = .false.
+    small = small*0.5
+    erlarg = errsum
+    go to 90
+   80   small = 0.375
+    erlarg = errsum
+    ertest = errbnd
+    call ea(newflg,area,limexp,reseps,abseps,rlist2,ierr)
+   90 continue
+!
+!           set final result and error estimate.
+!
+  100 if ( .not.lerr) go to 115
+  if ( (ier+ierro)==0) go to 110
+  if ( ierro==3) abserr = abserr+correc
+  if ( ier==0) ier = 3
+  if ( result/=0.0.and.area/=0.0)go to 105
+  if ( abserr>errsum)go to 115
+  if ( area==0.0) go to 130
+  go to 110
+  105 if ( abserr/abs(result)>errsum/abs(area))go to 115
+!
+!           test on divergence
+!
+  110 continue
+
+    if ( ksgn==(-1).and. max (abs(result),abs(area))<=defabs*0.1e-01) then
+      go to 130
+    end if
+
+  if ( 0.1e-01>(result/area).or.(result/area)>0.1e+03.or.errsum>abs(area)) then
+    ier = 6
+  end if
+
+  go to 130
+!
+!  Compute global integral sum.
+!
+  115 continue
+
+  result = 0.0E+00
+  do k = 1,last
+    result = result+rlist(k)
+  end do
+
+  abserr = errsum
+  130 neval = 30*last-15
+  if ( inf==2) neval = 2*neval
+  if ( ier>2) ier=ier-1
+  999 return
+end
+subroutine qform(m,n,q,ldq,wa)
+!
+!*******************************************************************************
+!
+!! QFORM produces the explicit QR factorization of a matrix from its implicit form.
+!
+!
+!  Discussion:
+!
+!    The QR factorization of a matrix is usually accumulated in implicit
+!    form, that is, as a series of orthogonal transformations of the
+!    original matrix.  This routine carries out those transformations,
+!    to explicitly exhibit the factorization construced by QRFAC.
+!
+!  Parameters:
+!
+!       m is a positive integer input variable set to the number
+!         of rows of a and the order of q.
+!
+!       n is a positive integer input variable set to the number
+!         of columns of a.
+!
+!       q is an m by m array. on input the full lower trapezoid in
+!         the first min(m,n) columns of q contains the factored form.
+!         on output q has been accumulated into a square matrix.
+!
+!       ldq is a positive integer input variable not less than m
+!         which specifies the leading dimension of the array q.
+!
+!       wa is a work array of length m.
+!
+  integer ldq
+  integer m
+  integer n
+!
+  integer i
+  integer j
+  integer jm1
+  integer k
+  integer l
+  integer minmn
+  integer np1
+  real q(ldq,m)
+  real sum
+  real temp
+  real wa(m)
+!
+  minmn = min(m,n)
+
+  do j = 2, minmn
+    q(1:j-1,j) = 0.0E+00
+  end do
+!
+!  Initialize remaining columns to those of the identity matrix.
+!
+  np1 = n + 1
+
+  do j = n+1, m
+    do i = 1, m
+      q(i,j) = 0.0E+00
+    end do
+    q(j,j) = 1.0E+00
+  end do
+!
+!     accumulate q from its factored form.
+!
+  do l = 1, minmn
+
+    k = minmn - l + 1
+
+    wa(k:m) = q(k:m,k)
+
+    q(k:m,k) = 0.0E+00
+    q(k,k) = 1.0E+00
+
+    if (wa(k) /= 0.0) then
+
+      do j = k, m
+        sum = 0.0E+00
+        do i = k, m
+          sum = sum + q(i,j)*wa(i)
+        end do
+        temp = sum/wa(k)
+        do i = k, m
+          q(i,j) = q(i,j) - temp*wa(i)
+        end do
+      end do
+
+    end if
+
+  end do
+
+  return
+end
+subroutine qk15(f,a,b,result,abserr,resabs,resasc)
+!
+!*******************************************************************************
+!
+!! QK15 carries out a 15 point Gauss-Kronrod quadrature rule.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+!           on entry
+!
+!              f      - real
+!                     function subprogram defining the integrand
+!                     function f(x). the actual name for f needs to be
+!                       declared e x t e r n a l in the calling program.
+!
+!              a      - real: lower limit of integration
+!
+!              b      - real: upper limit of integration
+!
+!            on return
+!              result - real: approximation to the integral i
+!                       result is computed by applying the 15-point
+!                       kronrod rule (resk) obtained by optimal addition
+!                       of abscissae to the7-point gauss rule(resg).
+!
+!              abserr - real: estimate of the modulus of the absolute error,
+!                       which should not exceed abs(i-result)
+!
+!              resabs - real: approximation to the integral j
+!
+!              resasc - real: approximation to the integral of abs(f-i/(b-a))
+!                       over (a,b)
+!
+!  references
+!
+!    piessens r. et. al.,
+!    "quadpack: a subroutine package for automatic integration"
+!    springer, berlin 1983.
+!
+  real a
+  real absc
+  real abserr
+  real b
+  real centr
+  real dhlgth
+  real epmach
+  real f
+  real fc
+  real fsum
+  real fval1
+  real fval2
+  real fv1(7)
+  real fv2(7)
+  real hlgth
+  integer j
+  integer jtw
+  integer jtwm1
+  real resabs
+  real resasc
+  real resg
+  real resk
+  real reskh
+  real result
+  real r1mach
+  real uflow
+  real wg(4)
+  real wgk(8)
+  real xgk(8)
+!
+  external f
+!
+!           the abscissae and weights are given for the interval (-1,1).
+!           because of symmetry only the positive abscissae and their
+!           corresponding weights are given.
+!
+!           xgk    - abscissae of the 15-point kronrod rule
+!                    xgk(2), xgk(4), ...  abscissae of the 7-point
+!                    gauss rule
+!                    xgk(1), xgk(3), ...  abscissae which are optimally
+!                    added to the 7-point gauss rule
+!
+!           wgk    - weights of the 15-point kronrod rule
+!
+!           wg     - weights of the 7-point gauss rule
+!
+  data xgk(1),xgk(2),xgk(3),xgk(4),xgk(5),xgk(6),xgk(7),xgk(8)/ &
+          0.9914553711208126,   0.9491079123427585, &
+          0.8648644233597691,   0.7415311855993944, &
+          0.5860872354676911,   0.4058451513773972, &
+          0.2077849550078985,   0.0E+00              /
+
+  data wgk(1),wgk(2),wgk(3),wgk(4),wgk(5),wgk(6),wgk(7),wgk(8)/ &
+     0.2293532201052922e-01,   0.6309209262997855e-01, &
+     0.1047900103222502,   0.1406532597155259, &
+     0.1690047266392679,   0.1903505780647854, &
+     0.2044329400752989,   0.2094821410847278/
+
+  data wg(1),wg(2),wg(3),wg(4)/ &
+    0.1294849661688697,   0.2797053914892767, &
+    0.3818300505051189,   0.4179591836734694/
+!
+!
+!           list of major variables
+!
+!           centr  - mid point of the interval
+!           hlgth  - half-length of the interval
+!           absc   - abscissa
+!           fval*  - function value
+!           resg   - result of the 7-point gauss formula
+!           resk   - result of the 15-point kronrod formula
+!           reskh  - approximation to the mean value of f over (a,b),
+!                    i.e. to i/(b-a)
+!
+  epmach = epsilon ( epmach )
+  uflow = tiny ( uflow )
+  centr = 0.5*(a+b)
+  hlgth = 0.5*(b-a)
+  dhlgth = abs(hlgth)
+!
+!  compute the 15-point kronrod approximation to
+!  the integral, and estimate the absolute error.
+!
+  fc = f(centr)
+  resg = fc*wg(4)
+  resk = fc*wgk(8)
+  resabs = abs(resk)
+
+  do j=1,3
+    jtw = j*2
+    absc = hlgth*xgk(jtw)
+    fval1 = f(centr-absc)
+    fval2 = f(centr+absc)
+    fv1(jtw) = fval1
+    fv2(jtw) = fval2
+    fsum = fval1+fval2
+    resg = resg+wg(j)*fsum
+    resk = resk+wgk(jtw)*fsum
+    resabs = resabs+wgk(jtw)*(abs(fval1)+abs(fval2))
+  end do
+
+  do j = 1,4
+    jtwm1 = j*2-1
+    absc = hlgth*xgk(jtwm1)
+    fval1 = f(centr-absc)
+    fval2 = f(centr+absc)
+    fv1(jtwm1) = fval1
+    fv2(jtwm1) = fval2
+    fsum = fval1+fval2
+    resk = resk+wgk(jtwm1)*fsum
+    resabs = resabs+wgk(jtwm1)*(abs(fval1)+abs(fval2))
+  end do
+
+  reskh = resk * 0.5
+  resasc = wgk(8)*abs(fc-reskh)
+
+  do j=1,7
+    resasc = resasc+wgk(j)*(abs(fv1(j)-reskh)+abs(fv2(j)-reskh))
+  end do
+  result = resk*hlgth
+  resabs = resabs*dhlgth
+  resasc = resasc*dhlgth
+  abserr = abs((resk-resg)*hlgth)
+
+  if ( resasc /= 0.0E+00 .and. abserr /= 0.0) then
+    abserr = resasc* min (1.0,(0.2e+03*abserr/resasc)**1.5)
+  end if
+
+  if ( resabs>uflow/(0.5e+02*epmach)) then
+    abserr = max ((epmach*0.5e+02)*resabs,abserr)
+  end if
+
+  return
+end
+subroutine qk15i(f,boun,inf,a,b,result,abserr,resabs,resasc)
+!
+!*******************************************************************************
+!
+!! QK15I ??
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+  real a
+  real absc
+  real absc1
+  real absc2
+  real abserr
+  real b
+  real boun
+  real centr
+  real dinf
+  real r1mach
+  real epmach
+  real f
+  real fc
+  real fsum
+  real fval1
+  real fval2
+  real fv1(7)
+  real fv2(7)
+  real hlgth
+  integer inf
+  integer j
+  real resabs
+  real resasc
+  real resg
+  real resk
+  real reskh
+  real result
+  real tabsc1
+  real tabsc2
+  real uflow
+  real wg(8)
+  real wgk(8)
+  real xgk(8)
+!
+  external f
+!
+  data xgk(1),xgk(2),xgk(3),xgk(4),xgk(5),xgk(6),xgk(7), xgk(8)/ &
+          0.9914553711208126,     0.9491079123427585, &
+          0.8648644233597691,     0.7415311855993944, &
+          0.5860872354676911,     0.4058451513773972, &
+          0.2077849550078985,     0.0000000000000000/
+!
+  data wgk(1),wgk(2),wgk(3),wgk(4),wgk(5),wgk(6),wgk(7), wgk(8)/ &
+          0.2293532201052922e-01,     0.6309209262997855e-01, &
+          0.1047900103222502,     0.1406532597155259, &
+          0.1690047266392679,     0.1903505780647854, &
+          0.2044329400752989,     0.2094821410847278/
+!
+  data wg(1),wg(2),wg(3),wg(4),wg(5),wg(6),wg(7),wg(8)/ &
+          0.0000000000000000,     0.1294849661688697, &
+          0.0000000000000000,     0.2797053914892767, &
+          0.0000000000000000,     0.3818300505051189, &
+          0.0000000000000000,     0.4179591836734694/
+!
+  epmach = epsilon ( epmach )
+  uflow = tiny ( uflow )
+  dinf = min(1,inf)
+!
+  centr = 0.5 * ( a + b )
+  hlgth = 0.5 * ( b - a )
+  tabsc1 = boun+dinf*(1.0-centr)/centr
+  fval1 = f(tabsc1)
+  if ( inf==2) fval1 = fval1+f(-tabsc1)
+  fc = (fval1/centr)/centr
+!
+!           compute the 15-point kronrod approximation to
+!           the integral, and estimate the error.
+!
+  resg = wg(8)*fc
+  resk = wgk(8)*fc
+  resabs = abs(resk)
+
+  do j=1,7
+    absc = hlgth*xgk(j)
+    absc1 = centr-absc
+    absc2 = centr+absc
+    tabsc1 = boun+dinf*(1.0-absc1)/absc1
+    tabsc2 = boun+dinf*(1.0-absc2)/absc2
+    fval1 = f(tabsc1)
+    fval2 = f(tabsc2)
+    if ( inf==2) fval1 = fval1+f(-tabsc1)
+    if ( inf==2) fval2 = fval2+f(-tabsc2)
+    fval1 = (fval1/absc1)/absc1
+    fval2 = (fval2/absc2)/absc2
+    fv1(j) = fval1
+    fv2(j) = fval2
+    fsum = fval1+fval2
+    resg = resg+wg(j)*fsum
+    resk = resk+wgk(j)*fsum
+    resabs = resabs+wgk(j)*(abs(fval1)+abs(fval2))
+  end do
+
+  reskh = resk * 0.5
+  resasc = wgk(8)*abs(fc-reskh)
+  do j=1,7
+    resasc = resasc+wgk(j)*(abs(fv1(j)-reskh)+abs(fv2(j)-reskh))
+  end do
+
+  result = resk*hlgth
+  resasc = resasc*hlgth
+  resabs = resabs*hlgth
+  abserr = abs((resk-resg)*hlgth)
+
+  if ( resasc /= 0.0E+00 .and. abserr /= 0.0E+00 ) then
+    abserr = resasc* min (1.0,(0.2e+03*abserr/resasc)**1.5)
+  end if
+
+  if ( resabs>uflow/(0.5e+02*epmach)) then
+    abserr = max ((epmach*0.5e+02)*resabs,abserr)
+  end if
+
+  return
+end
+subroutine qpsrt(limit,last,maxerr,ermax,elist,iord,nrmax)
+!
+!*******************************************************************************
+!
+!! QPSRT ??
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+  integer last
+!
+  real elist(last)
+  real ermax
+  real errmax
+  real errmin
+  integer i
+  integer ibeg
+  integer ido
+  integer iord(last)
+  integer isucc
+  integer j
+  integer jbnd
+  integer jupbn
+  integer k
+  integer limit
+  integer maxerr
+  integer nrmax
+!
+!  check whether the list contains more than two error estimates.
+!
+  if ( last<=2) then
+    iord(1) = 1
+    iord(2) = 2
+    go to 90
+  end if
+!
+!  this part of the routine is only executed
+!  if, due to a difficult integrand, subdivision
+!  increased the error estimate. in the normal case
+!  the insert procedure should start after the
+!  nrmax-th largest error estimate.
+!
+  errmax = elist(maxerr)
+  if ( nrmax==1) go to 30
+  ido = nrmax-1
+
+  do i = 1,ido
+    isucc = iord(nrmax-1)
+    if ( errmax<=elist(isucc)) go to 30
+    iord(nrmax) = isucc
+    nrmax = nrmax-1
+  end do
+!
+!           compute the number of elements in the list to
+!           be maintained in descending order. this number
+!           depends on the number of subdivisions still
+!           allowed.
+!
+   30 continue
+
+  jupbn = last
+  if ( last>(limit/2+2)) jupbn = limit+3-last
+  errmin = elist(last)
+!
+!           insert errmax by traversing the list top-down,
+!           starting comparison from the element elist(iord(nrmax+1)).
+!
+  jbnd = jupbn-1
+  ibeg = nrmax+1
+
+  do i = ibeg, jbnd
+    isucc = iord(i)
+    if ( errmax>=elist(isucc)) go to 60
+    iord(i-1) = isucc
+  end do
+
+  iord(jbnd) = maxerr
+  iord(jupbn) = last
+  go to 90
+!
+!           insert errmin by traversing the list bottom-up.
+!
+60 continue
+
+  iord(i-1) = maxerr
+  k = jbnd
+  do j=i,jbnd
+    isucc = iord(k)
+    if ( errmin<elist(isucc)) go to 80
+    iord(k+1) = isucc
+    k = k-1
+  end do
+
+  iord(i) = last
+  go to 90
+
+80 continue
+
+  iord(k+1) = last
+!
+!  set maxerr and ermax.
+!
+90 continue
+
+  maxerr = iord(nrmax)
+  ermax = elist(maxerr)
+
+  return
+end
+subroutine qraux1(nr,n,r,i)
+!
+!*******************************************************************************
+!
+!! QRAUX1 interchanges rows i,i+1 of the upper hessenberg matrix r, columns i to n
+!
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of matrix
+! r(n,n)      <--> upper hessenberg matrix
+! i            --> index of row to interchange (i<n)
+!
+  integer n
+  integer nr
+!
+  integer i
+  integer j
+  real r(nr,n)
+!
+  do j = i, n
+    call r_swap ( r(i,j), r(i+1,j) )
+  end do
+
+  return
+end
+subroutine qraux2(nr,n,r,i,a,b)
+!
+!*******************************************************************************
+!
+!! QRAUX2 pre-multiplies r by the jacobi rotation j(i,i+1,a,b)
+!
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of matrix
+! r(n,n)      <--> upper hessenberg matrix
+! i            --> index of row
+! a            --> scalar
+! b            --> scalar
+!
+  integer n
+  integer nr
+!
+  real a
+  real b
+  real c
+  real den
+  integer i
+  integer j
+  real r(nr,1)
+  real s
+  real y
+  real z
+!
+  den=sqrt(a*a + b*b)
+  c=a/den
+  s=b/den
+
+  do j=i,n
+    y=r(i,j)
+    z=r(i+1,j)
+    r(i,j)=c*y - s*z
+    r(i+1,j)=s*y + c*z
+  end do
+
+  return
+end
+subroutine qrfac(m,n,a,lda,pivot,ipvt,lipvt,sigma,acnorm,wa)
+!
+!*******************************************************************************
+!
+!! QRFAC uses householder transformations with column
+!     pivoting (optional) to compute a qr factorization of the
+!     m by n matrix a. that is, qrfac determines an orthogonal
+!     matrix q, a permutation matrix p, and an upper trapezoidal
+!     matrix r with diagonal elements of nonincreasing magnitude,
+!     such that a*p = q*r. the householder transformation for
+!     column k, k = 1,2,...,min(m,n), is of the form
+!
+!                           t
+!           i - (1/u(k))*u*u
+!
+!     where u has zeros in the first k-1 positions. the form of
+!     this transformation and the method of pivoting first
+!     appeared in the corresponding linpack subroutine.
+!
+!  Parameters:
+!
+!       m is a positive integer input variable set to the number
+!         of rows of a.
+!
+!       n is a positive integer input variable set to the number
+!         of columns of a.
+!
+!       a is an m by n array. on input a contains the matrix for
+!         which the qr factorization is to be computed. on output
+!         the strict upper trapezoidal part of a contains the strict
+!         upper trapezoidal part of r, and the lower trapezoidal
+!         part of a contains a factored form of q (the non-trivial
+!         elements of the u vectors described above).
+!
+!       lda is a positive integer input variable not less than m
+!         which specifies the leading dimension of the array a.
+!
+!       pivot is a logical input variable. if pivot is set .true.,
+!         then column pivoting is enforced. if pivot is set .false.,
+!         then no column pivoting is done.
+!
+!       ipvt is an integer output array of length lipvt. ipvt
+!         defines the permutation matrix p such that a*p = q*r.
+!         column j of p is column ipvt(j) of the identity matrix.
+!         if pivot is .false., ipvt is not referenced.
+!
+!       lipvt is a positive integer input variable. if pivot is
+!             .false., then lipvt may be as small as 1. if pivot is
+!             .true., then lipvt must be at least n.
+!
+!       sigma is an output array of length n which contains the
+!         diagonal elements of r.
+!
+!       acnorm is an output array of length n which contains the
+!         norms of the corresponding columns of the input matrix a.
+!         if this information is not needed, then acnorm can coincide
+!         with sigma.
+!
+!       wa is a work array of length n. if pivot is .false., then wa
+!         can coincide with sigma.
+!
+  integer lipvt
+  integer lda
+  integer n
+!
+  real a(lda,n)
+  real acnorm(n)
+  real ajnorm
+  real epsmch
+  integer i
+  integer ipvt(lipvt)
+  integer j
+  integer jp1
+  integer k
+  integer kmax
+  integer m
+  integer minmn
+  logical pivot
+  real r1mach
+  real sigma(n)
+  real snrm2
+  real sum
+  real temp
+  real wa(n)
+!
+  epsmch = epsilon ( epsmch )
+!
+!  compute the initial column norms and initialize several arrays.
+!
+  do j = 1, n
+    acnorm(j) = snrm2(m,a(1,j),1)
+    sigma(j) = acnorm(j)
+    wa(j) = sigma(j)
+    if (pivot) ipvt(j) = j
+  end do
+!
+!  reduce a to r with householder transformations.
+!
+  minmn = min ( m, n )
+
+  do j = 1, minmn
+
+    if ( pivot ) then
+!
+!  bring the column of largest norm into the pivot position.
+!
+      kmax = j
+      do k = j, n
+        if (sigma(k) > sigma(kmax)) kmax = k
+      end do
+
+      if ( kmax /= j) then
+
+        do i = 1, m
+          temp = a(i,j)
+          a(i,j) = a(i,kmax)
+          a(i,kmax) = temp
+        end do
+
+        sigma(kmax) = sigma(j)
+        wa(kmax) = wa(j)
+        k = ipvt(j)
+        ipvt(j) = ipvt(kmax)
+        ipvt(kmax) = k
+
+      end if
+
+    end if
+!
+!  Compute the householder transformation to reduce the
+!  j-th column of a to a multiple of the j-th unit vector.
+!
+     ajnorm = snrm2(m-j+1,a(j,j),1)
+
+     if (ajnorm /= 0.0) then
+
+       if (a(j,j) < 0.0) then
+         ajnorm = -ajnorm
+       end if
+
+       a(j:m,j) = a(j:m,j)/ajnorm
+       a(j,j) = a(j,j) + 1.0E+00
+!
+!  apply the transformation to the remaining columns and update the norms.
+!
+       jp1 = j + 1
+
+       do k = j+1, n
+
+         sum = 0.0E+00
+         do i = j, m
+           sum = sum + a(i,j)*a(i,k)
+         end do
+         temp = sum/a(j,j)
+
+         do i = j, m
+           a(i,k) = a(i,k) - temp*a(i,j)
+         end do
+
+         if ( pivot .and. sigma(k) /= 0.0E+00 ) then
+
+           temp = a(j,k)/sigma(k)
+           sigma(k) = sigma(k)*sqrt( max (0.0,1.0-temp**2))
+
+           if ( 0.05 * (sigma(k)/wa(k))**2 <= epsmch ) then
+             sigma(k) = snrm2(m-j,a(jp1,k),1)
+             wa(k) = sigma(k)
+           end if
+
+         end if
+
+       end do
+
+    end if
+
+    sigma(j) = -ajnorm
+
+  end do
+
+  return
+end
+subroutine qrupdt(nr,n,a,u,v)
+!
+!*******************************************************************************
+!
+!! QRUPDT updates a QR factorization.
+!
+!
+!  Discussion:
+!
+!    The routine finds an orthogonal N by N matrix Q* and an upper triangular
+!    N by N matrix R* such that (Q*)(R*) = R + U*V'
+!
+!  Parameters:
+!
+!    Input, integer NR, the row dimension of the matrix.
+!
+!    Input, integer N, the order of the matrix.
+!
+!    Input/output, real A(NR,N), on input, contains the original QR
+!    factorization.  On output, contains the revised factorization.
+!
+!    Input, real U(N), V(N), vectors that describe the rank one update
+!    applied to the original matrix A.
+!
+  integer n
+  integer nr
+!
+  real a(nr,1)
+  integer i
+  integer k
+  real t1
+  real t2
+  real u(n)
+  real v(n)
+!
+!  determine last non-zero in u(.)
+!
+  k=n
+
+   10 continue
+
+  if ( u(k) == 0.0E+00 .and. k > 1 ) then
+    k = k - 1
+    go to 10
+  end if
+!
+! (k-1) jacobi rotations transform
+!     r + u(v+) --> (r*) + (u(1)*e1)(v+)
+! which is upper hessenberg
+!
+  if ( k > 1 ) then
+
+    do i = k-1, 1, -1
+
+      if ( u(i) == 0.0E+00 ) then
+        call qraux1(nr,n,a,i)
+        u(i)=u(i+1)
+      else
+        call qraux2(nr,n,a,i,u(i),-u(i+1))
+        u(i)=sqrt(u(i)*u(i) + u(i+1)*u(i+1))
+      end if
+
+    end do
+
+  end if
+!
+! r <-- r + (u(1)*e1)(v+)
+!
+  a(1,1:n) = a(1,1:n) + u(1) * v(1:n)
+!
+!  (k-1) jacobi rotations transform upper hessenberg r
+!  to upper triangular (r*)
+!
+    do i = 1, k-1
+
+      if ( a(i,i) == 0.0E+00 ) then
+        call qraux1(nr,n,a,i)
+      else
+        t1=a(i,i)
+        t2=-a(i+1,i)
+        call qraux2(nr,n,a,i,t1,t2)
+      end if
+
+    end do
+
+  return
+end
+function r1mach ( i )
+!
+!*******************************************************************************
+!
+!! R1MACH returns single precision machine constants.
+!
+!
+!  Assume that single precision numbers are stored with a mantissa of T digits
+!  in base B, with an exponent whose value must lie between EMIN and EMAX.  Then
+!  for values of I between 1 and 5, R1MACH will return the following values:
+!
+!    R1MACH(1) = B**(EMIN-1), the smallest positive magnitude.
+!    R1MACH(2) = B**EMAX*(1-B**(-T)), the largest magnitude.
+!    R1MACH(3) = B**(-T), the smallest relative spacing.
+!    R1MACH(4) = B**(1-T), the largest relative spacing.
+!    R1MACH(5) = log10(B)
+!
+!  To alter this function for a particular environment, the desired set of data
+!  statements should be activated by removing the C from column 1.
+!
+!  On rare machines a STATIC statement may need to be added.  But probably more
+!  systems prohibit it that require it.
+!
+!  For IEEE-arithmetic machines (binary standard), the first set of constants
+!  below should be appropriate.
+!
+!  Where possible, octal or hexadecimal constants have been used to specify the
+!  constants exactly which has in some cases required the use of EQUIVALENCED
+!  integer arrays.  If your compiler uses half-word integers by default
+!  (sometimes called INTEGER*2), you may need to change INTEGER to INTEGER*4 or
+!  otherwise instruct your compiler to use full-word integers in the next 5
+!  declarations.
+!
+  integer diver(2)
+  integer i
+  integer large(2)
+  integer log10(2)
+  real r1mach
+  integer right(2)
+  real rmach(5)
+  integer small(2)
+!
+  equivalence (rmach(1),small(1))
+  equivalence (rmach(2),large(1))
+  equivalence (rmach(3),right(1))
+  equivalence (rmach(4),diver(1))
+  equivalence (rmach(5),log10(1))
+!
+!  IEEE arithmetic machines, such as the ATT 3B series, Motorola 68000 based
+!  machines such as the SUN 3 and ATT PC 7300, and 8087 based micros such as
+!  the IBM PC and ATT 6300.
+!
+   data small(1) /     8388608 /
+   data large(1) /  2139095039 /
+   data right(1) /   864026624 /
+   data diver(1) /   872415232 /
+   data log10(1) /  1050288283 /
+!
+!  ALLIANT FX/8 UNIX Fortran compiler with the -r8 command line option.  This
+!  option causes all variables declared with 'REAL' to be of type 'REAL*8' or
+!  DOUBLE PRECISION.  This option does not override the 'REAL*4' declarations.
+!  These R1MACH numbers below and the coresponding I1MACH are simply the DOUBLE
+!  PRECISION or 'REAL*8' numbers.  If you use the -r8 your whole code (and the
+!  user libraries you link with, the system libraries are taken care of
+!  automagicly) must be compiled with this option.
+!
+!      data rmach(1) / 2.22507385850721D-308 /
+!      data rmach(2) / 1.79769313486231D+308 /
+!      data rmach(3) / 1.1101827117665D-16 /
+!      data rmach(4) / 2.2203654423533D-16 /
+!      data rmach(5) / 3.01029995663981E-1 /
+!
+!  AMDAHL machines.
+!
+!      data small(1) /    1048576 /
+!      data large(1) / 2147483647 /
+!      data right(1) /  990904320 /
+!      data diver(1) / 1007681536 /
+!      data log10(1) / 1091781651 /
+!
+!  BURROUGHS 1700 system.
+!
+!      data rmach(1) / Z400800000 /
+!      data rmach(2) / Z5FFFFFFFF /
+!      data rmach(3) / Z4E9800000 /
+!      data rmach(4) / Z4EA800000 /
+!      data rmach(5) / Z500E730E8 /
+!
+!  BURROUGHS 5700/6700/7700 systems.
+!
+!      data rmach(1) / O1771000000000000 /
+!      data rmach(2) / O0777777777777777 /
+!      data rmach(3) / O1311000000000000 /
+!      data rmach(4) / O1301000000000000 /
+!      data rmach(5) / O1157163034761675 /
+!
+!  CDC CYBER 170/180 series using NOS
+!
+!      data rmach(1) / O"00014000000000000000" /
+!      data rmach(2) / O"37767777777777777777" /
+!      data rmach(3) / O"16404000000000000000" /
+!      data rmach(4) / O"16414000000000000000" /
+!      data rmach(5) / O"17164642023241175720" /
+!
+!  CDC CYBER 170/180 series using NOS/VE
+!
+!      data rmach(1) / Z"3001800000000000" /
+!      data rmach(2) / Z"4FFEFFFFFFFFFFFE" /
+!      data rmach(3) / Z"3FD2800000000000" /
+!      data rmach(4) / Z"3FD3800000000000" /
+!      data rmach(5) / Z"3FFF9A209A84FBCF" /
+!
+!  CDC CYBER 200 series
+!
+!      data rmach(1) / X'9000400000000000' /
+!      data rmach(2) / X'6FFF7FFFFFFFFFFF' /
+!      data rmach(3) / X'FFA3400000000000' /
+!      data rmach(4) / X'FFA4400000000000' /
+!      data rmach(5) / X'FFD04D104D427DE8' /
+!
+!  CDC 6000/7000 series using FTN4.
+!
+!      data rmach(1) / 00564000000000000000B /
+!      data rmach(2) / 37767777777777777776B /
+!      data rmach(3) / 16414000000000000000B /
+!      data rmach(4) / 16424000000000000000B /
+!      data rmach(5) / 17164642023241175720B /
+!
+!  CDC 6000/7000 series using FTN5.
+!
+!      data rmach(1) / O"00564000000000000000" /
+!      data rmach(2) / O"37767777777777777776" /
+!      data rmach(3) / O"16414000000000000000" /
+!      data rmach(4) / O"16424000000000000000" /
+!      data rmach(5) / O"17164642023241175720" /
+!
+!  CONVEX C-1.
+!
+!      data rmach(1) / '00800000'X /
+!      data rmach(2) / '7FFFFFFF'X /
+!      data rmach(3) / '34800000'X /
+!      data rmach(4) / '35000000'X /
+!      data rmach(5) / '3F9A209B'X /
+!
+!  CONVEX C-120 (native mode) without -R8 option
+!
+!      data rmach(1) / 2.9387360E-39 /
+!      data rmach(2) / 1.7014117E+38 /
+!      data rmach(3) / 5.9604645E-08 /
+!      data rmach(4) / 1.1920929E-07 /
+!      data rmach(5) / 3.0102999E-01 /
+!
+!  CONVEX C-120 (native mode) with -R8 option
+!
+!      data rmach(1) / 5.562684646268007D-309 /
+!      data rmach(2) / 8.988465674311577D+307 /
+!      data rmach(3) / 1.110223024625157D-016 /
+!      data rmach(4) / 2.220446049250313D-016 /
+!      data rmach(5) / 3.010299956639812D-001 /
+!
+!  CONVEX C-120 (IEEE mode) without -R8 option
+!
+!      data rmach(1) / 1.1754945E-38 /
+!      data rmach(2) / 3.4028234E+38 /
+!      data rmach(3) / 5.9604645E-08 /
+!      data rmach(4) / 1.1920929E-07 /
+!      data rmach(5) / 3.0102999E-01 /
+!
+!  CONVEX C-120 (IEEE mode) with -R8 option
+!
+!      data rmach(1) / 2.225073858507202D-308 /
+!      data rmach(2) / 1.797693134862315D+308 /
+!      data rmach(3) / 1.110223024625157D-016 /
+!      data rmach(4) / 2.220446049250313D-016 /
+!      data rmach(5) / 3.010299956639812D-001 /
+!
+!  CRAY 1, 2, XMP and YMP.
+!
+!      data rmach(1) / 200034000000000000000B /
+!      data rmach(2) / 577767777777777777776B /
+!      data rmach(3) / 377224000000000000000B /
+!      data rmach(4) / 377234000000000000000B /
+!      data rmach(5) / 377774642023241175720B /
+!
+!  DATA GENERAL ECLIPSE S/200.
+!  Note - It may be appropriate to include the line: STATIC RMACH(5)
+!
+!      data small /20K,0/
+!      data large /77777K,177777K/
+!      data right /35420K,0/
+!      data diver /36020K,0/
+!      data log10 /40423K,42023K/
+!
+!  ELXSI 6400, assuming REAL*4 is the default real type.
+!
+!      data small(1) / '00800000'X /
+!      data large(1) / '7F7FFFFF'X /
+!      data right(1) / '33800000'X /
+!      data diver(1) / '34000000'X /
+!      data log10(1) / '3E9A209B'X /
+!
+!  HARRIS 220
+!
+!      data small(1),small(2) / '20000000, '00000201 /
+!      data large(1),large(2) / '37777777, '00000177 /
+!      data right(1),right(2) / '20000000, '00000352 /
+!      data diver(1),diver(2) / '20000000, '00000353 /
+!      data log10(1),log10(2) / '23210115, '00000377 /
+!
+!  HARRIS SLASH 6 and SLASH 7.
+!
+!      data small(1),small(2) / '20000000, '00000201 /
+!      data large(1),large(2) / '37777777, '00000177 /
+!      data right(1),right(2) / '20000000, '00000352 /
+!      data diver(1),diver(2) / '20000000, '00000353 /
+!      data log10(1),log10(2) / '23210115, '00000377 /
+!
+!  HONEYWELL DPS 8/70 and 600/6000 series.
+!
+!      data rmach(1) / O402400000000 /
+!      data rmach(2) / O376777777777 /
+!      data rmach(3) / O714400000000 /
+!      data rmach(4) / O716400000000 /
+!      data rmach(5) / O776464202324 /
+!
+!  HP 2100, 3 word double precision with FTN4
+!
+!      data small(1), small(2) / 40000B,       1 /
+!      data large(1), large(2) / 77777B, 177776B /
+!      data right(1), right(2) / 40000B,    325B /
+!      data diver(1), diver(2) / 40000B,    327B /
+!      data log10(1), log10(2) / 46420B,  46777B /
+!
+!  HP 2100, 4 word double precision with FTN4
+!
+!      data small(1), small(2) / 40000B,       1 /
+!      data large91), large(2) / 77777B, 177776B /
+!      data right(1), right(2) / 40000B,    325B /
+!      data diver(1), diver(2) / 40000B,    327B /
+!      data log10(1), log10(2) / 46420B,  46777B /
+!
+!  HP 9000
+!
+!      r1mach(1) = 1.17549435E-38
+!      r1mach(2) = 1.70141163E+38
+!      r1mach(3) = 5.960464478E-8
+!      r1mach(4) = 1.119209290E-7
+!      r1mach(5) = 3.01030010E-1
+!
+!      data small(1) / 00040000000B /
+!      data large(1) / 17677777777B /
+!      data right(1) / 06340000000B /
+!      data diver(1) / 06400000000B /
+!      data log10(1) / 07646420233B /
+!
+!  IBM 360/370 series, XEROX SIGMA 5/7/9, SEL systems 85/86, PERKIN ELMER 3230,
+!  and PERKIN ELMER (INTERDATA) 3230.
+!
+!      data rmach(1) / Z00100000 /
+!      data rmach(2) / Z7FFFFFFF /
+!      data rmach(3) / Z3B100000 /
+!      data rmach(4) / Z3C100000 /
+!      data rmach(5) / Z41134413 /
+!
+!  IBM PC - Microsoft FORTRAN
+!
+!      data small(1) / #00800000 /
+!      data large(1) / #7F7FFFFF /
+!      data right(1) / #33800000 /
+!      data diver(1) / #34000000 /
+!      data log10(1) / #3E9A209A /
+!
+!  IBM PC - Professional FORTRAN and Lahey FORTRAN
+!
+!      data small(1)/ Z'00800000' /
+!      data large(1)/ Z'7F7FFFFF' /
+!      data right(1)/ Z'33800000' /
+!      data diver(1)/ Z'34000000' /
+!      data log10(1)/ Z'3E9A209A' /
+!
+!  INTERDATA 8/32 with the UNIX system FORTRAN 77 compiler.
+!  For the INTERDATA FORTRAN VII compiler replace the Z'S specifying HEX
+!  constants with Y'S.
+!
+!      data rmach(1) / Z'00100000' /
+!      data rmach(2) / Z'7EFFFFFF' /
+!      data rmach(3) / Z'3B100000' /
+!      data rmach(4) / Z'3C100000' /
+!      data rmach(5) / Z'41134413' /
+!
+!  PDP-10 (KA or KI processor).
+!
+!      data rmach(1) / "000400000000 /
+!      data rmach(2) / "377777777777 /
+!      data rmach(3) / "146400000000 /
+!      data rmach(4) / "147400000000 /
+!      data rmach(5) / "177464202324 /
+!
+!  PDP-11 FORTRANS supporting 32-bit integers (integer version).
+!
+!      data small(1) /    8388608 /
+!      data large(1) / 2147483647 /
+!      data right(1) /  880803840 /
+!      data diver(1) /  889192448 /
+!      data log10(1) / 1067065499 /
+!
+!  PDP-11 FORTRANS supporting 32-bit integers (octal version).
+!
+!      data rmach(1) / O00040000000 /
+!      data rmach(2) / O17777777777 /
+!      data rmach(3) / O06440000000 /
+!      data rmach(4) / O06500000000 /
+!      data rmach(5) / O07746420233 /
+!
+!  PDP-11 FORTRANS supporting 16-bit integers (integer version).
+!
+!      data small(1),small(2) /   128,     0 /
+!      data large(1),large(2) / 32767,    -1 /
+!      data right(1),right(2) / 13440,     0 /
+!      data diver(1),diver(2) / 13568,     0 /
+!      data log10(1),log10(2) / 16282,  8347 /
+!
+!  PDP-11 FORTRANS supporting 16-bit integers (octal version).
+!
+!      data small(1),small(2) / O000200, O000000 /
+!      data large(1),large(2) / O077777, O177777 /
+!      data right(1),right(2) / O032200, O000000 /
+!      data diver(1),diver(2) / O032400, O000000 /
+!      data log10(1),log10(2) / O037632, O020233 /
+!
+!  SEQUENT BALANCE 8000.
+!
+!      data small(1) / $00800000 /
+!      data large(1) / $7F7FFFFF /
+!      data right(1) / $33800000 /
+!      data diver(1) / $34000000 /
+!      data log10(1) / $3E9A209B /
+!
+!  SUN Microsystems UNIX F77 compiler.
+!
+!      data rmach(1) / 1.17549435E-38 /
+!      data rmach(2) / 3.40282347E+38 /
+!      data rmach(3) / 5.96016605E-08 /
+!      data rmach(4) / 1.19203321E-07 /
+!      data rmach(5) / 3.01030010E-01 /
+!
+!  SUN 3 (68881 or FPA)
+!
+!      data small(1) / X'00800000' /
+!      data large(1) / X'7F7FFFFF' /
+!      data right(1) / X'33800000' /
+!      data diver(1) / X'34000000' /
+!      data log10(1) / X'3E9A209B' /
+!
+!  UNIVAC 1100 series.
+!
+!      data rmach(1) / O000400000000 /
+!      data rmach(2) / O377777777777 /
+!      data rmach(3) / O146400000000 /
+!      data rmach(4) / O147400000000 /
+!      data rmach(5) / O177464202324 /
+!
+!  VAX/ULTRIX F77 compiler.
+!
+!      data small(1) /       128 /
+!      data large(1) /    -32769 /
+!      data right(1) /     13440 /
+!      data diver(1) /     13568 /
+!      data log10(1) / 547045274 /
+!
+!  VAX-11 with FORTRAN IV-PLUS compiler.
+!
+!      data rmach(1) / Z00000080 /
+!      data rmach(2) / ZFFFF7FFF /
+!      data rmach(3) / Z00003480 /
+!      data rmach(4) / Z00003500 /
+!      data rmach(5) / Z209B3F9A /
+!
+!  VAX/VMS version 2.2.
+!
+!      data rmach(1) /       '80'X /
+!      data rmach(2) / 'FFFF7FFF'X /
+!      data rmach(3) /     '3480'X /
+!      data rmach(4) /     '3500'X /
+!      data rmach(5) / '209B3F9A'X /
+!
+!  VAX/VMS 11/780
+!
+!      data small(1) / Z00000080 /
+!      data large(1) / ZFFFF7FFF /
+!      data right(1) / Z00003480 /
+!      data diver(1) / Z00003500 /
+!      data log10(1) / Z209B3F9A /
+!
+!  Z80 microprocessor.
+!
+!      data small(1), small(2) /     0,    256 /
+!      data large(1), large(2) /    -1,   -129 /
+!      data right(1), right(2) /     0,  26880 /
+!      data diver(1), diver(2) /     0,  27136 /
+!      data log10(1), log10(2) /  8347,  32538 /
+!
+  if ( i < 1 .or. i > 5 ) then
+    write ( *, * ) ' '
+    write(*,*)'R1MACH - Fatal error!'
+    write(*,*)'I is out of bounds=',i
+    r1mach=0.0E+00
+    stop
+  else
+    r1mach = rmach(i)
+  end if
+
+  return
+end
+subroutine r1mpyq ( m, n, a, lda, v, w )
+!
+!*******************************************************************************
+!
+!! R1MPYQ is given an m by n matrix a, this subroutine computes a*q where
+!     q is the product of 2*(n - 1) transformations
+!
+!           gv(n-1)*...*gv(1)*gw(1)*...*gw(n-1)
+!
+!     and gv(i), gw(i) are givens rotations in the (i,n) plane which
+!     eliminate elements in the i-th and n-th planes, respectively.
+!     q itself is not given, rather the information to recover the
+!     gv, gw rotations is supplied.
+!
+!  Parameters:
+!
+!       m is a positive integer input variable set to the number
+!         of rows of a.
+!
+!       n is a positive integer input variable set to the number
+!         of columns of a.
+!
+!       a is an m by n array. on input a must contain the matrix
+!         to be postmultiplied by the orthogonal matrix q
+!         described above. on output a*q has replaced a.
+!
+!       lda is a positive integer input variable not less than m
+!         which specifies the leading dimension of the array a.
+!
+!       v is an input array of length n. v(i) must contain the
+!         information necessary to recover the givens rotation gv(i)
+!         described above.
+!
+!       w is an input array of length n. w(i) must contain the
+!         information necessary to recover the givens rotation gw(i)
+!         described above.
+!
+  integer lda
+  integer n
+!
+  real a(lda,n)
+  real cos2
+  integer i
+  integer j
+  integer m
+  integer nmj
+  real sin2
+  real temp
+  real v(n)
+  real w(n)
+!
+  do nmj = 1, n-1
+
+    j = n - nmj
+
+    if (abs(v(j)) > 1.0) then
+      cos2 = 1.0/v(j)
+      sin2 = sqrt(1.0-cos2**2)
+    else
+      sin2 = v(j)
+      cos2 = sqrt(1.0-sin2**2)
+    end if
+
+    do i = 1, m
+      temp = cos2*a(i,j) - sin2*a(i,n)
+      a(i,n) = sin2*a(i,j) + cos2*a(i,n)
+      a(i,j) = temp
+    end do
+
+  end do
+!
+!     apply the second set of givens rotations to a.
+!
+  do j = 1, n-1
+
+     if (abs(w(j)) > 1.0) then
+       cos2 = 1.0/w(j)
+       sin2 = sqrt(1.0-cos2**2)
+     else
+       sin2 = w(j)
+       cos2 = sqrt(1.0-sin2**2)
+     end if
+
+     do i = 1, m
+        temp = cos2*a(i,j) + sin2*a(i,n)
+        a(i,n) = -sin2*a(i,j) + cos2*a(i,n)
+        a(i,j) = temp
+     end do
+
+  end do
+
+  return
+end
+subroutine r1updt ( m, n, s, ls, u, v, w, sing )
+!
+!*******************************************************************************
+!
+!! R1UPDT updates a QR factorization after a rank 1 update of the original matrix.
+!
+!
+!  Discussion:
+!
+!    The routine is given an m by n lower trapezoidal matrix s, an m-vector u,
+!    and an n-vector v, the problem is to determine an
+!    orthogonal matrix q such that
+!
+!      (s + u*v')*q
+!
+!    is again lower trapezoidal.
+!
+!    This subroutine determines q as the product of 2*(n - 1) transformations
+!
+!      gv(n-1)*...*gv(1)*gw(1)*...*gw(n-1)
+!
+!    where gv(i), gw(i) are givens rotations in the (i,n) plane
+!    which eliminate elements in the i-th and n-th planes,
+!    respectively. q itself is not accumulated, rather the
+!    information to recover the gv, gw rotations is returned.
+!
+!  Parameters:
+!
+!       m is a positive integer input variable set to the number
+!         of rows of s.
+!
+!       n is a positive integer input variable set to the number
+!         of columns of s. n must not exceed m.
+!
+!       s is an array of length ls. on input s must contain the lower
+!         trapezoidal matrix s stored by columns. on output s contains
+!         the lower trapezoidal matrix produced as described above.
+!
+!       ls is a positive integer input variable not less than
+!         (n*(2*m-n+1))/2.
+!
+!       u is an input array of length m which must contain the
+!         vector u.
+!
+!       v is an array of length n. on input v must contain the vector
+!         v. on output v(i) contains the information necessary to
+!         recover the givens rotation gv(i) described above.
+!
+!       w is an output array of length m. w(i) contains information
+!         necessary to recover the givens rotation gw(i) described
+!         above.
+!
+!       sing is a logical output variable. sing is set .true. if any
+!         of the diagonal elements of the output s are zero. otherwise
+!         sing is set .false.
+!
+  integer ls
+  integer m
+  integer n
+!
+  real cos
+  real cotan
+  real giant
+  integer i
+  integer j
+  integer jj
+  integer l
+  integer nmj
+  real, parameter :: p25 = 0.25E+00
+  real, parameter :: p5 = 0.5E+00
+  real r1mach
+  real s(ls)
+  real sin
+  logical sing
+  real tan
+  real tau
+  real temp
+  real u(m)
+  real v(n)
+  real w(m)
+!
+  giant = huge ( giant )
+!
+!  Initialize the diagonal element pointer.
+!
+  jj = (n*(2*m - n + 1))/2 - (m - n)
+!
+!     move the nontrivial part of the last column of s into w.
+!
+  l = jj
+  do i = n, m
+    w(i) = s(l)
+    l = l + 1
+  end do
+!
+!     rotate the vector v into a multiple of the n-th unit vector
+!     in such a way that a spike is introduced into w.
+!
+  do nmj = 1, n-1
+
+     j = n - nmj
+     jj = jj - (m - j + 1)
+     w(j) = 0.0E+00
+
+      if ( v(j) /= 0.0E+00 ) then
+!
+!        determine a givens rotation which eliminates the
+!        j-th element of v.
+!
+      if ( abs(v(n)) < abs(v(j)) ) then
+        cotan = v(n)/v(j)
+        sin = p5/sqrt(p25+p25*cotan**2)
+        cos = sin*cotan
+        tau = 1.0E+00
+        if (abs(cos)*giant > 1.0) tau = 1.0/cos
+      else
+        tan = v(j)/v(n)
+        cos = p5/sqrt(p25+p25*tan**2)
+        sin = cos*tan
+        tau = sin
+      end if
+!
+!  apply the transformation to v and store the information
+!  necessary to recover the givens rotation.
+!
+      v(n) = sin*v(j) + cos*v(n)
+      v(j) = tau
+!
+!  apply the transformation to s and extend the spike in w.
+!
+      l = jj
+
+      do i = j, m
+        temp = cos*s(l) - sin*w(i)
+        w(i) = sin*s(l) + cos*w(i)
+        s(l) = temp
+        l = l + 1
+      end do
+
+    end if
+
+  end do
+!
+!     add the spike from the rank 1 update to w.
+!
+  w(1:m) = w(1:m) + v(n) * u(1:m)
+!
+!     eliminate the spike.
+!
+  sing = .false.
+
+  do j = 1, n-1
+
+     if ( w(j) /= 0.0E+00 ) then
+!
+!        determine a givens rotation which eliminates the
+!        j-th element of the spike.
+!
+     if ( abs ( s(jj)) < abs ( w(j) ) ) then
+        cotan = s(jj)/w(j)
+        sin = p5/sqrt(p25+p25*cotan**2)
+        cos = sin*cotan
+        tau = 1.0E+00
+        if (abs(cos)*giant > 1.0) tau = 1.0/cos
+     else
+        tan = w(j)/s(jj)
+        cos = p5/sqrt(p25+p25*tan**2)
+        sin = cos*tan
+        tau = sin
+     end if
+!
+!  apply the transformation to s and reduce the spike in w.
+!
+     l = jj
+     do i = j, m
+        temp = cos*s(l) + sin*w(i)
+        w(i) = -sin*s(l) + cos*w(i)
+        s(l) = temp
+        l = l + 1
+     end do
+!
+!  store the information necessary to recover the givens rotation.
+!
+     w(j) = tau
+    end if
+!
+!        test for zero diagonal elements in the output s.
+!
+     if (s(jj) == 0.0) sing = .true.
+     jj = jj + (m - j + 1)
+
+  end do
+!
+!     move w back into the last column of the output s.
+!
+  l = jj
+  do i = n, m
+     s(l) = w(i)
+     l = l + 1
+  end do
+
+  if (s(jj) == 0.0) sing = .true.
+
+  return
+end
+function r9lgmc ( x )
+!
+!*******************************************************************************
+!
+!! R9LGMC computes the log gamma correction factor so that
+!            log(gamma(x)) = log(sqrt(2*pi)) + (x-.5)*log(x) - x
+!            + r9lgmc(x)
+!
+!  Description:
+!
+! compute the log gamma correction factor for x >= 10.0E+00 so that
+!  log (gamma(x)) = log(sqrt(2*pi)) + (x-.5)*log(x) - x + r9lgmc(x)
+!
+! series for algm       on the interval  0.          to  1.00000d-02
+!                                        with weighted error   3.40e-16
+!                                         log weighted error  15.47
+!                               significant figures required  14.39
+!                                    decimal places required  15.86
+!
+  real, save, dimension ( 6 ) :: algmcs = (/ &
+     0.166638948045186, -0.0000138494817606,  0.0000000098108256, &
+    -0.0000000000180912, 0.0000000000000622, -0.0000000000000003 /)
+  real csevl
+  integer inits
+  integer, save :: nalgm = 0
+  real r1mach
+  real r9lgmc
+  real x
+  real, save :: xbig = 0.0E+00
+  real, save :: xmax = 0.0E+00
+!
+  if ( nalgm == 0 ) then
+    nalgm = inits (algmcs, 6, r1mach(3))
+    xbig = 1.0/sqrt(r1mach(3))
+    xmax = exp ( min (log ( huge ( xmax ) / 12.0E+00 ), &
+                     -log ( 12.0E+00 * tiny ( xmax ) )) )
+  end if
+
+  if ( x < 10.0E+00 ) then
+    call xerror ( 'r9lgmc  x must be ge 10', 23, 1, 2)
+  end if
+
+  if ( x < xmax ) then
+    r9lgmc = 1.0/(12.0*x)
+    if (x<xbig) r9lgmc = csevl (2.0*(10./x)**2-1., algmcs, nalgm)/x
+  else
+    r9lgmc = 0.0E+00
+    call xerror ( 'r9lgmc  x so big r9lgmc underflows', 34, 2, 1)
+  end if
+
+  return
+end
+subroutine r_random ( rlo, rhi, r )
+!
+!*******************************************************************************
+!
+!! R_RANDOM returns a random real in a given range.
+!
+!
+!  Discussion:
+!
+!    Calls to the FORTRAN 90 random number generator should go through
+!    this routine, to guarantee that the random number seed has been set.
+!
+!  Modified:
+!
+!    05 February 2001
+!
+!  Author:
+!
+!    John Burkardt
+!
+!  Parameters:
+!
+!    Input, real RLO, RHI, the minimum and maximum values.
+!
+!    Output, real R, the randomly chosen value.
+!
+  real r
+  real rhi
+  real rlo
+  integer, save :: seed = 0
+  logical, save :: seeded = .false.
+  real t
+  real uniform_01_sample
+!
+!  Make sure the random number generator has been seeded.
+!
+  if ( .not. seeded ) then
+    call random_initialize ( seed )
+    seeded = .true.
+  end if
+!
+!  Pick T, a random number in (0,1).
+!
+! call random_number ( harvest = t )
+!
+  t = uniform_01_sample ( seed )
+!
+!  Set R in ( RLO, RHI ).
+!
+  r = ( 1.0E+00 - t ) * rlo + t * rhi
+
+  return
+end
+subroutine r_swap ( x, y )
+!
+!*******************************************************************************
+!
+!! R_SWAP swaps two real values.
+!
+!
+!  Modified:
+!
+!    01 May 2000
+!
+!  Author:
+!
+!    John Burkardt
+!
+!  Parameters:
+!
+!    Input/output, real X, Y.  On output, the values of X and
+!    Y have been interchanged.
+!
+  real x
+  real y
+  real z
+!
+  z = x
+  x = y
+  y = z
+
+  return
+end
+subroutine radb2 ( ido, l1, cc, ch, wa1 )
+!
+!*******************************************************************************
+!
+!! RADB2 is a lower level routine used by RFFTB1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,2,l1)
+  real ch(ido,l1,2)
+  integer i
+  integer ic
+  integer k
+  real ti2
+  real tr2
+  real wa1(ido)
+!
+  ch(1,1:l1,1) = cc(1,1,1:l1) + cc(ido,2,1:l1)
+  ch(1,1:l1,2) = cc(1,1,1:l1) - cc(ido,2,1:l1)
+
+  if ( ido < 2 ) then
+    return
+  end if
+
+  if ( ido > 2 ) then
+
+    do k = 1, l1
+      do i = 3, ido, 2
+
+        ic = ido + 2 - i
+
+        ch(i-1,k,1) = cc(i-1,1,k) + cc(ic-1,2,k)
+        tr2         = cc(i-1,1,k) - cc(ic-1,2,k)
+        ch(i,k,1)   = cc(i,1,k)   - cc(ic,2,k)
+        ti2         = cc(i,1,k)   + cc(ic,2,k)
+
+        ch(i-1,k,2) = wa1(i-2) * tr2 - wa1(i-1) * ti2
+        ch(i,k,2)   = wa1(i-2) * ti2 + wa1(i-1) * tr2
+
+      end do
+    end do
+
+    if ( mod ( ido, 2 ) == 1 ) then
+      return
+    end if
+
+  end if
+
+  ch(ido,1:l1,1) =    cc(ido,1,1:l1) + cc(ido,1,1:l1)
+  ch(ido,1:l1,2) = -( cc(1,2,1:l1)   + cc(1,2,1:l1) )
+
+  return
+end
+subroutine radb3 ( ido, l1, cc, ch, wa1, wa2 )
+!
+!*******************************************************************************
+!
+!! RADB3 is a lower level routine used by RFFTB1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,3,l1)
+  real ch(ido,l1,3)
+  real ci2
+  real ci3
+  real cr2
+  real cr3
+  real di2
+  real di3
+  real dr2
+  real dr3
+  integer i
+  integer ic
+  integer k
+  real, parameter :: taui =  0.866025403784439E+00
+  real, parameter :: taur = -0.5E+00
+  real ti2
+  real tr2
+  real wa1(ido)
+  real wa2(ido)
+!
+  do k = 1, l1
+
+    tr2 = cc(ido,2,k) + cc(ido,2,k)
+    cr2 = cc(1,1,k) + taur * tr2
+    ch(1,k,1) = cc(1,1,k) + tr2
+    ci3 = taui * ( cc(1,3,k) + cc(1,3,k) )
+
+    ch(1,k,2) = cr2 - ci3
+    ch(1,k,3) = cr2 + ci3
+
+  end do
+
+  if ( ido == 1 ) then
+    return
+  end if
+
+  do k = 1, l1
+    do i = 3, ido, 2
+
+      ic = ido + 2 - i
+
+      tr2 = cc(i-1,3,k) + cc(ic-1,2,k)
+      cr2 = cc(i-1,1,k) + taur * tr2
+      ch(i-1,k,1) = cc(i-1,1,k) + tr2
+
+      ti2 = cc(i,3,k) - cc(ic,2,k)
+      ci2 = cc(i,1,k) + taur * ti2
+      ch(i,k,1) = cc(i,1,k) + ti2
+
+      cr3 = taui * ( cc(i-1,3,k) - cc(ic-1,2,k) )
+      ci3 = taui * ( cc(i,3,k)   + cc(ic,2,k) )
+
+      dr2 = cr2 - ci3
+      dr3 = cr2 + ci3
+      di2 = ci2 + cr3
+      di3 = ci2 - cr3
+
+      ch(i-1,k,2) = wa1(i-2) * dr2 - wa1(i-1) * di2
+      ch(i,k,2)   = wa1(i-2) * di2 + wa1(i-1) * dr2
+      ch(i-1,k,3) = wa2(i-2) * dr3 - wa2(i-1) * di3
+      ch(i,k,3)   = wa2(i-2) * di3 + wa2(i-1) * dr3
+
+    end do
+  end do
+
+  return
+end
+subroutine radb4 ( ido, l1, cc, ch, wa1, wa2, wa3 )
+!
+!*******************************************************************************
+!
+!! RADB4 is a lower level routine used by RFFTB1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,4,l1)
+  real ch(ido,l1,4)
+  real ci2
+  real ci3
+  real ci4
+  real cr2
+  real cr3
+  real cr4
+  integer i
+  integer ic
+  integer k
+  real, parameter :: sqrt2 = 1.414213562373095E+00
+  real ti1
+  real ti2
+  real ti3
+  real ti4
+  real tr1
+  real tr2
+  real tr3
+  real tr4
+  real wa1(ido)
+  real wa2(ido)
+  real wa3(ido)
+!
+  do k = 1, l1
+
+    tr1 = cc(1,1,k) - cc(ido,4,k)
+    tr2 = cc(1,1,k) + cc(ido,4,k)
+    tr3 = cc(ido,2,k) + cc(ido,2,k)
+    tr4 = cc(1,3,k) + cc(1,3,k)
+
+    ch(1,k,1) = tr2 + tr3
+    ch(1,k,2) = tr1 - tr4
+    ch(1,k,3) = tr2 - tr3
+    ch(1,k,4) = tr1 + tr4
+
+  end do
+
+  if ( ido < 2 ) then
+    return
+  end if
+
+  if ( ido > 2 ) then
+
+    do k = 1, l1
+      do i = 3, ido, 2
+
+        ic = ido + 2 - i
+
+        ti1 = cc(i,1,k) + cc(ic,4,k)
+        ti2 = cc(i,1,k) - cc(ic,4,k)
+        ti3 = cc(i,3,k) - cc(ic,2,k)
+        tr4 = cc(i,3,k) + cc(ic,2,k)
+
+        tr1 = cc(i-1,1,k) - cc(ic-1,4,k)
+        tr2 = cc(i-1,1,k) + cc(ic-1,4,k)
+        ti4 = cc(i-1,3,k) - cc(ic-1,2,k)
+        tr3 = cc(i-1,3,k) + cc(ic-1,2,k)
+
+        ch(i-1,k,1) = tr2 + tr3
+        cr3         = tr2 - tr3
+        ch(i,k,1)   = ti2 + ti3
+        ci3         = ti2 - ti3
+
+        cr2 = tr1 - tr4
+        cr4 = tr1 + tr4
+        ci2 = ti1 + ti4
+        ci4 = ti1 - ti4
+
+        ch(i-1,k,2) = wa1(i-2) * cr2 - wa1(i-1) * ci2
+        ch(i,k,2)   = wa1(i-2) * ci2 + wa1(i-1) * cr2
+        ch(i-1,k,3) = wa2(i-2) * cr3 - wa2(i-1) * ci3
+        ch(i,k,3)   = wa2(i-2) * ci3 + wa2(i-1) * cr3
+        ch(i-1,k,4) = wa3(i-2) * cr4 - wa3(i-1) * ci4
+        ch(i,k,4)   = wa3(i-2) * ci4 + wa3(i-1) * cr4
+
+      end do
+    end do
+
+    if ( mod ( ido, 2 ) == 1 ) then
+      return
+    end if
+
+  end if
+
+  do k = 1, l1
+
+    ti1 = cc(1,2,k)   + cc(1,4,k)
+    ti2 = cc(1,4,k)   - cc(1,2,k)
+    tr1 = cc(ido,1,k) - cc(ido,3,k)
+    tr2 = cc(ido,1,k) + cc(ido,3,k)
+
+    ch(ido,k,1) = tr2 + tr2
+    ch(ido,k,2) = sqrt2 * ( tr1 - ti1 )
+    ch(ido,k,3) = ti2 + ti2
+    ch(ido,k,4) = -sqrt2 * ( tr1 + ti1 )
+
+  end do
+
+  return
+end
+subroutine radb5 ( ido, l1, cc, ch, wa1, wa2, wa3, wa4 )
+!
+!*******************************************************************************
+!
+!! RADB5 is a lower level routine used by RFFTB1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,5,l1)
+  real ch(ido,l1,5)
+  real ci2
+  real ci3
+  real ci4
+  real ci5
+  real cr2
+  real cr3
+  real cr4
+  real cr5
+  real di2
+  real di3
+  real di4
+  real di5
+  real dr2
+  real dr3
+  real dr4
+  real dr5
+  integer i
+  integer ic
+  integer k
+  real, parameter :: ti11 =  0.951056516295154E+00
+  real, parameter :: ti12 =  0.587785252292473E+00
+  real ti2
+  real ti3
+  real ti4
+  real ti5
+  real, parameter :: tr11 =  0.309016994374947E+00
+  real, parameter :: tr12 = -0.809016994374947E+00
+  real tr2
+  real tr3
+  real tr4
+  real tr5
+  real wa1(ido)
+  real wa2(ido)
+  real wa3(ido)
+  real wa4(ido)
+!
+  do k = 1, l1
+
+    ti5 = cc(1,3,k) + cc(1,3,k)
+    ti4 = cc(1,5,k) + cc(1,5,k)
+    tr2 = cc(ido,2,k) + cc(ido,2,k)
+    tr3 = cc(ido,4,k) + cc(ido,4,k)
+
+    ch(1,k,1) = cc(1,1,k) + tr2 + tr3
+    cr2 = cc(1,1,k) + tr11 * tr2 + tr12 * tr3
+    cr3 = cc(1,1,k) + tr12 * tr2 + tr11 * tr3
+    ci5 = ti11 * ti5 + ti12 * ti4
+    ci4 = ti12 * ti5 - ti11 * ti4
+
+    ch(1,k,2) = cr2 - ci5
+    ch(1,k,3) = cr3 - ci4
+    ch(1,k,4) = cr3 + ci4
+    ch(1,k,5) = cr2 + ci5
+
+  end do
+
+  if ( ido == 1 ) then
+    return
+  end if
+
+  do k = 1, l1
+    do i = 3, ido, 2
+
+      ic = ido + 2 - i
+
+      ti5 = cc(i,3,k) + cc(ic,2,k)
+      ti2 = cc(i,3,k) - cc(ic,2,k)
+      ti4 = cc(i,5,k) + cc(ic,4,k)
+      ti3 = cc(i,5,k) - cc(ic,4,k)
+      tr5 = cc(i-1,3,k) - cc(ic-1,2,k)
+      tr2 = cc(i-1,3,k) + cc(ic-1,2,k)
+      tr4 = cc(i-1,5,k) - cc(ic-1,4,k)
+      tr3 = cc(i-1,5,k) + cc(ic-1,4,k)
+
+      ch(i-1,k,1) = cc(i-1,1,k) + tr2 + tr3
+      ch(i,k,1)   = cc(i,1,k) + ti2 + ti3
+
+      cr2 = cc(i-1,1,k) + tr11 * tr2 + tr12 * tr3
+      ci2 = cc(i,1,k)   + tr11 * ti2 + tr12 * ti3
+      cr3 = cc(i-1,1,k) + tr12 * tr2 + tr11 * tr3
+      ci3 = cc(i,1,k)   + tr12 * ti2 + tr11 * ti3
+
+      cr5 = ti11 * tr5 + ti12 * tr4
+      ci5 = ti11 * ti5 + ti12 * ti4
+      cr4 = ti12 * tr5 - ti11 * tr4
+      ci4 = ti12 * ti5 - ti11 * ti4
+
+      dr3 = cr3 - ci4
+      dr4 = cr3 + ci4
+      di3 = ci3 + cr4
+      di4 = ci3 - cr4
+      dr5 = cr2 + ci5
+      dr2 = cr2 - ci5
+      di5 = ci2 - cr5
+      di2 = ci2 + cr5
+
+      ch(i-1,k,2) = wa1(i-2) * dr2 - wa1(i-1) * di2
+      ch(i,k,2)   = wa1(i-2) * di2 + wa1(i-1) * dr2
+      ch(i-1,k,3) = wa2(i-2) * dr3 - wa2(i-1) * di3
+      ch(i,k,3)   = wa2(i-2) * di3 + wa2(i-1) * dr3
+      ch(i-1,k,4) = wa3(i-2) * dr4 - wa3(i-1) * di4
+      ch(i,k,4)   = wa3(i-2) * di4 + wa3(i-1) * dr4
+      ch(i-1,k,5) = wa4(i-2) * dr5 - wa4(i-1) * di5
+      ch(i,k,5)   = wa4(i-2) * di5 + wa4(i-1) * dr5
+
+    end do
+  end do
+
+  return
+end
+subroutine radbg ( ido, ip, l1, idl1, cc, c1, c2, ch, ch2, wa )
+!
+!*******************************************************************************
+!
+!! RADBG is a lower level routine used by RFFTB1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer idl1
+  integer ido
+  integer ip
+  integer l1
+!
+  real ai1
+  real ai2
+  real ar1
+  real ar1h
+  real ar2
+  real ar2h
+  real arg
+  real c1(ido,l1,ip)
+  real c2(idl1,ip)
+  real cc(ido,ip,l1)
+  real ch(ido,l1,ip)
+  real ch2(idl1,ip)
+  real dc2
+  real dcp
+  real ds2
+  real dsp
+  integer i
+  integer ic
+  integer idij
+  integer ik
+  integer ipph
+  integer is
+  integer j
+  integer j2
+  integer jc
+  integer k
+  integer l
+  integer lc
+  integer nbd
+  real pimach
+  real wa(*)
+!
+  arg = 2.0E+00 * pimach() / real ( ip )
+  dcp = cos ( arg )
+  dsp = sin ( arg )
+  nbd = ( ido - 1 ) / 2
+  ipph = ( ip + 1 ) / 2
+  ch(1:ido,1:l1,1) = cc(1:ido,1,1:l1)
+
+  do j = 2, ipph
+    jc = ip + 2 - j
+    j2 = j + j
+    ch(1,1:l1,j) =  cc(ido,j2-2,1:l1) + cc(ido,j2-2,1:l1)
+    ch(1,1:l1,jc) = cc(1,j2-1,1:l1)   + cc(1,j2-1,1:l1)
+  end do
+
+  if ( ido /= 1 ) then
+
+    if ( nbd >= l1 ) then
+
+      do j = 2, ipph
+        jc = ip + 2 - j
+        do k = 1, l1
+          do i = 3, ido, 2
+            ic = ido + 2 - i
+            ch(i-1,k,j)  = cc(i-1,2*j-1,k) + cc(ic-1,2*j-2,k)
+            ch(i-1,k,jc) = cc(i-1,2*j-1,k) - cc(ic-1,2*j-2,k)
+            ch(i,k,j)    = cc(i,2*j-1,k)   - cc(ic,2*j-2,k)
+            ch(i,k,jc)   = cc(i,2*j-1,k)   + cc(ic,2*j-2,k)
+          end do
+        end do
+      end do
+
+    else
+
+      do j = 2, ipph
+        jc = ip + 2 - j
+        do i = 3, ido, 2
+          ic = ido + 2 - i
+          ch(i-1,1:l1,j)  = cc(i-1,2*j-1,1:l1) + cc(ic-1,2*j-2,1:l1)
+          ch(i-1,1:l1,jc) = cc(i-1,2*j-1,1:l1) - cc(ic-1,2*j-2,1:l1)
+          ch(i,1:l1,j)    = cc(i,2*j-1,1:l1)   - cc(ic,2*j-2,1:l1)
+          ch(i,1:l1,jc)   = cc(i,2*j-1,1:l1)   + cc(ic,2*j-2,1:l1)
+        end do
+      end do
+
+    end if
+
+  end if
+
+  ar1 = 1.0E+00
+  ai1 = 0.0E+00
+
+  do l = 2, ipph
+
+    lc = ip + 2 - l
+    ar1h = dcp * ar1 - dsp * ai1
+    ai1 =  dcp * ai1 + dsp * ar1
+    ar1 = ar1h
+
+    do ik = 1, idl1
+      c2(ik,l)  = ch2(ik,1) + ar1 * ch2(ik,2)
+      c2(ik,lc) =             ai1 * ch2(ik,ip)
+    end do
+
+    dc2 = ar1
+    ds2 = ai1
+    ar2 = ar1
+    ai2 = ai1
+
+    do j = 3, ipph
+
+      jc = ip + 2 - j
+      ar2h = dc2 * ar2 - ds2 * ai2
+      ai2  = dc2 * ai2 + ds2 * ar2
+      ar2 = ar2h
+
+      do ik = 1, idl1
+        c2(ik,l)  = c2(ik,l)  + ar2 * ch2(ik,j)
+        c2(ik,lc) = c2(ik,lc) + ai2 * ch2(ik,jc)
+      end do
+
+    end do
+
+  end do
+
+  do j = 2, ipph
+    ch2(1:idl1,1) = ch2(1:idl1,1) + ch2(1:idl1,j)
+  end do
+
+  do j = 2, ipph
+    jc = ip + 2 - j
+    ch(1,1:l1,j)  = c1(1,1:l1,j) - c1(1,1:l1,jc)
+    ch(1,1:l1,jc) = c1(1,1:l1,j) + c1(1,1:l1,jc)
+  end do
+
+  if ( ido /= 1 ) then
+
+    if ( nbd >= l1 ) then
+
+      do j = 2, ipph
+        jc = ip + 2 - j
+        do k = 1, l1
+          do i = 3, ido, 2
+            ch(i-1,k,j)  = c1(i-1,k,j) - c1(i,k,jc)
+            ch(i-1,k,jc) = c1(i-1,k,j) + c1(i,k,jc)
+            ch(i,k,j)    = c1(i,k,j)   + c1(i-1,k,jc)
+            ch(i,k,jc)   = c1(i,k,j)   - c1(i-1,k,jc)
+          end do
+        end do
+      end do
+
+    else
+
+      do j = 2, ipph
+        jc = ip + 2 - j
+        do i = 3, ido, 2
+          ch(i-1,1:l1,j)  = c1(i-1,1:l1,j) - c1(i,1:l1,jc)
+          ch(i-1,1:l1,jc) = c1(i-1,1:l1,j) + c1(i,1:l1,jc)
+          ch(i,1:l1,j)    = c1(i,1:l1,j)   + c1(i-1,1:l1,jc)
+          ch(i,1:l1,jc)   = c1(i,1:l1,j)   - c1(i-1,1:l1,jc)
+        end do
+      end do
+
+    end if
+
+  end if
+
+  if ( ido == 1 ) then
+    return
+  end if
+
+  c2(1:idl1,1) = ch2(1:idl1,1)
+  c1(1,1:l1,2:ip) = ch(1,1:l1,2:ip)
+
+  if ( nbd <= l1 ) then
+
+    is = -ido
+
+    do j = 2, ip
+      is = is + ido
+      idij = is
+      do i = 3, ido, 2
+        idij = idij + 2
+        c1(i-1,1:l1,j) = wa(idij-1) * ch(i-1,1:l1,j) - wa(idij) * ch(i,1:l1,j)
+        c1(i,1:l1,j)   = wa(idij-1) * ch(i,1:l1,j)   + wa(idij) * ch(i-1,1:l1,j)
+      end do
+    end do
+
+  else
+
+    is = -ido
+    do j = 2, ip
+      is = is + ido
+      do k = 1, l1
+        idij = is
+        do i = 3, ido, 2
+          idij = idij + 2
+          c1(i-1,k,j) = wa(idij-1) * ch(i-1,k,j) - wa(idij) * ch(i,k,j)
+          c1(i,k,j)   = wa(idij-1) * ch(i,k,j)   + wa(idij) * ch(i-1,k,j)
+        end do
+      end do
+    end do
+
+  end if
+
+  return
+end
+subroutine radf2 ( ido, l1, cc, ch, wa1 )
+!
+!*******************************************************************************
+!
+!! RADF2 is a lower level routine used by RFFTF1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,l1,2)
+  real ch(ido,2,l1)
+  integer i
+  integer ic
+  integer k
+  real ti2
+  real tr2
+  real wa1(ido)
+!
+  ch(1,1,1:l1)   = cc(1,1:l1,1) + cc(1,1:l1,2)
+  ch(ido,2,1:l1) = cc(1,1:l1,1) - cc(1,1:l1,2)
+
+  if ( ido < 2 ) then
+    return
+  end if
+
+  if ( ido > 2 ) then
+
+    do k = 1, l1
+      do i = 3, ido, 2
+
+        ic = ido + 2 - i
+
+        tr2 = wa1(i-2) * cc(i-1,k,2) + wa1(i-1) * cc(i,k,2)
+        ti2 = wa1(i-2) * cc(i,k,2)   - wa1(i-1) * cc(i-1,k,2)
+
+        ch(i,1,k) = cc(i,k,1) + ti2
+        ch(ic,2,k) = ti2 - cc(i,k,1)
+        ch(i-1,1,k) = cc(i-1,k,1) + tr2
+        ch(ic-1,2,k) = cc(i-1,k,1) - tr2
+
+      end do
+    end do
+
+    if ( mod ( ido, 2 ) == 1 ) then
+      return
+    end if
+
+  end if
+
+  ch(1,2,1:l1) = -cc(ido,1:l1,2)
+  ch(ido,1,1:l1) = cc(ido,1:l1,1)
+
+  return
+end
+subroutine radf3 ( ido, l1, cc, ch, wa1, wa2 )
+!
+!*******************************************************************************
+!
+!! RADF3 is a lower level routine used by RFFTF1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,l1,3)
+  real ch(ido,3,l1)
+  real ci2
+  real cr2
+  real di2
+  real di3
+  real dr2
+  real dr3
+  integer i
+  integer ic
+  integer k
+  real, parameter :: taui = 0.866025403784439E+00
+  real, parameter :: taur = -0.5E+00
+  real ti2
+  real ti3
+  real tr2
+  real tr3
+  real wa1(ido)
+  real wa2(ido)
+!
+  do k = 1, l1
+    cr2 = cc(1,k,2) + cc(1,k,3)
+    ch(1,1,k) = cc(1,k,1) + cr2
+    ch(1,3,k) = taui * ( cc(1,k,3) - cc(1,k,2) )
+    ch(ido,2,k) = cc(1,k,1) + taur * cr2
+  end do
+
+  if ( ido == 1 ) then
+    return
+  end if
+
+  do k = 1, l1
+    do i = 3, ido, 2
+
+      ic = ido + 2 - i
+
+      dr2 = wa1(i-2) * cc(i-1,k,2) + wa1(i-1) * cc(i,k,2)
+      di2 = wa1(i-2) * cc(i,k,2)   - wa1(i-1) * cc(i-1,k,2)
+      dr3 = wa2(i-2) * cc(i-1,k,3) + wa2(i-1) * cc(i,k,3)
+      di3 = wa2(i-2) * cc(i,k,3)   - wa2(i-1) * cc(i-1,k,3)
+
+      cr2 = dr2 + dr3
+      ci2 = di2 + di3
+
+      ch(i-1,1,k) = cc(i-1,k,1) + cr2
+      ch(i,1,k)   = cc(i,k,1) + ci2
+
+      tr2 = cc(i-1,k,1) + taur * cr2
+      ti2 = cc(i,k,1) + taur * ci2
+      tr3 = taui * ( di2 - di3 )
+      ti3 = taui * ( dr3 - dr2 )
+
+      ch(i-1,3,k) = tr2 + tr3
+      ch(ic-1,2,k) = tr2 - tr3
+      ch(i,3,k) = ti2 + ti3
+      ch(ic,2,k) = ti3 - ti2
+
+    end do
+  end do
+
+  return
+end
+subroutine radf4 ( ido, l1, cc, ch, wa1, wa2, wa3 )
+!
+!*******************************************************************************
+!
+!! RADF4 is a lower level routine used by RFFTF1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,l1,4)
+  real ch(ido,4,l1)
+  real ci2
+  real ci3
+  real ci4
+  real cr2
+  real cr3
+  real cr4
+  real, parameter :: hsqt2 = 0.7071067811865475E+00
+  integer i
+  integer ic
+  integer k
+  real ti1
+  real ti2
+  real ti3
+  real ti4
+  real tr1
+  real tr2
+  real tr3
+  real tr4
+  real wa1(ido)
+  real wa2(ido)
+  real wa3(ido)
+!
+  do k = 1, l1
+    tr1 = cc(1,k,2) + cc(1,k,4)
+    tr2 = cc(1,k,1) + cc(1,k,3)
+    ch(1,1,k) = tr1 + tr2
+    ch(ido,4,k) = tr2 - tr1
+    ch(ido,2,k) = cc(1,k,1) - cc(1,k,3)
+    ch(1,3,k) = cc(1,k,4) - cc(1,k,2)
+  end do
+
+  if ( ido < 2 ) then
+    return
+  end if
+
+  if ( ido > 2 ) then
+
+    do k = 1, l1
+      do i = 3, ido, 2
+
+        ic = ido + 2 - i
+
+        cr2 = wa1(i-2) * cc(i-1,k,2) + wa1(i-1) * cc(i,k,2)
+        ci2 = wa1(i-2) * cc(i,k,2)   - wa1(i-1) * cc(i-1,k,2)
+        cr3 = wa2(i-2) * cc(i-1,k,3) + wa2(i-1) * cc(i,k,3)
+        ci3 = wa2(i-2) * cc(i,k,3)   - wa2(i-1) * cc(i-1,k,3)
+        cr4 = wa3(i-2) * cc(i-1,k,4) + wa3(i-1) * cc(i,k,4)
+        ci4 = wa3(i-2) * cc(i,k,4)   - wa3(i-1) * cc(i-1,k,4)
+
+        tr1 = cr2+cr4
+        tr4 = cr4-cr2
+        ti1 = ci2+ci4
+        ti4 = ci2-ci4
+        ti2 = cc(i,k,1) + ci3
+        ti3 = cc(i,k,1) - ci3
+        tr2 = cc(i-1,k,1) + cr3
+        tr3 = cc(i-1,k,1) - cr3
+
+        ch(i-1,1,k)  = tr1 + tr2
+        ch(ic-1,4,k) = tr2 - tr1
+        ch(i,1,k)    = ti1 + ti2
+        ch(ic,4,k)   = ti1 - ti2
+        ch(i-1,3,k)  = ti4 + tr3
+        ch(ic-1,2,k) = tr3 - ti4
+        ch(i,3,k)    = tr4 + ti3
+        ch(ic,2,k)   = tr4 - ti3
+
+      end do
+    end do
+
+    if ( mod ( ido, 2 ) == 1 ) then
+      return
+    end if
+
+  end if
+
+  do k = 1, l1
+
+    ti1 = -hsqt2 * ( cc(ido,k,2) + cc(ido,k,4) )
+    tr1 =  hsqt2 * ( cc(ido,k,2) - cc(ido,k,4) )
+
+    ch(ido,1,k) = tr1 + cc(ido,k,1)
+    ch(ido,3,k) = cc(ido,k,1) - tr1
+
+    ch(1,2,k) = ti1 - cc(ido,k,3)
+    ch(1,4,k) = ti1 + cc(ido,k,3)
+
+  end do
+
+  return
+end
+subroutine radf5 ( ido, l1, cc, ch, wa1, wa2, wa3, wa4 )
+!
+!*******************************************************************************
+!
+!! RADF5 is a lower level routine used by RFFTF1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer ido
+  integer l1
+!
+  real cc(ido,l1,5)
+  real ch(ido,5,l1)
+  real ci2
+  real ci3
+  real ci4
+  real ci5
+  real cr2
+  real cr3
+  real cr4
+  real cr5
+  real di2
+  real di3
+  real di4
+  real di5
+  real dr2
+  real dr3
+  real dr4
+  real dr5
+  integer i
+  integer ic
+  integer k
+  real, parameter :: ti11 =  0.951056516295154E+00
+  real, parameter :: ti12 =  0.587785252292473E+00
+  real ti2
+  real ti3
+  real ti4
+  real ti5
+  real, parameter :: tr11 =  0.309016994374947E+00
+  real, parameter :: tr12 = -0.809016994374947E+00
+  real tr2
+  real tr3
+  real tr4
+  real tr5
+  real wa1(ido)
+  real wa2(ido)
+  real wa3(ido)
+  real wa4(ido)
+!
+  do k = 1, l1
+
+    cr2 = cc(1,k,5) + cc(1,k,2)
+    ci5 = cc(1,k,5) - cc(1,k,2)
+    cr3 = cc(1,k,4) + cc(1,k,3)
+    ci4 = cc(1,k,4) - cc(1,k,3)
+
+    ch(1,1,k)   = cc(1,k,1) + cr2 + cr3
+    ch(ido,2,k) = cc(1,k,1) + tr11 * cr2 + tr12 * cr3
+    ch(1,3,k)   = ti11 * ci5 + ti12 * ci4
+    ch(ido,4,k) = cc(1,k,1) + tr12 * cr2 + tr11 * cr3
+    ch(1,5,k)   = ti12 * ci5 - ti11 * ci4
+
+  end do
+
+  if ( ido == 1 ) then
+    return
+  end if
+
+  do k = 1, l1
+    do i = 3, ido, 2
+
+      ic = ido + 2 - i
+
+      dr2 = wa1(i-2) * cc(i-1,k,2) + wa1(i-1) * cc(i,k,2)
+      di2 = wa1(i-2) * cc(i,k,2)   - wa1(i-1) * cc(i-1,k,2)
+      dr3 = wa2(i-2) * cc(i-1,k,3) + wa2(i-1) * cc(i,k,3)
+      di3 = wa2(i-2) * cc(i,k,3)   - wa2(i-1) * cc(i-1,k,3)
+      dr4 = wa3(i-2) * cc(i-1,k,4) + wa3(i-1) * cc(i,k,4)
+      di4 = wa3(i-2) * cc(i,k,4)   - wa3(i-1) * cc(i-1,k,4)
+      dr5 = wa4(i-2) * cc(i-1,k,5) + wa4(i-1) * cc(i,k,5)
+      di5 = wa4(i-2) * cc(i,k,5)   - wa4(i-1) * cc(i-1,k,5)
+
+      cr2 = dr2 + dr5
+      ci5 = dr5 - dr2
+      cr5 = di2 - di5
+      ci2 = di2 + di5
+      cr3 = dr3 + dr4
+      ci4 = dr4 - dr3
+      cr4 = di3 - di4
+      ci3 = di3 + di4
+
+      ch(i-1,1,k) = cc(i-1,k,1) + cr2 + cr3
+      ch(i,1,k)   = cc(i,k,1)   + ci2 + ci3
+
+      tr2 = cc(i-1,k,1) + tr11 * cr2 + tr12 * cr3
+      ti2 = cc(i,k,1)   + tr11 * ci2 + tr12 * ci3
+      tr3 = cc(i-1,k,1) + tr12 * cr2 + tr11 * cr3
+      ti3 = cc(i,k,1)   + tr12 * ci2 + tr11 * ci3
+
+      tr5 = ti11 * cr5 + ti12 * cr4
+      ti5 = ti11 * ci5 + ti12 * ci4
+      tr4 = ti12 * cr5 - ti11 * cr4
+      ti4 = ti12 * ci5 - ti11 * ci4
+
+      ch(i-1,3,k)  = tr2 + tr5
+      ch(ic-1,2,k) = tr2 - tr5
+      ch(i,3,k)    = ti2 + ti5
+      ch(ic,2,k)   = ti5 - ti2
+      ch(i-1,5,k)  = tr3 + tr4
+      ch(ic-1,4,k) = tr3 - tr4
+      ch(i,5,k)    = ti3 + ti4
+      ch(ic,4,k)   = ti4 - ti3
+
+    end do
+  end do
+
+  return
+end
+subroutine radfg ( ido, ip, l1, idl1, cc, c1, c2, ch, ch2, wa )
+!
+!*******************************************************************************
+!
+!! RADFG is a lower level routine used by RFFTF1.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+  integer idl1
+  integer ido
+  integer ip
+  integer l1
+!
+  real ai1
+  real ai2
+  real ar1
+  real ar1h
+  real ar2
+  real ar2h
+  real arg
+  real c1(ido,l1,ip)
+  real c2(idl1,ip)
+  real cc(ido,ip,l1)
+  real ch(ido,l1,ip)
+  real ch2(idl1,ip)
+  real dc2
+  real dcp
+  real ds2
+  real dsp
+  integer i
+  integer ic
+  integer idij
+  integer ik
+  integer ipph
+  integer is
+  integer j
+  integer j2
+  integer jc
+  integer k
+  integer l
+  integer lc
+  integer nbd
+  real pimach
+  real wa(*)
+!
+  arg = 2.0E+00 * pimach() / real ( ip )
+  dcp = cos ( arg )
+  dsp = sin ( arg )
+  ipph = ( ip + 1 ) / 2
+  nbd = ( ido - 1 ) / 2
+
+  if ( ido == 1 ) then
+
+    c2(1:idl1,1) = ch2(1:idl1,1)
+
+  else
+
+    ch2(1:idl1,1) = c2(1:idl1,1)
+    ch(1,1:l1,2:ip) = c1(1,1:l1,2:ip)
+
+    if ( nbd <= l1 ) then
+
+      is = -ido
+      do j = 2, ip
+        is = is + ido
+        idij = is
+        do i = 3, ido, 2
+          idij = idij + 2
+          do k = 1, l1
+            ch(i-1,k,j) = wa(idij-1) * c1(i-1,k,j) + wa(idij) * c1(i,k,j)
+            ch(i,k,j)   = wa(idij-1) * c1(i,k,j)   - wa(idij) * c1(i-1,k,j)
+          end do
+        end do
+      end do
+
+    else
+
+      is = -ido
+
+      do j = 2, ip
+        is = is + ido
+        do k = 1, l1
+          idij = is
+          do i = 3, ido, 2
+            idij = idij + 2
+            ch(i-1,k,j) = wa(idij-1) * c1(i-1,k,j) + wa(idij) * c1(i,k,j)
+            ch(i,k,j)   = wa(idij-1) * c1(i,k,j)   - wa(idij) * c1(i-1,k,j)
+          end do
+        end do
+      end do
+
+    end if
+
+    if ( nbd >= l1 ) then
+
+      do j = 2, ipph
+        jc = ip + 2 - j
+        do k = 1, l1
+          do i = 3, ido, 2
+            c1(i-1,k,j)  = ch(i-1,k,j)  + ch(i-1,k,jc)
+            c1(i-1,k,jc) = ch(i,k,j)    - ch(i,k,jc)
+            c1(i,k,j)    = ch(i,k,j)    + ch(i,k,jc)
+            c1(i,k,jc)   = ch(i-1,k,jc) - ch(i-1,k,j)
+          end do
+        end do
+      end do
+
+    else
+
+      do j = 2, ipph
+        jc = ip + 2 - j
+        do i = 3, ido, 2
+          c1(i-1,1:l1,j)  = ch(i-1,1:l1,j)  + ch(i-1,1:l1,jc)
+          c1(i-1,1:l1,jc) = ch(i,1:l1,j)    - ch(i,1:l1,jc)
+          c1(i,1:l1,j)    = ch(i,1:l1,j)    + ch(i,1:l1,jc)
+          c1(i,1:l1,jc)   = ch(i-1,1:l1,jc) - ch(i-1,1:l1,j)
+        end do
+      end do
+
+    end if
+
+  end if
+
+  do j = 2, ipph
+    jc = ip + 2 - j
+    c1(1,1:l1,j)  = ch(1,1:l1,j)  + ch(1,1:l1,jc)
+    c1(1,1:l1,jc) = ch(1,1:l1,jc) - ch(1,1:l1,j)
+  end do
+
+  ar1 = 1.0E+00
+  ai1 = 0.0E+00
+
+  do l = 2, ipph
+
+    lc = ip + 2 - l
+    ar1h = dcp * ar1 - dsp * ai1
+    ai1 =  dcp * ai1 + dsp * ar1
+    ar1 = ar1h
+
+    do ik = 1, idl1
+      ch2(ik,l) = c2(ik,1) + ar1 * c2(ik,2)
+      ch2(ik,lc) =           ai1 * c2(ik,ip)
+    end do
+
+    dc2 = ar1
+    ds2 = ai1
+    ar2 = ar1
+    ai2 = ai1
+
+    do j = 3, ipph
+
+      jc = ip + 2 - j
+      ar2h = dc2 * ar2 - ds2 * ai2
+      ai2 =  dc2 * ai2 + ds2 * ar2
+      ar2 = ar2h
+
+      do ik = 1, idl1
+        ch2(ik,l) =  ch2(ik,l)  + ar2 * c2(ik,j)
+        ch2(ik,lc) = ch2(ik,lc) + ai2 * c2(ik,jc)
+      end do
+
+    end do
+
+  end do
+
+  do j = 2, ipph
+    ch2(1:idl1,1) = ch2(1:idl1,1) + c2(1:idl1,j)
+  end do
+
+  cc(1:ido,1,1:l1) = ch(1:ido,1:l1,1)
+
+  do j = 2, ipph
+    jc = ip + 2 - j
+    j2 = j + j
+    cc(ido,j2-2,1:l1) = ch(1,1:l1,j)
+    cc(1,j2-1,1:l1)   = ch(1,1:l1,jc)
+  end do
+
+  if ( ido == 1 ) then
+    return
+  end if
+
+  if ( nbd >= l1 ) then
+
+    do j = 2, ipph
+      jc = ip + 2 - j
+      j2 = j + j
+      do k = 1, l1
+        do i = 3, ido, 2
+          ic = ido + 2 - i
+          cc(i-1,j2-1,k)  = ch(i-1,k,j) + ch(i-1,k,jc)
+          cc(ic-1,j2-2,k) = ch(i-1,k,j) - ch(i-1,k,jc)
+          cc(i,j2-1,k)    = ch(i,k,j)   + ch(i,k,jc)
+          cc(ic,j2-2,k)   = ch(i,k,jc)  - ch(i,k,j)
+        end do
+      end do
+    end do
+
+  else
+
+    do j = 2, ipph
+      jc = ip + 2 - j
+      j2 = j + j
+      do i = 3, ido, 2
+        ic = ido + 2 - i
+        cc(i-1,j2-1,1:l1)  = ch(i-1,1:l1,j) + ch(i-1,1:l1,jc)
+        cc(ic-1,j2-2,1:l1) = ch(i-1,1:l1,j) - ch(i-1,1:l1,jc)
+        cc(i,j2-1,1:l1)    = ch(i,1:l1,j)   + ch(i,1:l1,jc)
+        cc(ic,j2-2,1:l1)   = ch(i,1:l1,jc)  - ch(i,1:l1,j)
+      end do
+    end do
+
+  end if
+
+  return
+end
+subroutine random_initialize ( seed )
+!
+!*******************************************************************************
+!
+!! RANDOM_INITIALIZE initializes the FORTRAN 90 random number seed.
+!
+!
+!  Discussion:
+!
+!    If you don't initialize the random number generator, its behavior
+!    is not specified.  If you initialize it simply by:
+!
+!      call random_seed
+!
+!    its behavior is not specified.  On the DEC ALPHA, if that's all you
+!    do, the same random number sequence is returned.  In order to actually
+!    try to scramble up the random number generator a bit, this routine
+!    goes through the tedious process of getting the size of the random
+!    number seed, making up values based on the current time, and setting
+!    the random number seed.
+!
+!    And this is the FORTRAN 90 people's idea of convenience?
+!
+!    And I still get poorly randomized values, somehow, having to do
+!    with a bad seed, or something.  I am about ready to go back to
+!    using my own damn routine!
+!
+!  Modified:
+!
+!    06 February 2001
+!
+!  Author:
+!
+!    John Burkardt
+!
+!  Parameters:
+!
+!    Output, integer SEED, a seed value.
+!
+  integer date_time(8)
+  integer i
+  integer seed
+  integer, allocatable :: seed_vector(:)
+  integer seed_size
+  real t
+  integer value
+!
+!  Initialize the random number seed.
+!
+  call random_seed
+!
+!  Determine the size of the random number seed.
+!
+  call random_seed ( size = seed_size )
+!
+!  Allocate a seed of the right size.
+!
+  allocate ( seed_vector(seed_size) )
+ seed_vector(:) = 0.
+!
+!  Get the current date and time.
+!
+  call date_and_time ( values = date_time )
+!
+!  Construct a slightly random value.
+!
+  seed = 0
+  do i = 1, 8
+    seed = ieor ( seed, date_time(i) )
+  end do
+!
+!  Make slightly random assignments to SEED_VECTOR.
+!
+  do i = 1, seed_size
+    seed_vector(i) = ieor ( seed, i )
+  end do
+!
+!  Set the random number seed value.
+!
+  call random_seed ( put = seed_vector(1:seed_size) )
+!
+!  Free up the seed space.
+!
+  deallocate ( seed_vector )
+!
+!  Because EVEN THIS DOESN'T SEEM TO PROPERLY MIX UP THE RANDOM
+!  NUMBERS, call the random number routine a bunch of times.
+!
+  do i = 1, 100
+    call random_number ( harvest = t )
+  end do
+!
+!  I STILL GET LOUSY RESULTS.  THE HELL WITH IT!
+!
+  return
+end
+subroutine result(nr,n,x,f,g,a,p,itncnt,iflg,ipr)
+!
+!*******************************************************************************
+!
+!! RESULT prints information about the optimization process.
+!
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! x(n)         --> iterate x[k]
+! f            --> function value at x[k]
+! g(n)         --> gradient at x[k]
+! a(n,n)       --> hessian at x[k]
+! p(n)         --> step taken
+! itncnt       --> iteration number k
+! iflg         --> flag controlling info to print
+! ipr          --> device to which to send output
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real f
+  real g(n)
+  integer i
+  integer iflg
+  integer ipr
+  integer itncnt
+  integer j
+  real p(n)
+  real x(n)
+!
+  write ( ipr, 903 ) itncnt
+
+  if ( iflg /= 0 ) then
+    write ( ipr, * ) ' result       step'
+    write ( ipr,905) p(1:n)
+  end if
+
+  write ( ipr, * ) ' result       x(k)'
+  write ( ipr, 905) x(1:n)
+  write ( ipr, * ) ' result     function at x(k)'
+  write ( ipr, 905) f
+  write ( ipr, * ) ' result       gradient at x(k)'
+  write ( ipr, 905) g(1:n)
+
+  if ( iflg /= 0 ) then
+
+    write ( ipr, * ) ' result       hessian at x(k)'
+    do i = 1, n
+      write ( ipr, 900) i
+      write ( ipr, 902) (a(i,j),j=1,i)
+    end do
+
+  end if
+
+  return
+
+  900 format(' result     row',i5)
+  902 format(' result       ',5(2x,e20.13))
+  903 format(/'0result    iterate k=',i5)
+  905 format(' result               ',5(2x,e20.13) )
+end
+subroutine rfftb ( n, r, wsave )
+!
+!*******************************************************************************
+!
+!! RFFTB computes a real periodic sequence from its Fourier coefficients.
+!
+!
+!  Discussion:
+!
+!    This process is sometimes called Fourier synthesis.
+!
+!    The transform is unnormalized.  A call to RFFTF followed by a call to
+!    RFFTB will multiply the input sequence by N.
+!
+!    If N is even, the transform is defined by:
+!
+!      R_out(I) = R_in(1) + (-1)**(I-1) * R_in(N) + sum ( 2 <= K <= N/2 )
+!
+!        + 2 * R_in(2*K-2) * cos ( ( K - 1 ) * ( I - 1 ) * 2 * PI / N )
+!
+!        - 2 * R_in(2*K-1) * sin ( ( K - 1 ) * ( I - 1 ) * 2 * PI / N )
+!
+!    If N is odd, the transform is defined by:
+!
+!      R_out(I) = R_in(1) + sum ( 2 <= K <= (N+1)/2 )
+!
+!        + 2 * R_in(2*K-2) * cos ( ( K - 1 ) * ( I - 1 ) * 2 * PI / N )
+!
+!        - 2 * R_in(2*K-1) * sin ( ( K - 1 ) * ( I - 1 ) * 2 * PI / N )
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array to be transformed.  The
+!    method is more efficient when N is the product of small primes.
+!
+!    Input/output, real R(N).
+!    On input, the sequence to be transformed.
+!    On output, the transformed sequence.
+!
+!    Input, real WSAVE(2*N+15), a work array.  The WSAVE array must be
+!    initialized by calling RFFTI.  A different WSAVE array must be used
+!    for each different value of N.
+!
+  integer n
+!
+  real r(n)
+  real wsave(2*n+15)
+!
+  if ( n <= 1 ) then
+    return
+  end if
+
+  call rfftb1 ( n, r, wsave(1), wsave(n+1), wsave(2*n+1) )
+
+  return
+end
+subroutine rfftb1 ( n, c, ch, wa, ifac )
+!
+!*******************************************************************************
+!
+!! RFFTB1 is a lower level routine used by RFFTB.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array to be transformed.
+!
+!    Input/output, real C(N).
+!    On input, the sequence to be transformed.
+!    On output, the transformed sequence.
+!
+!    Input, real CH(N).
+!
+!    Input, real WA(N).
+!
+!    Input, integer IFAC(15).
+!    IFAC(1) = N, the number that was factored.
+!    IFAC(2) = NF, the number of factors.
+!    IFAC(3:2+NF), the factors.
+!
+  integer n
+!
+  real c(n)
+  real ch(n)
+  integer idl1
+  integer ido
+  integer ifac(15)
+  integer ip
+  integer iw
+  integer ix2
+  integer ix3
+  integer ix4
+  integer k1
+  integer l1
+  integer l2
+  integer na
+  integer nf
+  real wa(n)
+!
+  nf = ifac(2)
+  na = 0
+  l1 = 1
+  iw = 1
+
+  do k1 = 1, nf
+
+    ip = ifac(k1+2)
+    l2 = ip * l1
+    ido = n / l2
+    idl1 = ido * l1
+
+    if ( ip == 4 ) then
+
+      ix2 = iw + ido
+      ix3 = ix2 + ido
+
+      if ( na == 0 ) then
+        call radb4 ( ido, l1, c, ch, wa(iw), wa(ix2), wa(ix3) )
+      else
+        call radb4 ( ido, l1, ch, c, wa(iw), wa(ix2), wa(ix3) )
+      end if
+
+      na = 1 - na
+
+    else if ( ip == 2 ) then
+
+      if ( na == 0 ) then
+        call radb2 ( ido, l1, c, ch, wa(iw) )
+      else
+        call radb2 ( ido, l1, ch, c, wa(iw) )
+      end if
+
+      na = 1 - na
+
+    else if ( ip == 3 ) then
+
+      ix2 = iw + ido
+
+      if ( na == 0 ) then
+        call radb3 ( ido, l1, c, ch, wa(iw), wa(ix2) )
+      else
+        call radb3 ( ido, l1, ch, c, wa(iw), wa(ix2) )
+      end if
+
+      na = 1 - na
+
+    else if ( ip == 5 ) then
+
+      ix2 = iw + ido
+      ix3 = ix2 + ido
+      ix4 = ix3 + ido
+
+      if ( na == 0 ) then
+        call radb5 ( ido, l1, c, ch, wa(iw), wa(ix2), wa(ix3), wa(ix4) )
+      else
+        call radb5 ( ido, l1, ch, c, wa(iw), wa(ix2), wa(ix3), wa(ix4) )
+      end if
+
+      na = 1 - na
+
+    else
+
+      if ( na == 0 ) then
+        call radbg ( ido, ip, l1, idl1, c, c, c, ch, ch, wa(iw) )
+      else
+        call radbg ( ido, ip, l1, idl1, ch, ch, ch, c, c, wa(iw) )
+      end if
+
+      if ( ido == 1 ) then
+        na = 1 - na
+      end if
+
+    end if
+
+    l1 = l2
+    iw = iw + ( ip - 1 ) * ido
+
+  end do
+
+  if ( na /= 0 ) then
+    c(1:n) = ch(1:n)
+  end if
+
+  return
+end
+subroutine rfftf ( n, r, wsave )
+!
+!*******************************************************************************
+!
+!! RFFTF computes the Fourier coefficients of a real periodic sequence.
+!
+!
+!  Discussion:
+!
+!    This process is sometimes called Fourier analysis.
+!
+!    The transform is unnormalized.  A call to RFFTF followed by a call
+!    to RFFTB will multiply the input sequence by N.
+!
+!    The transform is defined by:
+!
+!      R_out(1) = sum ( 1 <= I <= N ) R_in(I)
+!
+!    Letting L = (N+1)/2, then for K = 2,...,L
+!
+!      R_out(2*K-2) = sum ( 1 <= I <= N )
+!
+!        R_in(I) * cos ( ( K - 1 ) * ( I - 1 ) * 2 * PI / N )
+!
+!      R_out(2*K-1) = sum ( 1 <= I <= N )
+!
+!        -R_in(I) * sin ( ( K - 1 ) * ( I - 1 ) * 2 * PI / N )
+!
+!    And, if N is even, then:
+!
+!      R_out(N) = sum ( 1 <= I <= N ) (-1)**(I-1) * R_in(I)
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array to be transformed.  The
+!    method is more efficient when N is the product of small primes.
+!
+!    Input/output, real R(N).
+!    On input, the sequence to be transformed.
+!    On output, the transformed sequence.
+!
+!    Input, real WSAVE(2*N+15), a work array.  The WSAVE array must be
+!    initialized by calling RFFTI.  A different WSAVE array must be used
+!    for each different value of N.
+!
+  integer n
+!
+  real r(n)
+  real wsave(2*n+15)
+!
+  if ( n <= 1 ) then
+    return
+  end if
+
+  call rfftf1 ( n, r, wsave(1), wsave(n+1), wsave(2*n+1) )
+
+  return
+end
+subroutine rfftf1 ( n, c, ch, wa, ifac )
+!
+!*******************************************************************************
+!
+!! RFFTF1 is a lower level routine used by RFFTF and SINT.
+!
+!
+!  Modified:
+!
+!    12 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array to be transformed.
+!
+!    Input/output, real C(N).
+!    On input, the sequence to be transformed.
+!    On output, the transformed sequence.
+!
+!    Input, real CH(N).
+!
+!    Input, real WA(N).
+!
+!    Input, integer IFAC(15).
+!    IFAC(1) = N, the number that was factored.
+!    IFAC(2) = NF, the number of factors.
+!    IFAC(3:2+NF), the factors.
+!
+  integer n
+!
+  real c(n)
+  real ch(n)
+  integer idl1
+  integer ido
+  integer ifac(15)
+  integer ip
+  integer iw
+  integer ix2
+  integer ix3
+  integer ix4
+  integer k1
+  integer kh
+  integer l1
+  integer l2
+  integer na
+  integer nf
+  real wa(n)
+!
+  nf = ifac(2)
+  na = 1
+  l2 = n
+  iw = n
+
+  do k1 = 1, nf
+
+    kh = nf - k1
+    ip = ifac(kh+3)
+    l1 = l2 / ip
+    ido = n / l2
+    idl1 = ido * l1
+    iw = iw - ( ip - 1 ) * ido
+    na = 1 - na
+
+    if ( ip == 4 ) then
+
+      ix2 = iw + ido
+      ix3 = ix2 + ido
+
+      if ( na == 0 ) then
+        call radf4 ( ido, l1, c, ch, wa(iw), wa(ix2), wa(ix3) )
+      else
+        call radf4 ( ido, l1, ch, c, wa(iw), wa(ix2), wa(ix3) )
+      end if
+
+    else if ( ip == 2 ) then
+
+      if ( na == 0 ) then
+        call radf2 ( ido, l1, c, ch, wa(iw) )
+      else
+        call radf2 ( ido, l1, ch, c, wa(iw) )
+      end if
+
+    else if ( ip == 3 ) then
+
+      ix2 = iw + ido
+
+      if ( na == 0 ) then
+        call radf3 ( ido, l1, c, ch, wa(iw), wa(ix2) )
+      else
+        call radf3 ( ido, l1, ch, c, wa(iw), wa(ix2) )
+      end if
+
+    else if ( ip == 5 ) then
+
+      ix2 = iw + ido
+      ix3 = ix2 + ido
+      ix4 = ix3 + ido
+
+      if ( na == 0 ) then
+        call radf5 ( ido, l1, c, ch, wa(iw), wa(ix2), wa(ix3), wa(ix4) )
+      else
+        call radf5 ( ido, l1, ch, c, wa(iw), wa(ix2), wa(ix3), wa(ix4) )
+      end if
+
+    else
+
+      if ( ido == 1 ) then
+        na = 1 - na
+      end if
+
+      if ( na == 0 ) then
+        call radfg ( ido, ip, l1, idl1, c, c, c, ch, ch, wa(iw) )
+        na = 1
+      else
+        call radfg ( ido, ip, l1, idl1, ch, ch, ch, c, c, wa(iw) )
+        na = 0
+      end if
+
+    end if
+
+    l2 = l1
+
+  end do
+
+  if ( na /= 1 ) then
+    c(1:n) = ch(1:n)
+  end if
+
+  return
+end
+subroutine rffti ( n, wsave )
+!
+!*******************************************************************************
+!
+!! RFFTI initializes WSAVE, used in RFFTF and RFFTB.
+!
+!
+!  Discussion:
+!
+!    The prime factorization of N together with a tabulation of the
+!    trigonometric functions are computed and stored in WSAVE.
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.
+!
+!    Output, real WSAVE(2*N+15), contains data, dependent on the value
+!    of N, which is necessary for the RFFTF and RFFTB routines.
+!
+  integer n
+!
+  real wsave(2*n+15)
+!
+  if ( n <= 1 ) then
+    return
+  end if
+
+  call rffti1 ( n, wsave(n+1), wsave(2*n+1) )
+
+  return
+end
+subroutine rffti1 ( n, wa, ifac )
+!
+!*******************************************************************************
+!
+!! RFFTI1 is a lower level routine used by RFFTI.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.
+!
+!    Input, real WA(N).
+!
+!    Input, integer IFAC(15).
+!    IFAC(1) = N, the number that was factored.
+!    IFAC(2) = NF, the number of factors.
+!    IFAC(3:2+NF), the factors.
+!
+  integer n
+!
+  real arg
+  real argh
+  real argld
+  real fi
+  integer i
+  integer ib
+  integer ido
+  integer ifac(15)
+  integer ii
+  integer ip
+  integer is
+  integer j
+  integer k1
+  integer l1
+  integer l2
+  integer ld
+  integer nf
+  real pimach
+  real wa(n)
+!
+  call i_factor ( n, ifac )
+
+  nf = ifac(2)
+
+  argh = 2.0E+00 * pimach() / real ( n )
+  is = 0
+  l1 = 1
+
+  do k1 = 1, nf-1
+
+    ip = ifac(k1+2)
+    ld = 0
+    l2 = l1 * ip
+    ido = n / l2
+
+    do j = 1, ip-1
+
+      ld = ld + l1
+      i = is
+      argld = real ( ld ) * argh
+      fi = 0.0E+00
+
+      do ii = 3, ido, 2
+        i = i + 2
+        fi = fi + 1.0E+00
+        arg = fi * argld
+        wa(i-1) = cos ( arg )
+        wa(i) = sin ( arg )
+      end do
+
+      is = is + ido
+
+    end do
+
+    l1 = l2
+
+  end do
+
+  return
+end
+function rnor ( )
+!
+!*******************************************************************************
+!
+!! RNOR generates normal random numbers.
+!
+!
+!  Description:
+!
+!    RNOR generates normal random numbers with zero mean and
+!    unit standard deviation, often denoted n(0,1).
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    Marsaglia and Tsang,
+!    A fast, easily implemented method for sampling from decreasing or
+!      symmetric unimodal density functions,
+!    SIAM Journal of Scientific and Statistical Computing, 1983.
+!
+!   use
+!       first time....
+!                   z = rstart(iseed)
+!                     here iseed is any  n o n - z e r o  integer.
+!                     this causes initialization of the program.
+!                     rstart returns a real (single precision) echo of iseed.
+!
+!       subsequent times...
+!                   z = rnor()
+!                     causes the next real (single precision) random number
+!                           to be returned as z.
+!
+!                 typical usage
+!
+!                    real rstart,rnor,z
+!                    integer iseed,i
+!                    iseed = 305
+!                    z = rstart(iseed)
+!                    do i = 1,10
+!                       z = rnor()
+!                       write(*,*) z
+!                    end do
+!                  end
+!
+!
+  real, parameter :: aa = 12.37586
+  real, parameter :: b = 0.4878992
+  real, parameter :: c = 12.67706
+  real, save :: c1 = 0.9689279
+  real, save :: c2 = 1.301198
+  integer ia
+  integer ib
+  integer ic
+  integer id
+  integer, save :: ii = 17
+  integer iii
+  integer iseed
+  integer j
+  integer, save :: jj = 5
+  integer jjj
+  real, save :: pc = 0.01958303
+  real rnor
+  real rstart
+  real s
+  real t
+  real, save, dimension ( 17 ) :: u
+  real un
+  real v(65)
+  real vni
+  real x
+  real, save :: xn = 2.776994
+  real y
+!
+  data v/ .3409450, .4573146, .5397793, .6062427, .6631691 &
+     , .7136975, .7596125, .8020356, .8417227, .8792102, .9148948 &
+     , .9490791, .9820005, 1.0138492, 1.0447810, 1.0749254, 1.1043917 &
+     ,1.1332738, 1.1616530, 1.1896010, 1.2171815, 1.2444516, 1.2714635 &
+     ,1.2982650, 1.3249008, 1.3514125, 1.3778399, 1.4042211, 1.4305929 &
+     ,1.4569915, 1.4834526, 1.5100121, 1.5367061, 1.5635712, 1.5906454 &
+     ,1.6179680, 1.6455802, 1.6735255, 1.7018503, 1.7306045, 1.7598422 &
+     ,1.7896223, 1.8200099, 1.8510770, 1.8829044, 1.9155830, 1.9492166 &
+     ,1.9839239, 2.0198430, 2.0571356, 2.0959930, 2.1366450, 2.1793713 &
+     ,2.2245175, 2.2725185, 2.3239338, 2.3795007, 2.4402218, 2.5075117 &
+     ,2.5834658, 2.6713916, 2.7769943, 2.7769943, 2.7769943, 2.7769943/
+!
+!  Load data array in case user forgets to initialize.
+!  This array is the result of calling uni 100000 times with seed 305.
+!
+  data u/ &
+     0.8668672834288,  0.3697986366357,  0.8008968294805, &
+     0.4173889774680,  0.8254561579836,  0.9640965269077, &
+     0.4508667414265,  0.6451309529668,  0.1645456024730, &
+     0.2787901807898,  0.06761531340295, 0.9663226330820, &
+     0.01963343943798, 0.02947398211399, 0.1636231515294, &
+     0.3976343250467,  0.2631008574685/
+!
+!  fast part...
+!
+!  basic generator is fibonacci
+!
+  un = u(ii)-u(jj)
+  if ( un<0.0) un = un+1.
+  u(ii) = un
+!
+!  u(ii) and un are uniform on [0,1)
+!  vni is uniform on [-1,1)
+!
+  vni = un + un -1.
+  ii = ii-1
+  if ( ii==0)ii = 17
+  jj = jj-1
+  if ( jj==0)jj = 17
+!        int(un(ii)*128) in range [0,127],  j is in range [1,64]
+  j = mod(int(u(ii)*128),64)+1
+!
+!        pick sign as vni is positive or negative
+!
+  rnor = vni*v(j+1)
+  if ( abs(rnor)<=v(j))return
+!
+! slow part; aa is a*f(0)
+!
+  x = (abs(rnor)-v(j))/(v(j+1)-v(j))
+!
+!          y is uniform on [0,1)
+!
+  y = u(ii)-u(jj)
+  if ( y<0.0) y = y+1.
+  u(ii) = y
+  ii = ii-1
+  if ( ii==0)ii = 17
+  jj = jj-1
+  if ( jj==0)jj = 17
+
+  s = x+y
+  if ( s>c2)go to 11
+  if ( s<=c1)return
+  if ( y>c-aa*exp(-.5*(b-b*x)**2))go to 11
+  if ( exp(-.5*v(j+1)**2)+y*pc/v(j+1)<=exp(-.5*rnor**2))return
+!
+! tail part; .3601016 is 1./xn
+!       y is uniform on [0,1)
+!
+   22 y = u(ii)-u(jj)
+  if ( y<=0.0) y = y+1.
+  u(ii) = y
+  ii = ii-1
+  if ( ii==0)ii = 17
+  jj = jj-1
+  if ( jj==0)jj = 17
+
+  x = 0.3601016*log(y)
+!
+!       y is uniform on [0,1)
+!
+  y = u(ii)-u(jj)
+  if ( y<=0.0) y = y+1.
+  u(ii) = y
+  ii = ii-1
+  if ( ii==0)ii = 17
+  jj = jj-1
+  if ( jj==0)jj = 17
+  if (  -2.*log(y)<=x**2 )go to 22
+  rnor = sign(xn-x,rnor)
+  return
+   11 rnor = sign(b-b*x,rnor)
+  return
+!
+!  fill
+!
+  entry rstart(iseed)
+  if ( iseed/=0) then
+!
+!  generate random bit pattern in array based on given seed
+!
+    ii = 17
+    jj = 5
+    ia = mod(abs(iseed),32707)
+    ib = 1111
+    ic = 1947
+    do iii = 1,17
+      s = 0.0E+00
+      t = .50
+!
+!             do for each of the bits of mantissa of word
+!             loop  over 64 bits, enough for all known machines
+!                   in single precision
+!
+      do jjj = 1,64
+
+        id = ic-ia
+        if ( id < 0 ) then
+          id = id+32707
+          s = s+t
+        end if
+
+        ia = ib
+        ib = ic
+        ic = id
+        t = .5*t
+
+      end do
+
+      u(iii) = s
+
+    end do
+
+  end if
+!
+!  return floating echo of iseed.
+!
+  rstart = iseed
+  return
+end
+subroutine rsftb ( n, r, azero, a, b )
+!
+!*******************************************************************************
+!
+!! RSFTB computes a "slow" backward Fourier transform of real data.
+!
+!
+!  Modified:
+!
+!    13 March 2001
+!
+!  Author:
+!
+!    John Burkardt
+!
+!  Parameters:
+!
+!    Input, integer N, the number of data values.
+!
+!    Output, real R(N), the reconstructed data sequence.
+!
+!    Input, real AZERO, the constant Fourier coefficient.
+!
+!    Input, real A(N/2), B(N/2), the Fourier coefficients.
+!
+  integer n
+!
+  real a(n/2)
+  real azero
+  real b(n/2)
+  integer i
+  integer k
+  real, parameter :: pi = 3.14159265358979323846264338327950288419716939937510E+00
+  real r(n)
+  real theta
+!
+  r(1:n) = azero
+  do i = 1, n
+    do k = 1, n/2
+      theta = real ( k * ( i - 1 ) * 2 ) * pi / real ( n )
+      r(i) = r(i) + a(k) * cos ( theta ) + b(k) * sin ( theta )
+    end do
+  end do
+
+  return
+end
+subroutine rsftf ( n, r, azero, a, b )
+!
+!*******************************************************************************
+!
+!! RSFTF computes a "slow" forward Fourier transform of real data.
+!
+!
+!  Modified:
+!
+!    13 March 2001
+!
+!  Parameters:
+!
+!    Input, integer N, the number of data values.
+!
+!    Input, real R(N), the data to be transformed.
+!
+!    Output, real AZERO, = sum ( 1 <= I <= N ) R(I) / N.
+!
+!    Output, real A(N/2), B(N/2), the Fourier coefficients.
+!
+  integer n
+!
+  real a(1:n/2)
+  real azero
+  real b(1:n/2)
+  integer i
+  integer j
+  real, parameter :: pi = 3.14159265358979323846264338327950288419716939937510E+00
+  real r(n)
+  real theta
+!
+  azero = sum ( r(1:n) ) / real ( n )
+
+  do i = 1, n / 2
+
+    a(i) = 0.0E+00
+    b(i) = 0.0E+00
+
+    do j = 1, n
+      theta = real ( 2 * i * ( j - 1 ) ) * pi / real ( n )
+      a(i) = a(i) + r(j) * cos ( theta )
+      b(i) = b(i) + r(j) * sin ( theta )
+    end do
+
+    a(i) = a(i) / real ( n )
+    b(i) = b(i) / real ( n )
+
+    if ( i /= ( n / 2 ) ) then
+      a(i) = 2.0E+00 * a(i)
+      b(i) = 2.0E+00 * b(i)
+    end if
+
+  end do
+
+  return
+end
+function runge ( x )
+!
+!*******************************************************************************
+!
+!! RUNGE evaluates Runge's function.
+!
+!
+!  Modified:
+!
+!    11 November 1999
+!
+!  Formula:
+!
+!    RUNGE(X) = 1 / ( 1 + 25 * X**2 )
+!
+!  Discussion:
+!
+!    Runge's function is a common test case for interpolation
+!    and approximation, over the interval [-1,1].
+!
+!  Parameters:
+!
+!    Input, real X, the argument of Runge's function.
+!
+!    Output, real RUNGE, the value of Runge's function.
+!
+  real runge
+  real x
+!
+  runge = 1.0E+00 / ( 1.0E+00 + 25.0E+00 * x**2 )
+
+  return
+end
+subroutine rvec_random ( alo, ahi, n, a )
+!
+!*******************************************************************************
+!
+!! RVEC_RANDOM returns a random real vector in a given range.
+!
+!
+!  Modified:
+!
+!    04 February 2001
+!
+!  Author:
+!
+!    John Burkardt
+!
+!  Parameters:
+!
+!    Input, real ALO, AHI, the range allowed for the entries.
+!
+!    Input, integer N, the number of entries in the vector.
+!
+!    Output, real A(N), the vector of randomly chosen values.
+!
+  integer n
+!
+  real a(n)
+  real ahi
+  real alo
+  integer i
+!
+  do i = 1, n
+    call r_random ( alo, ahi, a(i) )
+  end do
+
+  return
+end
+subroutine rvec_reverse ( n, a )
+!
+!*******************************************************************************
+!
+!! RVEC_REVERSE reverses the elements of a real vector.
+!
+!
+!  Example:
+!
+!    Input:
+!
+!      N = 5, A = ( 11.0, 12.0, 13.0, 14.0, 15.0 ).
+!
+!    Output:
+!
+!      A = ( 15.0, 14.0, 13.0, 12.0, 11.0 ).
+!
+!  Modified:
+!
+!    06 October 1998
+!
+!  Author:
+!
+!    John Burkardt
+!
+!  Parameters:
+!
+!    Input, integer N, the number of entries in the array.
+!
+!    Input/output, real A(N), the array to be reversed.
+!
+  integer n
+!
+  real a(n)
+  integer i
+!
+  do i = 1, n/2
+    call r_swap ( a(i), a(n+1-i) )
+  end do
+
+  return
+end
+function samax ( n, x, incx )
+!
+!*******************************************************************************
+!
+!! SAMAX returns the maximum absolute value of the entries in a vector.
+!
+!
+!  Modified:
+!
+!    08 April 1999
+!
+!  Parameters:
+!
+!    Input, integer N, the number of entries in the vector.
+!
+!    Input, real X(*), the vector to be examined.
+!
+!    Input, integer INCX, the increment between successive entries of X.
+!
+!    Output, real SAMAX, the maximum absolute value of an element of X.
+!
+  integer i
+  integer incx
+  integer ix
+  integer n
+  real samax
+  real x(*)
+!
+  if ( n <= 0 ) then
+
+    samax = 0.0E+00
+
+  else if ( n == 1 ) then
+
+    samax = abs ( x(1) )
+
+  else if ( incx == 1 ) then
+
+    samax = abs ( x(1) )
+
+    do i = 2, n
+      if ( abs ( x(i) ) > samax ) then
+        samax = abs ( x(i) )
+      end if
+    end do
+
+  else
+
+    if ( incx >= 0 ) then
+      ix = 1
+    else
+      ix = ( - n + 1 ) * incx + 1
+    end if
+
+    samax = abs ( x(ix) )
+    ix = ix + incx
+
+    do i = 2, n
+      if ( abs ( x(ix) ) > samax ) then
+        samax = abs ( x(ix) )
+      end if
+      ix = ix + incx
+    end do
+
+  end if
+
+  return
+end
+function sasum ( n, x, incx )
+!
+!*******************************************************************************
+!
+!! SASUM sums the absolute values of the entries of a vector.
+!
+!
+!  Modified:
+!
+!    08 April 1999
+!
+!  Reference:
+!
+!    Lawson, Hanson, Kincaid, Krogh,
+!    Basic Linear Algebra Subprograms for Fortran Usage,
+!    Algorithm 539,
+!    ACM Transactions on Mathematical Software,
+!    Volume 5, Number 3, September 1979, pages 308-323.
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  Parameters:
+!
+!    Input, integer N, the number of entries in the vector.
+!
+!    Input, real X(*), the vector to be examined.
+!
+!    Input, integer INCX, the increment between successive entries of X.
+!
+!    Output, real SASUM, the sum of the absolute values of the vector.
+!
+  integer i
+  integer incx
+  integer ix
+  integer m
+  integer n
+  real sasum
+  real stemp
+  real x(*)
+!
+  stemp = 0.0E+00
+
+  if ( n <= 0 ) then
+
+  else if ( incx == 1 ) then
+
+    m = mod ( n, 6 )
+
+    do i = 1, m
+      stemp = stemp + abs ( x(i) )
+    end do
+
+    do i = m+1, n, 6
+      stemp = stemp + abs ( x(i)   ) + abs ( x(i+1) ) + abs ( x(i+2) ) &
+                    + abs ( x(i+3) ) + abs ( x(i+4) ) + abs ( x(i+5) )
+    end do
+
+  else
+
+    if ( incx >= 0 ) then
+      ix = 1
+    else
+      ix = ( - n + 1 ) * incx + 1
+    end if
+
+    do i = 1, n
+      stemp = stemp + abs ( x(ix) )
+      ix = ix + incx
+    end do
+
+  end if
+
+  sasum = stemp
+
+  return
+end
+subroutine saxpy ( n, sa, x, incx, y, incy )
+!
+!*******************************************************************************
+!
+!! SAXPY adds a constant times one vector to another.
+!
+!
+!  Modified:
+!
+!    08 April 1999
+!
+!  Reference:
+!
+!    Lawson, Hanson, Kincaid, Krogh,
+!    Basic Linear Algebra Subprograms for Fortran Usage,
+!    Algorithm 539,
+!    ACM Transactions on Mathematical Software,
+!    Volume 5, Number 3, September 1979, pages 308-323.
+!
+!  Parameters:
+!
+!    Input, integer N, the number of entries in the vector.
+!
+!    Input, real SA, the multiplier.
+!
+!    Input, real X(*), the vector to be scaled and added to Y.
+!
+!    Input, integer INCX, the increment between successive entries of X.
+!
+!    Input/output, real Y(*), the vector to which a multiple of X is to
+!    be added.
+!
+!    Input, integer INCY, the increment between successive entries of Y.
+!
+  integer i
+  integer incx
+  integer incy
+  integer ix
+  integer iy
+  integer n
+  real sa
+  real x(*)
+  real y(*)
+!
+  if ( n <= 0 ) then
+
+  else if ( sa == 0.0E+00 ) then
+
+  else if ( incx == 1 .and. incy == 1 ) then
+
+    y(1:n) = y(1:n) + sa * x(1:n)
+
+  else
+
+    if ( incx >= 0 ) then
+      ix = 1
+    else
+      ix = ( - n + 1 ) * incx + 1
+    end if
+
+    if ( incy >= 0 ) then
+      iy = 1
+    else
+      iy = ( - n + 1 ) * incy + 1
+    end if
+
+    do i = 1, n
+      y(iy) = y(iy) + sa * x(ix)
+      ix = ix + incx
+      iy = iy + incy
+    end do
+
+  end if
+
+  return
+end
+subroutine sdcor (dfdy,el,fa,h,impl,ipvt,matdim,miter,ml,mu,n, &
+  nde,nq,t,users,y,yh,ywt,evalfa,save1,save2,a,d,jstate)
+!
+!*******************************************************************************
+!
+!! SDCOR computes corrections to the y array of SDRIV3.
+!
+!
+!  in the case of functional iteration, update y directly from the
+!  result of the last call to f.
+!  in the case of the chord method, compute the corrector error and
+!  solve the linear system with that as right hand side and dfdy as
+!  coefficient matrix, using the lu decomposition if miter is 1, 2, 4,
+!  or 5.
+!
+  integer matdim
+  integer n
+!
+  real a(matdim,*)
+  real d
+  real dfdy(matdim,*)
+  real el(13,12)
+  logical evalfa
+  real h
+  integer i
+  integer i1
+  integer i2
+  integer i3
+  integer iflag
+  integer impl
+  integer ipvt(*)
+  integer j
+  integer jstate
+  integer miter
+  integer ml
+  integer mu
+  integer mw
+  integer nde
+  integer nq
+  real save1(*)
+  real save2(*)
+  real snrm2
+  real t
+  real y(*)
+  real yh(n,*)
+  real ywt(*)
+!
+  external fa
+  external users
+!
+  if (miter == 0) then
+
+    save1(1:n) = (h*save2(1:n) - yh(1:n,2) - save1(1:n))/ywt(1:n)
+
+    d = snrm2(n, save1, 1)/sqrt(real(n))
+
+    save1(1:n) = h * save2(1:n) - yh(1:n,2)
+
+  else if (miter == 1 .or. miter == 2) then
+
+    if (impl == 0) then
+
+      save2(1:n) = h * save2(1:n) - yh(1:n,2) - save1(1:n)
+
+    else if (impl == 1) then
+
+      if (evalfa) then
+        call fa (n, t, y, a, matdim, ml, mu, nde)
+        if (n == 0) then
+          jstate = 9
+          return
+        end if
+      else
+        evalfa = .true.
+      end if
+
+      save2(1:n) = h * save2(1:n)
+
+      do j = 1,n
+        save2(1:n) = save2(1:n) - a(1:n,j)*(yh(j,2) + save1(j))
+      end do
+
+    else if (impl == 2) then
+
+      if (evalfa) then
+        call fa (n, t, y, a, matdim, ml, mu, nde)
+        if (n == 0) then
+          jstate = 9
+          return
+        end if
+      else
+        evalfa = .true.
+      end if
+
+!!!      save2(1:n) = h*save2(1:n) - a(1:n,1)*(yh(i,2) + save1(1:n))
+      save2(1:n) = h*save2(1:n) - a(1:n,1)*(yh(1,2) + save1(1:n))
+
+    end if
+
+    call sgesl (dfdy, matdim, n, ipvt, save2, 0)
+
+    save1(1:n) = save1(1:n) + save2(1:n)
+    save2(1:n) = save2(1:n)/ywt(1:n)
+
+    d = snrm2(n, save2, 1) / sqrt(real(n))
+
+  else if (miter == 4 .or. miter == 5) then
+
+    if (impl == 0) then
+
+      save2(1:n) = h * save2(1:n) - yh(1:n,2) - save1(1:n)
+
+    else if (impl == 1) then
+      if (evalfa) then
+        call fa (n, t, y, a(ml+1,1), matdim, ml, mu, nde)
+        if (n == 0) then
+          jstate = 9
+          return
+        end if
+      else
+        evalfa = .true.
+      end if
+
+      save2(1:n) = h * save2(1:n)
+
+      mw = ml + 1 + mu
+
+      do j = 1,n
+        i1 = max(ml+1, mw+1-j)
+        i2 = min(mw+n-j, mw+ml)
+        do i = i1,i2
+          i3 = i + j - mw
+          save2(i3) = save2(i3) - a(i,j)*(yh(j,2) + save1(j))
+        end do
+      end do
+
+    else if (impl == 2) then
+
+      if (evalfa) then
+        call fa (n, t, y, a, matdim, ml, mu, nde)
+        if (n == 0) then
+          jstate = 9
+          return
+        end if
+      else
+        evalfa = .true.
+      end if
+
+      save2(1:n) = h * save2(1:n) - a(1:n,1)*(yh(1:n,2) + save1(1:n))
+
+    end if
+
+    call sgbsl (dfdy, matdim, n, ml, mu, ipvt, save2, 0)
+
+    save1(1:n) = save1(1:n) + save2(1:n)
+    save2(1:n) = save2(1:n)/ywt(1:n)
+
+    d = snrm2(n, save2, 1)/sqrt(real(n))
+
+  else if (miter == 3) then
+
+    iflag = 2
+
+    call users (y, yh(1,2), ywt, save1, save2, t, h, el(1,nq), impl, &
+      n, nde, iflag)
+
+    if (n == 0) then
+      jstate = 10
+      return
+    end if
+
+    save1(1:n) = save1(1:n) + save2(1:n)
+    save2(1:n) = save2(1:n) / ywt(1:n)
+
+    d = snrm2(n, save2, 1) / sqrt(real(n))
+
+  end if
+end
+subroutine sdcst ( maxord, mint, iswflg, el, tq )
+!
+!*******************************************************************************
+!
+!! SDCST sets coefficients used by the core integrator SDSTP.
+!
+!
+!  the array el determines the basic method.
+!  the array tq is involved in adjusting the step size in relation
+!  to truncation error.  el and tq depend upon mint, and are calculated
+!  for orders 1 to maxord(<= 12).  for each order nq, the coefficients
+!  el are calculated from the generating polynomial:
+!    l(t) = el(1,nq) + el(2,nq)*t + ... + el(nq+1,nq)*t**nq.
+!  for the implicit adams methods, l(t) is given by
+!    dl/dt = (1+t)*(2+t)* ... *(nq-1+t)/k,   l(-1) = 0,
+!    where      k = factorial(nq-1).
+!  for the gear methods,
+!    l(t) = (1+t)*(2+t)* ... *(nq+t)/k,
+!    where      k = factorial(nq)*(1 + 1/2 + ... + 1/nq).
+!  for each order nq, there are three components of tq.
+!
+  real el(13,12)
+  real factrl(12)
+  real gamma(14)
+  integer i
+  integer iswflg
+  integer j
+  integer maxord
+  integer mint
+  integer mxrd
+  real sum
+  real tq(3,12)
+!
+  factrl(1) = 1.0E+00
+  do i = 2, maxord
+    factrl(i) = real(i)*factrl(i-1)
+  end do
+!
+!  compute adams coefficients
+!
+  if (mint == 1) then
+
+    gamma(1) = 1.0E+00
+    do i = 1,maxord+1
+      sum = 0.0E+00
+      do j = 1,i
+        sum = sum - gamma(j)/real(i-j+2)
+      end do
+      gamma(i+1) = sum
+    end do
+
+    el(1,1) = 1.0E+00
+    el(2,1) = 1.0E+00
+    el(2,2) = 1.0E+00
+    el(3,2) = 1.0E+00
+
+    do j = 3,maxord
+      el(2,j) = factrl(j-1)
+      do i = 3,j
+        el(i,j) = real(j-1)*el(i,j-1) + el(i-1,j-1)
+      end do
+      el(j+1,j) = 1.0E+00
+    end do
+
+    do j = 2, maxord
+      el(1,j) = el(1,j-1) + gamma(j)
+      el(2,j) = 1.0E+00
+      do i = 3,j+1
+        el(i,j) = el(i,j)/(real(i-1)*factrl(j-1))
+      end do
+    end do
+
+    do j = 1,maxord
+      tq(1,j) = -1.0E+00 / (factrl(j)*gamma(j))
+      tq(2,j) = -1.0E+00 / gamma(j+1)
+      tq(3,j) = -1.0E+00 / gamma(j+2)
+    end do
+!
+!  compute gear coefficients
+!
+  else if (mint == 2) then
+
+    el(1,1) = 1.0E+00
+    el(2,1) = 1.0E+00
+    do j = 2,maxord
+      el(1,j) = factrl(j)
+      do i = 2,j
+        el(i,j) = real(j)*el(i,j-1) + el(i-1,j-1)
+      end do
+      el(j+1,j) = 1.0E+00
+    end do
+
+    sum = 1.0E+00
+    do j = 2,maxord
+      sum = sum + 1.0/real(j)
+      do i = 1, j+1
+        el(i,j) = el(i,j)/(factrl(j)*sum)
+      end do
+    end do
+
+    do j = 1,maxord
+      if (j > 1) tq(1,j) = 1.0/factrl(j-1)
+      tq(2,j) = real(j+1)/el(1,j)
+      tq(3,j) = real(j+2)/el(1,j)
+    end do
+
+  end if
+!
+!  compute constants used in the stiffness test.
+!  these are the ratio of tq(2,nq) for the gear
+!  methods to those for the adams methods.
+!
+  if (iswflg == 3) then
+    mxrd = min(maxord, 5)
+    if (mint == 2) then
+      gamma(1) = 1.0E+00
+      do i = 1,mxrd
+        sum = 0.0E+00
+        do j = 1,i
+          sum = sum - gamma(j)/real(i-j+2)
+        end do
+        gamma(i+1) = sum
+      end do
+    end if
+
+    sum = 1.0E+00
+    do i = 2,mxrd
+      sum = sum + 1.0/real(i)
+      el(1+i,1) = -real(i+1)*sum*gamma(i+1)
+    end do
+
+  end if
+end
+subroutine sdntl(eps,f,fa,hmax,hold,impl,jtask,matdim,maxord, &
+  mint,miter,ml,mu,n,nde,save1,t,uround,users,y,ywt,h,mntold, &
+  mtrold,nfe,rc,yh,a,convrg,el,fac,ier,ipvt,nq,nwait,rh,rmax, &
+  save2,tq,trend,iswflg,jstate)
+!
+!*******************************************************************************
+!
+!! SDNTL sets parameters for SDSTP.
+!
+!
+!  SDNTL is called on the first call to sdstp, on an internal restart, or
+!  when the user has altered mint, miter, and/or h.
+!
+!  on the first call, the order is set to 1 and the initial derivatives
+!  are calculated.  rmax is the maximum ratio by which h can be
+!  increased in one step.  it is initially rminit to compensate
+!  for the small initial h, but then is normally equal to rmnorm.
+!  if a failure occurs (in corrector convergence or error test), rmax
+!  is set at rmfail for the next increase.
+!  if the caller has changed mint, or if jtask = 0, sdcst is called
+!  to set the coefficients of the method.  if the caller has changed h,
+!  yh must be rescaled.  if h or mint has been changed, nwait is
+!  reset to nq + 2 to prevent further increases in h for that many
+!  steps.  also, rc is reset.  rc is the ratio of new to old values of
+!  the coefficient l(0)*h.  if the caller has changed miter, rc is
+!  set to 0 to force the partials to be updated, if partials are used.
+!
+  integer matdim
+  integer n
+!
+  real a(matdim,*)
+  logical convrg
+  real el(13,12)
+  real eps
+  real fac(*)
+  real h
+  real hmax
+  real hold
+  integer i
+  logical ier
+  integer iflag
+  integer impl
+  integer info
+  integer ipvt(*)
+  integer iswflg
+  integer jstate
+  integer jtask
+  integer maxord
+  integer mint
+  integer miter
+  integer ml
+  integer mntold
+  integer mtrold
+  integer mu
+  integer nde
+  integer nfe
+  integer nq
+  integer nwait
+  real oldl0
+  real rc
+  real rh
+  real rmax
+  real, parameter :: rminit = 10000.0E+00
+  real save1(*)
+  real save2(*)
+  real smax
+  real smin
+  real snrm2
+  real sum
+  real sum0
+  real t
+  real tq(3,12)
+  real trend
+  real uround
+  real y(*)
+  real yh(n,*)
+  real ywt(*)
+!
+  external f
+  external fa
+  external users
+!
+  ier = .false.
+  if (jtask >= 0) then
+    if (jtask == 0) then
+      call sdcst (maxord, mint, iswflg,  el, tq)
+      rmax = rminit
+    end if
+    rc = 0.0E+00
+    convrg = .false.
+    trend = 1.0E+00
+    nq = 1
+    nwait = 3
+
+    call f ( n, t, y, save2 )
+
+    if (n == 0) then
+      jstate = 6
+      return
+    end if
+
+    nfe = nfe + 1
+
+    if (impl /= 0) then
+      if (miter == 3) then
+        iflag = 0
+        call users (y, yh, ywt, save1, save2, t, h, el, impl, n, nde, iflag)
+        if (n == 0) then
+          jstate = 10
+          return
+        end if
+      else if (impl == 1) then
+        if (miter == 1 .or. miter == 2) then
+          call fa (n, t, y, a, matdim, ml, mu, nde)
+          if (n == 0) then
+            jstate = 9
+            return
+          end if
+          call sgefa (a, matdim, n, ipvt, info)
+          if (info /= 0) then
+            ier = .true.
+            return
+          end if
+          call sgesl (a, matdim, n, ipvt, save2, 0)
+        else if (miter == 4 .or. miter == 5) then
+          call fa (n, t, y, a(ml+1,1), matdim, ml, mu, nde)
+          if (n == 0) then
+            jstate = 9
+            return
+          end if
+          call sgbfa (a, matdim, n, ml, mu, ipvt, info)
+          if (info /= 0) then
+            ier = .true.
+            return
+          end if
+          call sgbsl (a, matdim, n, ml, mu, ipvt, save2, 0)
+        end if
+
+      else if (impl == 2) then
+
+        call fa (n, t, y, a, matdim, ml, mu, nde)
+        if (n == 0) then
+          jstate = 9
+          return
+        end if
+
+        do i = 1, nde
+
+          if (a(i,1) == 0.0) then
+            ier = .true.
+            return
+          else
+            save2(i) = save2(i)/a(i,1)
+          end if
+
+        end do
+
+        do i = nde+1,n
+          a(i,1) = 0.0E+00
+        end do
+
+      end if
+
+    end if
+
+    do i = 1,nde
+      save1(i) = save2(i)/ywt(i)
+    end do
+
+    sum = snrm2(nde, save1, 1)
+    sum0 = 1.0E+00 / max(1.0, abs(t))
+    smax = max(sum0, sum)
+    smin = min(sum0, sum)
+    sum = smax*sqrt(1.0E+00 + (smin/smax)**2)/sqrt(real(nde))
+    h = sign(min(2.0*eps/sum, abs(h)), h)
+    yh(1:n,2) = h * save2(1:n)
+
+    if (miter == 2 .or. miter == 5 .or. iswflg == 3) then
+      do i = 1,n
+        fac(i) = sqrt(uround)
+      end do
+    end if
+
+  else
+
+    if (miter /= mtrold) then
+      mtrold = miter
+      rc = 0.0E+00
+      convrg = .false.
+    end if
+
+    if (mint /= mntold) then
+      mntold = mint
+      oldl0 = el(1,nq)
+      call sdcst (maxord, mint, iswflg,  el, tq)
+      rc = rc*el(1,nq)/oldl0
+      nwait = nq + 2
+    end if
+
+    if (h /= hold) then
+      nwait = nq + 2
+      rh = h/hold
+      call sdscl (hmax, n, nq, rmax,  hold, rc, rh, yh)
+    end if
+
+  end if
+
+  return
+end
+subroutine sdntp(h,k,n,nq,t,tout,yh,y)
+!
+!*******************************************************************************
+!
+!! SDNTP interpolates the k-th derivative of y at tout,
+!   using the data in the yh array.  if k has a value greater than nq,
+!   the nq-th derivative is calculated.
+!
+  integer n
+!
+  real factor
+  real h
+  integer i
+  integer j
+  integer jj
+  integer k
+  integer kk
+  integer kused
+  integer nq
+  real r
+  real t
+  real tout
+  real y(*)
+  real yh(n,*)
+!
+    r = ( tout - t ) / h
+
+  if (k == 0) then
+
+    y(1:n) = yh(1:n,nq+1)
+
+!!!    r = ( tout - t ) / h
+
+    do jj = 1, nq
+      j = nq + 1 - jj
+      y(1:n) = yh(1:n,j) + r*y(1:n)
+    end do
+
+  else
+
+    kused = min(k, nq)
+    factor = 1.0E+00
+    do kk = 1,kused
+      factor = factor*real(nq+1-kk)
+    end do
+
+    y(1:n) = factor * yh(1:n,nq+1)
+
+    do jj = kused+1,nq
+
+      j = k + 1 + nq - jj
+      factor = 1.0E+00
+
+      do kk = 1,kused
+        factor = factor*real(j-kk)
+      end do
+
+      y(1:n) = factor * yh(1:n,j) + r * y(1:n)
+
+    end do
+
+    y(1:n) = y(1:n) * h**(-kused)
+
+  end if
+end
+function sdot ( n, x, incx, y, incy )
+!
+!*******************************************************************************
+!
+!! SDOT forms the dot product of two vectors.
+!
+!
+!  Modified:
+!
+!    02 June 2000
+!
+!  Reference:
+!
+!    Lawson, Hanson, Kincaid, Krogh,
+!    Basic Linear Algebra Subprograms for Fortran Usage,
+!    Algorithm 539,
+!    ACM Transactions on Mathematical Software,
+!    Volume 5, Number 3, September 1979, pages 308-323.
+!
+!  Parameters:
+!
+!    Input, integer N, the number of entries in the vectors.
+!
+!    Input, real X(*), one of the vectors to be multiplied.
+!
+!    Input, integer INCX, the increment between successive entries of X.
+!
+!    Input, real Y(*), one of the vectors to be multiplied.
+!
+!    Input, integer INCY, the increment between successive elements of Y.
+!
+!    Output, real SDOT, the dot product of X and Y.
+!
+  integer i
+  integer incx
+  integer incy
+  integer ix
+  integer iy
+  integer n
+  real sdot
+  real stemp
+  real x(*)
+  real y(*)
+!
+  if ( n <= 0 ) then
+
+    sdot = 0.0E+00
+
+  else if ( incx == 1 .and. incy == 1 ) then
+
+    sdot = dot_product ( x(1:n), y(1:n) )
+
+  else
+
+    if ( incx >= 0 ) then
+      ix = 1
+    else
+      ix = ( - n + 1 ) * incx + 1
+    end if
+
+    if ( incy >= 0 ) then
+      iy = 1
+    else
+      iy = ( - n + 1 ) * incy + 1
+    end if
+
+    stemp = 0.0E+00
+    do i = 1, n
+      stemp = stemp + x(ix) * y(iy)
+      ix = ix + incx
+      iy = iy + incy
+    end do
+
+    sdot = stemp
+
+  end if
+
+  return
+end
+subroutine sdpsc(ksgn,n,nq,yh)
+!
+!*******************************************************************************
+!
+!! SDPSC computes the predicted yh values by effectively
+!     multiplying the yh array by the pascal triangle matrix when ksgn
+!     is +1, and performs the inverse function when ksgn is -1.
+!
+  integer n
+!
+  integer i
+  integer j
+  integer j1
+  integer j2
+  integer ksgn
+  integer nq
+  real yh(n,*)
+!
+  if ( ksgn > 0 ) then
+
+    do j1 = 1, nq
+      do j2 = j1, nq
+        j = nq - j2 + j1
+        do i = 1, n
+          yh(i,j) = yh(i,j) + yh(i,j+1)
+        end do
+      end do
+    end do
+
+  else
+
+    do j1 = 1, nq
+      do j2 = j1, nq
+        j = nq - j2 + j1
+        do i = 1, n
+          yh(i,j) = yh(i,j) - yh(i,j+1)
+        end do
+      end do
+    end do
+  end if
+
+  return
+end
+subroutine sdpst (el,f,fa,h,impl,jacobn,matdim,miter,ml,mu,n,nde, &
+  nq,save2,t,users,y,yh,ywt,uround,nfe,nje,a,dfdy,fac,ier,ipvt, &
+  save1,iswflg,bnd,jstate)
+!
+!*******************************************************************************
+!
+!! SDPST is called to reevaluate the partials.
+!
+!
+!  if miter is 1, 2, 4, or 5, the matrix
+!  p = i - l(0)*h*jacobian is stored in dfdy and subjected to lu
+!  decomposition, with the results also stored in dfdy.
+!
+  integer matdim
+  integer n
+!
+  real a(matdim,*)
+  real bl
+  real bnd
+  real bp
+  real br
+  real bu
+  real dfdy(matdim,*)
+  real dfdymx
+  real diff
+  real dy
+  real el(13,12)
+  real fac(*)
+  real facmin
+  real, parameter :: facmax = 0.5E+00
+  real factor
+  real h
+  integer i
+  integer i1
+  integer i2
+  integer i3
+  logical ier
+  integer iflag
+  integer imax
+  integer impl
+  integer info
+  integer ipvt(*)
+  integer iswflg
+  integer j
+  integer j2
+  integer jstate
+  integer k
+  integer miter
+  integer ml
+  integer mu
+  integer mw
+  integer nde
+  integer nfe
+  integer nje
+  integer nq
+  real save1(*)
+  real save2(*)
+  real scale
+  real snrm2
+  real t
+  real uround
+  real y(*)
+  real yh(n,*)
+  real yj
+  real ys
+  real ywt(*)
+!
+  external f
+  external fa
+  external jacobn
+  external users
+!
+  nje = nje + 1
+  ier = .false.
+  if (miter == 1 .or. miter == 2) then
+    if (miter == 1) then
+      call jacobn (n, t, y, dfdy, matdim, ml, mu)
+      if (n == 0) then
+        jstate = 8
+        return
+      end if
+      if (iswflg == 3) bnd = snrm2(n*n, dfdy, 1)
+      factor = -el(1,nq)*h
+
+      do j = 1,n
+        do i = 1,n
+          dfdy(i,j) = factor*dfdy(i,j)
+        end do
+      end do
+
+    else if (miter == 2) then
+      br = uround**(.875)
+      bl = uround**(.75)
+      bu = uround**(.25)
+      bp = uround**(-.15)
+      facmin = uround**(.78)
+
+      do j = 1,n
+
+        ys = max(abs(ywt(j)), abs(y(j)))
+ 120        dy = fac(j)*ys
+
+        if (dy == 0.0) then
+          if (fac(j) < facmax) then
+            fac(j) = min(100.0*fac(j), facmax)
+            go to 120
+          else
+            dy = ys
+          end if
+        end if
+
+        if (nq == 1) then
+          dy = sign(dy, save2(j))
+        else
+          dy = sign(dy, yh(j,3))
+        end if
+
+        dy = (y(j) + dy) - y(j)
+        yj = y(j)
+        y(j) = y(j) + dy
+        call f (n, t, y, save1)
+
+        if (n == 0) then
+          jstate = 6
+          return
+        end if
+
+        y(j) = yj
+        factor = -el(1,nq)*h/dy
+        dfdy(1:n,j) = ( save1(1:n) - save2(1:n) ) * factor
+        diff = abs(save2(1) - save1(1))
+        imax = 1
+
+        do i = 2,n
+          if (abs(save2(i) - save1(i)) > diff) then
+            imax = i
+            diff = abs(save2(i) - save1(i))
+          end if
+        end do
+!                                                                 step 2
+        if (min(abs(save2(imax)), abs(save1(imax))) > 0.0) then
+          scale = max(abs(save2(imax)), abs(save1(imax)))
+!                                                                 step 3
+          if (diff > bu*scale) then
+            fac(j) = max(facmin, fac(j)*0.1)
+          else if (br*scale <= diff .and. diff <= bl*scale) then
+            fac(j) = min(fac(j)*10.0, facmax)
+!                                                                 step 4
+          else if (diff < br*scale) then
+            fac(j) = min(bp*fac(j), facmax)
+          end if
+        end if
+
+      end do
+
+      if (iswflg == 3) bnd = snrm2(n*n, dfdy, 1)/(-el(1,nq)*h)
+      nfe = nfe + n
+    end if
+
+    if (impl == 0) then
+
+      do i = 1,n
+        dfdy(i,i) = dfdy(i,i) + 1.0E+00
+      end do
+
+    else if (impl == 1) then
+
+      call fa (n, t, y, a, matdim, ml, mu, nde)
+
+      if (n == 0) then
+        jstate = 9
+        return
+      end if
+
+      do j = 1,n
+        do i = 1,n
+          dfdy(i,j) = dfdy(i,j) + a(i,j)
+        end do
+      end do
+
+    else if (impl == 2) then
+
+      call fa (n, t, y, a, matdim, ml, mu, nde)
+
+      if (n == 0) then
+        jstate = 9
+        return
+      end if
+
+      do i = 1,nde
+        dfdy(i,i) = dfdy(i,i) + a(i,1)
+      end do
+    end if
+
+    call sgefa (dfdy, matdim, n, ipvt, info)
+    if (info /= 0) ier = .true.
+
+  else if (miter == 4 .or. miter == 5) then
+
+    if (miter == 4) then
+
+      call jacobn (n, t, y, dfdy(ml+1,1), matdim, ml, mu)
+
+      if (n == 0) then
+        jstate = 8
+        return
+      end if
+
+      factor = -el(1,nq)*h
+      mw = ml + mu + 1
+
+      do j = 1,n
+        i1 = max(ml+1, mw+1-j)
+        i2 = min(mw+n-j, mw+ml)
+        do i = i1,i2
+          dfdy(i,j) = factor*dfdy(i,j)
+        end do
+      end do
+
+    else if (miter == 5) then
+
+      br = uround**(.875)
+      bl = uround**(.75)
+      bu = uround**(.25)
+      bp = uround**(-.15)
+      facmin = uround**(.78)
+      mw = ml + mu + 1
+      j2 = min(mw, n)
+
+      do j = 1,j2
+
+        do k = j,n,mw
+
+          ys = max(abs(ywt(k)), abs(y(k)))
+
+ 280      continue
+
+          dy = fac(k)*ys
+
+          if (dy == 0.0) then
+            if (fac(k) < facmax) then
+              fac(k) = min(100.0*fac(k), facmax)
+              go to 280
+            else
+              dy = ys
+            end if
+          end if
+
+          if (nq == 1) then
+            dy = sign(dy, save2(k))
+          else
+            dy = sign(dy, yh(k,3))
+          end if
+          dy = (y(k) + dy) - y(k)
+          dfdy(mw,k) = y(k)
+          y(k) = y(k) + dy
+
+        end do
+
+        call f (n, t, y, save1)
+
+        if (n == 0) then
+          jstate = 6
+          return
+        end if
+
+        do k = j,n,mw
+
+          y(k) = dfdy(mw,k)
+          ys = max(abs(ywt(k)), abs(y(k)))
+          dy = fac(k)*ys
+          if (dy == 0.0) dy = ys
+          if (nq == 1) then
+            dy = sign(dy, save2(k))
+          else
+            dy = sign(dy, yh(k,3))
+          end if
+          dy = (y(k) + dy) - y(k)
+          factor = -el(1,nq)*h/dy
+          i1 = max(ml+1, mw+1-k)
+          i2 = min(mw+n-k, mw+ml)
+          do i = i1,i2
+            i3 = k + i - mw
+            dfdy(i,k) = factor*(save1(i3) - save2(i3))
+          end do
+
+          imax = max(1, k - mu)
+          diff = abs(save2(imax) - save1(imax))
+          i1 = imax
+          i2 = min(k + ml, n)
+
+          do i = i1+1,i2
+            if (abs(save2(i) - save1(i)) > diff) then
+              imax = i
+              diff = abs(save2(i) - save1(i))
+            end if
+          end do
+
+          if (min(abs(save2(imax)), abs(save1(imax))) >0.0) then
+
+            scale = max(abs(save2(imax)), abs(save1(imax)))
+
+            if (diff > bu*scale) then
+              fac(k) = max(facmin, fac(k)*.1)
+            else if (br*scale <=diff .and. diff <=bl*scale) then
+              fac(k) = min(fac(k)*10.0, facmax)
+            else if (diff < br*scale) then
+              fac(k) = min(bp*fac(k), facmax)
+            end if
+
+          end if
+
+        end do
+
+      end do
+
+      nfe = nfe + j2
+
+    end if
+
+    if (iswflg == 3) then
+
+      dfdymx = 0.0E+00
+
+      do j = 1,n
+        i1 = max(ml+1, mw+1-j)
+        i2 = min(mw+n-j, mw+ml)
+        do i = i1,i2
+          dfdymx = max(dfdymx, abs(dfdy(i,j)))
+        end do
+      end do
+
+      bnd = 0.0E+00
+      if (dfdymx /= 0.0) then
+        do j = 1,n
+          i1 = max(ml+1, mw+1-j)
+          i2 = min(mw+n-j, mw+ml)
+          do i = i1,i2
+                bnd = bnd + (dfdy(i,j)/dfdymx)**2
+          end do
+        end do
+        bnd = dfdymx*sqrt(bnd)/(-el(1,nq)*h)
+      end if
+
+    end if
+
+    if (impl == 0) then
+
+      dfdy(mw,1:n) = dfdy(mw,1:n) + 1.0E+00
+
+    else if (impl == 1) then
+
+      call fa (n, t, y, a(ml+1,1), matdim, ml, mu, nde)
+
+      if (n == 0) then
+        jstate = 9
+        return
+      end if
+
+      do j = 1,n
+        i1 = max(ml+1, mw+1-j)
+        i2 = min(mw+n-j, mw+ml)
+        do i = i1,i2
+          dfdy(i,j) = dfdy(i,j) + a(i,j)
+        end do
+      end do
+
+    else if (impl == 2) then
+
+      call fa (n, t, y, a, matdim, ml, mu, nde)
+
+      if (n == 0) then
+        jstate = 9
+        return
+      end if
+
+      do j = 1,nde
+        dfdy(mw,j) =  dfdy(mw,j) + a(j,1)
+      end do
+
+    end if
+
+    call sgbfa (dfdy, matdim, n, ml, mu, ipvt, info)
+    if (info /= 0) ier = .true.
+
+  else if (miter == 3) then
+
+    iflag = 1
+    call users ( y, yh(1,2), ywt, save1, save2, t, h, el(1,nq), impl, n, &
+      nde, iflag)
+
+    if (n == 0) then
+      jstate = 10
+      return
+    end if
+
+  end if
+
+  return
+end
+subroutine sdriv1 (n,t,y,tout,mstate,eps,work,lenw)
+!
+!*******************************************************************************
+!
+!! SDRIV1 solves ordinary differential equations of the form
+!            dy(i)/dt = f(y(i),t), given the initial conditions
+!            y(i) = yi.  sdriv1 uses single precision arithmetic.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!  i.  choosing the correct routine
+!
+!     sdriv
+!     ddriv
+!     cdriv
+!           these are the generic names for three packages for solving
+!           initial value problems for ordinary differential equations.
+!           sdriv uses single precision arithmetic.  ddriv uses double
+!           precision arithmetic.  cdriv allows complex-valued
+!           differential equations, integrated with respect to a single,
+!           real, independent variable.
+!
+!    as an aid in selecting the proper program, the following is a
+!    discussion of the important options or restrictions associated with
+!    each program:
+!
+!      a. sdriv1 should be tried first for those routine problems with
+!         no more than 200 differential equations.  internally this
+!         routine has two important technical defaults:
+!           1. numerical approximation of the jacobian matrix of the
+!              right hand side is used.
+!           2. the stiff solver option is used.
+!         most users of sdriv1 should not have to concern themselves
+!         with these details.
+!
+!      b. sdriv2 should be considered for those problems for which
+!         sdriv1 is inadequate (sdriv2 has no explicit restriction on
+!         the number of differential equations.)  for example, sdriv1
+!         may have difficulty with problems having zero initial
+!         conditions and zero derivatives.  in this case sdriv2, with an
+!         appropriate value of the parameter ewt, should perform more
+!         efficiently.  sdriv2 provides three important additional
+!         options:
+!           1. the nonstiff equation solver (as well as the stiff
+!              solver) is available.
+!           2. the root-finding option is available.
+!           3. the program can dynamically select either the non-stiff
+!              or the stiff methods.
+!         internally this routine also defaults to the numerical
+!         approximation of the jacobian matrix of the right hand side.
+!
+!      c. sdriv3 is the most flexible, and hence the most complex, of
+!         the programs.  its important additional features include:
+!           1. the ability to exploit band structure in the jacobian
+!              matrix.
+!           2. the ability to solve some implicit differential
+!              equations, i.e., those having the form:
+!                   a(y,t)*dy/dt = f(y,t).
+!           3. the option of integrating in the one step mode.
+!           4. the option of allowing the user to provide a routine
+!              which computes the analytic jacobian matrix of the right
+!              hand side.
+!           5. the option of allowing the user to provide a routine
+!              which does all the matrix algebra associated with
+!              corrections to the solution components.
+!
+!  ii.  abstract
+!
+!    the function of sdriv1 is to solve n (200 or fewer) ordinary
+!    differential equations of the form dy(i)/dt = f(y(i),t), given the
+!    initial conditions y(i) = yi.  sdriv1 is to be called once for each
+!    output point.
+!
+!  iii.  parameters
+!
+!    the user should use parameter names in the call sequence of sdriv1
+!    for those quantities whose value may be altered by sdriv1.  the
+!    parameters in the call sequence are:
+!
+!    n      = (input) the number of differential equations, n <= 200
+!
+!    t      = the independent variable.  on input for the first call, t
+!             is the initial point.  on output, t is the point at which
+!             the solution is given.
+!
+!    y      = the vector of dependent variables.  y is used as input on
+!             the first call, to set the initial values.  on output, y
+!             is the computed solution vector.  this array y is passed
+!             in the call sequence of the user-provided routine f.  thus
+!             parameters required by f can be stored in this array in
+!             components n+1 and above.  (note: changes by the user to
+!             the first n components of this array will take effect only
+!             after a restart, i.e., after setting mstate to +1(-1).)
+!
+!    tout   = (input) the point at which the solution is desired.
+!
+!    mstate = an integer describing the status of integration.  the user
+!             must initialize mstate to +1 or -1.  if mstate is
+!             positive, the routine will integrate past tout and
+!             interpolate the solution.  this is the most efficient
+!             mode.  if mstate is negative, the routine will adjust its
+!             internal step to reach tout exactly (useful if a
+!             singularity exists beyond tout.)  the meaning of the
+!             magnitude of mstate:
+!               1  (input) means the first call to the routine.  this
+!                  value must be set by the user.  on all subsequent
+!                  calls the value of mstate should be tested by the
+!                  user.  unless sdriv1 is to be reinitialized, only the
+!                  sign of mstate may be changed by the user.  (as a
+!                  convenience to the user who may wish to put out the
+!                  initial conditions, sdriv1 can be called with
+!                  mstate=+1(-1), and tout=t.  in this case the program
+!                  will return with mstate unchanged, i.e.,
+!                  mstate=+1(-1).)
+!               2  (output) means a successful integration.  if a normal
+!                  continuation is desired (i.e., a further integration
+!                  in the same direction), simply advance tout and call
+!                  again.  all other parameters are automatically set.
+!               3  (output)(unsuccessful) means the integrator has taken
+!                  1000 steps without reaching tout.  the user can
+!                  continue the integration by simply calling sdriv1
+!                  again.
+!               4  (output)(unsuccessful) means too much accuracy has
+!                  been requested.  eps has been increased to a value
+!                  the program estimates is appropriate.  the user can
+!                  continue the integration by simply calling sdriv1
+!                  again.
+!               5  (output)(unsuccessful) n has been set to zero in
+!                subroutine f.  see description of f in section iv.
+!
+!    eps    = on input, the requested relative accuracy in all solution
+!             components.  on output, the adjusted relative accuracy if
+!             the input value was too small.  the value of eps should be
+!             set as large as is reasonable, because the amount of work
+!             done by sdriv1 increases as eps decreases.
+!
+!    work
+!    lenw   = (input)
+!             work is an array of lenw real words used
+!             internally for temporary storage.  the user must allocate
+!             space for this array in the calling program by a statement
+!             such as
+!                       real work(...)
+!             the length of work should be at least n*n + 11*n + 225
+!             and lenw should be set to the value used.  the contents of
+!             work should not be disturbed between calls to sdriv1.
+!
+!  long description
+!
+!  iv.  usage
+!
+!                   program sample
+!                   real alfa, eps, t, tout
+!c                                          n is the number of equations
+!                   parameter(alfa = 1.0, n = 3,
+!                  8          lenw = n*n + 11*n + 225)
+!                   real work(lenw), y(n+1)
+!c                                                         initial point
+!                   t = 0.00001
+!c                                                set initial conditions
+!                   y(1) = 10.0E+00
+!                   y(2) = 0.0E+00
+!                   y(3) = 10.0E+00
+!c                                                        pass parameter
+!                   y(4) = alfa
+!                   tout = t
+!                   mstate = 1
+!                   eps = .001
+!              10   call sdriv1 (n, t, y, tout, mstate, eps, work, lenw)
+!                   if (mstate > 2) stop
+!                   write(*, '(4e12.3)') tout, (y(i), i=1,3)
+!                   tout = 10.0*tout
+!                   if (tout < 50.0) go to 10
+!                 end
+!
+!    the user must write a subroutine called f to evaluate the right
+!    hand side of the differential equations.  it is of the form:
+!
+!                 subroutine f (n, t, y, ydot)
+!                   real alfa, t, y(*), ydot(*)
+!                   alfa = y(n+1)
+!                   ydot(1) = 1.0E+00 + alfa*(y(2) - y(1)) - y(1)*y(3)
+!                   ydot(2) = alfa*(y(1) - y(2)) - y(2)*y(3)
+!                   ydot(3) = 1.0E+00 - y(3)*(y(1) + y(2))
+!                 end
+!
+!    this computes ydot = f(y,t), the right hand side of the
+!    differential equations.  here y is a vector of length at least n.
+!    the actual length of y is determined by the user's declaration in
+!    the program which calls sdriv1.  thus the dimensioning of y in f,
+!    while required by fortran convention, does not actually allocate
+!    any storage.  when this subroutine is called, the first n
+!    components of y are intermediate approximations to the solution
+!    components.  the user should not alter these values.  here ydot is
+!    a vector of length n.  the user should only compute ydot(i) for i
+!    from 1 to n.  normally a return from f passes control back to
+!    sdriv1.  however, if the user would like to abort the calculation,
+!    i.e., return control to the program which calls sdriv1, he should
+!    set n to zero.  sdriv1 will signal this by returning a value of
+!    mstate equal to +5(-5).  altering the value of n in f has no effect
+!    on the value of n in the call sequence of sdriv1.
+!
+!  v.  other communication to the user
+!
+!    a. the solver communicates to the user through the parameters
+!       above.  in addition it writes diagnostic messages through the
+!       standard error handling program xerror.  that program will
+!       terminate the user's run if it detects a probable problem setup
+!       error, e.g., insufficient storage allocated by the user for the
+!       work array.  for further information see section iii-a of the
+!       writeup for sdriv3.
+!
+!    b. the number of evaluations of the right hand side can be found
+!       in the work array in the location determined by:
+!            lenw - (n + 21) + 4
+!
+!  references  gear, c. w., "numerical initial value problems in
+!                 ordinary differential equations", prentice-hall, 1971.
+!
+  integer, parameter :: idliw = 21
+  integer, parameter :: mxn = 200
+  integer n
+!
+  real eps
+  real ewt(1)
+  real hmax
+  integer i
+  integer, parameter :: ierror = 2
+  integer ii
+  integer, parameter :: impl = 0
+  integer iwork(idliw+mxn)
+  integer leniw
+  integer lenw
+  integer lenwcm
+  integer lnwchk
+  integer, parameter :: mint = 2
+  integer, parameter :: miter = 2
+  integer ml
+  character msg*103
+  integer mstate
+  real mu
+  integer, parameter :: mxord = 5
+  integer, parameter :: mxstep = 1000
+  integer nde
+  integer, parameter :: nroot = 0
+  integer nstate
+  integer ntask
+  real t
+  real tout
+  real work(*)
+  real y(n)
+!
+  external f
+!
+  ewt(1) = 1.0E+00
+
+  if ( n > mxn ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SDRIV1 - Fatal error!'
+    write ( *, * ) '  The number of equations is too large.'
+    write ( *, * ) '  The number of equations N = ', n
+    write ( *, * ) '  The maximum is MXN = ', mxn
+    stop
+  end if
+
+  if (mstate > 0) then
+    nstate = mstate
+    ntask = 1
+  else
+    nstate = - mstate
+    ntask = 3
+  end if
+
+  hmax = 2.0E+00 * abs ( tout - t )
+  leniw = n + idliw
+  lenwcm = lenw - leniw
+
+  if (lenwcm < (n*n + 10*n + 204)) then
+    lnwchk = n*n + 10*n + 204 + leniw
+    write ( *, * ) ' '
+    write ( *, * ) 'SDRIV1 - Fatal error!'
+    write ( *, * ) '  Insufficient work storage.'
+    write ( *, * ) '  The given work storage is = ', lenwcm
+    write ( *, * ) '  The required work storage is = ', lnwchk
+    stop
+  end if
+
+  if ( nstate /= 1 ) then
+    do i = 1,leniw
+      ii = i + lenwcm
+      iwork(i) = int(work(ii))
+    end do
+  end if
+
+  call sdriv3 (n, t, y, f, nstate, tout, ntask, nroot, eps, ewt, &
+    ierror, mint, miter, impl, ml, mu, mxord, hmax, work, &
+    lenwcm, iwork, leniw, f, f, nde, mxstep, f, f)
+
+  do i = 1, leniw
+    ii = lenwcm + i
+    work(ii) = real(iwork(i))
+  end do
+
+  if ( nstate <= 4 ) then
+    mstate = sign(nstate, mstate)
+  else if (nstate == 6) then
+    mstate = sign(5, mstate)
+  end if
+
+  return
+end
+!     KW******************************  
+subroutine f
+end
+!     KW******************************
+subroutine sdriv2 (n,t,y,f,tout,mstate,nroot,eps,ewt,mint,work,lenw,iwork, &
+  leniw,g)
+!
+!*******************************************************************************
+!
+!! SDRIV2 solves n ordinary differential
+!            equations of the form dy(i)/dt = f(y(i),t), given the
+!            initial conditions y(i) = yi.  the program has options to
+!            allow the solution of both stiff and non-stiff differential
+!            equations.  sdriv2 uses single precision arithmetic.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!
+!  i.  abstract
+!
+!    the function of sdriv2 is to solve n ordinary differential
+!    equations of the form dy(i)/dt = f(y(i),t), given the initial
+!    conditions y(i) = yi.  the program has options to allow the
+!    solution of both stiff and non-stiff differential equations.
+!    sdriv2 is to be called once for each output point of t.
+!
+!  ii.  parameters
+!
+!    the user should use parameter names in the call sequence of sdriv2
+!    for those quantities whose value may be altered by sdriv2.  the
+!    parameters in the call sequence are:
+!
+!    n      = (input) the number of differential equations.
+!
+!    t      = the independent variable.  on input for the first call, t
+!             is the initial point.  on output, t is the point at which
+!             the solution is given.
+!
+!    y      = the vector of dependent variables.  y is used as input on
+!             the first call, to set the initial values.  on output, y
+!             is the computed solution vector.  this array y is passed
+!             in the call sequence of the user-provided routines f and
+!             g.  thus parameters required by f and g can be stored in
+!             this array in components n+1 and above.  (note: changes
+!             by the user to the first n components of this array will
+!             take effect only after a restart, i.e., after setting
+!             mstate to +1(-1).)
+!
+!    f      = a subroutine supplied by the user.  the name must be
+!             declared external in the user's calling program.  this
+!           subroutine is of the form:
+!                 subroutine f (n, t, y, ydot)
+!                   real y(*), ydot(*)
+!                     .
+!                     .
+!                   ydot(1) = ...
+!                     .
+!                     .
+!                   ydot(n) = ...
+!                 end (sample)
+!             this computes ydot = f(y,t), the right hand side of the
+!             differential equations.  here y is a vector of length at
+!             least n.  the actual length of y is determined by the
+!             user's declaration in the program which calls sdriv2.
+!             thus the dimensioning of y in f, while required by fortran
+!             convention, does not actually allocate any storage.  when
+!             this subroutine is called, the first n components of y are
+!             intermediate approximations to the solution components.
+!             the user should not alter these values.  here ydot is a
+!             vector of length n.  the user should only compute ydot(i)
+!             for i from 1 to n.  normally a return from f passes
+!             control back to  sdriv2.  however, if the user would like
+!             to abort the calculation, i.e., return control to the
+!             program which calls sdriv2, he should set n to zero.
+!             sdriv2 will signal this by returning a value of mstate
+!             equal to +6(-6).  altering the value of n in f has no
+!             effect on the value of n in the call sequence of sdriv2.
+!
+!    tout   = (input) the point at which the solution is desired.
+!
+!    mstate = an integer describing the status of integration.  the user
+!             must initialize mstate to +1 or -1.  if mstate is
+!             positive, the routine will integrate past tout and
+!             interpolate the solution.  this is the most efficient
+!             mode.  if mstate is negative, the routine will adjust its
+!             internal step to reach tout exactly (useful if a
+!             singularity exists beyond tout.)  the meaning of the
+!             magnitude of mstate:
+!               1  (input) means the first call to the routine.  this
+!                  value must be set by the user.  on all subsequent
+!                  calls the value of mstate should be tested by the
+!                  user.  unless sdriv2 is to be reinitialized, only the
+!                  sign of mstate may be changed by the user.  (as a
+!                  convenience to the user who may wish to put out the
+!                  initial conditions, sdriv2 can be called with
+!                  mstate=+1(-1), and tout=t.  in this case the program
+!                  will return with mstate unchanged, i.e.,
+!                  mstate=+1(-1).)
+!               2  (output) means a successful integration.  if a normal
+!                  continuation is desired (i.e., a further integration
+!                  in the same direction), simply advance tout and call
+!                  again.  all other parameters are automatically set.
+!               3  (output)(unsuccessful) means the integrator has taken
+!                  1000 steps without reaching tout.  the user can
+!                  continue the integration by simply calling sdriv2
+!                  again.  other than an error in problem setup, the
+!                  most likely cause for this condition is trying to
+!                  integrate a stiff set of equations with the non-stiff
+!                  integrator option. (see description of mint below.)
+!               4  (output)(unsuccessful) means too much accuracy has
+!                  been requested.  eps has been increased to a value
+!                  the program estimates is appropriate.  the user can
+!                  continue the integration by simply calling sdriv2
+!                  again.
+!               5  (output) a root was found at a point less than tout.
+!                  the user can continue the integration toward tout by
+!                  simply calling sdriv2 again.
+!               6  (output)(unsuccessful) n has been set to zero in
+!                subroutine f.
+!               7  (output)(unsuccessful) n has been set to zero in
+!                function g.  see description of g below.
+!
+!    nroot  = (input) the number of equations whose roots are desired.
+!             if nroot is zero, the root search is not active.  this
+!             option is useful for obtaining output at points which are
+!             not known in advance, but depend upon the solution, e.g.,
+!             when some solution component takes on a specified value.
+!             the root search is carried out using the user-written
+!           function g (see description of g below.)  sdriv2 attempts
+!             to find the value of t at which one of the equations
+!             changes sign.  sdriv2 can find at most one root per
+!             equation per internal integration step, and will then
+!             return the solution either at tout or at a root, whichever
+!             occurs first in the direction of integration.  the index
+!             of the equation whose root is being reported is stored in
+!             the sixth element of iwork.
+!             note: nroot is never altered by this program.
+!
+!    eps    = on input, the requested relative accuracy in all solution
+!             components.  eps = 0 is allowed.  on output, the adjusted
+!             relative accuracy if the input value was too small.  the
+!             value of eps should be set as large as is reasonable,
+!             because the amount of work done by sdriv2 increases as
+!             eps decreases.
+!
+!    ewt    = (input) problem zero, i.e., the smallest physically
+!             meaningful value for the solution.  this is used inter-
+!             nally to compute an array ywt(i) = max(abs(y(i)), ewt).
+!             one step error estimates divided by ywt(i) are kept less
+!             than eps.  setting ewt to zero provides pure relative
+!             error control.  however, setting ewt smaller than
+!             necessary can adversely affect the running time.
+!
+!    mint   = (input) the integration method flag.
+!               mint = 1  means the adams methods, and is used for
+!                         non-stiff problems.
+!               mint = 2  means the stiff methods of gear (i.e., the
+!                         backward differentiation formulas), and is
+!                         used for stiff problems.
+!               mint = 3  means the program dynamically selects the
+!                         adams methods when the problem is non-stiff
+!                         and the gear methods when the problem is
+!                         stiff.
+!             mint may not be changed without restarting, i.e., setting
+!             the magnitude of mstate to 1.
+!
+!    work
+!    lenw   = (input)
+!             work is an array of lenw real words used
+!             internally for temporary storage.  the user must allocate
+!             space for this array in the calling program by a statement
+!             such as
+!                       real work(...)
+!             the length of work should be at least
+!               16*n + 2*nroot + 204         if mint is 1, or
+!               n*n + 10*n + 2*nroot + 204   if mint is 2, or
+!               n*n + 17*n + 2*nroot + 204   if mint is 3,
+!             and lenw should be set to the value used.  the contents of
+!             work should not be disturbed between calls to sdriv2.
+!
+!    iwork
+!    leniw  = (input)
+!             iwork is an integer array of length leniw used internally
+!             for temporary storage.  the user must allocate space for
+!             this array in the calling program by a statement such as
+!                       integer iwork(...)
+!             the length of iwork should be at least
+!               21      if mint is 1, or
+!               n+21    if mint is 2 or 3,
+!             and leniw should be set to the value used.  the contents
+!             of iwork should not be disturbed between calls to sdriv2.
+!
+!    g      = a real fortran function supplied by the user
+!             if nroot is not 0.  in this case, the name must be
+!             declared external in the user's calling program.  g is
+!             repeatedly called with different values of iroot to
+!             obtain the value of each of the nroot equations for which
+!             a root is desired.  g is of the form:
+!                   real function g (n, t, y, iroot)
+!                   real y(*)
+!                   go to (10, ...), iroot
+!              10   g = ...
+!                     .
+!                     .
+!                 end (sample)
+!             here, y is a vector of length at least n, whose first n
+!             components are the solution components at the point t.
+!             the user should not alter these values.  the actual length
+!             of y is determined by the user's declaration in the
+!             program which calls sdriv2.  thus the dimensioning of y in
+!             g, while required by fortran convention, does not actually
+!             allocate any storage.  normally a return from g passes
+!             control back to  sdriv2.  however, if the user would like
+!             to abort the calculation, i.e., return control to the
+!             program which calls sdriv2, he should set n to zero.
+!             sdriv2 will signal this by returning a value of mstate
+!             equal to +7(-7).  in this case, the index of the equation
+!             being evaluated is stored in the sixth element of iwork.
+!             altering the value of n in g has no effect on the value of
+!             n in the call sequence of sdriv2.
+!
+!  long description
+!
+!  iii.  other communication to the user
+!
+!    a. the solver communicates to the user through the parameters
+!       above.  in addition it writes diagnostic messages through the
+!       standard error handling program xerror.  that program will
+!       terminate the user's run if it detects a probable problem setup
+!       error, e.g., insufficient storage allocated by the user for the
+!       work array.  messages are written on the standard error message
+!       file.  at installations which have this error handling package
+!       the user should determine the standard error handling file from
+!       the local documentation.  otherwise the short but serviceable
+!       routine, xerror, available with this package, can be used.  that
+!       program writes on logical unit 6 to transmit messages.  a
+!       complete description of xerror is given in the sandia
+!       laboratories report sand78-1189 by r. e. jones.
+!
+!    b. the first three elements of work and the first five elements of
+!       iwork will contain the following statistical data:
+!         avgh     the average step size used.
+!         hused    the step size last used (successfully).
+!         avgord   the average order used.
+!         imxerr   the index of the element of the solution vector that
+!                  contributed most to the last error test.
+!         nqused   the order last used (successfully).
+!         nstep    the number of steps taken since last initialization.
+!         nfe      the number of evaluations of the right hand side.
+!         nje      the number of evaluations of the jacobian matrix.
+!
+!  iv.  remarks
+!
+!    a. on any return from sdriv2 all information necessary to continue
+!       the calculation is contained in the call sequence parameters,
+!       including the work arrays.  thus it is possible to suspend one
+!       problem, integrate another, and then return to the first.
+!
+!    b. if this package is to be used in an overlay situation, the user
+!       must declare in the primary overlay the variables in the call
+!       sequence to sdriv2.
+!
+!    c. when the routine g is not required, difficulties associated with
+!       an unsatisfied external can be avoided by using the name of the
+!       routine which calculates the right hand side of the differential
+!       equations in place of g in the call sequence of sdriv2.
+!
+!  v.  usage
+!
+!               program sample
+!               external f
+!               parameter(mint = 1, nroot = 0, n = ...,
+!              8          lenw = 16*n + 2*nroot + 204, leniw = 21)
+!                                           n is the number of equations
+!               real eps, ewt, t, tout, work(lenw), y(n)
+!               integer iwork(leniw)
+!               open(file='tape6', unit=6, status='new')
+!               t = 0.                           initial point
+!               y(1:n) = ...                     set initial conditions
+!               tout = t
+!               ewt = ...
+!               mstate = 1
+!               eps = ...
+!          20   call sdriv2 (n, t, y, f, tout, mstate, nroot, eps, ewt,
+!              8             mint, work, lenw, iwork, leniw, f)
+!                                          last argument is not the same
+!                                          as f if rootfinding is used.
+!               if (mstate > 2) stop
+!               write(6, 100) tout, (y(i), i=1,n)
+!               tout = tout + 1.
+!               if (tout <= 10.) go to 20
+!          100  format(...)
+!             end (sample)
+!
+!  references  gear, c. w., "numerical initial value problems in
+!                 ordinary differential equations", prentice-hall, 1971.
+!
+  integer n
+!
+  real eps
+  real ewt
+  real ewtcom(1)
+  real g
+  real hmax
+  integer ierror
+  integer, parameter :: impl = 0
+  integer iwork(*)
+  integer leniw
+  integer lenw
+  integer mint
+  integer miter
+  integer ml
+  character msg*81
+  integer mstate
+  integer mu
+  integer mxord
+  integer, parameter :: mxstep = 1000
+  integer nde
+  integer nroot
+  integer nstate
+  integer ntask
+  real t
+  real tout
+  real work(*)
+  real y(n)
+!
+  external f
+  external g
+!
+  if (mint < 1 .or. mint > 3) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SDRIV2 - Fatal error!'
+    write ( *, * ) '  Improper value for the integration method.'
+    write ( *, * ) '  MINT = ', mint
+    write ( *, * ) '  MINT should be between 1 and 3.'
+    stop
+  end if
+
+  if (mstate >= 0) then
+    nstate = mstate
+    ntask = 1
+  else
+    nstate = - mstate
+    ntask = 3
+  end if
+
+  ewtcom(1) = ewt
+
+  if (ewt /= 0.0) then
+    ierror = 3
+  else
+    ierror = 2
+  end if
+
+  if (mint == 1) then
+    miter = 0
+    mxord = 12
+  else if (mint == 2) then
+    miter = 2
+    mxord = 5
+  else if (mint == 3) then
+    miter = 2
+    mxord = 12
+  end if
+
+  hmax = 2.0*abs(tout - t)
+
+  call sdriv3 (n, t, y, f, nstate, tout, ntask, nroot, eps, ewtcom, &
+    ierror, mint, miter, impl, ml, mu, mxord, hmax, work, &
+    lenw, iwork, leniw, f, f, nde, mxstep, g, f)
+
+  if (mstate >= 0) then
+    mstate = nstate
+  else
+    mstate = - nstate
+  end if
+
+  return
+end
+subroutine sdriv3 (n,t,y,f,nstate,tout,ntask,nroot,eps,ewt,ierror, &
+  mint,miter,impl,ml,mu,mxord,hmax,work,lenw,iwork,leniw,jacobn, &
+  fa,nde,mxstep,g,users)
+!
+!*******************************************************************************
+!
+!! SDRIV3 solves n ordinary differential
+!            equations of the form dy(i)/dt = f(y(i),t), given the
+!            initial conditions y(i) = yi.  the program has options to
+!            allow the solution of both stiff and non-stiff differential
+!            equations.  other important options are available.  sdriv3
+!            uses single precision arithmetic.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!
+!  i.  abstract
+!
+!    the primary function of sdriv3 is to solve n ordinary differential
+!    equations of the form dy(i)/dt = f(y(i),t), given the initial
+!    conditions y(i) = yi.  the program has options to allow the
+!    solution of both stiff and non-stiff differential equations.  in
+!    addition, sdriv3 may be used to solve:
+!      1. the initial value problem, a*dy(i)/dt = f(y(i),t), where a is
+!         a non-singular matrix depending on y and t.
+!      2. the hybrid differential/algebraic initial value problem,
+!         a*dy(i)/dt = f(y(i),t), where a is a vector (whose values may
+!         depend upon y and t) some of whose components will be zero
+!         corresponding to those equations which are algebraic rather
+!         than differential.
+!    sdriv3 is to be called once for each output point of t.
+!
+!  ii.  parameters
+!
+!    the user should use parameter names in the call sequence of sdriv3
+!    for those quantities whose value may be altered by sdriv3.  the
+!    parameters in the call sequence are:
+!
+!    n      = (input) the number of dependent functions whose solution
+!             is desired.  n must not be altered during a problem.
+!
+!    t      = the independent variable.  on input for the first call, t
+!             is the initial point.  on output, t is the point at which
+!             the solution is given.
+!
+!    y      = the vector of dependent variables.  y is used as input on
+!             the first call, to set the initial values.  on output, y
+!             is the computed solution vector.  this array y is passed
+!             in the call sequence of the user-provided routines f,
+!             jacobn, fa, users, and g.  thus parameters required by
+!             those routines can be stored in this array in components
+!             n+1 and above.  (note: changes by the user to the first
+!             n components of this array will take effect only after a
+!             restart, i.e., after setting nstate to 1 .)
+!
+!    f      = a subroutine supplied by the user.  the name must be
+!             declared external in the user's calling program.  this
+!           subroutine is of the form:
+!                 subroutine f (n, t, y, ydot)
+!                   real y(*), ydot(*)
+!                     .
+!                     .
+!                   ydot(1) = ...
+!                     .
+!                     .
+!                   ydot(n) = ...
+!                 end (sample)
+!             this computes ydot = f(y,t), the right hand side of the
+!             differential equations.  here y is a vector of length at
+!             least n.  the actual length of y is determined by the
+!             user's declaration in the program which calls sdriv3.
+!             thus the dimensioning of y in f, while required by fortran
+!             convention, does not actually allocate any storage.  when
+!             this subroutine is called, the first n components of y are
+!             intermediate approximations to the solution components.
+!             the user should not alter these values.  here ydot is a
+!             vector of length n.  the user should only compute ydot(i)
+!             for i from 1 to n.  normally a return from f passes
+!             control back to  sdriv3.  however, if the user would like
+!             to abort the calculation, i.e., return control to the
+!             program which calls sdriv3, he should set n to zero.
+!             sdriv3 will signal this by returning a value of nstate
+!             equal to 6 .  altering the value of n in f has no effect
+!             on the value of n in the call sequence of sdriv3.
+!
+!    nstate = an integer describing the status of integration.  the
+!             meaning of nstate is as follows:
+!               1  (input) means the first call to the routine.  this
+!                  value must be set by the user.  on all subsequent
+!                  calls the value of nstate should be tested by the
+!                  user, but must not be altered.  (as a convenience to
+!                  the user who may wish to put out the initial
+!                  conditions, sdriv3 can be called with nstate=1, and
+!                  tout=t.  in this case the program will return with
+!                  nstate unchanged, i.e., nstate=1.)
+!               2  (output) means a successful integration.  if a normal
+!                  continuation is desired (i.e., a further integration
+!                  in the same direction), simply advance tout and call
+!                  again.  all other parameters are automatically set.
+!               3  (output)(unsuccessful) means the integrator has taken
+!                  mxstep steps without reaching tout.  the user can
+!                  continue the integration by simply calling sdriv3
+!                  again.
+!               4  (output)(unsuccessful) means too much accuracy has
+!                  been requested.  eps has been increased to a value
+!                  the program estimates is appropriate.  the user can
+!                  continue the integration by simply calling sdriv3
+!                  again.
+!               5  (output) a root was found at a point less than tout.
+!                  the user can continue the integration toward tout by
+!                  simply calling sdriv3 again.
+!               6  (output)(unsuccessful) n has been set to zero in
+!                subroutine f.
+!               7  (output)(unsuccessful) n has been set to zero in
+!                function g.  see description of g below.
+!               8  (output)(unsuccessful) n has been set to zero in
+!                subroutine jacobn.  see description of jacobn below.
+!               9  (output)(unsuccessful) n has been set to zero in
+!                subroutine fa.  see description of fa below.
+!              10  (output)(unsuccessful) n has been set to zero in
+!                subroutine users.  see description of users below.
+!
+!    tout   = (input) the point at which the solution is desired.  the
+!             position of tout relative to t on the first call
+!             determines the direction of integration.
+!
+!    ntask  = (input) an index specifying the manner of returning the
+!             solution, according to the following:
+!               ntask = 1  means sdriv3 will integrate past tout and
+!                          interpolate the solution.  this is the most
+!                          efficient mode.
+!               ntask = 2  means sdriv3 will return the solution after
+!                          each internal integration step, or at tout,
+!                          whichever comes first.  in the latter case,
+!                          the program integrates exactly to tout.
+!               ntask = 3  means sdriv3 will adjust its internal step to
+!                          reach tout exactly (useful if a singularity
+!                          exists beyond tout.)
+!
+!    nroot  = (input) the number of equations whose roots are desired.
+!             if nroot is zero, the root search is not active.  this
+!             option is useful for obtaining output at points which are
+!             not known in advance, but depend upon the solution, e.g.,
+!             when some solution component takes on a specified value.
+!             the root search is carried out using the user-written
+!             function g (see description of g below.)  sdriv3 attempts
+!             to find the value of t at which one of the equations
+!             changes sign.  sdriv3 can find at most one root per
+!             equation per internal integration step, and will then
+!             return the solution either at tout or at a root, whichever
+!             occurs first in the direction of integration.  the index
+!             of the equation whose root is being reported is stored in
+!             the sixth element of iwork.
+!             note: nroot is never altered by this program.
+!
+!    eps    = on input, the requested relative accuracy in all solution
+!             components.  eps = 0 is allowed.  on output, the adjusted
+!             relative accuracy if the input value was too small.  the
+!             value of eps should be set as large as is reasonable,
+!             because the amount of work done by sdriv3 increases as eps
+!             decreases.
+!
+!    ewt    = (input) problem zero, i.e., the smallest, nonzero,
+!             physically meaningful value for the solution.  (array,
+!             possibly of length one.  see following description of
+!             ierror.)  setting ewt smaller than necessary can adversely
+!             affect the running time.
+!
+!    ierror = (input) error control indicator.  a value of 3 is
+!             suggested for most problems.  other choices and detailed
+!             explanations of ewt and ierror are given below for those
+!             who may need extra flexibility.
+!
+!             these last three input quantities eps, ewt and ierror
+!             control the accuracy of the computed solution.  ewt and
+!             ierror are used internally to compute an array ywt.  one
+!             step error estimates divided by ywt(i) are kept less than
+!             eps in root mean square norm.
+!                 ierror (set by the user) =
+!                 1  means ywt(i) = 1. (absolute error control)
+!                                   ewt is ignored.
+!                 2  means ywt(i) = abs(y(i)),  (relative error control)
+!                                   ewt is ignored.
+!                 3  means ywt(i) = max(abs(y(i)), ewt(1)).
+!                 4  means ywt(i) = max(abs(y(i)), ewt(i)).
+!                    this choice is useful when the solution components
+!                    have differing scales.
+!                 5  means ywt(i) = ewt(i).
+!             if ierror is 3, ewt need only be dimensioned one.
+!             if ierror is 4 or 5, the user must dimension ewt at least
+!             n, and set its values.
+!
+!    mint   = (input) the integration method indicator.
+!               mint = 1  means the adams methods, and is used for
+!                         non-stiff problems.
+!               mint = 2  means the stiff methods of gear (i.e., the
+!                         backward differentiation formulas), and is
+!                         used for stiff problems.
+!               mint = 3  means the program dynamically selects the
+!                         adams methods when the problem is non-stiff
+!                         and the gear methods when the problem is
+!                         stiff.  when using the adams methods, the
+!                         program uses a value of miter=0; when using
+!                         the gear methods, the program uses the value
+!                         of miter provided by the user.  only a value
+!                         of impl = 0 and a value of miter = 1, 2, 4, or
+!                         5 is allowed for this option.  the user may
+!                         not alter the value of mint or miter without
+!                         restarting, i.e., setting nstate to 1.
+!
+!    miter  = (input) the iteration method indicator.
+!               miter = 0  means functional iteration.  this value is
+!                          suggested for non-stiff problems.
+!               miter = 1  means chord method with analytic jacobian.
+!                          in this case, the user supplies subroutine
+!                          jacobn (see description below).
+!               miter = 2  means chord method with jacobian calculated
+!                          internally by finite differences.
+!               miter = 3  means chord method with corrections computed
+!                          by the user-written routine users (see
+!                          description of users below.)  this option
+!                          allows all matrix algebra and storage
+!                          decisions to be made by the user.  when using
+!                          a value of miter = 3, the subroutine fa is
+!                          not required, even if impl is not 0.  for
+!                          further information on using this option, see
+!                          section iv-e below.
+!               miter = 4  means the same as miter = 1 but the a and
+!                          jacobian matrices are assumed to be banded.
+!               miter = 5  means the same as miter = 2 but the a and
+!                          jacobian matrices are assumed to be banded.
+!
+!    impl   = (input) the implicit method indicator.
+!               impl = 0 means solving dy(i)/dt = f(y(i),t).
+!               impl = 1 means solving a*dy(i)/dt = f(y(i),t),
+!                        non-singular a (see description of fa below.)
+!                        only mint = 1 or 2, and miter = 1, 2, 3, 4, or
+!                        5 are allowed for this option.
+!               impl = 2 means solving certain systems of hybrid
+!                        differential/algebraic equations (see
+!                        description of fa below.)  only mint = 2 and
+!                        miter = 1, 2, 3, 4, or 5, are allowed for this
+!                        option.
+!               the value of impl must not be changed during a problem.
+!
+!    ml     = (input) the lower half-bandwidth in the case of a banded
+!             a or jacobian matrix.  (i.e., maximum(r-c) for nonzero
+!             a(r,c).)
+!
+!    mu     = (input) the upper half-bandwidth in the case of a banded
+!             a or jacobian matrix.  (i.e., maximum(c-r).)
+!
+!    mxord  = (input) the maximum order desired. this is <= 12 for
+!             the adams methods and <= 5 for the gear methods.  normal
+!             value is 12 and 5, respectively.  if mint is 3, the
+!             maximum order used will be min(mxord, 12) when using the
+!             adams methods, and min(mxord, 5) when using the gear
+!             methods.  mxord must not be altered during a problem.
+!
+!    hmax   = (input) the maximum magnitude of the step size that will
+!             be used for the problem.  this is useful for ensuring that
+!             important details are not missed.  if this is not the
+!             case, a large value, such as the interval length, is
+!             suggested.
+!
+!    work
+!    lenw   = (input)
+!             work is an array of lenw real words used
+!             internally for temporary storage.  the user must allocate
+!             space for this array in the calling program by a statement
+!             such as
+!                       real work(...)
+!             the following table gives the required minimum value for
+!             the length of work, depending on the value of impl and
+!             miter.  lenw should be set to the value used.  the
+!             contents of work should not be disturbed between calls to
+!             sdriv3.
+!
+!      impl =   0                   1                   2
+!              ---------------------------------------------------------
+! miter =  0   (mxord+4)*n +       not allowed         not allowed
+!              2*nroot + 204
+!
+!         1,2  n*n+(mxord+5)*n     2*n*n+(mxord+5)*n   n*n+(mxord+6)*n
+!              + 2*nroot + 204     + 2*nroot + 204     + 2*nroot + 204
+!
+!          3   (mxord+4)*n +       (mxord+4)*n +       (mxord+4)*n +
+!              2*nroot + 204       2*nroot + 204       2*nroot + 204
+!
+!         4,5  (2*ml+mu)*n +       (4*ml+2*mu)*n +     (2*ml+mu)*n +
+!              (mxord+6)*n +       (mxord+7)*n +       (mxord+7)*n +
+!              2*nroot + 204       2*nroot + 204       2*nroot + 204
+!              ---------------------------------------------------------
+!
+!    iwork
+!    leniw  = (input)
+!             iwork is an integer array of length leniw used internally
+!             for temporary storage.  the user must allocate space for
+!             this array in the calling program by a statement such as
+!                       integer iwork(...)
+!             the length of iwork should be at least
+!               21      if miter is 0 or 3, or
+!               n+21    if miter is 1, 2, 4, or 5, or mint is 3,
+!             and leniw should be set to the value used.  the contents
+!             of iwork should not be disturbed between calls to sdriv3.
+!
+!    jacobn = a subroutine supplied by the user, if miter is 1 or 4.
+!             if this is the case, the name must be declared external in
+!             the user's calling program.  given a system of n
+!             differential equations, it is meaningful to speak about
+!             the partial derivative of the i-th right hand side with
+!             respect to the j-th dependent variable.  in general there
+!             are n*n such quantities.  often however the equations can
+!             be ordered so that the i-th differential equation only
+!             involves dependent variables with index near i, e.g., i+1,
+!             i-2.  such a system is called banded.  if, for all i, the
+!             i-th equation depends on at most the variables
+!               y(i-ml), y(i-ml+1), ... , y(i), y(i+1), ... , y(i+mu)
+!             then we call ml+mu+1 the bandwith of the system.  in a
+!             banded system many of the partial derivatives above are
+!             automatically zero.  for the cases miter = 1, 2, 4, and 5,
+!             some of these partials are needed.  for the cases
+!             miter = 2 and 5 the necessary derivatives are
+!             approximated numerically by sdriv3, and we only ask the
+!             user to tell sdriv3 the value of ml and mu if the system
+!             is banded.  for the cases miter = 1 and 4 the user must
+!             derive these partials algebraically and encode them in
+!           subroutine jacobn.  by computing these derivatives the
+!             user can often save 20-30 per cent of the computing time.
+!             usually, however, the accuracy is not much affected and
+!             most users will probably forego this option.  the optional
+!             user-written subroutine jacobn has the form:
+!                 subroutine jacobn (n, t, y, dfdy, matdim, ml, mu)
+!                   real y(*), dfdy(matdim,*)
+!                     .
+!                     .
+!                     calculate values of dfdy
+!                     .
+!                     .
+!                 end (sample)
+!             here y is a vector of length at least n.  the actual
+!             length of y is determined by the user's declaration in the
+!             program which calls sdriv3.  thus the dimensioning of y in
+!             jacobn, while required by fortran convention, does not
+!             actually allocate any storage.  when this subroutine is
+!             called, the first n components of y are intermediate
+!             approximations to the solution components.  the user
+!             should not alter these values.  if the system is not
+!             banded (miter=1), the partials of the i-th equation with
+!             respect to the j-th dependent function are to be stored in
+!             dfdy(i,j).  thus partials of the i-th equation are stored
+!             in the i-th row of dfdy.  if the system is banded
+!             (miter=4), then the partials of the i-th equation with
+!             respect to y(j) are to be stored in dfdy(k,j), where
+!             k=i-j+mu+1 .  normally a return from jacobn passes control
+!             back to sdriv3.  however, if the user would like to abort
+!             the calculation, i.e., return control to the program which
+!             calls sdriv3, he should set n to zero.  sdriv3 will signal
+!             this by returning a value of nstate equal to +8(-8).
+!             altering the value of n in jacobn has no effect on the
+!             value of n in the call sequence of sdriv3.
+!
+!    fa     = a subroutine supplied by the user if impl is 1 or 2, and
+!             miter is not 3.  if so, the name must be declared external
+!             in the user's calling program.  this subroutine computes
+!             the array a, where a*dy(i)/dt = f(y(i),t).
+!             there are two cases:
+!
+!               impl=1.
+!               subroutine fa is of the form:
+!                 subroutine fa (n, t, y, a, matdim, ml, mu, nde)
+!                   real y(*), a(matdim,*)
+!                     .
+!                     .
+!                     calculate all values of a
+!                     .
+!                     .
+!                 end (sample)
+!               in this case a is assumed to be a nonsingular matrix,
+!               with the same structure as dfdy (see jacobn description
+!               above).  programming considerations prevent complete
+!               generality.  if miter is 1 or 2, a is assumed to be full
+!               and the user must compute and store all values of
+!               a(i,j), i,j=1, ... ,n.  if miter is 4 or 5, a is assumed
+!               to be banded with lower and upper half bandwidth ml and
+!               mu.  the left hand side of the i-th equation is a linear
+!               combination of dy(i-ml)/dt, dy(i-ml+1)/dt, ... ,
+!               dy(i)/dt, ... , dy(i+mu-1)/dt, dy(i+mu)/dt.  thus in the
+!               i-th equation, the coefficient of dy(j)/dt is to be
+!               stored in a(k,j), where k=i-j+mu+1.
+!               note: the array a will be altered between calls to fa.
+!
+!               impl=2.
+!               subroutine fa is of the form:
+!                 subroutine fa (n, t, y, a, matdim, ml, mu, nde)
+!                   real y(*), a(*)
+!                     .
+!                     .
+!                     calculate non-zero values of a(1),...,a(nde)
+!                     .
+!                     .
+!                 end (sample)
+!               in this case it is assumed that the system is ordered by
+!               the user so that the differential equations appear
+!               first, and the algebraic equations appear last.  the
+!               algebraic equations must be written in the form:
+!               0 = f(y(i),t).  when using this option it is up to the
+!               user to provide initial values for the y(i) that satisfy
+!               the algebraic equations as well as possible.  it is
+!               further assumed that a is a vector of length nde.  all
+!               of the components of a, which may depend on t, y(i),
+!               etc., must be set by the user to non-zero values.
+!             here y is a vector of length at least n.  the actual
+!             length of y is determined by the user's declaration in the
+!             program which calls sdriv3.  thus the dimensioning of y in
+!             fa, while required by fortran convention, does not
+!             actually allocate any storage.  when this subroutine is
+!             called, the first n components of y are intermediate
+!             approximations to the solution components.  the user
+!             should not alter these values.  fa is always called
+!             immediately after calling f, with the same values of t
+!             and y.  normally a return from fa passes control back to
+!             sdriv3.  however, if the user would like to abort the
+!             calculation, i.e., return control to the program which
+!             calls sdriv3, he should set n to zero.  sdriv3 will signal
+!             this by returning a value of nstate equal to +9(-9).
+!             altering the value of n in fa has no effect on the value
+!             of n in the call sequence of sdriv3.
+!
+!    nde    = (input) the number of differential equations.  this is
+!             required only for impl = 2, with nde < n.
+!
+!    mxstep = (input) the maximum number of internal steps allowed on
+!             one call to sdriv3.
+!
+!    g      = a real fortran function supplied by the user
+!             if nroot is not 0.  in this case, the name must be
+!             declared external in the user's calling program.  g is
+!             repeatedly called with different values of iroot to obtain
+!             the value of each of the nroot equations for which a root
+!             is desired.  g is of the form:
+!                   real function g (n, t, y, iroot)
+!                   real y(*)
+!                   go to (10, ...), iroot
+!              10   g = ...
+!                     .
+!                     .
+!                 end (sample)
+!             here, y is a vector of length at least n, whose first n
+!             components are the solution components at the point t.
+!             the user should not alter these values.  the actual length
+!             of y is determined by the user's declaration in the
+!             program which calls sdriv3.  thus the dimensioning of y in
+!             g, while required by fortran convention, does not actually
+!             allocate any storage.  normally a return from g passes
+!             control back to  sdriv3.  however, if the user would like
+!             to abort the calculation, i.e., return control to the
+!             program which calls sdriv3, he should set n to zero.
+!             sdriv3 will signal this by returning a value of nstate
+!             equal to +7(-7).  in this case, the index of the equation
+!             being evaluated is stored in the sixth element of iwork.
+!             altering the value of n in g has no effect on the value of
+!             n in the call sequence of sdriv3.
+!
+!    users  = a subroutine supplied by the user, if miter is 3.
+!             if this is the case, the name must be declared external in
+!             the user's calling program.  the routine users is called
+!             by sdriv3 when certain linear systems must be solved.  the
+!             user may choose any method to form, store and solve these
+!             systems in order to obtain the solution result that is
+!             returned to sdriv3.  in particular, this allows sparse
+!             matrix methods to be used.  the call sequence for this
+!             routine is:
+!
+!              subroutine users (y, yh, ywt, save1, save2, t, h, el,
+!               8                  impl, n, nde, iflag)
+!                real y(*), yh(*), ywt(*), save1(*),
+!               8     save2(*), t, h, el
+!
+!             the input variable iflag indicates what action is to be
+!             taken.subroutine users should perform the following
+!             operations, depending on the value of iflag and impl.
+!
+!               iflag = 0
+!                 impl = 0.  users is not called.
+!                 impl = 1 or 2.  solve the system a*x = save2,
+!                   returning the result in save2.  the array save1 can
+!                   be used as a work array.
+!
+!               iflag = 1
+!                 impl = 0.  compute, decompose and store the matrix
+!                   (i - h*el*j), where i is the identity matrix and j
+!                   is the jacobian matrix of the right hand side.  the
+!                   array save1 can be used as a work array.
+!                 impl = 1 or 2. compute, decompose and store the matrix
+!                   (a - h*el*j).  the array save1 can be used as a work
+!                   array.
+!
+!               iflag = 2
+!                 impl = 0.   solve the system
+!                     (i - h*el*j)*x = h*save2 - yh - save1,
+!                   returning the result in save2.
+!                 impl = 1 or 2.  solve the system
+!                   (a - h*el*j)*x = h*save2 - a*(yh + save1)
+!                   returning the result in save2.
+!                 the array save1 should not be altered.
+!             normally a return from users passes control back to
+!             sdriv3.  however, if the user would like to abort the
+!             calculation, i.e., return control to the program which
+!             calls sdriv3, he should set n to zero.  sdriv3 will signal
+!             this by returning a value of nstate equal to +10(-10).
+!             altering the value of n in users has no effect on the
+!             value of n in the call sequence of sdriv3.
+!
+!  long description
+!
+!  iii.  other communication to the user
+!
+!    a. the solver communicates to the user through the parameters
+!       above.  in addition it writes diagnostic messages through the
+!       standard error handling program xerror.  that program will
+!       terminate the user's run if it detects a probable problem setup
+!       error, e.g., insufficient storage allocated by the user for the
+!       work array.  messages are written on the standard error message
+!       file.  at installations which have this error handling package
+!       the user should determine the standard error handling file from
+!       the local documentation.  otherwise the short but serviceable
+!       routine, xerror, available with this package, can be used.  that
+!       program writes on logical unit 6 to transmit messages.  a
+!       complete description of xerror is given in the sandia
+!       laboratories report sand78-1189 by r. e. jones.  following is a
+!       list of possible errors.  unless otherwise noted, all messages
+!       come from sdriv3:
+!
+!        no.  type         message
+!        ---  ----         -------
+!         1   fatal        from sdriv2: the integration method flag has
+!                          an illegal value.
+!         2   warning      the output point is inconsistent with the
+!                          value of ntask and t.
+!         3   warning      number of steps to reach tout exceeds mxstep.
+!         4   recoverable  requested accuracy is too stringent.
+!         5   warning      step size is below the roundoff level.
+!         6   fatal        eps is less than zero.
+!         7   fatal        n is not positive.
+!         8   fatal        insufficient work space provided.
+!         9   fatal        improper value for nstate, mint, miter and/or
+!                          impl.
+!        10   fatal        the iwork array is too small.
+!        11   fatal        the step size has gone to zero.
+!        12   fatal        excessive amount of work.
+!        13   fatal        for impl=1 or 2, the matrix a is singular.
+!        14   fatal        mxord is not positive.
+!        15   fatal        from sdriv1: n is greater than 200.
+!        16   fatal        from sdriv1: the work array is too small.
+!
+!    b. the first three elements of work and the first five elements of
+!       iwork will contain the following statistical data:
+!         avgh     the average step size used.
+!         hused    the step size last used (successfully).
+!         avgord   the average order used.
+!         imxerr   the index of the element of the solution vector that
+!                  contributed most to the last error test.
+!         nqused   the order last used (successfully).
+!         nstep    the number of steps taken since last initialization.
+!         nfe      the number of evaluations of the right hand side.
+!         nje      the number of evaluations of the jacobian matrix.
+!
+!  iv.  remarks
+!
+!    a. other routines used:
+!         sdntp, sdzro, sdstp, sdntl, sdpst, sdcor, sdcst,
+!         sdpsc, and sdscl;
+!         sgefa, sgesl, sgbfa, sgbsl, and snrm2 (from linpack)
+!         r1mach (from the bell laboratories machine constants package)
+!         xerror (from the slatec common math library)
+!       the last seven routines above, not having been written by the
+!       present authors, are not explicitly part of this package.
+!
+!    b. on any return from sdriv3 all information necessary to continue
+!       the calculation is contained in the call sequence parameters,
+!       including the work arrays.  thus it is possible to suspend one
+!       problem, integrate another, and then return to the first.
+!
+!    c. if this package is to be used in an overlay situation, the user
+!       must declare in the primary overlay the variables in the call
+!       sequence to sdriv3.
+!
+!    d. changing parameters during an integration.
+!       the value of nroot, eps, ewt, ierror, mint, miter, or hmax may
+!       be altered by the user between calls to sdriv3.  for example, if
+!       too much accuracy has been requested (the program returns with
+!       nstate = 4 and an increased value of eps) the user may wish to
+!       increase eps further.  in general, prudence is necessary when
+!       making changes in parameters since such changes are not
+!       implemented until the next integration step, which is not
+!       necessarily the next call to sdriv3.  this can happen if the
+!       program has already integrated to a point which is beyond the
+!       new point tout.
+!
+!    e. as the price for complete control of matrix algebra, the sdriv3
+!       users option puts all responsibility for jacobian matrix
+!       evaluation on the user.  it is often useful to approximate
+!       numerically all or part of the jacobian matrix.  however this
+!       must be done carefully.  the fortran sequence below illustrates
+!       the method we recommend.  it can be inserted directly into
+!       subroutine users to approximate jacobian elements in rows i1
+!       to i2 and columns j1 to j2.
+!              real dfdy(n,n), epsj, h, r, r1mach,
+!             8     save1(n), save2(n), t, uround, y(n), yj, ywt(n)
+!              uround = r1mach(4)
+!              epsj = sqrt(uround)
+!              do j = j1,j2
+!                r = epsj*max(abs(ywt(j)), abs(y(j)))
+!                if (r == 0.0) r = ywt(j)
+!                yj = y(j)
+!                y(j) = y(j) + r
+!                call f (n, t, y, save1)
+!                if (n == 0) return
+!                y(j) = yj
+!                do i = i1,i2
+!                  dfdy(i,j) = (save1(i) - save2(i))/r
+!                end do
+!              end do
+!
+!       many problems give rise to structured sparse jacobians, e.g.,
+!       block banded.  it is possible to approximate them with fewer
+!       function evaluations than the above procedure uses; see curtis,
+!       powell and reid, j. inst. maths applics, (1974), vol. 13,
+!       pp. 117-119.
+!
+!    f. when any of the routines jacobn, fa, g, or users, is not
+!       required, difficulties associated with unsatisfied externals can
+!       be avoided by using the name of the routine which calculates the
+!       right hand side of the differential equations in place of the
+!       corresponding name in the call sequence of sdriv3.
+!
+!  references  gear, c. w., "numerical initial value problems in
+!                 ordinary differential equations", prentice-hall, 1971.
+!
+  integer n
+!
+  real ae
+  real big
+  logical convrg
+  real eps
+  real ewt(*)
+  real g
+  real glast
+  real h
+  real hmax
+  real hsign
+  integer i
+  integer ia
+  integer idfdy
+  integer ierror
+  integer ifac
+  integer iflag
+  integer ignow
+  integer impl
+  integer imxerr
+  integer info
+  integer iroot
+  integer isave1
+  integer isave2
+  integer itroot
+  integer iwork(*)
+  integer iywt
+  integer j
+  integer ja
+  integer jaml
+  integer jerror
+  integer jgnow
+  integer jhyp
+  integer jroot
+  integer jsave2
+  integer jstate
+  integer jtroot
+  integer jyh
+  integer jywt
+  integer lenchk
+  integer leniw
+  integer lenw
+  integer liwchk
+  integer matdim
+  integer maxord
+  integer mint
+  integer miter
+  integer ml
+  character msg*205
+  integer mu
+  integer mxord
+  integer mxstep
+  integer nde
+  integer ndecom
+  integer npar
+  integer nroot
+  real, parameter :: nround = 20.0E+00
+  integer nstate
+  integer nstepl
+  integer ntask
+  real re
+  real r1mach
+  real size
+  real snrm2
+  real sum
+  real t
+  real tlast
+  real tout
+  real troot
+  real uround
+  real work(*)
+  real y(*)
+
+  integer, parameter :: iavgh = 1
+  integer, parameter :: ihused = 2
+  integer, parameter :: iavgrd = 3
+  integer, parameter :: iel = 4
+  integer, parameter :: ih = 160
+  integer, parameter :: ihmax = 161
+  integer, parameter :: ihold = 162
+  integer, parameter :: ihsign = 163
+  integer, parameter :: irc = 164
+  integer, parameter :: irmax = 165
+  integer, parameter :: it = 166
+  integer, parameter :: itout = 167
+  integer, parameter :: itq = 168
+  integer, parameter :: itrend = 204
+  integer, parameter :: iyh = 205
+  integer, parameter :: indmxr = 1
+  integer, parameter :: inqusd = 2
+  integer, parameter :: instep = 3
+  integer, parameter :: infe = 4
+  integer, parameter :: inje = 5
+  integer, parameter :: inroot = 6
+  integer, parameter :: icnvrg = 7
+  integer, parameter :: ijroot = 8
+  integer, parameter :: ijtask = 9
+  integer, parameter :: imntld = 10
+  integer, parameter :: imtrld = 11
+  integer, parameter :: inq = 12
+  integer, parameter :: inrtld = 13
+  integer, parameter :: indtrt = 14
+  integer, parameter :: inwait = 15
+  integer, parameter :: imnt = 16
+  integer, parameter :: imtrsv = 17
+  integer, parameter :: imtr = 18
+  integer, parameter :: imxrds = 19
+  integer, parameter :: imxord = 20
+  integer, parameter :: indprt = 21
+  integer, parameter :: indpvt = 22
+!
+  external f, jacobn, fa, g, users
+!
+  npar = n
+  uround = epsilon ( uround )
+
+  if ( nroot /= 0 ) then
+    ae = tiny ( ae )
+    re = uround
+  end if
+
+  if (eps < 0.0) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SDRIV3 - Fatal error!'
+    write ( *, * ) '  Improper value of EPS.'
+    write ( *, * ) '  EPS = ', eps
+    write ( *, * ) '  EPS should be nonnegative.'
+    stop
+  end if
+
+  if (n <= 0) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SDRIV3 - Fatal error!'
+    write ( *, * ) '  Improper value for the number of equations.'
+    write ( *, * ) '  N = ', n
+    write ( *, * ) '  N should be positive.'
+    stop
+  end if
+
+  if (mxord <= 0) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SDRIV3 - Fatal error!'
+    write ( *, * ) '  Improper value for the maximum order.'
+    write ( *, * ) '  MXORD = ', mxord
+    write ( *, * ) '  MXORD should be positive.'
+    stop
+  end if
+
+  if ((mint < 1 .or. mint > 3) .or. (mint == 3 .and. &
+       (miter == 0 .or. miter == 3 .or. impl /= 0)) &
+       .or. (miter < 0 .or. miter > 5) .or. &
+       (impl /= 0 .and. impl /= 1 .and. impl /= 2) .or. &
+       ((impl == 1 .or. impl == 2) .and. miter == 0) .or. &
+       (impl == 2 .and. mint == 1) .or. &
+       (nstate < 1 .or. nstate > 10)) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SDRIV3 - Fatal error!'
+    write ( *, * ) '  Improper value for some input quantity.'
+    write ( *, * ) '  NSTATE/MSTATE/MINT/MITER/IMPL.'
+    stop
+  end if
+
+  if (miter == 0 .or. miter == 3) then
+    liwchk = indpvt - 1
+  else if (miter == 1 .or. miter == 2 .or. miter == 4 .or. miter == 5) then
+    liwchk = indpvt + n - 1
+  end if
+
+  if (leniw < liwchk) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SDRIV3 - Fatal error!'
+    write ( *, * ) '  Insufficient integer storage.'
+    write ( *, * ) '  LENIW = ', leniw
+    write ( *, * ) '  Required = ', liwchk
+    stop
+  end if
+!
+!  Allocate the work array
+!  iyh is the index of yh in work.
+!
+  if (mint == 1 .or. mint == 3) then
+    maxord = min(mxord, 12)
+  else if (mint == 2) then
+    maxord = min(mxord, 5)
+  end if
+  idfdy = iyh + (maxord + 1)*n
+!
+!  idfdy is the index of dfdy
+!
+  if (miter == 0 .or. miter == 3)  then
+    iywt = idfdy
+  else if (miter == 1 .or. miter == 2)  then
+    iywt = idfdy + n*n
+  else if (miter == 4 .or. miter == 5)  then
+    iywt = idfdy + (2*ml + mu + 1)*n
+  end if
+!
+!  iywt is the index of ywt
+!
+  isave1 = iywt + n
+!                                           isave1 is the index of save1
+  isave2 = isave1 + n
+!                                           isave2 is the index of save2
+  ignow = isave2 + n
+!                                             ignow is the index of gnow
+  itroot = ignow + nroot
+!                                           itroot is the index of troot
+  ifac = itroot + nroot
+!                                               ifac is the index of fac
+  if (miter == 2 .or. miter == 5 .or. mint == 3) then
+    ia = ifac + n
+  else
+    ia = ifac
+  end if
+!
+!  ia is the index of a
+!
+  if (impl == 0 .or. miter == 3) then
+    lenchk = ia - 1
+  else if (impl == 1 .and. (miter == 1 .or. miter == 2)) then
+    lenchk = ia - 1 + n*n
+  else if (impl == 1 .and. (miter == 4 .or. miter == 5)) then
+    lenchk = ia - 1 + (2*ml + mu + 1)*n
+  else if (impl == 2 .and. miter /= 3) then
+    lenchk = ia - 1 + n
+  end if
+
+  if (lenw < lenchk) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SDRIV3 - Fatal error!'
+    write ( *, * ) '  Insufficient real storage.'
+    write ( *, * ) '  LENW = ', lenw
+    write ( *, * ) '  Required = ', lenchk
+    stop
+  end if
+
+  if (miter == 0 .or. miter == 3) then
+    matdim = 1
+  else if (miter == 1 .or. miter == 2) then
+    matdim = n
+  else if (miter == 4 .or. miter == 5) then
+    matdim = 2*ml + mu + 1
+  end if
+
+  if (impl == 0 .or. impl == 1) then
+    ndecom = n
+  else if (impl == 2) then
+    ndecom = nde
+  end if
+
+  if (nstate == 1) then
+!                                                  initialize parameters
+    if (mint == 1 .or. mint == 3) then
+      iwork(imxord) = min(mxord, 12)
+    else if (mint == 2) then
+      iwork(imxord) = min(mxord, 5)
+    end if
+    iwork(imxrds) = mxord
+    if (mint == 1 .or. mint == 2) then
+      iwork(imnt) = mint
+      iwork(imtr) = miter
+      iwork(imntld) = mint
+      iwork(imtrld) = miter
+    else if (mint == 3) then
+      iwork(imnt) = 1
+      iwork(imtr) = 0
+      iwork(imntld) = iwork(imnt)
+      iwork(imtrld) = iwork(imtr)
+      iwork(imtrsv) = miter
+    end if
+
+    work(ihmax) = hmax
+    h = (tout - t)*(1.0E+00 - 4.0*uround)
+    h = sign(min(abs(h), hmax), h)
+    work(ih) = h
+    hsign = sign(1.0, h)
+    work(ihsign) = hsign
+    iwork(ijtask) = 0
+    work(iavgh) = 0.0E+00
+    work(ihused) = 0.0E+00
+    work(iavgrd) = 0.0E+00
+    iwork(indmxr) = 0
+    iwork(inqusd) = 0
+    iwork(instep) = 0
+    iwork(infe) = 0
+    iwork(inje) = 0
+    iwork(inroot) = 0
+    work(it) = t
+    iwork(icnvrg) = 0
+    iwork(indprt) = 0
+!
+!  set initial conditions
+!
+    do i = 1,n
+      jyh = i + iyh - 1
+      work(jyh) = y(i)
+    end do
+
+    if (t == tout) return
+    go to 180
+  end if
+!
+!  on a continuation, check that output points have
+!  been or will be overtaken.
+!
+  if (iwork(icnvrg) == 1) then
+    convrg = .true.
+  else
+    convrg = .false.
+  end if
+  t = work(it)
+  h = work(ih)
+  hsign = work(ihsign)
+  if (iwork(ijtask) == 0) go to 180
+!
+!                                   iwork(ijroot) flags unreported
+!                                   roots, and is set to the value of
+!                                   ntask when a root was last selected.
+!                                   it is set to zero when all roots
+!                                   have been reported.  iwork(inroot)
+!                                   contains the index and work(itout)
+!                                   contains the value of the root last
+!                                   selected to be reported.
+!                                   iwork(inrtld) contains the value of
+!                                   nroot and iwork(indtrt) contains
+!                                   the value of itroot when the array
+!                                   of roots was last calculated.
+  if (nroot /= 0) then
+    jroot = iwork(ijroot)
+    if (jroot > 0) then
+!
+!  tout has just been reported.
+!  if troot <= tout, report troot.
+!
+      if (nstate /= 5) then
+
+       if (tout*hsign >= work(itout)*hsign) then
+          troot = work(itout)
+          call sdntp(h, 0, n, iwork(inq), t, troot, work(iyh),  y)
+          t = troot
+          nstate = 5
+          go to 580
+        end if
+!
+!  a root has just been reported.
+!  select the next root.
+!
+      else
+        troot = t
+        iroot = 0
+
+        do i = 1,iwork(inrtld)
+
+          jtroot = iwork(indtrt) + i - 1
+          if (work(jtroot)*hsign <= troot*hsign) then
+!
+!  check for multiple roots.
+!
+            if (work(jtroot) == work(itout) .and. i > iwork(inroot)) then
+              iroot = i
+              troot = work(jtroot)
+              go to 60
+            end if
+
+            if (work(jtroot)*hsign > work(itout)*hsign) then
+              iroot = i
+              troot = work(jtroot)
+            end if
+
+          end if
+
+        end do
+
+ 60     continue
+
+        iwork(inroot) = iroot
+        work(itout) = troot
+        iwork(ijroot) = ntask
+
+        if (ntask == 1) then
+          if (iroot == 0) then
+            iwork(ijroot) = 0
+          else
+            if (tout*hsign >= troot*hsign) then
+              call sdntp(h, 0, n, iwork(inq), t, troot,work(iyh),y)
+              nstate = 5
+              t = troot
+              go to 580
+            end if
+          end if
+        else if (ntask == 2 .or. ntask == 3) then
+!
+!  if there are no more roots, or the
+!  user has altered tout to be less
+!  than a root, set ijroot to zero.
+!
+          if (iroot == 0 .or. (tout*hsign < troot*hsign)) then
+            iwork(ijroot) = 0
+          else
+            call sdntp(h, 0, n, iwork(inq), t, troot, work(iyh), y)
+            nstate = 5
+            t = troot
+            go to 580
+          end if
+
+        end if
+      end if
+    end if
+  end if
+
+  if (ntask == 1) then
+    nstate = 2
+    if (t*hsign >= tout*hsign) then
+      call sdntp (h, 0, n, iwork(inq), t, tout, work(iyh),  y)
+      t = tout
+      go to 580
+    end if
+  else if (ntask == 2) then
+!
+!  Check if TOUT has been reset.
+!
+    if (t*hsign > tout*hsign) then
+      write ( *, * ) ' '
+      write ( *, * ) 'SDRIV3 - Warning!'
+      write ( *, * ) '  The input T was beyond TOUT.'
+      write ( *, * ) '  The solution was obtained by interpolation.'
+      call sdntp (h, 0, n, iwork(inq), t, tout, work(iyh),  y)
+      t = tout
+      nstate = 2
+      go to 580
+    end if
+!
+!  Determine if tout has been overtaken
+!
+    if (abs(tout - t)<=nround*uround*max(abs(t), abs(tout))) then
+      t = tout
+      nstate = 2
+      go to 560
+    end if
+!
+!  if there are no more roots to report, report t.
+!
+    if (nstate == 5) then
+      nstate = 2
+      go to 560
+    end if
+
+    nstate = 2
+!                                                       see if tout will
+!                                                       be overtaken.
+    if ((t + h)*hsign > tout*hsign) then
+      h = tout - t
+      if ((t + h)*hsign > tout*hsign) h = h*(1.0E+00 - 4.0*uround)
+      work(ih) = h
+      if (h == 0.0) go to 670
+      iwork(ijtask) = -1
+    end if
+
+  else if (ntask == 3) then
+
+    nstate = 2
+
+    if (t*hsign > tout*hsign) then
+      write ( *, * ) ' '
+      write ( *, * ) 'SDRIV3 - Warning!'
+      write ( *, * ) '  The input T was beyond TOUT.'
+      write ( *, * ) '  The solution was obtained by interpolation.'
+      call sdntp (h, 0, n, iwork(inq), t, tout, work(iyh),  y)
+      t = tout
+      go to 580
+    end if
+
+    if (abs(tout - t)<=nround*uround*max(abs(t), abs(tout))) then
+      t = tout
+      go to 560
+    end if
+    if ((t + h)*hsign > tout*hsign) then
+      h = tout - t
+      if ((t + h)*hsign > tout*hsign) h = h*(1.0E+00 - 4.0*uround)
+      work(ih) = h
+      if (h == 0.0) go to 670
+      iwork(ijtask) = -1
+    end if
+  end if
+!
+!  implement changes in mint, miter, and/or hmax.
+!
+  if ((mint /= iwork(imntld) .or. miter /= iwork(imtrld)) .and. &
+    mint /= 3 .and. iwork(imntld) /= 3) iwork(ijtask) = -1
+  if (hmax /= work(ihmax)) then
+    h = sign(min(abs(h), hmax), h)
+    if (h /= work(ih)) then
+      iwork(ijtask) = -1
+      work(ih) = h
+    end if
+    work(ihmax) = hmax
+  end if
+!
+ 180  nstepl = iwork(instep)
+
+  do i = 1,n
+    jyh = iyh + i - 1
+    y(i) = work(jyh)
+  end do
+
+  if (nroot /= 0) then
+    do i = 1,nroot
+      jgnow = ignow + i - 1
+      work(jgnow) = g (npar, t, y, i)
+      if (npar == 0) then
+        iwork(inroot) = i
+        nstate = 7
+        return
+      end if
+    end do
+  end if
+
+  if (ierror == 1) then
+    do i = 1,n
+      jywt = i + iywt - 1
+      work(jywt) = 1.0E+00
+    end do
+    go to 410
+  else if (ierror == 5) then
+    do i = 1,n
+      jywt = i + iywt - 1
+      work(jywt) = ewt(i)
+    end do
+    go to 410
+  end if
+!                                       reset ywt array.  looping point.
+ 260  if (ierror == 2) then
+    do i = 1,n
+      if (y(i) == 0.0) go to 290
+      jywt = i + iywt - 1
+      work(jywt) = abs(y(i))
+    end do
+    go to 410
+ 290    if (iwork(ijtask) == 0) then
+      call f (npar, t, y, work(isave2))
+      if (npar == 0) then
+        nstate = 6
+        return
+      end if
+      iwork(infe) = iwork(infe) + 1
+      if (miter == 3 .and. impl /= 0) then
+        iflag = 0
+        call users(y, work(iyh), work(iywt), work(isave1), &
+          work(isave2), t, h, work(iel), impl, npar, ndecom, iflag)
+        if (npar == 0) then
+          nstate = 10
+          return
+        end if
+      else if (impl == 1) then
+        if (miter == 1 .or. miter == 2) then
+          call fa (npar, t, y, work(ia), matdim, ml, mu, ndecom)
+          if (npar == 0) then
+            nstate = 9
+            return
+          end if
+          call sgefa (work(ia), matdim, n, iwork(indpvt), info)
+          if (info /= 0) go to 690
+          call sgesl(work(ia),matdim,n,iwork(indpvt),work(isave2),0)
+        else if (miter == 4 .or. miter == 5) then
+          jaml = ia + ml
+          call fa (npar, t, y, work(jaml), matdim, ml, mu, ndecom)
+          if (npar == 0) then
+            nstate = 9
+            return
+          end if
+          call sgbfa (work(ia),matdim,n,ml,mu,iwork(indpvt),info)
+          if (info /= 0) go to 690
+          call sgbsl (work(ia), matdim, n, ml, mu, iwork(indpvt), &
+            work(isave2), 0)
+
+        end if
+
+      else if (impl == 2) then
+
+        call fa (npar, t, y, work(ia), matdim, ml, mu, ndecom)
+        if (npar == 0) then
+          nstate = 9
+          return
+        end if
+
+        do i = 1,ndecom
+          ja = i + ia - 1
+          jsave2 = i + isave2 - 1
+          if (work(ja) == 0.0) go to 690
+          work(jsave2) = work(jsave2)/work(ja)
+        end do
+
+      end if
+
+    end if
+
+    do j = i,n
+
+      jywt = j + iywt - 1
+
+      if (y(j) /= 0.0) then
+        work(jywt) = abs(y(j))
+      else
+        if (iwork(ijtask) == 0) then
+          jsave2 = j + isave2 - 1
+          work(jywt) = abs(h*work(jsave2))
+        else
+          jhyp = j + iyh + n - 1
+          work(jywt) = abs(work(jhyp))
+        end if
+      end if
+
+      if (work(jywt) == 0.0) work(jywt) = uround
+
+    end do
+
+  else if (ierror == 3) then
+
+    do i = 1,n
+      jywt = i + iywt - 1
+      work(jywt) = max(ewt(1), abs(y(i)))
+    end do
+
+  else if (ierror == 4) then
+
+    do i = 1,n
+      jywt = i + iywt - 1
+      work(jywt) = max(ewt(i), abs(y(i)))
+    end do
+
+  end if
+
+ 410  continue
+
+  do i = 1,n
+    jywt = i + iywt - 1
+    jsave2 = i + isave2 - 1
+    work(jsave2) = y(i)/work(jywt)
+  end do
+
+  sum = snrm2(n, work(isave2), 1)/sqrt(real(n))
+
+  if (eps < sum*uround) then
+    eps = sum*uround*(1.0E+00 + 10.0*uround)
+    write ( *, * ) ' '
+    write ( *, * ) 'SDRIV3 - Warning!'
+    write ( *, * ) '  The requested accuracy EPS was not obtainable.'
+    write ( *, * ) '  EPS has been increased to ', eps
+    nstate = 4
+    go to 560
+  end if
+
+  if (abs(h) >= uround*abs(t)) then
+    iwork(indprt) = 0
+  else if (iwork(indprt) == 0) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SDRIV3 - Warning!'
+    write ( *, * ) '  The stepsize is smaller than roundoff.'
+    write ( *, * ) '  This may occur when there is an abrupt change'
+    write ( *, * ) '  in the right hand side.'
+    iwork(indprt) = 1
+  end if
+
+  if ( ntask /= 2 ) then
+    if ((iwork(instep)-nstepl) > mxstep) then
+      write ( *, * ) ' '
+      write ( *, * ) 'SDRIV3 - Warning!'
+      write ( *, * ) '  Number of steps taken = ', mxstep
+      write ( *, * ) '  TOUT not reached.'
+      nstate = 3
+      go to 560
+    end if
+  end if
+
+  call sdstp (eps, f, fa, work(ihmax), impl, jacobn, matdim, &
+    iwork(imxord), iwork(imnt), iwork(imtr), ml, mu, npar, &
+    ndecom, work(iywt), uround, users,  work(iavgh), &
+    work(iavgrd), work(ih), work(ihused), iwork(ijtask), &
+    iwork(imntld), iwork(imtrld), iwork(infe), iwork(inje), &
+    iwork(inqusd), iwork(instep), work(it), y, work(iyh), &
+    work(ia), convrg, work(idfdy), work(iel), work(ifac), &
+    work(ihold), iwork(indpvt), jstate, iwork(inq), &
+    iwork(inwait), work(irc), work(irmax), work(isave1), &
+    work(isave2), work(itq), work(itrend), mint, &
+    iwork(imtrsv), iwork(imxrds))
+
+  t = work(it)
+  h = work(ih)
+  go to (470, 670, 680, 690, 690, 660, 660, 660, 660, 660), jstate
+
+ 470  iwork(ijtask) = 1
+!
+!  determine if a root has been overtaken
+!
+  if (nroot /= 0) then
+    iroot = 0
+
+    do i = 1,nroot
+
+      jtroot = itroot + i - 1
+      jgnow = ignow + i - 1
+      glast = work(jgnow)
+      work(jgnow) = g (npar, t, y, i)
+
+      if (npar == 0) then
+        iwork(inroot) = i
+        nstate = 7
+        return
+      end if
+
+      if (glast*work(jgnow) > 0.0) then
+        work(jtroot) = t + h
+      else
+        if (work(jgnow) == 0.0) then
+          work(jtroot) = t
+          iroot = i
+        else
+          if (glast == 0.0) then
+            work(jtroot) = t + h
+          else
+            if (abs(work(ihused)) >= uround*abs(t)) then
+              tlast = t - work(ihused)
+              iroot = i
+              troot = t
+              call sdzro (ae, g, h, npar, iwork(inq), iroot, re, t, &
+                work(iyh), uround,  troot, tlast, work(jgnow), glast,  y)
+              do j = 1,n
+                y(j) = work(iyh + j -1)
+              end do
+              if (npar == 0) then
+                iwork(inroot) = i
+                nstate = 7
+                return
+              end if
+              work(jtroot) = troot
+            else
+              work(jtroot) = t
+              iroot = i
+            end if
+          end if
+        end if
+      end if
+
+    end do
+
+    if (iroot == 0) then
+      iwork(ijroot) = 0
+!                                                  select the first root
+    else
+
+      iwork(ijroot) = ntask
+      iwork(inrtld) = nroot
+      iwork(indtrt) = itroot
+      troot = t + h
+
+      do i = 1,nroot
+        jtroot = itroot + i - 1
+        if (work(jtroot)*hsign < troot*hsign) then
+          troot = work(jtroot)
+          iroot = i
+        end if
+      end do
+
+      iwork(inroot) = iroot
+      work(itout) = troot
+
+      if (troot*hsign <= tout*hsign) then
+        call sdntp (h, 0, n, iwork(inq), t, troot, work(iyh),  y)
+        nstate = 5
+        t = troot
+        go to 580
+      end if
+
+    end if
+  end if
+!                               test for ntask condition to be satisfied
+  nstate = 2
+  if (ntask == 1) then
+    if (t*hsign < tout*hsign) go to 260
+    call sdntp (h, 0, n, iwork(inq), t, tout, work(iyh),  y)
+    t = tout
+    go to 580
+!                               tout is assumed to have been attained
+!                               exactly if t is within twenty roundoff
+!                               units of tout, relative to max(tout, t).
+  else if (ntask == 2) then
+    if (abs(tout - t)<=nround*uround*max(abs(t), abs(tout))) then
+      t = tout
+    else
+      if ((t + h)*hsign > tout*hsign) then
+        h = tout - t
+        if ((t + h)*hsign>tout*hsign) h = h*(1.0E+00 - 4.0*uround)
+        work(ih) = h
+        if (h == 0.0) go to 670
+        iwork(ijtask) = -1
+      end if
+    end if
+  else if (ntask == 3) then
+    if (abs(tout - t)<=nround*uround*max(abs(t), abs(tout))) then
+      t = tout
+    else
+      if ((t + h)*hsign > tout*hsign) then
+        h = tout - t
+        if ((t + h)*hsign>tout*hsign) h = h*(1.0E+00 - 4.0*uround)
+        work(ih) = h
+        if (h == 0.0) go to 670
+        iwork(ijtask) = -1
+      end if
+      go to 260
+    end if
+  end if
+!  all returns are made through this
+!  section.  imxerr is determined.
+ 560  continue
+
+  do i = 1,n
+    jyh = i + iyh - 1
+    y(i) = work(jyh)
+  end do
+
+ 580  if (convrg) then
+    iwork(icnvrg) = 1
+  else
+    iwork(icnvrg) = 0
+  end if
+  if (iwork(ijtask) == 0) return
+  big = 0.0E+00
+  imxerr = 1
+  iwork(indmxr) = imxerr
+  do i = 1,n
+!                                            size = abs(error(i)/ywt(i))
+    jywt = i + iywt - 1
+    jerror = i + isave1 - 1
+    size = abs(work(jerror)/work(jywt))
+    if (big < size) then
+      big = size
+      imxerr = i
+      iwork(indmxr) = imxerr
+    end if
+  end do
+
+  return
+!
+ 660  nstate = jstate
+  return
+
+670 continue
+
+  write ( *, * ) ' '
+  write ( *, * ) 'SDRIV3 - Fatal error!'
+  write ( *, * ) '  The attempted stepsize has been reduced to zero.'
+  write ( *, * ) '  The problem setup may be incorrect.'
+  stop
+
+680 continue
+
+  write ( *, * ) ' '
+  write ( *, * ) 'SDRIV3 - Fatal error!'
+  write ( *, * ) '  The stepsize has been reduced about 50 times.'
+  write ( *, * ) '  The problem setup may be incorrect.'
+  stop
+
+690 continue
+
+  write ( *, * ) ' '
+  write ( *, * ) 'SDRIV3 - Fatal error!'
+  write ( *, * ) '  Matrix A is singular.'
+  stop
+end
+subroutine sdscl (hmax,n,nq,rmax,h,rc,rh,yh)
+!
+!*******************************************************************************
+!
+!! SDSCL rescales the YH array whenever the ODE step size is changed.
+!
+!
+!  SDSCL is a utility routine for the SDRIV family of ODE solvers.
+!
+  integer n
+!
+  real h
+  real hmax
+  integer j
+  integer nq
+  real r1
+  real rc
+  real rh
+  real rmax
+  real yh(n,*)
+!
+  if ( h < 1.0E+00 ) then
+    rh = min ( abs(h)*rh, abs(h)*rmax, hmax ) / abs(h)
+  else
+    rh = min ( rh, rmax, hmax/abs(h) )
+  end if
+
+  r1 = 1.0E+00
+
+  do j = 1, nq
+    r1 = r1 * rh
+    yh(1:n,j+1) = yh(1:n,j+1) * r1
+  end do
+
+  h = h*rh
+  rc = rc*rh
+
+  return
+end
+subroutine sdstp (eps,f,fa,hmax,impl,jacobn,matdim,maxord,mint, &
+  miter,ml,mu,n,nde,ywt,uround,users,avgh,avgord,h,hused,jtask, &
+  mntold,mtrold,nfe,nje,nqused,nstep,t,y,yh,a,convrg,dfdy,el,fac, &
+  hold,ipvt,jstate,nq,nwait,rc,rmax,save1,save2,tq,trend,iswflg, &
+  mtrsv,mxrdsv)
+!
+!*******************************************************************************
+!
+!! SDSTP performs one step of the integration of an initial value
+!  problem for a system of ordinary differential equations.
+!  communication with sdstp is done with the following variables:
+!
+!    yh      an n by maxord+1 array containing the dependent variables
+!              and their scaled derivatives.  maxord, the maximum order
+!              used, is currently 12 for the adams methods and 5 for the
+!              gear methods.  yh(i,j+1) contains the j-th derivative of
+!              y(i), scaled by h**j/factorial(j).  only y(i),
+!              1 <= i <= n, need be set by the calling program on
+!              the first entry.  the yh array should not be altered by
+!              the calling program.  when referencing yh as a
+!              2-dimensional array, use a column length of n, as this is
+!              the value used in sdstp.
+!    dfdy    a block of locations used for partial derivatives if miter
+!              is not 0.  if miter is 1 or 2 its length must be at least
+!              n*n.  if miter is 4 or 5 its length must be at least
+!              (2*ml+mu+1)*n.
+!    ywt     an array of n locations used in convergence and error tests
+!    save1
+!    save2   arrays of length n used for temporary storage.
+!    ipvt    an integer array of length n used by the linear system
+!              solvers for the storage of row interchange information.
+!    a       a block of locations used to store the matrix a, when using
+!              the implicit method.  if impl is 1, a is a matdim by n
+!              array.  if miter is 1 or 2 matdim is n, and if miter is 4
+!              or 5 matdim is 2*ml+mu+1.  if impl is 2 its length is n.
+!    jtask   an integer used on input.
+!              it has the following values and meanings:
+!                 == 0  perform the first step.  this value enables
+!                         the subroutine to initialize itself.
+!                > 0  take a new step continuing from the last.
+!                         assumes the last step was successful and
+!                         user has not changed any parameters.
+!                 < 0  take a new step with a new value of h and/or
+!                         mint and/or miter.
+!    jstate  a completion code with the following meanings:
+!                1  the step was successful.
+!                2  a solution could not be obtained with h /= 0.
+!                3  a solution was not obtained in mxtry attempts.
+!                4  for impl /= 0, the matrix a is singular.
+!              on a return with jstate > 1, the values of t and
+!              the yh array are as of the beginning of the last
+!              step, and h is the last step size attempted.
+!
+  integer matdim
+  integer n
+!
+  real a(matdim,*)
+  real avgh
+  real avgord
+  real bnd
+  logical convrg
+  real ctest
+  real d
+  real denom
+  real dfdy(matdim,*)
+  real d1
+  real el(13,12)
+  real eps
+  real erdn
+  real erup
+  real etest
+  logical evalfa
+  logical evaljc
+  real fac(*)
+  real h
+  real hmax
+  real hn
+  real hold
+  real hs
+  real hused
+  integer i
+  logical, save :: ier = .false.
+  integer impl
+  integer ipvt(*)
+  integer iswflg
+  integer iter
+  integer j
+  integer jstate
+  integer jtask
+  integer maxord
+  integer mint
+  integer miter
+  integer ml
+  integer mntold
+  integer mtrold
+  integer mtrsv
+  integer mu
+  integer mxrdsv
+  integer nde
+  integer nfail
+  integer nfe
+  integer nje
+  integer nq
+  integer nqused
+  integer nstep
+  integer nsv
+  integer ntry
+  real numer
+  integer nwait
+  real rc
+  real rh
+  real rh1
+  real rh2
+  real rh3
+  real rmax
+  real save1(*)
+  real save2(*)
+  real snrm2
+  logical switch
+  real t
+  real told
+  real tq(3,12)
+  real trend
+  real uround
+  real y(*)
+  real yh(n,*)
+  real ywt(*)
+  real y0nrm
+
+  real, parameter :: bias1 = 1.30
+  real, parameter :: bias2 = 1.20
+  real, parameter :: bias3 = 1.40
+  integer, parameter :: mxfail = 3
+  integer, parameter :: mxiter = 3
+  integer, parameter :: mxtry = 50
+  real, parameter :: rctest = .30
+  real, parameter :: rmfail = 2.0E+00
+  real, parameter :: rmnorm = 10.0E+00
+  real, parameter :: trshld = 1.0E+00
+!
+  external f, jacobn, fa, users
+!
+  nsv = n
+  bnd = 0.0E+00
+  switch = .false.
+  ntry = 0
+  told = t
+  nfail = 0
+  if (jtask <= 0) then
+    call sdntl (eps, f, fa, hmax, hold, impl, jtask, matdim, &
+      maxord, mint, miter, ml, mu, n, nde, save1, t, &
+      uround, users, y, ywt,  h, mntold, mtrold, nfe, rc, &
+      yh,  a, convrg, el, fac, ier, ipvt, nq, nwait, rh, &
+      rmax, save2, tq, trend, iswflg, jstate)
+    if (n == 0) go to 440
+    if (h == 0.0) go to 400
+    if (ier) go to 420
+  end if
+
+ 100  ntry = ntry + 1
+  if (ntry > mxtry) go to 410
+  t = t + h
+  call sdpsc (1, n, nq,  yh)
+  evaljc = ((abs(rc - 1.0) > rctest) .and. (miter /= 0))
+  evalfa = .not. evaljc
+
+ 110  iter = 0
+
+  y(1:n) = yh(1:n,1)
+
+  call f (n, t, y, save2)
+
+  if (n == 0) then
+    jstate = 6
+    go to 430
+  end if
+
+  nfe = nfe + 1
+
+  if (evaljc .or. ier) then
+    call sdpst (el, f, fa, h, impl, jacobn, matdim, miter, ml, &
+      mu, n, nde, nq, save2, t, users, y, yh, ywt, uround, &
+      nfe, nje,  a, dfdy, fac, ier, ipvt, save1, iswflg, &
+      bnd, jstate)
+
+    if (n == 0) go to 430
+    if (ier) go to 160
+    convrg = .false.
+    rc = 1.0E+00
+  end if
+
+  save1(1:n) = 0.0E+00
+!                      up to mxiter corrector iterations are taken.
+!                      convergence is tested by requiring the r.m.s.
+!                      norm of changes to be less than eps.  the sum of
+!                      the corrections is accumulated in the vector
+!                      save1(i).  it is approximately equal to the l-th
+!                      derivative of y multiplied by
+!                      h**l/(factorial(l-1)*el(l,nq)), and is thus
+!                      proportional to the actual errors to the lowest
+!                      power of h present (h**l).  the yh array is not
+!                      altered in the correction loop.  the norm of the
+!                      iterate difference is stored in d.  if
+!                      iter > 0, an estimate of the convergence rate
+!                      constant is stored in trend, and this is used in
+!                      the convergence test.
+!
+ 130  call sdcor (dfdy, el, fa, h, impl, ipvt, matdim, miter, ml, &
+        mu, n, nde, nq, t, users, y, yh, ywt,  evalfa, save1, &
+        save2,  a, d, jstate)
+
+    if (n == 0) go to 430
+
+  if (iswflg == 3 .and. mint == 1) then
+
+    if (iter == 0) then
+
+      numer = snrm2(n, save1, 1)
+
+      do i = 1,n
+        dfdy(1,i) = save1(i)
+      end do
+
+      y0nrm = snrm2(n, yh, 1)
+
+    else
+
+      denom = numer
+
+      do i = 1,n
+        dfdy(1,i) = save1(i) - dfdy(1,i)
+      end do
+
+      numer = snrm2(n, dfdy, matdim)
+
+      if (el(1,nq)*numer <= 100.0*uround*y0nrm) then
+        if (rmax == rmfail) then
+          switch = .true.
+          go to 170
+        end if
+      end if
+
+      do i = 1,n
+        dfdy(1,i) = save1(i)
+      end do
+
+      if (denom /= 0.0) then
+        bnd = max(bnd, numer/(denom*abs(h)*el(1,nq)))
+      end if
+
+    end if
+  end if
+
+  if (iter > 0) then
+    trend = max(.9*trend, d/d1)
+  end if
+
+  d1 = d
+  ctest = min(2.0*trend, 1.0)*d
+  if (ctest <= eps) go to 170
+  iter = iter + 1
+  if (iter < mxiter) then
+    do i = 1,n
+      y(i) = yh(i,1) + el(1,nq)*save1(i)
+    end do
+    call f (n, t, y, save2)
+    if (n == 0) then
+      jstate = 6
+      go to 430
+    end if
+    nfe = nfe + 1
+    go to 130
+  end if
+!                     the corrector iteration failed to converge in
+!                     mxiter tries.  if partials are involved but are
+!                     not up to date, they are reevaluated for the next
+!                     try.  otherwise the yh array is retracted to its
+!                     values before prediction, and h is reduced, if
+!                     possible.  if not, a no-convergence exit is taken.
+  if (convrg) then
+    evaljc = .true.
+    evalfa = .false.
+    go to 110
+  end if
+
+ 160  t = told
+  call sdpsc (-1, n, nq,  yh)
+  nwait = nq + 2
+  if (jtask /= 0 .and. jtask /= 2) rmax = rmfail
+
+  if (iter == 0) then
+    rh = .3
+  else
+    rh = .9*(eps/ctest)**(.2)
+  end if
+
+  if (rh*h == 0.0) go to 400
+  call sdscl (hmax, n, nq, rmax,  h, rc, rh, yh)
+  go to 100
+!                          the corrector has converged.  convrg is set
+!                          to .true. if partial derivatives were used,
+!                          to indicate that they may need updating on
+!                          subsequent steps.  the error test is made.
+ 170  convrg = (miter /= 0)
+
+  do i = 1,nde
+    save2(i) = save1(i)/ywt(i)
+  end do
+
+  etest = snrm2(nde, save2, 1)/(tq(2,nq)*sqrt(real(nde)))
+!
+!                           the error test failed.  nfail keeps track of
+!                           multiple failures.  restore t and the yh
+!                           array to their previous values, and prepare
+!                           to try the step again.  compute the optimum
+!                           step size for this or one lower order.
+  if (etest > eps) then
+    t = told
+    call sdpsc (-1, n, nq,  yh)
+    nfail = nfail + 1
+    if (nfail < mxfail) then
+      if (jtask /= 0 .and. jtask /= 2) rmax = rmfail
+      rh2 = 1.0/(bias2*(etest/eps)**(1.0/real(nq+1)))
+      if (nq > 1) then
+        do i = 1,nde
+          save2(i) = yh(i,nq+1)/ywt(i)
+        end do
+        erdn = snrm2(nde, save2, 1)/(tq(1,nq)*sqrt(real(nde)))
+        rh1 = 1.0/max(1.0, bias1*(erdn/eps)**(1.0/real(nq)))
+        if (rh2 < rh1) then
+          nq = nq - 1
+          rc = rc*el(1,nq)/el(1,nq+1)
+          rh = rh1
+        else
+          rh = rh2
+        end if
+      else
+        rh = rh2
+      end if
+      nwait = nq + 2
+      if (rh*h == 0.0) go to 400
+      call sdscl (hmax, n, nq, rmax,  h, rc, rh, yh)
+      go to 100
+    end if
+!                control reaches this section if the error test has
+!                failed mxfail or more times.  it is assumed that the
+!                derivatives that have accumulated in the yh array have
+!                errors of the wrong order.  hence the first derivative
+!                is recomputed, the order is set to 1, and the step is
+!                retried.
+    nfail = 0
+    jtask = 2
+    do i = 1,n
+      y(i) = yh(i,1)
+    end do
+
+    call sdntl (eps, f, fa, hmax, hold, impl, jtask, matdim, &
+      maxord, mint, miter, ml, mu, n, nde, save1, t, &
+      uround, users, y, ywt,  h, mntold, mtrold, nfe, rc, &
+      yh,  a, convrg, el, fac, ier, ipvt, nq, nwait, rh, &
+      rmax, save2, tq, trend, iswflg, jstate)
+    rmax = rmnorm
+    if (n == 0) go to 440
+    if (h == 0.0) go to 400
+    if (ier) go to 420
+    go to 100
+  end if
+!                          after a successful step, update the yh array.
+  nstep = nstep + 1
+  hused = h
+  nqused = nq
+  avgh = (real(nstep-1)*avgh + h)/real(nstep)
+  avgord = (real(nstep-1)*avgord + real(nq))/real(nstep)
+
+  do j = 1,nq+1
+    do i = 1,n
+      yh(i,j) = yh(i,j) + el(j,nq)*save1(i)
+    end do
+  end do
+
+  y(1:n) = yh(1:n,1)
+!                                          if iswflg is 3, consider
+!                                          changing integration methods.
+  if (iswflg == 3) then
+    if (bnd /= 0.0) then
+      if (mint == 1 .and. nq <= 5) then
+        hn = abs(h)/max(uround, (etest/eps)**(1.0/real(nq+1)))
+        hn = min(hn, 1.0/(2.0*el(1,nq)*bnd))
+        hs = abs(h)/max(uround,(etest/(eps*el(nq+1,1)))**(1.0/real(nq+1)))
+        if (hs > 1.2*hn) then
+          mint = 2
+          mntold = mint
+          miter = mtrsv
+          mtrold = miter
+          maxord = min(mxrdsv, 5)
+          rc = 0.0E+00
+          rmax = rmnorm
+          trend = 1.0E+00
+          call sdcst (maxord, mint, iswflg, el, tq)
+          nwait = nq + 2
+        end if
+      else if (mint == 2) then
+        hs = abs(h)/max(uround, (etest/eps)**(1.0/real(nq+1)))
+        hn = abs(h)/max(uround,(etest*el(nq+1,1)/eps)**(1.0/real(nq+1)))
+        hn = min(hn, 1.0/(2.0*el(1,nq)*bnd))
+        if (hn >= hs) then
+          mint = 1
+          mntold = mint
+          miter = 0
+          mtrold = miter
+          maxord = min(mxrdsv, 12)
+          rmax = rmnorm
+          trend = 1.0E+00
+          convrg = .false.
+          call sdcst (maxord, mint, iswflg, el, tq)
+          nwait = nq + 2
+        end if
+      end if
+    end if
+  end if
+
+  if (switch) then
+    mint = 2
+    mntold = mint
+    miter = mtrsv
+    mtrold = miter
+    maxord = min(mxrdsv, 5)
+    nq = min(nq, maxord)
+    rc = 0.0E+00
+    rmax = rmnorm
+    trend = 1.0E+00
+    call sdcst (maxord, mint, iswflg, el, tq)
+    nwait = nq + 2
+  end if
+!                           consider changing h if nwait = 1.  otherwise
+!                           decrease nwait by 1.  if nwait is then 1 and
+!                           nq<maxord, then save1 is saved for use in
+!                           a possible order increase on the next step.
+!
+  if (jtask == 0 .or. jtask == 2) then
+
+    rh = 1.0/max(uround, bias2*(etest/eps)**(1.0/real(nq+1)))
+    if (rh>trshld) call sdscl (hmax, n, nq, rmax, h, rc, rh, yh)
+
+  else if (nwait > 1) then
+
+    nwait = nwait - 1
+
+    if (nwait == 1 .and. nq < maxord) then
+      do i = 1,nde
+        yh(i,maxord+1) = save1(i)
+      end do
+    end if
+!             if a change in h is considered, an increase or decrease in
+!             order by one is considered also.  a change in h is made
+!             only if it is by a factor of at least trshld.  factors
+!             rh1, rh2, and rh3 are computed, by which h could be
+!             multiplied at order nq - 1, order nq, or order nq + 1,
+!             respectively.  the largest of these is determined and the
+!             new order chosen accordingly.  if the order is to be
+!             increased, we compute one additional scaled derivative.
+!             if there is a change of order, reset nq and the
+!             coefficients.  in any case h is reset according to rh and
+!             the yh array is rescaled.
+  else
+    if (nq == 1) then
+      rh1 = 0.0E+00
+    else
+      do i = 1,nde
+        save2(i) = yh(i,nq+1)/ywt(i)
+      end do
+      erdn = snrm2(nde, save2, 1)/(tq(1,nq)*sqrt(real(nde)))
+      rh1 = 1.0/max(uround, bias1*(erdn/eps)**(1.0/real(nq)))
+    end if
+
+    rh2 = 1.0/max(uround, bias2*(etest/eps)**(1.0/real(nq+1)))
+
+    if (nq == maxord) then
+      rh3 = 0.0E+00
+    else
+      do i = 1,nde
+        save2(i) = (save1(i) - yh(i,maxord+1))/ywt(i)
+      end do
+      erup = snrm2(nde, save2, 1)/(tq(3,nq)*sqrt(real(nde)))
+      rh3 = 1.0/max(uround, bias3*(erup/eps)**(1.0/real(nq+2)))
+    end if
+
+    if (rh1 > rh2 .and. rh1 >= rh3) then
+      rh = rh1
+      if (rh <= trshld) go to 380
+      nq = nq - 1
+      rc = rc*el(1,nq)/el(1,nq+1)
+    else if (rh2 >= rh1 .and. rh2 >= rh3) then
+      rh = rh2
+      if (rh <= trshld) go to 380
+    else
+      rh = rh3
+      if (rh <= trshld) go to 380
+      do i = 1,n
+        yh(i,nq+2) = save1(i)*el(nq+1,nq)/real(nq+1)
+      end do
+      nq = nq + 1
+      rc = rc*el(1,nq)/el(1,nq-1)
+    end if
+
+    if (iswflg == 3 .and. mint == 1) then
+      if (bnd/=0.0) rh = min(rh, 1.0/(2.0*el(1,nq)*bnd*abs(h)))
+    end if
+
+    call sdscl (hmax, n, nq, rmax,  h, rc, rh, yh)
+    rmax = rmnorm
+ 380    nwait = nq + 2
+  end if
+!               all returns are made through this section.  h is saved
+!               in hold to allow the caller to change h on the next step
+  jstate = 1
+  hold = h
+  return
+
+ 400  jstate = 2
+  hold = h
+  do i = 1,n
+    y(i) = yh(i,1)
+  end do
+  return
+
+ 410  jstate = 3
+  hold = h
+  return
+
+ 420  jstate = 4
+  hold = h
+  return
+
+ 430  t = told
+  call sdpsc (-1, nsv, nq,  yh)
+  do i = 1,nsv
+    y(i) = yh(i,1)
+  end do
+ 440  hold = h
+  return
+end
+subroutine sdzro (ae,f,h,n,nq,iroot,re,t,yh,uround,b,c,fb,fc,y)
+!
+!*******************************************************************************
+!
+!! SDZRO is a special purpose version of zeroin, modified for use with
+!     the sdriv1 package.
+!
+!     sandia mathematical program library
+!     mathematical computing services division 5422
+!     sandia laboratories
+!     p. o. box 5800
+!     albuquerque, new mexico  87115
+!     control data 6600 version 4.5, 1 november 1971
+!
+!  Discussion:
+!
+!    zeroin searches for a zero of a function f(n, t, y, iroot)
+!    between the given values b and c until the width of the
+!    interval (b, c) has collapsed to within a tolerance specified
+!    by the stopping criterion, abs(b - c) <= 2.*(rw*abs(b) + ae).
+!
+!  Parameters:
+!
+!        f     - name of the external function, which returns a
+!                real result.  this name must be in an
+!                external statement in the calling program.
+!        b     - one end of the interval (b, c).  the value returned for
+!                b usually is the better approximation to a zero of f.
+!        c     - the other end of the interval (b, c).
+!        re    - relative error used for rw in the stopping criterion.
+!                if the requested re is less than machine precision,
+!                then rw is set to approximately machine precision.
+!        ae    - absolute error used in the stopping criterion.  if the
+!                given interval (b, c) contains the origin, then a
+!                nonzero value should be chosen for ae.
+!
+!     references
+!       1.  l f shampine and h a watts, zeroin, a root-solving routine,
+!           sc-tm-70-631, sept 1970.
+!       2.  t j dekker, finding a zero by means of successive linear
+!           interpolation, "constructive aspects of the fundamental
+!           theorem of algebra", edited by b dejon and p henrici, 1969.
+!
+  integer n
+!
+  real a
+  real acbs
+  real acmb
+  real ae
+  real b
+  real c
+  real cmb
+  real er
+  real f
+  real fa
+  real fb
+  real fc
+  real h
+  integer ic
+  integer iroot
+  integer kount
+  integer nq
+  real p
+  real q
+  real re
+  real rw
+  real t
+  real tol
+  real uround
+  real y(*)
+  real yh(n,*)
+!
+  external f
+!
+  er = 4.0*uround
+  rw = max(re, er)
+  ic = 0
+  acbs = abs(b - c)
+  a = c
+  fa = fc
+  kount = 0
+!                                                    perform interchange
+ 10 continue
+
+  if (abs(fc) < abs(fb)) then
+    a = b
+    fa = fb
+    b = c
+    fb = fc
+    c = a
+    fc = fa
+  end if
+
+  cmb = 0.5*(c - b)
+  acmb = abs(cmb)
+  tol = rw*abs(b) + ae
+!                                                test stopping criterion
+  if (acmb <= tol) return
+  if (kount > 50) return
+!                                    calculate new iterate implicitly as
+!                                    b + p/q, where we arrange p >= 0.
+!                         the implicit form is used to prevent overflow.
+  p = (b - a)*fb
+  q = fa - fb
+  if (p < 0.0) then
+    p = -p
+    q = -q
+  end if
+!                          update a and check for satisfactory reduction
+!                          in the size of our bounding interval.
+  a = b
+  fa = fb
+  ic = ic + 1
+  if (ic >= 4) then
+    if (8.0*acmb >= acbs) then
+!                                                                 bisect
+      b = 0.5*(c + b)
+      go to 20
+    end if
+    ic = 0
+  end if
+  acbs = acmb
+!                                            test for too small a change
+  if (p <= abs(q)*tol) then
+!                                                 increment by tolerance
+    b = b + sign(tol, cmb)
+!                                               root ought to be between
+!                                               b and (c + b)/2.
+  else if (p < cmb*q) then
+!                                                            interpolate
+    b = b + p/q
+  else
+!                                                                 bisect
+    b = 0.5*(c + b)
+  end if
+!
+!  have completed computation for new iterate b.
+!
+ 20   continue
+
+  call sdntp (h, 0, n, nq, t, b, yh,  y)
+  fb = f(n, b, y, iroot)
+  if (n == 0) return
+  if (fb == 0.0) return
+  kount = kount + 1
+!
+!  Decide whether next step is interpolation or extrapolation
+!
+  if (sign(1.0, fb) == sign(1.0, fc)) then
+    c = a
+    fc = fa
+  end if
+  go to 10
+end
+subroutine secfac(nr,n,x,g,a,xpls,gpls,epsm,itncnt,rnf, &
+  iagflg,noupdt,s,y,u,w)
+!
+!*******************************************************************************
+!
+!! SECFAC updates the hessian by the bfgs factored method.
+!
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! x(n)         --> old iterate, x[k-1]
+! g(n)         --> gradient or approximate at old iterate
+! a(n,n)      <--> on entry: cholesky decomposition of hessian in
+!                    lower part and diagonal.
+!                  on exit:  updated cholesky decomposition of hessian
+!                    in lower triangular part and diagonal
+! xpls(n)      --> new iterate, x[k]
+! gpls(n)      --> gradient or approximate at new iterate
+! epsm         --> machine epsilon
+! itncnt       --> iteration count
+! rnf          --> relative noise in optimization function fcn
+! iagflg       --> =1 if analytic gradient supplied, =0 itherwise
+! noupdt      <--> boolean: no update yet
+!                  [retain value between successive calls]
+! s(n)         --> workspace
+! y(n)         --> workspace
+! u(n)         --> workspace
+! w(n)         --> workspace
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real alp
+  real den1
+  real den2
+  real epsm
+  real g(n)
+  real gpls(n)
+  integer i
+  integer iagflg
+  integer itncnt
+  integer j
+  logical noupdt
+  real reltol
+  real rnf
+  real s(n)
+  logical skpupd
+  real snorm2
+  real snrm2
+  real u(n)
+  real w(n)
+  real x(n)
+  real xpls(n)
+  real y(n)
+  real ynrm2
+!
+  if ( itncnt==1) noupdt=.true.
+
+  s(1:n) = xpls(1:n) - x(1:n)
+  y(1:n) = gpls(1:n) - g(1:n)
+
+  den1 = dot_product ( s, y )
+
+  snorm2 = snrm2(n,s,1)
+
+  ynrm2=snrm2(n,y,1)
+
+  if ( den1<sqrt(epsm)*snorm2*ynrm2) then
+    return
+  end if
+
+  call mvmltu(nr,n,a,s,u)
+
+  den2 = dot_product ( u, u )
+!
+!  l <-- sqrt(den1/den2)*l
+!
+  alp=sqrt(den1/den2)
+
+  if ( noupdt ) then
+
+    do j=1,n
+      u(j)=alp*u(j)
+      do i=j,n
+        a(i,j)=alp*a(i,j)
+      end do
+    end do
+
+    noupdt=.false.
+    den2=den1
+    alp=1.0E+00
+
+  end if
+
+  skpupd=.true.
+!
+!  w = l(l+)s = hs
+!
+  call mvmltl(nr,n,a,u,w)
+  i=1
+
+  if ( iagflg == 0 ) then
+    reltol=sqrt(rnf)
+  else
+    reltol=rnf
+  end if
+
+60  continue
+
+  if ( i <= n .and. skpupd ) then
+
+    if ( abs(y(i)-w(i)) < reltol * max(abs(g(i)),abs(gpls(i))) ) then
+      i = i + 1
+    else
+      skpupd=.false.
+    end if
+    go to 60
+  end if
+
+  if ( skpupd ) then
+    return
+  end if
+!
+!  w=y-alp*l(l+)s
+!
+  w(1:n)=y(1:n)-alp*w(1:n)
+!
+!  alp=1/sqrt(den1*den2)
+!
+  alp=alp/den1
+!
+!  u=(l+)/sqrt(den1*den2) = (l+)s/sqrt((y+)s * (s+)l(l+)s)
+!
+  u(1:n)=alp*u(1:n)
+!
+!  copy l into upper triangular part.  zero l.
+!
+  do i=2,n
+    do j=1,i-1
+      a(j,i)=a(i,j)
+      a(i,j)=0.0E+00
+    end do
+  end do
+!
+!  find q, (l+) such that  q(l+) = (l+) + u(w+)
+!
+  call qrupdt(nr,n,a,u,w)
+!
+!  upper triangular part and diagonal of a now contain updated
+!  cholesky decomposition of hessian.  copy back to lower triangular part.
+!
+  do i=2,n
+    do j=1,i-1
+      a(i,j)=a(j,i)
+    end do
+  end do
+
+  return
+end
+subroutine secunf(nr,n,x,g,a,udiag,xpls,gpls,epsm,itncnt, &
+  rnf,iagflg,noupdt,s,y,t)
+!
+!*******************************************************************************
+!
+!! SECUNF updates hessian by the bfgs unfactored method
+!
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! x(n)         --> old iterate, x[k-1]
+! g(n)         --> gradient or approximate at old iterate
+! a(n,n)      <--> on entry: approximate hessian at old iterate
+!                    in upper triangular part (and udiag)
+!                  on exit:  updated approx hessian at new iterate
+!                    in lower triangular part and diagonal
+!                  [lower triangular part of symmetric matrix]
+! udiag        --> on entry: diagonal of hessian
+! xpls(n)      --> new iterate, x[k]
+! gpls(n)      --> gradient or approximate at new iterate
+! epsm         --> machine epsilon
+! itncnt       --> iteration count
+! rnf          --> relative noise in optimization function fcn
+! iagflg       --> =1 if analytic gradient supplied, =0 otherwise
+! noupdt      <--> boolean: no update yet
+!                  [retain value between successive calls]
+! s(n)         --> workspace
+! y(n)         --> workspace
+! t(n)         --> workspace
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real den1
+  real den2
+  real epsm
+  real g(n)
+  real gam
+  real gpls(n)
+  integer i
+  integer iagflg
+  integer itncnt
+  integer j
+  logical noupdt
+  real rnf
+  real s(n)
+  logical skpupd
+  real snorm2
+  real snrm2
+  real t(n)
+  real tol
+  real udiag(n)
+  real x(n)
+  real xpls(n)
+  real y(n)
+  real ynrm2
+!
+! copy hessian in upper triangular part and udiag to
+! lower triangular part and diagonal
+!
+  do j = 1, n
+    a(j,j) = udiag(j)
+    do i = j+1, n
+      a(i,j) = a(j,i)
+    end do
+  end do
+
+  if ( itncnt==1) noupdt=.true.
+
+  s(1:n) = xpls(1:n) - x(1:n)
+  y(1:n) = gpls(1:n) - g(1:n)
+
+  den1 = dot_product ( s, y )
+
+  snorm2=snrm2(n,s,1)
+
+  ynrm2=snrm2(n,y,1)
+
+  if ( den1<sqrt(epsm)*snorm2*ynrm2) then
+    return
+  end if
+
+  call mvmlts(nr,n,a,s,t)
+
+  den2 = dot_product ( s, t )
+
+  if ( noupdt ) then
+!
+!         h <-- [(s+)y/(s+)hs]h
+!
+    gam=den1/den2
+    den2=gam*den2
+    do j=1,n
+      t(j)=gam*t(j)
+      do i=j,n
+        a(i,j)=gam*a(i,j)
+      end do
+    end do
+    noupdt=.false.
+
+  end if
+
+  skpupd=.true.
+!
+!  check update condition on row i
+!
+  do i=1,n
+
+    tol=rnf*max(abs(g(i)),abs(gpls(i)))
+    if ( iagflg==0) tol=tol/sqrt(rnf)
+
+    if ( abs(y(i)-t(i)) >= tol) then
+      skpupd=.false.
+      go to 70
+    end if
+
+  end do
+
+70 continue
+
+  if ( skpupd) then
+    return
+  end if
+!
+!  bfgs update
+!
+  do j=1,n
+    do i=j,n
+      a(i,j)=a(i,j)+y(i)*y(j)/den1-t(i)*t(j)/den2
+    end do
+  end do
+
+  return
+end
+subroutine sgbfa ( abd, lda, n, ml, mu, ipvt, info )
+!
+!*******************************************************************************
+!
+!! SGBFA factors a real band matrix by elimination.
+!
+!
+!  Discussion:
+!
+!     sgbfa is usually called by sgbco, but it can be called
+!     directly with a saving in time if  rcond  is not needed.
+!
+!  Parameters:
+!
+!     on entry
+!
+!        abd     real(lda, n)
+!                contains the matrix in band storage.  the columns
+!                of the matrix are stored in the columns of  abd  and
+!                the diagonals of the matrix are stored in rows
+!                ml+1 through 2*ml+mu+1 of  abd .
+!                see the comments below for details.
+!
+!        lda     integer
+!                the leading dimension of the array  abd .
+!                lda must be >= 2*ml + mu + 1 .
+!
+!        n       integer
+!                the order of the original matrix.
+!
+!        ml      integer
+!                number of diagonals below the main diagonal.
+!                0 <= ml < n .
+!
+!        mu      integer
+!                number of diagonals above the main diagonal.
+!                0 <= mu < n .
+!                more efficient if  ml <= mu .
+!     on return
+!
+!        abd     an upper triangular matrix in band storage and
+!                the multipliers which were used to obtain it.
+!                the factorization can be written  a = l*u  where
+!                l  is a product of permutation and unit lower
+!                triangular matrices and  u  is upper triangular.
+!
+!        ipvt    integer(n)
+!                an integer vector of pivot indices.
+!
+!        info    integer
+!                = 0  normal value.
+!                = k  if  u(k,k) == 0.0E+00 .  this is not an error
+!                     condition for this subroutine, but it does
+!                     indicate that sgbsl will divide by zero if
+!                     called.  use  rcond  in sgbco for a reliable
+!                     indication of singularity.
+!
+!     band storage
+!
+!           if  a  is a band matrix, the following program segment
+!           will set up the input.
+!
+!                   ml = (band width below the diagonal)
+!                   mu = (band width above the diagonal)
+!                   m = ml + mu + 1
+!                   do j = 1, n
+!                      i1 = max ( 1, j-mu )
+!                      i2 = min ( n, j+ml )
+!                      do i = i1, i2
+!                         k = i - j + m
+!                         abd(k,j) = a(i,j)
+!                      end do
+!                   end do
+!
+!           this uses rows  ml+1  through  2*ml+mu+1  of  abd .
+!           in addition, the first  ml  rows in  abd  are used for
+!           elements generated during the triangularization.
+!           the total number of rows needed in  abd  is  2*ml+mu+1 .
+!           the  ml+mu by ml+mu  upper left triangle and the
+!           ml by ml  lower right triangle are not referenced.
+!
+!     linpack. this version dated 08/14/78 .
+!     cleve moler, university of new mexico, argonne national lab.
+!
+  integer lda
+  integer n
+!
+  real abd(lda,n)
+  integer i
+  integer i0
+  integer info
+  integer ipvt(n)
+  integer isamax
+  integer j
+  integer j0
+  integer j1
+  integer ju
+  integer jz
+  integer k
+  integer l
+  integer lm
+  integer m
+  integer ml
+  integer mm
+  integer mu
+  real t
+!
+  m = ml + mu + 1
+  info = 0
+!
+!  Zero initial fill-in columns.
+!
+  j0 = mu + 2
+  j1 = min ( n, m ) - 1
+
+  do jz = j0, j1
+     i0 = m + 1 - jz
+     do i = i0, ml
+        abd(i,jz) = 0.0E+00
+     end do
+  end do
+
+  jz = j1
+  ju = 0
+!
+!  Gaussian elimination with partial pivoting.
+!
+  do k = 1, n-1
+!
+!  Zero next fill-in column.
+!
+     jz = jz + 1
+     if ( jz <= n ) then
+       abd(1:ml,jz) = 0.0E+00
+     end if
+!
+!  Find L = pivot index.
+!
+     lm = min ( ml, n-k )
+     l = isamax ( lm+1, abd(m,k), 1 ) + m - 1
+     ipvt(k) = l + k - m
+!
+!  Zero pivot implies this column already triangularized.
+!
+     if ( abd(l,k) == 0.0E+00 ) then
+
+       info = k
+!
+!  Interchange if necessary.
+!
+     else
+
+        if ( l /= m ) then
+           t = abd(l,k)
+           abd(l,k) = abd(m,k)
+           abd(m,k) = t
+        end if
+!
+!  Compute multipliers.
+!
+        t = -1.0E+00 / abd(m,k)
+        call sscal ( lm, t, abd(m+1,k), 1 )
+!
+!  Row elimination with column indexing.
+!
+        ju = min ( max ( ju, mu+ipvt(k) ), n )
+        mm = m
+
+        do j = k+1, ju
+           l = l - 1
+           mm = mm - 1
+           t = abd(l,j)
+           if ( l /= mm ) then
+              abd(l,j) = abd(mm,j)
+              abd(mm,j) = t
+           end if
+           call saxpy ( lm, t, abd(m+1,k), 1, abd(mm+1,j), 1 )
+        end do
+
+     end if
+
+  end do
+
+  ipvt(n) = n
+
+  if ( abd(m,n) == 0.0E+00 ) then
+    info = n
+  end if
+
+  return
+end
+subroutine sgbsl(abd,lda,n,ml,mu,ipvt,b,job)
+!
+!*******************************************************************************
+!
+!! SGBSL solves a banded linear system factored by SGBCO or SGBFA.
+!
+!
+!  Description:
+!
+!     sgbsl solves the real band system
+!     a * x = b  or  trans(a) * x = b
+!     using the factors computed by sbgco or sgbfa.
+!
+!     on entry
+!
+!        abd     real(lda, n)
+!                the output from sbgco or sgbfa.
+!
+!        lda     integer
+!                the leading dimension of the array  abd .
+!
+!        n       integer
+!                the order of the original matrix.
+!
+!        ml      integer
+!                number of diagonals below the main diagonal.
+!
+!        mu      integer
+!                number of diagonals above the main diagonal.
+!
+!        ipvt    integer(n)
+!                the pivot vector from sbgco or sgbfa.
+!
+!        b       real(n)
+!                the right hand side vector.
+!
+!        job     integer
+!                = 0         to solve  a*x = b ,
+!                = nonzero   to solve  trans(a)*x = b , where
+!                            trans(a)  is the transpose.
+!
+!     on return
+!
+!        b       the solution vector  x .
+!
+!     error condition
+!
+!        a division by zero will occur if the input factor contains a
+!        zero on the diagonal.  technically, this indicates singularity,
+!        but it is often caused by improper arguments or improper
+!        setting of lda .  it will not occur if the subroutines are
+!        called correctly and if sbgco has set rcond > 0.0E+00
+!        or sgbfa has set info == 0 .
+!
+!     to compute  inverse(a) * c  where  c  is a matrix
+!     with  p  columns
+!           call sbgco(abd,lda,n,ml,mu,ipvt,rcond,z)
+!           if (rcond is too small) go to ...
+!           do j = 1, p
+!              call sgbsl(abd,lda,n,ml,mu,ipvt,c(1,j),0)
+!           end do
+!
+!     linpack.  this version dated 08/14/78 .
+!     cleve moler, university of new mexico, argonne national lab.
+!
+!  references  dongarra j.j., bunch j.r., moler c.b., stewart g.w.,
+!                 *linpack users  guide*, siam, 1979.
+!
+  integer lda
+  integer n
+!
+  real abd(lda,*)
+  real b(*)
+  integer ipvt(*)
+  integer job
+  integer k
+  integer kb
+  integer l
+  integer la
+  integer lb
+  integer lm
+  integer m
+  integer ml
+  integer mu
+  real sdot
+  real t
+!
+  m = mu + ml + 1
+
+  if ( job == 0 ) then
+
+    if ( ml /= 0 ) then
+
+      do k = 1, n-1
+        lm = min(ml,n-k)
+        l = ipvt(k)
+        t = b(l)
+        if (l /= k) then
+          b(l) = b(k)
+          b(k) = t
+        end if
+        call saxpy(lm,t,abd(m+1,k),1,b(k+1),1)
+      end do
+
+    end if
+
+    do kb = 1, n
+      k = n + 1 - kb
+      b(k) = b(k)/abd(m,k)
+      lm = min(k,m) - 1
+      la = m - lm
+      lb = k - lm
+      t = -b(k)
+      call saxpy(lm,t,abd(la,k),1,b(lb),1)
+    end do
+
+  else
+
+     do k = 1, n
+       lm = min(k,m) - 1
+       la = m - lm
+       lb = k - lm
+       t = sdot(lm,abd(la,k),1,b(lb),1)
+       b(k) = (b(k) - t)/abd(m,k)
+     end do
+
+     if ( ml /= 0) then
+
+       do kb = 1, n-1
+         k = n - kb
+         lm = min(ml,n-k)
+         b(k) = b(k) + sdot(lm,abd(m+1,k),1,b(k+1),1)
+         l = ipvt(k)
+         if (l /= k) then
+           t = b(l)
+           b(l) = b(k)
+           b(k) = t
+         end if
+       end do
+
+     end if
+
+  end if
+
+  return
+end
+subroutine sgeco(a,lda,n,ipvt,rcond,z)
+!
+!*******************************************************************************
+!
+!! SGECO factors a real matrix by gaussian elimination
+!     and estimates the condition of the matrix.
+!
+!     if  rcond  is not needed, sgefa is slightly faster.
+!     to solve  a*x = b , follow sgeco by sgesl.
+!     to compute  inverse(a)*c , follow sgeco by sgesl.
+!     to compute  determinant(a) , follow sgeco by sgedi.
+!     to compute  inverse(a) , follow sgeco by sgedi.
+!
+!     on entry
+!
+!        a       real(lda, n)
+!                the matrix to be factored.
+!
+!        lda     integer
+!                the leading dimension of the array  a .
+!
+!        n       integer
+!                the order of the matrix  a .
+!
+!     on return
+!
+!        a       an upper triangular matrix and the multipliers
+!                which were used to obtain it.
+!                the factorization can be written  a = l*u , where
+!                l  is a product of permutation and unit lower
+!                triangular matrices and  u  is upper triangular.
+!
+!        ipvt    integer(n)
+!                an integer vector of pivot indices.
+!
+!        rcond   real
+!                an estimate of the reciprocal condition of  a .
+!                for the system  a*x = b , relative perturbations
+!                in  a  and  b  of size  epsilon  may cause
+!                relative perturbations in  x  of size  epsilon/rcond .
+!                if  rcond  is so small that the logical expression
+!                           1.0E+00 + rcond == 1.0E+00
+!                is true, then  a  may be singular to working
+!                precision.  in particular,  rcond  is zero  if
+!                exact singularity is detected or the estimate
+!                underflows.
+!
+!        z       real(n)
+!                a work vector whose contents are usually unimportant.
+!                if  a  is close to a singular matrix, then  z  is
+!                an approximate null vector in the sense that
+!                norm(a*z) = rcond*norm(a)*norm(z) .
+!
+!     linpack.  this version dated 08/14/78 .
+!     cleve moler, university of new mexico, argonne national lab.
+!
+!  references  dongarra j.j., bunch j.r., moler c.b., stewart g.w.,
+!                 *linpack users  guide*, siam, 1979.
+!
+  integer lda
+  integer n
+!
+  integer ipvt(n)
+  real a(lda,*)
+  real anorm
+  real ek
+  integer info
+  integer j
+  integer k
+  integer kb
+  integer l
+  real rcond
+  real s
+  real sasum
+  real sdot
+  real sm
+  real t
+  real wk
+  real wkm
+  real ynorm
+  real z(*)
+!
+!  compute 1-norm of a
+!
+  anorm = 0.0E+00
+  do j = 1, n
+     anorm = max (anorm,sasum(n,a(1,j),1))
+  end do
+!
+!  factor
+!
+  call sgefa(a,lda,n,ipvt,info)
+!
+!     rcond = 1/(norm(a)*(estimate of norm(inverse(a)))) .
+!     estimate = norm(z)/norm(y) where  a*z = y  and  trans(a)*y = e .
+!     trans(a)  is the transpose of a .  the components of  e  are
+!     chosen to cause maximum local growth in the elements of w  where
+!     trans(u)*w = e .  the vectors are frequently rescaled to avoid
+!     overflow.
+!
+!  solve trans(u)*w = e
+!
+  ek = 1.0E+00
+  z(1:n) = 0.0E+00
+
+  do k = 1, n
+
+     if (z(k) /= 0.0) ek = sign(ek,-z(k))
+
+     if (abs(ek-z(k)) > abs(a(k,k))) then
+        s = abs(a(k,k))/abs(ek-z(k))
+        call sscal(n,s,z,1)
+        ek = s*ek
+     end if
+
+     wk = ek - z(k)
+     wkm = -ek - z(k)
+     s = abs(wk)
+     sm = abs(wkm)
+
+     if (a(k,k) /= 0.0) then
+       wk = wk/a(k,k)
+       wkm = wkm/a(k,k)
+     else
+       wk = 1.0E+00
+       wkm = 1.0E+00
+     end if
+
+     if ( k+1 <= n) then
+
+       do j = k+1, n
+         sm = sm + abs(z(j)+wkm*a(k,j))
+         z(j) = z(j) + wk*a(k,j)
+         s = s + abs(z(j))
+       end do
+
+       if ( s < sm ) then
+           t = wkm - wk
+           wk = wkm
+           do j = k+1, n
+              z(j) = z(j) + t*a(k,j)
+           end do
+       end if
+
+     end if
+
+     z(k) = wk
+
+  end do
+
+  s = 1.0/sasum(n,z,1)
+  call sscal(n,s,z,1)
+!
+!  solve trans(l)*y = w
+!
+  do kb = 1, n
+
+     k = n + 1 - kb
+     if (k < n) z(k) = z(k) + sdot(n-k,a(k+1,k),1,z(k+1),1)
+     if ( abs(z(k)) > 1.0) then
+        s = 1.0/abs(z(k))
+        call sscal(n,s,z,1)
+     end if
+     l = ipvt(k)
+     t = z(l)
+     z(l) = z(k)
+     z(k) = t
+
+  end do
+
+  s = 1.0/sasum(n,z,1)
+  call sscal(n,s,z,1)
+
+  ynorm = 1.0E+00
+!
+!  solve l*v = y
+!
+  do k = 1, n
+     l = ipvt(k)
+     t = z(l)
+     z(l) = z(k)
+     z(k) = t
+     if (k < n) call saxpy(n-k,t,a(k+1,k),1,z(k+1),1)
+     if (abs(z(k)) > 1.0) then
+        s = 1.0/abs(z(k))
+        call sscal(n,s,z,1)
+        ynorm = s*ynorm
+     end if
+  end do
+
+  s = 1.0/sasum(n,z,1)
+  call sscal(n,s,z,1)
+  ynorm = s*ynorm
+!
+!  solve  u*z = v
+!
+  do kb = 1, n
+
+     k = n + 1 - kb
+
+     if (abs(z(k)) > abs(a(k,k))) then
+        s = abs(a(k,k))/abs(z(k))
+        call sscal(n,s,z,1)
+        ynorm = s*ynorm
+     end if
+
+     if (a(k,k) /= 0.0) z(k) = z(k)/a(k,k)
+     if (a(k,k) == 0.0) z(k) = 1.0E+00
+     t = -z(k)
+     call saxpy(k-1,t,a(1,k),1,z(1),1)
+
+  end do
+!
+!  make znorm = 1.0E+00
+!
+  s = 1.0/sasum(n,z,1)
+  call sscal(n,s,z,1)
+  ynorm = s*ynorm
+
+  if (anorm /= 0.0) rcond = ynorm/anorm
+  if (anorm == 0.0) rcond = 0.0E+00
+  return
+end
+subroutine sgefa(a,lda,n,ipvt,info)
+!
+!*******************************************************************************
+!
+!! SGEFA factors a real matrix by gaussian elimination.
+!
+!
+!     sgefa is usually called by sgeco, but it can be called
+!     directly with a saving in time if  rcond  is not needed.
+!     (time for sgeco) = (1 + 9/n)*(time for sgefa) .
+!
+!     on entry
+!
+!        a       real(lda, n)
+!                the matrix to be factored.
+!
+!        lda     integer
+!                the leading dimension of the array  a .
+!
+!        n       integer
+!                the order of the matrix  a .
+!
+!     on return
+!
+!        a       an upper triangular matrix and the multipliers
+!                which were used to obtain it.
+!                the factorization can be written  a = l*u , where
+!                l  is a product of permutation and unit lower
+!                triangular matrices and  u  is upper triangular.
+!
+!        ipvt    integer(n)
+!                an integer vector of pivot indices.
+!
+!        info    integer
+!                = 0  normal value.
+!                = k  if  u(k,k) == 0.0E+00 .  this is not an error
+!                     condition for this subroutine, but it does
+!                     indicate that sgesl or sgedi will divide by zero
+!                     if called.  use  rcond  in sgeco for a reliable
+!                     indication of singularity.
+!
+!  references  dongarra j.j., bunch j.r., moler c.b., stewart g.w.,
+!                 *linpack users  guide*, siam, 1979.
+!
+  integer lda
+  integer n
+!
+  real a(lda,n)
+  integer info
+  integer ipvt(*)
+  integer isamax
+  integer j
+  integer k
+  integer l
+  real t
+!
+  info = 0
+
+  do k = 1, n-1
+!
+!  find l = pivot index
+!
+     l = isamax(n-k+1,a(k,k),1) + k - 1
+     ipvt(k) = l
+!
+!  zero pivot implies this column already triangularized
+!
+     if (a(l,k) == 0.0E+00 ) then
+
+       info = k
+!
+!  interchange if necessary
+!
+    else
+
+        if ( l /= k) then
+           t = a(l,k)
+           a(l,k) = a(k,k)
+           a(k,k) = t
+        end if
+!
+!  compute multipliers
+!
+        t = -1.0/a(k,k)
+        call sscal(n-k,t,a(k+1,k),1)
+!
+!  row elimination with column indexing
+!
+        do j = k+1, n
+           t = a(l,j)
+           if (l /= k) then
+             a(l,j) = a(k,j)
+             a(k,j) = t
+           end if
+           call saxpy(n-k,t,a(k+1,k),1,a(k+1,j),1)
+        end do
+
+     end if
+
+  end do
+
+  ipvt(n) = n
+  if (a(n,n) == 0.0) info = n
+  return
+end
+subroutine sgefs(a,lda,n,v,itask,ind,work,iwork,rcond)
+!
+!*******************************************************************************
+!
+!! SGEFS solves a general nxn system of single
+!    precision linear equations using linpack subroutines sgeco
+!    and sgesl.  that is, if a is an nxn real matrix and if x
+!    and b are real n-vectors, then sgefs solves the equation
+!
+!                          a*x=b.
+!
+!    the matrix a is first factored into upper and lower tri-
+!    angular matrices u and l using partial pivoting.  these
+!    factors and the pivoting information are used to find the
+!    solution vector x.  an approximate condition number is
+!    calculated to provide a rough estimate of the number of
+!    digits of accuracy in the computed solution.
+!
+!    if the equation a*x=b is to be solved for more than one vector
+!    b, the factoring of a does not need to be performed again and
+!    the option to only solve (itask == 2) will be faster for
+!    the succeeding solutions.  in this case, the contents of a,
+!    lda, n and iwork must not have been altered by the user follow-
+!    ing factorization (itask=1).  ind will not be changed by sgefs
+!    in this case.  other settings of itask are used to solve linear
+!    systems involving the transpose of a.
+!
+!  Parameters:
+!
+!    a      real(lda,n)
+!             on entry, the doubly subscripted array with dimension
+!               (lda,n) which contains the coefficient matrix.
+!             on return, an upper triangular matrix u and the
+!               multipliers necessary to construct a matrix l
+!               so that a=l*u.
+!    lda    integer
+!             the leading dimension of the array a.  lda must be great-
+!             er than or equal to n.  (terminal error message ind=-1)
+!    n      integer
+!             the order of the matrix a.  the first n elements of
+!             the array a are the elements of the first column of
+!             the  matrix a.  n must be greater than or equal to 1.
+!             (terminal error message ind=-2)
+!    v      real(n)
+!             on entry, the singly subscripted array(vector) of di-
+!               mension n which contains the right hand side b of a
+!               system of simultaneous linear equations a*x=b.
+!             on return, v contains the solution vector, x .
+!    itask  integer
+!             if itask=1, the matrix a is factored and then the
+!               linear equation is solved.
+!             if itask=2, the equation is solved using the existing
+!               factored matrix a and iwork.
+!             if itask=3, the matrix is factored and a'x=b is solved
+!             if itask=4, the transposed equation is solved using the
+!               existing factored matrix a and iwork.
+!             if itask < 1 or itask > 4, then the terminal error
+!               message ind=-3 is printed.
+!    ind    integer
+!             gt. 0  ind is a rough estimate of the number of digits
+!                     of accuracy in the solution, x.
+!             lt. 0  see error message corresponding to ind below.
+!    work   real(n)
+!             a singly subscripted array of dimension at least n.
+!    iwork  integer(n)
+!             a singly subscripted array of dimension at least n.
+!    rcond  real
+!             estimate of 1.0/cond(a)
+!
+!  error messages printed
+!
+!    ind=-1  fatal   n is greater than lda.
+!    ind=-2  fatal   n is less than 1.
+!    ind=-3  fatal   itask is less than 1 or greater than 4.
+!    ind=-4  fatal   the matrix a is computationally singular.
+!                         a solution has not been computed.
+!    ind=-10 warning    the solution has no apparent significance.
+!                         the solution may be inaccurate or the matrix
+!                         a may be poorly scaled.
+!
+!  references  subroutine sgefs was developed by group c-3, los alamos
+!                 scientific laboratory, los alamos, nm 87545.
+!                 the linpack subroutines used by sgefs are described in
+!                 detail in the *linpack users guide* published by
+!                 the society for industrial and applied mathematics
+!                 (siam) dated 1979.
+!
+  integer lda
+  integer n
+!
+  real a(lda,n)
+  integer ind
+  integer itask
+  integer iwork(*)
+  integer job
+  real rcond
+  real v(*)
+  real work(*)
+!
+  if ( lda < n ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SGEFS - Fatal error!'
+    write ( *, * ) '  LDA < N.'
+    return
+  end if
+
+  if ( n <= 0 ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SGEFS - Fatal error!'
+    write ( *, * ) '  N <= 0.'
+    return
+  end if
+
+  if ( itask < 1 ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SGEFS - Fatal error!'
+    write ( *, * ) '  ITASK < 1.'
+    return
+  end if
+
+  if ( itask > 4 ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SGEFS - Fatal error!'
+    write ( *, * ) '  ITASK > 4.'
+    return
+  end if
+!
+!  Factor the matrix.
+!
+  if ( itask == 1 .or. itask == 3 ) then
+
+    call sgeco ( a, lda, n, iwork, rcond, work )
+!
+!  Check for computational singularity.
+!
+    if ( rcond == 0.0E+00 ) then
+      write ( *, * ) ' '
+      write ( *, * ) 'SGEFS - Error!'
+      write ( *, * ) '  The matrix is compuationally singular.'
+      return
+    end if
+!
+!  Estimate the number of significant digits.
+!
+    ind = - int ( log10 ( epsilon ( rcond ) / rcond ) )
+
+    if (ind <= 0 ) then
+      write ( *, * ) ' '
+      write ( *, * ) 'SGEFS - Warning!'
+      write ( *, * ) '  Solution may have no significant digits.'
+    end if
+
+  end if
+
+  if ( itask <= 2 ) then
+    job = 0
+  else
+    job = 1
+  end if
+
+  call sgesl ( a, lda, n, iwork, v, job )
+
+  return
+end
+subroutine sgesl(a,lda,n,ipvt,b,job)
+!
+!*******************************************************************************
+!
+!! SGESL solves a linear system factored by SGEFA or SGECO.
+!
+!
+!     on entry
+!
+!        a       real(lda, n)
+!                the output from sgeco or sgefa.
+!
+!        lda     integer
+!                the leading dimension of the array  a .
+!
+!        n       integer
+!                the order of the matrix  a .
+!
+!        ipvt    integer(n)
+!                the pivot vector from sgeco or sgefa.
+!
+!        b       real(n)
+!                the right hand side vector.
+!
+!        job     integer
+!                = 0         to solve  a*x = b ,
+!                = nonzero   to solve  trans(a)*x = b  where
+!                            trans(a)  is the transpose.
+!
+!     on return
+!
+!        b       the solution vector  x .
+!
+!     error condition
+!
+!        a division by zero will occur if the input factor contains a
+!        zero on the diagonal.  technically, this indicates singularity,
+!        but it is often caused by improper arguments or improper
+!        setting of lda .  it will not occur if the subroutines are
+!        called correctly and if sgeco has set rcond > 0.0E+00
+!        or sgefa has set info == 0 .
+!
+!     to compute  inverse(a) * c  where  c  is a matrix
+!     with  p  columns
+!           call sgeco(a,lda,n,ipvt,rcond,z)
+!           if (rcond is too small) go to ...
+!           do j = 1, p
+!              call sgesl(a,lda,n,ipvt,c(1,j),0)
+!           end do
+!
+  integer lda
+  integer n
+!
+  real a(lda,n)
+  real b(n)
+  integer ipvt(*)
+  integer job
+  integer k
+  integer kb
+  integer l
+  real sdot
+  real t
+!
+  if (job == 0) then
+!
+!        job = 0 , solve  a * x = b
+!        first solve  l*y = b
+!
+     do k = 1, n-1
+        l = ipvt(k)
+        t = b(l)
+        if (l /= k) then
+           b(l) = b(k)
+           b(k) = t
+        end if
+        call saxpy(n-k,t,a(k+1,k),1,b(k+1),1)
+      end do
+!
+!  solve  u*x = y
+!
+     do k = n, 1, -1
+        b(k) = b(k)/a(k,k)
+        t = -b(k)
+        call saxpy(k-1,t,a(1,k),1,b(1),1)
+     end do
+
+  else
+!
+!        job = nonzero, solve  trans(a) * x = b
+!        first solve  trans(u)*y = b
+!
+     do k = 1, n
+       t = sdot(k-1,a(1,k),1,b(1),1)
+       b(k) = (b(k) - t)/a(k,k)
+     end do
+!
+!  Solve trans(l)*x = y
+!
+     do kb = 1, n-1
+        k = n - kb
+        b(k) = b(k) + sdot(n-k,a(k+1,k),1,b(k+1),1)
+        l = ipvt(k)
+        if (l /= k) then
+           t = b(l)
+           b(l) = b(k)
+           b(k) = t
+        end if
+     end do
+
+  end if
+
+  return
+end
+subroutine sinqb ( n, x, wsave )
+!
+!*******************************************************************************
+!
+!! SINQB computes the fast sine transform of quarter wave data.
+!
+!
+!  Discussion:
+!
+!    SINQB computes a sequence from its representation in terms of a sine
+!    series with odd wave numbers.
+!
+!    SINQF is the unnormalized inverse of SINQB since a call of SINQB
+!    followed by a call of SINQF will multiply the input sequence X by 4*N.
+!
+!    The array WSAVE must be initialized by calling SINQI.
+!
+!    The transform is defined by:
+!
+!      X_out(I) = sum ( 1 <= K <= N )
+!
+!        4 * X_in(K) * sin ( ( 2 * K - 1 ) * I * PI / ( 2 * N ) )
+!
+!  Modified:
+!
+!    12 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array to be transformed.  The
+!    method is more efficient when N is the product of small primes.
+!
+!    Input/output, real X(N).
+!    On input, the sequence to be transformed.
+!    On output, the transformed sequence.
+!
+!    Input, real WSAVE(3*N+15), a work array.  The WSAVE array must be
+!    initialized by calling SINQI.  A different WSAVE array must be used
+!    for each different value of N.
+!
+  integer n
+!
+  integer k
+  real wsave(3*n+15)
+  real x(n)
+!
+  if ( n < 1 ) then
+    return
+  end if
+
+  if ( n == 1 ) then
+    x(1) = 4.0E+00 * x(1)
+    return
+  end if
+
+  x(2:n:2) = -x(2:n:2)
+
+  call cosqb ( n, x, wsave )
+!
+!  Reverse the X vector.
+!
+  call rvec_reverse ( n, x )
+
+  return
+end
+subroutine sinqf ( n, x, wsave )
+!
+!*******************************************************************************
+!
+!! SINQF computes the fast sine transform of quarter wave data.
+!
+!
+!  Discussion:
+!
+!    SINQF computes the coefficients in a sine series representation with
+!    only odd wave numbers.
+!
+!    SINQB is the unnormalized inverse of SINQF since a call of SINQF
+!    followed by a call of SINQB will multiply the input sequence X by 4*N.
+!
+!    The array WSAVE, which is used by SINQF, must be initialized by
+!    calling SINQI.
+!
+!    The transform is defined by:
+!
+!      X_out(I) = (-1)**(I-1) * X_in(N) + sum ( 1 <= K <= N-1 )
+!        2 * X_in(K) * sin ( ( 2 * I - 1 ) * K * PI / ( 2 * N ) )
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array to be transformed.  The
+!    method is more efficient when N is the product of small primes.
+!
+!    Input/output, real X(N).
+!    On input, the sequence to be transformed.
+!    On output, the transformed sequence.
+!
+!    Input, real WSAVE(3*N+15), a work array.  The WSAVE array must be
+!    initialized by calling SINQI.  A different WSAVE array must be used
+!    for each different value of N.
+!
+  integer n
+!
+  integer k
+  real wsave(3*n+15)
+  real x(n)
+!
+  if ( n <= 1 ) then
+    return
+  end if
+!
+!  Reverse the X vector.
+!
+  call rvec_reverse ( n, x )
+
+  call cosqf ( n, x, wsave )
+
+  x(2:n:2) = -x(2:n:2)
+
+  return
+end
+subroutine sinqi ( n, wsave )
+!
+!*******************************************************************************
+!
+!! SINQI initializes WSAVE, used in SINQF and SINQB.
+!
+!
+!  Discussion:
+!
+!    The prime factorization of N together with a tabulation of the
+!    trigonometric functions are computed and stored in WSAVE.
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the array to be transformed.
+!
+!    Output, real WSAVE(3*N+15), contains data, dependent on the value
+!    of N, which is necessary for the SINQF or SINQB routines.
+!
+  integer n
+!
+  real wsave(3*n+15)
+!
+  call cosqi ( n, wsave )
+
+  return
+end
+subroutine sint ( n, x, wsave )
+!
+!*******************************************************************************
+!
+!! SINT computes the discrete Fourier sine transform of an odd sequence.
+!
+!
+!  Discussion:
+!
+!    SINT is the unnormalized inverse of itself since a call of SINT
+!    followed by another call of SINT will multiply the input sequence
+!    X by 2*(N+1).
+!
+!    The array WSAVE must be initialized by calling SINTI.
+!
+!    The transform is defined by:
+!
+!      X_out(I) = sum ( 1 <= K <= N )
+!        2 * X_in(K) * sin ( K * I * PI / ( N + 1 ) )
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.
+!    The method is most efficient when N+1 is the product of small primes.
+!
+!    Input/output, real X(N).
+!    On input, the sequence to be transformed.
+!    On output, the transformed sequence.
+!
+!    Input, real WSAVE((5*N+30)/2), a work array.  The WSAVE array must be
+!    initialized by calling SINTI.  A different WSAVE array must be used
+!    for each different value of N.
+!
+  integer n
+!
+  integer iw1
+  integer iw2
+  integer iw3
+  real wsave((5*n+30)/2)
+  real x(n)
+!
+  write ( *, * ) 'DEBUG: entered SINT'
+  iw1 = n / 2 + 1
+  iw2 = iw1 + n + 1
+  iw3 = iw2 + n + 1
+
+  call sint1 ( n, x, wsave(1), wsave(iw1), wsave(iw2), wsave(iw3) )
+  write ( *, * ) 'DEBUG: leaving SINT'
+  return
+end
+subroutine sint1 ( n, war, was, xh, x, ifac )
+!
+!*******************************************************************************
+!
+!! SINT1 is a lower level routine used by SINT.
+!
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.
+!
+!    Input/output, real WAR(N).
+!    On input, the sequence to be transformed.
+!    On output, the transformed sequence.
+!
+!    Input, real WAS(N/2).
+!
+!    Input, real XH(N).
+!
+!    Input, real X(N).
+!
+!    Input, integer IFAC(15).
+!    IFAC(1) = N, the number that was factored.
+!    IFAC(2) = NF, the number of factors.
+!    IFAC(3:2+NF), the factors.
+!
+  integer n
+!
+  integer i
+  integer ifac(15)
+  integer k
+  integer kc
+  integer ns2
+  real, parameter :: sqrt3 = 1.73205080756888E+00
+  real t1
+  real t2
+  real war(n)
+  real was(n/2)
+  real x(n)
+  real xh(n)
+  real xhold
+!
+  write ( *, * ) 'DEBUG: entered SINT1'
+  xh(1:n) = war(1:n)
+  war(1:n) = x(1:n)
+
+  if ( n <= 1 ) then
+    xh(1) = 2.0E+00 * xh(1)
+    return
+  end if
+
+  if ( n == 2 ) then
+    xhold = sqrt3 * ( xh(1) + xh(2) )
+    xh(2) = sqrt3 * ( xh(1) - xh(2) )
+    xh(1) = xhold
+    return
+  end if
+
+  ns2 = n / 2
+  x(1) = 0.0E+00
+
+  do k = 1, n/2
+    t1 = xh(k) - xh(n+1-k)
+    t2 = was(k) * ( xh(k) + xh(n+1-k) )
+    x(k+1) = t1 + t2
+    x(n+2-k) = t2 - t1
+  end do
+
+  if ( mod ( n, 2 ) /= 0 ) then
+    x(n/2+2) = 4.0E+00 * xh(n/2+1)
+  end if
+  write ( *, * ) 'DEBUG: calling RFFTF1'
+  call rfftf1 ( n+1, x, xh, war, ifac )
+  write ( *, * ) 'DEBUG: back from RFFTF1'
+  xh(1) = 0.5E+00 * x(1)
+  do i = 3, n, 2
+    xh(i-1) = -x(i)
+    xh(i) = xh(i-2) + x(i-1)
+  end do
+
+  if ( mod ( n, 2 ) == 0 ) then
+    xh(n) = -x(n+1)
+  end if
+
+  x(1:n) = war(1:n)
+  war(1:n) = xh(1:n)
+
+  write ( *, * ) 'DEBUG: leaving SINT1'
+  return
+end
+subroutine sinti ( n, wsave )
+!
+!*******************************************************************************
+!
+!! SINTI initializes WSAVE, used in SINT.
+!
+!
+!  Discussion:
+!
+!    The prime factorization of N together with a tabulation of the
+!    trigonometric functions are computed and stored in WSAVE.
+!
+!  Modified:
+!
+!    09 March 2001
+!
+!  Author:
+!
+!    Paul Swarztrauber,
+!    National Center for Atmospheric Research
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!    P N Swarztrauber,
+!    Vectorizing the FFT's,
+!    in Parallel Computations (G. Rodrigue, editor),
+!    Academic Press, 1982, pages 51-83.
+!
+!    B L Buzbee,
+!    The SLATEC Common Math Library,
+!    in Sources and Development of Mathematical Software (W. Cowell, editor),
+!    Prentice Hall, 1984, pages 302-318.
+!
+!  Parameters:
+!
+!    Input, integer N, the length of the sequence to be transformed.
+!    The method is most efficient when N+1 is a product of small primes.
+!
+!    Output, real WSAVE((5*N+30)/2), contains data, dependent on the value
+!    of N, which is necessary for the SINT routine.
+!
+  integer n
+!
+  real dt
+  integer k
+  real pimach
+  real wsave((5*n+30)/2)
+!
+  if ( n <= 1 ) then
+    return
+  end if
+
+  dt = pimach() / real ( n + 1 )
+
+  do k = 1, n/2
+    wsave(k) = 2.0E+00 * sin ( real ( k ) * dt )
+  end do
+
+  call rffti ( n+1, wsave((n/2)+1) )
+
+  return
+end
+subroutine sndofd(nr,n,xpls,fcn,fpls,a,sx,rnoise,stepsz,anbr)
+!
+!*******************************************************************************
+!
+!! SNDOFD approximates a Hessian with a second order finite difference.
+!
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! xpls(n)      --> new iterate:   x[k]
+! fcn          --> name of subroutine to evaluate function
+! fpls         --> function value at new iterate, f(xpls)
+! a(n,n)      <--  finite difference approximation to hessian
+!                  only lower triangular matrix and diagonal
+!                  are returned
+! sx(n)        --> diagonal scaling matrix for x
+! rnoise       --> relative noise in fname [f(x)]
+! stepsz(n)    --> workspace (stepsize in i-th component direction)
+! anbr(n)      --> workspace (neighbor in i-th direction)
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real anbr(n)
+  real fhat
+  real fpls
+  integer i
+  integer j
+  real ov3
+  real rnoise
+  real stepsz(n)
+  real sx(n)
+  real xpls(n)
+  real xtmpi
+  real xtmpj
+!
+  external fcn
+!
+! find i-th stepsize and evaluate neighbor in direction
+! of i-th unit vector.
+!
+  ov3 = 1.0E+00 / 3.0E+00
+
+  do i = 1, n
+    stepsz(i)=rnoise**ov3 * max(abs(xpls(i)),1.0E+00 / sx(i) )
+    xtmpi=xpls(i)
+    xpls(i)=xtmpi+stepsz(i)
+    call fcn(n,xpls,anbr(i))
+    xpls(i)=xtmpi
+  end do
+!
+!  calculate column i of a
+!
+  do i = 1, n
+
+    xtmpi=xpls(i)
+    xpls(i)=xtmpi+2.0*stepsz(i)
+    call fcn(n,xpls,fhat)
+    a(i,i)=((fpls-anbr(i))+(fhat-anbr(i)))/(stepsz(i)*stepsz(i))
+!
+! calculate sub-diagonal elements of column
+!
+    if ( i /= n ) then
+
+      xpls(i)=xtmpi+stepsz(i)
+
+      do j=i+1,n
+        xtmpj=xpls(j)
+        xpls(j)=xtmpj+stepsz(j)
+        call fcn(n,xpls,fhat)
+        a(j,i)=((fpls-anbr(i))+(fhat-anbr(j)))/(stepsz(i)*stepsz(j))
+        xpls(j)=xtmpj
+      end do
+
+    end if
+
+    xpls(i) = xtmpi
+
+  end do
+
+  return
+end
+function snrm2 ( n, x, incx )
+!
+!*******************************************************************************
+!
+!! SNRM2 computes the Euclidean norm of a vector.
+!
+!
+!  Discussion:
+!
+!    The original SNRM2 algorithm is accurate but written in a bizarre,
+!    unreadable and obsolete format.  This version goes for clarity.
+!
+!  Modified:
+!
+!    01 June 2000
+!
+!  Reference:
+!
+!    Lawson, Hanson, Kincaid, Krogh,
+!    Basic Linear Algebra Subprograms for Fortran Usage,
+!    Algorithm 539,
+!    ACM Transactions on Mathematical Software,
+!    Volume 5, Number 3, September 1979, pages 308-323.
+!
+!  Author:
+!
+!    John Burkardt
+!
+!  Parameters:
+!
+!    Input, integer N, the number of entries in the vector.
+!
+!    Input, real X(*), the vector whose norm is to be computed.
+!
+!    Input, integer INCX, the increment between successive entries of X.
+!
+!    Output, real SNRM2, the Euclidean norm of X.
+!
+  integer i
+  integer incx
+  integer ix
+  integer n
+  real samax
+  real snrm2
+  real stemp
+  real x(*)
+  real xmax
+!
+  if ( n <= 0 ) then
+
+    snrm2 = 0.0E+00
+
+  else
+
+    xmax = samax ( n, x, incx )
+
+    if ( xmax == 0.0E+00 ) then
+
+      snrm2 = 0.0E+00
+
+    else
+
+      if ( incx >= 0 ) then
+        ix = 1
+      else
+        ix = ( - n + 1 ) * incx + 1
+      end if
+
+      stemp = 0.0E+00
+      do i = 1, n
+        stemp = stemp + ( x(ix) / xmax )**2
+        ix = ix + incx
+      end do
+
+      snrm2 = xmax * sqrt ( stemp )
+
+    end if
+
+  end if
+
+  return
+end
+subroutine snsq(fcn,jac,iopt,n,x,fvec,fjac,ldfjac,xtol,maxfev,ml, &
+  mu,epsfcn,diag,mode,factor,nprint,info,nfev,njev,r,lr,qtf,wa1, &
+  wa2,wa3,wa4)
+!
+!*******************************************************************************
+!
+!! SNSQ finds a zero of a system of n nonlinear functions in n variables.
+!
+!
+!  by a modification of the powell
+!            hybrid method.  this code is the combination of the minpack
+!            codes (argonne) hybrd and hybrdj.
+!
+!  Description:
+!
+! 1. purpose.
+!
+!       the purpose of snsq is to find a zero of a system of n non-
+!       linear functions in n variables by a modification of the powell
+!       hybrid method.  the user must provide a subroutine which calcu-
+!       lates the functions.  the user has the option of either to
+!       provide a subroutine which calculates the jacobian or to let the
+!       code calculate it by a forward-difference approximation.
+!       this code is the combination of the minpack codes (argonne)
+!       hybrd and hybrdj.
+!
+!
+! 2. subroutine and type statements.
+!
+!     subroutine snsq(fcn,jac,iopt,n,x,fvec,fjac,ldfjac,xtol,maxfev,
+!      *                 ml,mu,epsfcn,diag,mode,factor,nprint,info,nfev,
+!      *                 njev,r,lr,qtf,wa1,wa2,wa3,wa4)
+!       integer iopt,n,maxfev,ml,mu,mode,nprint,info,nfev,ldfjac,njev,lr
+!       real xtol,epsfcn,factor
+!       real x(n),fvec(n),diag(n),fjac(ldfjac,n),r(lr),qtf(n),
+!      *     wa1(n),wa2(n),wa3(n),wa4(n)
+!       external fcn,jac
+!
+!
+! 3. parameters.
+!
+!       parameters designated as input parameters must be specified on
+!       entry to snsq and are not changed on exit, while parameters
+!       designated as output parameters need not be specified on entry
+!       and are set to appropriate values on exit from snsq.
+!
+!       fcn is the name of the user-supplied subroutine which calculates
+!         the functions.  fcn must be declared in an external statement
+!         in the user calling program, and should be written as follows.
+!
+!       subroutine fcn(n,x,fvec,iflag)
+!         integer n,iflag
+!         real x(n),fvec(n)
+!
+!         calculate the functions at x and
+!         return this vector in fvec.
+!
+!         return
+!       end
+!
+!         the value of iflag should not be changed by fcn unless the
+!         user wants to terminate execution of snsq.  in this case, set
+!         iflag to a negative integer.
+!
+!       jac is the name of the user-supplied subroutine which calculates
+!         the jacobian.  if iopt=1, then jac must be declared in an
+!         external statement in the user calling program, and should be
+!         written as follows.
+!
+!       subroutine jac(n,x,fvec,fjac,ldfjac,iflag)
+!         integer n,ldfjac,iflag
+!         real x(n),fvec(n),fjac(ldfjac,n)
+!
+!         calculate the jacobian at x and return this
+!         matrix in fjac.  fvec contains the function
+!         values at x and should not be altered.
+!
+!         return
+!       end
+!
+!         the value of iflag should not be changed by jac unless the
+!         user wants to terminate execution of snsq.  in this case, set
+!         iflag to a negative integer.
+!
+!         if iopt=2, jac can be ignored (treat it as a dummy argument).
+!
+!       iopt is an input variable which specifies how the jacobian will
+!         be calculated.  if iopt=1, then the user must supply the
+!         jacobian through the subroutine jac.  if iopt=2, then the
+!         code will approximate the jacobian by forward-differencing.
+!
+!       n is a positive integer input variable set to the number of
+!       functions and variables.
+!
+!       x is an array of length n.  on input, x must contain an initial
+!         estimate of the solution vector.  on output, x contains the
+!         final estimate of the solution vector.
+!
+!       fvec is an output array of length n which contains the functions
+!         evaluated at the output x.
+!
+!       fjac is an output n by n array which contains the orthogonal
+!         matrix q produced by the qr factorization of the final approx-
+!         imate jacobian.
+!
+!       ldfjac is a positive integer input variable not less than n
+!         which specifies the leading dimension of the array fjac.
+!
+!       xtol is a non-negative input variable.  termination occurs when
+!         the relative error between two consecutive iterates is at most
+!         xtol.  therefore, xtol measures the relative error desired in
+!         the approximate solution.  section 4 contains more details
+!         about xtol.
+!
+!       maxfev is a positive integer input variable.  termination occurs
+!         when the number of calls to fcn is at least maxfev by the end
+!         of an iteration.
+!
+!       ml is a non-negative integer input variable which specifies the
+!         number of subdiagonals within the band of the jacobian matrix.
+!         if the jacobian is not banded or iopt=1, set ml to at
+!         least n - 1.
+!
+!       mu is a non-negative integer input variable which specifies the
+!         number of superdiagonals within the band of the jacobian
+!         matrix.  if the jacobian is not banded or iopt=1, set mu to at
+!         least n - 1.
+!
+!       epsfcn is an input variable used in determining a suitable step
+!         for the forward-difference approximation.  this approximation
+!         assumes that the relative errors in the functions are of the
+!         order of epsfcn.  if epsfcn is less than the machine preci-
+!         sion, it is assumed that the relative errors in the functions
+!         are of the order of the machine precision.  if iopt=1, then
+!         epsfcn can be ignored (treat it as a dummy argument).
+!
+!       diag is an array of length n.  if mode = 1 (see below), diag is
+!         internally set.  if mode = 2, diag must contain positive
+!         entries that serve as implicit (multiplicative) scale factors
+!         for the variables.
+!
+!       mode is an integer input variable.  if mode = 1, the variables
+!         will be scaled internally.  if mode = 2, the scaling is speci-
+!         fied by the input diag.  other values of mode are equivalent
+!         to mode = 1.
+!
+!       factor is a positive input variable used in determining the ini-
+!         tial step bound.  this bound is set to the product of factor
+!         and the euclidean norm of diag*x if nonzero, or else to factor
+!         itself.  in most cases factor should lie in the interval
+!         (.1,100.).  100. is a generally recommended value.
+!
+!       nprint is an integer input variable that enables controlled
+!         printing of iterates if it is positive.  in this case, fcn is
+!         called with iflag = 0 at the beginning of the first iteration
+!         and every nprint iteration thereafter and immediately prior
+!         to return, with x and fvec available for printing. appropriate
+!         print statements must be added to fcn(see example).  if nprint
+!         is not positive, no special calls of fcn with iflag = 0 are
+!         made.
+!
+!       info is an integer output variable.  if the user has terminated
+!         execution, info is set to the (negative) value of iflag.  see
+!         description of fcn and jac. otherwise, info is set as follows.
+!
+!         info = 0  improper input parameters.
+!
+!         info = 1  relative error between two consecutive iterates is
+!                   at most xtol.
+!
+!         info = 2  number of calls to fcn has reached or exceeded
+!                   maxfev.
+!
+!         info = 3  xtol is too small.  no further improvement in the
+!                   approximate solution x is possible.
+!
+!         info = 4  iteration is not making good progress, as measured
+!                   by the improvement from the last five jacobian eval-
+!                   uations.
+!
+!         info = 5  iteration is not making good progress, as measured
+!                   by the improvement from the last ten iterations.
+!
+!         sections 4 and 5 contain more details about info.
+!
+!       nfev is an integer output variable set to the number of calls to
+!         fcn.
+!
+!       njev is an integer output variable set to the number of calls to
+!         jac. (if iopt=2, then njev is set to zero.)
+!
+!       r is an output array of length lr which contains the upper
+!         triangular matrix produced by the qr factorization of the
+!         final approximate jacobian, stored rowwise.
+!
+!       lr is a positive integer input variable not less than
+!         (n*(n+1))/2.
+!
+!       qtf is an output array of length n which contains the vector
+!         (q transpose)*fvec.
+!
+!       wa1, wa2, wa3, and wa4 are work arrays of length n.
+!
+!
+! 4. successful completion.
+!
+!       the accuracy of snsq is controlled by the convergence parameter
+!       xtol.  this parameter is used in a test which makes a comparison
+!       between the approximation x and a solution xsol.  snsq termi-
+!       nates when the test is satisfied.  if the convergence parameter
+!       is less than the machine precision (as defined by the function
+!       r1mach(4)), then snsq only attempts to satisfy the test
+!       defined by the machine precision.  further progress is not
+!       usually possible.
+!
+!       the test assumes that the functions are reasonably well behaved,
+!       and, if the jacobian is supplied by the user, that the functions
+!       and the jacobian are coded consistently.  if these conditions
+!       are not satisfied, then snsq may incorrectly indicate conver-
+!       gence.  the coding of the jacobian can be checked by the
+!       subroutine chkder. if the jacobian is coded correctly or iopt=2,
+!       then the validity of the answer can be checked, for example, by
+!       rerunning snsq with a tighter tolerance.
+!
+!       convergence test.  if snrm2(z) denotes the euclidean norm of a
+!         vector z and d is the diagonal matrix whose entries are
+!         defined by the array diag, then this test attempts to guaran-
+!         tee that
+!
+!               snrm2(d*(x-xsol)) <= xtol*snrm2(d*xsol).
+!
+!         if this condition is satisfied with xtol = 10**(-k), then the
+!         larger components of d*x have k significant decimal digits and
+!         info is set to 1.  there is a danger that the smaller compo-
+!         nents of d*x may have large relative errors, but the fast rate
+!         of convergence of snsq usually avoids this possibility.
+!         unless high precision solutions are required, the recommended
+!         value for xtol is the square root of the machine precision.
+!
+!
+! 5. unsuccessful completion.
+!
+!       unsuccessful termination of snsq can be due to improper input
+!       parameters, arithmetic interrupts, an excessive number of func-
+!       tion evaluations, or lack of good progress.
+!
+!       improper input parameters.  info is set to 0 if iopt < 1,
+!         or iopt > 2, or n <= 0, or ldfjac < n, or
+!         xtol < 0.0, or maxfev <= 0, or ml < 0, or mu < 0,
+!         or factor <= 0.0, or lr < (n*(n+1))/2.
+!
+!       arithmetic interrupts.  if these interrupts occur in the fcn
+!         subroutine during an early stage of the computation, they may
+!         be caused by an unacceptable choice of x by snsq.  in this
+!         case, it may be possible to remedy the situation by rerunning
+!         snsq with a smaller value of factor.
+!
+!       excessive number of function evaluations.  a reasonable value
+!         for maxfev is 100*(n+1) for iopt=1 and 200*(n+1) for iopt=2.
+!         if the number of calls to fcn reaches maxfev, then this
+!         indicates that the routine is converging very slowly as
+!         measured by the progress of fvec, and info is set to 2.  this
+!         situation should be unusual because, as indicated below, lack
+!         of good progress is usually diagnosed earlier by snsq,
+!         causing termination with info = 4 or info = 5.
+!
+!       lack of good progress.  snsq searches for a zero of the system
+!         by minimizing the sum of the squares of the functions.  in so
+!         doing, it can become trapped in a region where the minimum
+!         does not correspond to a zero of the system and, in this situ-
+!         ation, the iteration eventually fails to make good progress.
+!         in particular, this will happen if the system does not have a
+!         zero.  if the system has a zero, rerunning snsq from a dif-
+!         ferent starting point may be helpful.
+!
+!
+! 6. characteristics of the algorithm.
+!
+!       snsq is a modification of the powell hybrid method.  two of its
+!       main characteristics involve the choice of the correction as a
+!       convex combination of the newton and scaled gradient directions,
+!       and the updating of the jacobian by the rank-1 method of broy-
+!       den.  the choice of the correction guarantees (under reasonable
+!       conditions) global convergence for starting points far from the
+!       solution and a fast rate of convergence.  the jacobian is
+!       calculated at the starting point by either the user-supplied
+!       subroutine or a forward-difference approximation, but it is not
+!       recalculated until the rank-1 method fails to produce satis-
+!       factory progress.
+!
+!       timing.  the time required by snsq to solve a given problem
+!         depends on n, the behavior of the functions, the accuracy
+!         requested, and the starting point.  the number of arithmetic
+!         operations needed by snsq is about 11.5*(n**2) to process
+!         each evaluation of the functions (call to fcn) and 1.3*(n**3)
+!         to process each evaluation of the jacobian (call to jac,
+!         if iopt = 1).  unless fcn and jac can be evaluated quickly,
+!         the timing of snsq will be strongly influenced by the time
+!         spent in fcn and jac.
+!
+!       storage.  snsq requires (3*n**2 + 17*n)/2 single precision
+!         storage locations, in addition to the storage required by the
+!         program.  there are no internally declared storage arrays.
+!
+!
+! 7. example.
+!
+!       the problem is to determine the values of x(1), x(2), ..., x(9),
+!       which solve the system of tridiagonal equations
+!
+!       (3-2*x(1))*x(1)           -2*x(2)                   = -1
+!               -x(i-1) + (3-2*x(i))*x(i)         -2*x(i+1) = -1, i=2-8
+!                                   -x(8) + (3-2*x(9))*x(9) = -1
+! c     **********
+!
+!       program test(input,output,tape6=output)
+! c
+! c     driver for snsq example.
+! c
+!       integer j,iopt,n,maxfev,ml,mu,mode,nprint,info,nfev,ldfjac,lr,
+!      *        nwrite
+!       real xtol,epsfcn,factor,fnorm
+!       real x(9),fvec(9),diag(9),fjac(9,9),r(45),qtf(9),
+!      *     wa1(9),wa2(9),wa3(9),wa4(9)
+!       real snrm2,r1mach
+!       external fcn
+!       data nwrite /6/
+!
+!       iopt = 2
+!       n = 9
+! c
+! c     the following starting values provide a rough solution.
+! c
+!       do j = 1, 9
+!          x(j) = -1.0E+00
+!       end do
+!
+!       ldfjac = 9
+!       lr = 45
+! c
+! c     set xtol to the square root of the machine precision.
+! c     unless high precision solutions are required,
+! c     this is the recommended setting.
+! c
+!       xtol = sqrt(r1mach(4))
+! c
+!       maxfev = 2000
+!       ml = 1
+!       mu = 1
+!       epsfcn = 0.0E+00
+!       mode = 2
+!       do j = 1, 9
+!          diag(j) = 1.0E+00
+!       end do
+!       factor = 1.e2
+!       nprint = 0
+! c
+!       call snsq(fcn,jac,iopt,n,x,fvec,fjac,ldfjac,xtol,maxfev,ml,mu,
+!      *           epsfcn,diag,mode,factor,nprint,info,nfev,njev,
+!      *           r,lr,qtf,wa1,wa2,wa3,wa4)
+!       fnorm = snrm2(n,fvec,1)
+!       write (nwrite,1000) fnorm,nfev,info,(x(j),j=1,n)
+!       stop
+!  1000 format (5x,' final l2 norm of the residuals',e15.7 //
+!      *        5x,' number of function evaluations',i10 //
+!      *        5x,' exit parameter',16x,i10 //
+!      *        5x,' final approximate solution' // (5x,3e15.7))
+!       end
+!       subroutine fcn(n,x,fvec,iflag)
+!       integer n,iflag
+!       real x(n),fvec(n)
+!       integer k
+!       real temp,temp1,temp2
+! c
+!       if (iflag /= 0) go to 5
+! c
+! c     insert print statements here when nprint is positive.
+! c
+!       return
+!     5 continue
+!       do k = 1, n
+!          temp = (3.0E+00 - 2.0*x(k))*x(k)
+!          temp1 = 0.0E+00
+!          if (k /= 1) temp1 = x(k-1)
+!          temp2 = 0.0E+00
+!          if (k /= n) temp2 = x(k+1)
+!          fvec(k) = temp - temp1 - 2.0*temp2 + 1.0E+00
+!       end do
+!       return
+!       end
+!
+!       results obtained with different compilers or machines
+!       may be slightly different.
+!
+!       final l2 norm of the residuals  0.1192636e-07
+!
+!       number of function evaluations        14
+!
+!       exit parameter                         1
+!
+!       final approximate solution
+!
+!       -0.5706545e+00 -0.6816283e+00 -0.7017325e+00
+!       -0.7042129e+00 -0.7013690e+00 -0.6918656e+00
+!       -0.6657920e+00 -0.5960342e+00 -0.4164121e+00
+!
+!  references  powell, m. j. d.
+!                 a hybrid method for nonlinear equations.
+!                 numerical methods for nonlinear algebraic equations,
+!                 p. rabinowitz, editor.  gordon and breach, 1970.
+!
+  integer ldfjac
+  integer lr
+  integer n
+!
+  real actred
+  real delta
+  real diag(n)
+  real epsfcn
+  real epsmch
+  real factor
+  real fjac(ldfjac,n)
+  real fnorm
+  real fnorm1
+  real fvec(n)
+  integer i
+  integer iflag
+  integer info
+  integer iopt
+  integer iter
+  integer iwa(1)
+  integer j
+  logical jeval
+  integer jm1
+  integer l
+  integer maxfev
+  integer ml
+  integer mode
+  integer mu
+  integer ncfail
+  integer ncsuc
+  integer nfev
+  integer njev
+  integer nprint
+  integer nslow1
+  integer nslow2
+  real p001
+  real p0001
+  real, parameter :: p1 = 0.1E+00
+  real, parameter :: p5 = 0.5E+00
+  real pnorm
+  real prered
+  real qtf(n)
+  real r(lr)
+  real r1mach
+  real ratio
+  logical sing
+  real snrm2
+  real sum
+  real temp
+  real xnorm
+  real wa1(n)
+  real wa2(n)
+  real wa3(n)
+  real wa4(n)
+  real x(n)
+  real xtol
+!
+  external fcn
+  external jac
+!
+  data p001,p0001 /1.0e-03,1.0e-04/
+!
+  epsmch = epsilon ( epsmch )
+  info = 0
+  iflag = 0
+  nfev = 0
+  njev = 0
+
+  if (iopt < 1 .or. iopt > 2 ) then
+    go to 300
+  else if ( n <= 0 .or. xtol < 0.0E+00 .or. maxfev <= 0 ) then
+    go to 300
+  else if ( ml < 0 .or. mu < 0 .or. factor <= 0.0E+00 ) then
+    go to 300
+  else if ( ldfjac < n .or. lr < (n*(n + 1))/2) then
+    go to 300
+  end if
+
+  if ( mode /= 2 ) then
+    go to 20
+  end if
+
+  do j = 1, n
+    if ( diag(j) <= 0.0E+00 ) then
+      go to 300
+    end if
+  end do
+
+   20 continue
+!
+!  evaluate the function at the starting point and calculate its norm.
+!
+  iflag = 1
+  call fcn ( n, x, fvec, iflag )
+  nfev = 1
+  if (iflag < 0) go to 300
+  fnorm = snrm2 ( n, fvec, 1 )
+!
+!  initialize iteration counter and monitors.
+!
+  iter = 1
+  ncsuc = 0
+  ncfail = 0
+  nslow1 = 0
+  nslow2 = 0
+!
+!  beginning of the outer loop.
+!
+   30 continue
+     jeval = .true.
+!
+!  calculate the jacobian matrix.
+!
+     if ( iopt /= 2 ) then
+!
+!  user supplies jacobian
+!
+        call jac(n,x,fvec,fjac,ldfjac,iflag)
+        njev = njev+1
+!
+!  code approximates the jacobian
+!
+      else
+
+        iflag = 2
+
+        call fdjac1 ( fcn, n, x, fvec, fjac, ldfjac, iflag, ml, mu, epsfcn )
+
+        nfev = nfev + min(ml+mu+1,n)
+
+     end if
+
+     if (iflag < 0) go to 300
+!
+!  compute the qr factorization of the jacobian.
+!
+     call qrfac(n,n,fjac,ldfjac,.false.,iwa,1,wa1,wa2,wa3)
+!
+!  on the first iteration and if mode is 1, scale according
+!  to the norms of the columns of the initial jacobian.
+!
+     if (iter /= 1) go to 70
+     if (mode == 2) go to 50
+     diag(1:n) = wa2(1:n)
+     do j = 1, n
+       if (wa2(j) == 0.0) diag(j) = 1.0E+00
+     end do
+
+   50    continue
+!
+!  on the first iteration, calculate the norm of the scaled x
+!  and initialize the step bound delta.
+!
+     wa3(1:n) = diag(1:n) * x(1:n)
+     xnorm = snrm2(n,wa3,1)
+     delta = factor*xnorm
+     if (delta == 0.0) delta = factor
+
+70   continue
+!
+!  form (q transpose)*fvec and store in qtf.
+!
+     qtf(1:n) = fvec(1:n)
+
+     do j = 1, n
+
+       if ( fjac(j,j) /= 0.0E+00 ) then
+
+        sum = 0.0E+00
+        do i = j, n
+           sum = sum + fjac(i,j)*qtf(i)
+        end do
+
+        temp = -sum/fjac(j,j)
+        do i = j, n
+           qtf(i) = qtf(i) + fjac(i,j)*temp
+        end do
+
+      end if
+
+    end do
+!
+!  copy the triangular factor of the qr factorization into r.
+!
+     sing = .false.
+
+     do j = 1, n
+
+        l = j
+        jm1 = j - 1
+        do i = 1, jm1
+           r(l) = fjac(i,j)
+           l = l + n - i
+        end do
+        r(l) = wa1(j)
+        if (wa1(j) == 0.0) sing = .true.
+
+     end do
+!
+!  accumulate the orthogonal factor in fjac.
+!
+     call qform(n,n,fjac,ldfjac,wa1)
+!
+!  rescale if necessary.
+!
+     if (mode == 2) go to 170
+
+     do j = 1, n
+       diag(j) = max (diag(j),wa2(j))
+     end do
+
+  170    continue
+!
+!  beginning of the inner loop.
+!
+  180    continue
+
+!
+!  if requested, call fcn to enable printing of iterates.
+!
+        if (nprint > 0) then
+          iflag = 0
+          if (mod(iter-1,nprint) == 0) call fcn(n,x,fvec,iflag)
+          if (iflag < 0) go to 300
+        end if
+!
+!  determine the direction p.
+!
+        call dogleg ( n, r, lr, diag, qtf, delta, wa1, wa2, wa3 )
+
+!
+!  store the direction p and x + p. calculate the norm of p.
+!
+        wa1(1:n) = -wa1(1:n)
+        wa2(1:n) = x(1:n) + wa1(1:n)
+        wa3(1:n) = diag(1:n)*wa1(1:n)
+        pnorm = snrm2(n,wa3,1)
+!
+!  on the first iteration, adjust the initial step bound.
+!
+        if (iter == 1) delta = min (delta,pnorm)
+!
+!  Evaluate the function at x + p and calculate its norm.
+!
+        iflag = 1
+        call fcn(n,wa2,wa4,iflag)
+        nfev = nfev + 1
+        if (iflag < 0) go to 300
+        fnorm1 = snrm2(n,wa4,1)
+!
+!  Compute the scaled actual reduction.
+!
+        actred = - 1.0E+00
+        if (fnorm1 < fnorm) actred = 1.0E+00 - (fnorm1/fnorm)**2
+!
+!  compute the scaled predicted reduction.
+!
+        l = 1
+        do i = 1, n
+           sum = 0.0E+00
+           do j = i, n
+              sum = sum + r(l)*wa1(j)
+              l = l + 1
+           end do
+           wa3(i) = qtf(i) + sum
+        end do
+
+        temp = snrm2(n,wa3,1)
+        prered = 0.0E+00
+        if (temp < fnorm) prered = 1.0E+00 - (temp/fnorm)**2
+!
+!  Compute the ratio of the actual to the predicted reduction.
+!
+        ratio = 0.0E+00
+        if (prered > 0.0) ratio = actred/prered
+!
+!  update the step bound.
+!
+        if ( ratio < p1 ) then
+
+           ncsuc = 0
+           ncfail = ncfail + 1
+           delta = p5*delta
+
+        else
+
+           ncfail = 0
+           ncsuc = ncsuc + 1
+
+           if (ratio >= p5 .or. ncsuc > 1) then
+             delta = max (delta,pnorm/p5)
+           end if
+
+           if (abs(ratio-1.0) <= p1) delta = pnorm/p5
+
+        end if
+!
+!  successful iteration. update x, fvec, and their norms.
+!
+        if ( ratio >= p0001 ) then
+          x(1:n) = wa2(1:n)
+          wa2(1:n) = diag(1:n)*x(1:n)
+          fvec(1:n) = wa4(1:n)
+          xnorm = snrm2(n,wa2,1)
+          fnorm = fnorm1
+          iter = iter + 1
+        end if
+!
+!  determine the progress of the iteration.
+!
+        nslow1 = nslow1 + 1
+        if (actred >= p001) nslow1 = 0
+        if (jeval) nslow2 = nslow2 + 1
+        if (actred >= p1) nslow2 = 0
+!
+!  test for convergence.
+!
+        if (delta <= xtol*xnorm .or. fnorm == 0.0) info = 1
+        if (info /= 0) go to 300
+!
+!  tests for termination and stringent tolerances.
+!
+        if (nfev >= maxfev) info = 2
+        if (p1* max (p1*delta,pnorm) <= epsmch*xnorm) info = 3
+        if (nslow2 == 5) info = 4
+        if (nslow1 == 10) info = 5
+        if (info /= 0) go to 300
+!
+!  criterion for recalculating jacobian
+!
+        if (ncfail == 2) go to 290
+!
+!  calculate the rank one modification to the jacobian
+!  and update qtf if necessary.
+!
+        do j = 1, n
+           sum = 0.0E+00
+           do i = 1, n
+              sum = sum + fjac(i,j)*wa4(i)
+           end do
+           wa2(j) = (sum - wa3(j))/pnorm
+           wa1(j) = diag(j)*((diag(j)*wa1(j))/pnorm)
+           if (ratio >= p0001) qtf(j) = sum
+        end do
+!
+!  compute the qr factorization of the updated jacobian.
+!
+        call r1updt(n,n,r,lr,wa1,wa2,wa3,sing)
+        call r1mpyq(n,n,fjac,ldfjac,wa2,wa3)
+        call r1mpyq(1,n,qtf,1,wa2,wa3)
+!
+!  end of the inner loop.
+!
+        jeval = .false.
+        go to 180
+  290    continue
+!
+!  end of the outer loop.
+!
+     go to 30
+  300 continue
+!
+!  termination, either normal or user imposed.
+!
+  if (iflag < 0) info = iflag
+  iflag = 0
+  if (nprint > 0) call fcn(n,x,fvec,iflag)
+  if (info < 0) call xerror( &
+    'snsq   -- execution terminated because user set iflag negative.',63,1,1)
+
+  if (info == 0) call xerror( 'snsq   -- invalid input parameter.',34,2,1)
+  if (info == 2) call xerror( 'snsq   -- too many function evaluations.',40,9,1)
+  if (info == 3) then
+    call xerror( 'snsq   -- xtol too small. no further improvement possible.', &
+      58,3,1)
+  end if
+
+  if ( info > 4 ) then
+    call xerror( 'snsq   -- iteration not making good progress.',45,1,1)
+  end if
+
+  return
+end
+subroutine snsqe(fcn,jac,iopt,n,x,fvec,tol,nprint,info,wa,lwa)
+!
+!*******************************************************************************
+!
+!! SNSQE is the easy-to-use version of SNSQ.
+!
+!
+!  Discussion:
+!
+!    SNSQ finds a zero of a system of N nonlinear functions in N variables by a
+!    modification of the Powell hybrid method.  This code is the
+!    combination of the MINPACK codes HYBRD1 and HYBRJ1.
+!
+!  Description:
+!
+! 1. purpose.
+!
+!
+!       the purpose of snsqe is to find a zero of a system of n non-
+!       linear functions in n variables by a modification of the powell
+!       hybrid method.  this is done by using the more general nonlinear
+!       equation solver snsq.  the user must provide a subroutine which
+!       calculates the functions.  the user has the option of either to
+!       provide a subroutine which calculates the jacobian or to let the
+!       code calculate it by a forward-difference approximation.  this
+!       code is the combination of the minpack codes (argonne) hybrd1
+!       and hybrj1.
+!
+!
+! 2. subroutine and type statements.
+!
+!     subroutine snsqe(fcn,jac,iopt,n,x,fvec,tol,nprint,info,
+!      *                  wa,lwa)
+!       integer iopt,n,nprint,info,lwa
+!       real tol
+!       real x(n),fvec(n),wa(lwa)
+!       external fcn,jac
+!
+! 3. parameters.
+!
+!       parameters designated as input parameters must be specified on
+!       entry to snsqe and are not changed on exit, while parameters
+!       designated as output parameters need not be specified on entry
+!       and are set to appropriate values on exit from snsqe.
+!
+!       fcn is the name of the user-supplied subroutine which calculates
+!         the functions.  fcn must be declared in an external statement
+!         in the user calling program, and should be written as follows.
+!
+!       subroutine fcn(n,x,fvec,iflag)
+!         integer n,iflag
+!         real x(n),fvec(n)
+!
+!         calculate the functions at x and
+!         return this vector in fvec.
+!
+!         return
+!       end
+!
+!         the value of iflag should not be changed by fcn unless the
+!         user wants to terminate execution of snsqe.  in this case, set
+!         iflag to a negative integer.
+!
+!       jac is the name of the user-supplied subroutine which calculates
+!         the jacobian.  if iopt=1, then jac must be declared in an
+!         external statement in the user calling program, and should be
+!         written as follows.
+!
+!       subroutine jac(n,x,fvec,fjac,ldfjac,iflag)
+!         integer n,ldfjac,iflag
+!         real x(n),fvec(n),fjac(ldfjac,n)
+!
+!         calculate the jacobian at x and return this
+!         matrix in fjac.  fvec contains the function
+!         values at x and should not be altered.
+!
+!         return
+!       end
+!
+!         the value of iflag should not be changed by jac unless the
+!         user wants to terminate execution of snsqe.  in this case, set
+!         iflag to a negative integer.
+!
+!         if iopt=2, jac can be ignored (treat it as a dummy argument).
+!
+!       iopt is an input variable which specifies how the jacobian will
+!         be calculated.  if iopt=1, then the user must supply the
+!         jacobian through the subroutine jac.  if iopt=2, then the
+!         code will approximate the jacobian by forward-differencing.
+!
+!       n is a positive integer input variable set to the number of
+!       functions and variables.
+!
+!       x is an array of length n.  on input, x must contain an initial
+!         estimate of the solution vector.  on output, x contains the
+!         final estimate of the solution vector.
+!
+!       fvec is an output array of length n which contains the functions
+!         evaluated at the output x.
+!
+!       tol is a non-negative input variable.  termination occurs when
+!         the algorithm estimates that the relative error between x and
+!         the solution is at most tol.  section 4 contains more details
+!         about tol.
+!
+!       nprint is an integer input variable that enables controlled
+!         printing of iterates if it is positive.  in this case, fcn is
+!         called with iflag = 0 at the beginning of the first iteration
+!         and every nprint iteration thereafter and immediately prior
+!         to return, with x and fvec available for printing. appropriate
+!         print statements must be added to fcn (see example). if nprint
+!         is not positive, no special calls of fcn with iflag = 0 are
+!         made.
+!
+!       info is an integer output variable.  if the user has terminated
+!         execution, info is set to the (negative) value of iflag.  see
+!         description of fcn and jac. otherwise, info is set as follows.
+!
+!         info = 0  improper input parameters.
+!
+!         info = 1  algorithm estimates that the relative error between
+!                   x and the solution is at most tol.
+!
+!         info = 2  number of calls to fcn has reached or exceeded
+!                   100*(n+1) for iopt=1 or 200*(n+1) for iopt=2.
+!
+!         info = 3  tol is too small.  no further improvement in the
+!                   approximate solution x is possible.
+!
+!         info = 4  iteration is not making good progress.
+!
+!         sections 4 and 5 contain more details about info.
+!
+!       wa is a work array of length lwa.
+!
+!       lwa is a positive integer input variable not less than
+!         (3*n**2+13*n))/2.
+!
+!
+! 4. successful completion.
+!
+!       the accuracy of snsqe is controlled by the convergence parame-
+!       ter tol.  this parameter is used in a test which makes a compar-
+!       ison between the approximation x and a solution xsol.  snsqe
+!       terminates when the test is satisfied.  if tol is less than the
+!       machine precision (as defined by the function r1mach(4)), then
+!       snsqe attemps only to satisfy the test defined by the machine
+!       precision.  further progress is not usually possible.  unless
+!       high precision solutions are required, the recommended value
+!       for tol is the square root of the machine precision.
+!
+!       the test assumes that the functions are reasonably well behaved,
+!       and, if the jacobian is supplied by the user, that the functions
+!       and the jacobian  coded consistently.  if these conditions
+!       are not satisfied, snsqe may incorrectly indicate convergence.
+!       the coding of the jacobian can be checked by the subroutine
+!       chkder.  if the jacobian is coded correctly or iopt=2, then
+!       the validity of the answer can be checked, for example, by
+!       rerunning snsqe with a tighter tolerance.
+!
+!       convergence test.  if snrm2(z) denotes the euclidean norm of a
+!         vector z, then this test attempts to guarantee that
+!
+!               snrm2(x-xsol) <=  tol*snrm2(xsol).
+!
+!         if this condition is satisfied with tol = 10**(-k), then the
+!         larger components of x have k significant decimal digits and
+!         info is set to 1.  there is a danger that the smaller compo-
+!         nents of x may have large relative errors, but the fast rate
+!         of convergence of snsqe usually avoids this possibility.
+!
+!
+! 5. unsuccessful completion.
+!
+!       unsuccessful termination of snsqe can be due to improper input
+!       parameters, arithmetic interrupts, an excessive number of func-
+!       tion evaluations, errors in the functions, or lack of good prog-
+!       ress.
+!
+!       improper input parameters.  info is set to 0 if iopt < 1, or
+!         iopt > 2, or n <= 0, or tol < 0.0, or
+!         lwa < (3*n**2+13*n)/2.
+!
+!       arithmetic interrupts.  if these interrupts occur in the fcn
+!       subroutine during an early stage of the computation, they may
+!         be caused by an unacceptable choice of x by snsqe.  in this
+!         case, it may be possible to remedy the situation by not evalu-
+!         ating the functions here, but instead setting the components
+!         of fvec to numbers that exceed those in the initial fvec.
+!
+!       excessive number of function evaluations.  if the number of
+!         calls to fcn reaches 100*(n+1) for iopt=1 or 200*(n+1) for
+!         iopt=2, then this indicates that the routine is converging
+!         very slowly as measured by the progress of fvec, and info is
+!         set to 2.  this situation should be unusual because, as
+!         indicated below, lack of good progress is usually diagnosed
+!         earlier by snsqe, causing termination with info = 4.
+!
+!       errors in the functions.  when iopt=2, the choice of step length
+!         in the forward-difference approximation to the jacobian
+!         assumes that the relative errors in the functions are of the
+!         order of the machine precision.  if this is not the case,
+!         snsqe may fail (usually with info = 4).  the user should
+!         then either use snsq and set the step length or use iopt=1
+!         and supply the jacobian.
+!
+!       lack of good progress.  snsqe searches for a zero of the system
+!         by minimizing the sum of the squares of the functions.  in so
+!         doing, it can become trapped in a region where the minimum
+!         does not correspond to a zero of the system and, in this situ-
+!         ation, the iteration eventually fails to make good progress.
+!         in particular, this will happen if the system does not have a
+!         zero.  if the system has a zero, rerunning snsqe from a dif-
+!         ferent starting point may be helpful.
+!
+!
+! 6. characteristics of the algorithm.
+!
+!       snsqe is a modification of the powell hybrid method.  two of
+!       its main characteristics involve the choice of the correction as
+!       a convex combination of the newton and scaled gradient direc-
+!       tions, and the updating of the jacobian by the rank-1 method of
+!       broyden.  the choice of the correction guarantees (under reason-
+!       able conditions) global convergence for starting points far from
+!       the solution and a fast rate of convergence.  the jacobian is
+!       calculated at the starting point by either the user-supplied
+!       subroutine or a forward-difference approximation, but it is not
+!       recalculated until the rank-1 method fails to produce satis-
+!       factory progress.
+!
+!       timing.  the time required by snsqe to solve a given problem
+!         depends on n, the behavior of the functions, the accuracy
+!         requested, and the starting point.  the number of arithmetic
+!         operations needed by snsqe is about 11.5*(n**2) to process
+!         each evaluation of the functions (call to fcn) and 1.3*(n**3)
+!         to process each evaluation of the jacobian (call to jac,
+!         if iopt = 1).  unless fcn and jac can be evaluated quickly,
+!         the timing of snsqe will be strongly influenced by the time
+!         spent in fcn and jac.
+!
+!       storage.  snsqe requires (3*n**2 + 17*n)/2 single precision
+!         storage locations, in addition to the storage required by the
+!         program.  there are no internally declared storage arrays.
+!
+!
+! 7. example.
+!
+!       the problem is to determine the values of x(1), x(2), ..., x(9),
+!       which solve the system of tridiagonal equations
+!
+!       (3-2*x(1))*x(1)           -2*x(2)                   = -1
+!               -x(i-1) + (3-2*x(i))*x(i)         -2*x(i+1) = -1, i=2-8
+!                                   -x(8) + (3-2*x(9))*x(9) = -1
+!
+!       program test(input,output,tape6=output)
+! c
+! c     driver for snsqe example.
+! c
+!       integer j,n,iopt,nprint,info,lwa,nwrite
+!       real tol,fnorm
+!       real x(9),fvec(9),wa(180)
+!       real snrm2,r1mach
+!       external fcn
+!       data nwrite /6/
+! c
+!       iopt = 2
+!       n = 9
+! c
+! c     the following starting values provide a rough solution.
+! c
+!       do j = 1, 9
+!          x(j) = -1.0E+00
+!       end do
+!
+!       lwa = 180
+!       nprint = 0
+! c
+! c     set tol to the square root of the machine precision.
+! c     unless high precision solutions are required,
+! c     this is the recommended setting.
+! c
+!       tol = sqrt(r1mach(4))
+! c
+!       call snsqe(fcn,jac,iopt,n,x,fvec,tol,nprint,info,wa,lwa)
+!       fnorm = snrm2(n,fvec)
+!       write (nwrite,1000) fnorm,info,(x(j),j=1,n)
+!       stop
+!  1000 format (5x,' final l2 norm of the residuals',e15.7 //
+!      *        5x,' exit parameter',16x,i10 //
+!      *        5x,' final approximate solution' // (5x,3e15.7))
+!     end
+!     subroutine fcn(n,x,fvec,iflag)
+!       integer n,iflag
+!       real x(n),fvec(n)
+!       integer k
+!       real temp,temp1,temp2
+!
+!       do k = 1, n
+!          temp = (3.0E+00 - 2.0*x(k))*x(k)
+!          temp1 = 0.0E+00
+!          if (k /= 1) temp1 = x(k-1)
+!          temp2 = 0.0E+00
+!          if (k /= n) temp2 = x(k+1)
+!          fvec(k) = temp - temp1 - 2.0*temp2 + 1.0E+00
+!       end do
+!
+!       return
+!     end
+!
+!       results obtained with different compilers or machines
+!       may be slightly different.
+!
+!       final l2 norm of the residuals  0.1192636e-07
+!
+!       exit parameter                         1
+!
+!       final approximate solution
+!
+!       -0.5706545e+00 -0.6816283e+00 -0.7017325e+00
+!       -0.7042129e+00 -0.7013690e+00 -0.6918656e+00
+!       -0.6657920e+00 -0.5960342e+00 -0.4164121e+00
+!
+!  references  powell, m. j. d.
+!                 a hybrid method for nonlinear equations.
+!                 numerical methods for nonlinear algebraic equations,
+!                 p. rabinowitz, editor.  gordon and breach, 1970.
+!
+  integer lwa
+  integer n
+!
+  real epsfcn
+  real, parameter :: factor = 100.0E+00
+  real fvec(n)
+  integer index
+  integer info
+  integer iopt
+  integer j
+  integer lr
+  integer maxfev
+  integer ml
+  integer mode
+  integer mu
+  integer nfev
+  integer njev
+  integer nprint
+  real tol
+  real wa(lwa)
+  real x(n)
+  real xtol
+!
+  external fcn
+  external jac
+!
+  info = 0
+!
+!  Check the input parameters for errors.
+!
+  if (iopt < 1 .or. iopt > 2 .or. n <= 0 .or. tol < 0.0E+00 .or. &
+    lwa < (3*n**2 +13*n)/2) then
+    go to 20
+  end if
+
+  maxfev = 100*(n + 1)
+  if ( iopt == 2 ) maxfev = 2*maxfev
+  xtol = tol
+  ml = n - 1
+  mu = n - 1
+  epsfcn = 0.0E+00
+  mode = 2
+  wa(1:n) = 1.0E+00
+  lr = (n*(n + 1))/2
+  index = 6*n + lr
+
+  call snsq ( fcn, jac, iopt, n, x, fvec, wa(index+1), n, xtol, maxfev, ml, mu, &
+    epsfcn, wa(1), mode, factor, nprint, info, nfev, njev, &
+    wa(6*n+1), lr, wa(n+1), wa(2*n+1), wa(3*n+1), wa(4*n+1), wa(5*n+1) )
+
+  if (info == 5) info = 4
+   20 continue
+
+  if (info == 0) then
+    call xerror( 'snsqe  -- invalid input parameter.',34,2,1)
+  end if
+
+  return
+end
+subroutine sqrank(a,lda,m,n,tol,kr,jpvt,qraux,work)
+!
+!*******************************************************************************
+!
+!! SQRANK computes the QR factorization of a rectangular matrix.
+!
+!
+!    this routine is used in conjunction with sqrlss to solve linear
+!    systems of equations in a least square sense.
+!
+!  Description:
+!
+!     sqrank is used in conjunction with sqrlss to solve
+!     overdetermined, underdetermined and singular linear systems
+!     in a least squares sense.
+!     sqrank uses the linpack subroutine sqrdc to compute the qr
+!     factorization, with column pivoting, of an  m  by  n  matrix  a .
+!     the numerical rank is determined using the tolerance tol.
+!
+!     for more information, see chapter 9 of linpack users guide,
+!     j. dongarra et all, siam, 1979.
+!
+!     on entry
+!
+!        a     real (lda,n) .
+!              the matrix whose decomposition is to be computed.
+!
+!        lda   integer.
+!              the leading dimension of a .
+!
+!        m     integer.
+!              the number of rows of a .
+!
+!        n     integer.
+!              the number of columns of  a .
+!
+!        tol   real.
+!              a relative tolerance used to determine the numerical
+!              rank.  the problem should be scaled so that all the elements
+!              of  a   have roughly the same absolute accuracy, eps.  then a
+!              reasonable value for  tol  is roughly  eps  divided by
+!              the magnitude of the largest element.
+!
+!        jpvt  integer(n)
+!
+!        qraux real(n)
+!
+!        work  real(n)
+!              three auxilliary vectors used by sqrdc .
+!
+!     on return
+!
+!        a     contains the output from sqrdc.
+!              the triangular matrix  r  of the qr factorization is
+!              contained in the upper triangle and information needed
+!              to recover the orthogonal matrix  q  is stored below
+!              the diagonal in  a  and in the vector qraux .
+!
+!        kr    integer.
+!              the numerical rank.
+!
+!        jpvt  the pivot information from sqrdc.
+!
+!     columns jpvt(1),...,jpvt(kr) of the original matrix are linearly
+!     independent to within the tolerance tol and the remaining columns
+!     are linearly dependent.  abs(a(1,1))/abs(a(kr,kr))  is an estimate
+!     of the condition number of the matrix of independent columns,
+!     and of  r .  this estimate will be <= 1/tol .
+!
+!      usage.....see subroutine sqrlss
+!
+!  reference(s)
+!
+!      dongarra, et al, linpack users guide, siam, 1979
+!
+  integer lda
+  integer n
+!
+  real a(lda,n)
+  integer j
+  integer jpvt(*)
+  integer k
+  integer kr
+  integer m
+  real qraux(*)
+  real tol
+  real work(*)
+!
+  jpvt(1:n) = 0
+
+  call sqrdc(a,lda,m,n,qraux,jpvt,work,1)
+  kr = 0
+  k = min(m,n)
+
+  do j = 1, k
+    if (abs(a(j,j)) <= tol*abs(a(1,1))) then
+      return
+    end if
+    kr = j
+  end do
+
+  return
+end
+subroutine sqrdc(x,ldx,n,p,qraux,jpvt,work,job)
+!
+!*******************************************************************************
+!
+!! SQRDC computes the QR factorization of a rectangular matrix.
+!
+!
+!  column pivoting
+!     based on the 2-norms of the reduced columns may be
+!     performed at the user's option.
+!
+!     on entry
+!
+!        x       real(ldx,p), where ldx >= n.
+!                x contains the matrix whose decomposition is to be
+!                computed.
+!
+!        ldx     integer.
+!                ldx is the leading dimension of the array x.
+!
+!        n       integer.
+!                n is the number of rows of the matrix x.
+!
+!        p       integer.
+!                p is the number of columns of the matrix x.
+!
+!        jpvt    integer(p).
+!                jpvt contains integers that control the selection
+!                of the pivot columns.  the k-th column x(k) of x
+!                is placed in one of three classes according to the
+!                value of jpvt(k).
+!
+!                   if jpvt(k) > 0, then x(k) is an initial
+!                                      column.
+!
+!                   if jpvt(k) == 0, then x(k) is a free column.
+!
+!                   if jpvt(k) < 0, then x(k) is a final column.
+!
+!                before the decomposition is computed, initial columns
+!                are moved to the beginning of the array x and final
+!                columns to the end.  both initial and final columns
+!                are frozen in place during the computation and only
+!                free columns are moved.  at the k-th stage of the
+!                reduction, if x(k) is occupied by a free column,
+!                it is interchanged with the free column of largest
+!                reduced norm.  jpvt is not referenced if
+!                job == 0.
+!
+!        work    real(p).
+!                work is a work array.  work is not referenced if
+!                job == 0.
+!
+!        job     integer.
+!                job is an integer that initiates column pivoting.
+!                if job == 0, no pivoting is done.
+!                if job /= 0, pivoting is done.
+!
+!     on return
+!
+!        x       x contains in its upper triangle the upper
+!                triangular matrix r of the qr factorization.
+!                below its diagonal x contains information from
+!                which the orthogonal part of the decomposition
+!                can be recovered.  note that if pivoting has
+!                been requested, the decomposition is not that
+!                of the original matrix x but that of x
+!                with its columns permuted as described by jpvt.
+!
+!        qraux   real(p).
+!                qraux contains further information required to recover
+!                the orthogonal part of the decomposition.
+!
+!        jpvt    jpvt(k) contains the index of the column of the
+!                original matrix that has been interchanged into
+!                the k-th column, if pivoting was requested.
+!
+!     linpack.  this version dated 08/14/78 .
+!     g. w. stewart, university of maryland, argonne national lab.
+!
+!  references  dongarra j.j., bunch j.r., moler c.b., stewart g.w.,
+!                 *linpack users  guide*, siam, 1979.
+!
+  integer ldx
+  integer p
+!
+  integer j
+  integer jj
+  integer job
+  integer jp
+  integer jpvt(p)
+  integer l
+  integer lp1
+  integer lup
+  integer maxj
+  real maxnrm
+  integer n
+  logical negj
+  real nrmxl
+  integer pl
+  integer pu
+  real qraux(1)
+  real sdot
+  real snrm2
+  logical swapj
+  real t
+  real tt
+  real work(1)
+  real x(ldx,1)
+!
+  pl = 1
+  pu = 0
+
+  if ( job /= 0 ) then
+!
+!  pivoting has been requested.  rearrange the columns according to jpvt.
+!
+     do j = 1, p
+        swapj = jpvt(j) > 0
+        negj = jpvt(j) < 0
+        jpvt(j) = j
+        if (negj) jpvt(j) = -j
+        if (swapj) then
+           if (j /= pl) call sswap(n,x(1,pl),1,x(1,j),1)
+           jpvt(j) = jpvt(pl)
+           jpvt(pl) = j
+           pl = pl + 1
+        end if
+     end do
+
+     pu = p
+
+     do jj = 1, p
+        j = p - jj + 1
+        if (jpvt(j) < 0) then
+           jpvt(j) = -jpvt(j)
+           if (j /= pu) then
+              call sswap(n,x(1,pu),1,x(1,j),1)
+              jp = jpvt(pu)
+              jpvt(pu) = jpvt(j)
+              jpvt(j) = jp
+           end if
+           pu = pu - 1
+        end if
+      end do
+
+  end if
+!
+!  compute the norms of the free columns.
+!
+  do j = pl, pu
+     qraux(j) = snrm2(n,x(1,j),1)
+     work(j) = qraux(j)
+  end do
+!
+!  perform the householder reduction of x.
+!
+  lup = min(n,p)
+
+  do l = 1, lup
+
+     if ( pl <= l .and. l < pu ) then
+!
+!  locate the column of largest norm and bring it into the pivot position.
+!
+        maxnrm = 0.0E+00
+        maxj = l
+
+        do j = l, pu
+          if ( qraux(j) > maxnrm ) then
+            maxnrm = qraux(j)
+            maxj = j
+          end if
+        end do
+
+        if (maxj /= l) then
+           call sswap(n,x(1,l),1,x(1,maxj),1)
+           qraux(maxj) = qraux(l)
+           work(maxj) = work(l)
+           jp = jpvt(maxj)
+           jpvt(maxj) = jpvt(l)
+           jpvt(l) = jp
+        end if
+
+     end if
+
+     qraux(l) = 0.0E+00
+
+     if (l == n) go to 190
+!
+!  compute the householder transformation for column l.
+!
+        nrmxl = snrm2(n-l+1,x(l,l),1)
+
+        if (nrmxl == 0.0) go to 180
+
+           if (x(l,l) /= 0.0) nrmxl = sign(nrmxl,x(l,l))
+           call sscal(n-l+1,1.0/nrmxl,x(l,l),1)
+           x(l,l) = 1.0E+00 + x(l,l)
+!
+!  apply the transformation to the remaining columns, updating the norms.
+!
+           lp1 = l + 1
+
+           do j = lp1, p
+
+              t = -sdot(n-l+1,x(l,l),1,x(l,j),1)/x(l,l)
+              call saxpy(n-l+1,t,x(l,l),1,x(l,j),1)
+
+              if (j < pl .or. j > pu) go to 150
+
+              if ( qraux(j) /= 0.0E+00 ) then
+
+                 tt = 1.0E+00 - (abs(x(l,j))/qraux(j))**2
+                 tt = max (tt,0.0)
+                 t = tt
+                 tt = 1.0E+00 + 0.05*tt*(qraux(j)/work(j))**2
+
+                 if (tt /= 1.0) then
+                    qraux(j) = qraux(j)*sqrt(t)
+                 else
+                    qraux(j) = snrm2(n-l,x(l+1,j),1)
+                    work(j) = qraux(j)
+                 end if
+
+               end if
+
+  150             continue
+           end do
+!
+!  save the transformation.
+!
+           qraux(l) = x(l,l)
+           x(l,l) = -nrmxl
+  180       continue
+  190    continue
+
+  end do
+
+  return
+end
+subroutine sqrls (a,lda,m,n,tol,kr,b,x,rsd,jpvt,qraux,work,itask,ind)
+!
+!*******************************************************************************
+!
+!! SQRLS solves an linear system in the least squares sense.
+!
+!
+!  Discussion:
+!
+!    The linear system may be overdetermined, underdetermined or singular.
+!    The solution is obtained using a QR factorization of the
+!    coefficient matrix.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     sqrls is used to solve in a least squares sense
+!     overdetermined, underdetermined and singular linear systems .
+!     the system is  a*x  approximates  b  where  a  is  m  by  n.
+!     b  is a given  m-vector, and  x  is the  n-vector to be computed.
+!     a solution  x  is found which minimimzes the sum of squares (2-norm)
+!     of the residual,  a*x - b .
+!     the numerical rank of a is determined using the tolerance tol.
+!
+!     sqrls uses the linpack subroutine sqrdc to compute the qr
+!     factorization, with column pivoting, of an  m  by  n  matrix  a .
+!     for more information, see chapter 9 of the reference below.
+!
+!
+!     on entry
+!
+!        a     real (lda,n) .
+!              the matrix whose decomposition is to be computed.
+!              in a least squares data fitting problem, a(i,j) is the
+!              value of the j-th basis (model) function at the i-th
+!              data point.
+!
+!        lda   integer.
+!              the leading dimension of a .
+!
+!        m     integer.
+!              the number of rows of a .
+!
+!        n     integer.
+!              the number of columns of  a .
+!
+!        tol   real.
+!              a relative tolerance used to determine the numerical
+!              rank.  the problem should be scaled so that all the
+!              elements of  a   have roughly the same absolute accuracy
+!              eps.  then a reasonable value for  tol  is roughly  eps
+!              divided by the magnitude of the largest element.
+!
+!        jpvt  integer(n)
+!        qraux real(n)
+!        work  real(n)
+!                    three auxiliary arrays used to factor the matrix a.
+!                    (not required if itask > 1)
+!
+!        b     real(m)
+!              the right hand side of the linear system.
+!              in a least squares data fitting problem b(i) contains the
+!              value of i-th observation.
+!
+!        itask integer.
+!              if itask=1, then sqrls factors the matrix a and
+!                          solves the least squares problem.
+!              if itask=2, then sqrls assumes that the matrix a
+!                          was factored with an earlier call to
+!                          sqrls, and only solves the least squares
+!                          problem.
+!
+!     on return
+!
+!        x     real(n) .
+!              a least squares solution to the linear system.
+!
+!        rsd   real(m) .
+!              the residual, b - a*x .  rsd may overwrite  b .
+!
+!        ind   integer
+!              error code:  ind = 0:  no error
+!                           ind = -1: n > lda   (fatal error)
+!                           ind = -2: n < 1     (fatal error)
+!                           ind = -3: itask < 1 (fatal error)
+!
+!        a     contains the output from sqrdc.
+!              the triangular matrix  r  of the qr factorization is
+!              contained in the upper triangle and information needed
+!              to recover the orthogonal matrix  q  is stored below
+!              the diagonal in  a  and in the vector qraux .
+!
+!        kr    integer.
+!              the numerical rank.
+!
+!        jpvt  the pivot information from sqrdc.
+!
+!     columns jpvt(1),...,jpvt(kr) of the original matrix are linearly
+!     independent to within the tolerance tol and the remaining columns
+!     are linearly dependent.  abs(a(1,1))/abs(a(kr,kr))  is an estimate
+!     of the condition number of the matrix of independent columns,
+!     and of  r .  this estimate will be <= 1/tol .
+!
+!      usage....
+!        sqrls can be efficiently used to solve several least squares
+!      problems with the same matrix a.  the first system is solved
+!      with itask = 1.  the subsequent systems are solved with
+!      itask = 2, to avoid the recomputation of the matrix factors.
+!      the parameters  kr, jpvt, and qraux must not be modified
+!      between calls to sqrls.
+!
+  integer lda
+  integer m
+  integer n
+!
+  real a(lda,n)
+  real b(m)
+  integer ind
+  integer itask
+  integer jpvt(n)
+  integer kr
+  real qraux(n)
+  real rsd(m)
+  real tol
+  real work(n)
+  real x(n)
+!
+  if ( lda < n ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SQRLS - Fatal error!'
+    write ( *, * ) '  LDA < N.'
+    stop
+  end if
+
+  if ( n <= 0 ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SQRLS - Fatal error!'
+    write ( *, * ) '  N <= 0.'
+    stop
+  end if
+
+  if ( itask < 1 ) then
+    write ( *, * ) ' '
+    write ( *, * ) 'SQRLS - Fatal error!'
+    write ( *, * ) '  ITASK < 1.'
+    stop
+  end if
+
+  ind = 0
+!
+!  Factor the matrix.
+!
+  if ( itask == 1 ) then
+    call sqrank ( a, lda, m, n, tol, kr, jpvt, qraux, work )
+  end if
+!
+!  Solve the least-squares problem.
+!
+  call sqrlss ( a, lda, m, n, kr, b, x, rsd, jpvt, qraux )
+
+  return
+end
+subroutine sqrlss ( a, lda, m, n, kr, b, x, rsd, jpvt, qraux )
+!
+!*******************************************************************************
+!
+!! SQRLSS solves a linear system in a least squares sense.
+!
+!
+!  Discussion:
+!
+!    SQRLSS must be preceeded by a call to SQRANK.
+!
+!    The system is to be solved is
+!      A * X = B
+!    where
+!      A is an M by N matrix with rank KR, as determined by SQRANK,
+!      B is a given M-vector,
+!      X is the N-vector to be computed.
+!
+!    A solution X, with at most KR nonzero components, is found which
+!    minimizes the 2-norm of the residual (A*X-B).
+!
+!     on entry
+!
+!        a,lda,m,n,kr,jpvt,qraux
+!              the output from sqrank .
+!
+!        b     real(m) .
+!              the right hand side of the linear system.
+!
+!     on return
+!
+!        x     real(n) .
+!              a least squares solution to the linear system.
+!
+!        rsd   real(m) .
+!              the residual, b - a*x .  rsd may overwite  b .
+!
+!      usage....
+!        once the matrix a has been formed, sqrank should be
+!      called once to decompose it.  then for each right hand
+!      side, b, sqrlss should be called once to obtain the
+!      solution and residual.
+!
+!  reference(s)
+!      dongarra, et al, linpack users guide, siam, 1979
+!
+  integer lda
+  integer n
+!
+  real a(lda,1)
+  real b(*)
+  integer info
+  integer j
+  integer jpvt(1)
+  integer k
+  integer kr
+  integer m
+  real qraux(*)
+  real rsd(*)
+  real t
+  real x(n)
+!
+  if ( kr /= 0 ) then
+    call sqrsl(a,lda,m,kr,qraux,b,rsd,rsd,x,rsd,rsd,110,info)
+  end if
+
+  jpvt(1:n) = - jpvt(1:n)
+
+  do j = 1, n
+    if (j > kr) x(j) = 0.0E+00
+  end do
+
+  do j = 1, n
+
+    if (jpvt(j) <= 0) then
+
+      k = -jpvt(j)
+      jpvt(j) = k
+
+      do while ( k /= j )
+        t = x(j)
+        x(j) = x(k)
+        x(k) = t
+        jpvt(k) = -jpvt(k)
+        k = jpvt(k)
+      end do
+
+    end if
+
+  end do
+
+  return
+end
+subroutine sqrsl(x,ldx,n,k,qraux,y,qy,qty,b,rsd,xb,job,info)
+!
+!*******************************************************************************
+!
+!! SQRSL applies the output of sqrdc to compute coordinate
+!     transformations, projections, and least squares solutions.
+!     for k <= min(n,p), let xk be the matrix
+!
+!            xk = (x(jpvt(1)),x(jpvt(2)), ... ,x(jpvt(k)))
+!
+!     formed from columnns jpvt(1), ... ,jpvt(k) of the original
+!     n x p matrix x that was input to sqrdc (if no pivoting was
+!     done, xk consists of the first k columns of x in their
+!     original order).  sqrdc produces a factored orthogonal matrix q
+!     and an upper triangular matrix r such that
+!
+!              xk = q * (r)
+!                       (0)
+!
+!     this information is contained in coded form in the arrays
+!     x and qraux.
+!
+!     on entry
+!
+!        x      real(ldx,p)
+!               x contains the output of sqrdc.
+!
+!        ldx    integer
+!               ldx is the leading dimension of the array x.
+!
+!        n      integer
+!               n is the number of rows of the matrix xk.  it must
+!               have the same value as n in sqrdc.
+!
+!        k      integer
+!               k is the number of columns of the matrix xk.  k
+!               must not be greater than min(n,p), where p is the
+!               same as in the calling sequence to sqrdc.
+!
+!        qraux  real(p)
+!               qraux contains the auxiliary output from sqrdc.
+!
+!        y      real(n)
+!               y contains an n-vector that is to be manipulated
+!               by sqrsl.
+!
+!        job    integer
+!               job specifies what is to be computed.  job has
+!               the decimal expansion abcde, with the following
+!               meaning.
+!
+!                    if a /= 0, compute qy.
+!                    if b,c,d, or e /= 0, compute qty.
+!                    if c /= 0, compute b.
+!                    if d /= 0, compute rsd.
+!                    if e /= 0, compute xb.
+!
+!               note that a request to compute b, rsd, or xb
+!               automatically triggers the computation of qty, for
+!               which an array must be provided in the calling
+!               sequence.
+!
+!     on return
+!
+!        qy     real(n).
+!               qy contains q*y, if its computation has been
+!               requested.
+!
+!        qty    real(n).
+!               qty contains trans(q)*y, if its computation has
+!               been requested.  here trans(q) is the
+!               transpose of the matrix q.
+!
+!        b      real(k)
+!               b contains the solution of the least squares problem
+!
+!                    minimize norm2(y - xk*b),
+!
+!               if its computation has been requested.  (note that
+!               if pivoting was requested in sqrdc, the j-th
+!               component of b will be associated with column jpvt(j)
+!               of the original matrix x that was input into sqrdc.)
+!
+!        rsd    real(n).
+!               rsd contains the least squares residual y - xk*b,
+!               if its computation has been requested.  rsd is
+!               also the orthogonal projection of y onto the
+!               orthogonal complement of the column space of xk.
+!
+!        xb     real(n).
+!               xb contains the least squares approximation xk*b,
+!               if its computation has been requested.  xb is also
+!               the orthogonal projection of y onto the column space
+!               of x.
+!
+!        info   integer.
+!               info is zero unless the computation of b has
+!               been requested and r is exactly singular.  in
+!               this case, info is the index of the first zero
+!               diagonal element of r and b is left unaltered.
+!
+!     the parameters qy, qty, b, rsd, and xb are not referenced
+!     if their computation is not requested and in this case
+!     can be replaced by dummy variables in the calling program.
+!     to save storage, the user may in some cases use the same
+!     array for different parameters in the calling sequence.  a
+!     frequently occuring example is when one wishes to compute
+!     any of b, rsd, or xb and does not need y or qty.  in this
+!     case one may identify y, qty, and one of b, rsd, or xb, while
+!     providing separate arrays for anything else that is to be
+!     computed.  thus the calling sequence
+!
+!          call sqrsl(x,ldx,n,k,qraux,y,dum,y,b,y,dum,110,info)
+!
+!     will result in the computation of b and rsd, with rsd
+!     overwriting y.  more generally, each item in the following
+!     list contains groups of permissible identifications for
+!     a single callinng sequence.
+!
+!          1. (y,qty,b) (rsd) (xb) (qy)
+!
+!          2. (y,qty,rsd) (b) (xb) (qy)
+!
+!          3. (y,qty,xb) (b) (rsd) (qy)
+!
+!          4. (y,qy) (qty,b) (rsd) (xb)
+!
+!          5. (y,qy) (qty,rsd) (b) (xb)
+!
+!          6. (y,qy) (qty,xb) (b) (rsd)
+!
+!     in any group the value returned in the array allocated to
+!     the group corresponds to the last member of the group.
+!
+!     linpack.  this version dated 08/14/78 .
+!     g. w. stewart, university of maryland, argonne national lab.
+!
+!  references  dongarra j.j., bunch j.r., moler c.b., stewart g.w.,
+!                 *linpack users  guide*, siam, 1979.
+!
+  integer k
+  integer ldx
+!
+  real b(k)
+  logical cb
+  logical cqty
+  logical cqy
+  logical cr
+  logical cxb
+  integer i
+  integer info
+  integer j
+  integer jj
+  integer job
+  integer ju
+  integer n
+  real qraux(1)
+  real qty(1)
+  real qy(1)
+  real rsd(1)
+  real sdot
+  real t
+  real temp
+  real x(ldx,1)
+  real xb(1)
+  real y(1)
+!
+!  set info flag.
+!
+  info = 0
+!
+!  determine what is to be computed.
+!
+  cqy = job/10000 /= 0
+  cqty = mod(job,10000) /= 0
+  cb = mod(job,1000)/100 /= 0
+  cr = mod(job,100)/10 /= 0
+  cxb = mod(job,10) /= 0
+  ju = min(k,n-1)
+!
+!  special action when n=1.
+!
+  if (ju == 0) then
+     if (cqy) qy(1) = y(1)
+     if (cqty) qty(1) = y(1)
+     if (cxb) xb(1) = y(1)
+     if ( cb ) then
+        if (x(1,1) == 0.0) then
+           info = 1
+        else
+           b(1) = y(1)/x(1,1)
+        end if
+     end if
+     if (cr) rsd(1) = 0.0E+00
+     go to 250
+  end if
+!
+!  set up to compute qy or qty.
+!
+  if (cqy) then
+    qy(1:n) = y(1:n)
+  end if
+
+  if (cqty) then
+    qty(1:n) = y(1:n)
+  end if
+!
+!  Compute QY.
+!
+  if ( cqy ) then
+
+    do jj = 1, ju
+      j = ju - jj + 1
+      if ( qraux(j) /= 0.0E+00 ) then
+        temp = x(j,j)
+        x(j,j) = qraux(j)
+        t = -sdot(n-j+1,x(j,j),1,qy(j),1)/x(j,j)
+        call saxpy(n-j+1,t,x(j,j),1,qy(j),1)
+        x(j,j) = temp
+      end if
+    end do
+
+  end if
+!
+!  Compute Q' * Y.
+!
+  if ( cqty ) then
+
+        do j = 1, ju
+           if ( qraux(j) /= 0.0) then
+              temp = x(j,j)
+              x(j,j) = qraux(j)
+              t = -sdot(n-j+1,x(j,j),1,qty(j),1)/x(j,j)
+              call saxpy(n-j+1,t,x(j,j),1,qty(j),1)
+              x(j,j) = temp
+           end if
+        end do
+
+  end if
+!
+!  set up to compute b, rsd, or xb.
+!
+  if ( cb ) then
+    b(1:k) = qty(1:k)
+  end if
+
+  if ( cxb ) then
+    xb(1:k) = qty(1:k)
+  end if
+
+  if ( cr .and. k < n ) then
+    rsd(k+1:n) = qty(k+1:n)
+  end if
+
+  if ( cxb .and. k+1 <= n ) then
+    xb(k+1:n) = 0.0E+00
+  end if
+
+  if ( cr ) then
+    rsd(1:k) = 0.0E+00
+  end if
+!
+!  compute b.
+!
+  if ( cb ) then
+
+        do jj = 1, k
+
+           j = k - jj + 1
+
+           if (x(j,j) == 0.0) then
+              info = j
+              go to 180
+           end if
+
+           b(j) = b(j)/x(j,j)
+           if (j /= 1) then
+              t = -b(j)
+              call saxpy(j-1,t,x(1,j),1,b,1)
+           end if
+
+        end do
+
+  180       continue
+
+  end if
+
+     if (.not.cr .and. .not.cxb) go to 240
+!
+!  Compute rsd or xb as required.
+!
+        do jj = 1, ju
+
+           j = ju - jj + 1
+           if (qraux(j) == 0.0E+00 ) go to 220
+
+              temp = x(j,j)
+              x(j,j) = qraux(j)
+
+              if ( cr ) then
+                 t = -sdot(n-j+1,x(j,j),1,rsd(j),1)/x(j,j)
+                 call saxpy(n-j+1,t,x(j,j),1,rsd(j),1)
+              end if
+
+              if (.not.cxb) go to 210
+                 t = -sdot(n-j+1,x(j,j),1,xb(j),1)/x(j,j)
+                 call saxpy(n-j+1,t,x(j,j),1,xb(j),1)
+  210             continue
+              x(j,j) = temp
+  220          continue
+        end do
+
+  240    continue
+  250 continue
+
+  return
+end
+subroutine srot ( n, x, incx, y, incy, c, s )
+!
+!*******************************************************************************
+!
+!! SROT applies a plane rotation.
+!
+!
+!  Modified:
+!
+!    08 April 1999
+!
+!  Reference:
+!
+!    Lawson, Hanson, Kincaid, Krogh,
+!    Basic Linear Algebra Subprograms for Fortran Usage,
+!    Algorithm 539,
+!    ACM Transactions on Mathematical Software,
+!    Volume 5, Number 3, September 1979, pages 308-323.
+!
+!  Parameters:
+!
+!    Input, integer N, the number of entries in the vectors.
+!
+!    Input/output, real X(*), one of the vectors to be rotated.
+!
+!    Input, integer INCX, the increment between successive entries of X.
+!
+!    Input/output, real Y(*), one of the vectors to be rotated.
+!
+!    Input, integer INCY, the increment between successive elements of Y.
+!
+!    Input, real C, S, parameters (presumably the cosine and sine of
+!    some angle) that define a plane rotation.
+!
+  real c
+  integer i
+  integer incx
+  integer incy
+  integer ix
+  integer iy
+  integer n
+  real s
+  real stemp
+  real x(*)
+  real y(*)
+!
+  if ( n <= 0 ) then
+
+  else if ( incx == 1 .and. incy == 1 ) then
+
+    do i = 1, n
+      stemp = c * x(i) + s * y(i)
+      y(i) = c * y(i) - s * x(i)
+      x(i) = stemp
+    end do
+
+  else
+
+    if ( incx >= 0 ) then
+      ix = 1
+    else
+      ix = ( - n + 1 ) * incx + 1
+    end if
+
+    if ( incy >= 0 ) then
+      iy = 1
+    else
+      iy = ( - n + 1 ) * incy + 1
+    end if
+
+    do i = 1, n
+      stemp = c * x(ix) + s * y(iy)
+      y(iy) = c * y(iy) - s * x(ix)
+      x(ix) = stemp
+      ix = ix + incx
+      iy = iy + incy
+    end do
+
+  end if
+
+  return
+end
+subroutine srotg ( sa, sb, c, s )
+!
+!*******************************************************************************
+!
+!! SROTG constructs a Givens plane rotation.
+!
+!
+!  Modified:
+!
+!    08 April 1999
+!
+!  Reference:
+!
+!    Lawson, Hanson, Kincaid, Krogh,
+!    Basic Linear Algebra Subprograms for Fortran Usage,
+!    Algorithm 539,
+!    ACM Transactions on Mathematical Software,
+!    Volume 5, Number 3, September 1979, pages 308-323.
+!
+!  Parameters:
+!
+!    Input/output, real SA, SB, ...
+!
+!    Output, real C, S, ...
+!
+  real c
+  real r
+  real roe
+  real s
+  real sa
+  real sb
+  real scale
+  real z
+!
+  if ( abs ( sa ) > abs ( sb ) ) then
+    roe = sa
+  else
+    roe = sb
+  end if
+
+  scale = abs ( sa ) + abs ( sb )
+
+  if ( scale == 0.0E+00 ) then
+    c = 1.0E+00
+    s = 0.0E+00
+    r = 0.0E+00
+  else
+    r = scale * sqrt ( ( sa / scale )**2 + ( sb / scale )**2 )
+    r = sign ( 1.0, roe ) * r
+    c = sa / r
+    s = sb / r
+  end if
+
+  if ( abs ( c ) > 0.0E+00 .and. abs ( c ) <= s ) then
+    z = 1.0E+00 / c
+  else
+    z = s
+  end if
+
+  sa = r
+  sb = z
+
+  return
+end
+subroutine sscal ( n, sa, x, incx )
+!
+!*******************************************************************************
+!
+!! SSCAL scales a vector by a constant.
+!
+!
+!  Modified:
+!
+!    08 April 1999
+!
+!  Reference:
+!
+!    Lawson, Hanson, Kincaid, Krogh,
+!    Basic Linear Algebra Subprograms for Fortran Usage,
+!    Algorithm 539,
+!    ACM Transactions on Mathematical Software,
+!    Volume 5, Number 3, September 1979, pages 308-323.
+!
+!  Parameters:
+!
+!    Input, integer N, the number of entries in the vector.
+!
+!    Input, real SA, the multiplier.
+!
+!    Input/output, real X(*), the vector to be scaled.
+!
+!    Input, integer INCX, the increment between successive entries of X.
+!
+  integer i
+  integer incx
+  integer ix
+  integer m
+  integer n
+  real sa
+  real x(*)
+!
+  if ( n <= 0 ) then
+
+  else if ( incx == 1 ) then
+
+    m = mod ( n, 5 )
+
+    x(1:m) = sa * x(1:m)
+
+    do i = m+1, n, 5
+      x(i)   = sa * x(i)
+      x(i+1) = sa * x(i+1)
+      x(i+2) = sa * x(i+2)
+      x(i+3) = sa * x(i+3)
+      x(i+4) = sa * x(i+4)
+    end do
+
+  else
+
+    if ( incx >= 0 ) then
+      ix = 1
+    else
+      ix = ( - n + 1 ) * incx + 1
+    end if
+
+    do i = 1, n
+      x(ix) = sa * x(ix)
+      ix = ix + incx
+    end do
+
+  end if
+
+  return
+end
+subroutine ssvdc(x,ldx,n,p,s,e,u,ldu,v,ldv,work,job,info)
+!
+!*******************************************************************************
+!
+!! SSVDC computes the singular value decomposition of a rectangular matrix.
+!
+!
+!  The routine reduces a real nxp matrix x by
+!     orthogonal transformations u and v to diagonal form.  the
+!     diagonal elements s(i) are the singular values of x.  the
+!     columns of u are the corresponding left singular vectors,
+!     and the columns of v the right singular vectors.
+!
+!     on entry
+!
+!         x         real(ldx,p), where ldx >= n.
+!                   x contains the matrix whose singular value
+!                   decomposition is to be computed.  x is
+!                   destroyed by ssvdc.
+!
+!         ldx       integer
+!                   ldx is the leading dimension of the array x.
+!
+!         n         integer
+!                   n is the number of rows of the matrix x.
+!
+!         p         integer
+!                   p is the number of columns of the matrix x.
+!
+!         ldu       integer
+!                   ldu is the leading dimension of the array u.
+!                   (see below).
+!
+!         ldv       integer
+!                   ldv is the leading dimension of the array v.
+!                   (see below).
+!
+!         work      real(n)
+!                   work is a scratch array.
+!
+!         job       integer
+!                   job controls the computation of the singular
+!                   vectors.  it has the decimal expansion ab
+!                   with the following meaning
+!
+!                        a == 0  do not compute the left singular
+!                                  vectors.
+!                        a == 1  return the n left singular vectors
+!                                  in u.
+!                        a >= 2  return the first min(n,p) singular
+!                                  vectors in u.
+!                        b == 0  do not compute the right singular
+!                                  vectors.
+!                        b == 1  return the right singular vectors
+!                                  in v.
+!
+!     on return
+!
+!         s         real(mm), where mm=min(n+1,p).
+!                   the first min(n,p) entries of s contain the
+!                   singular values of x arranged in descending
+!                   order of magnitude.
+!
+!         e         real(p).
+!                   e ordinarily contains zeros.  however, see the
+!                   discussion of info for exceptions.
+!
+!         u         real(ldu,k), where ldu >= n.  if joba == 1, then
+!                                   k == n.  if joba >= 2 , then
+!                                   k == min(n,p).
+!                   u contains the matrix of right singular vectors.
+!                   u is not referenced if joba == 0.  if n <= p
+!                   or if joba == 2, then u may be identified with x
+!                   in the subroutine call.
+!
+!         v         real(ldv,p), where ldv >= p.
+!                   v contains the matrix of right singular vectors.
+!                   v is not referenced if job == 0.  if p <= n,
+!                   then v may be identified with x in the
+!                 subroutine call.
+!
+!         info      integer.
+!                   the singular values (and their corresponding
+!                   singular vectors) s(info+1),s(info+2),...,s(m)
+!                   are correct (here m=min(n,p)).  thus if
+!                   info == 0, all the singular values and their
+!                   vectors are correct.  in any event, the matrix
+!                   b = trans(u)*x*v is the bidiagonal matrix
+!                   with the elements of s on its diagonal and the
+!                   elements of e on its super-diagonal (trans(u)
+!                   is the transpose of u).  thus the singular
+!                   values of x and b are the same.
+!
+!     linpack.  this version dated 03/19/79 .
+!     g. w. stewart, university of maryland, argonne national lab.
+!
+  integer ldu
+  integer ldv
+  integer ldx
+!
+  real b
+  real c
+  real cs
+  real e(*)
+  real el
+  real emm1
+  real f
+  real g
+  integer i
+  integer info
+  integer iter
+  integer j
+  integer job
+  integer jobu
+  integer k
+  integer kase
+  integer kk
+  integer n
+  integer p
+  real s(*)
+  real sdot
+  real t
+  real t1
+  real test
+  real u(ldu,*)
+  real v(ldv,*)
+  logical wantu
+  logical wantv
+  real work(*)
+  real x(ldx,*)
+  real ztest
+
+  integer l,ll,lls,lm1,lp1,ls,lu,m,maxit
+  integer mm,mm1,mp1,nct,nctp1,ncu,nrt,nrtp1
+  real snrm2,scale,shift,sl,sm,sn,smm1
+!
+!  set the maximum number of iterations.
+!
+  maxit = 30
+!
+!  determine what is to be computed.
+!
+  wantu = .false.
+  wantv = .false.
+  jobu = mod(job,100)/10
+  ncu = n
+  if (jobu > 1) ncu = min(n,p)
+  if (jobu /= 0) wantu = .true.
+  if (mod(job,10) /= 0) wantv = .true.
+!
+!     reduce x to bidiagonal form, storing the diagonal elements
+!     in s and the super-diagonal elements in e.
+!
+  info = 0
+  nct = min(n-1,p)
+  nrt = max(0,min(p-2,n))
+  lu = max(nct,nrt)
+
+  do l = 1, lu
+
+     lp1 = l + 1
+
+     if (l <= nct) then
+!
+!           compute the transformation for the l-th column and
+!           place the l-th diagonal in s(l).
+!
+        s(l) = snrm2(n-l+1,x(l,l),1)
+
+        if (s(l) /= 0.0) then
+           if (x(l,l) /= 0.0) s(l) = sign(s(l),x(l,l))
+           call sscal(n-l+1,1.0/s(l),x(l,l),1)
+           x(l,l) = 1.0E+00 + x(l,l)
+        end if
+
+        s(l) = -s(l)
+
+     end if
+
+     if (p < lp1) go to 50
+
+     do j = lp1, p
+!
+!  apply the transformation.
+!
+        if ( l <= nct ) then
+          if ( s(l) /= 0.0E+00 ) then
+            t = -sdot(n-l+1,x(l,l),1,x(l,j),1)/x(l,l)
+            call saxpy(n-l+1,t,x(l,l),1,x(l,j),1)
+          end if
+        end if
+!
+!           place the l-th row of x into  e for the
+!           subsequent calculation of the row transformation.
+!
+        e(j) = x(l,j)
+
+      end do
+
+   50    continue
+!
+!  place the transformation in u for subsequent back multiplication.
+!
+     if ( wantu .and. l <= nct ) then
+       u(l:n,l) = x(l:n,l)
+     end if
+
+     if (l > nrt) go to 150
+!
+!  compute the l-th row transformation and place the
+!  l-th super-diagonal in e(l).
+!
+        e(l) = snrm2(p-l,e(lp1),1)
+
+        if (e(l) /= 0.0) then
+           if (e(lp1) /= 0.0) e(l) = sign(e(l),e(lp1))
+           call sscal(p-l,1.0/e(l),e(lp1),1)
+           e(lp1) = 1.0E+00 + e(lp1)
+        end if
+
+        e(l) = -e(l)
+        if (lp1 > n .or. e(l) == 0.0) go to 120
+!
+!  apply the transformation.
+!
+           work(lp1:n) = 0.0E+00
+
+           do j = lp1, p
+             call saxpy(n-l,e(j),x(lp1,j),1,work(lp1),1)
+           end do
+
+           do j = lp1, p
+             call saxpy(n-l,-e(j)/e(lp1),work(lp1),1,x(lp1,j),1)
+           end do
+
+  120       continue
+!
+!  Place the transformation in v for subsequent back multiplication.
+!
+         if ( wantv ) then
+           v(lp1:p,l) = e(lp1:p)
+         end if
+
+  150    continue
+
+  end do
+!
+!  Set up the final bidiagonal matrix or order m.
+!
+  m = min(p,n+1)
+  nctp1 = nct + 1
+  nrtp1 = nrt + 1
+  if (nct < p) s(nctp1) = x(nctp1,nctp1)
+  if (n < m) s(m) = 0.0E+00
+  if (nrtp1 < m) e(nrtp1) = x(nrtp1,m)
+  e(m) = 0.0E+00
+!
+!  Generate u.
+!
+  if ( wantu ) then
+
+     do j = nctp1, ncu
+       u(1:n,j) = 0.0E+00
+       u(j,j) = 1.0E+00
+     end do
+
+     do ll = 1, nct
+
+       l = nct - ll + 1
+
+       if (s(l) /= 0.0) then
+
+           lp1 = l + 1
+
+           do j = l+1, ncu
+             t = -sdot(n-l+1,u(l,l),1,u(l,j),1)/u(l,l)
+             call saxpy(n-l+1,t,u(l,l),1,u(l,j),1)
+           end do
+
+           call sscal ( n-l+1, -1.0, u(l,l), 1 )
+           u(l,l) = 1.0E+00 + u(l,l)
+           u(1:l-1,l) = 0.0E+00
+
+        else
+
+           u(1:n,l) = 0.0E+00
+           u(l,l) = 1.0E+00
+
+        end if
+
+      end do
+
+  end if
+!
+!  Generate v.
+!
+  if ( wantv ) then
+
+    do ll = 1, p
+
+      l = p - ll + 1
+      lp1 = l + 1
+
+      if ( l <= nrt ) then
+
+        if ( e(l) /= 0.0E+00 ) then
+
+          do j = lp1, p
+            t = -sdot(p-l,v(lp1,l),1,v(lp1,j),1)/v(lp1,l)
+            call saxpy(p-l,t,v(lp1,l),1,v(lp1,j),1)
+          end do
+
+        end if
+
+      end if
+
+      v(1:p,l) = 0.0E+00
+      v(l,l) = 1.0E+00
+
+    end do
+
+  end if
+!
+!  main iteration loop for the singular values.
+!
+  mm = m
+  iter = 0
+
+  360 continue
+!
+!  quit if all the singular values have been found.
+!
+     if (m == 0) go to 620
+!
+!  if too many iterations have been performed, set flag and return.
+!
+     if ( iter >= maxit ) then
+       info = m
+       go to 620
+     end if
+!
+!  this section of the program inspects for
+!  negligible elements in the s and e arrays.  on
+!  completion the variables kase and l are set as follows.
+!
+!           kase = 1     if s(m) and e(l-1) are negligible and l<m
+!           kase = 2     if s(l) is negligible and l<m
+!           kase = 3     if e(l-1) is negligible, l<m, and
+!                        s(l), ..., s(m) are not negligible (qr step).
+!           kase = 4     if e(m-1) is negligible (convergence).
+!
+     do ll = 1, m
+
+        l = m - ll
+        if (l == 0) go to 400
+        test = abs(s(l)) + abs(s(l+1))
+        ztest = test + abs(e(l))
+
+        if (ztest == test) then
+           e(l) = 0.0E+00
+           go to 400
+        end if
+
+     end do
+
+  400    continue
+     if (l /= m - 1) go to 410
+        kase = 4
+     go to 480
+  410    continue
+        lp1 = l + 1
+        mp1 = m + 1
+
+        do lls = lp1, mp1
+           ls = m - lls + lp1
+           if (ls == l) go to 440
+           test = 0.0E+00
+           if (ls /= m) test = test + abs(e(ls))
+           if (ls /= l + 1) test = test + abs(e(ls-1))
+           ztest = test + abs(s(ls))
+           if (ztest /= test) go to 420
+              s(ls) = 0.0E+00
+              go to 440
+  420          continue
+        end do
+
+  440       continue
+        if (ls /= l) go to 450
+           kase = 3
+        go to 470
+  450       continue
+        if (ls /= m) go to 460
+           kase = 1
+        go to 470
+  460       continue
+           kase = 2
+           l = ls
+  470       continue
+  480    continue
+     l = l + 1
+!
+!        perform the task indicated by kase.
+!
+     go to (490,520,540,570), kase
+!
+!  deflate negligible s(m).
+!
+  490    continue
+        mm1 = m - 1
+        f = e(m-1)
+        e(m-1) = 0.0E+00
+        do kk = l, mm1
+           k = mm1 - kk + l
+           t1 = s(k)
+           call srotg(t1,f,cs,sn)
+           s(k) = t1
+           if (k == l) go to 500
+              f = -sn*e(k-1)
+              e(k-1) = cs*e(k-1)
+  500          continue
+           if (wantv) call srot(p,v(1,k),1,v(1,m),1,cs,sn)
+        end do
+
+     go to 610
+!
+!  Split at negligible s(l).
+!
+  520    continue
+        f = e(l-1)
+        e(l-1) = 0.0E+00
+
+        do k = l, m
+           t1 = s(k)
+           call srotg(t1,f,cs,sn)
+           s(k) = t1
+           f = -sn*e(k)
+           e(k) = cs*e(k)
+           if (wantu) call srot(n,u(1,k),1,u(1,l-1),1,cs,sn)
+        end do
+
+     go to 610
+!
+!  perform one qr step.
+!
+  540    continue
+!
+!  calculate the shift.
+!
+        scale = max ( abs(s(m)),abs(s(m-1)),abs(e(m-1)),abs(s(l)),abs(e(l)) )
+
+        sm = s(m)/scale
+        smm1 = s(m-1)/scale
+        emm1 = e(m-1)/scale
+        sl = s(l)/scale
+        el = e(l)/scale
+        b = ((smm1 + sm)*(smm1 - sm) + emm1**2)/2.0E+00
+        c = (sm*emm1)**2
+        shift = 0.0E+00
+
+        if ( b /= 0.0E+00 .or. c /= 0.0E+00 ) then
+           shift = sqrt(b**2+c)
+           if (b < 0.0) shift = -shift
+           shift = c/(b + shift)
+        end if
+
+        f = (sl + sm)*(sl - sm) - shift
+        g = sl*el
+!
+!  chase zeros.
+!
+        mm1 = m - 1
+
+        do k = l, m-1
+           call srotg(f,g,cs,sn)
+           if (k /= l) e(k-1) = f
+           f = cs*s(k) + sn*e(k)
+           e(k) = cs*e(k) - sn*s(k)
+           g = sn*s(k+1)
+           s(k+1) = cs*s(k+1)
+           if (wantv) call srot(p,v(1,k),1,v(1,k+1),1,cs,sn)
+           call srotg(f,g,cs,sn)
+           s(k) = f
+           f = cs*e(k) + sn*s(k+1)
+           s(k+1) = -sn*e(k) + cs*s(k+1)
+           g = sn*e(k+1)
+           e(k+1) = cs*e(k+1)
+           if (wantu .and. k < n) then
+             call srot(n,u(1,k),1,u(1,k+1),1,cs,sn)
+           end if
+        end do
+
+        e(m-1) = f
+        iter = iter + 1
+     go to 610
+!
+!  convergence.
+!
+  570    continue
+!
+!  make the singular value  positive.
+!
+        if (s(l) >= 0.0) go to 580
+           s(l) = -s(l)
+           if (wantv) call sscal(p,-1.0,v(1,l),1)
+  580       continue
+!
+!  order the singular value.
+!
+  590       if (l == mm) go to 600
+           if (s(l) >= s(l+1)) go to 600
+           t = s(l)
+           s(l) = s(l+1)
+           s(l+1) = t
+           if (wantv .and. l < p) then
+             call sswap(p,v(1,l),1,v(1,l+1),1)
+           end if
+
+           if (wantu .and. l < n) then
+             call sswap(n,u(1,l),1,u(1,l+1),1)
+           end if
+
+           l = l + 1
+        go to 590
+  600       continue
+        iter = 0
+        m = m - 1
+  610    continue
+  go to 360
+  620 continue
+  return
+end
+subroutine sswap ( n, x, incx, y, incy )
+!
+!*******************************************************************************
+!
+!! SSWAP interchanges two vectors.
+!
+!
+!  Modified:
+!
+!    08 April 1999
+!
+!  Reference:
+!
+!    Lawson, Hanson, Kincaid, Krogh,
+!    Basic Linear Algebra Subprograms for Fortran Usage,
+!    Algorithm 539,
+!    ACM Transactions on Mathematical Software,
+!    Volume 5, Number 3, September 1979, pages 308-323.
+!
+!  Parameters:
+!
+!    Input, integer N, the number of entries in the vectors.
+!
+!    Input/output, real X(*), one of the vectors to swap.
+!
+!    Input, integer INCX, the increment between successive entries of X.
+!
+!    Input/output, real Y(*), one of the vectors to swap.
+!
+!    Input, integer INCY, the increment between successive elements of Y.
+!
+  integer i
+  integer incx
+  integer incy
+  integer ix
+  integer iy
+  integer m
+  integer n
+  real stemp
+  real x(*)
+  real y(*)
+!
+  if ( n <= 0 ) then
+
+  else if ( incx == 1 .and. incy == 1 ) then
+
+    m = mod ( n, 3 )
+
+    do i = 1, m
+      stemp = x(i)
+      x(i) = y(i)
+      y(i) = stemp
+    end do
+
+    do i = m+1, n, 3
+
+      stemp = x(i)
+      x(i) = y(i)
+      y(i) = stemp
+
+      stemp = x(i + 1)
+      x(i + 1) = y(i + 1)
+      y(i + 1) = stemp
+
+      stemp = x(i + 2)
+      x(i + 2) = y(i + 2)
+      y(i + 2) = stemp
+
+    end do
+
+  else
+
+    if ( incx >= 0 ) then
+      ix = 1
+    else
+      ix = ( - n + 1 ) * incx + 1
+    end if
+
+    if ( incy >= 0 ) then
+      iy = 1
+    else
+      iy = ( - n + 1 ) * incy + 1
+    end if
+
+    do i = 1, n
+      stemp = x(ix)
+      x(ix) = y(iy)
+      y(iy) = stemp
+      ix = ix + incx
+      iy = iy + incy
+    end do
+
+  end if
+
+  return
+end
+subroutine tregup(nr,n,x,f,g,a,fcn,sc,sx,nwtake,stepmx,steptl, &
+  dlt,iretcd,xplsp,fplsp,xpls,fpls,mxtake,ipr,method,udiag)
+!
+!*******************************************************************************
+!
+!! TREGUP decides whether to accept the next optimization iterate.
+!
+!
+!  Parameters:
+!
+! nr           --> row dimension of matrix
+! n            --> dimension of problem
+! x(n)         --> old iterate x[k-1]
+! f            --> function value at old iterate, f(x)
+! g(n)         --> gradient at old iterate, g(x), or approximate
+! a(n,n)       --> cholesky decomposition of hessian in
+!                  lower triangular part and diagonal.
+!                  hessian or approx in upper triangular part
+! fcn          --> name of subroutine to evaluate function
+! sc(n)        --> current step
+! sx(n)        --> diagonal scaling matrix for x
+! nwtake       --> boolean, =.true. if newton step taken
+! stepmx       --> maximum allowable step size
+! steptl       --> relative step size at which successive iterates
+!                  considered close enough to terminate algorithm
+! dlt         <--> trust region radius
+! iretcd      <--> return code
+!                    =0 xpls accepted as next iterate;
+!                       dlt trust region for next iteration.
+!                    =1 xpls unsatisfactory but accepted as next iterate
+!                       because xpls-x < smallest allowable
+!                       step length.
+!                    =2 f(xpls) too large.  continue current iteration
+!                       with new reduced dlt.
+!                    =3 f(xpls) sufficiently small, but quadratic model
+!                       predicts f(xpls) sufficiently well to continue
+!                       current iteration with new doubled dlt.
+! xplsp(n)    <--> workspace [value needs to be retained between
+!                  succesive calls of k-th global step]
+! fplsp       <--> [retain value between successive calls]
+! xpls(n)     <--  new iterate x[k]
+! fpls        <--function value at new iterate, f(xpls)
+! mxtake      <--  boolean flag indicating step of maximum length used
+! ipr          --> device to which to send output
+! method       --> algorithm to use to solve minimization problem
+!                    =1 line search
+!                    =2 double dogleg
+!                    =3 more-hebdon
+! udiag(n)     --> diagonal of hessian in a(.,.)
+!
+  integer n
+  integer nr
+!
+  real a(nr,n)
+  real dlt
+  real dltf
+  real dltfp
+  real dltmp
+  real dltp
+  real f
+  real fpls
+  real fplsp
+  real g(n)
+  integer i
+  integer ipr
+  integer iretcd
+  integer j
+  integer method
+  logical mxtake
+  logical nwtake
+  real rln
+  real sc(n)
+  real sdot
+  real slp
+  real stepmx
+  real steptl
+  real sx(n)
+  real temp
+  real udiag(n)
+  real x(n)
+  real xpls(n)
+  real xplsp(n)
+!
+  external fcn
+!
+  mxtake = .false.
+  xpls(1:n) = x(1:n) + sc(1:n)
+  call fcn ( n, xpls, fpls )
+  dltf = fpls - f
+  slp = sdot ( n, g, 1, sc, 1 )
+!
+! next statement added for case of compilers which do not optimize
+! evaluation of next "if" statement (in which case fplsp could be
+! undefined).
+!
+  if ( iretcd==4) fplsp=0.0E+00
+
+  if ( iretcd/=3 .or. (fpls<fplsp .and. dltf<= 1.e-4*slp)) then
+    go to 130
+  end if
+!     if ( iretcd==3 .and. (fpls>=fplsp .or. dltf> 1.e-4*slp))
+!     then
+!
+!       reset xpls to xplsp and terminate global step
+!
+    iretcd=0
+    xpls(1:n)=xplsp(1:n)
+    fpls=fplsp
+    dlt=.5*dlt
+    go to 230
+!     else
+!
+!  fpls too large
+!
+  130   if ( dltf<= 1.e-4*slp) go to 170
+!       if ( dltf> 1.e-4*slp)
+!       then
+      rln=0.
+      do i=1,n
+        rln=max(rln,abs(sc(i))/max(abs(xpls(i)),1./sx(i)))
+      end do
+
+      if ( rln>=steptl) go to 150
+!         if ( rln<steptl)
+!         then
+!
+!  cannot find satisfactory xpls sufficiently distinct from x
+!
+        iretcd=1
+        go to 230
+!         else
+!
+!  reduce trust region and continue global step
+!
+  150       iretcd=2
+        dltmp=-slp*dlt/(2.*(dltf-slp))
+        if ( dltmp>= .1*dlt) go to 155
+!           if ( dltmp< .1*dlt)
+!           then
+          dlt=.1*dlt
+          go to 160
+!           else
+  155         dlt=dltmp
+!           end if
+  160       continue
+        go to 230
+!         end if
+!       else
+!
+!  fpls sufficiently small
+!
+  170     continue
+      dltfp=0.
+      if (method == 3) go to 180
+!
+!         if (method == 2)
+!         then
+!
+      do i = 1, n
+         temp = 0.0E+00
+         do j = i, n
+            temp = temp + (a(j, i)*sc(j))
+         end do
+         dltfp = dltfp + temp*temp
+      end do
+
+      go to 190
+
+  180     continue
+
+      do i = 1, n
+         dltfp = dltfp + udiag(i)*sc(i)*sc(i)
+
+         temp = 0.0E+00
+         do j = i+1, n
+            temp = temp + a(i, j)*sc(i)*sc(j)
+         end do
+         dltfp = dltfp + 2.0*temp
+      end do
+
+  190     dltfp = slp + dltfp/2.0E+00
+      if ( iretcd==2 .or. (abs(dltfp-dltf)> .1*abs(dltf)) &
+         .or. nwtake .or. (dlt> .99*stepmx)) go to 210
+!         if ( iretcd/=2 .and. (abs(dltfp-dltf) <= .1*abs(dltf))
+!    +         .and. (.not.nwtake) .and. (dlt<= .99*stepmx))
+!         then
+!
+!           double trust region and continue global step
+!
+        iretcd=3
+        xplsp(1:n)=xpls(1:n)
+        fplsp=fpls
+        dlt=min(2.*dlt,stepmx)
+        go to 230
+!         else
+!
+!           accept xpls as next iterate.  choose new trust region.
+!
+  210       continue
+        iretcd=0
+        if ( dlt> .99*stepmx) mxtake=.true.
+        if ( dltf< .1*dltfp) go to 220
+!           if ( dltf>= .1*dltfp)
+!           then
+!
+!  decrease trust region for next iteration
+!
+          dlt=.5*dlt
+          go to 230
+!           else
+!
+!             check whether to increase trust region for next iteration
+!
+  220         if ( dltf<= .75*dltfp) dlt=min(2.*dlt,stepmx)
+!           end if
+!         end if
+!       end if
+!     end if
+  230 continue
+  return
+end
+subroutine uncmin (n,x0,fcn,x,f,info,w,lw)
+!
+!*******************************************************************************
+!
+!! UNCMIN minimizes a smooth nonlinear function of n variables.
+!
+!
+!     a subroutine that computes the function value at any point
+!     must be supplied.  derivative values are not required.
+!     this subroutine provides the simplest interface to the uncmin
+!     minimization package.  user has no control over options.
+!
+!  Discussion:
+!
+!     this routine uses a quasi-newton algorithm with line search
+!     to minimize the function represented by the subroutine fcn.
+!     at each iteration, the nonlinear function is approximated
+!     by a quadratic function derived from a taylor series.
+!     the quadratic function is minimized to obtain a search direction,
+!     and an approximate minimum of the nonlinear function along
+!     the search direction is found using a line search.  the
+!     algorithm computes an approximation to the second derivative
+!     matrix of the nonlinear function using quasi-newton techniques.
+!
+!     the uncmin package is quite general, and provides many options
+!     for the user.  however, this subroutine is designed to be
+!     easy to use, with few choices allowed.  for example:
+!
+!     1.  only function values need be computed.  first derivative
+!     values are obtained by finite-differencing.  this can be
+!     very costly when the number of variables is large.
+!
+!     2.  it is assumed that the function values can be obtained
+!     accurately (to an accuracy comparable to the precision of
+!     the computer arithmetic).
+!
+!     3.  at most 150 iterations are allowed.
+!
+!     4.  it is assumed that the function values are well-scaled,
+!     that is, that the optimal function value is not pathologically
+!     large or small.
+!
+!     for more information, see the reference listed below.
+!
+!  Parameters:
+!
+! n            --> integer
+!                  dimension of problem
+! x0(n)        --> real
+!                  initial estimate of minimum
+! fcn          --> name of routine to evaluate minimization function.
+!                  must be declared external in calling routine, and
+!                  have calling sequence
+!                    subroutine fcn(n, x, f)
+!                  with n and x as here, f the computed function value.
+! x(n)        <--  real
+!                  local minimum
+! f           <--  real
+!                function value at local minimum x
+! info        <--  integer
+!                  termination code
+!                      info =  0:  optimal solution found
+!                      info =  1:  terminated with gradient small,
+!                                  x is probably optimal
+!                      info =  2:  terminated with stepsize small,
+!                                  x is probably optimal
+!                      info =  3:  lower point cannot be found,
+!                                  x is probably optimal
+!                      info =  4:  iteration limit (150) exceeded
+!                      info =  5:  too many large steps,
+!                                function may be unbounded
+!                      info = -1:  insufficient workspace
+! w(lw)        --> real
+!                  workspace
+! lw           --> integer
+!                  size of workspace, at least n*(n+10)
+!
+!  references  r.b. schnabel, j.e. koontz, and be.e. weiss, a modular
+!                 system of algorithms for unconstrained minimization,
+!                 report cu-cs-240-82, comp. sci. dept., univ. of
+!                 colorado at boulder, 1982.
+!
+  integer lw
+  integer n
+!
+  real dlt
+  real epsm
+  character errmsg*68
+  real f
+  real fscale
+  real gradtl
+  integer ia
+  integer iagflg
+  integer iahflg
+  integer iexp
+  integer ig
+  integer info
+  integer ipr
+  integer it
+  integer itnlim
+  integer iw1
+  integer iw2
+  integer iw3
+  integer iw4
+  integer iw5
+  integer iw6
+  integer iw7
+  integer iw8
+  integer lwmin
+  integer method
+  integer msg
+  integer ndigit
+  integer nr
+  real stepmx
+  real steptl
+  real w(lw)
+  real x(n)
+  real x0(n)
+!
+  external  fcn, d1fcn, d2fcn
+!
+! subdivide workspace
+!
+  ig  = 1
+  it  = ig  + n
+  iw1 = it  + n
+  iw2 = iw1 + n
+  iw3 = iw2 + n
+  iw4 = iw3 + n
+  iw5 = iw4 + n
+  iw6 = iw5 + n
+  iw7 = iw6 + n
+  iw8 = iw7 + n
+  ia  = iw8 + n
+  lwmin = ia + n*n-1
+
+  if (lwmin > lw) then
+    info = -1
+    write ( *, * ) ' '
+    write ( *, * ) 'UNCMIN - Fatal error!'
+    write ( *, * ) '  Insufficient workspace.'
+    write ( *, * ) '  LW < LWMIN.'
+    write ( *, * ) '  LW = ', lw
+    write ( *, * ) '  LWMIN = ', lwmin
+    stop
+  end if
+!
+!  set up parameters for optdrv
+!
+!  parameters that should not be changed when using condensed code
+!
+! nr     = parameter used to divide workspace
+! method = 1 (line search) -- do not change
+! msg    = 9 => no printing, n=1 allowed
+! iahflg = 1 => analytic hessian  supplied (0 otherwise)
+! ipr    = device for output (irrelevant in current version)
+! dlt    = (irrelevant parameter for method = 1)
+! epsm   = machine epsilon
+!
+  nr = n
+  method = 1
+  msg = 9
+  iahflg = 0
+  ipr = 6
+  dlt = -1.0E+00
+  epsm = epsilon ( epsm )
+!
+! parameters that may be changed:
+!
+! iexp   = 1 => function expensive to evaluate (iexp = 0 => cheap)
+! iagflg = 1 => analytic gradient supplied (0 otherwise)
+! ndigit = -1 => optdrv assumes f is fully accurate
+! itnlim = 150 = maximum number of iterations allowed
+! gradtl = zero tolerance for gradient, for convergence tests
+! stepmx = maximum allowable step size
+! steptl = zero tolerance for step, for convergence tests
+! fscale = typical order-of-magnitude size of function
+! typsiz = typical order-of-magnitude size of x (stored in w(lt))
+!
+  iexp = 1
+  iagflg = 0
+  ndigit = -1
+  itnlim = 150
+  gradtl = epsm**(1.0/3.0)
+  stepmx = 0.0E+00
+  steptl = sqrt(epsm)
+  fscale = 1.0E+00
+  w(it:it+n-1) = 1.0E+00
+!
+! minimize function
+!
+  call optdrv (nr, n, x0, fcn, d1fcn, d2fcn, w(it), fscale, &
+                  method, iexp, msg, ndigit, itnlim, iagflg, iahflg, &
+                  ipr, dlt, gradtl, stepmx, steptl, &
+                  x, f, w(ig), info, w(ia), &
+                  w(iw1), w(iw2), w(iw3), w(iw4), &
+                  w(iw5), w(iw6), w(iw7), w(iw8))
+
+  if (info == 1) then
+    write ( *, * ) ' '
+    write ( *, * ) 'UNCMIN - Note!'
+    write ( *, * ) '  INFO = 1.'
+    write ( *, * ) '  The iteration probably converged.'
+    write ( *, * ) '  The gradient is very small.'
+    return
+  end if
+
+  if (info == 2) then
+    write ( *, * ) ' '
+    write ( *, * ) 'UNCMIN - Note!'
+    write ( *, * ) '  INFO = 2.'
+    write ( *, * ) '  The iteration probably converged.'
+    write ( *, * ) '  The stepsize is very small.'
+    return
+  end if
+
+  if (info == 3) then
+    write ( *, * ) ' '
+    write ( *, * ) 'UNCMIN - Warning!'
+    write ( *, * ) '  INFO = 3.'
+    write ( *, * ) '  Cannot find a point with lower value.'
+    write ( *, * ) '  (But not completely happy with the current value.)'
+    return
+  end if
+
+  if (info == 4) then
+    write ( *, * ) ' '
+    write ( *, * ) 'UNCMIN - Warning!'
+    write ( *, * ) '  INFO = 4.'
+    write ( *, * ) '  Too many iterations.'
+    return
+  end if
+
+  if (info == 5) then
+    write ( *, * ) ' '
+    write ( *, * ) 'UNCMIN - Warning!'
+    write ( *, * ) '  INFO = 5.'
+    write ( *, * ) '  Too many large steps.'
+    write ( *, * ) '  The function may be unbounded.'
+    return
+  end if
+
+  return
+end
+function uni ( )
+!
+!*******************************************************************************
+!
+!! UNI generates real uniform random numbers on [0,1).
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!
+!       usage:
+!              to initialize the generator
+!                   useed = ustart(iseed)
+!               where: iseed is any nonzero integer
+!                  will return floating point value of iseed.
+!
+!               subsequently
+!                       u = uni()
+!                  will return a real uniform on [0,1)
+!
+!                one initialization is necessary, but any number of evaluations
+!                  of  uni in any order, are allowed.
+!
+!           note: depending upon the value of k (see below), the output
+!                       of uni may differ from one machine to another.
+!
+!           typical usage:
+!
+!               real u,uni,ustart,useed
+!               integer iseed
+!c                 set seed
+!               iseed = 305
+!               useed = ustart(iseed)
+!               do i = 1,1000
+!                   u = uni()
+!               end do
+!c                 note: if k=24 (the default, see below) the output value of
+!c                           u will be 0.1570390462475...
+!               write(*,*) u
+!             end
+!
+!          note on portability: users can choose to run uni in its default
+!               mode (requiring no user action) which will generate the same
+!               sequence of numbers on any computer supporting floating point
+!               numbers with at least 24 bit mantissas, or in a mode that
+!               will generate numbers with a longer period on computers with
+!               larger mantissas.
+!          to exercise this option:  b e f o r e  invoking ustart insert
+!               the instruction        ubits = unib(k)      k >= 24
+!               where k is the number of bits in the mantissa of your floating
+!               point word (k=48 for cray, cyber 205). unib returns the
+!               floating point value of k that it actually used.
+!                    k input as <= 24, then ubits=24.
+!                    k input as > 24, then ubits=float(k)
+!               if k>24 the sequence of numbers generated by uni may differ
+!               from one computer to another.
+!
+!
+!
+!  references  marsaglia g., "comments on the perfect uniform random
+!                 number generator", unpublished notes, wash s. u.
+!
+  real, save :: c = 362436.0E+00 / 16777216.0E+00
+  real, parameter :: cd = 7654321.0E+00 / 16777216.0E+00
+  real, parameter :: cm = 16777213.0E+00 / 16777216.0E+00
+  real, parameter :: csave = 362436.0E+00 / 16777216.0E+00
+  integer, save :: i = 17
+  integer i1
+  integer ii
+  integer iseed
+  integer, save :: j = 5
+  integer j1
+  integer jj
+  integer, save :: k = 24
+  integer k1
+  integer kk
+  integer l1
+  integer m1
+  real s
+  real t
+  real, save, dimension ( 17 ) :: u = (/ &
+     0.8668672834288,  0.3697986366357,  0.8008968294805, &
+     0.4173889774680,  0.8254561579836,  0.9640965269077, &
+     0.4508667414265,  0.6451309529668,  0.1645456024730, &
+     0.2787901807898,  0.06761531340295, 0.9663226330820, &
+     0.01963343943798, 0.02947398211399, 0.1636231515294, &
+     0.3976343250467,  0.2631008574685 /)
+  real uni
+  real unib
+  real ustart
+!
+!      load data array in case user forgets to initialize.
+!      this array is the result of calling uni 100000 times
+!         with iseed=305 and k=64.
+!
+!   basic generator is fibonacci
+!
+  uni = u(i)-u(j)
+  if ( uni<0.0)uni = uni+1.0E+00
+  u(i) = uni
+  i = i-1
+  if ( i==0)i = 17
+  j = j-1
+  if ( j==0)j = 17
+!
+!   second generator is congruential
+!
+  c = c-cd
+  if ( c<0.0) c=c+cm
+!
+!   combination generator
+!
+  uni = uni-c
+  if ( uni<0.0)uni = uni+1.0E+00
+  return
+!
+entry ustart ( iseed )
+!
+!          set up ...
+!          convert iseed to four smallish positive integers.
+!
+    i1 = mod(abs(iseed),177)+1
+    j1 = mod(abs(iseed),167)+1
+    k1 = mod(abs(iseed),157)+1
+    l1 = mod(abs(iseed),147)+1
+!
+!              generate random bit pattern in array based on given seed.
+!
+    do ii = 1,17
+
+      s = 0.0E+00
+      t = 0.5
+!             do for each of the bits of mantissa of word
+!             loop  over k bits, where k is defaulted to 24 but can
+!               be changed by user call to unib(k)
+!
+      do jj = 1,k
+        m1 = mod(mod(i1*j1,179)*k1,179)
+        i1 = j1
+        j1 = k1
+        k1 = m1
+        l1 = mod(53*l1+1,169)
+        if ( mod(l1*m1,64)>=32)s=s+t
+        t = .5*t
+       end do
+
+       u(ii) = s
+
+    end do
+
+    ustart = real(iseed)
+    return
+!
+entry unib ( kk )
+
+  if ( kk <= 24 ) then
+    k = 24
+  else
+    k = kk
+  end if
+
+  unib = real ( k )
+
+  return
+end
+function uniform_01_sample ( iseed )
+!
+!*******************************************************************************
+!
+!! UNIFORM_01_SAMPLE is a portable random number generator.
+!
+!
+!  Formula:
+!
+!    ISEED = ISEED * (7**5) mod (2**31 - 1)
+!    RANDOM = ISEED * / ( 2**31 - 1 )
+!
+!  Modified:
+!
+!    01 March 1999
+!
+!  Parameters:
+!
+!    Input/output, integer ISEED, the integer "seed" used to generate
+!    the output random number, and updated in preparation for the
+!    next one.  ISEED should not be zero.
+!
+!    Output, real UNIFORM_01_SAMPLE, a random value between 0 and 1.
+!
+
+!
+!  IA = 7**5
+!  IB = 2**15
+!  IB16 = 2**16
+!  IP = 2**31-1
+!
+  integer, parameter :: ia = 16807
+  integer, parameter :: ib15 = 32768
+  integer, parameter :: ib16 = 65536
+  integer, parameter :: ip = 2147483647
+!
+  integer iprhi
+  integer iseed
+  integer ixhi
+  integer k
+  integer leftlo
+  integer loxa
+  real uniform_01_sample
+!
+!  Don't let ISEED be 0.
+!
+  if ( iseed == 0 ) then
+    iseed = ip
+  end if
+!
+!  Get the 15 high order bits of ISEED.
+!
+  ixhi = iseed / ib16
+!
+!  Get the 16 low bits of ISEED and form the low product.
+!
+  loxa = ( iseed - ixhi * ib16 ) * ia
+!
+!  Get the 15 high order bits of the low product.
+!
+  leftlo = loxa / ib16
+!
+!  Form the 31 highest bits of the full product.
+!
+  iprhi = ixhi * ia + leftlo
+!
+!  Get overflow past the 31st bit of full product.
+!
+  k = iprhi / ib15
+!
+!  Assemble all the parts and presubtract IP.  The parentheses are
+!  essential.
+!
+  iseed = ( ( ( loxa - leftlo * ib16 ) - ip ) + ( iprhi - k * ib15 ) * ib16 ) &
+    + k
+!
+!  Add IP back in if necessary.
+!
+  if ( iseed < 0 ) then
+    iseed = iseed + ip
+  end if
+!
+!  Multiply by 1 / (2**31-1).
+!
+  uniform_01_sample = real ( iseed ) * 4.656612875E-10
+
+  return
+end
+subroutine xerabt(messg,nmessg)
+!
+!*******************************************************************************
+!
+!! XERABT aborts program execution and prints error message.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        ***note*** machine dependent routine
+!        xerabt aborts the execution of the program.
+!        the error message causing the abort is given in the calling
+!        sequence, in case one needs it for printing on a dayfile,
+!        for example.
+!
+!     description of parameters
+!        messg and nmessg are as in xerror, except that nmessg may
+!        be zero, in which case no message is being supplied.
+!
+!     written by ron jones, with slatec common math library subcommittee
+!     latest revision ---  19 mar 1980
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  character*(*) messg
+  integer nmessg
+!
+  stop
+end
+subroutine xerclr
+!
+!*******************************************************************************
+!
+!! XERCLR resets current error number to zero.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        this routine simply resets the current error number to zero.
+!        this may be necessary to do in order to determine that
+!        a certain error has occurred again since the last time
+!        numxer was referenced.
+!
+!     written by ron jones, with slatec common math library subcommittee
+!     latest revision ---  7 june 1978
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer j4save
+  integer junk
+!
+  junk = j4save ( 1, 0, .true. )
+
+  return
+end
+subroutine xerctl(messg1,nmessg,nerr,level,kontrl)
+!
+!*******************************************************************************
+!
+!! XERCTL allows user control over handling of individual errors.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        allows user control over handling of individual errors.
+!        just after each message is recorded, but before it is
+!        processed any further (i.e., before it is printed or
+!        a decision to abort is made), a call is made to xerctl.
+!        if the user has provided his own version of xerctl, he
+!        can then override the value of kontrol used in processing
+!        this message by redefining its value.
+!        kontrl may be set to any value from -2 to 2.
+!        the meanings for kontrl are the same as in xsetf, except
+!        that the value of kontrl changes only for this message.
+!        if kontrl is set to a value outside the range from -2 to 2,
+!        it will be moved back into that range.
+!
+!     description of parameters
+!
+!      --input--
+!        messg1 - the first word (only) of the error message.
+!        nmessg - same as in the call to xerror or xerrwv.
+!        nerr   - same as in the call to xerror or xerrwv.
+!        level  - same as in the call to xerror or xerrwv.
+!        kontrl - the current value of the control flag as set
+!                 by a call to xsetf.
+!
+!      --output--
+!        kontrl - the new value of kontrl.  if kontrl is not
+!                 defined, it will remain at its original value.
+!                 this changed value of control affects only
+!                 the current occurrence of the current message.
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer kontrl
+  integer level
+  character*20 messg1
+  integer nerr
+  integer nmessg
+!
+  return
+end
+subroutine xerdmp
+!
+!*******************************************************************************
+!
+!! XERDMP prints the error tables and then clears them.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        xerdmp prints the error tables, then clears them.
+!
+!     written by ron jones, with slatec common math library subcommittee
+!     latest revision ---  7 june 1978
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer kount
+!
+  call xersav(' ',0,0,0,kount)
+
+  return
+end
+subroutine xermax ( maxnum )
+!
+!*******************************************************************************
+!
+!! XERMAX sets maximum number of times any error message is to be printed.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        xermax sets the maximum number of times any message
+!        is to be printed.  that is, non-fatal messages are
+!        not to be printed after they have occured maxnum times.
+!        such non-fatal messages may be printed less than
+!        maxnum times even if they occur maxnum times, if error
+!        suppression mode (kontrl=0) is ever in effect.
+!
+!     description of parameter
+!      --input--
+!        maxnum - the maximum number of times any one message
+!              is to be printed.
+!
+!     written by ron jones, with slatec common math library subcommittee
+!     latest revision ---  7 june 1978
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer j4save
+  integer junk
+  integer maxnum
+!
+  junk = j4save ( 4, maxnum, .true. )
+
+  return
+end
+subroutine xerprt(messg,nmessg)
+!
+!*******************************************************************************
+!
+!! XERPRT prints a message on each file indicated by xgetua.
+!
+!
+!     latest revision ---  16 sept 1987
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer ichar
+  integer iunit
+  integer kunit
+  integer last
+  integer lenmes
+  integer lun(5)
+  character*(*) messg
+  integer nmessg
+  integer nunit
+!
+!     obtain unit numbers and write line to each unit
+!
+  call xgetua(lun,nunit)
+  lenmes = len(messg)
+
+  do kunit=1,nunit
+
+     iunit = lun(kunit)
+
+     do ichar=1,lenmes,72
+        last = min(ichar+71 , lenmes)
+        if ( iunit==0 ) then
+          write (*,'(1x,a)') messg(ichar:last)
+        else
+          write (iunit,'(1x,a)') messg(ichar:last)
+        end if
+    end do
+
+  end do
+
+  return
+end
+subroutine xerror(messg,nmessg,nerr,level)
+!
+!*******************************************************************************
+!
+!! XERROR processes an error (diagnostic) message.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        xerror processes a diagnostic message, in a manner
+!        determined by the value of level and the current value
+!        of the library error control flag, kontrl.
+!        (see subroutine xsetf for details.)
+!
+!     description of parameters
+!      --input--
+!        messg - the hollerith message to be processed, containing
+!                no more than 72 characters.
+!        nmessg- the actual number of characters in messg.
+!        nerr  - the error number associated with this message.
+!                nerr must not be zero.
+!        level - error category.
+!                =2 means this is an unconditionally fatal error.
+!                =1 means this is a recoverable error.  (i.e., it is
+!                   non-fatal if xsetf has been appropriately called.)
+!                =0 means this is a warning message only.
+!                =-1 means this is a warning message which is to be
+!                   printed at most once, regardless of how many
+!                   times this call is executed.
+!
+!     examples
+!        call xerror('smooth -- num was zero.',23,1,2)
+!        call xerror('integ  -- less than full accuracy achieved.',
+!                    43,2,1)
+!        call xerror('rooter -- actual zero of f found before interval f
+!    1ully collapsed.',65,3,0)
+!        call xerror('exp    -- underflows being set to zero.',39,1,-1)
+!
+!     latest revision ---  19 mar 1980
+!     written by ron jones, with slatec common math library subcommittee
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer level
+  character*(*) messg
+  integer nerr
+  integer nmessg
+!
+  call xerrwv(messg,nmessg,nerr,level,0,0,0,0,0.,0.)
+
+  return
+end
+subroutine xerrwv(messg,nmessg,nerr,level,ni,i1,i2,nr,r1,r2)
+!
+!*******************************************************************************
+!
+!! XERRWV processes error message allowing 2 integer and two real
+!            values to be included in the message.
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        xerrwv processes a diagnostic message, in a manner
+!        determined by the value of level and the current value
+!        of the library error control flag, kontrl.
+!        (see subroutine xsetf for details.)
+!        in addition, up to two integer values and two real
+!        values may be printed along with the message.
+!
+!     description of parameters
+!      --input--
+!        messg - the hollerith message to be processed.
+!        nmessg- the actual number of characters in messg.
+!        nerr  - the error number associated with this message.
+!                nerr must not be zero.
+!        level - error category.
+!                =2 means this is an unconditionally fatal error.
+!                =1 means this is a recoverable error.  (i.e., it is
+!                   non-fatal if xsetf has been appropriately called.)
+!                =0 means this is a warning message only.
+!                =-1 means this is a warning message which is to be
+!                   printed at most once, regardless of how many
+!                   times this call is executed.
+!        ni    - number of integer values to be printed. (0 to 2)
+!        i1    - first integer value.
+!        i2    - second integer value.
+!        nr    - number of real values to be printed. (0 to 2)
+!        r1    - first real value.
+!        r2    - second real value.
+!
+!     examples
+!        call xerrwv('smooth -- num (=i1) was zero.',29,1,2,
+!    1   1,num,0,0,0.,0.)
+!        call xerrwv('quadxy -- requested error (r1) less than minimum (
+!    1r2).,54,77,1,0,0,0,2,errreq,errmin)
+!
+!     latest revision ---  16 sept 1987
+!     written by ron jones, with slatec common math library subcommittee
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  character*37 form
+  integer i
+  integer i1
+  integer i1mach
+  integer i2
+  integer ifatal
+  integer isizei
+  integer isizef
+  integer iunit
+  integer j4save
+  integer junk
+  integer kdummy
+  integer kount
+  integer kunit
+  integer lerr
+  integer level
+  character*20 lfirst
+  integer lkntrl
+  integer llevel
+  integer lmessg
+  integer lun(5)
+  integer maxmes
+  character*(*) messg
+  integer mkntrl
+  integer nerr
+  integer ni
+  integer nmessg
+  integer nr
+  integer nunit
+  real r1
+  real r2
+!
+!     get flags
+!
+  lkntrl = j4save(2,0,.false.)
+  maxmes = j4save(4,0,.false.)
+!     check for valid input
+  if ((nmessg>0).and.(nerr/=0).and.(level>=(-1)).and.(level<=2)) then
+    go to 10
+  end if
+
+     if (lkntrl>0) call xerprt('fatal error in...',17)
+     call xerprt('xerror -- invalid input',23)
+
+     if (lkntrl>0) then
+       call xerprt('job abort due to fatal error.',29)
+     end if
+     if (lkntrl>0) call xersav(' ',0,0,0,kdummy)
+     call xerabt('xerror -- invalid input',23)
+     return
+   10 continue
+!     record message
+  junk = j4save(1,nerr,.true.)
+  call xersav(messg,nmessg,nerr,level,kount)
+!     let user override
+  lfirst = messg
+  lmessg = nmessg
+  lerr = nerr
+  llevel = level
+  call xerctl(lfirst,lmessg,lerr,llevel,lkntrl)
+!
+!  Reset to original values.
+!
+  lmessg = nmessg
+  lerr = nerr
+  llevel = level
+  lkntrl = max(-2,min(2,lkntrl))
+  mkntrl = abs(lkntrl)
+!     decide whether to print message
+  if ((llevel<2).and.(lkntrl==0)) go to 100
+
+  if (((llevel==(-1)).and.(kount>min(1,maxmes))) &
+    .or.((llevel==0)   .and.(kount>maxmes)) &
+    .or.((llevel==1)   .and.(kount>maxmes).and.(mkntrl==1)) &
+    .or.((llevel==2)   .and.(kount>max(1,maxmes)))) then
+    go to 100
+  end if
+
+     if (lkntrl<=0) go to 20
+
+        call xerprt(' ',1)
+
+        if (llevel==(-1)) then
+          call xerprt &
+      ('warning message...this message will only be printed once.',57)
+        end if
+
+        if (llevel==0) call xerprt('warning in...',13)
+
+        if (llevel==1) call xerprt('recoverable error in...',23)
+
+        if (llevel==2) call xerprt('fatal error in...',17)
+   20    continue
+!        message
+     call xerprt(messg,lmessg)
+     call xgetua(lun,nunit)
+     isizei = log10(real(i1mach(9))) + 1.0E+00
+     isizef = log10(real(i1mach(10))**i1mach(11)) + 1.0E+00
+
+     do kunit=1,nunit
+
+        iunit = lun(kunit)
+
+        do i=1,min(ni,2)
+           write (form,21) i,isizei
+   21          format ('(11x,21hin above message, i',i1,'=,i',i2,')   ')
+           if ( iunit==0 ) then
+             if (i==1) write (*,form) i1
+             if (i==2) write (*,form) i2
+           else
+             if (i==1) write (iunit,form) i1
+             if (i==2) write (iunit,form) i2
+           end if
+        end do
+
+        do i=1,min(nr,2)
+           write (form,23) i,isizef+10,isizef
+   23          format ('(11x,21hin above message, r',i1,'=,e',i2,'.',i2,')')
+           if ( iunit==0 ) then
+             if (i==1) write (*,form) r1
+             if (i==2) write (*,form) r2
+           else
+             if (i==1) write (iunit,form) r1
+             if (i==2) write (iunit,form) r2
+           end if
+        end do
+
+        if (lkntrl<=0) go to 40
+!              error number
+           if ( iunit==0 ) then
+             write(*,30) lerr
+           else
+             write (iunit,30) lerr
+           end if
+   30          format (15h error number =,i10)
+   40       continue
+
+     end do
+!
+!        trace-back
+
+  100 continue
+  ifatal = 0
+  if ((llevel==2).or.((llevel==1).and.(mkntrl==2))) then
+    ifatal = 1
+  end if
+
+!     quit here if message is not fatal
+  if (ifatal<=0) return
+  if ((lkntrl<=0).or.(kount>max(1,maxmes))) go to 120
+!        print reason for abort
+     if (llevel==1) call xerprt &
+        ('job abort due to unrecovered error.',35)
+
+     if (llevel==2) then
+       call xerprt('job abort due to fatal error.',29)
+     end if
+
+!        print error summary
+     call xersav(' ',-1,0,0,kdummy)
+  120 continue
+!     abort
+  if ((llevel==2).and.(kount>max(1,maxmes))) lmessg = 0
+  call xerabt(messg,lmessg)
+  return
+end
+subroutine xersav(messg,nmessg,nerr,level,icount)
+!
+!*******************************************************************************
+!
+!! XERSAV records that an error occurred.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        record that this error occurred.
+!
+!     description of parameters
+!     --input--
+!       messg, nmessg, nerr, level are as in xerror,
+!       except that when nmessg=0 the tables will be
+!       dumped and cleared, and when nmessg is less than zero the
+!       tables will be dumped and not cleared.
+!     --output--
+!       icount will be the number of times this message has
+!       been seen, or zero if the table has overflowed and
+!       does not contain this message specifically.
+!       when nmessg=0, icount will not be altered.
+!
+!     written by ron jones, with slatec common math library subcommittee
+!     latest revision ---  19 mar 1980
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer i
+  integer i1mach
+  integer icount
+  integer ii
+  integer iunit
+  integer kount(10)
+  integer, save :: kountx
+  integer kunit
+  integer level
+  integer levtab(10)
+  integer lun(5)
+  character ( len = 20 ) mes
+  character*(*) messg
+  character*20 mestab(10)
+  integer nerr
+  integer, save, dimension ( 10 ) :: nertab
+  integer nmessg
+  integer nunit
+!
+  save mestab,levtab,kount
+!
+!     next two data statements are necessary to provide a blank
+!     error table initially
+!
+  data kount(1),kount(2),kount(3),kount(4),kount(5), &
+    kount(6),kount(7),kount(8),kount(9),kount(10) &
+    /0,0,0,0,0,0,0,0,0,0/
+  data kountx/0/
+!
+  if (nmessg>0) go to 80
+!     dump the table
+     if (kount(1)==0) return
+!        print to each unit
+     call xgetua(lun,nunit)
+
+     do kunit=1,nunit
+        iunit = lun(kunit)
+        if (iunit==0) iunit = i1mach(4)
+!           print table header
+        write (iunit,10)
+   10       format (32h0          error message summary/ &
+            51h message start             nerr     level     count)
+!           print body of table
+        do i=1,10
+           if (kount(i)==0) go to 30
+           write (iunit,15) mestab(i),nertab(i),levtab(i),kount(i)
+   15          format (1x,a20,3i10)
+        end do
+   30       continue
+!           print number of other errors
+        if (kountx/=0) write (iunit,40) kountx
+   40       format (41h0other errors not individually tabulated=,i10)
+        write (iunit,50)
+   50       format (1x)
+     end do
+
+     if (nmessg<0) return
+!
+!        clear the error tables
+!
+     do i=1,10
+       kount(i) = 0
+     end do
+
+     kountx = 0
+     return
+   80 continue
+!     process a message...
+!     search for this messg, or else an empty slot for this messg,
+!     or else determine that the error table is full.
+  mes = messg
+  do 90 i=1,10
+     ii = i
+     if (kount(i)==0) go to 110
+     if (mes/=mestab(i)) go to 90
+     if (nerr/=nertab(i)) go to 90
+     if (level/=levtab(i)) go to 90
+     go to 100
+   90 continue
+!     three possible cases...
+!     table is full
+     kountx = kountx+1
+     icount = 1
+     return
+!     message found in table
+  100    kount(ii) = kount(ii) + 1
+     icount = kount(ii)
+     return
+!     empty slot found for new message
+  110    mestab(ii) = mes
+     nertab(ii) = nerr
+     levtab(ii) = level
+     kount(ii)  = 1
+     icount = 1
+     return
+end
+subroutine xgetf(kontrl)
+!
+!*******************************************************************************
+!
+!! XGETF returns current value of error control flag.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!   abstract
+!        xgetf returns the current value of the error control flag
+!        in kontrl.  see subroutine xsetf for flag value meanings.
+!        (kontrl is an output parameter only.)
+!
+!     written by ron jones, with slatec common math library subcommittee
+!     latest revision ---  7 june 1978
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer j4save
+  integer kontrl
+!
+  kontrl = j4save(2,0,.false.)
+
+  return
+end
+subroutine xgetua(iunita,n)
+!
+!*******************************************************************************
+!
+!! XGETUA returns unit number(s) to which error messages are being sent.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        xgetua may be called to determine the unit number or numbers
+!        to which error messages are being sent.
+!        these unit numbers may have been set by a call to xsetun,
+!        or a call to xsetua, or may be a default value.
+!
+!     description of parameters
+!      --output--
+!        iunit - an array of one to five unit numbers, depending
+!                on the value of n.  a value of zero refers to the
+!                default unit, as defined by the i1mach machine
+!                constant routine.  only iunit(1),...,iunit(n) are
+!                defined by xgetua.  the values of iunit(n+1),...,
+!                iunit(5) are not defined (for n < 5) or altered
+!                in any way by xgetua.
+!        n     - the number of units to which copies of the
+!                error messages are being sent.  n will be in the
+!                range from 1 to 5.
+!
+!     latest revision ---  19 mar 1980
+!     written by ron jones, with slatec common math library subcommittee
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer i
+  integer index
+  integer iunita(5)
+  integer j4save
+  integer n
+!
+  n = j4save(5,0,.false.)
+
+  do i=1,n
+     index = i+4
+     if (i==1) index = 3
+     iunita(i) = j4save(index,0,.false.)
+  end do
+
+  return
+end
+subroutine xgetun(iunit)
+!
+!*******************************************************************************
+!
+!! XGETUN returns the (first) output file to which messages are being sent.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        xgetun gets the (first) output file to which error messages
+!        are being sent.  to find out if more than one file is being
+!        used, one must use the xgetua routine.
+!
+!     description of parameter
+!      --output--
+!        iunit - the logical unit number of the  (first) unit to
+!                which error messages are being sent.
+!                a value of zero means that the default file, as
+!                defined by the i1mach routine, is being used.
+!
+!     written by ron jones, with slatec common math library subcommittee
+!     latest revision --- 23 may 1979
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer iunit
+  integer j4save
+!
+  iunit = j4save(3,0,.false.)
+
+  return
+end
+subroutine xsetf(kontrl)
+!
+!*******************************************************************************
+!
+!! XSETF sets the error control flag.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        xsetf sets the error control flag value to kontrl.
+!        (kontrl is an input parameter only.)
+!        the following table shows how each message is treated,
+!        depending on the values of kontrl and level.  (see xerror
+!        for description of level.)
+!
+!        if kontrl is zero or negative, no information other than the
+!        message itself (including numeric values, if any) will be
+!        printed.  if kontrl is positive, introductory messages,
+!        trace-backs, etc., will be printed in addition to the message.
+!
+!              abs(kontrl)
+!        level        0              1              2
+!        value
+!          2        fatal          fatal          fatal
+!
+!          1     not printed      printed         fatal
+!
+!          0     not printed      printed        printed
+!
+!         -1     not printed      printed        printed
+!                                  only           only
+!                                  once           once
+!
+!     written by ron jones, with slatec common math library subcommittee
+!     latest revision ---  19 mar 1980
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer j4save
+  integer junk
+  integer kontrl
+!
+  if ((kontrl>=(-2)).and.(kontrl<=2)) go to 10
+     call xerrwv('xsetf  -- invalid value of kontrl (i1).',33,1,2, &
+       1,kontrl,0,0,0.,0.)
+     return
+   10 junk = j4save(2,kontrl,.true.)
+  return
+end
+subroutine xsetua(iunita,n)
+!
+!*******************************************************************************
+!
+!! XSETUA sets up to 5 unit numbers to which messages are to be sent.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        xsetua may be called to declare a list of up to five
+!        logical units, each of which is to receive a copy of
+!        each error message processed by this package.
+!        the purpose of xsetua is to allow simultaneous printing
+!        of each error message on, say, a main output file,
+!        an interactive terminal, and other files such as graphics
+!        communication files.
+!
+!     description of parameters
+!      --input--
+!        iunit - an array of up to five unit numbers.
+!                normally these numbers should all be different
+!                (but duplicates are not prohibited.)
+!        n     - the number of unit numbers provided in iunit
+!                must have 1 <= n <= 5.
+!
+!     written by ron jones, with slatec common math library subcommittee
+!     latest revision ---  19 mar 1980
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer i
+  integer index
+  integer iunita(5)
+  integer j4save
+  integer junk
+  integer n
+!
+  if ((n>=1).and.(n<=5)) go to 10
+     call xerrwv('xsetua -- invalid value of n (i1).',34,1,2,1,n,0,0,0.,0.)
+     return
+   10 continue
+
+  do i=1,n
+     index = i+4
+     if (i==1) index = 3
+     junk = j4save(index,iunita(i),.true.)
+  end do
+
+  junk = j4save(5,n,.true.)
+
+  return
+end
+subroutine xsetun(iunit)
+!
+!*******************************************************************************
+!
+!! XSETUN sets the output file to which error messages are to be sent.
+!
+!
+!  Reference:
+!
+!    David Kahaner, Clever Moler, Steven Nash,
+!    Numerical Methods and Software,
+!    Prentice Hall, 1988.
+!
+!     abstract
+!        xsetun sets the output file to which error messages are to
+!        be sent.  only one file will be used.  see xsetua for
+!        how to declare more than one file.
+!
+!     description of parameter
+!      --input--
+!        iunit - an input parameter giving the logical unit number
+!                to which error messages are to be sent.
+!
+!     written by ron jones, with slatec common math library subcommittee
+!     latest revision ---  7 june 1978
+!  references  jones r.e., kahaner d.k., "xerror, the slatec error-
+!                 handling package", sand82-0800, sandia laboratories,
+!                 1982.
+!
+  integer iunit
+  integer j4save
+  integer junk
+!
+  junk = j4save(3,iunit,.true.)
+  junk = j4save(5,1,.true.)
+
+  return
+end
Index: /trunk/00FlowSolve_PL/SRC/noise.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/noise.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/noise.f90	(revision 6)
@@ -0,0 +1,86 @@
+      subroutine noise(unoise,vnoise)
+!
+      use mpi_parameters
+      use dependent_variables
+      include '../input/problem_size.h'
+!
+      real      ::      unoise(nx,ny,locnz)
+      real      ::      vnoise(nx,ny,locnz)
+      double precision      ::      phasex(nx),phasey(ny)
+      real                  ::      maxu,minu,maxv,minv
+      real                  ::      u0,v0,r
+      integer   ::      k,j,i,iseed,nxm1,nym1
+!
+      nxm1 = nx - 1
+      nym1 = ny - 1
+!
+      u0 = .01
+      v0 = .01
+      iseed = myid - 16
+!
+      do j=1,ny
+      r = ran1(iseed)
+      r = -1. + 2.*r
+      phasey(j) = r
+      enddo
+!
+      do i=1,nx
+      r = ran1(iseed)
+      r = -1. + 2.*r
+      phasex(i) = r
+      enddo
+!
+!!!      write(0,*) 'PHASEX',myid,phasex
+!!!      write(0,*) 'PHASEY',myid,phasey
+!
+       do k=1,locnz
+!
+          do i=1,nxm1
+             unoise(i,:,k) = u0*phasey(:)
+             unoise(i,ny,k) = unoise(i,1,k)
+          enddo
+          unoise(nx,:,k) = unoise(1,:,k)
+!
+          do j=1,nym1
+             vnoise(:,j,k) = v0*phasex(:)
+             vnoise(nx,j,k) = vnoise(1,j,k)
+          enddo
+          vnoise(:,ny,k) = vnoise(:,1,k)
+!
+      maxu = MAXVAL(unoise(:,:,k))
+      minu = MINVAL(unoise(:,:,k))
+      maxv = MAXVAL(vnoise(:,:,k))
+      minv = MINVAL(vnoise(:,:,k))
+      write(0,*) 'MAXMIN',myid,k,maxu,minu,maxv,minv
+!
+       enddo
+!
+       end
+!
+      FUNCTION ran1(idum)
+      INTEGER  ::   idum,IA,IM,IQ,IR,NTAB,NDIV
+      REAL  ::   ran1,AM,EPS,RNMX
+      PARAMETER (IA=16807,IM=2147483647,AM=1./IM,IQ=127773,IR=2836,   &
+      NTAB=32,NDIV=1+(IM-1)/NTAB,EPS=1.2e-7,RNMX=1.-EPS)
+      INTEGER  ::   j,k,iv(NTAB),iy
+      SAVE  ::   iv,iy
+      DATA iv /NTAB*0/, iy /0/
+      if (idum.le.0.or.iy.eq.0) then
+        idum=max(-idum,1)
+        do  j=NTAB+8,1,-1
+          k=idum/IQ
+          idum=IA*(idum-k*IQ)-IR*k
+          if (idum.lt.0) idum=idum+IM
+          if (j.le.NTAB) iv(j)=idum
+      enddo
+        iy=iv(1)
+      endif
+      k=idum/IQ
+      idum=IA*(idum-k*IQ)-IR*k
+      if (idum.lt.0) idum=idum+IM
+      j=1+iy/NDIV
+      iy=iv(j)
+      iv(j)=idum
+      ran1=min(AM*iy,RNMX)
+      return
+      END
Index: /trunk/00FlowSolve_PL/SRC/project.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/project.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/project.f90	(revision 6)
@@ -0,0 +1,64 @@
+subroutine project
+#define DEBUG_LEVEL 1
+!      routine to project the intermediate velocity field u*
+!      onto its non-divergent subspace. The projection is
+!
+!                u_(n+1) = u_star - dt*"grad"[p]
+!
+!      inputs:
+!             u_star etc       intermediate velocity fields, divergent
+!             grad_{x,y,z}     three components of the pressure "gradient"
+!             dt               time increment
+!
+!      outputs:
+!             u,v,w        the divergence free velocity 
+!
+
+use grid_info
+use mpi_parameters
+use dependent_variables
+use intermediate_variables
+use boundary_information
+use immersed_boundary
+use integration_weights
+use user_parameters
+implicit none
+
+include '../input/problem_size.h'
+include 'mpif.h'
+
+
+#if DEBUG_LEVEL >= 1
+ if(myid==0) write(0,*) 'hello world from project '
+#endif
+
+ u(:,:,:) = u_star(:,:,:) &
+                -dt*grad_x(:,:,:)
+ v(:,:,:) = v_star(:,:,:) &
+                -dt*grad_y(:,:,:)
+ w(:,:,:) = w_star(:,:,:) &
+                -dt*grad_z(:,:,:)
+
+! Overwrite the old values of u_star, v_star and w_star 
+! at the edges with the current values.
+! These are sometimes needed for the boundary conditions for pressure P.
+
+! All processors do left/right and front/back faces
+! LEFT AND RIGHT (xi=0,L_xi) FACES
+ u_star_old(1:ny,1:locnz,1) = u_star(1,1:ny,1:locnz)
+ u_star_old(1:ny,1:locnz,2) = u_star(nx,1:ny,1:locnz)
+
+!FRONT AND BACK (eta=0,L_eta) FACES
+ v_star_old(1:nx,1:locnz,1) = v_star(1:nx,1,1:locnz)
+ v_star_old(1:nx,1:locnz,2) = v_star(1:nx,ny,1:locnz)
+
+! Only processors 0 and numprocs-1 need to handle bottom
+! and top faces respectively. (zeta=0,L_zeta) 
+ if( myid .eq. 0 ) then
+  w_star_old(:,:,1) = w_star(:,:,1)
+ elseif( myid .eq. numprocs-1 ) then
+  !w_star_old(:,:,2) = w_star(:,:,nz) 
+  w_star_old(1:nx,1:ny,2) = w_star(1:nx,1:ny,locnz)  ! looks like it should be locnz to me!
+ endif
+
+end subroutine project
Index: /trunk/00FlowSolve_PL/SRC/random.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/random.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/random.f90	(revision 6)
@@ -0,0 +1,27 @@
+      FUNCTION ran1(idum)
+      INTEGER  ::   idum,IA,IM,IQ,IR,NTAB,NDIV
+      REAL  ::   ran1,AM,EPS,RNMX
+      PARAMETER (IA=16807,IM=2147483647,AM=1./IM,IQ=127773,IR=2836,   &
+      NTAB=32,NDIV=1+(IM-1)/NTAB,EPS=1.e-12,RNMX=1.-EPS)
+      INTEGER  ::   j,k,iv(NTAB),iy
+      SAVE  ::   iv,iy
+      DATA iv /NTAB*0/, iy /0/
+      if (idum.le.0.or.iy.eq.0) then
+        idum=max(-idum,1)
+        do  j=NTAB+8,1,-1
+          k=idum/IQ
+          idum=IA*(idum-k*IQ)-IR*k
+          if (idum.lt.0) idum=idum+IM
+          if (j.le.NTAB) iv(j)=idum
+      enddo
+        iy=iv(1)
+      endif
+      k=idum/IQ
+      idum=IA*(idum-k*IQ)-IR*k
+      if (idum.lt.0) idum=idum+IM
+      j=1+iy/NDIV
+      iy=iv(j)
+      iv(j)=idum
+      ran1=min(AM*iy,RNMX)
+      return
+      END
Index: /trunk/00FlowSolve_PL/SRC/read_grid_data.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/read_grid_data.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/read_grid_data.f90	(revision 6)
@@ -0,0 +1,107 @@
+subroutine read_grid_data(coords_file,rblock)
+
+#define DEBUG_FLAG 1
+
+ use grid_info
+ use mpi_parameters
+ implicit none
+
+ include 'mpif.h'
+ include '../input/problem_size.h'
+ character(len=*)       :: coords_file
+ integer                :: rblock,iblock,m1,m2,m3,i,j,k,ierr
+ real                   :: tmp, L_xi, L_eta, L_zeta,xx
+
+#if DEBUG_FLAG >= 1
+ if(myid .eq. 0 ) write(0,*) '       hello world from read_grid_data',coords_file,rblock
+#endif
+
+ if( myid .ne. rblock ) return  ! one active processor per read block
+  open(1,file=coords_file) 
+      
+  read(1,*) m1,m2,m3,L_xi,L_eta,L_zeta ! dimensionless values
+  if( m1 .ne. nx .or. m2 .ne. ny .or. m3 .ne. locnz*numprocs ) then
+   if( myid .eq. 0 ) then
+    write(0,*) ' problem size read in from grid_metrics does not'
+    write(0,*) ' match problem size specification in problem_size.h'
+    write(0,*) '             L_xi  ',L_xi
+    write(0,*) '             L_eta  ',L_eta
+    write(0,*) '             L_zeta  ',L_zeta
+    stop  
+   endif
+  endif
+
+! Each processor stores only its portion of the grid & metrics data.
+! Read strategy:
+!  Each processor opens file and reads from the beginning in
+!  locnz level blocks, keeping only that data from block (myid+1)
+!  Wasteful, but only executed at startup and permits backward
+!  compatable grid_coords files.
+
+  do i=1,nx
+   do iblock=0,numprocs-1
+    do k=1,locnz              
+     if(iblock .eq. myid) then
+      read(1,*) Grid(0)%x(i,k),Grid(0)%z(i,k),Grid(0)%x_xi(i,k),Grid(0)%x_zeta(i,k),       &
+                Grid(0)%z_xi(i,k),Grid(0)%z_zeta(i,k),                     &
+                GM_uu(i,k,1),GM_uw(i,k,1),GM_ww(i,k,1),    &
+                GM_uu(i,k,2),GM_uw(i,k,2),GM_ww(i,k,2),    &
+                Grid(0)%Cxx(i,k),Grid(0)%Czz(i,k),tmp,tmp
+     else  ! read values but don't bother to store them
+      read(1,*) tmp,tmp,tmp,tmp,tmp,tmp,tmp,tmp,           &
+                tmp,tmp,tmp,tmp,tmp,tmp,tmp,tmp
+     endif
+    enddo
+   enddo
+  enddo 
+
+! Each processor reads and stores the y coordinate data.
+ do j=1,ny
+  read(1,*) Grid(0)%y(j),Grid(0)%y_eta(j),tmp,Grid(0)%Cyy(j)
+ enddo
+ close(1)
+
+! Zero out (z_xi,x_zeta) on (top,side) boundaries.
+! BOTTOM not oriented with x/z=const,--> these terms not zero.
+! TOP
+  if( myid .eq. numprocs-1 ) then
+   Grid(0)%z_xi(1:nx,locnz)=0.0
+   Grid(0)%x_zeta(1:nx,locnz)=0.0
+  endif
+
+! SIDES
+! LEFT
+  Grid(0)%x_zeta(1,1:locnz)=0.0
+  Grid(0)%z_xi(1,1:locnz)=0.0
+! RIGHT
+  Grid(0)%x_zeta(nx,1:locnz)=0.0
+  Grid(0)%z_xi(nx,1:locnz)=0.0
+
+! Calculate J determinant and inverse of J 
+! over the local data space.
+  Grid(0)%det_J = Grid(0)%x_xi*Grid(0)%z_zeta - Grid(0)%x_zeta*Grid(0)%z_xi
+  Grid(0)%J_matrix(:,:,1,1) =  Grid(0)%z_zeta/Grid(0)%det_J
+  Grid(0)%J_matrix(:,:,1,2) = -Grid(0)%z_xi/Grid(0)%det_J
+  Grid(0)%J_matrix(:,:,2,1) = -Grid(0)%x_zeta/Grid(0)%det_J 
+  Grid(0)%J_matrix(:,:,2,2) =  Grid(0)%x_xi/Grid(0)%det_J
+
+#if DEBUG_FLAG >= 1
+  if( myid .eq. numprocs-1 ) then
+   write(0,*) '            dless L_x :',Grid(0)%x(nx,1)-Grid(0)%x(1,1)
+   write(0,*) '            dless L_y :',Grid(0)%y(ny)-Grid(0)%y(1)
+   write(0,*) '            dless L_z :',Grid(0)%z(1,locnz)
+   write(0,*) '            det_J ',Grid(0)%det_J(nx/2,locnz/2)
+  endif
+#endif
+
+! Modify the coefficients Cxx, Cyy and Czz as required for
+! the slightly different approach to the pressure solution when 
+! using the self-adjoint form. Making the modifications here allows
+! the grid generation routines to be backward compatible with
+! earlier versions of the code that used MUDPACK for the pressure solves.
+
+  Grid(0)%Cxx = Grid(0)%det_J*Grid(0)%Cxx
+  Grid(0)%Czz = Grid(0)%det_J*Grid(0)%Czz
+  Grid(0)%Cyy=1./Grid(0)%y_eta
+
+end subroutine read_grid_data
Index: /trunk/00FlowSolve_PL/SRC/rhs.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/rhs.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/rhs.f90	(revision 6)
@@ -0,0 +1,25 @@
+subroutine rhs
+
+#define DEBUG_LEVEL 1
+! Module definitions in cfd_modules.F90
+use  rhs_variables
+use  mpi_parameters
+use  pde_parameters
+use  user_parameters
+use  intermediate_variables
+use  counters_flags_etc
+implicit none
+
+include 'mpif.h'
+include '../input/problem_size.h'
+
+  call equation_of_state                       ! calc. d'less pd given s1,s2 and s1_bar,s2_bar
+  call ibr_1                                   ! rhs for U neglecting pressure & dissipation
+  call ibr_2                                   ! rhs for v neglecting pressure & dissipation
+  call ibr_3                                   ! rhs for W neglecting pressure & dissipation
+  call ibr_4                                   ! rhs for s1 neglecting diffusion
+  if(num_scalars>1) call ibr_5                 ! rhs for s2 neglecting diffusion
+
+  call dissipation                             ! add in dissipation/diffusion terms
+
+end subroutine rhs
Index: /trunk/00FlowSolve_PL/SRC/save_restart.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/save_restart.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/save_restart.f90	(revision 6)
@@ -0,0 +1,242 @@
+subroutine restart
+#define DEBUG_LEVEL 1
+!routine to restart simulation from save file
+
+ use counters_flags_etc
+ use dependent_variables
+ use rhs_variables
+ use intermediate_variables
+ use mpi_parameters
+ use boundary_information
+ use grid_info
+ use dimensional_scales
+
+ implicit none
+ include '../input/problem_size.h'
+ character(len=5)                  :: step_number
+ character(len=4)                  :: processor_id
+ character(len=80)                 :: filename
+ integer                           :: pid_in,ix,iy,iz,iAB,ntimes
+
+  real                      ::        unoise(nx,ny,locnz)
+  real                      ::        vnoise(nx,ny,locnz)
+
+!open save/restart file
+ write(step_number,'(I5.5)') save_file
+ write(processor_id,'(I4.4)') myid
+ filename='../output/save_'//step_number//'_'//processor_id
+ open(1,file=filename,status='old',form='unformatted')
+
+!control parameters
+ read(1) pid_in,istart,t_start,old,new,MM3,MM2,MM1,MM0,ntimes
+  iend = istart+nsteps
+  if( ntimes > AB_order ) ntimes=AB_order     ! read/store only what will be used
+  if( AB_order == 2 .and. ntimes == 2 ) step_flag='AB2'
+  if( AB_order == 3 .and. ntimes == 2 ) step_flag='AB2'
+  if( AB_order == 3 .and. ntimes == 3 ) step_flag='AB3'
+  if( AB_order == 4 .and. ntimes == 4 ) step_flag='AB4'
+ if( pid_in /= myid ) then
+  write(0,*) 'myid doesnt match id in save/restart file',myid,pid_in
+  stop
+ endif
+ if(istart /= save_file) then
+  if(myid.eq.0) then
+   write(0,*) 'FALSE RESTART; istart,save_file=',istart,save_file
+  endif
+  stop
+ endif
+
+!field variables
+ do iz=1,locnz
+  read(1)((U(ix,iy,iz),ix=1,nx),iy=1,ny)
+  read(1)((v(ix,iy,iz),ix=1,nx),iy=1,ny)
+  read(1)((W(ix,iy,iz),ix=1,nx),iy=1,ny)
+  read(1)((s1(ix,iy,iz),ix=1,nx),iy=1,ny)
+  if(num_scalars>1) read(1)((s2(ix,iy,iz),ix=1,nx),iy=1,ny)
+ enddo
+
+!!!     call noise(unoise,vnoise)
+!!!     do j=1,ny
+!!!     U(:,j,:) = U(:,j,:) + unoise(:,j,:) / (U_scale*Grid(0)%x_xi(:,:))
+!!!     V(:,j,:) = V(:,j,:) + vnoise(:,j,:) / U_scale
+!!!     enddo
+
+!right-hand sides
+ do iAB=1,ntimes
+  do iz=1,locnz
+   read(1)((rhs1(ix,iy,iz,iAB),ix=1,nx),iy=1,ny)
+   read(1)((rhs2(ix,iy,iz,iAB),ix=1,nx),iy=1,ny)
+   read(1)((rhs3(ix,iy,iz,iAB),ix=1,nx),iy=1,ny)
+   read(1)((rhs4(ix,iy,iz,iAB),ix=1,nx),iy=1,ny)
+   if(num_scalars>1) read(1)((rhs5(ix,iy,iz,iAB),ix=1,nx),iy=1,ny)
+  enddo
+ enddo
+
+!pressure
+ do k=1,2
+  do iz=1,locnz
+   read(1)((pressure(ix,iy,iz,k),ix=1,nx),iy=1,ny)
+  enddo
+ enddo
+
+!divergence arrays
+ do iz=1,locnz
+  read(1)((u_star(ix,iy,iz),ix=1,nx),iy=1,ny)
+  read(1)((v_star(ix,iy,iz),ix=1,nx),iy=1,ny)
+  read(1)((w_star(ix,iy,iz),ix=1,nx),iy=1,ny)
+ enddo
+ do k=1,2
+  read(1)((u_star_old(iy,iz,k),iy=1,ny),iz=1,locnz)
+  read(1)((v_star_old(ix,iz,k),ix=1,nx),iz=1,locnz)
+  read(1)((w_star_old(ix,iy,k),ix=1,nx),iy=1,ny)
+  do iz=1,locnz
+   read(1)((div_u(ix,iy,iz,k),ix=1,nx),iy=1,ny)
+  enddo
+ enddo
+
+!ambient scalar arrays
+ do iz=1,locnz
+  read(1)(s1_bar(ix,iz),ix=1,nx)
+  read(1)(s1_bar_xi(ix,iz),ix=1,nx)
+  read(1)(s1_bar_zeta(ix,iz),ix=1,nx)
+  if(num_scalars>1) read(1)(s2_bar(ix,iz),ix=1,nx)
+  if(num_scalars>1) read(1)(s2_bar_xi(ix,iz),ix=1,nx)
+  if(num_scalars>1) read(1)(s2_bar_zeta(ix,iz),ix=1,nx)
+  read(1)(rho_bar(ix,iz),ix=1,nx)
+ enddo
+
+!y radiation bcs data
+ do i=1,6
+  do j=1,3
+   do k=1,4
+    do iz=1,locnz
+     read(1)(phiY(ix,iz,i,j,k),ix=1,nx)
+    enddo
+   enddo
+  enddo
+ enddo
+
+!Y inflow conditions
+ do i=1,4
+  do iz=1,locnz
+   read(1)(inflow(ix,iz,i),ix=1,nx)
+  enddo
+ enddo
+
+ close(1)
+ write3D_counter = 1
+end subroutine restart
+
+
+
+subroutine save
+#define DEBUG_LEVEL 1
+!routine to save control and flow variables for restart
+
+ use counters_flags_etc
+ use dependent_variables
+ use rhs_variables
+ use intermediate_variables
+ use mpi_parameters
+ use boundary_information
+ use grid_info
+
+ implicit none
+ include '../input/problem_size.h'
+ character(len=5)                  :: step_number
+ character(len=4)                  :: processor_id
+ character(len=80)                 :: filename
+ integer                           :: pid_in,ix,iy,iz,iAB
+
+! Execute routine only at designated time steps
+ if( istep==istart ) return
+!!! if( istep==istart  .and. istart.ne.0 ) return
+ if( mod(istep,i_restart) /= 0 ) return
+
+#if DEBUG_LEVEL >=1
+ write(0,*) 'hello world from subroutine save'
+#endif
+
+!open save/restart file
+ write(step_number,'(I5.5)') istep
+ write(processor_id,'(I4.4)') myid
+ filename='../output/save_'//step_number//'_'//processor_id
+ open(1,file=filename,status='new',form='unformatted')
+
+!control parameters
+ write(1) myid,istep,t,old,new,MM3,MM2,MM1,MM0,AB_order
+
+!field variables
+ do iz=1,locnz
+  write(1)((U(ix,iy,iz),ix=1,nx),iy=1,ny)
+  write(1)((v(ix,iy,iz),ix=1,nx),iy=1,ny)
+  write(1)((W(ix,iy,iz),ix=1,nx),iy=1,ny)
+  write(1)((s1(ix,iy,iz),ix=1,nx),iy=1,ny)
+  if(num_scalars>1) write(1)((s2(ix,iy,iz),ix=1,nx),iy=1,ny)
+ enddo
+
+!right-hand sides
+ do iAB=1,AB_order
+  do iz=1,locnz
+   write(1)((rhs1(ix,iy,iz,iAB),ix=1,nx),iy=1,ny)
+   write(1)((rhs2(ix,iy,iz,iAB),ix=1,nx),iy=1,ny)
+   write(1)((rhs3(ix,iy,iz,iAB),ix=1,nx),iy=1,ny)
+   write(1)((rhs4(ix,iy,iz,iAB),ix=1,nx),iy=1,ny)
+   if(num_scalars>1) write(1)((rhs5(ix,iy,iz,iAB),ix=1,nx),iy=1,ny)
+  enddo
+ enddo
+
+!pressure
+ do k=1,2
+  do iz=1,locnz
+   write(1)((pressure(ix,iy,iz,k),ix=1,nx),iy=1,ny)
+  enddo
+ enddo
+
+!divergence arrays
+ do iz=1,locnz
+  write(1)((u_star(ix,iy,iz),ix=1,nx),iy=1,ny)
+  write(1)((v_star(ix,iy,iz),ix=1,nx),iy=1,ny)
+  write(1)((w_star(ix,iy,iz),ix=1,nx),iy=1,ny)
+ enddo
+ do k=1,2
+  write(1)((u_star_old(iy,iz,k),iy=1,ny),iz=1,locnz)
+  write(1)((v_star_old(ix,iz,k),ix=1,nx),iz=1,locnz)
+  write(1)((w_star_old(ix,iy,k),ix=1,nx),iy=1,ny)
+  do iz=1,locnz
+   write(1)((div_u(ix,iy,iz,k),ix=1,nx),iy=1,ny)
+  enddo
+ enddo
+
+!ambient scalar arrays
+ do iz=1,locnz
+  write(1)(s1_bar(ix,iz),ix=1,nx)
+  write(1)(s1_bar_xi(ix,iz),ix=1,nx)
+  write(1)(s1_bar_zeta(ix,iz),ix=1,nx)
+  if(num_scalars>1) write(1)(s2_bar(ix,iz),ix=1,nx)
+  if(num_scalars>1) write(1)(s2_bar_xi(ix,iz),ix=1,nx)
+  if(num_scalars>1) write(1)(s2_bar_zeta(ix,iz),ix=1,nx)
+  write(1)(rho_bar(ix,iz),ix=1,nx)
+ enddo
+
+!y radiation bcs data
+ do i=1,6
+  do j=1,3
+   do k=1,4
+    do iz=1,locnz
+     write(1)(phiY(ix,iz,i,j,k),ix=1,nx)
+    enddo
+   enddo
+  enddo
+ enddo
+
+!Y inflow conditions
+ do i=1,4
+  do iz=1,locnz
+   write(1)(inflow(ix,iz,i),ix=1,nx)
+  enddo
+ enddo
+
+ close(1)
+
+end subroutine save
Index: /trunk/00FlowSolve_PL/SRC/set_BC_values.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/set_BC_values.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/set_BC_values.f90	(revision 6)
@@ -0,0 +1,84 @@
+subroutine set_BC_values
+#define DEBUG_LEVEL 1
+
+! ****  Most arrays available via use statements ******
+ use grid_info
+ use boundary_information
+ use dependent_variables
+ use pde_parameters
+ use dimensional_scales
+ use mpi_parameters
+ use counters_flags_etc
+ use user_parameters
+ implicit none
+!******************************************************
+ include '../input/problem_size.h'
+ include 'mpif.h'
+!******************************************************
+ real dv_dzeta,f_of_t
+
+ if( istep > istart .and. steady_BCS=='yes' ) return
+#if DEBUG_LEVEL >= 1
+ if(myid==0) write(0,*) 'hello world from set_BC_values'
+#endif
+
+! FACE 1:  xi=0
+ BC_values1(:,:,1)=0.0    ! BC_vel1(:,:)='solid' => U
+ BC_values1(:,:,2)=0.0    ! BC_vel1(:,:)='specified_value' => v
+ BC_values1(:,:,3)=0.0    ! BC_vel1(:,:)='specified_value' => W
+ BC_values1(:,:,4)=0.0    ! BC_scalar1(:,:,1)='specified_gradient' => d/dxi (s1)
+ if(num_scalars>1)  &
+ BC_values1(:,:,5)=0.0    ! BC_scalar1(:,:,2)='specified_gradient' => d/dxi (s2)
+
+! FACE 2:  xi=1
+ BC_values2(:,:,1)=0.0    ! BC_vel1(:,:)='solid' => U
+ BC_values2(:,:,2)=0.0    ! BC_vel1(:,:)='specified_value' => v
+ BC_values2(:,:,3)=0.0    ! BC_vel1(:,:)='specified_value' => W
+ BC_values2(:,:,4)=0.0    ! BC_scalar1(:,:,1)='specified_gradient' => d/dxi (s1)
+ if(num_scalars>1)  &
+ BC_values2(:,:,5)=0.0    ! BC_scalar1(:,:,2)='specified_gradient' => d/dxi (s2)
+
+! FACE 3:  eta=0
+ BC_values3(:,:,1)=0.0    ! BC_vel3(:,:)='specified "stress"' => du/deta
+ BC_values3(:,:,2)=0.0    ! BC_vel3(:,:)='specified "stress"' => "dv/deta"
+ BC_values3(:,:,3)=0.0    ! BC_vel3(:,:)='specified "stress"' => dw/deta
+ BC_values3(:,:,4)=0.0    ! BC_scalar3(:,:,1)='specified_gradient' => ds1/deta
+ if(num_scalars>1)  &
+ BC_values3(:,:,5)=0.0    ! BC_scalar3(:,:,2)='specified_gradient' => ds2/deta
+
+! FACE 4:  eta=1
+ BC_values4(:,:,1)=0.0    ! BC_vel4(:,:)='specified "stress"' => du/deta
+ BC_values4(:,:,2)=0.0    ! BC_vel4(:,:)='specified "stress"' => "dv/deta"
+ BC_values4(:,:,3)=0.0    ! BC_vel3(:,:)='specified "stress"' => dw/deta
+ BC_values4(:,:,4)=0.0    ! BC_scalar4(:,:,1)='specified_gradient' => ds1/deta
+ if(num_scalars>1)  &
+ BC_values4(:,:,5)=0.0    ! BC_scalar4(:,:,2)='specified_gradient' => ds2/deta
+
+! FACE 5:  zeta=0   ! values set for free-slip wall
+if( myid == 0 ) then
+ BC_values5(:,:,1)=0.0    ! BC_vel5(:,:)='specified_stress' => dU/dzeta=0
+ BC_values5(:,:,2)=0.0    ! BC_vel5(:,:)='specified_stress' => dv/dzeta=0
+ BC_values5(:,:,3)=0.0    ! BC_vel5(:,:)='specified_value' => W=0
+ do j=1,ny
+! BC_values5(:,j,4)=-s1_bar_zeta(:,1)     ! BC_scalar5(:,:,1)='specified_gradient' => d/dzeta( s1 )
+! BC_values5(:,j,4)=0.0                   ! s1=0 IW test
+  BC_values5(:,j,4)=0.0                   ! d/dzeta( s1 )=0, total gradient=ambient value
+  if(num_scalars>1)  &
+  BC_values5(:,j,5)=0.0                   ! d/dzeta( s2 )=0, total gradient=ambient value
+ enddo
+endif
+
+! FACE 6:  zeta=1
+if( myid == numprocs-1 ) then
+ BC_values6(:,:,1)=0.0    ! BC_vel6(:,:)='specified_stress' => set dU/dzeta=0
+ BC_values6(:,:,2)=0.0    ! BC_vel6(:,:)='specified_stress' => set dV/dzeta=0
+ BC_values6(:,:,3)=0.0    ! solid => W=0
+ do j=1,ny
+  BC_values6(:,j,4)=-s1_bar_zeta(:,locnz)    ! BC_scalar6(:,:,1)='specified_gradient' => d/dzeta( s1 )
+  if(num_scalars>1)  &
+  BC_values6(:,j,5)=-s2_bar_zeta(:,locnz)    ! BC_scalar6(:,:,2)='specified_gradient' => d/dzeta( s2 )
+ enddo
+
+endif
+
+end subroutine set_BC_values
Index: /trunk/00FlowSolve_PL/SRC/set_ambient_stratification.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/set_ambient_stratification.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/set_ambient_stratification.f90	(revision 6)
@@ -0,0 +1,155 @@
+subroutine set_ambient_stratification
+
+! routine to set the ambient profiles for the scalars s1 and s2
+! where total_s1 = s1_bar(x,z) + s1(x,y,z,t)
+! and   total_s2 = s2_bar(x,z) + s2(x,y,z,t)
+
+use grid_info
+use user_parameters       ! for z_N,z_N_scale,Smax,Smin,Tmax,Tmin
+use dependent_variables   ! s1_bar, s2_bar,rho_bar
+use dimensional_scales    ! s1_scale, s2_scale
+use counters_flags_etc
+use mpi_parameters
+implicit none
+include '../input/problem_size.h'
+
+! local variables
+ real        :: xpos,zpos,Temp,Salinity
+ real        :: tempd,saltd
+ real, dimension(locnz)        :: zz
+
+!!!z_N = 30.               ! [m]
+!!!z_N_scale =  10.        ! [m]
+
+! these are just values pulled out of a hat for testing
+!!!Smax =  36.0/1000.      ! [ppt]
+!!!Smin =  35.5/1000.      ! [ppt]
+!!!Tmax =  10.0            ! [deg C]
+!!!Tmin =   9.5            ! [deg C]
+
+!  we'll use s1 for temperature (deg C) and s2 for salinity (g/kg or ppt)
+
+! both of these test profiles are stable
+ do k=1,locnz
+  do i=1,nx
+   xpos = Grid(0)%x(i,k)*L_scale     ! [m]
+   zpos = Grid(0)%z(i,k)*L_scale     ! [m]
+!!!   Salinity = Smin + ( (Smax-Smin)/2. )*( 1. - tanh( (zpos-z_N)/z_N_scale ) ) ! ppt
+!!!   Temp = Tmax - ( (Tmax-Tmin)/2. )*( 1. - tanh( (zpos-z_N)/z_N_scale ) )     ! deg C
+    Salinity = saltd(zpos)
+    Temp = tempd(zpos)
+
+   s1_bar(i,k) = Temp + s1_scale       
+   s2_bar(i,k) = Salinity
+  enddo
+  zz(k) = zpos
+ enddo
+
+      write(0,'(A4,I2.2,3F10.3)') (('PROF',myid,zz(k),s1_bar(1,k),s2_bar(1,k)),k=1,locnz)
+
+ return
+end subroutine set_ambient_stratification
+!
+!  TEMPD
+!  FUNCTION TO GET INTERPOLATED VALUE OF TEMP FROM GRIDDED DATA
+!
+      REAL FUNCTION TEMPD(ZK)
+!
+      PARAMETER(NT=23)
+!
+      REAL ZK
+!
+      REAL ZD(NT),TD(NT)
+!
+      DATA IZTOPT/NT/
+!
+!!!      DATA ZD/-60.,-55.,-50.,-47.2,-45.,-44.3,-42.2,-40.,-38.5,-35., &
+!!!      -34.5,-32.5,-30.,-28.9,-27.4,-25.,-24.1,-20.,-17.6,-15.,-10., &
+!!!      -5.,0./
+      DATA ZD/0.,5.,10.,12.8,15.,15.7,17.8,20.,21.5,25.,25.5,27.5,30.,31.1, &
+              32.6,35.,35.9,40.,42.4,45.,50.,55.,60./
+      DATA TD/-1.15,-1.15,-1.15,-1.05,-1.16,-1.18,-0.92,-0.73,-0.55, &
+      -0.05,-0.02,-0.10,-0.28,-0.45,-0.70,-1.26,-1.43,-1.58,-1.61, &
+      -1.61,-1.62,-1.62,-1.62/
+!
+!!!      ZD(:) = 60. + ZD(:)
+      TEMPD = FK(ZK,ZD,TD,NT,IZTOPT)
+!
+      RETURN
+      END
+!
+!  SALTD
+!  FUNCTION TO GET INTERPOLATED VALUE OF SALINITY FROM GRIDDED DATA
+!
+      REAL FUNCTION SALTD(ZK)
+!
+      PARAMETER(NS=20)
+!
+      REAL ZK
+!
+      REAL ZD(NS),SD(NS)
+!
+      DATA IZTOPS/NS/
+!
+!!!      DATA ZD/-60.,-55.,-50.,-47.1,-45.,-43.3,-40.,-37.9,-35.,-32.7, &
+!!!      -30.,-28.9,-27.8,-25.,-24.3,-20.,-15.,-10.,-5.,0./
+      DATA ZD/0.,5.,10.,12.9,15.,16.7,20.,22.1,25.,27.3,30.,31.1,32.2, &
+              35.,35.7,40.,45.,50.,55.,60./
+      DATA SD/31.83,31.83,31.83,31.82,31.78,31.75,31.72,31.68,31.58, &
+      31.53,31.44,31.38,31.27,30.96,30.87,30.80,30.79,3*30.78/
+!
+!!!      ZD(:) = 60. + ZD(:)
+      SALTD = FK(ZK,ZD,SD,NS,IZTOPS)
+!
+      RETURN
+      END
+!
+!  FK
+!  FK IS A FUNCTION THAT USES LINEAR INTERPOLATION TO FIND  FK,
+!  GIVEN  ZK  AND THE ARRAYS  Z  AND  F. FOR EXAMPLE, IN ROUTINE
+!  DERIVS,  BVF = FK(ALT,BVFZ,BVFF)  WILL BE USED TO GET  BVF  AT  ALT
+!  FROM THE ARRAYS  BVFZ  AND  BVFF.
+      REAL FUNCTION FK(ZK,Z,F,NZ,IZTOP)
+      REAL Z(*), F(*)
+!
+!  MAKE SURE Z(IZTOP) .GE. ZK
+!!      PRINT 99, zk,nz,iztop
+!!   99 FORMAT('zk,nz,iztop = ',1pe15.5,2i15)
+    5 CONTINUE
+      IF(ZK.GT.Z(IZTOP)) THEN
+         IZTOP = IZTOP + 1
+         IF(IZTOP.GT.NZ) THEN
+            WRITE(2,9) ZK,Z(NZ)
+    9       FORMAT(' ZK TOO HIGH. ZK,Z(NZ) = ',2(1PE15.5))
+            CLOSE(2)
+            CLOSE(3)
+            STOP
+         ENDIF
+         GO TO 5
+      ENDIF
+!
+      IF(ZK.EQ.Z(IZTOP)) THEN
+         FK = F(IZTOP)
+         RETURN
+      ENDIF
+!
+!  FIND IZK SUCH THAT  Z(IZK) .GT. ZK .GE. Z(IZK-1)
+      DO 100 IZ=IZTOP,2,-1
+      IZM1 = IZ - 1
+      IF(Z(IZ).GT.ZK .AND. ZK.GE.Z(IZM1)) THEN
+         ZRATIO = (ZK - Z(IZM1)) / (Z(IZ) - Z(IZM1))
+         FK = F(IZM1) + ZRATIO * (F(IZ) - F(IZM1))
+         IZTOP = IZM1 + 1
+         RETURN
+      ENDIF
+  100 CONTINUE
+!
+!  ZK TOO LOW
+      WRITE(2,109) ZK,Z(1)
+  109 FORMAT(' ZK TOO LOW. ZK,Z(1) = ',2(1PE15.5))
+      CLOSE(2)
+      CLOSE(3)
+      STOP
+!
+      END
+!
Index: /trunk/00FlowSolve_PL/SRC/set_diffusion.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/set_diffusion.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/set_diffusion.f90	(revision 6)
@@ -0,0 +1,49 @@
+subroutine set_diffusion
+
+! routine to set the diffusivity profiles, Km_of_z and Kt_of_z
+
+use grid_info
+use user_parameters       ! for Km_of_z and Kt_of_z
+use dependent_variables   
+use dimensional_scales    
+use counters_flags_etc
+use mpi_parameters
+implicit none
+include '../input/problem_size.h'
+
+! local variables
+ real        :: zpos,diff
+ real        :: diffd
+!!! real, dimension(locnz)  :: zz
+
+ do k=1,locnz
+   zpos = Grid(0)%z(1,k)*L_scale     ! [m]
+   diff = diffd(zpos)
+   Km_of_z(k) = diff
+   Kt_of_z(k) = diff
+!!!   zz(k) = zpos
+ enddo
+!!!      write(0,'(A4,I2.2,2F10.5)') (('PROF',myid,zz(k),Km_of_z(k)),k=1,locnz)
+ return
+end subroutine set_diffusion
+!
+!  DIFFD
+!  FUNCTION TO GET INTERPOLATED VALUE OF DIFF FROM GRIDDED DATA
+!
+      REAL FUNCTION DIFFD(ZK)
+!
+      PARAMETER(ND=10)
+!
+      REAL ZK
+!
+      REAL ZD(ND),DD(ND)
+!
+      DATA IZTOPD/ND/
+!
+      DATA ZD/0.,20.,25.,30.,35.,40.,43.,43.7,54.1,60./
+      DATA DD/.00001,.00001,.00001,.0004,.0010,.0018,.0023,.0118,.0227,.0227/
+!
+      DIFFD = FK(ZK,ZD,DD,ND,IZTOPD)
+!
+      RETURN
+      END
Index: /trunk/00FlowSolve_PL/SRC/set_integration_weights.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/set_integration_weights.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/set_integration_weights.f90	(revision 6)
@@ -0,0 +1,79 @@
+subroutine set_integration_weights(dxi,deta,dzeta)
+
+#define DEBUG_LEVEL 1
+ 
+ use mpi_parameters
+ use integration_weights
+ implicit none
+ include '../input/problem_size.h'
+ real, allocatable            :: tmp(:)
+ real                         :: dxi, deta, dzeta
+ integer                      :: I1,J1,K1,I2,J2,K2
+  
+ data I1,J1,K1,I2,J2,K2/1,1,1,nx,ny,nz/
+
+ allocate ( tmp(nz) )
+ tmp(:) = 0.
+
+!     Routine to set the 1d integration weights for computing
+!     integrals wrt to x,y, and z assuming equally spaced
+!     meshes dx,dy and dz
+!
+!     integration in the x direction takes place between and inclusive of 
+!     gridpoints I1 to I2, integration weights outside this range are set
+!     to zero. This allows the "fringe" regions to be easily excluded from
+!     the flow analysis done in routine energetics.f
+
+!     scheme is alternative extended Simpson's rule error is order (1/N^4)
+
+#if DEBUG_LEVEL == 1
+ if(myid==0) write(0,*) ' hello world from set_integration_weights '
+#endif
+
+! xi direction
+ if( I1 > 1 ) W1(1:I1-1)=0.0
+ W1(I1)=dxi*(17./48.)
+ W1(I1+1)=dxi*(59./48.)
+ W1(I1+2)=dxi*(43./48.)
+ W1(I1+3)=dxi*(49./48.)
+ W1(I1+4:I2-4)=dxi
+ W1(I2-3)=dxi*(49./48.)
+ W1(I2-2)=dxi*(43./48.)
+ W1(I2-1)=dxi*(59./48.)
+ W1(I2  )=dxi*(17./48.)
+ if(I2 < nx) W1(I2+1:nx)=0.0
+      
+! eta direction
+ if(J1 > 1 ) W2(1:J1-1)=0.0
+ W2(J1)=deta*(17./48.)
+ W2(J1+1)=deta*(59./48.)
+ W2(J1+2)=deta*(43./48.)
+ W2(J1+3)=deta*(49./48.)
+ W2(J1+4:J2-4)=deta
+ W2(J2-3)=deta*(49./48.)
+ W2(J2-2)=deta*(43./48.)
+ W2(J2-1)=deta*(59./48.)
+ W2(J2  )=deta*(17./48.)
+ if(J2 < ny ) W2(J2+1:ny)=0.0
+      
+! zeta direction   (calculate global array)
+ if( K1 > 1 ) tmp(1:K1-1)=0.0
+ tmp(K1)=dzeta*(17./48.)
+ tmp(K1+1)=dzeta*(59./48.)
+ tmp(K1+2)=dzeta*(43./48.)
+ tmp(K1+3)=dzeta*(49./48.)
+ tmp(K1+4:K2-4)=dzeta
+ tmp(K2-3)=dzeta*(49./48.)
+ tmp(K2-2)=dzeta*(43./48.)
+ tmp(K2-1)=dzeta*(59./48.)
+ tmp(K2  )=dzeta*(17./48.)
+ if( K2 < nz )tmp(K2+1:nz)=0.0
+      
+      
+! extract required portion for processor myid, 
+! store in locnz array W3
+
+ W3(1:locnz)=tmp( myid*locnz+1 : (myid+1)*locnz )
+ deallocate( tmp)
+
+end subroutine set_integration_weights
Index: /trunk/00FlowSolve_PL/SRC/set_rhs_for_pressure.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/set_rhs_for_pressure.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/set_rhs_for_pressure.f90	(revision 6)
@@ -0,0 +1,59 @@
+subroutine set_rhs_for_pressure
+#define DEBUG_LEVEL 1
+
+use mpi_parameters
+use grid_info
+use intermediate_variables
+use counters_flags_etc
+use boundary_information
+use immersed_boundary
+implicit none
+include '../input/problem_size.h'
+include 'mpif.h'
+
+#if DEBUG_LEVEL >= 1
+      if(myid == 0 ) write(0,*) 'hello world from set_rhs_for_pressure'
+#endif
+
+
+!Set the entire rhs array b
+  if( psolve_scheme .eq. 'total_pressure' ) then
+   b(:,:,:) = div_u(:,:,:,new)/dt
+  elseif( psolve_scheme .eq. 'change_in_pressure' ) then
+   b(:,:,:)=(div_u(:,:,:,new)-div_u(:,:,:,old))/dt
+  endif
+
+! if both x & y directions are periodic, we solve for pressure in
+! the [kx,ky] wavenumber domain.
+ if( boundary_type2(1,1)=='periodic' .and.  boundary_type4(1,1)=='periodic' ) then
+  call xy_fft(b,b,nx,ny,locnz,1)   ! 1--> forward transform
+  return
+ endif
+
+!For all Neumann conditions, with BCs  imposed on u_star
+!the compatability condition is that the mean value of b be zero
+
+!**************************************************************
+!********** CHECK FOR DIRICHLET CONDITIONS ON 6 BOUNDARIES ****
+!**************************************************************
+
+  if( BC_pressure1(1,1) .eq. 'Dirichlet' ) then
+   b(1,:,:)=0.0  ! homogeneous
+  endif
+  if( BC_pressure2(1,1) .eq. 'Dirichlet' ) then
+   b(nx,:,:)=0.0  ! homogeneous
+  endif
+  if( BC_pressure3(1,1) .eq. 'Dirichlet' ) then
+   b(:,1,:)=0.0  ! homogeneous
+  endif
+  if( BC_pressure4(1,1) .eq. 'Dirichlet' ) then
+   b(:,ny,:)=0.0  ! homogeneous
+  endif
+  if( myid==0 .and. BC_pressure5(1,1) .eq. 'Dirichlet' ) then
+   b(:,:,1)=0.0  ! homogeneous
+  endif
+  if( myid==numprocs-1 .and. BC_pressure6(1,1) .eq. 'Dirichlet' ) then
+   b(:,:,locnz)=0.0  ! homogeneous
+  endif
+
+end subroutine set_rhs_for_pressure
Index: /trunk/00FlowSolve_PL/SRC/setup_compact_schemes.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/setup_compact_schemes.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/setup_compact_schemes.f90	(revision 6)
@@ -0,0 +1,160 @@
+subroutine setup_compact_schemes(h)
+! Routine to create & factor the various differentiation matrices
+! corresponding to the optimized 6th order compact difference 
+! operators from Lui & Lele 2001
+
+#define DEBUG_LEVEL 1
+
+use grid_info
+use mpi_parameters
+implicit none
+
+integer          :: h     ! grid level
+
+#if DEBUG_LEVEL >= 1
+  if(myid==0) then
+    write(0,*)   'hello world from setup_compact_schemes'
+    write(0,*) '       initializing for grid level: ',h
+   endif
+#endif
+
+! set parameters of the 6th order scheme described in
+! the Lui & Lele 2001 conference paper
+  alpha_1 = 0.5381301
+  beta_1  = 0.0666332
+  a1=1.3675777
+  b1=0.8234282
+  c1=0.0185208
+  alpha=0.475     ! filtering parameter
+
+! spectral like scheme of Lele 1992
+! formally 4th order but supposedly superior resolution characteristics
+! alpha_1 = 0.5771439
+! beta_1  = 0.0896406
+! a1=1.3025166
+! b1=0.9935500
+! c1=0.03750245
+! alpha=0.475
+
+  if( Grid(h)%n1 < 4 .or. Grid(h)%n2 < 4 ) then
+   write(0,*) 'skipping setup compact schemes at level ',h
+   return
+  endif
+
+! 1st derivative operators
+   call set_deriv1(Grid(h)%n1,Grid(h)%ddx,Grid(h)%piv_dx)
+   call set_deriv1(Grid(h)%n2,Grid(h)%ddy,Grid(h)%piv_dy)
+   call set_deriv1(Grid(h)%n3,Grid(h)%ddz,Grid(h)%piv_dz)
+      if(myid == 0) then
+      write(0,*) '********** h = ',h
+      write(0,*) '********** %n3 = ',Grid(h)%n3
+      write(0,*) '********** %ddz = ',Grid(h)%ddz
+      write(0,*) '********** %piv_dz = ',Grid(h)%piv_dz
+      endif
+
+! compact filtering operators
+   call set_filter4(Grid(h)%n1,Grid(h)%filt_x,Grid(h)%piv_fx,alpha)
+   call set_filter4(Grid(h)%n2,Grid(h)%filt_y,Grid(h)%piv_fy,alpha)
+   call set_filter4(Grid(h)%n3,Grid(h)%filt_z,Grid(h)%piv_fz,alpha)
+	
+end subroutine setup_compact_schemes
+
+!************************************************************************
+!************************************************************************
+subroutine set_deriv1(nx,AB,ipiv)	
+  use grid_info, only      :  alpha_1, beta_1
+  use user_parameters, only:  LAPACK_FLAG
+  implicit none
+  integer              :: nx,i,j,ipiv(nx),ierr
+!!!  double precision     :: AB(7,nx)
+  real     :: AB(7,nx)
+
+   AB=-9999.
+
+
+! 1st 2 rows of banded matrix array AB are reserved for fill in
+! 1st/last k elements for the kth super/sub diagonal are not accessed
+! superdiagonal 2
+ AB(3,3:5)=0.0
+ AB(3,6:nx-1)=beta_1
+ AB(3,nx)=0.0
+! superdiagonal 1
+ AB(4,2)= 0.   
+ AB(4,3)=                      0*1./2.   ! make second eqn explicit FD too
+ AB(4,4)=1./3.
+ AB(4,5:nx-2)=alpha_1
+ AB(4,nx-1)=1./3.
+ AB(4,nx)=                     0*1./6.   ! make second eqn explicit FD too
+! diagonal 
+ AB(5,1:nx)=1.0
+! subdiagonal 1
+ do i=1,nx
+  AB(6,i)=AB(4,nx-i+1)
+ enddo
+! subdiagonal 2
+ do i=1,nx
+  AB(7,i)=AB(3,nx-i+1)
+ enddo
+
+! factor the banded matrix AB using LAPACK routine SGBTF2
+! AB is overwritten with its LU factorization
+
+  if( LAPACK_FLAG == 'double' ) then
+!!!   call DGBTRF(nx,nx,2,2,AB,7,ipiv,ierr)
+      write(0,*) 'LAPACK_FLAG = double instead of single'
+      stop
+  elseif( LAPACK_FLAG == 'single' ) then
+   call SGBTRF(nx,nx,2,2,AB,7,ipiv,ierr)
+  endif
+
+! check error condition
+  if( ierr .ne. 0 ) then
+   write(0,*) ' factorization error ',ierr, ' size: ',nx
+   STOP
+  endif
+
+end subroutine set_deriv1
+
+!************************************************************************
+!************************************************************************
+subroutine set_filter4(nx,AB,ipiv,alpha)	
+  use user_parameters, only:  LAPACK_FLAG
+  implicit none
+  integer              :: nx,i,j,ipiv(nx),ierr
+!!!  double precision     :: AB(4,nx)
+  real     :: AB(4,nx)
+  real                 :: alpha
+
+  AB=-9999.
+
+! 1st row of banded matrix array AB is reserved for fill in
+! 1st/last k elements for the kth super/sub diagonal are not accessed
+! superdiagonal 1
+ AB(2,2:3)=0.0
+ AB(2,4:nx-1)=alpha
+ AB(2,nx)=0.0
+! diagonal 
+ AB(3,1:nx)=1.0
+! subdiagonal 1
+ do i=1,nx
+  AB(4,i)=AB(2,nx-i+1)
+ enddo
+
+! factor the banded matrix AB using LAPACK routine SGBTF2
+! AB is overwritten with its LU factorization
+
+  if( LAPACK_FLAG == 'double' ) then
+!!!   call DGBTRF(nx,nx,1,1,AB,4,ipiv,ierr)
+      write(0,*) 'LAPACK_FLAG = double instead of single'
+      stop
+  elseif( LAPACK_FLAG == 'single' ) then
+   call SGBTRF(nx,nx,1,1,AB,4,ipiv,ierr)
+  endif
+
+! check error condition
+  if( ierr .ne. 0 ) then
+   write(0,*) ' factorization error in filter matrix',ierr, ' size: ',nx
+   STOP
+  endif
+
+end subroutine set_filter4
Index: /trunk/00FlowSolve_PL/SRC/solve_for_pressure.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/solve_for_pressure.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/solve_for_pressure.f90	(revision 6)
@@ -0,0 +1,61 @@
+subroutine psolve
+#define DEBUG_LEVEL 1
+!Solve the elliptic equation for pressure subject to appropriate
+!boundary conditions. Interior and boundary differential operators
+!are defined in subroutine matvec.
+ 
+use mpi_parameters
+use grid_info
+use dependent_variables,    only: pressure   ! soln vector
+use intermediate_variables, only: b          ! rhs vector
+use counters_flags_etc
+use boundary_information
+implicit none
+include '../input/problem_size.h'
+include 'mpif.h'
+
+real                    :: xx,mean_value
+
+#if DEBUG_LEVEL >=1
+   if(myid==0) then
+    write(0,*) 'hello world from solve_for_pressure'
+   endif
+#endif
+
+! MULTIGRID SOLVER: Krylov smoothers, compact discrete operators   ****TESTS WORK WELL****
+  current_grid_level=0
+  discrete_scheme='compact'
+  relax_precon='diagl'
+
+  if( istep>=istart ) then
+   call mg_solve( b, pressure, xx )   ! any dummy for last arg
+  else
+   call relax( pressure, b, maxits, current_grid_level ) ! refine soln
+  endif
+
+! For x&y periodicity, we solved for the horiz. transform of P,
+! i.e. for P(kx,ky,zeta). Now we need to inverse transform
+! to recover P(xi,eta,zeta).
+ if( boundary_type2(1,1)=='periodic' .and. boundary_type4(1,1)=='periodic') then
+  call xy_fft(pressure,pressure,nx,ny,locnz,-1)   ! -1 for inverse direction
+  pressure(nx,:,:,1)=pressure(1,:,:,1)   ! carry 2nd periodic endpoints explicitly
+  pressure(:,ny,:,1)=pressure(:,1,:,1)   ! in the rest of the cfd algorithm
+ endif
+
+!Store updated total pressure in pressure(:,:,:,2).
+ if( psolve_scheme .eq. 'total_pressure' ) then
+   pressure(:,:,:,2)=pressure(:,:,:,1)
+ elseif( psolve_scheme .eq. 'change_in_pressure' ) then
+  pressure(:,:,:,2)=pressure(:,:,:,2)+pressure(:,:,:,1)
+ endif
+
+!Remove the mean pressure
+ xx=sum( pressure(:,:,:,2) )/float(nx*ny*locnz)   ! local mean value
+ call MPI_ALLREDUCE(xx,mean_value,1,MPI_REAL,MPI_SUM,comm,ierr)
+ pressure(:,:,:,2)=pressure(:,:,:,2)-mean_value/numprocs   ! subtract global mean
+
+end subroutine psolve
+
+subroutine pdumr
+! dummy subroutine, can be used as an arg to the PIM routines
+end subroutine pdumr
Index: /trunk/00FlowSolve_PL/SRC/solve_for_xyper_pressure.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/solve_for_xyper_pressure.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/solve_for_xyper_pressure.f90	(revision 6)
@@ -0,0 +1,398 @@
+subroutine psolve_xy_periodic
+#define DEBUG_LEVEL 1
+!Solve the elliptic equation for pressure subject to appropriate
+!boundary conditions. Interior and boundary differential operators
+!are defined in subroutine matvec.
+ 
+use mpi_parameters
+use grid_info
+use dependent_variables,    only: pressure   ! soln vector
+use intermediate_variables, only: b          ! rhs vector
+use counters_flags_etc
+use boundary_information
+use user_parameters,        only: LAPACK_FLAG
+implicit none
+include '../input/problem_size.h'
+include 'mpif.h'
+
+!!!double precision                    :: pi,xx,mean_value,kx_max,ky_max,kmax,kstar
+!!!double precision                    :: XF,YF,bsum,lambda2
+!!!double precision, allocatable       :: kx(:),ky(:)
+!!!double precision, allocatable       :: soln(:),tmp(:),C3(:)
+!!!double precision, allocatable       :: L_star(:,:)
+real                    :: pi,xx,mean_value,kx_max,ky_max,kmax,kstar
+real                    :: XF,YF,bsum,lambda2
+real, allocatable       :: kx(:),ky(:)
+real, allocatable       :: soln(:),tmp(:),C3(:)
+real, allocatable       :: L_star(:,:)
+
+real, allocatable                   :: b_col(:,:,:),p_col(:,:,:)
+real, allocatable                   :: work(:,:,:)
+integer                             :: locnx,N,nrhs,ldb,ii,row
+integer, allocatable                :: ipiv(:)
+
+#if DEBUG_LEVEL >=1
+   if(myid==0) then
+    write(0,*) 'hello world from solve_for_pressure: xy periodic case'
+   endif
+#endif
+
+current_grid_level=0
+
+!(1) exchange data so that each processor has columns of b~ --> b_col(1:locnx,1:ny,1:nz)
+  locnx=(nx-1)/numprocs
+  allocate( b_col(locnx,ny,nz),p_col(locnx,ny,nz) )   ! don't keep extra x endpt in col storage
+  b_col(:,:,:) = 0.
+  p_col(:,:,:) = 0.
+  call slabs_to_columns(b,b_col)
+  p_col(:,:,:)=0.
+  
+!(2) each processor compute global arrays kx&ky 
+  N=nx-1                 ! nx includes both boundary points, N only 1
+  pi=4.*atan(1.)
+  allocate(kx(N+1))
+  kx(:) = 0.
+  do i=1,N/2+1
+   kx(i)=2.*pi*(i-1.)    ! FFTW real to half-complex storage
+  enddo
+  do i=2,N/2
+   kx(N-i+2)=kx(i)       ! FFTW real to half-complex storage
+  enddo
+  kx(N+1)=0.             ! extra location, convenient for alignment of arrays
+  kx_max=2.*pi*(N/2.)
+
+
+  N=ny-1                 ! ny includes both boundary points, N only 1
+  allocate(ky(N+1))
+  ky(:) = 0.
+  do j=1,N/2+1
+   ky(j)=2.*pi*(j-1.)    ! FFTW real to half-complex storage
+  enddo
+  do j=2,N/2
+   ky(N-j+2)=ky(j)       ! FFTW real to half-complex storage
+  enddo
+  ky(N+1)=0.             ! extra location, convenient for alignment of arrays
+  ky_max=2.*pi*(N/2.)
+
+  allocate( C3(nz) )    ! global integration weights for zeta direction
+  C3(:) = 0.
+  if( nz < 9 ) then
+   write(0,*) 'nz too small for integration scheme in solve_for_xypressure'
+   stop
+  endif
+  C3(5:nz-4)=1.0
+  C3(1)=17./48.
+  C3(2)=59./48.
+  C3(3)=43./48.
+  C3(4)=49./48.
+  C3(nz)=17./48.
+  C3(nz-1)=59./48.
+  C3(nz-2)=43./48.
+  C3(nz-3)=49./48.
+
+!(3) each processor  allocate storage for L_star, a FD approximation to L
+  allocate( ipiv(nz+1), L_star(nz+1,nz+1) )
+  ipiv(:) = 0
+  L_star(:,:) = 0.
+  allocate( soln(nz),tmp(nz+1) )
+  soln(:) = 0.
+  tmp(:) = 0.
+  nrhs=1
+  ldb=nz+1   ! leading dimension of B, i.e. # of rows in augmented rhs vector
+
+!(4) loop over kx,ky space and iteratively solve the perturbed problems
+  do i=1,locnx
+   ii=i+myid*locnx       ! global kx indexing variable
+   do j=1,ny-1
+
+    bsum = sum( b_col(i,j,1:nz)*C3(1:nz) )   ! integral of b dzeta (/dzeta)
+    lambda2=  (kx(ii))**2 * (1./Grid(0)%x_xi(1,1)**2)  &
+             +(ky(j))**2 * (1./Grid(0)%y_eta(1)**2) 
+
+!   rhs of matrix eqn
+    tmp(1:nz)=b_col(i,j,1:nz)
+
+!   Augment the rhs for compatability condition
+    if( ii==1 .and. j==1 ) then
+     tmp(nz+1)=0.
+    else
+     tmp(nz+1)=-bsum/lambda2   ! augmented rhs, compatability condition
+    endif
+
+    L_star(:,:)=0.
+
+!   set diagonal elements
+
+    do row=3,nz-2
+     xx = (global_Czz(row)/global_det_J(row) )*(1./(60*Grid(0)%dzeta**2)) 
+     L_star(row,row-2)=-5.*xx
+     L_star(row,row-1)=80.*xx
+     L_star(row,row)=-150.*xx
+     L_star(row,row+1)=80.*xx
+     L_star(row,row+2)=-5.*xx
+    enddo
+!  1st row
+    row=1
+    xx = (global_Czz(row)/global_det_J(row) )*(1./(60*Grid(0)%dzeta**2)) 
+    L_star(row,1)=-(725./3.)*xx
+    L_star(row,2)=280.*xx
+    L_star(row,3)=-30.*xx
+    L_star(row,4)=-(40./3.)*xx
+    L_star(row,5)=5.*xx
+!  2nd row
+    row=2
+    xx = (global_Czz(row)/global_det_J(row) )*(1./(60*Grid(0)%dzeta**2)) 
+    L_star(row,1)=(290./3.)*xx
+    L_star(row,2)=-180.*xx
+    L_star(row,3)=90.*xx
+    L_star(row,4)=-(20./3.)*xx
+!  last row
+    row=nz
+    xx = (global_Czz(row)/global_det_J(row) )*(1./(60*Grid(0)%dzeta**2)) 
+    L_star(nz,nz)=-(725./3.)*xx
+    L_star(nz,nz-1)=280.*xx
+    L_star(nz,nz-2)=-30.*xx
+    L_star(nz,nz-3)=-(40./3.)*xx
+    L_star(nz,nz-4)=5.*xx
+!  2nd last row
+    row=nz-1
+    xx = (global_Czz(row)/global_det_J(row) )*(1./(60*Grid(0)%dzeta**2)) 
+    L_star(nz-1,nz)=(290./3.)*xx
+    L_star(nz-1,nz-1)=-180.*xx
+    L_star(nz-1,nz-2)=90.*xx
+    L_star(nz-1,nz-3)=-(20./3.)*xx
+
+!Add in the term for horizontal derivatives
+    do row=1,nz
+     L_star(row,row)=L_star(row,row) - lambda2
+    enddo
+
+! add in the terms for  a*b_zeta*p_zeta
+! (1st & nz rows don't get anything: p_zeta=0 by BCs, or use approx form, no difference)
+    do row=3,nz-2
+     xx = (1./(global_det_J(row)))*global_Cz(row)/(24.*Grid(0)%dzeta)  
+     L_star(row,row-2)=L_star(row,row-2)+(2.)*xx
+     L_star(row,row-1)=L_star(row,row-1)-(16.)*xx
+     L_star(row,row+1)=L_star(row,row+1)+(16.)*xx
+     L_star(row,row+2)=L_star(row,row+2)-(2.)*xx
+    enddo
+!  1st row
+    row=1
+    xx = (1./(global_det_J(row)))*global_Cz(row)/(24.*Grid(0)%dzeta)  
+    L_star(row,1)=L_star(row,1)-(50)*xx
+    L_star(row,2)=L_star(row,2)+(96.)*xx
+    L_star(row,3)=L_star(row,3)-(72.)*xx
+    L_star(row,4)=L_star(row,4)+(32.)*xx
+    L_star(row,5)=L_star(row,5)-(6.)*xx
+!  2nd row
+    row=2
+    xx = (1./(global_det_J(row)))*global_Cz(row)/(24.*Grid(0)%dzeta)  
+    L_star(row,1)=L_star(row,1)-(68./3.)*xx
+    L_star(row,2)=L_star(row,2)+(12.)*xx
+    L_star(row,3)=L_star(row,3)+(12.)*xx
+    L_star(row,4)=L_star(row,4)-(4./3.)*xx
+!  nz-1 row
+    row=nz-1
+    xx = (1./(global_det_J(row)))*global_Cz(row)/(24.*Grid(0)%dzeta) 
+    L_star(row,nz)=L_star(row,nz)+(28./3.)*xx
+    L_star(row,nz-1)=L_star(row,nz-1)+(12.)*xx
+    L_star(row,nz-2)=L_star(row,nz-2)-(20.)*xx
+    L_star(row,nz-3)=L_star(row,nz-3)+(8./3.)*xx
+!  nz row
+    row=nz
+    xx = (1./(global_det_J(row)))*global_Cz(row)/(24.*Grid(0)%dzeta)  
+    L_star(row,nz)=L_star(row,nz)+(50)*xx
+    L_star(row,nz-1)=L_star(row,nz-1)-(96.)*xx
+    L_star(row,nz-2)=L_star(row,nz-2)+(72.)*xx
+    L_star(row,nz-3)=L_star(row,nz-3)-(32.)*xx
+    L_star(row,nz-4)=L_star(row,nz-4)+(6.)*xx
+
+!   Augmented system for unique soln with Neumann BCs:
+    L_star(nz+1,1:nz)=C3   ! extra row: compatability condition
+    L_star(1:nz,nz+1)=1.   ! xtra col : perturb rhs such that compatability can be satisfied
+
+!   solve the augmented system
+    if( LAPACK_FLAG == 'double' ) then
+!!!     call DGESV(nz+1,nrhs,L_star,nz+1,ipiv,tmp,ldb,ierr)
+      write(0,*) 'LAPACK_FLAG = double instead of single'
+      stop
+    elseif( LAPACK_FLAG == 'single' ) then
+     call SGESV(nz+1,nrhs,L_star,nz+1,ipiv,tmp,ldb,ierr)
+    endif
+
+    soln(1:nz)=tmp(1:nz)  ! xGESV overwrites the rhs vector w/ the soln
+
+    p_col(i,j,1:nz)=soln(1:nz)   ! save soln vectors in p_col
+
+   enddo
+  enddo
+
+ deallocate( soln,tmp,C3,kx,ky )
+
+
+!(5) do the data exchanges so that each processor gets slabs of p --> work(1:nx,1:ny,1:locnz)
+ allocate( work(nx,ny,locnz) )
+ work(:,:,:) = 0.
+ call columns_to_slabs(p_col,work)
+
+! Now we need to inverse transform the pressure solution
+! to recover P(xi,eta,zeta).
+  call xy_fft(work,pressure,nx,ny,locnz,-1)   ! -1 for inverse direction
+
+!Store updated total pressure in pressure(:,:,:,2).
+ if( psolve_scheme .eq. 'total_pressure' ) then
+   pressure(:,:,:,2)=pressure(:,:,:,1)
+ elseif( psolve_scheme .eq. 'change_in_pressure' ) then
+  pressure(:,:,:,2)=pressure(:,:,:,2)+pressure(:,:,:,1)
+ endif
+
+!release the MPI derived data types  (created in slabs_to_columns)
+ call MPI_BARRIER(comm,ierr)
+ call MPI_TYPE_FREE(oneslice,ierr)
+ call MPI_TYPE_FREE(twoslice,ierr)
+ call MPI_TYPE_FREE(subslice,ierr)
+ deallocate(b_col,p_col,ipiv,L_star,work)
+end subroutine psolve_xy_periodic
+
+
+ subroutine slabs_to_columns(slab,col)
+! In the cfd code, data is partitioned across processors in equal
+! sub-blocks in dimension 3, i.e. in horizontal slabs. It is sometimes
+! convenient to exchange data so that it is partitioned along dimension
+! 1, i.e. in vertical columns. This routine redistributes the data
+! array "slab" into column orientation "col".
+
+  use mpi_parameters
+  use boundary_information
+  include '../input/problem_size.h'
+  include 'mpif.h'
+
+  integer              :: tag,ierr,status_array(MPI_STATUS_SIZE,2*numprocs)
+  integer              :: dest,source,istart,kstart,reqs(2*numprocs)
+  integer              :: sizeofreal,j
+  integer              :: iproc,numwords,m1,m2,m3,locnx
+  parameter( m1=nx-1,m2=ny,m3=locnz,locnx=m1/numprocs )
+  real                 :: slab(nx,ny,locnz) 
+  real                 :: col(locnx,m2,nz)    ! condensed, xtra endpts excluded
+  real, allocatable    :: work(:)
+
+  if( boundary_type2(1,1) .ne. 'periodic' .or.  boundary_type2(1,1) .ne. 'periodic' ) then
+   write(0,*) 'myid,boundary_type2(1,1) = ',myid,boundary_type2(1,1)
+   write(0,*) '  USING PERIODIC ENDPOINT LOGIC IN SLABS_TO_COLUMNS W/O PERIODIC BCS !!!'
+   stop
+  endif
+
+! Create a derived data type for ease of swaps
+  call MPI_TYPE_EXTENT(MPI_REAL,sizeofreal,ierr)
+! data type for 1d section of basic data slice: m1/nprocs
+  call MPI_TYPE_VECTOR(locnx,1,1,MPI_REAL,oneslice,ierr)
+! data type for 2d section of basic data slice: m2=ny 1d sections
+  call MPI_TYPE_HVECTOR(m2,1,nx*sizeofreal,oneslice,twoslice,ierr)  ! count,blocklength,stride,old_type
+! data type for 3d section of basic data slice:m3=nz/numprocs 2d sections
+  call MPI_TYPE_HVECTOR(m3,1,nx*ny*sizeofreal,twoslice,subslice,ierr)
+  call MPI_TYPE_COMMIT(subslice,ierr)
+  call MPI_BARRIER(comm,ierr)
+  allocate( work(nx*ny*locnz*2) )
+  work(:) = 0.
+  call MPI_BUFFER_ATTACH(work,nx*ny*locnz*16,ierr)
+
+!*************   DO THE DATA EXCHANGES  *****************************
+!  Ship portions of my local data "slab" needed by other nodes (incl myself)
+!  and recieve the remote data required to construct my local column "col"
+
+!  Post non-blocking receives first, establishing buffers for the sends to use.
+      do iproc=0,numprocs-1    ! iproc is the processor I will exchange data with
+       source=iproc
+       kstart=(iproc*locnz)+1         ! start index for receiving data col
+       numwords=locnx*m2*locnz        ! # of real words to store in col w/ each send
+       tag = 1
+       j=iproc+1    ! counter for message request label
+       call MPI_IRECV(col(1,1,kstart),numwords,MPI_REAL,source,tag,comm,reqs(j),ierr)
+      enddo
+      call MPI_BARRIER(comm,ierr)  ! make sure all receive posted before any sends are executed
+
+!  Post non-blocking sends
+      do iproc=0,numprocs-1    ! iproc is the processor I will exchange data with
+       dest=iproc
+       istart=(iproc*locnx)+1         ! start index for sending data slab
+       numwords=1  ! i.e. 1 word of type subslice
+       tag = 1
+       j=numprocs+iproc+1  ! counter for message request label
+       call MPI_IBSEND(slab(istart,1,1),numwords,subslice,dest,tag,comm,reqs(j),ierr)
+      enddo
+
+!     make sure all communications are done
+      call MPI_WAITALL(2*numprocs,reqs,status_array,ierr)
+
+  call MPI_BARRIER(comm,ierr)
+  call MPI_BUFFER_DETACH(work,nx*ny*locnz*16,ierr)
+  deallocate( work )
+ end subroutine slabs_to_columns
+
+
+ subroutine columns_to_slabs(col,slab)
+! In the cfd code, data is partitioned across processors in equal
+! sub-blocks in dimension 3, i.e. in horizontal slabs. It is sometimes
+! convenient to exchange data so that it is partitioned along dimension
+! 1, i.e. in vertical columns. This routine redistributes the data
+! array "col" into slab orientation "slab".
+
+  use mpi_parameters
+  use boundary_information
+  include '../input/problem_size.h'
+  include 'mpif.h'
+
+  integer              :: tag,ierr,status_array(MPI_STATUS_SIZE,2*numprocs)
+  integer              :: dest,source,istart,kstart,reqs(2*numprocs)
+  integer              :: sizeofreal,j
+  integer              :: iproc,numwords,m1,m2,m3,locnx
+  parameter( m1=nx-1,m2=ny,m3=locnz,locnx=m1/numprocs )
+  real                 :: slab(nx,ny,locnz)
+  real                 :: col(locnx,m2,nz)  ! condensed, xtra endpts excluded
+  real, allocatable    :: work(:)
+
+  if( boundary_type2(1,1) .ne. 'periodic' .or.  boundary_type2(1,1) .ne. 'periodic' ) then
+   write(0,*) '  USING PERIODIC ENDPOINT LOGIC IN SLABS_TO_COLUMNS W/O PERIODIC BCS !!!'
+   stop
+  endif
+
+!*************   DO THE DATA EXCHANGES  *****************************
+!     Ship portions of my local data "column" col needed by other nodes
+!     and recieve remote data required to construct my local data
+!     "slab" .
+
+  allocate( work(nx*ny*locnz*2) )
+  work(:) = 0.
+  call MPI_BUFFER_ATTACH(work,nx*ny*locnz*16,ierr)
+
+!  Post non-blocking receives first, establishing buffers for the sends to use.
+     do iproc=0,numprocs-1    ! iproc is the processor I will exchange data with
+      source=iproc
+      istart=(iproc*locnx)+1      ! start index for recieving slab data 
+      numwords=1   ! i.e. 1 word of type subslice
+      tag = 2
+      j=iproc+1
+      call MPI_IRECV(slab(istart,1,1),numwords,subslice,source,tag,comm,reqs(j),ierr)
+     enddo
+     call MPI_BARRIER(comm,ierr)
+
+!  Post non-blocking sends
+     do iproc=0,numprocs-1    ! iproc is the processor I will exchange data with
+      dest=iproc
+      kstart=(iproc*locnz)+1      ! start index for sending col data 
+      numwords=locnx*m2*locnz     ! # of real words to send from col w/ each send
+      tag = 2
+      j=numprocs+iproc+1
+      call MPI_IBSEND(col(1,1,kstart),numwords,MPI_REAL,dest,tag,comm,reqs(j),ierr)
+     enddo
+
+!     make sure all communications are done
+      call MPI_WAITALL(2*numprocs,reqs,status_array,ierr)
+
+!     nx&ny locations meaningless in F space, explicitly zero
+      slab(nx,:,:)=0.0
+      slab(:,ny,:)=0.0
+  call MPI_BARRIER(comm,ierr)
+  call MPI_BUFFER_DETACH(work,nx*ny*locnz*16,ierr)
+  deallocate( work )
+ end subroutine columns_to_slabs
Index: /trunk/00FlowSolve_PL/SRC/start_MPI.h
===================================================================
--- /trunk/00FlowSolve_PL/SRC/start_MPI.h	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/start_MPI.h	(revision 6)
@@ -0,0 +1,20 @@
+!     Start up MPI and obtain process id, number of live processors.
+
+      comm = MPI_COMM_WORLD
+      call MPI_INIT(ierr)
+      call MPI_COMM_RANK(comm,myid,ierr)
+      call MPI_COMM_SIZE(comm,nprocs,ierr)
+      if( myid .eq. 0 ) then
+       write(0,*) ' Program cfdXZ initiated in parallel mode.'
+       write(0,*) ' Number of live processors:      ',nprocs
+       if( nprocs .ne. numprocs) then
+        write(0,*) ' Mismatch in number of live and required processors.'
+        write(0,*) ' Processors required in partitioning scheme: ',numprocs
+        write(0,*) ' See file input/problem_size.h and/or source/run.sh'
+        stop
+       endif
+      endif
+
+!     numbytes = ( (nx*ny*locnz)*bytesperword + MPI_BSEND_OVERHEAD )*numbufs
+!     allocate( mpi_buffer_space( numbufs*((nx*ny*locnz)+MPI_BSEND_OVERHEAD/bytesperword) ) )
+!     call MPI_BUFFER_ATTACH( mpi_buffer_space, numbytes, ierr )
Index: /trunk/00FlowSolve_PL/SRC/step.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/step.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/step.f90	(revision 6)
@@ -0,0 +1,75 @@
+subroutine time_step
+#define DEBUG_LEVEL 1
+!  Routine to take an explicit time step via Euler,
+!  2nd or third order Adams Bashforth method. The differential
+!  equations are as follows:
+!
+!    d/dt u   = rhs1
+!    d/dt v   = rhs2
+!    d/dt w   = rhs3
+!    d/dt s1  = rhs4
+!    d/dt s2  = rhs5
+!
+!  notation:
+!    MM0   integer index identifying the time t    storage locations
+!    MM1   integer index identifying the time t-dt storage locations
+!    MM2   integer index identifying the time t-2*dt storage locations
+!    rhs1(:,:,:,MM0),rhs1(:,:,:,MM1),rhs1(:,:,:,MM2)  rhs1 at t,t-dt,t-2*dt
+!    etc for rhs2,rhs3,rhs4,rhs5
+!    dt   time increment
+!
+!  outputs:
+!    u_star(1:nx,1:ny,1:nz)  calculated values of u at time t+dt
+!    v_star(1:nx,1:ny,1:nz)  calculated values of v at time t+dt
+!    w_star(1:nx,1:ny,1:nz)  calculated values of w at time t+dt
+!    s1(1:nx,1:ny,1:nz)      calculated values of s1 at time t+dt (overwrite)
+!    s2(1:nx,1:ny,1:nz)      calculated values of s2 at time t+dt (overwrite)
+
+ use grid_info, only: dt
+ use dependent_variables
+ use intermediate_variables
+ use rhs_variables
+ use counters_flags_etc
+ use mpi_parameters
+ implicit none
+
+ include '../input/problem_size.h'
+ real dt2,dt12,dt24
+#if DEBUG_LEVEL >= 1
+       if(myid==0) write(0,*) 'hello world from time_step'
+#endif
+
+ dt2=dt/2.
+ dt12=dt/12.
+ dt24=dt/24.
+
+ if( step_flag == 'EULER') then
+  u_star(:,:,:)= u(:,:,:)+dt*rhs1(:,:,:,MM0)
+  v_star(:,:,:)= v(:,:,:)+dt*rhs2(:,:,:,MM0)
+  w_star(:,:,:)= w(:,:,:)+dt*rhs3(:,:,:,MM0)
+  s1(:,:,:)    =s1(:,:,:)+dt*rhs4(:,:,:,MM0)
+  if(num_scalars>1) s2(:,:,:)=s2(:,:,:)+dt*rhs5(:,:,:,MM0)
+  step_flag='AB2'
+ elseif( step_flag == 'AB2' ) then
+  u_star(:,:,:)= u(:,:,:)+dt2*(3.*rhs1(:,:,:,MM0)-rhs1(:,:,:,MM1))
+  v_star(:,:,:)= v(:,:,:)+dt2*(3.*rhs2(:,:,:,MM0)-rhs2(:,:,:,MM1))
+  w_star(:,:,:)= w(:,:,:)+dt2*(3.*rhs3(:,:,:,MM0)-rhs3(:,:,:,MM1))
+  s1(:,:,:)    =s1(:,:,:)+dt2*(3.*rhs4(:,:,:,MM0)-rhs4(:,:,:,MM1))
+  if(num_scalars>1) s2(:,:,:)=s2(:,:,:)+dt2*(3.*rhs5(:,:,:,MM0)-rhs5(:,:,:,MM1))
+  if( AB_order >= 3 ) step_flag='AB3'
+ elseif( step_flag == 'AB3' ) then
+  u_star= u+dt12*(23.*rhs1(:,:,:,MM0)-16.*rhs1(:,:,:,MM1)+5.*rhs1(:,:,:,MM2))
+  v_star= v+dt12*(23.*rhs2(:,:,:,MM0)-16.*rhs2(:,:,:,MM1)+5.*rhs2(:,:,:,MM2))
+  w_star= w+dt12*(23.*rhs3(:,:,:,MM0)-16.*rhs3(:,:,:,MM1)+5.*rhs3(:,:,:,MM2))
+  s1    =s1+dt12*(23.*rhs4(:,:,:,MM0)-16.*rhs4(:,:,:,MM1)+5.*rhs4(:,:,:,MM2))
+  if(num_scalars>1) s2=s2+dt12*(23.*rhs5(:,:,:,MM0)-16.*rhs5(:,:,:,MM1)+5.*rhs5(:,:,:,MM2))
+  if( AB_order == 4 ) step_flag='AB4'
+ elseif( step_flag == 'AB4' ) then
+  u_star= u+dt24*(55.*rhs1(:,:,:,MM0)-59.*rhs1(:,:,:,MM1)+37.*rhs1(:,:,:,MM2)-9.*rhs1(:,:,:,MM3))
+  v_star= v+dt24*(55.*rhs2(:,:,:,MM0)-59.*rhs2(:,:,:,MM1)+37.*rhs2(:,:,:,MM2)-9.*rhs2(:,:,:,MM3))
+  w_star= w+dt24*(55.*rhs3(:,:,:,MM0)-59.*rhs3(:,:,:,MM1)+37.*rhs3(:,:,:,MM2)-9.*rhs3(:,:,:,MM3))
+  s1    =s1+dt24*(55.*rhs4(:,:,:,MM0)-59.*rhs4(:,:,:,MM1)+37.*rhs4(:,:,:,MM2)-9.*rhs4(:,:,:,MM3))
+  if(num_scalars>1) s2=s2+dt24*(55.*rhs5(:,:,:,MM0)-59.*rhs5(:,:,:,MM1)+37.*rhs5(:,:,:,MM2)-9.*rhs5(:,:,:,MM3))
+ endif
+
+end subroutine time_step
Index: /trunk/00FlowSolve_PL/SRC/toggle.h
===================================================================
--- /trunk/00FlowSolve_PL/SRC/toggle.h	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/toggle.h	(revision 6)
@@ -0,0 +1,26 @@
+
+       if( myid .eq. 0 ) write(0,*) '**** Toggling, istep =',istep
+       if( myid .eq. 0 ) write(0,*) ''
+
+!      Toggle primitive variable pointers.
+       itmp=old
+       old=new  
+       new=itmp
+
+!      Toggle rhs pointers.
+       if( AB_order .eq. 4 ) then
+        itmp=MM3
+        MM3=MM2
+        MM2=MM1
+        MM1=MM0
+        MM0=itmp
+       elseif( AB_order .eq. 3 ) then
+        itmp=MM2
+        MM2=MM1
+        MM1=MM0
+        MM0=itmp
+       elseif( AB_order .eq. 2 ) then
+        itmp=MM1
+        MM1=MM0
+        MM0=itmp
+       endif
Index: /trunk/00FlowSolve_PL/SRC/trandom.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/trandom.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/trandom.f90	(revision 6)
@@ -0,0 +1,10 @@
+      real  ::  phase(10)
+      idum = -10
+      do i=1,10
+      r = ran1(idum)
+      r = -1. + 2.*r
+      phase(i) = r
+      enddo
+      write(0,*) phase
+      stop
+      end
Index: /trunk/00FlowSolve_PL/SRC/update_ibdry.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/update_ibdry.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/update_ibdry.f90	(revision 6)
@@ -0,0 +1,406 @@
+subroutine update_ibdry_rhs
+#define DEBUG_LEVEL 2
+
+  use grid_info
+  use mpi_parameters
+  use immersed_boundary
+  use counters_flags_etc
+  use boundary_information
+  use dependent_variables    !!!!, only:pd,rho_bar
+  use rhs_variables
+  use pde_parameters
+  use user_parameters
+  use intermediate_variables
+  implicit none
+
+  include '../input/problem_size.h'
+  include 'mpif.h'
+
+  real, allocatable,dimension(:,:)		:: Uvals,vvals,Wvals
+  real, allocatable,dimension(:,:)		:: rhovals
+  real, allocatable,dimension(:,:)		:: rho_x,rho_z
+  real, allocatable,dimension(:,:)		:: xgrid,zgrid,Y2,tmpsum
+  integer					:: i1,i2,k1,k2,n1,n2,src,dest,tag,nreqs,ii,root
+  integer   			                :: status_array(MPI_STATUS_SIZE,48),req(48)
+  real						:: xloc,zloc,ans,ans2,dn,dnn,h,V0
+  real, allocatable,dimension(:)		:: tmp
+
+#if DEBUG_LEVEL >= 1
+  if(myid==0) then
+   write(0,*) ' '
+   write(0,*) ' '
+   write(0,*) 'hello world from update_ibdry'
+  endif
+#endif
+
+!allocate space for extended data in xz planes
+ allocate( Uvals(nx,-2:locnz+3), vvals(nx,-2:locnz+3) )
+ allocate( Wvals(nx,-2:locnz+3), rhovals(nx,-2:locnz+3) )
+ allocate( rho_x(nx,-2:locnz+3), rho_z(nx,-2:locnz+3) )
+ allocate( xgrid(nx,-2:locnz+3), zgrid(nx,-2:locnz+3) )
+ allocate( tmp(nx) )
+
+! use local arrays for holding z extended x&z grid data
+ xgrid(:,1:locnz)=Grid(0)%x(:,:)
+ xgrid(:,-2:0)=Grid(0)%x(:,1:3)   ! all the same
+ xgrid(:,locnz+1:locnz+3)=Grid(0)%x(:,1:3)
+
+ h=( Grid(0)%z(1,2) - Grid(0)%z(1,1) )  ! WE ARE ASSUMING UNIFORM Z GRID
+ zgrid(:,1:locnz)=Grid(0)%z(:,:)
+ zgrid(:,0)=Grid(0)%z(:,1) - h
+ zgrid(:,-1)=Grid(0)%z(:,1) - 2*h
+ zgrid(:,-2)=Grid(0)%z(:,1) - 3*h
+ zgrid(:,locnz+1)=Grid(0)%z(:,locnz) + h
+ zgrid(:,locnz+2)=Grid(0)%z(:,locnz) + 2*h
+ zgrid(:,locnz+3)=Grid(0)%z(:,locnz) + 3*h
+
+!All processors initialize time level MM0 data to zero so we can use MPI_ALLREDUCE/ADD
+!after the owners calculate the required values
+ ibdry_data(:,:,MM0)=0.0
+ ibdry_integrals(:,:,MM0)=0.0
+ ibdry_rhs(:,:)=0.0
+
+
+!  LOOP THROUGH EACH Y PLANE
+ do j=1,ny
+
+
+! store total density
+  rhovals(:,1:locnz) = pd(:,j,1:locnz) + rho_bar(:,1:locnz) 
+  rhovals(:,-2:0)=0
+  rhovals(:,locnz+1:locnz+3)=0
+
+! similarly for velocity
+  Uvals(:,1:locnz) = u(:,j,1:locnz) 
+  Uvals(:,-2:0)=0
+  Uvals(:,locnz+1:locnz+3)=0
+  vvals(:,1:locnz) = v(:,j,1:locnz) 
+  vvals(:,-2:0)=0
+  vvals(:,locnz+1:locnz+3)=0
+  Wvals(:,1:locnz) = w(:,j,1:locnz) 
+  Wvals(:,-2:0)=0
+  Wvals(:,locnz+1:locnz+3)=0
+
+
+ if( numprocs > 1 ) then
+  tag=1
+  ii=1
+  
+  if( myid < numprocs-1 ) then   ! receive k>locnz values from N neighbor
+   src=myid+1
+   do k=locnz+1,locnz+3
+    call MPI_IRECV(Uvals(1,k),nx,MPI_REAL,src,tag,comm,req(ii),ierr)
+    ii=ii+1
+    call MPI_IRECV(vvals(1,k),nx,MPI_REAL,src,tag,comm,req(ii),ierr)
+    ii=ii+1
+    call MPI_IRECV(Wvals(1,k),nx,MPI_REAL,src,tag,comm,req(ii),ierr)
+    ii=ii+1
+    call MPI_IRECV(rhovals(1,k),nx,MPI_REAL,src,tag,comm,req(ii),ierr)
+    ii=ii+1
+   enddo
+  endif
+
+  if( myid > 0 ) then            ! receive k<1 values from S neighbor
+   src=myid-1
+   do k=-2,0
+    call MPI_IRECV(Uvals(1,k),nx,MPI_REAL,src,tag,comm,req(ii),ierr)
+    ii=ii+1
+    call MPI_IRECV(vvals(1,k),nx,MPI_REAL,src,tag,comm,req(ii),ierr)
+    ii=ii+1
+    call MPI_IRECV(Wvals(1,k),nx,MPI_REAL,src,tag,comm,req(ii),ierr)
+    ii=ii+1
+    call MPI_IRECV(rhovals(1,k),nx,MPI_REAL,src,tag,comm,req(ii),ierr)
+    ii=ii+1
+   enddo
+  endif
+
+  if( myid < numprocs-1 ) then   ! send uppermost values to N neighbor
+   dest=myid+1
+   do k=locnz-2,locnz
+    call MPI_ISEND(u(1,j,k),nx,MPI_REAL,dest,tag,comm,req(ii),ierr)
+    ii=ii+1
+    call MPI_ISEND(v(1,j,k),nx,MPI_REAL,dest,tag,comm,req(ii),ierr)
+    ii=ii+1
+    call MPI_ISEND(w(1,j,k),nx,MPI_REAL,dest,tag,comm,req(ii),ierr)
+    ii=ii+1
+    tmp(1:nx)=pd(:,j,k) + rho_bar(:,k)
+    call MPI_ISEND(tmp(1),nx,MPI_REAL,dest,tag,comm,req(ii),ierr)
+    ii=ii+1
+   enddo
+  endif
+
+  if( myid > 0 ) then            ! send lowermost values to S neighbor
+   dest=myid-1
+   do k=1,3
+    call MPI_ISEND(u(1,j,k),nx,MPI_REAL,dest,tag,comm,req(ii),ierr)
+    ii=ii+1
+    call MPI_ISEND(v(1,j,k),nx,MPI_REAL,dest,tag,comm,req(ii),ierr)
+    ii=ii+1
+    call MPI_ISEND(w(1,j,k),nx,MPI_REAL,dest,tag,comm,req(ii),ierr)
+    ii=ii+1
+    tmp(1:nx)=pd(:,j,k) + rho_bar(:,k)
+    call MPI_ISEND(tmp(1),nx,MPI_REAL,dest,tag,comm,req(ii),ierr)
+    ii=ii+1
+   enddo
+  endif
+
+!  make sure all communications are done
+   nreqs=ii-1
+   call MPI_WAITALL(nreqs,req,status_array,ierr)
+
+ endif  ! end numprocs > 1 logic
+
+
+  call MPI_BARRIER(comm,ierr)
+! compute approximations to rho_x and rho_z
+  h = Grid(0)%x_xi(1,1)*Grid(0)%dxi    ! x indep of zeta
+  do i=3,nx-2
+   rho_x(i,:) = ( 2*rhovals(i-2,:) - 16*rhovals(i-1,:) + 16* rhovals(i+1,:) - 2*rhovals(i+2,:) )/(24.*h)
+  enddo
+  rho_x(1,:) = ( rhovals(2,:) - rhovals(1,:) )/h
+  rho_x(2,:) = ( rhovals(3,:) - rhovals(1,:) )/(2.*h)
+  rho_x(nx,:) = ( rhovals(nx,:) - rhovals(nx-1,:) )/h
+  rho_x(nx-1,:) = ( rhovals(nx,:) - rhovals(nx-2,:) )/(2.*h)
+
+  h = Grid(0)%z_zeta(1,1)*Grid(0)%dzeta    ! z indep of xi
+  do k=0,locnz+1
+   rho_z(:,k) = ( 2*rhovals(:,k-2) - 16*rhovals(:,k-1) + 16* rhovals(:,k+1) - 2*rhovals(:,k+2) )/(24.*h)
+  enddo
+  rho_z(:,-1) = ( rhovals(:,0) - rhovals(:,-1) )/h
+  rho_z(:,-2) = ( rhovals(:,-1) - rhovals(:,-2) )/h
+  rho_z(:,locnz+2) = ( rhovals(:,locnz+2) - rhovals(:,locnz+1) )/h
+  rho_z(:,locnz+3) = ( rhovals(:,locnz+3) - rhovals(:,locnz+2) )/h
+
+
+
+! loop through each immersed boundary point
+  do i=(j-1)*n_j+1, j*n_j    ! indices for the jth plane
+
+
+  if( ibdry_owner(i)==myid ) then  ! update imersed bdry data for pt i
+   xloc = ibdry_locations(1,i) 
+   zloc = ibdry_locations(2,i)   
+
+!  interpolate grid values to immersed boundary point
+!  compute 2d splines locally
+   i1=local_region(1,i)
+   i2=local_region(2,i)
+   k1=local_region(5,i) - myid*locnz
+   k2=local_region(6,i) - myid*locnz
+   if(k1 < -2 ) k1=-2                    ! use only local extended data for interpolation
+   if(k2 > locnz+3 ) k2=locnz+3
+
+   n1=i2-i1+1
+   n2=k2-k1+1
+   allocate( Y2(n1,n2) )
+
+   call splie2(xgrid(i1:i2,1),zgrid(1,k1:k2),Uvals(i1:i2,k1:k2),n1,n2,Y2)
+   call splin2(xgrid(i1:i2,1),zgrid(1,k1:k2),Uvals(i1:i2,k1:k2),Y2,n1,n2,xloc,zloc,ans)
+   ibdry_data(1,i,MM0)=(ans-0.)  ! i.e. target BC of U=0
+
+
+   call splie2(xgrid(i1:i2,1),zgrid(1,k1:k2),vvals(i1:i2,k1:k2),n1,n2,Y2)
+   call splin2(xgrid(i1:i2,1),zgrid(1,k1:k2),vvals(i1:i2,k1:k2),Y2,n1,n2,xloc,zloc,ans)
+   ibdry_data(2,i,MM0)= ans - (-V0)  ! i.e. target BC of v=-V0  ( v=pert from V0)
+
+   call splie2(xgrid(i1:i2,1),zgrid(1,k1:k2),Wvals(i1:i2,k1:k2),n1,n2,Y2)
+   call splin2(xgrid(i1:i2,1),zgrid(1,k1:k2),Wvals(i1:i2,k1:k2),Y2,n1,n2,xloc,zloc,ans)
+   ibdry_data(3,i,MM0)=(ans)
+
+!  overwrite rhovals with d/dn rho
+   rhovals(i1:i2,k1:k2) = ibdry_normals(1,i)*rho_x(i1:i2,k1:k2) + ibdry_normals(2,i)*rho_z(i1:i2,k1:k2)
+
+   call splie2(xgrid(i1:i2,1),zgrid(1,k1:k2),rhovals(i1:i2,k1:k2),n1,n2,Y2)
+   call splin2(xgrid(i1:i2,1),zgrid(1,k1:k2),rhovals(i1:i2,k1:k2),Y2,n1,n2,xloc,zloc,ans)
+
+   dn = abs( ibdry_normals(1,i)*Grid(0)%x_xi(1,1)*Grid(0)%dxi   &
+      + ibdry_normals(2,i)*Grid(0)%z_zeta(1,1)*Grid(0)%dzeta)
+
+   ibdry_data(4,i,MM0) = ( ans )   ! ( d/dn rho )
+
+   deallocate( Y2 )
+
+!  update the time integrals at each immersed boundary point
+   if( istep==istart ) then
+    ibdry_integrals(:,i,:)=0.0
+   elseif( istep==istart+1 ) then
+    do k=1,4
+     ibdry_integrals(k,i,MM0)=ibdry_integrals(k,i,MM1)   &
+     + (dt/2.)*( ibdry_data(k,i,MM1) + ibdry_data(k,i,MM0) )
+    enddo
+   elseif( istep>=istart+2 ) then
+    do k=1,4
+     ibdry_integrals(k,i,MM0)=ibdry_integrals(k,i,MM2)    &
+     + (dt/3.)*( ibdry_data(k,i,MM2) + 4.*ibdry_data(k,i,MM1) + ibdry_data(k,i,MM0) )
+    enddo
+   endif
+   
+!  update the rhs values for each immersed boundary point
+   do k=1,3
+    ibdry_rhs(k,i) = -xalpha*ibdry_integrals(k,i,MM0) - xbeta*ibdry_data(k,i,MM0)
+   enddo
+
+   ibdry_rhs(4,i) = -delta_3 * ibdry_data(4,i,MM0)/(3*dt)
+
+!   SPECIAL TREATMENT NEAR CORNERS  !!!!!!!!!!!!!!
+   if( i - (j-1)*n_j >= 23 .and. i -(j-1)*n_j <= 25 ) ibdry_rhs(4,i) = 0.   ! dont alter just above corners
+   if( i - (j-1)*n_j >= 538 .and. i -(j-1)*n_j <= 542 ) ibdry_rhs(4,i) = 0.
+
+   endif  ! end logic for owner of immersed boundary point
+
+  enddo  ! end loop through each immersed boundary point
+
+ enddo   ! GOTO NEXT Y PLANE
+
+!write(0,*) ' ALL IBDRY DATA COMPUTED, JUST NEED TO SHARE  ',myid,ny,n_j
+ call MPI_BARRIER(comm,ierr)
+
+! Share the computed values by doing an elementwise ALLREDUCE/ADD , only owners' data is nonzero
+  allocate( tmpsum(4,ny*n_j) )
+
+ if( myid==1 ) then
+  open(1,file='../output/ibdry_rhs0',position='append')
+  write(1,*)istep, '******************************************'
+  do i=1,n_j
+   write(1,*) i,ibdry_data(1,i,MM0),ibdry_data(2,i,MM0),ibdry_data(3,i,MM0),ibdry_data(4,i,MM0)
+  enddo
+  write(1,*)'******************************************'
+  close(1)
+ endif
+
+   call MPI_ALLREDUCE(ibdry_data(1,1,MM0),tmpsum,4*ny*n_j,MPI_REAL,MPI_SUM,comm,ierr)
+   ibdry_data(:,:,MM0)=tmpsum(:,:)
+
+   call MPI_ALLREDUCE(ibdry_integrals(1,1,MM0),tmpsum,4*ny*n_j,MPI_REAL,MPI_SUM,comm,ierr)
+   ibdry_integrals(:,:,MM0)=tmpsum(:,:)
+
+   call MPI_ALLREDUCE(ibdry_rhs(1,1),tmpsum,4*ny*n_j,MPI_REAL,MPI_SUM,comm,ierr)
+   ibdry_rhs(:,:)=tmpsum(:,:)
+
+ call MPI_BARRIER(comm,ierr)
+
+ if( myid==1 ) then
+  open(1,file='../output/ibdry_rhs1',position='append')
+  write(1,*)istep, '******************************************'
+  do i=1,n_j
+   write(1,*) i,ibdry_rhs(1,i),ibdry_rhs(2,i),ibdry_rhs(3,i),ibdry_rhs(4,i)
+  enddo
+  write(1,*)'******************************************'
+  close(1)
+ endif
+
+
+! some along-boundary, near-neighbor smoothing
+!do j=1,ny
+! do k = (j-1)*n_j + n_j/2, j*n_j - 1
+!  ibdry_rhs(:,k) = ( ibdry_rhs(:,k-1) + 2*ibdry_rhs(:,k) + ibdry_rhs(:,k+1) )/4.
+! enddo
+! do k = (j-1)*n_j+ n_j/2 - 1,(j-1)*n_j + 2,-1
+!  ibdry_rhs(:,k) = ( ibdry_rhs(:,k-1) + 2*ibdry_rhs(:,k) + ibdry_rhs(:,k+1) )/4.
+! enddo
+!enddo
+
+
+ deallocate( Uvals, vvals )
+ deallocate( Wvals, rhovals )
+ deallocate( rho_x, rho_z )
+ deallocate( xgrid, zgrid )
+ deallocate( tmp, tmpsum  )
+
+ call MPI_BARRIER(comm,ierr)
+end subroutine update_ibdry_rhs
+
+
+!*********************************
+
+      SUBROUTINE splie2(x1a,x2a,ya,m,n,y2a)
+      INTEGER m,n,NN
+      REAL x1a(m),x2a(n),y2a(m,n),ya(m,n)
+      PARAMETER (NN=100)
+!U    USES spline
+      INTEGER j,k
+      REAL y2tmp(NN),ytmp(NN)
+      do 13 j=1,m
+        do 11 k=1,n
+          ytmp(k)=ya(j,k)
+11      continue
+        call spline(x2a,ytmp,n,1.e30,1.e30,y2tmp)
+        do 12 k=1,n
+          y2a(j,k)=y2tmp(k)
+12      continue
+13    continue
+      return
+      END
+      SUBROUTINE splin2(x1a,x2a,ya,y2a,m,n,x1,x2,y)
+      INTEGER m,n,NN
+      REAL x1,x2,y,x1a(m),x2a(n),y2a(m,n),ya(m,n)
+      PARAMETER (NN=100)
+!U    USES spline,splint
+      INTEGER j,k
+      REAL y2tmp(NN),ytmp(NN),yytmp(NN)
+      do 12 j=1,m
+        do 11 k=1,n
+          ytmp(k)=ya(j,k)
+          y2tmp(k)=y2a(j,k)
+11      continue
+        call splint(x2a,ytmp,y2tmp,n,x2,yytmp(j))
+12    continue
+      call spline(x1a,yytmp,m,1.e30,1.e30,y2tmp)
+      call splint(x1a,yytmp,y2tmp,m,x1,y)
+      return
+      END
+      SUBROUTINE spline(x,y,n,yp1,ypn,y2)
+      INTEGER n,NMAX
+      REAL yp1,ypn,x(n),y(n),y2(n)
+      PARAMETER (NMAX=500)
+      INTEGER i,k
+      REAL p,qn,sig,un,u(NMAX)
+      if (yp1.gt..99e30) then
+        y2(1)=0.
+        u(1)=0.
+      else
+        y2(1)=-0.5
+        u(1)=(3./(x(2)-x(1)))*((y(2)-y(1))/(x(2)-x(1))-yp1)
+      endif
+      do 11 i=2,n-1
+        sig=(x(i)-x(i-1))/(x(i+1)-x(i-1))
+        p=sig*y2(i-1)+2.
+        y2(i)=(sig-1.)/p
+        u(i)=(6.*((y(i+1)-y(i))/(x(i+1)-x(i))-(y(i)-y(i-1))/(x(i)-x(i-1)))/(x(i+1)-x(i-1))-sig*u(i-1))/p
+11    continue
+      if (ypn.gt..99e30) then
+        qn=0.
+        un=0.
+      else
+        qn=0.5
+        un=(3./(x(n)-x(n-1)))*(ypn-(y(n)-y(n-1))/(x(n)-x(n-1)))
+      endif
+      y2(n)=(un-qn*u(n-1))/(qn*y2(n-1)+1.)
+      do 12 k=n-1,1,-1
+        y2(k)=y2(k)*y2(k+1)+u(k)
+12    continue
+      return
+      END
+      SUBROUTINE splint(xa,ya,y2a,n,x,y)
+      INTEGER n
+      REAL x,y,xa(n),y2a(n),ya(n)
+      INTEGER k,khi,klo
+      REAL a,b,h
+      klo=1
+      khi=n
+1     if (khi-klo.gt.1) then
+        k=(khi+klo)/2
+        if(xa(k).gt.x)then
+          khi=k
+        else
+          klo=k
+        endif
+      goto 1
+      endif
+      h=xa(khi)-xa(klo)
+      if (h.eq.0.) pause 'bad xa input in splint'
+      a=(xa(khi)-x)/h
+      b=(x-xa(klo))/h
+      y=a*ya(klo)+b*ya(khi)+((a**3-a)*y2a(klo)+(b**3-b)*y2a(khi))*(h**2)/6.
+      return
+      END
Index: /trunk/00FlowSolve_PL/SRC/user_BCs.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/user_BCs.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/user_BCs.f90	(revision 6)
@@ -0,0 +1,29 @@
+subroutine user_BCs
+#define DEBUG_LEVEL 1
+
+!********** Nearly everything available via modules  *****
+ use grid_info
+ use immersed_boundary
+ use dependent_variables
+ use intermediate_variables
+ use rhs_variables
+ use pde_parameters
+ use dimensional_scales
+ use mpi_parameters
+ use boundary_information
+ use counters_flags_etc
+ implicit none
+
+! local variables
+
+ include '../input/problem_size.h'
+ include 'mpif.h'! in case nonlocal calculations are needed
+!*********************************************************
+
+if( user_BCs_flag == 'no' ) return
+
+#if DEBUG_LEVEL >=1
+ if(myid == 0) write(0,*) 'hello world from user_BCs'
+#endif
+
+end subroutine user_BCs
Index: /trunk/00FlowSolve_PL/SRC/user_modules.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/user_modules.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/user_modules.f90	(revision 6)
@@ -0,0 +1,39 @@
+!!!!  user defined modules used in cfdXZ code  !!!!
+
+module user_parameters
+!******* ice stress problem ******************************************************
+!   x_0,x_1,x_2                      positions of ice/water interface [m]
+!   surface_V_of_x               surface BC for v, applied in [0,x_1] and [x_2,Lx]
+!   z_N                          center position for stratified layer [m]
+!   z_N_scale                    vertical scale of stratified layer   [m]
+!   HV_RATIO                     nu_horiz/nu where nu is taken as nu_vertical [1]
+!                                (invoked only when HV_METHOD=1)
+!   Smax,Smin                    max/min Salinity values for ambient profile [ppt]
+!   Tmax,Tmin                    max/min Temp values used for ambient profile [deg C]
+!   Km_of_z                      eddy viscosity for momentum [m2/s]
+!   Kt_of_z                      eddy diffusivity for temperature [m2/s]
+!   Kh                           horizontal eddy diffusivity for both momentum
+!                                and temperature when HV_METHOD=2 [m2/s]
+!******* ice stress problem ******************************************************
+ real                         :: x_0,x_1,x_2,V_0
+ real, allocatable            :: surface_V_of_x(:)
+ real, allocatable            :: Km_of_z(:),Kt_of_z(:)
+ real                         :: z_N, z_N_scale
+ real                         :: Smax,Smin,Tmax,Tmin
+ real                         :: HV_RATIO
+ integer                      :: HV_METHOD
+ character(80)                :: LAPACK_FLAG
+end module user_parameters
+!*******
+
+
+module immersed_boundary   
+ integer                    :: n_j,n_left,n_right
+ integer,allocatable        :: ibdry_owner(:),local_region(:,:)
+ real,allocatable	    :: ibdry_locations(:,:), ibdry_normals(:,:)
+ real,allocatable           :: ibdry_data(:,:,:), ibdry_integrals(:,:,:)
+ real,allocatable           :: ibdry_rhs(:,:), z_limits(:,:)
+ real,allocatable	    :: mask1(:,:), mask2(:,:),mask3(:,:)
+ real		            :: delta_1, delta_2, delta_3
+ real		            :: xalpha, xbeta,x_left,x_right,z_left,z_right
+end module immersed_boundary
Index: /trunk/00FlowSolve_PL/SRC/user_rhs.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/user_rhs.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/user_rhs.f90	(revision 6)
@@ -0,0 +1,29 @@
+subroutine user_rhs
+!rhs1, rhs2, rhs3 and rhs4 arrays can be augmented by user here
+#define DEBUG_LEVEL 1
+
+!********** Nearly everything available via modules  *****
+ use immersed_boundary
+ use grid_info
+ use dependent_variables
+ use rhs_variables
+ use pde_parameters
+ use dimensional_scales
+ use mpi_parameters
+ use boundary_information
+ use counters_flags_etc
+ use user_parameters
+ implicit none
+
+!local variables
+
+ include '../input/problem_size.h'
+ include 'mpif.h'                   ! in case nonlocal calculations are needed
+!*********************************************************
+if( user_rhs_flag == 'no' ) return
+
+#if DEBUG_LEVEL >=1
+ if(myid==0) write(0,*) 'hello world from user_rhs'
+#endif
+
+end subroutine user_rhs
Index: /trunk/00FlowSolve_PL/SRC/write3D_netcdf.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/write3D_netcdf.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/write3D_netcdf.f90	(revision 6)
@@ -0,0 +1,284 @@
+subroutine write3D_netcdf
+
+#define DEBUG_LEVEL 1
+ use mpi_parameters
+ use grid_info
+ use dependent_variables
+ use intermediate_variables
+ use dimensional_scales
+ use counters_flags_etc
+ use pde_parameters
+ use immersed_boundary
+ use user_parameters
+ implicit none
+
+ include 'netcdf.inc'
+ include '../input/problem_size.h'
+
+ character(len=5)                     ::  cnum
+ character(len=3)                     ::  cid
+ character(len=80)                    ::  filename
+ integer                              ::  ncid,rcode 
+ integer                              ::  ix,iz 
+
+!Dimensions and dimension variables
+ integer                              ::  tdimensionID  
+ integer                              ::  start1D(1)
+ integer                              ::  count1D(1)   
+      
+!4D Variables
+ integer                              ::  s1VarID,s2VarID,uVarID,vVArID,divVarID
+ integer                              ::  wVarID,pVarID,KmVarID
+ integer                              ::  start4D(4),count4D(4)
+
+!Arrays for holding data
+ real,dimension(:),allocatable        ::  tdimValues         ! 1D array for holding time data
+ real,dimension(:),allocatable        ::  hold1D             ! 1D scratch array 
+ real,dimension(:,:,:),allocatable    ::  hold3D             ! 3D scratch array 
+ real                                 ::  uu,ww
+!!! real                                 ::  maxu,minu,maxv,minv
+!!! real                                 ::  maxxi,minxi,maxzeta,minzeta
+
+!Execute routine only at specified time steps
+ if( mod(istep,i_full_fields) /= 0 ) return
+ allocate ( tdimValues(1), hold1D(locnz), hold3D(nx,ny,locnz) )
+
+!Initialize a new netcdf file
+ call init3D_netcdf
+#if DEBUG_LEVEL >= 1
+ if( myid == 0 ) write(0,*) 'hello world from write3D_netcdf, init3D complete'
+#endif
+
+!Create the filename
+ write(unit=cnum,fmt=100) istep
+100 format(I5.5)
+ write(unit=cid,fmt=101) myid
+101 format(I3.3)
+ if( numprocs > 1 ) then
+  filename='../output/cfd3D_'//cnum//'_'//cid
+ else
+  filename='../output/cfd3D_'//cnum
+ endif
+
+!Open the netcdf file and get variable id's.
+ rcode = NF_OPEN(filename,NF_WRITE,ncid)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+
+ rcode = NF_INQ_VARID(ncid,'timedimension',tdimensionID)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+ rcode = NF_INQ_VARID(ncid,'TempVar',s1VarID)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+if(num_scalars>1) then
+ rcode = NF_INQ_VARID(ncid,'SalinityVar',s2VarID)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+endif
+ rcode = NF_INQ_VARID(ncid,'uVar',uVarID)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+ rcode = NF_INQ_VARID(ncid,'vVar',vVarID)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+ rcode = NF_INQ_VARID(ncid,'wVar',wVarID)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+ rcode = NF_INQ_VARID(ncid,'pVar',pVarID)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+ rcode = NF_INQ_VARID(ncid,'KmVar',KmVarID)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+ rcode = NF_INQ_VARID(ncid,'divVar',divVarID)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+
+!Write time value into time dimension
+ start1D(1) = write3D_counter
+ count1D(1) = 1
+ tdimValues(1) = t * t_scale
+ rcode = NF_PUT_VARA_REAL(ncid,tdimensionID,start1D,count1D,tdimValues)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+      
+!Write 4D data to netcdf file
+ start4D(1) = 1
+ start4D(2) = 1
+ start4D(3) = 1
+ start4D(4) = write3D_counter
+ count4D(1) = nx
+ count4D(2) = ny
+ count4D(3) = locnz   ! Local data space
+ count4D(4) = 1
+
+
+!scalar 1 (dimensional)
+ do j=1,ny
+!!! hold3D(1:nx,j,1:locnz) = (s1_bar(1:nx,1:locnz)+s1(1:nx,j,1:locnz))*s1_scale
+  hold3D(1:nx,j,1:locnz) = (s1_bar(1:nx,1:locnz)+s1(1:nx,j,1:locnz))
+ enddo
+!
+  filename='../output/TEMP128_'//cnum//'_'//cid
+  open(21,file=filename,status='new')
+  do ix=1,nx
+!!! xlv  pas adaptatif
+!!! write(21,221) (hold3D(ix,128,iz),iz=1,locnz)
+    write(21,221) (hold3D(ix,int(ny/2),iz),iz=1,locnz)
+!!!
+  enddo
+  close(21)
+221 format(6(1pe13.5))
+!
+!Write variable to netcdf file
+ rcode = NF_PUT_VARA_REAL(ncid,s1VarID,start4D,count4D,hold3D)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+
+if(num_scalars>1) then
+!scalar 2 (dimensional)
+ do j=1,ny
+!!! hold3D(1:nx,j,1:locnz) = (s2_bar(1:nx,1:locnz)+s2(1:nx,j,1:locnz))*s2_scale
+ hold3D(1:nx,j,1:locnz) = (s2_bar(1:nx,1:locnz)+s2(1:nx,j,1:locnz))
+ enddo
+!Write variable to netcdf file
+ rcode = NF_PUT_VARA_REAL(ncid,s2VarID,start4D,count4D,hold3D)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+endif
+
+!!!!density (dimensional)
+!!! do j=1,ny
+!!!  hold3D(1:nx,j,1:locnz) = (rho_bar(1:nx,1:locnz)+pd(1:nx,j,1:locnz))*density_scale
+!!! enddo
+!!!!
+!!!  filename='../output/DENS3_'//cnum//'_'//cid
+!!!  open(21,file=filename,status='new')
+!!!  do ix=1,nx
+!!!   write(21,221) (hold3D(ix,3,iz),iz=1,locnz)
+!!!  enddo
+!!!  close(21)
+!!!!!!  filename='../output/DENS65_'//cnum//'_'//cid
+!!!!!!  open(21,file=filename,status='new')
+!!!!!!  do ix=1,nx
+!!!!!!   write(21,221) (hold3D(ix,65,iz),iz=1,locnz)
+!!!!!!  enddo
+!!!!!!  close(21)
+!!!  filename='../output/DENS128_'//cnum//'_'//cid
+!!!  open(21,file=filename,status='new')
+!!!  do ix=1,nx
+!!!   write(21,221) (hold3D(ix,128,iz),iz=1,locnz)
+!!!  enddo
+!!!  close(21)
+!!!!!!  filename='../output/DENS193_'//cnum//'_'//cid
+!!!!!!  open(21,file=filename,status='new')
+!!!!!!  do ix=1,nx
+!!!!!!   write(21,221) (hold3D(ix,193,iz),iz=1,locnz)
+!!!!!!  enddo
+!!!!!!  close(21)
+!!!221 format(7(1pe11.3))
+!
+!u velocity component
+!convert to Cartesian and express in dimensional units
+!!! maxu = MAXVAL(u)
+!!! minu = MINVAL(u)
+!!! maxxi = MAXVAL(Grid(0)%x_xi(:,:))
+!!! minxi = MINVAL(Grid(0)%x_xi(:,:))
+!!! maxzeta = MAXVAL(Grid(0)%x_zeta(:,:))
+!!! minzeta = MINVAL(Grid(0)%x_zeta(:,:))
+!!! write(0,*) 'A_MAXMIN_U',myid,maxu,minu,maxxi,minxi,maxzeta,minzeta
+ do i=1,nx
+  do j=1,ny
+   do k=1,locnz
+    uu = Grid(0)%x_xi(i,k)*U(i,j,k) + Grid(0)%x_zeta(i,k)*W(i,j,k)
+!       uu = Grid(0)%x_xi(i,k)*u_star(i,j,k) + Grid(0)%x_zeta(i,k)*w_star(i,j,k)
+    hold3D(i,j,k) = uu * U_scale
+   enddo
+  enddo
+ enddo
+!!! maxu = MAXVAL(hold3D)
+!!! minu = MINVAL(hold3D)
+!!! write(0,*) 'B_MAXMIN_U',myid,maxu,minu
+!Write variable to netcdf file
+ rcode = NF_PUT_VARA_REAL(ncid,uVarID,start4D,count4D,hold3D)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+
+!v velocity component
+!!! maxv = MAXVAL(v)
+!!! minv = MINVAL(v)
+!!! write(0,*) 'A_MAXMIN_V',myid,maxv,minv
+ hold3D(:,:,:) = v(:,:,:) * U_scale
+!!! maxv = MAXVAL(hold3D)
+!!! minv = MINVAL(hold3D)
+!!! write(0,*) 'B_MAXMIN_V',myid,maxv,minv
+!Write variable to netcdf file
+ rcode = NF_PUT_VARA_REAL(ncid,vVarID,start4D,count4D,hold3D)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+
+!w velocity component
+!convert to Cartesian and express in dimensional units
+ do i=1,nx
+  do j=1,ny
+   do k=1,locnz
+    ww = Grid(0)%z_xi(i,k)*U(i,j,k) + Grid(0)%z_zeta(i,k)*W(i,j,k)
+!      ww = Grid(0)%z_xi(i,k)*u_star(i,j,k) + Grid(0)%z_zeta(i,k)*w_star(i,j,k)
+    hold3D(i,j,k) = ww * U_scale
+   enddo
+  enddo
+ enddo
+!Write variable to netcdf file
+ rcode = NF_PUT_VARA_REAL(ncid,wVarID,start4D,count4D,hold3D)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+!
+!!!  filename='../output/WVEL3_'//cnum//'_'//cid
+!!!  open(21,file=filename,status='new')
+!!!  do ix=1,nx
+!!!   write(21,221) (hold3D(ix,3,iz),iz=1,locnz)
+!!!  enddo
+!!!  close(21)
+!!!!!!  filename='../output/WVEL65_'//cnum//'_'//cid
+!!!!!!  open(21,file=filename,status='new')
+!!!!!!  do ix=1,nx
+!!!!!!   write(21,221) (hold3D(ix,65,iz),iz=1,locnz)
+!!!!!!  enddo
+!!!!!!  close(21)
+  filename='../output/WVEL128_'//cnum//'_'//cid
+  open(21,file=filename,status='new')
+  do ix=1,nx
+!!! xlv pas adaptatif
+!!! write(21,221) (hold3D(ix,128,iz),iz=1,locnz)
+    write(21,221) (hold3D(ix,int(ny/2),iz),iz=1,locnz)
+!!!   
+  enddo
+  close(21)
+!!!!!!  filename='../output/WVEL193_'//cnum//'_'//cid
+!!!!!!  open(21,file=filename,status='new')
+!!!!!!  do ix=1,nx
+!!!!!!   write(21,221) (hold3D(ix,193,iz),iz=1,locnz)
+!!!!!!  enddo
+!!!!!!  close(21)
+!!!!
+!!!!!!   nslice = 27
+!!!!!!   nzout = 4
+!!!!!!   if(myid.eq.nslice) then
+!!!!!!      filename = '../output/TWVEL_'//cnum//'_'//cid
+!!!!!!      open(21,file=filename,status='new')
+!!!!!!      do ix=1,nx
+!!!!!!         write(21,221) (hold3D(ix,iy,nzout),iy=1,ny)
+!!!!!!      enddo
+!!!!!!      close(21)
+!!!!!!   endif
+!
+!pressure variable (total stored in block 2, dP in block 1)
+ hold3D(:,:,:) = pressure(:,:,:,2) * pressure_scale
+!Write variable to netcdf file
+ rcode = NF_PUT_VARA_REAL(ncid,pVarID,start4D,count4D,hold3D)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+
+!Km variable
+ hold3D(:,:,:) = K_m(:,:,:) * U_scale * L_scale
+!Write variable to netcdf file
+ rcode = NF_PUT_VARA_REAL(ncid,KmVarID,start4D,count4D,hold3D)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+
+!div variable
+ hold3D(:,:,:) = div_u(:,:,:,new) * (1./t_scale)
+!hold3D(:,:,:) = b
+!Write variable to netcdf file
+ rcode = NF_PUT_VARA_REAL(ncid,divVarID,start4D,count4D,hold3D)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+
+!Close netcdf file.
+ rcode = NF_CLOSE(ncid)
+  if( rcode /= NF_NOERR ) call handle_err(rcode)
+
+ deallocate ( tdimValues, hold1D, hold3D )
+end subroutine write3D_netcdf
Index: /trunk/00FlowSolve_PL/SRC/xy_fft.f90
===================================================================
--- /trunk/00FlowSolve_PL/SRC/xy_fft.f90	(revision 6)
+++ /trunk/00FlowSolve_PL/SRC/xy_fft.f90	(revision 6)
@@ -0,0 +1,107 @@
+subroutine XY_FFT(in_data,out_data,m1,m2,m3,isign)
+! Routine to compute the x&y (normalized) FFT (1st 2 dimensions)
+! of a 3d field stored in in_data(1:m1,1:m2,1:m3) assuming
+! a uniformly spaced grid mesh in x&y.
+
+!  Normalization:   computing a forward transform and then an
+!                   inverse transform of the result in FFTW
+!                   results in the original data scaled by N.
+!                   Here we will normalizs transforms in BOTH
+!                   directions by sqrt(N).
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+!       inputs
+!              in_data     m1,m2,m3 array of input values
+!              m1,m2,m3    dimensions of field to be transformed
+!              isign       +1=forward=real_to_complex, -=inverse=complex_to_real
+!
+!       output
+!              out_data    m1,m2,m3 array containing the result
+!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ use boundary_information
+ use mpi_parameters
+ use counters_flags_etc
+ implicit none
+
+ include  '../input/problem_size.h'
+
+ integer, intent(in)                              :: isign,m1,m2,m3
+ real, dimension(m1,m2,m3)                        :: in_data
+ real, dimension(m1,m2,m3)                        :: out_data
+!!! integer                                          :: i,j,k
+!!! integer                                          :: ierr
+
+ real, allocatable                                :: in(:),out(:)
+!!! real, allocatable                                :: tmp(:,:,:)
+ real, dimension(nx,ny,locnz)                     :: tmp
+ real                                             :: pi,xnorm
+ integer*8                                        :: plan !size must match pointer size, 8 for DEC alphas
+ integer                                          :: N
+ include 'fftw_kw.inc'                            !  predefined FFTW constants
+
+ if( boundary_type2(1,1) .ne. 'periodic' .or. boundary_type4(1,1) .ne. 'periodic' ) then 
+  write(0,*) '**********   BOTH X&Y DIRECTIONS SHOULD BE PERIODIC  **********'
+  write(0,*) '**********   IF XY_FFT IS TO BE CALLED !!           ***********'
+  STOP
+ endif
+
+! X preliminaries, setup fftw "plan"
+  pi=4.*atan(1.)
+  N=m1-1                                  ! m1 includes both boundary points, N only 1
+  xnorm = 1./sqrt( float(N) )
+!!!  allocate( in(N),out(N),tmp(m1,m2,m3) )
+  allocate( in(N),out(N) )
+
+  if( isign == 1 ) then
+   call rfftw_f77_create_plan(plan,N,FFTW_REAL_TO_COMPLEX,FFTW_ESTIMATE)
+  elseif( isign == -1 ) then
+   call rfftw_f77_create_plan(plan,N,FFTW_COMPLEX_TO_REAL,FFTW_ESTIMATE)
+  else
+   write(0,*) ' **** XY_FFT:   SIGN OF TRANSFORM MUST BE +1/-1  FOR FORWARD/INVERSE DIRECTIONS '
+  endif
+
+! do the x transforms; store result in tmp
+  do j=1,m2
+   do k=1,m3
+    in(1:N)=in_data(1:N,j,k)
+    call rfftw_f77_one(plan,in,out)  
+    tmp(1:N,j,k)=out(1:N)*xnorm
+   enddo
+  enddo
+  if( isign==-1 ) tmp(m1,:,:)=tmp(1,:,:)  ! extra periodic endpoint
+  if( isign== 1 ) tmp(N/2+1,:,:)=0.0      ! zero out nyquist component
+  call rfftw_f77_destroy_plan(plan)
+  deallocate( in,out )
+
+!!!  call MPI_BARRIER(comm,ierr)
+ 
+! Y preliminaries, setup fftw "plan"
+  N=m2-1                                  ! m2 includes both boundary points, N only 1
+  xnorm = 1./sqrt( float(N) )
+  allocate( in(N),out(N) )
+
+  if( isign == 1 ) then
+   call rfftw_f77_create_plan(plan,N,FFTW_REAL_TO_COMPLEX,FFTW_ESTIMATE)
+  elseif( isign == -1 ) then
+   call rfftw_f77_create_plan(plan,N,FFTW_COMPLEX_TO_REAL,FFTW_ESTIMATE)
+  else
+   write(0,*) ' **** XY_FFT:   SIGN OF TRANSFORM MUST BE +1/-1  FOR FORWARD/INVERSE DIRECTIONS '
+  endif
+
+! do the y transforms; store result in tmp
+!!!   print *,'START y-trans loop, m1,m3,N,myid,istep,isign = ',m1,m3,N,myid,istep,isign
+  do i=1,m1
+   do k=1,m3
+    in(1:N)=tmp(i,1:N,k)
+     call rfftw_f77_one(plan,in,out)  
+     out_data(i,1:N,k)=out(1:N)*xnorm
+   enddo
+  enddo
+!!!   print *,'END y-trans loop, myid,istep,isign = ',myid,istep,isign
+  if( isign==-1 ) out_data(:,m2,:)=out_data(:,1,:)  ! extra periodic endpoint
+  if( isign== 1 ) out_data(:,N/2+1,:)=0.  ! zero out near nyquist components
+  call rfftw_f77_destroy_plan(plan)
+!!!  deallocate( in,out,tmp )
+  deallocate( in,out )
+
+end subroutine XY_FFT
Index: /trunk/SpectralModelF90/CMD_ODYSSEUS/lanc.ksh
===================================================================
--- /trunk/SpectralModelF90/CMD_ODYSSEUS/lanc.ksh	(revision 6)
+++ /trunk/SpectralModelF90/CMD_ODYSSEUS/lanc.ksh	(revision 6)
@@ -0,0 +1,160 @@
+#######################################################
+#####          LANCEMENT DU RUN                 ####### 
+#######################################################
+
+#_____________________________________________________
+#
+#       DEFINITION DES VARIABLES
+#_____________________________________________________
+
+MODE=$1
+VERSION=$2
+
+if [ $MODE -eq '1' ]; then
+ echo ' '
+ echo ' '
+ echo '========================'
+ echo '==   MODE INTERACTIF  =='
+ echo '========================'
+ echo ' '
+ echo ' '
+else
+if [ $MODE -eq '0' ]; then
+ echo ' '
+ echo ' '
+ echo '========================'
+ echo '==     MODE BATCH     =='
+ echo '========================'
+ echo ' '
+ echo ' '
+else
+ echo ' '
+ echo ' '
+ echo '========================'
+ echo '==     MODE TEST      =='
+ echo '========================'
+ echo ' '
+ echo ' '
+fi
+fi
+
+DATE=`date '+%Y%m%d'_'%H%M%S'`
+echo `date`
+
+HOME_DIR=/home2/xlvlod/IDRIS
+HOME_PROG=tradit_spectral_model
+HOME_PROJECT=BETA_PLANE
+SUB_PROJECT=sub_${HOME_PROJECT}
+WORK_DIR=/home2/xlvlod/WORKDIR
+WORK_PROG=PS_${HOME_PROJECT}_${VERSION}_${DATE}
+
+echo ' '
+echo 'Definitions des variables:'
+echo '   HOME_DIR    = '$HOME_DIR
+echo '   HOME_PROG   = '$HOME_PROG
+echo '   HOME_PROJECT= '$HOME_PROJECT'     Version: '$VERSION
+echo '   SUB_PROJECT = '$SUB_PROJECT
+echo '   WORK_DIR    = '$WORK_DIR
+echo '   WORK_PROG   = '$WORK_PROG
+
+
+#_____________________________________________________
+#
+# CREATION DU REPERTOIRE DE COMPILATION SUR LE WORKDIR
+#_____________________________________________________
+
+
+# Creation du repertoire de compilation et copie des fichiers
+echo ' '
+echo 'Creation du repertoire de compilation et copie des fichiers'
+if [ ! -d $HOME_DIR/$HOME_PROG/PROJECTS/$HOME_PROJECT/$VERSION ]; then
+   echo ' '
+   echo '   WARNING: le projet '$HOME_PROJECT" dans sa version $VERSION n'existe pas"
+   exit 1
+fi
+
+cd $WORK_DIR
+if  [ -d $WORK_PROG ]; then 
+  rm -rf $WORK_PROG
+fi
+mkdir $WORK_PROG 
+if [ -f $HOME_PROG.tar ]; then
+  rm -f $HOME_PROG.tar
+fi
+cd $WORK_PROG
+
+echo $DATE > FICH_DATE
+echo ${HOME_PROJECT}_${VERSION}_${DATE} > FICH_RUN
+
+#cp -r $HOME_DIR/$HOME_PROG/$SUB_PROJECT .
+#cp -r $HOME_DIR/$HOME_PROG/sub_rapatrie .
+cp -r $HOME_DIR/$HOME_PROG/setup .
+cp -r $HOME_DIR/$HOME_PROG/system.conf .
+cp -r $HOME_DIR/$HOME_PROG/kwmk.sh .
+mkdir source
+mkdir DATA
+mkdir projects
+cd projects
+cp -r $HOME_DIR/$HOME_PROG/PROJECTS/trivial . 
+mkdir $HOME_PROJECT
+cd $HOME_PROJECT
+cp -f $HOME_DIR/$HOME_PROG/PROJECTS/$HOME_PROJECT/$VERSION/* . > /dev/null 2>&1
+
+#ftput -d -h uqbar cfd_2D_001500 /workdir/rech/dyc/rdyc711/cfd_2D_001500  > /dev/null 2>&1 
+
+exit
+
+#_____________________________________________________
+#
+#       COMPILATION DU PROG SUR LE WORKDIR
+#_____________________________________________________
+
+
+echo ' '
+echo 'Compilation du code pour le projet: '$HOME_PROJECT
+# Compilation
+cd $WORK_DIR/$WORK_PROG
+./setup -clean
+./setup -project $HOME_PROJECT  # > /dev/null 2>&1
+if [ -f flow_solve.x ]; then
+   echo '   Compilation successful ! Here we go'
+else
+   echo '   WARNING: Compilation failed !'
+   cd $WORK_DIR
+   rm -rf $WORK_PROG
+   exit 1
+fi
+cd source
+touch i*h
+make flow_solve.x > /dev/null 2>&1
+
+
+if [ $MODE -eq '1' ]; then
+echo ' '
+echo 'Mode interactif: transmission des fichiers sur UQBAR...'
+cd $WORK_DIR/$WORK_PROG
+./flow.x
+exit
+
+else 
+#_____________________________________________________
+#
+#        SOUMISSION DU JOB
+#_____________________________________________________
+if [ $MODE -eq '0' ]; then
+
+echo ' '
+echo 'Soumission du job sur UQBAR'
+cd $WORK_DIR/$WORK_PROG
+qsub $SUB_PROJECT
+
+else
+
+echo ' '
+echo 'End : successful test !'
+cd $WORK_DIR
+rm -rf $WORK_PROG
+
+fi
+
+fi
Index: /trunk/SpectralModelF90/CMD_ODYSSEUS/system.conf
===================================================================
--- /trunk/SpectralModelF90/CMD_ODYSSEUS/system.conf	(revision 6)
+++ /trunk/SpectralModelF90/CMD_ODYSSEUS/system.conf	(revision 6)
@@ -0,0 +1,15 @@
+################################################################################
+# MODIFY BELOW TO DEFINE FFLAGS, FLIBS, F90 and RUN_COMMAND FOR YOUR SYSTEM:
+#  -f3   fixed format fortran, extended line length
+#  -Ep   turn on the pre-processor
+#  -sx5  for the sx5
+#  -w
+#  -Wf"-msg nb"  -- reduces amount of warnings
+#  -Wf"-msg f"   -- reduces amount of warnings
+################################################################################
+# NEC SX5  -Ep -f3 -w -Wf"-msg nb" -Wf"-msg f"
+FC=mpif90
+FFLAGS= -Mpreprocess -Mextend -Mpgicoff ${NETCDF_INC_X}
+FLIBS= ${NETCDF_LIB_X}
+RUN_COMMAND=
+
Index: /trunk/SpectralModelF90/CMD_RHODES/lanc.ksh
===================================================================
--- /trunk/SpectralModelF90/CMD_RHODES/lanc.ksh	(revision 6)
+++ /trunk/SpectralModelF90/CMD_RHODES/lanc.ksh	(revision 6)
@@ -0,0 +1,168 @@
+#######################################################
+#####          LANCEMENT DU RUN                 ####### 
+#######################################################
+
+#_____________________________________________________
+#
+#       DEFINITION DES VARIABLES
+#_____________________________________________________
+
+MODE=$1
+VERSION=$2
+
+if [ $MODE -eq '1' ]; then
+ echo ' '
+ echo ' '
+ echo '========================'
+ echo '==   MODE INTERACTIF  =='
+ echo '========================'
+ echo ' '
+ echo ' '
+else
+if [ $MODE -eq '0' ]; then
+ echo ' '
+ echo ' '
+ echo '========================'
+ echo '==     MODE BATCH     =='
+ echo '========================'
+ echo ' '
+ echo ' '
+else
+ echo ' '
+ echo ' '
+ echo '========================'
+ echo '==     MODE TEST      =='
+ echo '========================'
+ echo ' '
+ echo ' '
+fi
+fi
+
+DATE=`date '+%Y%m%d'_'%H%M%S'`
+echo `date`
+
+HOME_DIR=/home/rech/dyc/rdyc711
+HOME_PROG=tradit_spectral_model
+#HOME_PROJECT=pomme
+HOME_PROJECT=BETA_PLANE
+SUB_PROJECT=sub_${HOME_PROJECT}
+WORK_DIR=/workdir/rech/dyc/rdyc711
+WORK_PROG=PS_${HOME_PROJECT}_${VERSION}_${DATE}
+
+echo ' '
+echo 'Definitions des variables:'
+echo '   HOME_DIR    = '$HOME_DIR
+echo '   HOME_PROG   = '$HOME_PROG
+echo '   HOME_PROJECT= '$HOME_PROJECT'     Version: '$VERSION
+echo '   SUB_PROJECT = '$SUB_PROJECT
+echo '   WORK_DIR    = '$WORK_DIR
+echo '   WORK_PROG   = '$WORK_PROG
+
+
+#_____________________________________________________
+#
+# CREATION DU REPERTOIRE DE COMPILATION SUR LE WORKDIR
+#_____________________________________________________
+
+
+# Creation du repertoire de compilation et copie des fichiers
+echo ' '
+echo 'Creation du repertoire de compilation et copie des fichiers'
+if [ ! -d $HOME_DIR/$HOME_PROG/PROJECTS/$HOME_PROJECT/$VERSION ]; then
+   echo ' '
+   echo '   WARNING: le projet '$HOME_PROJECT" dans sa version $VERSION n'existe pas"
+   exit 1
+fi
+
+cd $WORK_DIR
+if  [ -d $WORK_PROG ]; then 
+  rm -rf $WORK_PROG
+fi
+mkdir $WORK_PROG 
+if [ -f $HOME_PROG.tar ]; then
+  rm -f $HOME_PROG.tar
+fi
+cd $WORK_PROG
+
+echo $DATE > FICH_DATE
+echo ${HOME_PROJECT}_${VERSION}_${DATE} > FICH_RUN
+
+cp -r $HOME_DIR/$HOME_PROG/$SUB_PROJECT .
+cp -r $HOME_DIR/$HOME_PROG/sub_rapatrie .
+cp -r $HOME_DIR/$HOME_PROG/setup .
+cp -r $HOME_DIR/$HOME_PROG/system.conf .
+cp -r $HOME_DIR/$HOME_PROG/kwmk.sh .
+cp -r $HOME_DIR/$HOME_PROG/source .
+mkdir DATA
+#cp -f $HOME_DIR/$HOME_PROG/PROJECTS/$HOME_PROJECT/$VERSION/pomme_ics_ascii DATA/.
+#cp -f $HOME_DIR/$HOME_PROG/PROJECTS/$HOME_PROJECT/$VERSION/pomme_TS_ascii DATA/.
+#cp -f $HOME_DIR/$HOME_PROG/PROJECTS/$HOME_PROJECT/$VERSION/pomme_rho_ascii DATA/.
+#cp -f $HOME_DIR/$HOME_PROG/PROJECTS/$HOME_PROJECT/$VERSION/pomme_TS_ics_xz.ascii DATA/.
+mkdir projects
+cd projects
+cp -r $HOME_DIR/$HOME_PROG/PROJECTS/trivial . 
+mkdir $HOME_PROJECT
+cd $HOME_PROJECT
+cp -f $HOME_DIR/$HOME_PROG/PROJECTS/$HOME_PROJECT/$VERSION/* . > /dev/null 2>&1
+
+ftput -d -h uqbar cfd_2D_001500 /workdir/rech/dyc/rdyc711/cfd_2D_001500  > /dev/null 2>&1 
+
+
+#_____________________________________________________
+#
+#       COMPILATION DU PROG SUR LE WORKDIR
+#_____________________________________________________
+
+
+echo ' '
+echo 'Compilation du code pour le projet: '$HOME_PROJECT
+# Compilation
+cd $WORK_DIR/$WORK_PROG
+./setup -clean
+./setup -project $HOME_PROJECT  # > /dev/null 2>&1
+if [ -f flow_solve.x ]; then
+   echo '   Compilation successful ! Here we go'
+else
+   echo '   WARNING: Compilation failed !'
+   cd $WORK_DIR
+   rm -rf $WORK_PROG
+   exit 1
+fi
+cd source
+touch i*h
+make flow_solve.x > /dev/null 2>&1
+
+
+if [ $MODE -eq '1' ]; then
+echo ' '
+echo 'Mode interactif: transmission des fichiers sur UQBAR...'
+cd $WORK_DIR
+tar cvf $HOME_PROG.tar $WORK_PROG > /dev/null 2>&1
+ftput -d -h uqbar $HOME_PROG.tar /workdir/rech/dyc/rdyc711/$HOME_PROG.tar > /dev/null 2>&1 
+
+cd $WORK_DIR
+rm -rf $WORK_PROG
+exit
+
+else 
+#_____________________________________________________
+#
+#        SOUMISSION DU JOB
+#_____________________________________________________
+if [ $MODE -eq '0' ]; then
+
+echo ' '
+echo 'Soumission du job sur UQBAR'
+cd $WORK_DIR/$WORK_PROG
+qsub $SUB_PROJECT
+
+else
+
+echo ' '
+echo 'End : successful test !'
+cd $WORK_DIR
+rm -rf $WORK_PROG
+
+fi
+
+fi
Index: /trunk/SpectralModelF90/CMD_RHODES/sub_BETA_PLANE
===================================================================
--- /trunk/SpectralModelF90/CMD_RHODES/sub_BETA_PLANE	(revision 6)
+++ /trunk/SpectralModelF90/CMD_RHODES/sub_BETA_PLANE	(revision 6)
@@ -0,0 +1,152 @@
+# QSUB -q uqbar 
+# NECOPT -s /bin/csh                                                   
+# NECOPT -eo    
+# NECOPT -lM 300Mb # 750Mb maximum memory used per job (nx=2048, nz=1024)
+# NECOPT -lT 1500      # maximum CPU time per job
+# NECOPT -me
+# NECOPT -r prepom0
+# NECOPT -jo
+# NECOPT -o listing
+
+#_____________________________________________________
+#!/usr/bin/csh
+#
+# 	DESCRIPTIF DU JOB 
+#_____________________________________________________
+#
+
+date
+cd $TMPDIR
+unalias rm
+set echo
+
+
+#_____________________________________________________
+#
+# 	definition des variables :
+#_____________________________________________________
+#
+set DATE        =       `date '+%Y%m%d'_'%H%M%S'`
+set LISTING	=	listing
+set HOMERHOD	=       $QSUB_WORKDIR 
+set WORK_DIR    =       /workdir/rech/dyc/rdyc009
+# test perfomrances of the code
+set F_PROGINF   =       yes  
+#
+
+
+ftget -h rhodes $HOMERHOD/FICH_RUN FICH_RUN
+set RUN_NAME    =       `more FICH_RUN`
+set N           =       ${RUN_NAME}
+set MFDIR       =       UQBAR_${RUN_NAME}
+
+#_____________________________________________________
+#
+# Alea jacta est ...
+#_____________________________________________________
+#
+
+# in $tmpdir create the right directories
+cd $WORK_DIR
+mkdir projects
+cd projects
+cd ..
+mkdir output
+cd output
+mkdir 2D
+mkdir 3D
+mkdir 1D
+mkdir 0D
+cd ..
+
+
+#create a directory on gaya
+#rsh gaya -n mkdir $MFDIR
+
+
+#_____________________________________________________
+#
+#	3D simulation:
+#_____________________________________________________
+#
+
+
+### copy the executable and allows it to runs  
+	
+	ftget -h rhodes $HOMERHOD/flow_solve.x flow_solve.x
+	chmod +x flow_solve.x
+        pwd
+	mpirun -np 1 flow_solve.x
+
+exit
+
+#_____________________________________________________
+#
+# tidying up ... :
+#_____________________________________________________
+#
+
+ls -l
+ftrace
+
+# save outputs (reels ieee):
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+cd output
+ ls
+
+#save energetics
+
+mfput energetics $MFDIR/$N.energetics
+
+# save 0D fields:
+
+tar cvf 0D.tar 0D 
+mfput  0D.tar $MFDIR/$N.0D.tar
+rm 0D.tar
+
+# save 1D fields:
+
+tar cvf 1D.tar 1D 
+mfput  1D.tar $MFDIR/$N.1D.tar
+rm 1D.tar
+
+# save 2D fields:
+
+tar cvf 2D.tar 2D 
+mfput  2D.tar $MFDIR/$N.2D.tar
+rm 2D.tar
+
+# save 3D fields:
+
+tar cvf 3D.tar 3D 
+mfput  3D.tar $MFDIR/$N.3D.tar
+rm 3D.tar
+
+# save forcing
+#mfput forcing.txt $MFDIR/forcing.txt
+
+# save listing
+#mfput ../$LISTING $MFDIR/$LISTING
+
+#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+cd $TMPDIR
+rm flow_solve.x 
+rm core 
+
+#### save listing
+cd $WORK_DIR
+mkdir $MFDIR
+cd $MFDIR
+ftget -h rhodes $HOMERHOD/sub_rapatrie sub_rapatrie
+echo $HOMERHOD > fichier_directory
+qsub sub_rapatrie
+
+#_____________________________________________________
+#
+# 	that's all, folks !
+#_____________________________________________________
+#
+
+exit
+
Index: /trunk/SpectralModelF90/CMD_RHODES/system.conf
===================================================================
--- /trunk/SpectralModelF90/CMD_RHODES/system.conf	(revision 6)
+++ /trunk/SpectralModelF90/CMD_RHODES/system.conf	(revision 6)
@@ -0,0 +1,15 @@
+################################################################################
+# MODIFY BELOW TO DEFINE FFLAGS, FLIBS, F90 and RUN_COMMAND FOR YOUR SYSTEM:
+#  -f3   fixed format fortran, extended line length
+#  -Ep   turn on the pre-processor
+#  -sx5  for the sx5
+#  -w
+#  -Wf"-msg nb"  -- reduces amount of warnings
+#  -Wf"-msg f"   -- reduces amount of warnings
+################################################################################
+# NEC SX5  -Ep -f3 -w -Wf"-msg nb" -Wf"-msg f"
+FC=sxmpif90
+FFLAGS= -f3 -EP -sx5 -w -Wf"-msg nb" -Wf"-msg f" ${NETCDF_I4R4}
+FLIBS= ${NETCDF_I4R4}
+RUN_COMMAND=
+
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/flow_solve.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/flow_solve.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/flow_solve.f	(revision 6)
@@ -0,0 +1,213 @@
+      program flow_solve
+c=========================================================================================
+c     Free-Slip or Triply Periodic Spectral model in in 2/3 dimensions.
+c     Parallel version using MPI.
+c     Lagrangian floats. (Very slow but accurate)
+c=========================================================================================
+
+      implicit none
+#include "runtime_variables.h"
+#include "variable_declarations.h"
+#include "mpi_init.h"
+#include "problem_params.h"
+#include "runtime_initialization.h"
+      
+c=========================================================================================
+c                     BEGIN MAIN TIME STEPPING LOOP
+c=========================================================================================
+
+      do istep = istart,iend
+       time = (t_start + istep*dt)*(Lz/U0)   ! dimensional time clock
+
+
+c     Initialize floats if neccesary.
+       if( float_switch .eq. 'on' .and. istep .eq. istart_floats ) then
+        call initialize_floats(float_variables,nfloats,locnx,ny,nz,Lx,Ly,Lz,U0,
+     *                         u_cplx,v_cplx,w_cplx,s1_cplx,s2_cplx,
+     *                         rho_0,DGRAD,s1_scale,s2_scale,wnx,wny,wnz,bc_flag,sensor_data,
+     *                         nsensors,float_parameters,nfloatparameters,
+     *                         j_float_time,time,z_close,delta_w,z_offset,
+     *                         myid,comm)
+       endif
+
+
+c      Calculate transform of vorticity vector [vortx,vorty,vortz].
+c      Use the t_n values of u_cplx,v_cplx, and w_cplx stored in location N.
+c      Store the vorticity components in work_cplx(:,:,:,1-3) respectively. 
+        call vort_fcs(u_cplx(1,1,1,N),v_cplx(1,1,1,N),w_cplx(1,1,1,N),
+     *                locnx,nx,ny,nz,wnx,wny,wnz,
+     *                work_cplx(1,1,1,1),work_cplx(1,1,1,2),work_cplx(1,1,1,3),
+     *                num_dims,bc_flag)
+
+
+c      Inverse transform the time t_n dependent variables and
+c      the vorticity vector {work_cplx(1-3)} back to the physical domain.
+c      Physical space representations of u,v,w,s1 and s2 are returned
+c      in the arrays work(:,:,:,4-7,9) respectively.
+c      The physical space representation of vorticity components are
+c      returned in the arrays work(:,:,:,1-3).
+c      The array scratch is used for temporary work space.
+       call ifft(u_cplx,v_cplx,w_cplx,s1_cplx,s2_cplx,
+     *           work_cplx(1,1,1,1),work_cplx(1,1,1,2),work_cplx(1,1,1,3), 
+     *           N,nx,ny,nz,trigx,trigy,trigz,ifax,ifay,ifaz,wn,
+     *           scratch,xt,num_dims,bc_flag,
+     *           work(1,1,1,4),work(1,1,1,5),work(1,1,1,6),work(1,1,1,7),work(1,1,1,9),
+     *           work(1,1,1,1),work(1,1,1,2),work(1,1,1,3),work_cplx(1,1,1,8),
+     *           myid,numprocs,locnx,locnz,comm,twoslice,subslice)
+
+c      Call equation of state to calculate perturbation density pd(:,:,:), given the physical
+c      space values of s1 and s2 now stored in work(:,:,:,7) and work(:,:,:,9) respectively.
+       call equation_of_state(scalars,work(1,1,1,7),work(1,1,1,9),s1_scale,s2_scale,
+     *                        nx,ny,locnz,rho_0,DGRAD,myid,numprocs,Lx,Ly,Lz,pd(1,1,1))
+
+c      Given the current numerical solutions on the physical space grid, do some
+c      quick analyses and/or output selected results if appropriate.
+       if( mod(istep,i_stat) .eq. 0 ) then
+c      **** I'm using only kappa_1 here for surface diffusion term g*kappa*d/dz rho ...check
+        call energetics(work(1,1,1,4),work(1,1,1,5),work(1,1,1,6),pd(1,1,1),
+     *                  u_cplx(1,1,1,N),v_cplx(1,1,1,N),w_cplx(1,1,1,N),wnx,wny,wnz,
+     *                  U0,Lx,Ly,Lz,f,g,rho_0,DGRAD,Re,kappa_1,nu,
+     *                  nx,ny,nz,num_dims,bc_flag,force_flag,time,
+     *                  comm,myid,numprocs,locnx,locnz,ambient_density)
+       endif 
+
+#include "init_write_netcdf.h"
+
+c      Compute nonlinear products locally in physical space. On input, the
+c      work arrays contain values as described above.
+c      For now, we assume s1_bar and s2_bar are functions of z only and so
+c      d/dx and d/dy of p_bar, the hydrostatic pressure associated w/ s1_bar/s2_bar,
+c      are equal to zero.
+c      On output:
+c      work(:,:,:,1-3)   contains the products of s1 and u,v and w respectively.
+c      work(:,:,:,10-12) contains the products of s2 and u,v and w respectively.
+c      work(:,:,:,4)   v*vortz - w vorty + Rot*v -u*d/dx rho_bar - d/dx p_bar
+c      work(:,:,:,5)   w*vortx - u vortz - Rot*u -v*d/dy rho_bar - d/dy p_bar
+c      work(:,:,:,6)   u*vorty - v vortx - Ri*pd
+c      work(:,:,:,7)   -u dot grad s1_bar
+c      work(:,:,:,8)   d/dz s1_bar
+c      work(:,:,:,9)   -u dot grad s2_bar
+c      work(:,:,:,13)   d/dz s2_bar
+       call nonlin (scalars,work(1,1,1,4),work(1,1,1,5),work(1,1,1,6),
+     *              pd(1,1,1),work(1,1,1,7),work(1,1,1,9), 
+     *              work(1,1,1,1),work(1,1,1,2),work(1,1,1,3),
+     *              work(1,1,1,10),work(1,1,1,11),work(1,1,1,12),
+     *              Lx,Ly,Lz,U0,DGRAD,s1_scale,s2_scale,rho_0,
+     *              work(1,1,1,8),work(1,1,1,13),Ri,Rot,beta,num_dims,
+     *              nx,ny,locnz,myid,numprocs,comm)                    ! beta effect pba June 2005
+
+c      Add forcing terms via user_defined_forcing subroutine
+       if( force_flag .eq. 'yes' ) then
+        call add_forcing(work(1,1,1,4),work(1,1,1,5),work(1,1,1,6),
+     *                   work(1,1,1,7),work(1,1,1,9),nx,ny,locnz,myid,
+     *                   numprocs,Lx,Ly,Lz,U0,DGRAD,s1_scale,s2_scale,time,f,g,rho_0)
+       endif
+
+c      Transform physical space quantities back to the wavenumber domain.
+c      The results are stored in work_cplx(:,:,:,i) for i as follows:
+c      work_cplx(:,:,:,1-3)   contains the products of s1 and u,v and w respectively.
+c      work_cplx(:,:,:,10-12) contains the products of s2 and u,v and w respectively.
+c      work_cplx(:,:,:,4)   v*vortz - w vorty + Rot*v -u*d/dx rho_bar - d/dx p_bar
+c      work_cplx(:,:,:,5)   w*vortx - u vortz - Rot*u -v*d/dy rho_bar - d/dy p_bar
+c      work_cplx(:,:,:,6)   u*vorty - v vortx - Ri*pd
+c      work_cplx(:,:,:,7)   -u dot grad s1_bar
+c      work_cplx(:,:,:,8)   d/dz s1_bar
+c      work_cplx(:,:,:,9)   -u dot grad s2_bar
+c      work_cplx(:,:,:,13)   d/dz s2_bar
+c      The array scratch is used as temporary work space.
+       call fft (work(1,1,1,1),work(1,1,1,2),work(1,1,1,3),work(1,1,1,4), 
+     *           work(1,1,1,5),work(1,1,1,6),work(1,1,1,7),work(1,1,1,9),
+     *           work(1,1,1,10),work(1,1,1,11),work(1,1,1,12),
+     *           work(1,1,1,13),work(1,1,1,8),
+     *           num_dims,nx,ny,nz,trigx,trigy,trigz, 
+     *           ifax,ifay,ifaz,wn,bc_flag,xt,work_cplx,scratch,
+     *           myid,numprocs,locnx,locnz,comm,twoslice,subslice)
+
+c      Compute the transfer terms, i.e. all components of the rhs's
+c      except the dissipation and diffusion terms which are treated 
+c      analytically via integrating factors. Store the results in the
+c      "M" locations of the Tr1, Tr2, Tr3 and Tr4 arrays. The transform
+c      of the pressure is also computed and stored in work_cplx(:,:,:,8).
+       call rhs(work_cplx(1,1,1,4),work_cplx(1,1,1,5),work_cplx(1,1,1,6),
+     *          work_cplx(1,1,1,7),work_cplx(1,1,1,9),
+     *          work_cplx(1,1,1,10),work_cplx(1,1,1,11),
+     *          work_cplx(1,1,1,12),work_cplx(1,1,1,13),
+     *          work_cplx(1,1,1,1),work_cplx(1,1,1,2),
+     *          work_cplx(1,1,1,3),work_cplx(1,1,1,8),
+     *          Tr1(1,1,1,M),Tr2(1,1,1,M),Tr3(1,1,1,M),Tr4(1,1,1,M),
+     *          Tr5(1,1,1,M),amp,dt,
+     *          myid,num_dims,locnx,ny,nz,wnx,wny,wnz,bc_flag) 
+
+c      Add forcing in Fourier space. This is for experts only,
+c      using this method of forcing requires knowledge of the
+c      fourier space wavenumber map, which is defined in
+c      source/fill_wave_vectors.f.
+       if( force_flag .eq. 'yesFourier' ) then
+        call add_fforcing(force_cplx,Tr1(1,1,1,M),Tr2(1,1,1,M),
+     *                   Tr3(1,1,1,M),Tr4(1,1,1,M),Tr5(1,1,1,M),
+     *                   wnx,wny,wnz,locnx,ny,nyplanes,nz,Lz,
+     *                   U0,DGRAD,time,f,g,rho_0)
+       endif
+
+#include "trans_write_netcdf.h"
+
+c      Take an explicit, multilevel time step.
+c      Store the updated fields in locations (:,:,:,NM1).
+c      N.B. The "NM1" locations will shortly be "promoted" to the "current"
+c      fields before advancing to the next time step.
+       call step(u_cplx,v_cplx,w_cplx,s1_cplx,s2_cplx,Tr1,Tr2,Tr3,Tr4,Tr5,amp,
+     *           num_dims,M,MM1,MM2,N,NM1,locnx,ny,nz,step_flag,dt)
+
+c      If required, advance the infinitesimal lagrangian floats
+       if( float_switch .eq. 'on' ) then
+        if( mod(istep,2) .eq. 0 ) then
+
+         call rk4_even(dt,k_rk4,float_variables,float_parameters,Lz,s1_scale,s2_scale,
+     *                 locnx,ny,nz,nfloats,nfloatparameters,nsensors,
+     *                 N,NM1,u_cplx,v_cplx,w_cplx,s1_cplx,s2_cplx,wnx,wny,wnz,
+     *                 bc_flag,Pr_1,Re,myid,comm)
+
+        else   ! for odd time steps:
+         call rk4_odd (dt,k_rk4,float_variables,float_parameters,Lz,s1_scale,s2_scale,
+     *                 locnx,ny,nz,nfloats,nfloatparameters,nsensors,
+     *                 N,NM1,u_cplx,v_cplx,w_cplx,s1_cplx,s2_cplx,wnx,wny,wnz,
+     *                 bc_flag,Pr_1,Re,sensor_data,myid,comm)
+
+         time = (t_start + (istep+1)*dt)*(Lz/U0)   ! value after time step
+
+c        Float data can be written every odd time step, i.e. step 1,3,5,7 etc
+c        Setting the mod argument to 7 selects every fourth available
+c        output point. Setting it to 1 selects every odd time step.
+
+         if( istep .gt. istart_floats .and. mod(istep,1) .eq. 0 ) then
+          if(myid .eq. 0 ) then
+           prelim_flag='no'
+           call write_floats_nc(time,istep,nfloats,nsensors,Lz,s1_scale,s2_scale,U0,
+     *                          float_variables,sensor_data,j_float_time,
+     *                          float_parameters,nfloatparameters,prelim_flag)
+          endif
+         endif  ! end of special, i.e. write data, odd case
+
+        endif   ! end of even/odd time step block
+       endif    ! end of float_switch on case
+ 
+c      toggle N,N-1 pointers (storage ids for dependent variables)
+       tmp=NM1
+       NM1=N
+       N=tmp
+
+c      toggle M,M-1 & M-2 pointers (storage ids for transfer terms)
+       tmp=MM2
+       MM2=MM1
+       MM1=M
+       M=tmp
+
+       call MPI_BARRIER(comm,ierr)   ! precautionary synchronization
+      enddo    ! end time stepping loop
+
+c     Clean up and gracefully exit MPI environment.
+999   call MPI_BARRIER(comm,ierr)
+      call MPI_FINALIZE(ierr)
+
+      stop
+      end
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/initialize.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/initialize.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/initialize.f	(revision 6)
@@ -0,0 +1,524 @@
+      subroutine initialize(u,v,w,s1,s2,ambient_density,u_cplx,v_cplx,w_cplx,s1_cplx,s2_cplx,
+     *                      nx,ny,nz,num_dims,efactor,
+     *                      Lx,Ly,Lz,dx,dy,dz,U0,DGRAD,s1_scale,s2_scale,rho_0,f,f_tild,g,kappa_1,kappa_2,nu,
+     *                      bc_flag,ifax,ifay,ifaz,trigx,trigy,trigz,wn,
+     *                      wnx,wny,wnz,amp,p,T_diss,diss_flag,N,NM1,M,MM1,MM2,step_flag,
+     *                      Rot,Rot_tild,Ri,Re,Pr_1,Pr_2,istart,iend,i_all,i_selective,i_stat,
+     *                      dt,t_start,t_end,t_write_selective,
+     *                      t_stat,xt,work,scratch,myid,numprocs,locnx,locnz,
+     *                      comm,twoslice,subslice,temp,netcdf_file,nyplanes,
+     *                      force_cplx,force_flag,work_P,scalars,beta)    ! beta effect June 2005 pba
+     
+c
+c     Routine to set up the initial conditions, scale
+c     all variables (i.e. nondimensionalize variables) and initialize
+c     various arrays, flags and counters.
+c
+
+      implicit none
+      integer nyplanes,nx,ny,nz,num_dims,p,iswitch,itrig,i_stat,N,NM1,M,MM1,MM2
+      integer myid,numprocs,ierr,locnx,locnz,i,j,k,iwrite
+      integer comm,twoslice,subslice
+      integer iseed,npts
+      parameter (npts=4*2048)  ! >=nx
+      double precision urv(npts),vrv(npts)
+      real u(nx+2,ny+1,locnz+1),v(nx+2,ny+1,locnz+1),w(nx+2,ny+1,locnz+1)
+      real s1(nx+2,ny+1,locnz+1),s2(nx+2,ny+1,locnz+1)
+      real ambient_density(nx+2,ny+1,locnz+1)
+      real temp(nx,nyplanes,locnz+1)
+      complex u_cplx(locnx,ny+1,nz+1,2),v_cplx(locnx,ny+1,nz+1,2)
+      complex w_cplx(locnx,ny+1,nz+1,2),s1_cplx(locnx,ny+1,nz+1,2)
+      complex s2_cplx(locnx,ny+1,nz+1,2)
+      real Lx,Ly,Lz,U0,DGRAD,s1_scale,s2_scale,rho_0,f,f_tild,g,kappa_1,kappa_2,nu
+      real beta,Rot,Rot_tild,Ri,Re,Pr_1,Pr_2,dt,t_start,t_end,t_write_selective   ! beta pba June 2005
+      character*80 bc_flag,step_flag,strat_flag,read_netcdf,netcdf_file
+      character*80 diss_flag,force_flag
+      character*2 scalars
+      character tswitch
+      integer ifax(13),ifay(13),ifaz(13)
+      integer jstart(4),icount(4),data_dims(4),ncid,RCODE,var_id
+      real wnx(locnx),wny(ny+1),wnz(nz+1)
+      real amp(locnx,ny+1,nz+1,2),T_diss
+      real trigx(3*(nx+2)/2+1),trigy(2*(ny+1)),trigz(2*nz)
+      real work((nx+2)*(ny+1)*(locnz+1)),efactor
+      real work_P(nx+2,ny+1,locnz+1)
+      complex scratch(locnx,ny+1,nz+1)
+      complex force_cplx(locnx,ny+1,nz+1)
+      complex wn(nz/4+1),xt(nx+2, nz/2+1)
+
+      real pi,dx,dy,dz,x,y,z,time_scale,t_stat,total_density,N2,delta_u
+      real xpos,ypos,zpos,s1_bar,s2_bar,junk,rho_bar,Tgrad
+      double precision Temperature,Salinity,pMpa,density
+      integer istart,iend,i_all,i_selective,kglobal
+      integer dim_length,ii,jj
+
+#include "netcdf.inc"
+
+      N=1   ! put startup fields on plane 1 
+      NM1=2 ! the other field
+      pi = 4.0*atan(1.0)
+      dx = Lx/float(nx)
+      dz = Lz/float(nz)
+      time_scale = Lz/U0
+
+      if( num_dims .eq. 2 ) then
+       dy = 1
+       jj=1   ! j index for writing out rho_bar
+      elseif( num_dims .eq. 3 ) then
+       dy = Ly/float(ny)
+       jj=nyplanes/2   ! j index for writing out rho_bar
+      endif
+
+c     Will write out rho_bar(z) at Lx/2,Ly/2
+      ii=nx/2
+      if(myid.eq.0) open(1,file='output/rho_bar')
+
+       do k=1,locnz+1
+        kglobal = k + myid*locnz
+        zpos=(kglobal-1.)*dz/Lz     ! use dimensionless values here
+        do j=1,nyplanes
+         do i=1,nx
+           xpos=(i-1.)*dx/Lz
+           ypos=(j-1.)*dy/Lz
+
+          call s1_bar_func(xpos,ypos,zpos,s1_bar,
+     *                     junk,junk,junk,junk,
+     *                     Lz,s1_scale)
+          call s2_bar_func(xpos,ypos,zpos,s2_bar,
+     *                     junk,junk,junk,junk,
+     *                     Lz,s2_scale)
+          if( scalars .eq. 'TS' ) then
+           Temperature = (s1_bar*s1_scale)       ! [deg C]
+           Salinity = (s2_bar*s2_scale)   ! [psu]
+           Salinity=Salinity/1000.     ! fortran routine rho uses concentration units
+           pmPa=0.d0
+           call rho(Salinity,Temperature,pMpa,density)
+           rho_bar = (sngl(density) - rho_0)   ! [kg/m3]
+           ambient_density(i, j, k) = rho_bar/(Lz*DGRAD)   ! store dimensionless values
+          elseif( scalars .eq. 'TP' .or. scalars .eq. 'T0' ) then
+           Temperature = (s1_bar*s1_scale)       ! [deg C]
+           Salinity = 0.  ! [psu]
+           pmPa=0.d0
+           call rho(Salinity,Temperature,pMpa,density)
+           rho_bar = (sngl(density) - rho_0)   ! [kg/m3]
+           ambient_density(i, j, k) = rho_bar/(Lz*DGRAD)   ! store dimensionless values
+          elseif( scalars .eq. 'SP' .or. scalars .eq. 'S0' ) then
+           Temperature = 0.       ! [deg C]
+           Salinity = (s2_bar*s2_scale)   ! [psu]
+           Salinity=Salinity/1000.     ! fortran routine rho uses concentration units
+           pmPa=0.d0
+           call rho(Salinity,Temperature,pMpa,density)
+           rho_bar = (sngl(density) - rho_0)   ! [kg/m3]
+           ambient_density(i, j, k) = rho_bar/(Lz*DGRAD)   ! store dimensionless values
+          elseif( scalars .eq. 'RP' .or. scalars .eq. 'R0' ) then
+           ambient_density(i, j, k) = s1_bar/s1_scale      ! store dimensionless values
+          elseif( scalars .eq. 'PP' ) then
+           ambient_density(i, j, k) = 0.0                  ! store dimensionless values
+          endif
+
+          if(myid.eq.0 .and. i.eq.ii .and. j.eq.jj) write(1,*) zpos*Lz,rho_bar
+         enddo
+        enddo
+       enddo
+       if(myid.eq.0) close(10)
+       call MPI_BARRIER(comm,ierr)   ! all processors loop and compute but only writes file
+ 
+
+      if( netcdf_file .eq. 'none' .or. netcdf_file .eq. 'NONE' ) then
+       do k=1,locnz+1
+        kglobal = k + myid*locnz
+        zpos=(kglobal-1.)*dz     ![m]
+
+        do j=1,nyplanes
+         do i=1,nx
+      
+          xpos=(i-1.)*dx
+          ypos=(j-1.)*dy
+
+          call user_defined_ics(xpos,ypos,zpos,Lx,Ly,Lz,
+     *         u(i,j,k),v(i,j,k),w(i,j,k),s1(i,j,k),s2(i,j,k) )
+
+         enddo
+        enddo
+       enddo
+ 
+      else  ! we will read ICS from an existing netcdf file
+c     for example, to read ICs from a netcdf file generated via GMwaves.x
+
+c      define size of data blocks for reading from netcdf file 
+       jstart(1)=1
+       jstart(2)=1
+       jstart(3)=(myid*locnz)+1
+       jstart(4)=1
+       icount(1)=nx
+       data_dims(1)=nx
+       icount(2)=nyplanes 
+       data_dims(2)=nyplanes 
+       if( myid .eq. numprocs-1 .and. bc_flag .eq. 'zslip') then  
+        icount(3)=locnz+1
+        data_dims(3)=numprocs*locnz+1
+       else
+        icount(3)=locnz
+        data_dims(3)=numprocs*locnz
+       endif
+       icount(4)=1
+       data_dims(4)=1
+
+c      ACCESS THE FILE SEQUENTIALLY ACROSS PROCESSORS
+
+       DO IWRITE=0,NUMPROCS-1
+        IF( MYID .NE. IWRITE ) GOTO 999    ! wait for IWRITE to finish w/ file
+
+       write(0,*) 'Processor ',myid,' accessing ICs file ',netcdf_file
+c      processor IWRITE opens the specified file
+       rcode=NF_OPEN(netcdf_file,NF_NOWRITE,ncid)
+
+c      read in the dimensional values from the file
+       do i=0, 4
+        rcode=NF_INQ_DIMLEN(ncid, i, dim_length)
+        if(dim_length .ne. data_dims(i)) then
+         write (0,*) "dimensional values from the file are inconsistant
+     * with global dimensions of the problem given."
+         exit
+        endif
+       enddo
+
+c      U
+       rcode=NF_INQ_VARID(ncid,'uVar',var_id)
+       rcode=NF_GET_VARA_REAL(ncid,var_id,jstart,icount,temp)
+       do k=1,icount(3)
+        do j=1,nyplanes
+         do i=1,nx
+          u(i,j,k)=temp(i,j,k)
+         enddo
+        enddo
+       enddo
+
+c      V
+       rcode=NF_INQ_VARID(ncid,'vVar',var_id)
+       rcode=NF_GET_VARA_REAL(ncid,var_id,jstart,icount,temp)
+        do k=1,icount(3)
+         do j=1,nyplanes
+          do i=1,nx
+           v(i,j,k)=temp(i,j,k)
+          enddo
+         enddo
+        enddo
+
+c      W
+       rcode=NF_INQ_VARID(ncid,'wVar',var_id)
+       rcode=NF_GET_VARA_REAL(ncid,var_id,jstart,icount,temp)
+       do k=1,icount(3)
+        do j=1,nyplanes
+         do i=1,nx
+          w(i,j,k)=temp(i,j,k)
+         enddo
+        enddo
+       enddo
+
+
+c      s1
+       rcode=NF_INQ_VARID(ncid,'s1Var',var_id)
+       rcode=NF_GET_VARA_REAL(ncid,var_id,jstart,icount,temp)
+
+       do k=1,icount(3)      
+        kglobal = k + myid*locnz
+        zpos=(kglobal-1.)*dz/Lz     ![dless]
+        do j=1,nyplanes 
+         ypos=(j-1.)*dy/Lz
+         do i=1,nx
+          xpos=(i-1.)*dx/Lz
+          call s1_bar_func(xpos,ypos,zpos,s1_bar,junk,junk,junk,junk,Lz,s1_scale)
+          s1(i,j,k) = temp(i,j,k) - s1_bar*(s1_scale)
+         enddo
+        enddo
+       enddo 
+
+c      s2
+       rcode=NF_INQ_VARID(ncid,'s2Var',var_id)
+       rcode=NF_GET_VARA_REAL(ncid,var_id,jstart,icount,temp)
+       do k=1,icount(3)      
+        kglobal = k + myid*locnz
+        zpos=(kglobal-1.)*dz/Lz     ![dless]
+        do j=1,nyplanes 
+         ypos=(j-1.)*dy/Lz
+         do i=1,nx
+          xpos=(i-1.)*dx/Lz
+          call s2_bar_func(xpos,ypos,zpos,s2_bar,junk,junk,junk,junk,Lz,s2_scale)
+          s2(i,j,k) = temp(i,j,k) - s2_bar*(s2_scale)
+         enddo
+        enddo
+       enddo
+
+       rcode=NF_CLOSE(ncid)
+999    call MPI_BARRIER(comm,ierr)    ! all processes wait here before reading next block
+      ENDDO
+
+      endif  ! end if block for netcdf or user specified ICS
+
+c     write out parameters characterizing simulation
+c
+      if( myid .eq. 0 ) then
+       write(6,*) ' Number of dimensions:  ',num_dims
+       write(6,*) ' nx, ny, nz : ',nx,ny,nz
+       write(6,*) ' boundary conditions:  ',bc_flag
+       write(6,*) ' '
+       write(6,*) ' '
+       write(6,*) ' domain lengths Lx, Ly, Lz [m]:  ',Lx,Ly,Lz
+       write(6,*) ' grid spacings dx, dy, dz [m]:  ',dx,dy,dz
+       write(6,*) ' bulk velocity scale U [m/s]:  ',U0
+       write(6,*) ' characteristic density gradient scale [kg/m4]:  ',DGRAD
+       write(6,*) ' characteristic range of scalar 1 [e.g. deg C]  ',s1_scale
+       write(6,*) ' characteristic range of scalar 2 [e.g. psu]  ',s2_scale
+       write(6,*) 
+     &   ' characteristic density of Boussinesq fluid [kg/m3]:  ',rho_0
+       write(6,*) ' coriolis parameter f [1/s]:  ',f
+c      beta effect pba June 2005
+       beta = beta*(Lz/f)         ! (ms)^(-1) ---> dimensionless
+       write(0,*) ' coriolis parameter beta [1/ms]:  ',beta/(Lz/f) ! dless--> dimensional
+       write(6,*) ' gravitational acceleration g [m/s2]:  ',g
+       write(6,*) ' molecular diffusivity of scalar 1 [m2/s]:  ',kappa_1
+       write(6,*) ' molecular diffusivity of scalar 2 [m2/s]:  ',kappa_2
+       write(6,*) ' viscosity [m2/s]:  ',nu
+c      write(6,*) ' minimum BV period [s]:  ',per_min
+c      write(6,*) ' CFL_x = Umax dt/dx:  ', UMAX*dt/dx
+c      write(6,*) ' CFL_y = Vmax dt/dy:  ', VMAX*dt/dy
+c      write(6,*) ' CFL_z = Wmax dt/dz:  ', WMAX*dt/dz
+
+c     nondimensionalize the initial fields, the stratification parameters 
+c     and time variables
+       write(6,*) ' time step dt [s]    :  ',dt
+       write(6,*) ' initial time  [s]   :  ',t_start
+       write(6,*) ' final time    [s]   :  ',t_end
+       write(6,*) ' Lz/U0        [s]    :  ',time_scale
+      endif
+
+      istart = 0
+      iend = ( t_end - t_start ) / dt
+      i_selective = t_write_selective/dt
+      i_stat = t_stat/dt
+
+      dt = dt/time_scale
+      t_start = t_start/time_scale
+      t_end = t_end/time_scale
+      t_write_selective = t_write_selective/time_scale
+      t_stat = t_stat/time_scale
+
+      if( myid .eq. 0 ) then
+       write(6,*) ' '
+       write(6,*) ' time variables initialized via problem_parameters.h'
+       write(6,*) ' non-dimensionalized in initilize.f'
+      endif
+      
+      if( myid .eq. 0 ) then
+       write(6,*) ' '
+       write(6,*) ' time increment counters set'
+       write(6,*) ' number of steps:  ',iend-istart+1
+       write(6,*) ' number of steps between energetics calculations:  ',i_stat
+       write(6,*) ' number of steps between full writes:  ',i_all
+       write(6,*) ' number of steps between selective writes:  ',i_selective
+      endif
+      
+      do i=0,numprocs-1
+       if( myid .eq. i .and. myid .lt. numprocs-1 ) then
+#ifdef F77
+        open(1,file='output/u_profile',status='unknown',access='append')    ! f77 syntax
+#else
+        open(1,file='output/u_profile',status='unknown',
+     &       position='append')  ! f90 syntax
+#endif F77
+        do k=1,locnz
+         write(1,*) 0.,0.,(k-1+myid*locnz)*dz,u(1,1,k)
+        enddo
+        close(1)
+       elseif( myid .eq. i .and. myid .eq. numprocs-1 ) then
+#ifdef F77
+        open(1,file='output/u_profile',status='unknown',access='append')     ! f77
+#else
+        open(1,file='output/u_profile',status='unknown',
+     &       position='append')   ! f90 syntax
+#endif F77 
+c '
+       do k=1,locnz+1
+         write(1,*) 0.,0.,(k-1+myid*locnz)*dz,u(1,1,k)
+        enddo
+        close(1)
+        endif
+         call MPI_BARRIER(comm,ierr)
+        enddo
+      
+c     Nondimensionalize dependent variables:
+      do k=1,locnz+1
+       do j=1,nyplanes
+        do i=1,nx
+         u(i,j,k) = u(i,j,k)/U0
+         v(i,j,k) = v(i,j,k)/U0
+         w(i,j,k) = w(i,j,k)/U0
+         s1(i,j,k) = s1(i,j,k)/(s1_scale)
+         s2(i,j,k) = s2(i,j,k)/(s2_scale)
+        enddo
+       enddo
+      enddo
+
+      if( myid .eq. 0 ) then
+       write(6,*) ' '
+       write(6,*) 'dependent variables non-dimensionalized'
+      endif
+      
+c     compute the dimensionless parameters
+      Rot= f*Lz/U0
+      Rot_tild=f_tild*Lz/U0
+      N2 = (g/rho_0)*DGRAD
+!!!      N2 = 0.
+      Ri = N2*Lz**2/(U0**2)
+      Re = U0*Lz/nu
+      Pr_1 = nu/kappa_1
+      Pr_2 = nu/kappa_2
+      
+      if( myid .eq. 0 ) then
+       write(6,*) ' '
+       write(6,*) ' '
+       write(6,*) ' inverse Rossby number fL/U:  ',Rot
+       write(6,*) ' inverse Rossby number f_tild*Lz/U0:  ',Rot_tild
+       write(6,*) ' bulk Richardson number (NL/U)^2 : ',Ri
+       write(6,*) ' bulk Reynolds number UL/nu:  ',Re
+       write(6,*) ' Prandtl number  nu/kappa_1:  ',Pr_1
+       write(6,*) ' Prandtl number  nu/kappa_2:  ',Pr_2
+       write(6,*) ' '
+       write(6,*) ' '
+      endif
+
+c
+c     set up dimensionless wavenumber vectors, 
+c     N.B. for fill_wave_vectors, input length & time scales, 
+c     including wavenumber truncation radius,
+c     are dimensionless quantities, scaled by vertical domain size Lz & U0
+c
+      call fill_wave_vectors (wnx, wny, wnz, nx, ny, nz, Lx/Lz, Ly/Lz, amp,
+     *                        dt, Re, Pr_1, Pr_2, p,T_diss/time_scale,diss_flag,num_dims,bc_flag,
+     *                        myid, numprocs, locnx)
+     
+      if( myid .eq. 0 ) then
+       write(6,*) ' '
+       write(6,*) ' dimensionless wavenumber vectors and '
+       write(6,*) ' integrating factors initialized'
+       write(6,*) ' '
+      
+       write(6,*) 'TRANSFORMING DIMENSIONLESS INITIAL CONDITIONS P-->S'
+      endif
+
+c
+c     take the 3d transforms of the dimensionless, physical space ICS
+c
+	iswitch = +1   ! Forward transforms: physical to wavenumber domain
+	itrig = 1      ! compute & return trig tables with first call
+                       ! to transform3d
+	
+C
+C     set tswitch to indicate type of z transform, and transform u & v & s1
+C
+      if( bc_flag .eq. 'zperiodic' ) then
+       tswitch='f'  ! indicating fourier in xy, fourier in z
+      elseif( bc_flag .eq. 'zslip' ) then
+       tswitch = 'c'   ! free slip, du/dz=dv/dz=ds1d/dz=0 at top & bottom
+      endif
+      
+      call transform3d (u,u_cplx(1,1,1,N),nx,ny,nz,iswitch,tswitch,itrig,
+     *                   trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                   num_dims,work,scratch,xt,myid,numprocs,locnx,locnz,
+     *                   comm,twoslice,subslice)
+     
+      if( myid .eq. 0 ) then
+       write(6,*) ' u transformed to wavenumber domain: ', tswitch,iswitch,itrig
+      endif
+     
+      itrig = 0      ! trig tables now computed and stored
+      
+      call transform3d (v,v_cplx(1,1,1,N),nx,ny,nz,iswitch,tswitch,itrig,
+     *                   trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                   num_dims,work,scratch,xt,myid,numprocs,locnx,locnz,
+     *                   comm,twoslice,subslice)
+      if( myid .eq. 0 ) then
+       write(6,*) ' v transformed to wavenumber domain: ', tswitch,iswitch,itrig
+      endif
+     
+      if( bc_flag .eq. 'zperiodic' ) then
+       tswitch='f'
+      elseif( bc_flag .eq. 'zslip' ) then
+       tswitch = 's'  
+      endif
+      
+      call transform3d (s1,s1_cplx(1,1,1,N),nx,ny,nz,iswitch,tswitch,itrig,
+     *                   trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                   num_dims,work,scratch,xt,myid,numprocs,locnx,locnz,
+     *                   comm,twoslice,subslice)
+      if( myid .eq. 0 ) then
+       write(6,*) ' s1 transformed to wavenumber domain: ', tswitch,iswitch,itrig
+      endif
+      
+      if( bc_flag .eq. 'zperiodic' ) then
+       tswitch='f'
+      elseif( bc_flag .eq. 'zslip' ) then
+       tswitch = 's'  
+      endif
+      
+      call transform3d (s2,s2_cplx(1,1,1,N),nx,ny,nz,iswitch,tswitch,itrig,
+     *                   trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                   num_dims,work,scratch,xt,myid,numprocs,locnx,locnz,
+     *                   comm,twoslice,subslice)
+      if( myid .eq. 0 ) then
+       write(6,*) ' s2 transformed to wavenumber domain: ', tswitch,iswitch,itrig
+      endif
+      
+C
+C     set tswitch to indicate type of z transform, and transform u & v & s1 
+C
+      if( bc_flag .eq. 'zperiodic' ) then
+       tswitch='f'
+      elseif( bc_flag .eq. 'zslip' ) then
+       tswitch = 's'   ! w=0 at top & bottom
+      endif
+      
+       call transform3d (w,w_cplx(1,1,1,N),nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,work,scratch,xt,myid,numprocs,locnx,locnz,
+     *                  comm,twoslice,subslice)
+
+      if( myid .eq. 0 ) then
+       write(6,*) ' w transformed to wavenumber domain: ', tswitch,iswitch,itrig
+      endif
+     
+      if( efactor .gt. 0 ) then
+       call add_noise(u_cplx,v_cplx,efactor,nx,ny,nz,num_dims,
+     *                wnx,wny,wnz,N,NM1,myid,numprocs,locnx,comm)
+      endif
+
+c
+c     Initialize forcing wavenumber array, to be called later in
+c
+      if( force_flag .eq. 'yesFourier' ) then      
+c        if( myid .eq. 0 ) then
+c         write(6,*) ''
+c         write(6,*) 'Initializing Fourier forcing  '
+c         write(6,*) ''
+c        endif
+        call initialize_user_fforcing (force_cplx,wnx,wny,wnz,f,g,rho_0,DGRAD,Rot,U0,
+     *                                    nx,ny,nyplanes,nz,locnx,Lx,Ly,Lz,
+     *                                    locnz,myid,numprocs,num_dims,ifax,ifay,ifaz,
+     *                                    wn,comm,twoslice,subslice,trigx,trigy,trigz,
+     *                                    work_P,scratch,bc_flag,work)
+      endif
+
+c
+c     initialize array pointers and time step method
+c
+      N=1
+      NM1=2
+      M=1
+      MM1=2
+      MM2=3
+      step_flag='euler'   ! startup method, no previous information known
+
+      call MPI_BARRIER(comm,ierr)
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/nonlin.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/nonlin.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/nonlin.f	(revision 6)
@@ -0,0 +1,183 @@
+	subroutine nonlin (scalars,u,v,w,pd,s1,s2,vortx,vorty,vortz,s2_u,s2_v,s2_w,
+     *                     Lx,Ly,Lz,U0,DGRAD,s1_scale,s2_scale,rho_0,ddz_s1,ddz_s2,
+     *                     Ri,Rot,beta,num_dims,nx,ny,locnz,myid,numprocs,comm,istep) ! beta pba June 2005
+
+C------------------------------------------------------------------------
+C
+C  nonlin - Compute u cross omega and add the appropriate rotation
+c           rotation and buoyancy terms.
+c           Also compute s1 times (u,v,w), u dot grad s1_bar
+C
+C
+C	INPUT:  u,v,w,pd,s1,s2:               physical space values at gridpoints
+c               vortx,vorty,vortz           i,j and k components of vorticity
+c               Ri,Rot                dimensionless parameters
+c               nx,ny,locnz                 dimension parameters for local data space
+c               num_dims                    2(xz) or 3(xyz) z positive up
+c               Lx,Ly,Lz                    dimensional domain sizes
+c               U0,DGRAD,s1_scale,s2_scale,rho_0       dimensional scaling values
+c
+C	OUTPUT:
+c       ddz_s1                                                    d/dz rho_bar
+c       s1*u, s1*v, s1*w                                          overwritten into the vorticity arrays
+c       (w*ddz)                                                   overwritten into the "s1" array
+
+c       s2*u, s2*v, s2*w                                          overwritten into the XXX arrays
+c       XXX                                                       overwritten into the "s2" array
+
+c       (T1 + Rot*v - u d/dx rho_bar - d/dx p_bar)                overwritten into the "u" array
+c       (T2 - Rot*u - v d/dy rho_bar - d/dy p_bar)                overwritten into the "v" array
+c       (T3 - Ri*pd)                                              overwritten into the "w" array
+C	where T is the cross product of velocity and vorticity 
+C       with components <T1,T2,T3>
+C
+C----------------------------------------------------------------------
+
+        implicit none
+        integer i,j,k,myid,numprocs,comm,kend,ierr,istep   ! beta effect pba June 2005
+	integer nx,ny,nz,locnz,num_dims,nyplanes
+c       Physical space decomposition: local portion in z direction
+	real u(nx+2,ny+1,locnz+1),v(nx+2,ny+1,locnz+1)
+	real w(nx+2,ny+1,locnz+1),s1(nx+2,ny+1,locnz+1)
+	real s2(nx+2,ny+1,locnz+1)
+	real pd(nx+2,ny+1,locnz+1)
+	real vortx(nx+2,ny+1,locnz+1),vorty(nx+2,ny+1,locnz+1)
+	real vortz(nx+2,ny+1,locnz+1)
+	real s2_u(nx+2,ny+1,locnz+1),s2_v(nx+2,ny+1,locnz+1)
+	real s2_w(nx+2,ny+1,locnz+1)
+	real ddz_s1(nx+2,ny+1,locnz+1)
+	real ddz_s2(nx+2,ny+1,locnz+1)
+	real Ri,Rot,Rot_tild,beta                    ! beta effect pba June 2005
+	real tmp1,tmp2,tmp3,x,y,z,dx,dy,dz
+        real Lx,Ly,Lz,U0,DGRAD,rho_0,s1_bar,ds1dx,ds1dy,ds1dz,g2s1b,dpdx,dpdy
+        real s1_scale,s2_scale,s2_bar,ds2dx,ds2dy,ds2dz,g2s2b,p_bar_x,p_bar_y
+        character*2 scalars
+c pba beta effect June 2005
+        integer NXMAX
+        parameter(NXMAX=2048)
+        real f_of_x(NXMAX),f_tild_of_x(NXMAX),window,x0,xscale
+        real ddy_vels(nx+2,ny+1,locnz+1,3),Vg(nx+2,locnz+1,3)
+        real Xs1_bar(nx+2,locnz+1,4), Xs2_bar(nx+2,locnz+1,4)
+
+#ifdef verbose
+        if(myid == 0) write(0,*) 'hello world from NONLIN'
+#endif
+
+c   set up beta plane functions w/ transition layer at left edge
+c        x0 = 0.95*Lx    !for transition layer at right edge
+c        window = -tanh( (x-x0)/(xscale) )   !for transition layer at right edge
+     
+        if( istep == 0 .and. myid==0 ) then
+         if( nx .gt. NXMAX ) then
+          print*, 'nonlin.f:  resize NMAX for large nx values '
+          stop
+         endif
+        endif
+        
+        dx=Lx/float(nx)        
+        x0 = 0.05*Lx    !for transition layer at left edge
+        xscale = Lx/50.
+        do i=1,nx
+         x=(i-1.)*dx   ! x in [m]         
+         window = -tanh(-(x-x0)/(xscale) )   !for transition layer at left edge
+         f_of_x(i) = Rot*( 1. + beta*(x/Lz - Lx/(2.*Lz))*window)
+         f_tild_of_x(i) = Rot_tild*(1. + beta*(x/Lz - Lx/(2.*Lz))*window)
+        enddo
+        
+        if( istep == 0 .and. myid==0 ) then
+         open(1,file='output/coriolis_values')
+          do i=1,nx
+           write(1,*) (i-1.)*dx, f_of_x(i)*U0/Lz, -tanh(-(x-x0)/(xscale) )
+          enddo
+         close(1)
+        endif
+
+        if( num_dims .eq. 2 ) then
+         nyplanes=1
+        elseif( num_dims .eq. 3 ) then
+         nyplanes=ny
+        endif
+
+        if( myid .eq. numprocs-1 ) then
+         kend = locnz+1
+        else
+         kend=locnz
+        endif
+
+        dx=Lx/float(nx)
+        dy=Ly/float(nyplanes)
+        dz=Lz/float(locnz*numprocs)
+
+        if( Ri .gt. 0 ) then
+         call equation_of_state(scalars, s1, s2, 
+     &                          s1_scale, s2_scale,
+     &                          nx, ny, locnz, rho_0, DGRAD,
+     &                          myid, numprocs, Lx, Ly, Lz, pd)
+        endif
+
+	do k = 1,kend
+         z=(myid*locnz + k - 1.)*dz/Lz   ! dimensionless
+         do j = 1,nyplanes
+          y=(j-1.)*dy/Lz
+          do i = 1,nx
+           x=(i-1.)*dx/Lz
+
+C  Calculate local s1_bar, its gradient etc.
+           call s1_bar_func(x,y,z,s1_bar,ds1dx,ds1dy,ds1dz,g2s1b,Lz,s1_scale)
+
+C  Compute the cross product of velocity and vorticity and add
+C  the rotational, buoyancy and p_bar gradient terms. Store in tmp variables.
+
+c	XXX	 dpdx and dpdy are not yet defined at this point of the code!
+           tmp1 = ( v(i,j,k)*vortz(i,j,k) - w(i,j,k)*vorty(i,j,k) )
+     *                + f_of_x(i)*v(i,j,k) ! - dpdx                     ! grad p_bar for rho_bar(x,y,z)
+           tmp2 = ( w(i,j,k)*vortx(i,j,k) - u(i,j,k)*vortz(i,j,k) )
+     *                -  f_of_x(i)*u(i,j,k) + f_tild_of_x(i)*w(i,j,k) ! - dpdy         ! grad p_bar for rho_bar(x,y,z)
+           tmp3 = ( u(i,j,k)*vorty(i,j,k) - v(i,j,k)*vortx(i,j,k) )
+     *                - Ri*pd(i,j,k)  - f_tild_of_x(i)*v(i,j,k)                        ! d/dz p_bar removed with (g/rho_0) rho_bar
+
+C  Compute the products of density and velocity and storing the results
+C  where the vorticity terms used to be
+
+           vortx(i,j,k) = u(i,j,k)*s1(i,j,k)
+           vorty(i,j,k) = v(i,j,k)*s1(i,j,k)
+           vortz(i,j,k) = w(i,j,k)*s1(i,j,k)
+
+C  Overwrite s1 array with -u dot grad s1_bar 
+
+           s1(i,j,k) = -( u(i,j,k)*ds1dx + v(i,j,k)*ds1dy + w(i,j,k)*ds1dz )
+
+c  Save d/dz s1_bar
+    
+          ddz_s1(i,j,k) = ds1dz
+
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+c begin scalar (2) calculations
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+
+C  Calculate local s2_bar, its gradient and x,y derivs of p_bar
+           call s2_bar_func(x,y,z,s2_bar,ds2dx,ds2dy,ds2dz,g2s2b,Lz,s2_scale)
+
+           s2_u(i,j,k) = u(i,j,k) * s2(i,j,k)
+           s2_v(i,j,k) = v(i,j,k) * s2(i,j,k)
+           s2_w(i,j,k) = w(i,j,k) * s2(i,j,k)
+
+           s2(i,j,k) = -( u(i,j,k)*ds2dx + v(i,j,k)*ds2dy +w(i,j,k)*ds2dz )
+
+           ddz_s2(i,j,k) = ds2dz
+
+C  Now we can safely overwrite the u, v, w arrays with the cross product
+C  of velocity and vorticity + buoyancy + rotation 
+
+           u(i,j,k) = tmp1
+           v(i,j,k) = tmp2
+           w(i,j,k) = tmp3
+
+
+          enddo
+         enddo
+        enddo
+
+        call MPI_BARRIER(comm,ierr)
+        return
+        end
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/output_control
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/output_control	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/output_control	(revision 6)
@@ -0,0 +1,33 @@
+# usage:
+# (x, y, z), t_write_all, filename_root
+#
+# 	(x, y, z) -> the data you want to see
+#       You can specify all the data in the range of the problem 
+#       using '*' as a wildcard. You can specify a range using ':'.
+#       For example, (*,*,10) represents the xy plane at z=10.
+#       (8:16,*,*) represents the line of x ranging between 8
+#       and 16 inclusively. You can also combine these, such as:
+#       (16:*,*) to represent the data from 16 to the end in the x
+#       direction, and all of the data in the y and z directions.
+#
+# 	t_write_all -> how often you want to see it (in secs)
+#       This can be an integer representing the number of seconds,
+#       or an integer*dt representing the number of timesteps.
+#
+# 	filename_root -> root of the filename you want the output sent to.
+#       For example, cfd3D will be used to generate outputfiles named
+#       "cfd3D_XXXXXX" where XXXXXX is an integer representing the timestep
+#       of the current output. All 3D output will be put in a directory
+#       called output/3D/, so its a good idea to give every output line below
+#       a unique filename root.
+
+# The entire cube of data, reported every 5 timesteps.
+# (*, *, *), 5*dt , cfd_3D
+
+# Samples:
+
+# The xy plane at z=10, output every 50 timesteps. 
+(*,1,*),10*dt, cfd_2D
+
+# The line of data for 8<=x<=16 within the planes y=1 and z=10,
+# output every 10 timesteps.
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/problem_params.h
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/problem_params.h	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/problem_params.h	(revision 6)
@@ -0,0 +1,120 @@
+C*****************************************************************************
+c   PARAMETER FILE FOR PARALLEL SPECTRAL MODEL.  *****************************
+c*****************************************************************************
+      pi=4.*atan(1.)
+
+c     Initial conditions: either name a file or specify none
+c xlv     netcdf_file='/home/alpha0/kraig/NSF_IWS/input/ics/GM_cdf_2145.000'
+c      netcdf_file='/workdir/rech/dyc/rdyc711/cfd_2D_000500'
+      netcdf_file='none'    ! none means ICS defined in initialize.f
+
+c     Flag specifying whether flow is forced via user_defined_forcing.f
+      force_flag='yes'
+
+c*****************************************************************************
+c    Type of z boundary conditions.
+c*****************************************************************************
+      bc_flag = 'zslip'              ! 'zperiodic'  or 'zslip' allowable
+                                     !  always periodic in x,y
+c=============================================================================
+c     Declare how the two scalars relate to density
+c     R (rho)  T (temp) S (salinity)   P (passive)
+c     Legal Settings: 'TS' 'TP' 'SP' 'RP'  'PP'
+c=============================================================================
+      scalars = 'TS'        ! scalar1=rho'  scalar2=passive
+      s1_scale= 10.0    
+      s2_scale= 30.0 
+
+c*****************************************************************************
+c    Size of computational domain.
+c    x in [0,Lx)   , y in [0,Ly)   , z in [0,Lz]  zslip
+c                                         [0,Lz]  zperiodic
+c*****************************************************************************
+      Lx = 2000000.              ! x domain size [m]
+      Ly = Lx/2.                ! y domain size [m] (unused for 2d see below)
+      Lz = 4000.                ! z domain size [m]
+      dz = Lz/float(nz)         ! vertical grid spacing [m]  (*$*)
+c*****************************************************************************
+c*****************************************************************************
+
+
+c*****************************************************************************
+c     Physical parameters
+c*****************************************************************************
+      g=9.81                          ! gravity [m/s2]
+c xlv      xlat=pi/4                       ! latitude in radians
+      xlat=41.5*pi/180
+      xOmega=2.*pi/(24.*3600.)        ! earth rotation frequency [1/s]
+      f=2*xOmega*sin(xlat)            ! Coriolis parameter [1/s]
+      f_tild=2*xOmega*cos(xlat)
+c     beta=(1/R)2(Omega)cos(lat); R~6400km   ! beta effect pba June 2005
+c xlv      beta=(1./(6400*1.e3))*2*xOmega*cos(xlat)  ! [1/ms]
+      beta=0.
+
+c*****************************************************************************
+c*****************************************************************************
+
+
+
+c*****************************************************************************
+c     Fluid properties
+c*****************************************************************************
+      rho_0=1000.                     ! characteristic density [kg/m3]
+      nu = 1.e-6                      ! viscosity [m2/s]  (3),(4)
+      kappa_1 = nu/1.                 ! diffusivity for scalar 1 [m2/s]
+      kappa_2 = nu/1.                 ! diffusivity for scalar 2 [m2/s]
+c*****************************************************************************
+c     dissipation scheme
+c     for DNS, i.e. nu grad^2 u, kappa grad^2 rho
+c     choose 'isotropic' and p=2, higher orders of p
+c     and anisotropic are undocumented currently
+      diss_flag='isotropic'           ! isotropic or anisotropic
+      p=2.                            ! order of (hyper)viscosity operator
+      T_diss=3000                     ! [s] decay time scale at maximim wavenumber 
+                                      ! ignored if diss_flag=isotropic and p=2 i.e. for DNS
+c*****************************************************************************
+
+c*****************************************************************************
+c     Additional user specified scales required to nondimensionalize 
+c     the equations of motion.
+c*****************************************************************************
+      DGRAD=3.e-4                     ! char. scale of dens gradient [kg/m4]
+c xlv      s1_scale= 1.0                   ! char. scale of scalar 1 e.g. would be deg C if s1->Temp.
+c xlv      s2_scale= 1.                    ! char. scale of scalar 2 e.g. would be psu   if s2->Salinity
+      U0=0.01                         ! char. velocity scale [m/s] 
+      bfreq = sqrt((g/rho_0)*DGRAD)   ! char. buoyancy frequency [1/s]  (*$*)
+c*****************************************************************************
+c*****************************************************************************
+
+c*****************************************************************************
+c    Time step and execution control parameters
+c*****************************************************************************
+      dt=600               ! integration time step  [s]  
+      t_start=0*dt              ! starting time [s]
+      t_end=100*dt           ! ending time [s]  (test wave per = 4.89 hrs --> 3 pers.)    
+      vort_flag='no'           ! write out vorticity fields as well as velocity/density
+      t_stat=20*dt             ! time increment for calls to energetics [s]  
+c*****************************************************************************
+c*****************************************************************************
+
+c******************************************************************************
+c         Lagrangian "float" parameters
+c******************************************************************************
+      t_floats_on =t_start     ! float insertion time
+      z_close=0.5*dz/Lz        ! min. distance to upper/lower bdries
+                               ! that floats can attain [d'less]=[1]
+      z_offset=-0.5*dz/Lz      ! up offset for second float dens. measurement
+      delta_w=0.0/U0           ! float velocity due to residual buoyancy [1]
+c******************************************************************************
+c******************************************************************************
+
+c******************************************************************************
+c     Perturbed, "noisy" ICS parameter
+c******************************************************************************
+      efactor=0*1.e-4
+c     if efactor is nonzero, the (linear) vortical mode field is perturbed
+c     with a spectrum of "noise" (decays linearly with horiz. wavenumber) such
+c     that the total kinetic energy of the noise is a specified fraction of
+c     the horizontal kinetic energy of the deterministically specified ICs
+c     efactor=0.01 --> noise field has 1% of the HKE in the deterministic fields
+c******************************************************************************
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/runtime_initialization.h
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/runtime_initialization.h	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/runtime_initialization.h	(revision 6)
@@ -0,0 +1,70 @@
+c***************************************************************
+c     BEGIN RUNTIME INITIALIZATION
+c***************************************************************
+
+	if(ny .eq. 0) then
+		num_dims = 2
+	else
+		num_dims = 3
+	endif
+
+      if( myid .eq. 0 ) then
+       write(6,*) ' '
+       write(6,*) ' '
+       write(6,*)'problem_params.h executed via include statement: flow_solve.x'
+      endif
+ 
+      t_write_selective=-999999*dt    ! not implemented yet
+      if(num_dims .eq. 2) then
+       Ly=1.0                         ! 2d calculation, per unit length in y [m]
+       nyplanes=1                     ! parameter ny is zero for 2d xz calcs
+      else
+       nyplanes=ny
+      endif
+
+c     Create specialized data structure for MPI data swaps
+      call create_MPI_data_type(nx,ny,nz,locnx,locnz,twoslice,subslice,myid,comm)
+      call MPI_BARRIER(comm,ierr)
+
+c     Prescribe initial conditions and nondimensionalize variables
+      istart_floats=(t_floats_on-t_start)/dt    ! step to begin float tracking
+      call initialize(u,v,w,s1,s2,ambient_density,u_cplx,v_cplx,w_cplx,s1_cplx,s2_cplx,
+     *                nx,ny,nz,num_dims,efactor,
+     *                Lx,Ly,Lz,dx,dy,dz,U0,DGRAD,s1_scale,s2_scale,rho_0,f,f_tild,g,kappa_1,kappa_2,nu,
+     *                bc_flag,ifax,ifay,ifaz,trigx,trigy,trigz,wn,
+     *                wnx,wny,wnz,amp,p,T_diss,diss_flag,N,NM1,M,MM1,MM2,step_flag,
+     *                Rot,Rot_tild,Ri,Re,Pr_1,Pr_2,istart,iend,i_all,i_selective,i_stat,
+     *                dt,t_start,t_end,t_write_selective,
+     *                t_stat,xt,work(1,1,1,1),work_cplx(1,1,1,8),myid,
+     *                numprocs,locnx,locnz,comm,twoslice,subslice,work(1,1,1,8),
+     *                netcdf_file,nyplanes,force_cplx,force_flag,
+     *                work(1,1,1,2),scalars,beta)    ! beta effect added June 2005 pba
+
+
+c     Check accuracy of spectral interpolation:
+c     (a) reproduce initial u(z) profile at x=y=0
+c     i=1  
+c     j=1
+c     if( myid .eq. 0 ) open(1,file='output/interp_check')
+c     do k=1,nz+1
+
+c      dimensionless positions i.e. on gridpoints
+c      x0=(i-1.)*dx/Lz
+c      y0=(j-1.)*dy/Lz
+c      z0=(k-1.)*dz/Lz
+
+c      interpolate to find u on grid points
+c      fcs_flag='c'
+c      call ds_interp(x0,y0,z0,u_cplx(1,1,1,N),wnx,wny,wnz,locnx,ny,nz,
+c    *                fcs_flag,interp_val,myid,comm)
+c      if( myid .eq. 0 ) write(1,*) x0*Lz,y0*Lz,z0*Lz,interp_val*U0
+
+c     enddo
+
+      if( myid .eq. 0 ) write(0,*) 'runtime initialization completed'
+      if( myid .eq. 0 ) write(6,*) 'runtime initialization completed'
+      if( myid .eq. 0 ) close(1)
+
+c***************************************************************
+c     END RUNTIME INITIALIZATION
+c***************************************************************
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/runtime_variables.h
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/runtime_variables.h	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/runtime_variables.h	(revision 6)
@@ -0,0 +1,14 @@
+c     Resolution and decomposition control
+      integer numprocs, nx, ny, nz
+
+      parameter(numprocs=1)
+      parameter(nx=256)
+      parameter(ny=0)              ! set y=0 for 2d problems in xz plane
+      parameter(nz=256)  
+
+
+c     Lagrangian float parameters
+      integer nfloats,floats
+      character*80 float_switch
+      parameter(float_switch='off')
+      parameter(nfloats=1)
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/s1_bar_func.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/s1_bar_func.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/s1_bar_func.f	(revision 6)
@@ -0,0 +1,67 @@
+      subroutine s1_bar_func(xprime,yprime,zprime,s1_bar,
+     *                        s1_bar_x,s1_bar_y,s1_bar_z,g2s1b,
+     *                        Lz,s1_scale)
+c
+c     *****input arguments xprime,yprime,zprime are DIMENSIONLESS as are all returned values
+c     (xprime,yprime,zprime):     d'less spatial position
+c     Lz:                         vertical size of computational domain [m]
+c     s1_scale:                   characteristic range of s1 values, used to scale s1
+c                                 units are dimensional, e.g. deg C for s1-->Temp.
+      
+c     *****output variables, these need to be specified in this routine
+c             s1_bar, s1_bar_x, s1_bar_y, s1_bar_z, g2s1b
+c             scalar concentration, and spatial gradients, g2s1b=grad2(s1_bar)   [dimensional units]
+
+      implicit none
+      real xprime,yprime,zprime
+      real Lz,s1_scale
+      real s1_bar,s1_bar_x,s1_bar_y,s1_bar_z,g2s1b
+
+c     local variables: you may need some intermediate variables,
+c                      these need to be explicitly declared here
+      real x,y,z,s1_min,s1_max,dTdz
+
+c     it may be convenient to know the dimensional spatial location (x,y,z) in [m], so we compute it
+      x = xprime*Lz       ! use dimensional value to evaluate formulae
+      y = yprime*Lz       ! use dimensional value to evaluate formulae
+      z = zprime*Lz       ! use dimensional value to evaluate formulae
+
+
+c****    USER CUSTOMIZED CODE SEGMENT STARTS  HERE ******************************
+
+c     I'm using "scalar 1" s_1 for temperature in this example
+
+c     A separate calculation based on equation of state evaluations
+c     at slightly offset locations in z, in the TS neighborhood
+c     of (S,T)=(35,15) gave me a dTdz value corresponding to a target N of 1 cph,
+c     assuming that dS/dz=0.
+
+c     these user defined quantities are expressed in DIMENSIONAL units 
+      s1_min = 15.0     ! we're working here w/ s1-->Temp. in deg C
+c      dTdz=1.4133829e-3 ! should produce N=1cph for dS/dz=0
+c      dTdz=2.1e-3       !                N=2.10-3 rad/s
+
+      s1_min=5.
+      s1_max=22.
+      dTdz= ( s1_max - s1_min ) / Lz
+
+      s1_bar = s1_min + dTdz*z   ! a stable, linear temp. profile
+      s1_bar_x = 0.0
+      s1_bar_y = 0.0
+      s1_bar_z = dTdz
+      g2s1b = 0.0
+
+c****    USER DEFINED CODE SEGMENT ENDS HERE ********************************
+
+
+c***  LEAVE THIS SECTION AS IS, SCALING MUST BE CONSISTENT
+c***  WITH THE REST OF THE ALGORITHM
+      s1_bar=s1_bar/(s1_scale)
+      s1_bar_x = s1_bar_x/(s1_scale/Lz)
+      s1_bar_y = s1_bar_y/(s1_scale/Lz)
+      s1_bar_z = s1_bar_z/(s1_scale/Lz)
+      g2s1b = g2s1b/(s1_scale/Lz**2)
+c*********************************************************
+
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/s2_bar_func.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/s2_bar_func.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/s2_bar_func.f	(revision 6)
@@ -0,0 +1,62 @@
+      subroutine s2_bar_func(xprime,yprime,zprime,s2_bar,
+     *                        s2_bar_x,s2_bar_y,s2_bar_z,g2s2b,
+     *                        Lz,s2_scale)
+c
+c     *****input arguments xprime,yprime,zprime are DIMENSIONLESS as are all returned values
+c     (xprime,yprime,zprime):     d'less spatial position
+c     Lz:                         vertical size of computational domain [m]
+c     s2_scale:                   characteristic range of s2 values, used to scale s2
+c                                 units are dimensional, e.g. psu for s2-->Salinity
+      
+c     *****output variables, these need to be specified in this routine
+c             s2_bar, s2_bar_x, s2_bar_y, s2_bar_z, g2s2b
+c             scalar concentration, and spatial gradients, g2s2b=grad2(s2_bar)   [dimensional units]
+
+      implicit none
+      real xprime,yprime,zprime
+      real Lz,s2_scale
+      real s2_bar,s2_bar_x,s2_bar_y,s2_bar_z,g2s2b
+
+c     local variables: you may need some intermediate variables,
+c                      these need to be explicitly declared here
+      real x,y,z,s2_max,s2_min,dSdz
+
+c     it may be convenient to know the dimensional spatial location (x,y,z) in [m], so we compute it
+      x = xprime*Lz       ! use dimensional value to evaluate formulae
+      y = yprime*Lz       ! use dimensional value to evaluate formulae
+      z = zprime*Lz       ! use dimensional value to evaluate formulae
+
+
+c****    USER CUSTOMIZED CODE SEGMENT STARTS  HERE ******************************
+
+c     I'm using s_2 for salinity in this example, though I'm specifying
+c     a constant salinity fluid.
+
+      s2_max = 36.     ! we're working here w/ s2-->Salinity in psu
+      s2_min = 34.
+
+      dSdz= ( s2_max - s2_min ) / Lz
+
+      s2_bar = s2_min + dSdz * z
+      s2_bar_x = 0.0
+      s2_bar_y = 0.0
+      s2_bar_z = dSdz
+      g2s2b = 0.0
+
+c****    USER DEFINED ODE SEGMENT ENDS HERE ********************************
+
+
+
+
+c     
+c***  LEAVE THIS SECTION AS IS, SCALING MUST BE CONSISTENT
+c***  WITH THE REST OF THE ALGORITHM
+
+      s2_bar=s2_bar/(s2_scale)
+      s2_bar_x = s2_bar_x/(s2_scale/Lz)
+      s2_bar_y = s2_bar_y/(s2_scale/Lz)
+      s2_bar_z = s2_bar_z/(s2_scale/Lz)
+      g2s2b = g2s2b/(s2_scale/Lz**2)
+
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/user_defined_forcing.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/user_defined_forcing.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/user_defined_forcing.f	(revision 6)
@@ -0,0 +1,88 @@
+      subroutine user_defined_forcing(x,y,z,t,F1,F2,F3,F4,F5,Lx,Ly,Lz,f,g,rho_0)
+
+c********************************************************************************************
+c     User defined subroutine to add time/space dependent forcing to the 
+c     equations of motion. Inputs and outputs for this routine are all
+c     DIMENSIONAL.
+c
+
+c     inputs:
+c            x,y,z       spatial location at which forcing is to be defined, [m]
+c                t       time at which forcing is to be defined              [s]
+c            f,g,rho_0   Coriolis parameter, gravity, reference density [1/s,m/s2,kg/m3]
+
+c     outputs:
+c            F1-3        acceleration at x,y,z & t in x,y,z directions       [m/s2]
+c            F4          rhs of perturbation scalar (s1) eqn                 [(deg C)/s]
+c            F5          rhs of perturbation scalar (s2) eqn                 [(psu)/s]
+c                        careful with F4,F5 you must take into account what you are
+c                        using for s1_bar & s2_bar when you define this term
+c********************************************************************************************
+      implicit none
+      real x,y,z,t,F1,F2,F3,F4,F5
+      real Lx,Ly,Lz,f,g,rho_0
+      real u,v,w,s1,s2
+
+
+c     declare local variables here:
+cpba
+c**************************************************************************
+c**user declares any additional local variables needed here
+      real rho_0,g,ambient_density_gradient,f,pi,arg,c(2,2)
+      real A_ics,k_ics,l_ics,m_ics,N2_ics,omega2,omega_ics
+      real dTdz,dSdz
+      real xfreq
+      real r,sigma1,sigma2,FF,GG
+
+c**************************************************************************
+cpba
+c     These next values are used locally for setting up this example
+c     but are not passed in through the argument list. The IW snapshot,
+c     however, only makes sense however when these values are consistent with
+c     what I'm specifying elsewhere. Thus, there is some redundancy
+c     and also an opportunity to set things up "wrong".
+       pi=4.*atan(1.)
+       rho_0=1000.                                  ! [kg/m3]
+       g=9.81                                       ! [m/s2]
+       f=2.*(2.*pi/(24.*3600.))*sin(pi/4.)          ! [1/s] 45 deg latitude
+       dTdz = 1.4133829e-3                          ! [deg C/m]
+c       dTdz=0.
+       dSdz = 0.0                                   ! [psu/m]
+
+c     Initial conditions are a snapshot of an internal wave in uniform stratification.
+c     The local variable "ambient_density_stratification" is set to be consistent with
+c     the specifications in s1_bar_func.f, s2_bar_func.f via the equation of state.
+       ambient_density_gradient = -3.105172e-4     ! [kg/m4], ---> corresponds to 1 cph
+                                                   ! and to the Temp gradient specified in s1_bar_func.f
+       N2_ics=(-g/rho_0)*ambient_density_gradient  ! [1/s^2]
+
+c      parameter of the body force
+       A_ics=100.                                     ! displacement [m]
+       xfreq=0.999
+
+       arg= xfreq*f*t  ! generally -omega_ics*t but set t=0,
+
+c      enveloppe gaussienne : on divise par 2 / run 1
+
+       sigma1=20000.
+       sigma2=100.
+       
+       FF=exp((-((x-Lx/2)**2))/(sigma1**2))
+       GG=exp((-((Lz/2-z)**2))/(sigma2**2))
+
+       s1=0.
+       s2=0.
+       w = 0.
+       u = -A_ics*xfreq*xfreq*f*f*sin(arg)*FF*GG          ! du/dt
+       v = 0.
+
+
+c     Define rhs values for evolution equations.
+      F1=-u
+      F2=-v
+      F3=-w
+      F4=-s1
+      F5=-s2
+
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/user_defined_ics.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/user_defined_ics.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/user_defined_ics.f	(revision 6)
@@ -0,0 +1,98 @@
+      subroutine user_defined_ics(x,y,z,Lx,Ly,Lz,u,v,w,s1,s2)
+c
+c     inputs 
+c              x,y,z     positions in spatial domain           [m]
+c              Lx,Ly,Lz  domain lengths in x,y,z               [m]
+c     outputs
+c              u,v,w     speeds in x,y,z directions at (x,y,z) [m/s] 
+c              s1        perturbation temperature              [deg C]
+c              s2        perturbation salinity                 [psu]
+c     note:
+c              s1 and s2 are defined relative to the ambient profiles
+c              s1_bar and s2_bar defined in s1_bar_func.f & s2_bar_func.f
+c              There are corresponding quantities rho_bar and perturbation
+c              density pd that are computed via equation_of_state.f and
+c              used internally in the algorithm. They need not be set here.
+
+      implicit none
+      real x,y,z,Lx,Ly,Lz,u,v,w,s1,s2
+c**************************************************************************
+c**user declares any additional local variables needed here
+      real rho_0,g,ambient_density_gradient,f,pi,arg,c(2,2)
+      real A_ics,k_ics,l_ics,m_ics,N2_ics,omega2,omega_ics
+      real dTdz,dSdz
+      real r,sigma1,sigma2,FF,GG,arg2
+c**************************************************************************
+      pi=4.*atan(1.)
+
+c     These next values are used locally for setting up this example
+c     but are not passed in through the argument list. The IW snapshot,
+c     however, only makes sense however when these values are consistent with
+c     what I'm specifying elsewhere. Thus, there is some redundancy
+c     and also an opportunity to set things up "wrong".
+       rho_0=1000.                                  ! [kg/m3]
+       g=9.81                                       ! [m/s2]
+       f=2.*(2.*pi/(24.*3600.))*sin(pi/4.)          ! [1/s] 45 deg latitude
+       dTdz = 1.4133829e-3                          ! [deg C/m]
+       dSdz = 0.0                                   ! [psu/m]
+
+c     Initial conditions are a snapshot of an internal wave in uniform stratification.
+c     The local variable "ambient_density_stratification" is set to be consistent with
+c     the specifications in s1_bar_func.f, s2_bar_func.f via the equation of state.
+       ambient_density_gradient = -3.105172e-4     ! [kg/m4], ---> corresponds to 1 cph
+                                                   ! and to the Temp gradient specified in s1_bar_func.f
+       N2_ics=(-g/rho_0)*ambient_density_gradient  ! [1/s^2]
+
+c      enveloppe gaussienne : on divise par 2 / run 1
+
+       sigma1=8000.
+       sigma2=200.
+       
+       FF=exp((-((x-Lx/2)**2))/(sigma1**2))
+       GG=exp((-((Lz-z)**2))/(sigma2**2))
+
+c      Internal wave parameters
+
+       A_ics=1.                                     ! displacement [m]
+       k_ics=((10)*(2.*pi/Lx))*2.                       ! [1/m]
+       l_ics=((0)*(2.*pi/Ly))                       ! [1/m]
+       m_ics=((12)*(pi/Lz))                          ! [1/m]
+
+c      internal wave dispersion relation
+       omega2 = ( ((f)**2)*m_ics**2 + N2_ics*(k_ics**2+l_ics**2) )/
+     *          ( k_ics**2 + l_ics**2 + m_ics**2 )
+       omega_ics=sqrt(omega2)                       ! [1/s]
+c      write(6,*) ' TEST WAVE FREQUENCY (1/s) :  ',omega_ics
+c      write(6,*) ' TEST WAVE PERIOD    (min) : ', (2*pi/omega_ics)/60.
+
+c      constants in front of u & v expressions  [m/s]
+
+       c(1,1)=A_ics*k_ics*m_ics*omega_ics/(k_ics**2+l_ics**2)
+       c(1,2)=A_ics*l_ics*m_ics*f/(k_ics**2+l_ics**2)
+       c(2,1)=A_ics*l_ics*m_ics*omega_ics/(k_ics**2+l_ics**2)
+       c(2,2)=A_ics*k_ics*m_ics*f/(k_ics**2+l_ics**2)
+
+
+       arg=l_ics*y+k_ics*x ! generally -omega_ics*t but set t=0,
+
+       arg2=-m_ics*z
+
+       s1=(-A_ics*dTdz*sin(m_ics*z)*cos(arg)-A_ics*dTdz*sin(k_ics*x)*cos(arg2))*FF*GG
+       s2=(-A_ics*dSdz*sin(m_ics*z)*cos(arg))-A_ics*dSdz*sin(k_ics*x)*cos(arg2)*FF*GG
+       w = (A_ics*omega_ics*sin(m_ics*z)*sin(arg)+A_ics*omega_ics*cos(k_ics*x)*cos(arg2))*FF*GG
+       u = (c(1,1)*cos(m_ics*z)*cos(arg)-c(1,2)*cos(m_ics*z)*sin(arg)+c(1,1)*cos(k_ics*x)*cos(arg2)-c(1,2)*cos(k_ics*x)*sin(arg2))*FF*GG
+       v = (c(2,1)*cos(m_ics*z)*cos(arg)+c(2,2)*cos(m_ics*z)*sin(arg)+c(2,1)*cos(k_ics*x)*cos(arg2)+c(2,2)*cos(k_ics*x)*sin(arg2))*FF*GG
+
+       s1=0.
+       s2=0.
+       w=0.
+       v=0.
+       u=0.
+
+      return
+      end
+
+c  programming note
+c      earlier versions used perturbation density alone, not temp. and salinity
+c      We had pd =-A_ics*ambient_density_gradient*sin(m_ics*z)*cos(arg) previously
+c      but also used a different sign convention for "ambient_density_gradient" in setting ics.
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/variable_declarations.h
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/variable_declarations.h	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/PLAN_FNT_SUBI/variable_declarations.h	(revision 6)
@@ -0,0 +1,95 @@
+c===============================================================
+c     ARRAY ALLOCATION AND VARIABLE DECLARATIONS
+c===============================================================
+
+#include "mpif.h"
+      integer locnx,locnz,nwork
+      parameter(locnz=nz/numprocs,locnx=(nx/2)/numprocs)
+      parameter(nwork=(nx+2)*(ny+1)*(locnz+1))   
+
+c     Physical space dependent variables: time t_n
+      real u(nx+2,ny+1,locnz+1),v(nx+2,ny+1,locnz+1)
+      real w(nx+2,ny+1,locnz+1),pd(nx+2,ny+1,locnz+1)
+      real s1(nx+2,ny+1,locnz+1),s2(nx+2,ny+1,locnz+1)
+      real ambient_density(nx+2,ny+1,locnz+1)
+ 
+c     Wavenumber space dependent variables: times t_n, t_n-1
+      complex u_cplx(locnx,ny+1,nz+1,2),v_cplx(locnx,ny+1,nz+1,2)
+      complex w_cplx(locnx,ny+1,nz+1,2),s1_cplx(locnx,ny+1,nz+1,2)
+      complex s2_cplx(locnx,ny+1,nz+1,2)
+ 
+c     3 copies of transfer terms: t_n, t_n-1, t_n-2
+      complex Tr1(locnx,ny+1,nz+1,3),Tr2(locnx,ny+1,nz+1,3)
+      complex Tr3(locnx,ny+1,nz+1,3),Tr4(locnx,ny+1,nz+1,3)
+      complex Tr5(locnx,ny+1,nz+1,3)
+ 
+c     Fourier amplitudes of forcing waves (if force_flag=yesFourier)
+      complex force_cplx(locnx,ny+1,nz+1)
+
+c     Scratch arrays for temporary storage
+      real work(nx+2,ny+1,locnz+1,14)
+      complex work_cplx(locnx,ny+1,nz+1,14)
+      real scratch(nwork)
+      real sponge(nx+2,ny+1,locnz+1,5)    ! <--------  EXTRA FOR SPONGE LAYERS
+
+c     Wavenumber arrays and integrating factors
+      real wnx(locnx),wny(ny+1),wnz(nz+1)
+      real amp(locnx,ny+1,nz+1,3)
+ 
+c     Trigonometric and FFT related auxilliary arrays/variables 
+      real trigx(3*(nx+2)/2+1),trigy(2*(ny+1)),trigz(2*nz)
+      complex wn(nz/4+1),xt(nx+2, nz/2+1)
+      integer ifax(13),ifay(13),ifaz(13),itrig
+      character tswitch
+
+c     Storage for float variables    
+c     1-3: x,y,z  4: T_float  5: rho_lagrangian  6: rho_float
+      integer nsensors,nfloatparameters,num_dims
+      parameter(nsensors=7)
+      parameter(nfloatparameters=4)
+      real float_variables(6,nfloats)
+ 
+c     Data from float sensors
+      real sensor_data(nsensors,nfloats)
+ 
+c     Parameters describing float properties
+      real float_parameters(nfloatparameters,nfloats)
+      real z_close,z_offset,delta_w
+ 
+c     Work space for RK4 method
+      real k_rk4(5,nfloats,4)  ! 5 variables governed by odes, 4th order
+ 
+c     Dimensionless parameters appearing in scaled eqns of motion
+      real Rot,Rot_tild,Ri,Re,Pr_1,Pr_2
+
+c     Misc. real-valued scalars
+      real Lx,Ly,Lz,dx,dy,dz,U0,DGRAD,s1_scale,s2_scale,rho_0,f,f_tild,g,kappa_1,kappa_2,nu,kmax
+      real pi,xlat,xOmega,bfreq,dt,t_start,t_end
+      real t_write_selective,t_stat,t_floats_on
+      real time,time_scale,delta_u,delta_rho,z_0,h_0,k_0,a,b,c
+      real x0,y0,z0,interp_val,efactor,T_diss
+
+c     Misc. integer-valued scalars
+      integer i,j,k,istep,nyplanes,istart_floats,N,NM1,M,MM1,MM2
+      integer istart,iend,i_all,i_selective,i_stat,tmp,j_float_time
+      integer subslice,twoslice,comm,status,myid,iproc,nprocs,ierr,p,iswitch
+
+c     Character variables
+      character*80 bc_flag,step_flag,prelim_flag,fcs_flag
+      character*80 diss_flag,pressure_flag,force_flag
+      character*3  vort_flag
+      character*32 rootname 
+      character*80 netcdf_file
+      character*2 scalars       ! TS, TP, RP, R0, PP
+
+      integer start3D(3),count3D(3)
+
+c     beta effect pba june 2005
+      real beta,f_tild
+
+      pi=4.*atan(1.)
+
+
+c=================================================================
+c		END OF VARIABLE DECLARATIONS
+c=================================================================
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/README
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/README	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/README	(revision 6)
@@ -0,0 +1,6 @@
+
+
+plan beta
+lecture conditions initiales POMME (dependance en z uniquement)
+interpolation sur la grille du modele
+observation de l'inclinaison des rayons avec des profils de [T,S] realistes
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/equation_of_state.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/equation_of_state.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/equation_of_state.f	(revision 6)
@@ -0,0 +1,207 @@
+        subroutine equation_of_state(
+     *              scalars,s1,s2,s1_scale, s2_scale,
+     *              nx, ny, locnz, rho_0, DGRAD,
+     *              myid, numprocs, Lx, Ly, Lz, pd,Xs1_bar,Xs2_bar)
+
+!     Routine to calculate d'less pd from values of d'less s1 and s2
+!     and their reference profiles s1_bar(x,z) and s2_bar(x,z)
+!     The "perturbation" density is defined relative to the reference
+!     profile rho_bar(x,z). 
+!======================================================================
+!     scalars='TS'
+!     EOS from MILLERO et.al. (1980) DEEP-SEA RES.
+!     The scalar s1=temparature in deg C and 
+!     the scalar s2 is salinity in psu (i.e. ~ 36)
+
+      implicit none
+      character*2 scalars
+      integer nx, ny, locnz, myid, numprocs, nyplanes
+      real Lx, Ly, Lz
+      real s1(nx+2,ny+1,locnz+1),s2(nx+2,ny+1,locnz+1),pd(nx+2,ny+1,locnz+1)
+      real s1_scale, s2_scale, rho_0, DGRAD
+      real Xs1_bar(nx+2,locnz+1,4), Xs2_bar(nx+2,locnz+1,4)
+
+! local variables
+!     S,T,P all DOUBLE precision arguments of function rho:  P in MPa, T in deg C, S in conc units
+      double precision Temp,Salinity
+      double precision P_Mpa,density
+      double precision rho_bar,total_density
+      real z,depth,s1_bar,s2_bar,dx,dy,dz
+      real junk,xprime,yprime,zprime,xx,yy
+      integer i, j, k, kend
+
+      if(ny .eq. 0) then
+        nyplanes = 1
+      else
+        nyplanes = ny
+      endif
+
+      P_Mpa = 0.0   !   compute potential density, not in situ density
+
+      if( scalars .eq. 'TS' ) then
+       xx=1.0    ! use this to keep  Salinity
+       yy=1.0    ! use this to keep Temperature
+      elseif( scalars .eq. 'SP'  .or. scalars .eq. 'S0' ) then
+       xx=1.0    ! use this to keep  Salinity
+       yy=0.0    ! use this to neglect Temperature
+      elseif( scalars .eq. 'TP'  .or. scalars .eq. 'T0' ) then
+       yy=1.0    ! use this to keep Temperature
+       xx=0.0    ! use this to neglect Salinity
+      endif
+
+      kend=locnz
+      if( myid .eq. numprocs-1) kend=locnz+1
+
+      dx=Lx/float(nx)                 ! [m]
+      dy=Ly/float(nyplanes)           ! [m]
+      dz=Lz/float(locnz*numprocs)     ! [m]
+
+      if( scalars .eq. 'TS' 
+     *    .or. scalars .eq. 'TP' .or. scalars .eq. 'SP' 
+     *    .or. scalars .eq. 'T0' .or. scalars .eq. 'S0' ) then
+
+
+      do k=1,kend
+       z = (myid*locnz+k-1)*dz   ![m]
+       zprime=z/Lz               ! d'less z
+        do j=1,nyplanes
+         yprime=(j-1.)*dy/Lz
+          do i=1,nx
+           xprime=(i-1)*dx/Lz
+           
+           s1_bar = Xs1_bar(i,k,1)   ! use saved values rather than interpolating
+           s2_bar = Xs2_bar(i,k,1)
+           
+c           if ( i == 10 .and. j == 1 ) print*,"Equation d'etat,  s1_bar=",s1_bar
+c           if ( i == 10 .and. j == 1 ) print*,"Equation d'etat,  s2_bar=",s2_bar
+
+           
+c           call s1_bar_func(xprime,yprime,zprime,s1_bar,
+c     *                      junk,junk,junk,junk,
+c     *                      Lz,s1_scale)
+c           call s2_bar_func(xprime,yprime,zprime,s2_bar,
+c     *                      junk,junk,junk,junk,
+c     *                      Lz,s2_scale)
+
+           Temp = yy*(s1_bar*s1_scale)    ! [deg C]
+           Salinity = (s2_bar*s2_scale)   ! [psu]
+           Salinity=xx*Salinity/1000.     ! fortran routine rho uses concentration units
+           call rho(Salinity,Temp,P_mpa,density)
+           rho_bar = density  ! ambient density [kg/m3]
+
+!          now repeat the calculation for total s1 & s2
+           Temp = yy*((s1_bar
+     *            + s1(i,j,k))*s1_scale) ! dimensional quantity: total Temp.
+           Salinity = ((s2_bar 
+     *            + s2(i,j,k))*s2_scale) ! dimensional quantity: total Salinity
+           Salinity=xx*Salinity/1000.     ! fortran routine rho uses concentration units
+
+           call rho(Salinity,Temp,P_Mpa,density) ! total density [kg/m3]
+           total_density = density  ! [kg/m3]
+
+           pd(i,j,k) = total_density - rho_bar   ! perturbation in kg/m3
+           pd(i,j,k) = pd(i,j,k)/(Lz*DGRAD)   ! dimensionless perturbation density
+
+         enddo
+        enddo
+       enddo  
+
+      elseif( scalars .eq. 'RP' .or. scalars .eq. 'R0' ) then  ! s1 is pd
+
+       do k=1,kend
+        do j=1,nyplanes
+         do i=1,nx
+          pd(i,j,k)=s1(i,j,k)
+         enddo
+        enddo
+       enddo
+
+      elseif( scalars .eq. 'PP' ) then ! both scalars passive, set pd=0 
+
+       do k=1,kend
+        do j=1,nyplanes
+         do i=1,nx
+          pd(i,j,k)=0.0
+         enddo
+        enddo
+       enddo
+
+      endif
+
+      end subroutine equation_of_state
+
+
+        !	"rho.f"
+
+        !	Parameter	:	equation of state
+        !	Source		:	MILLERO et.al. (1980) DEEP-SEA RES.
+        !				Vol 27A, pp 255-264
+        !	Units		:	Kg / m**3
+        !	Input		:	s (concentration units), t (deg C), p (MPa)
+        !	Range		:	s (0 to 0.040), t (-2 to 40), p (MPa)
+        !	Ck value	:	K (0, 0, 100)      = 2.297721e4
+        !				K (0.035, 0, 100)  = 2.499200e4
+        !				K (0, 25, 100)     = 2.54051e4
+        !				K (0.035, 25, 100) = 2.710895e4
+        !	Coded		:	Ngoc Dang, July 1982
+
+        subroutine rho (s, t, p, density)
+
+        double precision s, t, p
+        double precision a, b, c, d, e, k, t1, t2, t3, t4, ta, tb
+        double precision k0, k0w, alpha0, alpha, rho0, aw, bw, density 
+
+
+        !  convert input units
+
+        s = 1000.0d0 * s
+        p = 10.0d0 * p
+
+!  compute alpha0 = alpha (s, t, 0)
+
+        t1 = 9.99841594d-1 + t * (6.793952d-5 + t * (-9.095290d-6 + t *
+     &       (1.001685d-7 + t * (-1.120083d-9 + t * 6.536332d-12))))
+        t2 = 8.25917d-4 + t * (-4.4490d-6 + t * (1.0485d-7 + t *      
+     &       (-1.258d-9 + t * 3.315d-12)))
+        t3 = -6.33761d-6 + t * (2.8441d-7 + t * (-1.6871d-8 + t *     
+     &       2.83258d-10))
+        t4 = 5.4705d-7 + t * (-1.97975d-8 + t * (1.6641d-9 - t *      
+     &       3.1203d-11))
+        rho0 = t1 + t2 * s + t3 * s**(1.5) + t4 * s**2
+        alpha0 = 1.0d0 / rho0
+
+        !  compute the pressure coefficient
+
+        !	the first term
+        k0w = 1.965221d4 + t * (1.484206d2 + t * (-2.327105d0 + t *     
+     &        (1.360477d-2 - t * 5.155288d-5)))
+        ta = 5.46746d1 + t * (-6.03459d-1 + t * (1.09987d-2 - t *       
+     &       6.167d-5))
+        tb = 7.944d-2 + t * (1.6483d-2 - t * 5.3009d-4)
+        k0 = k0w + ta * s + tb * s**(1.5)
+
+        !	the second term
+        aw = 3.239908d0 + t * (1.43713d-3 + t * (1.16092d-4 - t *      
+     &       5.77905d-7))
+        c = 2.2838d-3 + t * (-1.0981d-5 - t * 1.6078d-6)
+        d = 1.9107d-4
+        a = aw + c * s + d * s**(1.5)
+
+        !	the third term
+        bw = 8.50935d-5 + t * (-6.12293d-6 + t * 5.2787d-8)
+        e = -9.9348d-7 + t * (2.0816d-8 + t * 9.1697d-10)
+        b = bw + e * s
+
+        k = k0 + a * p + b * p**2
+
+        !  compute density
+        alpha = alpha0 * (1.0d0 - p / k)
+        density = 1.0d0 / alpha
+
+        !  convert to kg / m**3
+        density = 1000.0d0 * density
+        s = s / 1000.0d0
+        p = p / 10.0d0
+
+        return
+        end
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/flow_solve.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/flow_solve.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/flow_solve.f	(revision 6)
@@ -0,0 +1,372 @@
+      program flow_solve
+c=========================================================================================
+c     Free-Slip or Triply Periodic Spectral model in in 2/3 dimensions.
+c     Parallel version using MPI.
+c     Lagrangian floats. (Very slow but accurate)
+c=========================================================================================
+
+      implicit none
+#include "runtime_variables.h"
+#include "variable_declarations.h"
+#include "mpi_init.h"
+#include "problem_params.h"
+#include "runtime_initialization.h"
+      
+
+       open(unit=65,file='output/TS_data_interpoled_begin',status='unknown')
+       do k=1,locnz+1
+        do j=1,1 
+         do i=1,nx
+            
+           if(myid==0 ) then
+              write(65,*) s1_bar(i,k,1)*s1_scale,s2_bar(i,k,1)*s2_scale
+           endif
+   
+         enddo
+        enddo
+       enddo
+       close(65)
+
+
+c=========================================================================================
+c                     BEGIN MAIN TIME STEPPING LOOP
+c=========================================================================================
+
+      do istep = istart,iend
+       time = (t_start + istep*dt)*(Lz/U0)   ! dimensional time clock
+
+
+c     Initialize floats if neccesary.
+       if( float_switch .eq. 'on' .and. istep .eq. istart_floats ) then
+        call initialize_floats(float_variables,nfloats,locnx,ny,nz,Lx,Ly,Lz,U0,
+     *                         u_cplx,v_cplx,w_cplx,s1_cplx,s2_cplx,
+     *                         rho_0,DGRAD,s1_scale,s2_scale,wnx,wny,wnz,bc_flag,sensor_data,
+     *                         nsensors,float_parameters,nfloatparameters,
+     *                         j_float_time,time,z_close,delta_w,z_offset,
+     *                         myid,comm)
+       endif
+
+c=========================================================================================
+c      Some xtra code to store the transforms of y velocity derivs (POMME)
+c      NB  zslip case only, extra arrays declared in variable_declarations.h
+c      here we store transforms of u_y, v_y, w_y in work_cplx(:,:,:,10-12)
+
+#ifdef verbose
+        if(myid == 0) write(0,*) 'storing transforms of d/dy [u,v,w]'
+#endif      
+       cmplxi=(0.,1.)
+       do k = 1, nz
+        do j = 1, nyplanes
+         do i = 1, locnx
+          work_cplx(i,j,k,10) = cmplxi*wny(j)*u(i,j,k)
+          work_cplx(i,j,k,11) = cmplxi*wny(j)*v(i,j,k)
+          work_cplx(i,j,k,12) = cmplxi*wny(j)*w(i,j,k) 
+         enddo
+        enddo
+       enddo
+c=========================================================================================
+
+c      Calculate transform of vorticity vector [vortx,vorty,vortz].
+c      Use the t_n values of u_cplx,v_cplx, and w_cplx stored in location N.
+c      Store the vorticity components in work_cplx(:,:,:,1-3) respectively.
+
+#ifdef verbose
+        if(myid == 0) write(0,*) 'calling VORT_FCS'
+#endif
+        call vort_fcs(u_cplx(1,1,1,N),v_cplx(1,1,1,N),w_cplx(1,1,1,N),
+     *                locnx,nx,ny,nz,wnx,wny,wnz,
+     *                work_cplx(1,1,1,1),work_cplx(1,1,1,2),work_cplx(1,1,1,3),
+     *                num_dims,bc_flag)
+
+
+c      Inverse transform the time t_n dependent variables and
+c      the vorticity vector {work_cplx(1-3)} back to the physical domain.
+c      Physical space representations of u,v,w,s1 and s2 are returned
+c      in the arrays work(:,:,:,4-7,9) respectively.
+c      The physical space representation of vorticity components are
+c      returned in the arrays work(:,:,:,1-3).
+c      The array scratch is used for temporary work space.
+#ifdef verbose
+        if(myid == 0) write(0,*) 'calling IFFT'
+#endif
+       call ifft(u_cplx,v_cplx,w_cplx,s1_cplx,s2_cplx,
+     *           work_cplx(1,1,1,1),work_cplx(1,1,1,2),work_cplx(1,1,1,3), 
+     *           N,nx,ny,nz,trigx,trigy,trigz,ifax,ifay,ifaz,wn,
+     *           scratch,xt,num_dims,bc_flag,
+     *           work(1,1,1,4),work(1,1,1,5),work(1,1,1,6),work(1,1,1,7),work(1,1,1,9),
+     *           work(1,1,1,1),work(1,1,1,2),work(1,1,1,3),work_cplx(1,1,1,8),
+     *           myid,numprocs,locnx,locnz,comm,twoslice,subslice)
+     
+
+c=========================================================================================     
+c      Some xtra code to inverse transform ---> u_y, v_y, w_y -->ddy_vels
+      if(ny.gt.0) then
+
+#ifdef verbose
+        if(myid == 0) write(0,*) 'calling extra transforms for ddy_vels'
+#endif
+       iswitch = -1    ! inverse transforms
+	   itrig = 0
+       tswitch='c'
+      
+      call transform3d (ddy_vels(1,1,1,1),work_cplx(1,1,1,10),nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,scratch,work(1,1,1,14),xt,myid,numprocs,locnx,locnz,
+     *                  comm,twoslice,subslice)
+     
+      call transform3d (ddy_vels(1,1,1,2),work_cplx(1,1,1,11),nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,scratch,work(1,1,1,14),xt,myid,numprocs,locnx,locnz,
+     *                  comm,twoslice,subslice)
+     
+      tswitch='s'
+      call transform3d (ddy_vels(1,1,1,3),work_cplx(1,1,1,12),nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,scratch,work(1,1,1,14),xt,myid,numprocs,locnx,locnz,
+     *                  comm,twoslice,subslice)
+      endif
+c=========================================================================================
+
+c      Call equation of state to calculate perturbation density pd(:,:,:), given the physical
+c      space values of s1 and s2 now stored in work(:,:,:,7) and work(:,:,:,9) respectively.
+#ifdef verbose
+        if(myid == 0) write(0,*) 'calling EQUATION_OF_STATE'
+#endif
+       call equation_of_state(scalars,work(1,1,1,7),work(1,1,1,9),s1_scale,s2_scale,
+     *                        nx,ny,locnz,rho_0,DGRAD,myid,numprocs,Lx,Ly,Lz,pd(1,1,1),
+     *                        s1_bar,s2_bar)
+
+       open(unit=65,file='output/TS_data_interpoled_eqstate',status='unknown')
+       do k=1,locnz+1
+        do j=1,1
+         do i=1,nx
+
+           if(myid==0 ) write(65,*) s1_bar(i,k,1)*s1_scale,s2_bar(i,k,1)*s2_scale
+
+         enddo
+        enddo
+       enddo
+       close(65)
+
+
+c      Given the current numerical solutions on the physical space grid, do some
+c      quick analyses and/or output selected results if appropriate.
+       if( mod(istep,i_stat) .eq. 0 ) then
+c      **** I'm using only kappa_1 here for surface diffusion term g*kappa*d/dz rho ...check
+#ifdef verbose
+        if(myid == 0) write(0,*) 'calling energetics'
+#endif
+        call energetics(work(1,1,1,4),work(1,1,1,5),work(1,1,1,6),pd(1,1,1),
+     *                  u_cplx(1,1,1,N),v_cplx(1,1,1,N),w_cplx(1,1,1,N),wnx,wny,wnz,
+     *                  U0,Lx,Ly,Lz,f,g,rho_0,DGRAD,Re,kappa_1,nu,
+     *                  nx,ny,nz,num_dims,bc_flag,force_flag,time,
+     *                  comm,myid,numprocs,locnx,locnz,ambient_density)
+       endif 
+
+#include "init_write_netcdf.h"
+
+c---------------------->>>>>  EXTRA CODE SEGMENT FOR SPONGE LAYERS
+c      Compute additional terms to be applied within sponge layers
+c      (parameters in the file user_defined_forcing.f,subroutine sponge)
+c#ifdef verbose
+c        if(myid == 0) write(0,*) 'calling SPONGE'
+c#endif
+c       call calc_sponge(work(1,1,1,4),work(1,1,1,5),work(1,1,1,6),work(1,1,1,7),
+c     *             work(1,1,1,9),sponge,nx,ny,nyplanes,locnz,Lx,Ly,Lz,f,
+c     *             s1_scale,s2_scale,U0,DGRAD)
+c        <<<<<<<-----------------------------------------------------------
+
+c      Compute nonlinear products locally in physical space. On input, the
+c      work arrays contain values as described above.
+c      For now, we assume s1_bar and s2_bar are functions of z only and so
+c      d/dx and d/dy of p_bar, the hydrostatic pressure associated w/ s1_bar/s2_bar,
+c      are equal to zero.
+c      On output:
+c      work(:,:,:,1-3)   contains the products of s1 and u,v and w respectively.
+c      work(:,:,:,10-12) contains the products of s2 and u,v and w respectively.
+c      work(:,:,:,4)   v*vortz - w vorty + Rot*v -u*d/dx rho_bar - d/dx p_bar
+c      work(:,:,:,5)   w*vortx - u vortz - Rot*u -v*d/dy rho_bar - d/dy p_bar
+c      work(:,:,:,6)   u*vorty - v vortx - Ri*pd
+c      work(:,:,:,7)   -u dot grad s1_bar
+c      work(:,:,:,8)   d/dz s1_bar
+c      work(:,:,:,9)   -u dot grad s2_bar
+c      work(:,:,:,13)   d/dz s2_bar
+       call nonlin (scalars,work(1,1,1,4),work(1,1,1,5),work(1,1,1,6),
+     *              pd(1,1,1),work(1,1,1,7),work(1,1,1,9), 
+     *              work(1,1,1,1),work(1,1,1,2),work(1,1,1,3),
+     *              work(1,1,1,10),work(1,1,1,11),work(1,1,1,12),
+     *              Lx,Ly,Lz,U0,DGRAD,s1_scale,s2_scale,rho_0,
+     *              work(1,1,1,8),work(1,1,1,13),Ri,Rot,beta,num_dims,
+     *              nx,ny,locnz,myid,numprocs,comm,ddy_vels,Vg,istep,s1_bar,s2_bar)
+
+       open(unit=65,file='output/TS_data_interpoled_nonlin',status='unknown')
+       do k=1,locnz+1
+        do j=1,1
+         do i=1,nx
+
+           if(myid==0 ) write(65,*) s1_bar(i,k,1)*s1_scale,s2_bar(i,k,1)*s2_scale
+
+         enddo
+        enddo
+       enddo
+       close(65)
+
+c---------------------->>>>>  EXTRA CODE SEGMENT FOR SPONGE LAYERS
+c      Add in the sponge terms (Rayliegh damping, viscous damping)
+#ifdef verbose
+        if(myid == 0) write(0,*) 'adding SPONGE terms'
+#endif
+        do k=1,locnz+1
+         do j=1,nyplanes
+          do i=1,nx
+           work(i,j,k,4)=work(i,j,k,4)+sponge(i,j,k,1)
+           work(i,j,k,5)=work(i,j,k,5)+sponge(i,j,k,2)
+           work(i,j,k,6)=work(i,j,k,6)+sponge(i,j,k,3)
+           work(i,j,k,7)=work(i,j,k,7)+sponge(i,j,k,4)
+           work(i,j,k,9)=work(i,j,k,9)+sponge(i,j,k,5)
+          enddo
+         enddo
+        enddo
+c        <<<<<<<-----------------------------------------------------------
+
+c      Add forcing terms via user_defined_forcing subroutine
+       if( force_flag .eq. 'yes' ) then
+c#ifdef verbose
+c        if(myid == 0) write(0,*) 'calling GET_STRESS'
+c#endif
+c        call get_stress(time,Lx,nx)        ! fills stress_complex at this time for all grid xvals
+                                           ! stress_complex is available via the POMME common block
+        call add_forcing(work(1,1,1,4),work(1,1,1,5),work(1,1,1,6),
+     *                   work(1,1,1,7),work(1,1,1,9),nx,ny,locnz,myid,
+     *                   numprocs,Lx,Ly,Lz,U0,DGRAD,s1_scale,s2_scale,time,f,g,rho_0)
+       endif
+
+c      Transform physical space quantities back to the wavenumber domain.
+c      The results are stored in work_cplx(:,:,:,i) for i as follows:
+c      work_cplx(:,:,:,1-3)   contains the products of s1 and u,v and w respectively.
+c      work_cplx(:,:,:,10-12) contains the products of s2 and u,v and w respectively.
+c      work_cplx(:,:,:,4)   v*vortz - w vorty + Rot*v -u*d/dx rho_bar - d/dx p_bar
+c      work_cplx(:,:,:,5)   w*vortx - u vortz - Rot*u -v*d/dy rho_bar - d/dy p_bar
+c      work_cplx(:,:,:,6)   u*vorty - v vortx - Ri*pd
+c      work_cplx(:,:,:,7)   -u dot grad s1_bar
+c      work_cplx(:,:,:,8)   d/dz s1_bar
+c      work_cplx(:,:,:,9)   -u dot grad s2_bar
+c      work_cplx(:,:,:,13)   d/dz s2_bar
+c      The array scratch is used as temporary work space.
+#ifdef verbose
+        if(myid == 0) write(0,*) 'calling FFT'
+#endif
+       call fft (work(1,1,1,1),work(1,1,1,2),work(1,1,1,3),work(1,1,1,4), 
+     *           work(1,1,1,5),work(1,1,1,6),work(1,1,1,7),work(1,1,1,9),
+     *           work(1,1,1,10),work(1,1,1,11),work(1,1,1,12),
+     *           work(1,1,1,13),work(1,1,1,8),
+     *           num_dims,nx,ny,nz,trigx,trigy,trigz, 
+     *           ifax,ifay,ifaz,wn,bc_flag,xt,work_cplx,scratch,
+     *           myid,numprocs,locnx,locnz,comm,twoslice,subslice)
+
+c      Compute the transfer terms, i.e. all components of the rhs's
+c      except the dissipation and diffusion terms which are treated 
+c      analytically via integrating factors. Store the results in the
+c      "M" locations of the Tr1, Tr2, Tr3 and Tr4 arrays. The transform
+c      of the pressure is also computed and stored in work_cplx(:,:,:,8).
+#ifdef verbose
+        if(myid == 0) write(0,*) 'calling RHS'
+#endif
+       call rhs(work_cplx(1,1,1,4),work_cplx(1,1,1,5),work_cplx(1,1,1,6),
+     *          work_cplx(1,1,1,7),work_cplx(1,1,1,9),
+     *          work_cplx(1,1,1,10),work_cplx(1,1,1,11),
+     *          work_cplx(1,1,1,12),work_cplx(1,1,1,13),
+     *          work_cplx(1,1,1,1),work_cplx(1,1,1,2),
+     *          work_cplx(1,1,1,3),work_cplx(1,1,1,8),
+     *          Tr1(1,1,1,M),Tr2(1,1,1,M),Tr3(1,1,1,M),Tr4(1,1,1,M),
+     *          Tr5(1,1,1,M),amp,dt,
+     *          myid,num_dims,locnx,ny,nz,wnx,wny,wnz,bc_flag) 
+
+c      Add forcing in Fourier space. This is for experts only,
+c      using this method of forcing requires knowledge of the
+c      fourier space wavenumber map, which is defined in
+c      source/fill_wave_vectors.f.
+       if( force_flag .eq. 'yesFourier' ) then
+        call add_fforcing(force_cplx,Tr1(1,1,1,M),Tr2(1,1,1,M),
+     *                   Tr3(1,1,1,M),Tr4(1,1,1,M),Tr5(1,1,1,M),
+     *                   wnx,wny,wnz,locnx,ny,nyplanes,nz,Lz,
+     *                   U0,DGRAD,time,f,g,rho_0)
+       endif
+
+#include "trans_write_netcdf.h"
+
+c      Take an explicit, multilevel time step.
+c      Store the updated fields in locations (:,:,:,NM1).
+c      N.B. The "NM1" locations will shortly be "promoted" to the "current"
+c      fields before advancing to the next time step.
+#ifdef verbose
+        if(myid == 0) write(0,*) 'calling STEP'
+#endif
+       call step(u_cplx,v_cplx,w_cplx,s1_cplx,s2_cplx,Tr1,Tr2,Tr3,Tr4,Tr5,amp,
+     *           num_dims,M,MM1,MM2,N,NM1,locnx,ny,nz,step_flag,dt)
+
+c      If required, advance the infinitesimal lagrangian floats
+       if( float_switch .eq. 'on' ) then
+        if( mod(istep,2) .eq. 0 ) then
+
+         call rk4_even(dt,k_rk4,float_variables,float_parameters,Lz,s1_scale,s2_scale,
+     *                 locnx,ny,nz,nfloats,nfloatparameters,nsensors,
+     *                 N,NM1,u_cplx,v_cplx,w_cplx,s1_cplx,s2_cplx,wnx,wny,wnz,
+     *                 bc_flag,Pr_1,Re,myid,comm)
+
+        else   ! for odd time steps:
+         call rk4_odd (dt,k_rk4,float_variables,float_parameters,Lz,s1_scale,s2_scale,
+     *                 locnx,ny,nz,nfloats,nfloatparameters,nsensors,
+     *                 N,NM1,u_cplx,v_cplx,w_cplx,s1_cplx,s2_cplx,wnx,wny,wnz,
+     *                 bc_flag,Pr_1,Re,sensor_data,myid,comm)
+
+         time = (t_start + (istep+1)*dt)*(Lz/U0)   ! value after time step
+
+c        Float data can be written every odd time step, i.e. step 1,3,5,7 etc
+c        Setting the mod argument to 7 selects every fourth available
+c        output point. Setting it to 1 selects every odd time step.
+
+         if( istep .gt. istart_floats .and. mod(istep,1) .eq. 0 ) then
+          if(myid .eq. 0 ) then
+           prelim_flag='no'
+           call write_floats_nc(time,istep,nfloats,nsensors,Lz,s1_scale,s2_scale,U0,
+     *                          float_variables,sensor_data,j_float_time,
+     *                          float_parameters,nfloatparameters,prelim_flag)
+          endif
+         endif  ! end of special, i.e. write data, odd case
+
+        endif   ! end of even/odd time step block
+       endif    ! end of float_switch on case
+ 
+       open(unit=65,file='output/TS_data_interpoled_end',status='unknown')
+       do k=1,locnz+1
+        do j=1,1
+         do i=1,nx
+
+           if(myid==0 ) write(65,*) s1_bar(i,k,1)*s1_scale,s2_bar(i,k,1)*s2_scale
+
+         enddo
+        enddo
+       enddo
+       close(65)
+
+c      toggle N,N-1 pointers (storage ids for dependent variables)
+       tmp=NM1
+       NM1=N
+       N=tmp
+
+c      toggle M,M-1 & M-2 pointers (storage ids for transfer terms)
+       tmp=MM2
+       MM2=MM1
+       MM1=M
+       M=tmp
+
+       call MPI_BARRIER(comm,ierr)   ! precautionary synchronization
+      enddo    ! end time stepping loop
+
+c     Clean up and gracefully exit MPI environment.
+999   call MPI_BARRIER(comm,ierr)
+      call MPI_FINALIZE(ierr)
+
+      stop
+      end
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/initialize.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/initialize.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/initialize.f	(revision 6)
@@ -0,0 +1,532 @@
+      subroutine initialize(u,v,w,s1,s2,ambient_density,u_cplx,v_cplx,w_cplx,s1_cplx,s2_cplx,
+     *                      nx,ny,nz,num_dims,efactor,
+     *                      Lx,Ly,Lz,dx,dy,dz,U0,DGRAD,s1_scale,s2_scale,rho_0,f,g,kappa_1,kappa_2,nu,
+     *                      bc_flag,ifax,ifay,ifaz,trigx,trigy,trigz,wn,
+     *                      wnx,wny,wnz,amp,p,T_diss,diss_flag,N,NM1,M,MM1,MM2,step_flag,
+     *                      Rot,Ri,Re,Pr_1,Pr_2,istart,iend,i_all,i_selective,i_stat,
+     *                      dt,t_start,t_end,t_write_selective,
+     *                      t_stat,xt,work,scratch,myid,numprocs,locnx,locnz,
+     *                      comm,twoslice,subslice,temp,netcdf_file,nyplanes,
+     *                      force_cplx,force_flag,work_P,scalars,beta,ddy_vels,Vg,s1_bar,s2_bar)
+     
+c
+c     Routine to set up the initial conditions, scale
+c     all variables (i.e. nondimensionalize variables) and initialize
+c     various arrays, flags and counters.
+c
+
+      implicit none
+      integer nyplanes,nx,ny,nz,num_dims,p,iswitch,itrig,i_stat,N,NM1,M,MM1,MM2
+      integer myid,numprocs,ierr,locnx,locnz,i,j,k,iwrite
+      integer comm,twoslice,subslice
+      integer iseed,npts
+      parameter (npts=4*2048)  ! >=nx
+      double precision urv(npts),vrv(npts)
+      real u(nx+2,ny+1,locnz+1),v(nx+2,ny+1,locnz+1),w(nx+2,ny+1,locnz+1)
+      real s1(nx+2,ny+1,locnz+1),s2(nx+2,ny+1,locnz+1)
+      real ambient_density(nx+2,ny+1,locnz+1)
+      real temp(nx,nyplanes,locnz+1)
+      complex u_cplx(locnx,ny+1,nz+1,2),v_cplx(locnx,ny+1,nz+1,2)
+      complex w_cplx(locnx,ny+1,nz+1,2),s1_cplx(locnx,ny+1,nz+1,2)
+      complex s2_cplx(locnx,ny+1,nz+1,2)
+      real Lx,Ly,Lz,U0,DGRAD,s1_scale,s2_scale,rho_0,f,g,kappa_1,kappa_2,nu
+      real beta,Rot,Ri,Re,Pr_1,Pr_2,dt,t_start,t_end,t_write_selective
+      character*80 bc_flag,step_flag,strat_flag,read_netcdf,netcdf_file
+      character*80 diss_flag,force_flag
+      character*2 scalars
+      character tswitch
+      integer ifax(13),ifay(13),ifaz(13)
+      integer jstart(4),icount(4),data_dims(4),ncid,RCODE,var_id
+      real wnx(locnx),wny(ny+1),wnz(nz+1)
+      real amp(locnx,ny+1,nz+1,2),T_diss
+      real trigx(3*(nx+2)/2+1),trigy(2*(ny+1)),trigz(2*nz)
+      real work((nx+2)*(ny+1)*(locnz+1)),efactor
+      real work_P(nx+2,ny+1,locnz+1)
+      complex scratch(locnx,ny+1,nz+1)
+      complex force_cplx(locnx,ny+1,nz+1)
+      complex wn(nz/4+1),xt(nx+2, nz/2+1)
+
+      real pi,dx,dy,dz,x,y,z,time_scale,t_stat,total_density,N2,delta_u
+      real xpos,ypos,zpos,junk,rho_bar,Tgrad
+      double precision Temperature_dp,Salinity_dp,pMpa,density
+      integer istart,iend,i_all,i_selective,kglobal
+      integer dim_length,ii,jj,jflip,im,ip
+      
+#include "pomme.h"
+     
+c     Extra variables associated with expansion about geostrophic state
+      real ddy_vels(nx+2,ny+1,locnz+1,3), Vg(nx+2,locnz+1,3)
+      real s1_bar(nx+2,locnz+1,4), s2_bar(nx+2,locnz+1,4)
+     
+      real lat2meters,lon2meters
+      real day,month
+      real rhobar(66)  ! used here just to get the MLD of the ics
+     
+#include "netcdf.inc"
+
+      N=1   ! put startup fields on plane 1 
+      NM1=2 ! the other field
+      pi = 4.0*atan(1.0)      
+      time_scale = Lz/U0
+      
+
+c=====================================================================      
+c     some custom code for dealing with externally supplied data
+c     for the POMME experiments etc
+c=====================================================================
+
+      beta = beta*(Lz/f)         ! (ms)^(-1) ---> dimensionless
+      lon2meters = 83.3333*1.e3       ! 500km/6 deg
+      lat2meters = 107.1429*1.e3      ! 1500km/14 deg
+      
+c=====================================================================
+c      Two dimensional geostrophic background state for T, S and V(x,z)
+c      T and S are used as s1_bar and s2_bar, V is used to form the
+c      extra terms in the momentum equation
+c=====================================================================
+
+c     horizontally averaged profiles, we use these for s1_bar(z) and
+c     s2_bar(z), i.e. for T and S. Perturbations s1 and s2 defined
+c     relative to these quantities. Note that the profile data generally
+c     does not extend as deep as the simulation domain.
+
+c       open(911,file='DATA/pomme_ics_ascii',status='old',form='formatted')
+      open(911,file='DATA/pomme_rho_ascii',status='old',form='formatted')
+c      if(myid==0) open(2,file='output/pomme_depth_grid')
+       do k=1,m3
+        read(911,*) depth(k),z,rhobar(k)    ! z here is depth for the Vg data
+        depth(k) = -depth(k)    ! all depths now positive values
+        zi(k) = Lz - depth(k)   ! zi < 0 for depths below bottom of our domain z in[0,Lz]
+        zi_geo(k) = Lz - (-z)      ! height values for Vg data
+c        if(myid==0) write(2,*) k,depth(k),zi(k),zi_geo(k)
+       enddo
+c       if(myid==0) close(2)
+      close(911)
+
+       do k=m3,1,-1
+        if( ( rhobar(k)-rhobar(m3) ) .gt. 0.1 ) then
+         mixed_layer_depth = depth(k)
+         write(0,*) ' characteristic POMME MLD = ',mixed_layer_depth,' meters'
+         goto 101
+        endif
+       enddo
+
+101    continue
+c      read the two-dimensional fields T,S (total) and geos. velocity
+c      all quantities in dimensional units
+
+      open(912,file='DATA/pomme_TS_ascii',status='old',form='formatted')
+       do i=1,m1
+         do k=1,m3
+          read(912,*) xlat(i),Temperature(i,k),Salinity(i,k)  !!!!,Vgeo(i,k)
+          xi(i) = (xlat(i)-xlat(1))*lat2meters  
+         enddo
+       enddo
+c       close(2)            
+      close(912)
+
+      if(myid==0) write(0,*) 'ambient geostrophic data read in from pomme data file '  
+      
+c     interpolate Ugeo values to the model's xz grid
+c      dx = Lx/float(nx)
+c      dz = Lz/float(nz)
+c      do i=1,nx
+c       do k=1,locnz+1
+c        xpos=(i-1.)*dx
+c        zpos=(myid*locnz + (k-1.))*dz
+c        call interp2d(xpos,zpos,'V',Vg(i,k,1))  ! interpolate dimensional values
+c        Vg(i,k,1)=Vg(i,k,1)/U0                  ! store dimensionless values
+c       enddo
+c      enddo
+c      if(myid==0) write(0,*) 'Geostrophic current interpolated to model grid ' 
+      
+c      do i=1,nx
+c       ip=i+1
+c       if(i==nx) ip=1   ! x periodic
+c       im=i-1
+c       if(i==1) ip=nx   ! x periodic
+c         do k=1,locnz+1
+c          Vg(i,k,2) = (Vg(ip,k,1)-Vg(im,k,1))/(2.*dx/Lz)  ! d/dx Vg  (d'less)
+c          if(k<=locnz) then
+c           Vg(i,k,3) = (Vg(i,k+1,1)-Vg(i,k,1))/(dz/Lz)    ! d/dz Vg (d'less)
+c          else
+c           Vg(i,k,3) = 0.0   ! this is only used by the top processor
+c          endif
+c         enddo
+c      enddo
+c      if(myid==0) write(0,*) 'Gradient of Geostrophic current computed on model grid '
+      
+      
+      
+
+c=====================================================================
+c      longitudinally averaged wind stress vectors 
+c      as a function of time, stored once per day (check)
+c=====================================================================      
+c      if(force_flag .eq. 'yes') then
+c       open(1,file='pomme_stress_ascii')
+c       if(myid==0) open(2,file='output/stress_data')
+c        ti(1)=0.
+c        do k=1,mt
+c         do i=1,m1
+c          read(1,*)  xlat(i),day,month,stress_x(i,k),stress_y(i,k)
+c          if(k.gt.1) ti(k)=ti(k-1) + 24*3600
+c          write(2,*) ti(k),xi(i),stress_x(i,k),stress_y(i,k)
+c        enddo
+c       enddo
+c       if(myid==0) close(2)
+c       close(1)
+c       if(myid==0) write(0,*) 'surface stress data read from pomme data file '
+c      endif
+       
+c=====================================================================
+c=====================================================================
+
+      if( num_dims .eq. 2 ) then
+       dy = 1
+       jj=1   ! j index for writing out rho_bar
+      elseif( num_dims .eq. 3 ) then
+       dy = Ly/float(ny)
+       jj=nyplanes/2   ! j index for writing out rho_bar
+      endif
+      L_x=Lx
+      
+ 
+c Calculate and store the three-dimensional ambient density field associated with
+c the longitudinally invariant ambient (geostrophic) Temp and Salinity profiles
+       if(myid==0) write(0,*) 'interpolating POMME scalar data to model grid ..... '
+       if(myid==0) open(2,file='output/geostrophic_data')
+       do k=1,locnz+1
+        kglobal = k + myid*locnz
+        zpos=(kglobal-1.)*dz/Lz     ! use dimensionless values here
+        do j=1,1  !nyplanes  !POMME Tbar Sbar depend only on x,z --> do j=1 and replicate
+         do i=1,nx 
+           xpos=(i-1.)*dx/Lz
+           ypos=(j-1.)*dy/Lz
+
+          call s1_bar_func(xpos,ypos,zpos,s1_bar(i,k,1),
+     *                     s1_bar(i,k,2),junk,s1_bar(i,k,3),s1_bar(i,k,4),
+     *                     Lz,s1_scale)
+          call s2_bar_func(xpos,ypos,zpos,s2_bar(i,k,1),
+     *                     s2_bar(i,k,2),junk,s2_bar(i,k,3),s2_bar(i,k,4),
+     *                     Lz,s2_scale)
+          if( scalars .eq. 'TS' ) then
+           Temperature_dp = (s1_bar(i,k,1)*s1_scale)       ! [deg C]
+           Salinity_dp = (s2_bar(i,k,1)*s2_scale)          ! [psu]
+           Salinity_dp=Salinity_dp/1000.        ! fortran routine rho uses psu (or ~ppt) units
+           pmPa=0.d0
+           call rho(Salinity_dp,Temperature_dp,pMpa,density)
+           rho_bar = (sngl(density) - rho_0)   ! [kg/m3]
+           ambient_density(i, j, k) = rho_bar/(Lz*DGRAD)   ! store dimensionless values
+           
+c           if(myid==0 ) write(2,*) xpos*Lz,zpos*Lz,s1_bar(i,k,1)*s1_scale,
+c     *            s2_bar(i,k,1)*s2_scale,ambient_density(i,j,k)+27,Vg(i,k,1) 
+
+           
+          elseif( scalars .eq. 'TP' .or. scalars .eq. 'T0' ) then
+           Temperature_dp = (s1_bar(i,k,1)*s1_scale)       ! [deg C]
+           Salinity = 0.  ! [psu]
+           pmPa=0.d0
+           call rho(Salinity_dp,Temperature_dp,pMpa,density)
+           rho_bar = (sngl(density) - rho_0)   ! [kg/m3]
+           ambient_density(i, j, k) = rho_bar/(Lz*DGRAD)   ! store dimensionless values
+          elseif( scalars .eq. 'SP' .or. scalars .eq. 'S0' ) then
+           Temperature_dp = 0.       ! [deg C]
+           Salinity_dp = (s2_bar(i,k,1)*s2_scale)   ! [psu]
+           Salinity_dp=Salinity_dp/1000.     ! fortran routine rho uses concentration units
+           pmPa=0.d0
+           call rho(Salinity_dp,Temperature_dp,pMpa,density)
+           rho_bar = (sngl(density) - rho_0)   ! [kg/m3]
+           ambient_density(i, j, k) = rho_bar/(Lz*DGRAD)   ! store dimensionless values
+          elseif( scalars .eq. 'RP' .or. scalars .eq. 'R0' ) then
+           ambient_density(i, j, k) = s1_bar(i,k,1)/s1_scale      ! store dimensionless values
+          elseif( scalars .eq. 'PP' ) then
+           ambient_density(i, j, k) = 0.0                  ! store dimensionless values
+          endif
+
+         enddo
+        enddo
+       enddo
+
+       if(myid==0) write(0,*) 'POMME scalar data interpolated on model grid ..... '
+ccc       if(myid==0) close(2)
+       
+       ! replicate for j>1 and i>1
+       do j=2,nyplanes
+         ambient_density(i,j,:) = ambient_density(1,1,:)
+       enddo
+       if(myid==0) write(0,*) 'Replication of interpolated POMME data ..... ' 
+
+      if( netcdf_file .eq. 'none' .or. netcdf_file .eq. 'NONE' ) then
+       do k=1,locnz+1
+        kglobal = k + myid*locnz
+        zpos=(kglobal-1.)*dz     ![m]
+
+        do j=1,1 !nyplanes   ! POMME Tbar Sbar depend only on x,z 
+                             ! here just do j=1 and replicate
+                             ! actually, ics are really homogeneous when 
+                             ! the eqns are perturbed about geostrophic background
+                             ! but we'll be a bit more general in approach here
+         do i=1,nx
+      
+          xpos=(i-1.)*dx
+          ypos=(j-1.)*dy
+
+          call user_defined_ics(xpos,ypos,zpos,Lx,Ly,Lz,
+     *         u(i,j,k),v(i,j,k),w(i,j,k),s1(i,j,k),s2(i,j,k) )
+
+         enddo
+        enddo
+       enddo
+       
+       ! replicate for j>1
+       do j=2,nyplanes
+         do i=1,nx
+            do k=1,locnz+1
+              u(i,j,k) = u(i,1,k)
+              v(i,j,k) = v(i,1,k)
+              w(i,j,k) = w(i,1,k)
+              s1(i,j,k) = s1(i,1,k)
+              s2(i,j,k) = s2(i,1,k)
+            enddo
+          enddo
+        enddo
+ 
+      else  ! we will read ICS from an existing netcdf file
+c     for example, to read ICs from a netcdf file generated via GMwaves.x
+       ! BLOCK DELETED FOR POMME EXPTS
+      endif  ! end if block for netcdf or user specified ICS
+
+c     write out parameters characterizing simulation
+c
+      if( myid .eq. 0 ) then
+       write(0,*) ' Number of dimensions:  ',num_dims
+       write(0,*) ' nx, ny, nz : ',nx,ny,nz
+       write(0,*) ' boundary conditions:  ',bc_flag
+       write(0,*) ' '
+       write(0,*) ' '
+       write(0,*) ' domain lengths Lx, Ly, Lz [m]:  ',Lx,Ly,Lz
+       write(0,*) ' grid spacings dx, dy, dz [m]:  ',dx,dy,dz
+       write(0,*) ' bulk velocity scale U [m/s]:  ',U0
+       write(0,*) ' characteristic density gradient scale [kg/m4]:  ',DGRAD
+       write(0,*) ' characteristic range of scalar 1 [e.g. deg C]  ',s1_scale
+       write(0,*) ' characteristic range of scalar 2 [e.g. psu]  ',s2_scale
+       write(0,*) 
+     &   ' characteristic density of Boussinesq fluid [kg/m3]:  ',rho_0
+       write(0,*) ' coriolis parameter at x=Lx/2 (extended POMME domain), f0 [1/s]:  ',f
+       write(0,*) ' coriolis parameter beta [1/ms]:  ',beta/(Lz/f) ! dless--> dimensional
+       write(0,*) ' gravitational acceleration g [m/s2]:  ',g
+       write(0,*) ' molecular diffusivity of scalar 1 [m2/s]:  ',kappa_1
+       write(0,*) ' molecular diffusivity of scalar 2 [m2/s]:  ',kappa_2
+       write(0,*) ' viscosity [m2/s]:  ',nu
+c      write(0,*) ' minimum BV period [s]:  ',per_min
+c      write(0,*) ' CFL_x = Umax dt/dx:  ', UMAX*dt/dx
+c      write(0,*) ' CFL_y = Vmax dt/dy:  ', VMAX*dt/dy
+c      write(0,*) ' CFL_z = Wmax dt/dz:  ', WMAX*dt/dz
+
+c     nondimensionalize the initial fields, the stratification parameters 
+c     and time variables
+       write(0,*) ' time step dt [s]    :  ',dt
+       write(0,*) ' initial time  [s]   :  ',t_start
+       write(0,*) ' final time    [s]   :  ',t_end
+       write(0,*) ' Lz/U0        [s]    :  ',time_scale
+      endif
+
+      istart = 0
+      iend = ( t_end - t_start ) / dt
+      i_selective = t_write_selective/dt
+      i_stat = t_stat/dt
+
+      dt = dt/time_scale
+      t_start = t_start/time_scale
+      t_end = t_end/time_scale
+      t_write_selective = t_write_selective/time_scale
+      t_stat = t_stat/time_scale
+
+      if( myid .eq. 0 ) then
+       write(0,*) ' '
+       write(0,*) ' time variables initialized via problem_parameters.h'
+       write(0,*) ' non-dimensionalized in initilize.f'
+      endif
+      
+      if( myid .eq. 0 ) then
+       write(0,*) ' '
+       write(0,*) ' time increment counters set'
+       write(0,*) ' number of steps:  ',iend-istart+1
+       write(0,*) ' number of steps between energetics calculations:  ',i_stat
+       write(0,*) ' number of steps between full writes:  ',i_all
+       write(0,*) ' number of steps between selective writes:  ',i_selective
+      endif
+      
+c     Nondimensionalize dependent variables:
+      do k=1,locnz+1
+       do j=1,nyplanes
+        do i=1,nx
+         u(i,j,k) = u(i,j,k)/U0
+         v(i,j,k) = v(i,j,k)/U0
+         w(i,j,k) = w(i,j,k)/U0
+         s1(i,j,k) = s1(i,j,k)/(s1_scale)
+         s2(i,j,k) = s2(i,j,k)/(s2_scale)
+        enddo
+       enddo
+      enddo
+
+      if( myid .eq. 0 ) then
+       write(0,*) ' '
+       write(0,*) 'dependent variables non-dimensionalized'
+      endif
+      
+c     compute the dimensionless parameters
+      Rot= f*Lz/U0
+      N2 = (g/rho_0)*DGRAD
+      Ri = N2*Lz**2/(U0**2)
+      Re = U0*Lz/nu
+      Pr_1 = nu/kappa_1
+      Pr_2 = nu/kappa_2
+      
+      if( myid .eq. 0 ) then
+       write(0,*) ' '
+       write(0,*) ' '
+       write(0,*) ' inverse Rossby number fL/U:  ',Rot
+       write(0,*) ' bulk Richardson number (NL/U)^2 : ',Ri
+       write(0,*) ' bulk Reynolds number UL/nu:  ',Re
+       write(0,*) ' Prandtl number  nu/kappa_1:  ',Pr_1
+       write(0,*) ' Prandtl number  nu/kappa_2:  ',Pr_2
+       write(0,*) ' '
+       write(0,*) ' '
+      endif
+
+c
+c     set up dimensionless wavenumber vectors, 
+c     N.B. for fill_wave_vectors, input length & time scales, 
+c     including wavenumber truncation radius,
+c     are dimensionless quantities, scaled by vertical domain size Lz & U0
+c
+      call fill_wave_vectors (wnx, wny, wnz, nx, ny, nz, Lx/Lz, Ly/Lz, amp,
+     *                        dt, Re, Pr_1, Pr_2, p,T_diss/time_scale,diss_flag,num_dims,bc_flag,
+     *                        myid, numprocs, locnx)
+     
+      if( myid .eq. 0 ) then
+       write(0,*) ' '
+       write(0,*) ' dimensionless wavenumber vectors and '
+       write(0,*) ' integrating factors initialized'
+       write(0,*) ' '
+      
+       write(0,*) 'TRANSFORMING DIMENSIONLESS INITIAL CONDITIONS P-->S'
+      endif
+
+c
+c     take the 3d transforms of the dimensionless, physical space ICS
+c
+	iswitch = +1   ! Forward transforms: physical to wavenumber domain
+	itrig = 1      ! compute & return trig tables with first call
+                       ! to transform3d
+	
+C
+C     set tswitch to indicate type of z transform, and transform u & v & s1
+C
+      if( bc_flag .eq. 'zperiodic' ) then
+       tswitch='f'  ! indicating fourier in xy, fourier in z
+      elseif( bc_flag .eq. 'zslip' ) then
+       tswitch = 'c'   ! free slip, du/dz=dv/dz=ds1d/dz=0 at top & bottom
+      endif
+      
+      call transform3d (u,u_cplx(1,1,1,N),nx,ny,nz,iswitch,tswitch,itrig,
+     *                   trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                   num_dims,work,scratch,xt,myid,numprocs,locnx,locnz,
+     *                   comm,twoslice,subslice)
+     
+      if( myid .eq. 0 ) then
+       write(0,*) ' u transformed to wavenumber domain: ', tswitch,iswitch,itrig
+      endif
+     
+      itrig = 0      ! trig tables now computed and stored
+      
+      call transform3d (v,v_cplx(1,1,1,N),nx,ny,nz,iswitch,tswitch,itrig,
+     *                   trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                   num_dims,work,scratch,xt,myid,numprocs,locnx,locnz,
+     *                   comm,twoslice,subslice)
+      if( myid .eq. 0 ) then
+       write(0,*) ' v transformed to wavenumber domain: ', tswitch,iswitch,itrig
+      endif
+     
+      if( bc_flag .eq. 'zperiodic' ) then
+       tswitch='f'
+      elseif( bc_flag .eq. 'zslip' ) then
+       tswitch = 's'  
+      endif
+      
+      call transform3d (s1,s1_cplx(1,1,1,N),nx,ny,nz,iswitch,tswitch,itrig,
+     *                   trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                   num_dims,work,scratch,xt,myid,numprocs,locnx,locnz,
+     *                   comm,twoslice,subslice)
+      if( myid .eq. 0 ) then
+       write(0,*) ' s1 transformed to wavenumber domain: ', tswitch,iswitch,itrig
+      endif
+      
+      if( bc_flag .eq. 'zperiodic' ) then
+       tswitch='f'
+      elseif( bc_flag .eq. 'zslip' ) then
+       tswitch = 's'  
+      endif
+      
+      call transform3d (s2,s2_cplx(1,1,1,N),nx,ny,nz,iswitch,tswitch,itrig,
+     *                   trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                   num_dims,work,scratch,xt,myid,numprocs,locnx,locnz,
+     *                   comm,twoslice,subslice)
+      if( myid .eq. 0 ) then
+       write(0,*) ' s2 transformed to wavenumber domain: ', tswitch,iswitch,itrig
+      endif
+      
+C
+C     set tswitch to indicate type of z transform, and transform u & v & s1 
+C
+      if( bc_flag .eq. 'zperiodic' ) then
+       tswitch='f'
+      elseif( bc_flag .eq. 'zslip' ) then
+       tswitch = 's'   ! w=0 at top & bottom
+      endif
+      
+       call transform3d (w,w_cplx(1,1,1,N),nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,work,scratch,xt,myid,numprocs,locnx,locnz,
+     *                  comm,twoslice,subslice)
+
+      if( myid .eq. 0 ) then
+       write(0,*) ' w transformed to wavenumber domain: ', tswitch,iswitch,itrig
+      endif
+     
+      if( efactor .gt. 0 ) then
+       call add_noise(u_cplx,v_cplx,efactor,nx,ny,nz,num_dims,
+     *                wnx,wny,wnz,N,NM1,myid,numprocs,locnx,comm)
+      endif
+
+c
+c     Initialize forcing wavenumber array, to be called later in
+c
+      if( force_flag .eq. 'yesFourier' ) then      
+c        if( myid .eq. 0 ) then
+c         write(0,*) ''
+c         write(0,*) 'Initializing Fourier forcing  '
+c         write(0,*) ''
+c        endif
+        call initialize_user_fforcing (force_cplx,wnx,wny,wnz,f,g,rho_0,DGRAD,Rot,U0,
+     *                                    nx,ny,nyplanes,nz,locnx,Lx,Ly,Lz,
+     *                                    locnz,myid,numprocs,num_dims,ifax,ifay,ifaz,
+     *                                    wn,comm,twoslice,subslice,trigx,trigy,trigz,
+     *                                    work_P,scratch,bc_flag,work)
+      endif
+
+c
+c     initialize array pointers and time step method
+c
+      N=1
+      NM1=2
+      M=1
+      MM1=2
+      MM2=3
+      step_flag='euler'   ! startup method, no previous information known
+
+      call MPI_BARRIER(comm,ierr)
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/nonlin.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/nonlin.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/nonlin.f	(revision 6)
@@ -0,0 +1,206 @@
+	subroutine nonlin (scalars,u,v,w,pd,s1,s2,vortx,vorty,vortz,s2_u,s2_v,s2_w,
+     *                     Lx,Ly,Lz,U0,DGRAD,s1_scale,s2_scale,rho_0,ddz_s1,ddz_s2,
+     *                     Ri,Rot,beta,num_dims,nx,ny,locnz,myid,numprocs,comm,
+     *                     ddy_vels,Vg,istep,Xs1_bar,Xs2_bar)
+
+C------------------------------------------------------------------------
+C
+C  nonlin - Compute u cross omega and add the appropriate rotation
+c           rotation and buoyancy terms.
+c           Also compute s1 times (u,v,w), u dot grad s1_bar
+C
+C
+C	INPUT:  u,v,w,pd,s1,s2:               physical space values at gridpoints
+c               vortx,vorty,vortz           i,j and k components of vorticity
+c               Ri,Rot                dimensionless parameters
+c               nx,ny,locnz                 dimension parameters for local data space
+c               num_dims                    2(xz) or 3(xyz) z positive up
+c               Lx,Ly,Lz                    dimensional domain sizes
+c               U0,DGRAD,s1_scale,s2_scale,rho_0       dimensional scaling values
+c
+C	OUTPUT:
+c       ddz_s1                                                    d/dz rho_bar
+c       s1*u, s1*v, s1*w                                          overwritten into the vorticity arrays
+c       (w*ddz)                                                   overwritten into the "s1" array
+
+c       s2*u, s2*v, s2*w                                          overwritten into the XXX arrays
+c       XXX                                                       overwritten into the "s2" array
+
+c       (T1 + Rot*v - u d/dx rho_bar - d/dx p_bar)                overwritten into the "u" array
+c       (T2 - Rot*u - v d/dy rho_bar - d/dy p_bar)                overwritten into the "v" array
+c       (T3 - Ri*pd)                                              overwritten into the "w" array
+C	where T is the cross product of velocity and vorticity 
+C       with components <T1,T2,T3>
+C
+C----------------------------------------------------------------------
+
+        implicit none
+        integer i,j,k,myid,numprocs,comm,kend,ierr,istep
+        integer nx,ny,nz,locnz,num_dims,nyplanes
+c       Physical space decomposition: local portion in z direction
+        real u(nx+2,ny+1,locnz+1),v(nx+2,ny+1,locnz+1)
+        real w(nx+2,ny+1,locnz+1),s1(nx+2,ny+1,locnz+1)
+        real s2(nx+2,ny+1,locnz+1)
+        real pd(nx+2,ny+1,locnz+1)
+        real vortx(nx+2,ny+1,locnz+1),vorty(nx+2,ny+1,locnz+1)
+        real vortz(nx+2,ny+1,locnz+1)
+        real s2_u(nx+2,ny+1,locnz+1),s2_v(nx+2,ny+1,locnz+1)
+        real s2_w(nx+2,ny+1,locnz+1)
+        real ddz_s1(nx+2,ny+1,locnz+1)
+        real ddz_s2(nx+2,ny+1,locnz+1)
+        real Ri,Rot,beta
+        real tmp1,tmp2,tmp3,x,y,z,dx,dy,dz
+        real Lx,Ly,Lz,U0,DGRAD,rho_0,s1_bar,ds1dx,ds1dy,ds1dz,g2s1b,dpdx,dpdy
+        real s1_scale,s2_scale,s2_bar,ds2dx,ds2dy,ds2dz,g2s2b,p_bar_x,p_bar_y
+        character*2 scalars
+        integer NXMAX
+        parameter(NXMAX=2048)
+        real f_of_x(NXMAX),window,x0,xscale
+        real ddy_vels(nx+2,ny+1,locnz+1,3),Vg(nx+2,locnz+1,3)
+        real Xs1_bar(nx+2,locnz+1,4), Xs2_bar(nx+2,locnz+1,4)
+
+#ifdef verbose
+        if(myid == 0) write(0,*) 'hello world from NONLIN'
+#endif
+
+c   set up beta plane functions w/ transition layer at left edge
+c        x0 = 0.95*Lx    !for transition layer at right edge
+c        window = -tanh( (x-x0)/(xscale) )   !for transition layer at right edge
+     
+        if( istep == 0 .and. myid==0 ) then
+         if( nx .gt. NXMAX ) then
+          print*, 'nonlin.f:  resize NMAX for large nx values '
+          stop
+         endif
+        endif
+        
+        dx=Lx/float(nx)        
+        x0 = 0.05*Lx    !for transition layer at left edge
+        xscale = Lx/50.
+        do i=1,nx
+         x=(i-1.)*dx   ! x in [m]         
+         window = -tanh(-(x-x0)/(xscale) )   !for transition layer at left edge
+         f_of_x(i) = Rot*( 1. + beta*(x/Lz - Lx/(2.*Lz))*window)
+        enddo
+        
+        if( istep == 0 .and. myid==0 ) then
+         open(1,file='output/coriolis_values')
+          do i=1,nx
+           write(1,*) (i-1.)*dx, f_of_x(i)*U0/Lz, -tanh(-(x-x0)/(xscale) )
+          enddo
+         close(1)
+        endif
+
+        if( num_dims .eq. 2 ) then
+         nyplanes=1
+        elseif( num_dims .eq. 3 ) then
+         nyplanes=ny
+        endif
+
+        if( myid .eq. numprocs-1 ) then
+         kend = locnz+1
+        else
+         kend=locnz
+        endif
+
+        dx=Lx/float(nx)
+        dy=Ly/float(nyplanes)
+        dz=Lz/float(locnz*numprocs)
+
+        if( Ri .gt. 0 ) then
+         call equation_of_state(scalars, s1, s2, 
+     &                          s1_scale, s2_scale,
+     &                          nx, ny, locnz, rho_0, DGRAD,
+     &                          myid, numprocs, Lx, Ly, Lz, pd,
+     &                          Xs1_bar, Xs2_bar)
+        endif
+
+	do k = 1,kend
+         z=(myid*locnz + k - 1.)*dz/Lz   ! dimensionless
+         do j = 1,nyplanes
+          y=(j-1.)*dy/Lz
+          do i = 1,nx
+           x=(i-1.)*dx/Lz
+
+C  Calculate local s1_bar, its gradient etc.
+c           call s1_bar_func(x,y,z,s1_bar,ds1dx,ds1dy,ds1dz,g2s1b,Lz,s1_scale)
+c  just read the saved values instead
+           s1_bar = Xs1_bar(i,k,1)
+           ds1dx = Xs1_bar(i,k,2)
+           ds1dy = 0.0
+           ds1dz = Xs1_bar(i,k,3)
+           g2s1b = Xs1_bar(i,k,4)
+
+C  Compute the cross product of velocity and vorticity and add
+C  the rotational, buoyancy and p_bar gradient terms. Store in tmp variables.
+
+           tmp1 = ( v(i,j,k)*vortz(i,j,k) - w(i,j,k)*vorty(i,j,k) )
+     *            + f_of_x(i)*v(i,j,k) 
+           tmp2 = ( w(i,j,k)*vortx(i,j,k) - u(i,j,k)*vortz(i,j,k) )
+     *            - f_of_x(i)*u(i,j,k) 
+           tmp3 = ( u(i,j,k)*vorty(i,j,k) - v(i,j,k)*vortx(i,j,k) )
+     *                - Ri*pd(i,j,k)  
+     
+c   for POMME runs, we are solving for the perturbations about a geostrophic
+c   background state ----> some extra terms appear, add them in here:
+c          ddy_vels(:,:,:,1-3) = u_y, v_y, w_y
+c          Vg(:,:,1) = Vg, Vg(:,:,2) = Vg_x, Vg(:,:,1) = Vg_y
+       if(ny.gt.0) then
+           tmp1 = tmp1 - Vg(i,k,1)*ddy_vels(i,j,k,1)
+           tmp2 = tmp2 - Vg(i,k,1)*ddy_vels(i,j,k,2)  
+           tmp3 = tmp3 - Vg(i,k,1)*ddy_vels(i,j,k,3)
+       endif
+       tmp2 = tmp2  - u(i,j,k)*Vg(i,k,2) - w(i,j,k)*Vg(i,k,3)
+
+
+C  Compute the products of density and velocity and storing the results
+C  where the vorticity terms used to be
+
+           vortx(i,j,k) = u(i,j,k)*s1(i,j,k)
+           vorty(i,j,k) = ( v(i,j,k) + Vg(i,k,1) )*s1(i,j,k)  ! adv by total velocity
+           vortz(i,j,k) = w(i,j,k)*s1(i,j,k)
+
+C  Overwrite s1 array with -u dot grad s1_bar 
+
+           s1(i,j,k) = -( u(i,j,k)*ds1dx + v(i,j,k)*ds1dy + w(i,j,k)*ds1dz )
+
+c  Save d/dz s1_bar
+    
+          ddz_s1(i,j,k) = ds1dz
+
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+c begin scalar (2) calculations
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+
+C  Calculate local s2_bar, its gradient and x,y derivs of p_bar
+c          call s2_bar_func(x,y,z,s2_bar,ds2dx,ds2dy,ds2dz,g2s2b,Lz,s2_scale)
+c  just read the saved values instead
+           s2_bar = Xs2_bar(i,k,1)
+           ds2dx = Xs2_bar(i,k,2)
+           ds2dy = 0.0
+           ds2dz = Xs2_bar(i,k,3)
+           g2s2b = Xs2_bar(i,k,4)
+           
+           s2_u(i,j,k) = u(i,j,k) * s2(i,j,k)
+           s2_v(i,j,k) = ( v(i,j,k) + Vg(i,k,1) )*s2(i,j,k)  ! adv by total velocity
+           s2_w(i,j,k) = w(i,j,k) * s2(i,j,k)
+
+           s2(i,j,k) = -( u(i,j,k)*ds2dx + v(i,j,k)*ds2dy +w(i,j,k)*ds2dz )
+
+           ddz_s2(i,j,k) = ds2dz
+
+C  Now we can safely overwrite the u, v, w arrays with the cross product
+C  of velocity and vorticity + buoyancy + rotation 
+
+           u(i,j,k) = tmp1
+            v(i,j,k) = tmp2
+             if(myid==0 ) write(65,*) s1_bar*s1_scale,s2_bar*s2_scale
+
+          enddo
+         enddo
+        enddo
+
+
+        call MPI_BARRIER(comm,ierr)
+        return
+        end
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/output_control
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/output_control	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/output_control	(revision 6)
@@ -0,0 +1,33 @@
+# usage:
+# (x, y, z), t_write_all, filename_root
+#
+# 	(x, y, z) -> the data you want to see
+#       You can specify all the data in the range of the problem 
+#       using '*' as a wildcard. You can specify a range using ':'.
+#       For example, (*,*,10) represents the xy plane at z=10.
+#       (8:16,*,*) represents the line of x ranging between 8
+#       and 16 inclusively. You can also combine these, such as:
+#       (16:*,*) to represent the data from 16 to the end in the x
+#       direction, and all of the data in the y and z directions.
+#
+# 	t_write_all -> how often you want to see it (in secs)
+#       This can be an integer representing the number of seconds,
+#       or an integer*dt representing the number of timesteps.
+#
+# 	filename_root -> root of the filename you want the output sent to.
+#       For example, cfd3D will be used to generate outputfiles named
+#       "cfd3D_XXXXXX" where XXXXXX is an integer representing the timestep
+#       of the current output. All 3D output will be put in a directory
+#       called output/3D/, so its a good idea to give every output line below
+#       a unique filename root.
+
+# The entire cube of data, reported every 5 timesteps.
+# (*, *, *), 5*dt , cfd_3D
+
+# Samples:
+
+# The xy plane at z=10, output every 50 timesteps. 
+(*,1,*),10*dt, cfd_2D
+
+# The line of data for 8<=x<=16 within the planes y=1 and z=10,
+# output every 10 timesteps.
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/pomme.h
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/pomme.h	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/pomme.h	(revision 6)
@@ -0,0 +1,16 @@
+c     pomme.h -- include this file when pomme data variables are needed
+
+c
+c     Extra variables added for POMME initial conditions and forcing
+c     each processor will read/store the global data
+
+      integer m1,m2,m3,mt,nxmax
+      parameter(m1=141*2-1,m3=66,mt=68,nxmax=2048)  
+      real Temperature(m1,m3),Salinity(m1,m3),Vgeo(m1,m3)
+      real xlat(m1),depth(m3),L_x,mixed_layer_depth
+      real xi(m1),zi(m3),zi_geo(m3),ti(mt)
+      complex stress_complex(nxmax)
+      real stress_x(m1,mt),stress_y(m1,mt)
+      common /POMME_R/Temperature,Salinity,Vgeo,xlat,depth,
+     *        xi,zi,zi_geo,ti,stress_x,stress_y,stress_complex,
+     *        mixed_layer_depth
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/pomme_TS_ascii
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/pomme_TS_ascii	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/pomme_TS_ascii	(revision 6)
@@ -0,0 +1,18546 @@
+   3.1000000e+01   2.5103554e+00   3.4896107e+01
+   3.1000000e+01   2.5061901e+00   3.4902207e+01
+   3.1000000e+01   2.5121488e+00   3.4907306e+01
+   3.1000000e+01   2.5413554e+00   3.4914521e+01
+   3.1000000e+01   2.5794959e+00   3.4919405e+01
+   3.1000000e+01   2.6451405e+00   3.4928736e+01
+   3.1000000e+01   2.7416281e+00   3.4940488e+01
+   3.1000000e+01   2.8990331e+00   3.4952802e+01
+   3.1000000e+01   3.0880496e+00   3.4961322e+01
+   3.1000000e+01   3.3536529e+00   3.4973281e+01
+   3.1000000e+01   3.5827603e+00   3.4972736e+01
+   3.1000000e+01   3.8425455e+00   3.4984074e+01
+   3.1000000e+01   4.3142231e+00   3.5036645e+01
+   3.1000000e+01   5.2460165e+00   3.5170777e+01
+   3.1000000e+01   6.6648926e+00   3.5382711e+01
+   3.1000000e+01   8.2569008e+00   3.5621149e+01
+   3.1000000e+01   9.2870413e+00   3.5722876e+01
+   3.1000000e+01   9.5328760e+00   3.5630785e+01
+   3.1000000e+01   9.9026364e+00   3.5537066e+01
+   3.1000000e+01   1.0298083e+01   3.5480702e+01
+   3.1000000e+01   1.0770826e+01   3.5489091e+01
+   3.1000000e+01   1.1255678e+01   3.5531455e+01
+   3.1000000e+01   1.1602421e+01   3.5566000e+01
+   3.1000000e+01   1.1914041e+01   3.5601397e+01
+   3.1000000e+01   1.2147298e+01   3.5626901e+01
+   3.1000000e+01   1.2343058e+01   3.5648785e+01
+   3.1000000e+01   1.2494471e+01   3.5664835e+01
+   3.1000000e+01   1.2597438e+01   3.5676273e+01
+   3.1000000e+01   1.2688149e+01   3.5686380e+01
+   3.1000000e+01   1.2785116e+01   3.5697636e+01
+   3.1000000e+01   1.2848306e+01   3.5705074e+01
+   3.1000000e+01   1.2914322e+01   3.5711992e+01
+   3.1000000e+01   1.3001628e+01   3.5721826e+01
+   3.1000000e+01   1.3051289e+01   3.5725025e+01
+   3.1000000e+01   1.3089132e+01   3.5727711e+01
+   3.1000000e+01   1.3142140e+01   3.5735612e+01
+   3.1000000e+01   1.3179091e+01   3.5738893e+01
+   3.1000000e+01   1.3225289e+01   3.5744364e+01
+   3.1000000e+01   1.3285380e+01   3.5750000e+01
+   3.1000000e+01   1.3351380e+01   3.5760339e+01
+   3.1000000e+01   1.3413512e+01   3.5768570e+01
+   3.1000000e+01   1.3485198e+01   3.5776364e+01
+   3.1000000e+01   1.3539636e+01   3.5778083e+01
+   3.1000000e+01   1.3586083e+01   3.5781620e+01
+   3.1000000e+01   1.3649860e+01   3.5788785e+01
+   3.1000000e+01   1.3724041e+01   3.5795174e+01
+   3.1000000e+01   1.3795636e+01   3.5799347e+01
+   3.1000000e+01   1.3896884e+01   3.5810504e+01
+   3.1000000e+01   1.4007802e+01   3.5819636e+01
+   3.1000000e+01   1.4119207e+01   3.5823149e+01
+   3.1000000e+01   1.4275008e+01   3.5831579e+01
+   3.1000000e+01   1.4495909e+01   3.5833537e+01
+   3.1000000e+01   1.4732562e+01   3.5837397e+01
+   3.1000000e+01   1.4997446e+01   3.5833347e+01
+   3.1000000e+01   1.5706603e+01   3.5837281e+01
+   3.1000000e+01   1.6613545e+01   3.5844116e+01
+   3.1000000e+01   1.7261298e+01   3.5850289e+01
+   3.1000000e+01   1.8017446e+01   3.5853281e+01
+   3.1000000e+01   1.8879421e+01   3.5867727e+01
+   3.1000000e+01   1.9534612e+01   3.5871678e+01
+   3.1000000e+01   1.9774289e+01   3.5868719e+01
+   3.1000000e+01   1.9845992e+01   3.5868760e+01
+   3.1000000e+01   1.9857645e+01   3.5869248e+01
+   3.1000000e+01   1.9858744e+01   3.5869810e+01
+   3.1000000e+01   1.9851843e+01   3.5868702e+01
+   3.1000000e+01   1.9795959e+01   3.5873008e+01
+   3.1050000e+01   2.5103554e+00   3.4896107e+01
+   3.1050000e+01   2.5061901e+00   3.4902207e+01
+   3.1050000e+01   2.5121488e+00   3.4907306e+01
+   3.1050000e+01   2.5413554e+00   3.4914521e+01
+   3.1050000e+01   2.5794959e+00   3.4919405e+01
+   3.1050000e+01   2.6451405e+00   3.4928736e+01
+   3.1050000e+01   2.7416281e+00   3.4940488e+01
+   3.1050000e+01   2.8990331e+00   3.4952802e+01
+   3.1050000e+01   3.0880496e+00   3.4961322e+01
+   3.1050000e+01   3.3536529e+00   3.4973281e+01
+   3.1050000e+01   3.5827603e+00   3.4972736e+01
+   3.1050000e+01   3.8425455e+00   3.4984074e+01
+   3.1050000e+01   4.3142231e+00   3.5036645e+01
+   3.1050000e+01   5.2460165e+00   3.5170777e+01
+   3.1050000e+01   6.6648926e+00   3.5382711e+01
+   3.1050000e+01   8.2569008e+00   3.5621149e+01
+   3.1050000e+01   9.2870413e+00   3.5722876e+01
+   3.1050000e+01   9.5328760e+00   3.5630785e+01
+   3.1050000e+01   9.9026364e+00   3.5537066e+01
+   3.1050000e+01   1.0298083e+01   3.5480702e+01
+   3.1050000e+01   1.0770826e+01   3.5489091e+01
+   3.1050000e+01   1.1255678e+01   3.5531455e+01
+   3.1050000e+01   1.1602421e+01   3.5566000e+01
+   3.1050000e+01   1.1914041e+01   3.5601397e+01
+   3.1050000e+01   1.2147298e+01   3.5626901e+01
+   3.1050000e+01   1.2343058e+01   3.5648785e+01
+   3.1050000e+01   1.2494471e+01   3.5664835e+01
+   3.1050000e+01   1.2597438e+01   3.5676273e+01
+   3.1050000e+01   1.2688149e+01   3.5686380e+01
+   3.1050000e+01   1.2785116e+01   3.5697636e+01
+   3.1050000e+01   1.2848306e+01   3.5705074e+01
+   3.1050000e+01   1.2914322e+01   3.5711992e+01
+   3.1050000e+01   1.3001628e+01   3.5721826e+01
+   3.1050000e+01   1.3051289e+01   3.5725025e+01
+   3.1050000e+01   1.3089132e+01   3.5727711e+01
+   3.1050000e+01   1.3142140e+01   3.5735612e+01
+   3.1050000e+01   1.3179091e+01   3.5738893e+01
+   3.1050000e+01   1.3225289e+01   3.5744364e+01
+   3.1050000e+01   1.3285380e+01   3.5750000e+01
+   3.1050000e+01   1.3351380e+01   3.5760339e+01
+   3.1050000e+01   1.3413512e+01   3.5768570e+01
+   3.1050000e+01   1.3485198e+01   3.5776364e+01
+   3.1050000e+01   1.3539636e+01   3.5778083e+01
+   3.1050000e+01   1.3586083e+01   3.5781620e+01
+   3.1050000e+01   1.3649860e+01   3.5788785e+01
+   3.1050000e+01   1.3724041e+01   3.5795174e+01
+   3.1050000e+01   1.3795636e+01   3.5799347e+01
+   3.1050000e+01   1.3896884e+01   3.5810504e+01
+   3.1050000e+01   1.4007802e+01   3.5819636e+01
+   3.1050000e+01   1.4119207e+01   3.5823149e+01
+   3.1050000e+01   1.4275008e+01   3.5831579e+01
+   3.1050000e+01   1.4495909e+01   3.5833537e+01
+   3.1050000e+01   1.4732562e+01   3.5837397e+01
+   3.1050000e+01   1.4997446e+01   3.5833347e+01
+   3.1050000e+01   1.5706603e+01   3.5837281e+01
+   3.1050000e+01   1.6613545e+01   3.5844116e+01
+   3.1050000e+01   1.7261298e+01   3.5850289e+01
+   3.1050000e+01   1.8017446e+01   3.5853281e+01
+   3.1050000e+01   1.8879421e+01   3.5867727e+01
+   3.1050000e+01   1.9534612e+01   3.5871678e+01
+   3.1050000e+01   1.9774289e+01   3.5868719e+01
+   3.1050000e+01   1.9845992e+01   3.5868760e+01
+   3.1050000e+01   1.9857645e+01   3.5869248e+01
+   3.1050000e+01   1.9858744e+01   3.5869810e+01
+   3.1050000e+01   1.9851843e+01   3.5868702e+01
+   3.1050000e+01   1.9795959e+01   3.5873008e+01
+   3.1100000e+01   2.5103554e+00   3.4896107e+01
+   3.1100000e+01   2.5061901e+00   3.4902207e+01
+   3.1100000e+01   2.5121488e+00   3.4907306e+01
+   3.1100000e+01   2.5413554e+00   3.4914521e+01
+   3.1100000e+01   2.5794959e+00   3.4919405e+01
+   3.1100000e+01   2.6451405e+00   3.4928736e+01
+   3.1100000e+01   2.7416281e+00   3.4940488e+01
+   3.1100000e+01   2.8990331e+00   3.4952802e+01
+   3.1100000e+01   3.0880496e+00   3.4961322e+01
+   3.1100000e+01   3.3536529e+00   3.4973281e+01
+   3.1100000e+01   3.5827603e+00   3.4972736e+01
+   3.1100000e+01   3.8425455e+00   3.4984074e+01
+   3.1100000e+01   4.3142231e+00   3.5036645e+01
+   3.1100000e+01   5.2460165e+00   3.5170777e+01
+   3.1100000e+01   6.6648926e+00   3.5382711e+01
+   3.1100000e+01   8.2569008e+00   3.5621149e+01
+   3.1100000e+01   9.2870413e+00   3.5722876e+01
+   3.1100000e+01   9.5328760e+00   3.5630785e+01
+   3.1100000e+01   9.9026364e+00   3.5537066e+01
+   3.1100000e+01   1.0298083e+01   3.5480702e+01
+   3.1100000e+01   1.0770826e+01   3.5489091e+01
+   3.1100000e+01   1.1255678e+01   3.5531455e+01
+   3.1100000e+01   1.1602421e+01   3.5566000e+01
+   3.1100000e+01   1.1914041e+01   3.5601397e+01
+   3.1100000e+01   1.2147298e+01   3.5626901e+01
+   3.1100000e+01   1.2343058e+01   3.5648785e+01
+   3.1100000e+01   1.2494471e+01   3.5664835e+01
+   3.1100000e+01   1.2597438e+01   3.5676273e+01
+   3.1100000e+01   1.2688149e+01   3.5686380e+01
+   3.1100000e+01   1.2785116e+01   3.5697636e+01
+   3.1100000e+01   1.2848306e+01   3.5705074e+01
+   3.1100000e+01   1.2914322e+01   3.5711992e+01
+   3.1100000e+01   1.3001628e+01   3.5721826e+01
+   3.1100000e+01   1.3051289e+01   3.5725025e+01
+   3.1100000e+01   1.3089132e+01   3.5727711e+01
+   3.1100000e+01   1.3142140e+01   3.5735612e+01
+   3.1100000e+01   1.3179091e+01   3.5738893e+01
+   3.1100000e+01   1.3225289e+01   3.5744364e+01
+   3.1100000e+01   1.3285380e+01   3.5750000e+01
+   3.1100000e+01   1.3351380e+01   3.5760339e+01
+   3.1100000e+01   1.3413512e+01   3.5768570e+01
+   3.1100000e+01   1.3485198e+01   3.5776364e+01
+   3.1100000e+01   1.3539636e+01   3.5778083e+01
+   3.1100000e+01   1.3586083e+01   3.5781620e+01
+   3.1100000e+01   1.3649860e+01   3.5788785e+01
+   3.1100000e+01   1.3724041e+01   3.5795174e+01
+   3.1100000e+01   1.3795636e+01   3.5799347e+01
+   3.1100000e+01   1.3896884e+01   3.5810504e+01
+   3.1100000e+01   1.4007802e+01   3.5819636e+01
+   3.1100000e+01   1.4119207e+01   3.5823149e+01
+   3.1100000e+01   1.4275008e+01   3.5831579e+01
+   3.1100000e+01   1.4495909e+01   3.5833537e+01
+   3.1100000e+01   1.4732562e+01   3.5837397e+01
+   3.1100000e+01   1.4997446e+01   3.5833347e+01
+   3.1100000e+01   1.5706603e+01   3.5837281e+01
+   3.1100000e+01   1.6613545e+01   3.5844116e+01
+   3.1100000e+01   1.7261298e+01   3.5850289e+01
+   3.1100000e+01   1.8017446e+01   3.5853281e+01
+   3.1100000e+01   1.8879421e+01   3.5867727e+01
+   3.1100000e+01   1.9534612e+01   3.5871678e+01
+   3.1100000e+01   1.9774289e+01   3.5868719e+01
+   3.1100000e+01   1.9845992e+01   3.5868760e+01
+   3.1100000e+01   1.9857645e+01   3.5869248e+01
+   3.1100000e+01   1.9858744e+01   3.5869810e+01
+   3.1100000e+01   1.9851843e+01   3.5868702e+01
+   3.1100000e+01   1.9795959e+01   3.5873008e+01
+   3.1150000e+01   2.5103554e+00   3.4896107e+01
+   3.1150000e+01   2.5061901e+00   3.4902207e+01
+   3.1150000e+01   2.5121488e+00   3.4907306e+01
+   3.1150000e+01   2.5413554e+00   3.4914521e+01
+   3.1150000e+01   2.5794959e+00   3.4919405e+01
+   3.1150000e+01   2.6451405e+00   3.4928736e+01
+   3.1150000e+01   2.7416281e+00   3.4940488e+01
+   3.1150000e+01   2.8990331e+00   3.4952802e+01
+   3.1150000e+01   3.0880496e+00   3.4961322e+01
+   3.1150000e+01   3.3536529e+00   3.4973281e+01
+   3.1150000e+01   3.5827603e+00   3.4972736e+01
+   3.1150000e+01   3.8425455e+00   3.4984074e+01
+   3.1150000e+01   4.3142231e+00   3.5036645e+01
+   3.1150000e+01   5.2460165e+00   3.5170777e+01
+   3.1150000e+01   6.6648926e+00   3.5382711e+01
+   3.1150000e+01   8.2569008e+00   3.5621149e+01
+   3.1150000e+01   9.2870413e+00   3.5722876e+01
+   3.1150000e+01   9.5328760e+00   3.5630785e+01
+   3.1150000e+01   9.9026364e+00   3.5537066e+01
+   3.1150000e+01   1.0298083e+01   3.5480702e+01
+   3.1150000e+01   1.0770826e+01   3.5489091e+01
+   3.1150000e+01   1.1255678e+01   3.5531455e+01
+   3.1150000e+01   1.1602421e+01   3.5566000e+01
+   3.1150000e+01   1.1914041e+01   3.5601397e+01
+   3.1150000e+01   1.2147298e+01   3.5626901e+01
+   3.1150000e+01   1.2343058e+01   3.5648785e+01
+   3.1150000e+01   1.2494471e+01   3.5664835e+01
+   3.1150000e+01   1.2597438e+01   3.5676273e+01
+   3.1150000e+01   1.2688149e+01   3.5686380e+01
+   3.1150000e+01   1.2785116e+01   3.5697636e+01
+   3.1150000e+01   1.2848306e+01   3.5705074e+01
+   3.1150000e+01   1.2914322e+01   3.5711992e+01
+   3.1150000e+01   1.3001628e+01   3.5721826e+01
+   3.1150000e+01   1.3051289e+01   3.5725025e+01
+   3.1150000e+01   1.3089132e+01   3.5727711e+01
+   3.1150000e+01   1.3142140e+01   3.5735612e+01
+   3.1150000e+01   1.3179091e+01   3.5738893e+01
+   3.1150000e+01   1.3225289e+01   3.5744364e+01
+   3.1150000e+01   1.3285380e+01   3.5750000e+01
+   3.1150000e+01   1.3351380e+01   3.5760339e+01
+   3.1150000e+01   1.3413512e+01   3.5768570e+01
+   3.1150000e+01   1.3485198e+01   3.5776364e+01
+   3.1150000e+01   1.3539636e+01   3.5778083e+01
+   3.1150000e+01   1.3586083e+01   3.5781620e+01
+   3.1150000e+01   1.3649860e+01   3.5788785e+01
+   3.1150000e+01   1.3724041e+01   3.5795174e+01
+   3.1150000e+01   1.3795636e+01   3.5799347e+01
+   3.1150000e+01   1.3896884e+01   3.5810504e+01
+   3.1150000e+01   1.4007802e+01   3.5819636e+01
+   3.1150000e+01   1.4119207e+01   3.5823149e+01
+   3.1150000e+01   1.4275008e+01   3.5831579e+01
+   3.1150000e+01   1.4495909e+01   3.5833537e+01
+   3.1150000e+01   1.4732562e+01   3.5837397e+01
+   3.1150000e+01   1.4997446e+01   3.5833347e+01
+   3.1150000e+01   1.5706603e+01   3.5837281e+01
+   3.1150000e+01   1.6613545e+01   3.5844116e+01
+   3.1150000e+01   1.7261298e+01   3.5850289e+01
+   3.1150000e+01   1.8017446e+01   3.5853281e+01
+   3.1150000e+01   1.8879421e+01   3.5867727e+01
+   3.1150000e+01   1.9534612e+01   3.5871678e+01
+   3.1150000e+01   1.9774289e+01   3.5868719e+01
+   3.1150000e+01   1.9845992e+01   3.5868760e+01
+   3.1150000e+01   1.9857645e+01   3.5869248e+01
+   3.1150000e+01   1.9858744e+01   3.5869810e+01
+   3.1150000e+01   1.9851843e+01   3.5868702e+01
+   3.1150000e+01   1.9795959e+01   3.5873008e+01
+   3.1200000e+01   2.5103554e+00   3.4896107e+01
+   3.1200000e+01   2.5061901e+00   3.4902207e+01
+   3.1200000e+01   2.5121488e+00   3.4907306e+01
+   3.1200000e+01   2.5413554e+00   3.4914521e+01
+   3.1200000e+01   2.5794959e+00   3.4919405e+01
+   3.1200000e+01   2.6451405e+00   3.4928736e+01
+   3.1200000e+01   2.7416281e+00   3.4940488e+01
+   3.1200000e+01   2.8990331e+00   3.4952802e+01
+   3.1200000e+01   3.0880496e+00   3.4961322e+01
+   3.1200000e+01   3.3536529e+00   3.4973281e+01
+   3.1200000e+01   3.5827603e+00   3.4972736e+01
+   3.1200000e+01   3.8425455e+00   3.4984074e+01
+   3.1200000e+01   4.3142231e+00   3.5036645e+01
+   3.1200000e+01   5.2460165e+00   3.5170777e+01
+   3.1200000e+01   6.6648926e+00   3.5382711e+01
+   3.1200000e+01   8.2569008e+00   3.5621149e+01
+   3.1200000e+01   9.2870413e+00   3.5722876e+01
+   3.1200000e+01   9.5328760e+00   3.5630785e+01
+   3.1200000e+01   9.9026364e+00   3.5537066e+01
+   3.1200000e+01   1.0298083e+01   3.5480702e+01
+   3.1200000e+01   1.0770826e+01   3.5489091e+01
+   3.1200000e+01   1.1255678e+01   3.5531455e+01
+   3.1200000e+01   1.1602421e+01   3.5566000e+01
+   3.1200000e+01   1.1914041e+01   3.5601397e+01
+   3.1200000e+01   1.2147298e+01   3.5626901e+01
+   3.1200000e+01   1.2343058e+01   3.5648785e+01
+   3.1200000e+01   1.2494471e+01   3.5664835e+01
+   3.1200000e+01   1.2597438e+01   3.5676273e+01
+   3.1200000e+01   1.2688149e+01   3.5686380e+01
+   3.1200000e+01   1.2785116e+01   3.5697636e+01
+   3.1200000e+01   1.2848306e+01   3.5705074e+01
+   3.1200000e+01   1.2914322e+01   3.5711992e+01
+   3.1200000e+01   1.3001628e+01   3.5721826e+01
+   3.1200000e+01   1.3051289e+01   3.5725025e+01
+   3.1200000e+01   1.3089132e+01   3.5727711e+01
+   3.1200000e+01   1.3142140e+01   3.5735612e+01
+   3.1200000e+01   1.3179091e+01   3.5738893e+01
+   3.1200000e+01   1.3225289e+01   3.5744364e+01
+   3.1200000e+01   1.3285380e+01   3.5750000e+01
+   3.1200000e+01   1.3351380e+01   3.5760339e+01
+   3.1200000e+01   1.3413512e+01   3.5768570e+01
+   3.1200000e+01   1.3485198e+01   3.5776364e+01
+   3.1200000e+01   1.3539636e+01   3.5778083e+01
+   3.1200000e+01   1.3586083e+01   3.5781620e+01
+   3.1200000e+01   1.3649860e+01   3.5788785e+01
+   3.1200000e+01   1.3724041e+01   3.5795174e+01
+   3.1200000e+01   1.3795636e+01   3.5799347e+01
+   3.1200000e+01   1.3896884e+01   3.5810504e+01
+   3.1200000e+01   1.4007802e+01   3.5819636e+01
+   3.1200000e+01   1.4119207e+01   3.5823149e+01
+   3.1200000e+01   1.4275008e+01   3.5831579e+01
+   3.1200000e+01   1.4495909e+01   3.5833537e+01
+   3.1200000e+01   1.4732562e+01   3.5837397e+01
+   3.1200000e+01   1.4997446e+01   3.5833347e+01
+   3.1200000e+01   1.5706603e+01   3.5837281e+01
+   3.1200000e+01   1.6613545e+01   3.5844116e+01
+   3.1200000e+01   1.7261298e+01   3.5850289e+01
+   3.1200000e+01   1.8017446e+01   3.5853281e+01
+   3.1200000e+01   1.8879421e+01   3.5867727e+01
+   3.1200000e+01   1.9534612e+01   3.5871678e+01
+   3.1200000e+01   1.9774289e+01   3.5868719e+01
+   3.1200000e+01   1.9845992e+01   3.5868760e+01
+   3.1200000e+01   1.9857645e+01   3.5869248e+01
+   3.1200000e+01   1.9858744e+01   3.5869810e+01
+   3.1200000e+01   1.9851843e+01   3.5868702e+01
+   3.1200000e+01   1.9795959e+01   3.5873008e+01
+   3.1250000e+01   2.5103554e+00   3.4896107e+01
+   3.1250000e+01   2.5061901e+00   3.4902207e+01
+   3.1250000e+01   2.5121488e+00   3.4907306e+01
+   3.1250000e+01   2.5413554e+00   3.4914521e+01
+   3.1250000e+01   2.5794959e+00   3.4919405e+01
+   3.1250000e+01   2.6451405e+00   3.4928736e+01
+   3.1250000e+01   2.7416281e+00   3.4940488e+01
+   3.1250000e+01   2.8990331e+00   3.4952802e+01
+   3.1250000e+01   3.0880496e+00   3.4961322e+01
+   3.1250000e+01   3.3536529e+00   3.4973281e+01
+   3.1250000e+01   3.5827603e+00   3.4972736e+01
+   3.1250000e+01   3.8425455e+00   3.4984074e+01
+   3.1250000e+01   4.3142231e+00   3.5036645e+01
+   3.1250000e+01   5.2460165e+00   3.5170777e+01
+   3.1250000e+01   6.6648926e+00   3.5382711e+01
+   3.1250000e+01   8.2569008e+00   3.5621149e+01
+   3.1250000e+01   9.2870413e+00   3.5722876e+01
+   3.1250000e+01   9.5328760e+00   3.5630785e+01
+   3.1250000e+01   9.9026364e+00   3.5537066e+01
+   3.1250000e+01   1.0298083e+01   3.5480702e+01
+   3.1250000e+01   1.0770826e+01   3.5489091e+01
+   3.1250000e+01   1.1255678e+01   3.5531455e+01
+   3.1250000e+01   1.1602421e+01   3.5566000e+01
+   3.1250000e+01   1.1914041e+01   3.5601397e+01
+   3.1250000e+01   1.2147298e+01   3.5626901e+01
+   3.1250000e+01   1.2343058e+01   3.5648785e+01
+   3.1250000e+01   1.2494471e+01   3.5664835e+01
+   3.1250000e+01   1.2597438e+01   3.5676273e+01
+   3.1250000e+01   1.2688149e+01   3.5686380e+01
+   3.1250000e+01   1.2785116e+01   3.5697636e+01
+   3.1250000e+01   1.2848306e+01   3.5705074e+01
+   3.1250000e+01   1.2914322e+01   3.5711992e+01
+   3.1250000e+01   1.3001628e+01   3.5721826e+01
+   3.1250000e+01   1.3051289e+01   3.5725025e+01
+   3.1250000e+01   1.3089132e+01   3.5727711e+01
+   3.1250000e+01   1.3142140e+01   3.5735612e+01
+   3.1250000e+01   1.3179091e+01   3.5738893e+01
+   3.1250000e+01   1.3225289e+01   3.5744364e+01
+   3.1250000e+01   1.3285380e+01   3.5750000e+01
+   3.1250000e+01   1.3351380e+01   3.5760339e+01
+   3.1250000e+01   1.3413512e+01   3.5768570e+01
+   3.1250000e+01   1.3485198e+01   3.5776364e+01
+   3.1250000e+01   1.3539636e+01   3.5778083e+01
+   3.1250000e+01   1.3586083e+01   3.5781620e+01
+   3.1250000e+01   1.3649860e+01   3.5788785e+01
+   3.1250000e+01   1.3724041e+01   3.5795174e+01
+   3.1250000e+01   1.3795636e+01   3.5799347e+01
+   3.1250000e+01   1.3896884e+01   3.5810504e+01
+   3.1250000e+01   1.4007802e+01   3.5819636e+01
+   3.1250000e+01   1.4119207e+01   3.5823149e+01
+   3.1250000e+01   1.4275008e+01   3.5831579e+01
+   3.1250000e+01   1.4495909e+01   3.5833537e+01
+   3.1250000e+01   1.4732562e+01   3.5837397e+01
+   3.1250000e+01   1.4997446e+01   3.5833347e+01
+   3.1250000e+01   1.5706603e+01   3.5837281e+01
+   3.1250000e+01   1.6613545e+01   3.5844116e+01
+   3.1250000e+01   1.7261298e+01   3.5850289e+01
+   3.1250000e+01   1.8017446e+01   3.5853281e+01
+   3.1250000e+01   1.8879421e+01   3.5867727e+01
+   3.1250000e+01   1.9534612e+01   3.5871678e+01
+   3.1250000e+01   1.9774289e+01   3.5868719e+01
+   3.1250000e+01   1.9845992e+01   3.5868760e+01
+   3.1250000e+01   1.9857645e+01   3.5869248e+01
+   3.1250000e+01   1.9858744e+01   3.5869810e+01
+   3.1250000e+01   1.9851843e+01   3.5868702e+01
+   3.1250000e+01   1.9795959e+01   3.5873008e+01
+   3.1300000e+01   2.5103554e+00   3.4896107e+01
+   3.1300000e+01   2.5061901e+00   3.4902207e+01
+   3.1300000e+01   2.5121488e+00   3.4907306e+01
+   3.1300000e+01   2.5413554e+00   3.4914521e+01
+   3.1300000e+01   2.5794959e+00   3.4919405e+01
+   3.1300000e+01   2.6451405e+00   3.4928736e+01
+   3.1300000e+01   2.7416281e+00   3.4940488e+01
+   3.1300000e+01   2.8990331e+00   3.4952802e+01
+   3.1300000e+01   3.0880496e+00   3.4961322e+01
+   3.1300000e+01   3.3536529e+00   3.4973281e+01
+   3.1300000e+01   3.5827603e+00   3.4972736e+01
+   3.1300000e+01   3.8425455e+00   3.4984074e+01
+   3.1300000e+01   4.3142231e+00   3.5036645e+01
+   3.1300000e+01   5.2460165e+00   3.5170777e+01
+   3.1300000e+01   6.6648926e+00   3.5382711e+01
+   3.1300000e+01   8.2569008e+00   3.5621149e+01
+   3.1300000e+01   9.2870413e+00   3.5722876e+01
+   3.1300000e+01   9.5328760e+00   3.5630785e+01
+   3.1300000e+01   9.9026364e+00   3.5537066e+01
+   3.1300000e+01   1.0298083e+01   3.5480702e+01
+   3.1300000e+01   1.0770826e+01   3.5489091e+01
+   3.1300000e+01   1.1255678e+01   3.5531455e+01
+   3.1300000e+01   1.1602421e+01   3.5566000e+01
+   3.1300000e+01   1.1914041e+01   3.5601397e+01
+   3.1300000e+01   1.2147298e+01   3.5626901e+01
+   3.1300000e+01   1.2343058e+01   3.5648785e+01
+   3.1300000e+01   1.2494471e+01   3.5664835e+01
+   3.1300000e+01   1.2597438e+01   3.5676273e+01
+   3.1300000e+01   1.2688149e+01   3.5686380e+01
+   3.1300000e+01   1.2785116e+01   3.5697636e+01
+   3.1300000e+01   1.2848306e+01   3.5705074e+01
+   3.1300000e+01   1.2914322e+01   3.5711992e+01
+   3.1300000e+01   1.3001628e+01   3.5721826e+01
+   3.1300000e+01   1.3051289e+01   3.5725025e+01
+   3.1300000e+01   1.3089132e+01   3.5727711e+01
+   3.1300000e+01   1.3142140e+01   3.5735612e+01
+   3.1300000e+01   1.3179091e+01   3.5738893e+01
+   3.1300000e+01   1.3225289e+01   3.5744364e+01
+   3.1300000e+01   1.3285380e+01   3.5750000e+01
+   3.1300000e+01   1.3351380e+01   3.5760339e+01
+   3.1300000e+01   1.3413512e+01   3.5768570e+01
+   3.1300000e+01   1.3485198e+01   3.5776364e+01
+   3.1300000e+01   1.3539636e+01   3.5778083e+01
+   3.1300000e+01   1.3586083e+01   3.5781620e+01
+   3.1300000e+01   1.3649860e+01   3.5788785e+01
+   3.1300000e+01   1.3724041e+01   3.5795174e+01
+   3.1300000e+01   1.3795636e+01   3.5799347e+01
+   3.1300000e+01   1.3896884e+01   3.5810504e+01
+   3.1300000e+01   1.4007802e+01   3.5819636e+01
+   3.1300000e+01   1.4119207e+01   3.5823149e+01
+   3.1300000e+01   1.4275008e+01   3.5831579e+01
+   3.1300000e+01   1.4495909e+01   3.5833537e+01
+   3.1300000e+01   1.4732562e+01   3.5837397e+01
+   3.1300000e+01   1.4997446e+01   3.5833347e+01
+   3.1300000e+01   1.5706603e+01   3.5837281e+01
+   3.1300000e+01   1.6613545e+01   3.5844116e+01
+   3.1300000e+01   1.7261298e+01   3.5850289e+01
+   3.1300000e+01   1.8017446e+01   3.5853281e+01
+   3.1300000e+01   1.8879421e+01   3.5867727e+01
+   3.1300000e+01   1.9534612e+01   3.5871678e+01
+   3.1300000e+01   1.9774289e+01   3.5868719e+01
+   3.1300000e+01   1.9845992e+01   3.5868760e+01
+   3.1300000e+01   1.9857645e+01   3.5869248e+01
+   3.1300000e+01   1.9858744e+01   3.5869810e+01
+   3.1300000e+01   1.9851843e+01   3.5868702e+01
+   3.1300000e+01   1.9795959e+01   3.5873008e+01
+   3.1350000e+01   2.5103554e+00   3.4896107e+01
+   3.1350000e+01   2.5061901e+00   3.4902207e+01
+   3.1350000e+01   2.5121488e+00   3.4907306e+01
+   3.1350000e+01   2.5413554e+00   3.4914521e+01
+   3.1350000e+01   2.5794959e+00   3.4919405e+01
+   3.1350000e+01   2.6451405e+00   3.4928736e+01
+   3.1350000e+01   2.7416281e+00   3.4940488e+01
+   3.1350000e+01   2.8990331e+00   3.4952802e+01
+   3.1350000e+01   3.0880496e+00   3.4961322e+01
+   3.1350000e+01   3.3536529e+00   3.4973281e+01
+   3.1350000e+01   3.5827603e+00   3.4972736e+01
+   3.1350000e+01   3.8425455e+00   3.4984074e+01
+   3.1350000e+01   4.3142231e+00   3.5036645e+01
+   3.1350000e+01   5.2460165e+00   3.5170777e+01
+   3.1350000e+01   6.6648926e+00   3.5382711e+01
+   3.1350000e+01   8.2569008e+00   3.5621149e+01
+   3.1350000e+01   9.2870413e+00   3.5722876e+01
+   3.1350000e+01   9.5328760e+00   3.5630785e+01
+   3.1350000e+01   9.9026364e+00   3.5537066e+01
+   3.1350000e+01   1.0298083e+01   3.5480702e+01
+   3.1350000e+01   1.0770826e+01   3.5489091e+01
+   3.1350000e+01   1.1255678e+01   3.5531455e+01
+   3.1350000e+01   1.1602421e+01   3.5566000e+01
+   3.1350000e+01   1.1914041e+01   3.5601397e+01
+   3.1350000e+01   1.2147298e+01   3.5626901e+01
+   3.1350000e+01   1.2343058e+01   3.5648785e+01
+   3.1350000e+01   1.2494471e+01   3.5664835e+01
+   3.1350000e+01   1.2597438e+01   3.5676273e+01
+   3.1350000e+01   1.2688149e+01   3.5686380e+01
+   3.1350000e+01   1.2785116e+01   3.5697636e+01
+   3.1350000e+01   1.2848306e+01   3.5705074e+01
+   3.1350000e+01   1.2914322e+01   3.5711992e+01
+   3.1350000e+01   1.3001628e+01   3.5721826e+01
+   3.1350000e+01   1.3051289e+01   3.5725025e+01
+   3.1350000e+01   1.3089132e+01   3.5727711e+01
+   3.1350000e+01   1.3142140e+01   3.5735612e+01
+   3.1350000e+01   1.3179091e+01   3.5738893e+01
+   3.1350000e+01   1.3225289e+01   3.5744364e+01
+   3.1350000e+01   1.3285380e+01   3.5750000e+01
+   3.1350000e+01   1.3351380e+01   3.5760339e+01
+   3.1350000e+01   1.3413512e+01   3.5768570e+01
+   3.1350000e+01   1.3485198e+01   3.5776364e+01
+   3.1350000e+01   1.3539636e+01   3.5778083e+01
+   3.1350000e+01   1.3586083e+01   3.5781620e+01
+   3.1350000e+01   1.3649860e+01   3.5788785e+01
+   3.1350000e+01   1.3724041e+01   3.5795174e+01
+   3.1350000e+01   1.3795636e+01   3.5799347e+01
+   3.1350000e+01   1.3896884e+01   3.5810504e+01
+   3.1350000e+01   1.4007802e+01   3.5819636e+01
+   3.1350000e+01   1.4119207e+01   3.5823149e+01
+   3.1350000e+01   1.4275008e+01   3.5831579e+01
+   3.1350000e+01   1.4495909e+01   3.5833537e+01
+   3.1350000e+01   1.4732562e+01   3.5837397e+01
+   3.1350000e+01   1.4997446e+01   3.5833347e+01
+   3.1350000e+01   1.5706603e+01   3.5837281e+01
+   3.1350000e+01   1.6613545e+01   3.5844116e+01
+   3.1350000e+01   1.7261298e+01   3.5850289e+01
+   3.1350000e+01   1.8017446e+01   3.5853281e+01
+   3.1350000e+01   1.8879421e+01   3.5867727e+01
+   3.1350000e+01   1.9534612e+01   3.5871678e+01
+   3.1350000e+01   1.9774289e+01   3.5868719e+01
+   3.1350000e+01   1.9845992e+01   3.5868760e+01
+   3.1350000e+01   1.9857645e+01   3.5869248e+01
+   3.1350000e+01   1.9858744e+01   3.5869810e+01
+   3.1350000e+01   1.9851843e+01   3.5868702e+01
+   3.1350000e+01   1.9795959e+01   3.5873008e+01
+   3.1400000e+01   2.5103554e+00   3.4896107e+01
+   3.1400000e+01   2.5061901e+00   3.4902207e+01
+   3.1400000e+01   2.5121488e+00   3.4907306e+01
+   3.1400000e+01   2.5413554e+00   3.4914521e+01
+   3.1400000e+01   2.5794959e+00   3.4919405e+01
+   3.1400000e+01   2.6451405e+00   3.4928736e+01
+   3.1400000e+01   2.7416281e+00   3.4940488e+01
+   3.1400000e+01   2.8990331e+00   3.4952802e+01
+   3.1400000e+01   3.0880496e+00   3.4961322e+01
+   3.1400000e+01   3.3536529e+00   3.4973281e+01
+   3.1400000e+01   3.5827603e+00   3.4972736e+01
+   3.1400000e+01   3.8425455e+00   3.4984074e+01
+   3.1400000e+01   4.3142231e+00   3.5036645e+01
+   3.1400000e+01   5.2460165e+00   3.5170777e+01
+   3.1400000e+01   6.6648926e+00   3.5382711e+01
+   3.1400000e+01   8.2569008e+00   3.5621149e+01
+   3.1400000e+01   9.2870413e+00   3.5722876e+01
+   3.1400000e+01   9.5328760e+00   3.5630785e+01
+   3.1400000e+01   9.9026364e+00   3.5537066e+01
+   3.1400000e+01   1.0298083e+01   3.5480702e+01
+   3.1400000e+01   1.0770826e+01   3.5489091e+01
+   3.1400000e+01   1.1255678e+01   3.5531455e+01
+   3.1400000e+01   1.1602421e+01   3.5566000e+01
+   3.1400000e+01   1.1914041e+01   3.5601397e+01
+   3.1400000e+01   1.2147298e+01   3.5626901e+01
+   3.1400000e+01   1.2343058e+01   3.5648785e+01
+   3.1400000e+01   1.2494471e+01   3.5664835e+01
+   3.1400000e+01   1.2597438e+01   3.5676273e+01
+   3.1400000e+01   1.2688149e+01   3.5686380e+01
+   3.1400000e+01   1.2785116e+01   3.5697636e+01
+   3.1400000e+01   1.2848306e+01   3.5705074e+01
+   3.1400000e+01   1.2914322e+01   3.5711992e+01
+   3.1400000e+01   1.3001628e+01   3.5721826e+01
+   3.1400000e+01   1.3051289e+01   3.5725025e+01
+   3.1400000e+01   1.3089132e+01   3.5727711e+01
+   3.1400000e+01   1.3142140e+01   3.5735612e+01
+   3.1400000e+01   1.3179091e+01   3.5738893e+01
+   3.1400000e+01   1.3225289e+01   3.5744364e+01
+   3.1400000e+01   1.3285380e+01   3.5750000e+01
+   3.1400000e+01   1.3351380e+01   3.5760339e+01
+   3.1400000e+01   1.3413512e+01   3.5768570e+01
+   3.1400000e+01   1.3485198e+01   3.5776364e+01
+   3.1400000e+01   1.3539636e+01   3.5778083e+01
+   3.1400000e+01   1.3586083e+01   3.5781620e+01
+   3.1400000e+01   1.3649860e+01   3.5788785e+01
+   3.1400000e+01   1.3724041e+01   3.5795174e+01
+   3.1400000e+01   1.3795636e+01   3.5799347e+01
+   3.1400000e+01   1.3896884e+01   3.5810504e+01
+   3.1400000e+01   1.4007802e+01   3.5819636e+01
+   3.1400000e+01   1.4119207e+01   3.5823149e+01
+   3.1400000e+01   1.4275008e+01   3.5831579e+01
+   3.1400000e+01   1.4495909e+01   3.5833537e+01
+   3.1400000e+01   1.4732562e+01   3.5837397e+01
+   3.1400000e+01   1.4997446e+01   3.5833347e+01
+   3.1400000e+01   1.5706603e+01   3.5837281e+01
+   3.1400000e+01   1.6613545e+01   3.5844116e+01
+   3.1400000e+01   1.7261298e+01   3.5850289e+01
+   3.1400000e+01   1.8017446e+01   3.5853281e+01
+   3.1400000e+01   1.8879421e+01   3.5867727e+01
+   3.1400000e+01   1.9534612e+01   3.5871678e+01
+   3.1400000e+01   1.9774289e+01   3.5868719e+01
+   3.1400000e+01   1.9845992e+01   3.5868760e+01
+   3.1400000e+01   1.9857645e+01   3.5869248e+01
+   3.1400000e+01   1.9858744e+01   3.5869810e+01
+   3.1400000e+01   1.9851843e+01   3.5868702e+01
+   3.1400000e+01   1.9795959e+01   3.5873008e+01
+   3.1450000e+01   2.5103554e+00   3.4896107e+01
+   3.1450000e+01   2.5061901e+00   3.4902207e+01
+   3.1450000e+01   2.5121488e+00   3.4907306e+01
+   3.1450000e+01   2.5413554e+00   3.4914521e+01
+   3.1450000e+01   2.5794959e+00   3.4919405e+01
+   3.1450000e+01   2.6451405e+00   3.4928736e+01
+   3.1450000e+01   2.7416281e+00   3.4940488e+01
+   3.1450000e+01   2.8990331e+00   3.4952802e+01
+   3.1450000e+01   3.0880496e+00   3.4961322e+01
+   3.1450000e+01   3.3536529e+00   3.4973281e+01
+   3.1450000e+01   3.5827603e+00   3.4972736e+01
+   3.1450000e+01   3.8425455e+00   3.4984074e+01
+   3.1450000e+01   4.3142231e+00   3.5036645e+01
+   3.1450000e+01   5.2460165e+00   3.5170777e+01
+   3.1450000e+01   6.6648926e+00   3.5382711e+01
+   3.1450000e+01   8.2569008e+00   3.5621149e+01
+   3.1450000e+01   9.2870413e+00   3.5722876e+01
+   3.1450000e+01   9.5328760e+00   3.5630785e+01
+   3.1450000e+01   9.9026364e+00   3.5537066e+01
+   3.1450000e+01   1.0298083e+01   3.5480702e+01
+   3.1450000e+01   1.0770826e+01   3.5489091e+01
+   3.1450000e+01   1.1255678e+01   3.5531455e+01
+   3.1450000e+01   1.1602421e+01   3.5566000e+01
+   3.1450000e+01   1.1914041e+01   3.5601397e+01
+   3.1450000e+01   1.2147298e+01   3.5626901e+01
+   3.1450000e+01   1.2343058e+01   3.5648785e+01
+   3.1450000e+01   1.2494471e+01   3.5664835e+01
+   3.1450000e+01   1.2597438e+01   3.5676273e+01
+   3.1450000e+01   1.2688149e+01   3.5686380e+01
+   3.1450000e+01   1.2785116e+01   3.5697636e+01
+   3.1450000e+01   1.2848306e+01   3.5705074e+01
+   3.1450000e+01   1.2914322e+01   3.5711992e+01
+   3.1450000e+01   1.3001628e+01   3.5721826e+01
+   3.1450000e+01   1.3051289e+01   3.5725025e+01
+   3.1450000e+01   1.3089132e+01   3.5727711e+01
+   3.1450000e+01   1.3142140e+01   3.5735612e+01
+   3.1450000e+01   1.3179091e+01   3.5738893e+01
+   3.1450000e+01   1.3225289e+01   3.5744364e+01
+   3.1450000e+01   1.3285380e+01   3.5750000e+01
+   3.1450000e+01   1.3351380e+01   3.5760339e+01
+   3.1450000e+01   1.3413512e+01   3.5768570e+01
+   3.1450000e+01   1.3485198e+01   3.5776364e+01
+   3.1450000e+01   1.3539636e+01   3.5778083e+01
+   3.1450000e+01   1.3586083e+01   3.5781620e+01
+   3.1450000e+01   1.3649860e+01   3.5788785e+01
+   3.1450000e+01   1.3724041e+01   3.5795174e+01
+   3.1450000e+01   1.3795636e+01   3.5799347e+01
+   3.1450000e+01   1.3896884e+01   3.5810504e+01
+   3.1450000e+01   1.4007802e+01   3.5819636e+01
+   3.1450000e+01   1.4119207e+01   3.5823149e+01
+   3.1450000e+01   1.4275008e+01   3.5831579e+01
+   3.1450000e+01   1.4495909e+01   3.5833537e+01
+   3.1450000e+01   1.4732562e+01   3.5837397e+01
+   3.1450000e+01   1.4997446e+01   3.5833347e+01
+   3.1450000e+01   1.5706603e+01   3.5837281e+01
+   3.1450000e+01   1.6613545e+01   3.5844116e+01
+   3.1450000e+01   1.7261298e+01   3.5850289e+01
+   3.1450000e+01   1.8017446e+01   3.5853281e+01
+   3.1450000e+01   1.8879421e+01   3.5867727e+01
+   3.1450000e+01   1.9534612e+01   3.5871678e+01
+   3.1450000e+01   1.9774289e+01   3.5868719e+01
+   3.1450000e+01   1.9845992e+01   3.5868760e+01
+   3.1450000e+01   1.9857645e+01   3.5869248e+01
+   3.1450000e+01   1.9858744e+01   3.5869810e+01
+   3.1450000e+01   1.9851843e+01   3.5868702e+01
+   3.1450000e+01   1.9795959e+01   3.5873008e+01
+   3.1500000e+01   2.5103554e+00   3.4896107e+01
+   3.1500000e+01   2.5061901e+00   3.4902207e+01
+   3.1500000e+01   2.5121488e+00   3.4907306e+01
+   3.1500000e+01   2.5413554e+00   3.4914521e+01
+   3.1500000e+01   2.5794959e+00   3.4919405e+01
+   3.1500000e+01   2.6451405e+00   3.4928736e+01
+   3.1500000e+01   2.7416281e+00   3.4940488e+01
+   3.1500000e+01   2.8990331e+00   3.4952802e+01
+   3.1500000e+01   3.0880496e+00   3.4961322e+01
+   3.1500000e+01   3.3536529e+00   3.4973281e+01
+   3.1500000e+01   3.5827603e+00   3.4972736e+01
+   3.1500000e+01   3.8425455e+00   3.4984074e+01
+   3.1500000e+01   4.3142231e+00   3.5036645e+01
+   3.1500000e+01   5.2460165e+00   3.5170777e+01
+   3.1500000e+01   6.6648926e+00   3.5382711e+01
+   3.1500000e+01   8.2569008e+00   3.5621149e+01
+   3.1500000e+01   9.2870413e+00   3.5722876e+01
+   3.1500000e+01   9.5328760e+00   3.5630785e+01
+   3.1500000e+01   9.9026364e+00   3.5537066e+01
+   3.1500000e+01   1.0298083e+01   3.5480702e+01
+   3.1500000e+01   1.0770826e+01   3.5489091e+01
+   3.1500000e+01   1.1255678e+01   3.5531455e+01
+   3.1500000e+01   1.1602421e+01   3.5566000e+01
+   3.1500000e+01   1.1914041e+01   3.5601397e+01
+   3.1500000e+01   1.2147298e+01   3.5626901e+01
+   3.1500000e+01   1.2343058e+01   3.5648785e+01
+   3.1500000e+01   1.2494471e+01   3.5664835e+01
+   3.1500000e+01   1.2597438e+01   3.5676273e+01
+   3.1500000e+01   1.2688149e+01   3.5686380e+01
+   3.1500000e+01   1.2785116e+01   3.5697636e+01
+   3.1500000e+01   1.2848306e+01   3.5705074e+01
+   3.1500000e+01   1.2914322e+01   3.5711992e+01
+   3.1500000e+01   1.3001628e+01   3.5721826e+01
+   3.1500000e+01   1.3051289e+01   3.5725025e+01
+   3.1500000e+01   1.3089132e+01   3.5727711e+01
+   3.1500000e+01   1.3142140e+01   3.5735612e+01
+   3.1500000e+01   1.3179091e+01   3.5738893e+01
+   3.1500000e+01   1.3225289e+01   3.5744364e+01
+   3.1500000e+01   1.3285380e+01   3.5750000e+01
+   3.1500000e+01   1.3351380e+01   3.5760339e+01
+   3.1500000e+01   1.3413512e+01   3.5768570e+01
+   3.1500000e+01   1.3485198e+01   3.5776364e+01
+   3.1500000e+01   1.3539636e+01   3.5778083e+01
+   3.1500000e+01   1.3586083e+01   3.5781620e+01
+   3.1500000e+01   1.3649860e+01   3.5788785e+01
+   3.1500000e+01   1.3724041e+01   3.5795174e+01
+   3.1500000e+01   1.3795636e+01   3.5799347e+01
+   3.1500000e+01   1.3896884e+01   3.5810504e+01
+   3.1500000e+01   1.4007802e+01   3.5819636e+01
+   3.1500000e+01   1.4119207e+01   3.5823149e+01
+   3.1500000e+01   1.4275008e+01   3.5831579e+01
+   3.1500000e+01   1.4495909e+01   3.5833537e+01
+   3.1500000e+01   1.4732562e+01   3.5837397e+01
+   3.1500000e+01   1.4997446e+01   3.5833347e+01
+   3.1500000e+01   1.5706603e+01   3.5837281e+01
+   3.1500000e+01   1.6613545e+01   3.5844116e+01
+   3.1500000e+01   1.7261298e+01   3.5850289e+01
+   3.1500000e+01   1.8017446e+01   3.5853281e+01
+   3.1500000e+01   1.8879421e+01   3.5867727e+01
+   3.1500000e+01   1.9534612e+01   3.5871678e+01
+   3.1500000e+01   1.9774289e+01   3.5868719e+01
+   3.1500000e+01   1.9845992e+01   3.5868760e+01
+   3.1500000e+01   1.9857645e+01   3.5869248e+01
+   3.1500000e+01   1.9858744e+01   3.5869810e+01
+   3.1500000e+01   1.9851843e+01   3.5868702e+01
+   3.1500000e+01   1.9795959e+01   3.5873008e+01
+   3.1550000e+01   2.5103554e+00   3.4896107e+01
+   3.1550000e+01   2.5061901e+00   3.4902207e+01
+   3.1550000e+01   2.5121488e+00   3.4907306e+01
+   3.1550000e+01   2.5413554e+00   3.4914521e+01
+   3.1550000e+01   2.5794959e+00   3.4919405e+01
+   3.1550000e+01   2.6451405e+00   3.4928736e+01
+   3.1550000e+01   2.7416281e+00   3.4940488e+01
+   3.1550000e+01   2.8990331e+00   3.4952802e+01
+   3.1550000e+01   3.0880496e+00   3.4961322e+01
+   3.1550000e+01   3.3536529e+00   3.4973281e+01
+   3.1550000e+01   3.5827603e+00   3.4972736e+01
+   3.1550000e+01   3.8425455e+00   3.4984074e+01
+   3.1550000e+01   4.3142231e+00   3.5036645e+01
+   3.1550000e+01   5.2460165e+00   3.5170777e+01
+   3.1550000e+01   6.6648926e+00   3.5382711e+01
+   3.1550000e+01   8.2569008e+00   3.5621149e+01
+   3.1550000e+01   9.2870413e+00   3.5722876e+01
+   3.1550000e+01   9.5328760e+00   3.5630785e+01
+   3.1550000e+01   9.9026364e+00   3.5537066e+01
+   3.1550000e+01   1.0298083e+01   3.5480702e+01
+   3.1550000e+01   1.0770826e+01   3.5489091e+01
+   3.1550000e+01   1.1255678e+01   3.5531455e+01
+   3.1550000e+01   1.1602421e+01   3.5566000e+01
+   3.1550000e+01   1.1914041e+01   3.5601397e+01
+   3.1550000e+01   1.2147298e+01   3.5626901e+01
+   3.1550000e+01   1.2343058e+01   3.5648785e+01
+   3.1550000e+01   1.2494471e+01   3.5664835e+01
+   3.1550000e+01   1.2597438e+01   3.5676273e+01
+   3.1550000e+01   1.2688149e+01   3.5686380e+01
+   3.1550000e+01   1.2785116e+01   3.5697636e+01
+   3.1550000e+01   1.2848306e+01   3.5705074e+01
+   3.1550000e+01   1.2914322e+01   3.5711992e+01
+   3.1550000e+01   1.3001628e+01   3.5721826e+01
+   3.1550000e+01   1.3051289e+01   3.5725025e+01
+   3.1550000e+01   1.3089132e+01   3.5727711e+01
+   3.1550000e+01   1.3142140e+01   3.5735612e+01
+   3.1550000e+01   1.3179091e+01   3.5738893e+01
+   3.1550000e+01   1.3225289e+01   3.5744364e+01
+   3.1550000e+01   1.3285380e+01   3.5750000e+01
+   3.1550000e+01   1.3351380e+01   3.5760339e+01
+   3.1550000e+01   1.3413512e+01   3.5768570e+01
+   3.1550000e+01   1.3485198e+01   3.5776364e+01
+   3.1550000e+01   1.3539636e+01   3.5778083e+01
+   3.1550000e+01   1.3586083e+01   3.5781620e+01
+   3.1550000e+01   1.3649860e+01   3.5788785e+01
+   3.1550000e+01   1.3724041e+01   3.5795174e+01
+   3.1550000e+01   1.3795636e+01   3.5799347e+01
+   3.1550000e+01   1.3896884e+01   3.5810504e+01
+   3.1550000e+01   1.4007802e+01   3.5819636e+01
+   3.1550000e+01   1.4119207e+01   3.5823149e+01
+   3.1550000e+01   1.4275008e+01   3.5831579e+01
+   3.1550000e+01   1.4495909e+01   3.5833537e+01
+   3.1550000e+01   1.4732562e+01   3.5837397e+01
+   3.1550000e+01   1.4997446e+01   3.5833347e+01
+   3.1550000e+01   1.5706603e+01   3.5837281e+01
+   3.1550000e+01   1.6613545e+01   3.5844116e+01
+   3.1550000e+01   1.7261298e+01   3.5850289e+01
+   3.1550000e+01   1.8017446e+01   3.5853281e+01
+   3.1550000e+01   1.8879421e+01   3.5867727e+01
+   3.1550000e+01   1.9534612e+01   3.5871678e+01
+   3.1550000e+01   1.9774289e+01   3.5868719e+01
+   3.1550000e+01   1.9845992e+01   3.5868760e+01
+   3.1550000e+01   1.9857645e+01   3.5869248e+01
+   3.1550000e+01   1.9858744e+01   3.5869810e+01
+   3.1550000e+01   1.9851843e+01   3.5868702e+01
+   3.1550000e+01   1.9795959e+01   3.5873008e+01
+   3.1600000e+01   2.5103554e+00   3.4896107e+01
+   3.1600000e+01   2.5061901e+00   3.4902207e+01
+   3.1600000e+01   2.5121488e+00   3.4907306e+01
+   3.1600000e+01   2.5413554e+00   3.4914521e+01
+   3.1600000e+01   2.5794959e+00   3.4919405e+01
+   3.1600000e+01   2.6451405e+00   3.4928736e+01
+   3.1600000e+01   2.7416281e+00   3.4940488e+01
+   3.1600000e+01   2.8990331e+00   3.4952802e+01
+   3.1600000e+01   3.0880496e+00   3.4961322e+01
+   3.1600000e+01   3.3536529e+00   3.4973281e+01
+   3.1600000e+01   3.5827603e+00   3.4972736e+01
+   3.1600000e+01   3.8425455e+00   3.4984074e+01
+   3.1600000e+01   4.3142231e+00   3.5036645e+01
+   3.1600000e+01   5.2460165e+00   3.5170777e+01
+   3.1600000e+01   6.6648926e+00   3.5382711e+01
+   3.1600000e+01   8.2569008e+00   3.5621149e+01
+   3.1600000e+01   9.2870413e+00   3.5722876e+01
+   3.1600000e+01   9.5328760e+00   3.5630785e+01
+   3.1600000e+01   9.9026364e+00   3.5537066e+01
+   3.1600000e+01   1.0298083e+01   3.5480702e+01
+   3.1600000e+01   1.0770826e+01   3.5489091e+01
+   3.1600000e+01   1.1255678e+01   3.5531455e+01
+   3.1600000e+01   1.1602421e+01   3.5566000e+01
+   3.1600000e+01   1.1914041e+01   3.5601397e+01
+   3.1600000e+01   1.2147298e+01   3.5626901e+01
+   3.1600000e+01   1.2343058e+01   3.5648785e+01
+   3.1600000e+01   1.2494471e+01   3.5664835e+01
+   3.1600000e+01   1.2597438e+01   3.5676273e+01
+   3.1600000e+01   1.2688149e+01   3.5686380e+01
+   3.1600000e+01   1.2785116e+01   3.5697636e+01
+   3.1600000e+01   1.2848306e+01   3.5705074e+01
+   3.1600000e+01   1.2914322e+01   3.5711992e+01
+   3.1600000e+01   1.3001628e+01   3.5721826e+01
+   3.1600000e+01   1.3051289e+01   3.5725025e+01
+   3.1600000e+01   1.3089132e+01   3.5727711e+01
+   3.1600000e+01   1.3142140e+01   3.5735612e+01
+   3.1600000e+01   1.3179091e+01   3.5738893e+01
+   3.1600000e+01   1.3225289e+01   3.5744364e+01
+   3.1600000e+01   1.3285380e+01   3.5750000e+01
+   3.1600000e+01   1.3351380e+01   3.5760339e+01
+   3.1600000e+01   1.3413512e+01   3.5768570e+01
+   3.1600000e+01   1.3485198e+01   3.5776364e+01
+   3.1600000e+01   1.3539636e+01   3.5778083e+01
+   3.1600000e+01   1.3586083e+01   3.5781620e+01
+   3.1600000e+01   1.3649860e+01   3.5788785e+01
+   3.1600000e+01   1.3724041e+01   3.5795174e+01
+   3.1600000e+01   1.3795636e+01   3.5799347e+01
+   3.1600000e+01   1.3896884e+01   3.5810504e+01
+   3.1600000e+01   1.4007802e+01   3.5819636e+01
+   3.1600000e+01   1.4119207e+01   3.5823149e+01
+   3.1600000e+01   1.4275008e+01   3.5831579e+01
+   3.1600000e+01   1.4495909e+01   3.5833537e+01
+   3.1600000e+01   1.4732562e+01   3.5837397e+01
+   3.1600000e+01   1.4997446e+01   3.5833347e+01
+   3.1600000e+01   1.5706603e+01   3.5837281e+01
+   3.1600000e+01   1.6613545e+01   3.5844116e+01
+   3.1600000e+01   1.7261298e+01   3.5850289e+01
+   3.1600000e+01   1.8017446e+01   3.5853281e+01
+   3.1600000e+01   1.8879421e+01   3.5867727e+01
+   3.1600000e+01   1.9534612e+01   3.5871678e+01
+   3.1600000e+01   1.9774289e+01   3.5868719e+01
+   3.1600000e+01   1.9845992e+01   3.5868760e+01
+   3.1600000e+01   1.9857645e+01   3.5869248e+01
+   3.1600000e+01   1.9858744e+01   3.5869810e+01
+   3.1600000e+01   1.9851843e+01   3.5868702e+01
+   3.1600000e+01   1.9795959e+01   3.5873008e+01
+   3.1650000e+01   2.5103554e+00   3.4896107e+01
+   3.1650000e+01   2.5061901e+00   3.4902207e+01
+   3.1650000e+01   2.5121488e+00   3.4907306e+01
+   3.1650000e+01   2.5413554e+00   3.4914521e+01
+   3.1650000e+01   2.5794959e+00   3.4919405e+01
+   3.1650000e+01   2.6451405e+00   3.4928736e+01
+   3.1650000e+01   2.7416281e+00   3.4940488e+01
+   3.1650000e+01   2.8990331e+00   3.4952802e+01
+   3.1650000e+01   3.0880496e+00   3.4961322e+01
+   3.1650000e+01   3.3536529e+00   3.4973281e+01
+   3.1650000e+01   3.5827603e+00   3.4972736e+01
+   3.1650000e+01   3.8425455e+00   3.4984074e+01
+   3.1650000e+01   4.3142231e+00   3.5036645e+01
+   3.1650000e+01   5.2460165e+00   3.5170777e+01
+   3.1650000e+01   6.6648926e+00   3.5382711e+01
+   3.1650000e+01   8.2569008e+00   3.5621149e+01
+   3.1650000e+01   9.2870413e+00   3.5722876e+01
+   3.1650000e+01   9.5328760e+00   3.5630785e+01
+   3.1650000e+01   9.9026364e+00   3.5537066e+01
+   3.1650000e+01   1.0298083e+01   3.5480702e+01
+   3.1650000e+01   1.0770826e+01   3.5489091e+01
+   3.1650000e+01   1.1255678e+01   3.5531455e+01
+   3.1650000e+01   1.1602421e+01   3.5566000e+01
+   3.1650000e+01   1.1914041e+01   3.5601397e+01
+   3.1650000e+01   1.2147298e+01   3.5626901e+01
+   3.1650000e+01   1.2343058e+01   3.5648785e+01
+   3.1650000e+01   1.2494471e+01   3.5664835e+01
+   3.1650000e+01   1.2597438e+01   3.5676273e+01
+   3.1650000e+01   1.2688149e+01   3.5686380e+01
+   3.1650000e+01   1.2785116e+01   3.5697636e+01
+   3.1650000e+01   1.2848306e+01   3.5705074e+01
+   3.1650000e+01   1.2914322e+01   3.5711992e+01
+   3.1650000e+01   1.3001628e+01   3.5721826e+01
+   3.1650000e+01   1.3051289e+01   3.5725025e+01
+   3.1650000e+01   1.3089132e+01   3.5727711e+01
+   3.1650000e+01   1.3142140e+01   3.5735612e+01
+   3.1650000e+01   1.3179091e+01   3.5738893e+01
+   3.1650000e+01   1.3225289e+01   3.5744364e+01
+   3.1650000e+01   1.3285380e+01   3.5750000e+01
+   3.1650000e+01   1.3351380e+01   3.5760339e+01
+   3.1650000e+01   1.3413512e+01   3.5768570e+01
+   3.1650000e+01   1.3485198e+01   3.5776364e+01
+   3.1650000e+01   1.3539636e+01   3.5778083e+01
+   3.1650000e+01   1.3586083e+01   3.5781620e+01
+   3.1650000e+01   1.3649860e+01   3.5788785e+01
+   3.1650000e+01   1.3724041e+01   3.5795174e+01
+   3.1650000e+01   1.3795636e+01   3.5799347e+01
+   3.1650000e+01   1.3896884e+01   3.5810504e+01
+   3.1650000e+01   1.4007802e+01   3.5819636e+01
+   3.1650000e+01   1.4119207e+01   3.5823149e+01
+   3.1650000e+01   1.4275008e+01   3.5831579e+01
+   3.1650000e+01   1.4495909e+01   3.5833537e+01
+   3.1650000e+01   1.4732562e+01   3.5837397e+01
+   3.1650000e+01   1.4997446e+01   3.5833347e+01
+   3.1650000e+01   1.5706603e+01   3.5837281e+01
+   3.1650000e+01   1.6613545e+01   3.5844116e+01
+   3.1650000e+01   1.7261298e+01   3.5850289e+01
+   3.1650000e+01   1.8017446e+01   3.5853281e+01
+   3.1650000e+01   1.8879421e+01   3.5867727e+01
+   3.1650000e+01   1.9534612e+01   3.5871678e+01
+   3.1650000e+01   1.9774289e+01   3.5868719e+01
+   3.1650000e+01   1.9845992e+01   3.5868760e+01
+   3.1650000e+01   1.9857645e+01   3.5869248e+01
+   3.1650000e+01   1.9858744e+01   3.5869810e+01
+   3.1650000e+01   1.9851843e+01   3.5868702e+01
+   3.1650000e+01   1.9795959e+01   3.5873008e+01
+   3.1700000e+01   2.5103554e+00   3.4896107e+01
+   3.1700000e+01   2.5061901e+00   3.4902207e+01
+   3.1700000e+01   2.5121488e+00   3.4907306e+01
+   3.1700000e+01   2.5413554e+00   3.4914521e+01
+   3.1700000e+01   2.5794959e+00   3.4919405e+01
+   3.1700000e+01   2.6451405e+00   3.4928736e+01
+   3.1700000e+01   2.7416281e+00   3.4940488e+01
+   3.1700000e+01   2.8990331e+00   3.4952802e+01
+   3.1700000e+01   3.0880496e+00   3.4961322e+01
+   3.1700000e+01   3.3536529e+00   3.4973281e+01
+   3.1700000e+01   3.5827603e+00   3.4972736e+01
+   3.1700000e+01   3.8425455e+00   3.4984074e+01
+   3.1700000e+01   4.3142231e+00   3.5036645e+01
+   3.1700000e+01   5.2460165e+00   3.5170777e+01
+   3.1700000e+01   6.6648926e+00   3.5382711e+01
+   3.1700000e+01   8.2569008e+00   3.5621149e+01
+   3.1700000e+01   9.2870413e+00   3.5722876e+01
+   3.1700000e+01   9.5328760e+00   3.5630785e+01
+   3.1700000e+01   9.9026364e+00   3.5537066e+01
+   3.1700000e+01   1.0298083e+01   3.5480702e+01
+   3.1700000e+01   1.0770826e+01   3.5489091e+01
+   3.1700000e+01   1.1255678e+01   3.5531455e+01
+   3.1700000e+01   1.1602421e+01   3.5566000e+01
+   3.1700000e+01   1.1914041e+01   3.5601397e+01
+   3.1700000e+01   1.2147298e+01   3.5626901e+01
+   3.1700000e+01   1.2343058e+01   3.5648785e+01
+   3.1700000e+01   1.2494471e+01   3.5664835e+01
+   3.1700000e+01   1.2597438e+01   3.5676273e+01
+   3.1700000e+01   1.2688149e+01   3.5686380e+01
+   3.1700000e+01   1.2785116e+01   3.5697636e+01
+   3.1700000e+01   1.2848306e+01   3.5705074e+01
+   3.1700000e+01   1.2914322e+01   3.5711992e+01
+   3.1700000e+01   1.3001628e+01   3.5721826e+01
+   3.1700000e+01   1.3051289e+01   3.5725025e+01
+   3.1700000e+01   1.3089132e+01   3.5727711e+01
+   3.1700000e+01   1.3142140e+01   3.5735612e+01
+   3.1700000e+01   1.3179091e+01   3.5738893e+01
+   3.1700000e+01   1.3225289e+01   3.5744364e+01
+   3.1700000e+01   1.3285380e+01   3.5750000e+01
+   3.1700000e+01   1.3351380e+01   3.5760339e+01
+   3.1700000e+01   1.3413512e+01   3.5768570e+01
+   3.1700000e+01   1.3485198e+01   3.5776364e+01
+   3.1700000e+01   1.3539636e+01   3.5778083e+01
+   3.1700000e+01   1.3586083e+01   3.5781620e+01
+   3.1700000e+01   1.3649860e+01   3.5788785e+01
+   3.1700000e+01   1.3724041e+01   3.5795174e+01
+   3.1700000e+01   1.3795636e+01   3.5799347e+01
+   3.1700000e+01   1.3896884e+01   3.5810504e+01
+   3.1700000e+01   1.4007802e+01   3.5819636e+01
+   3.1700000e+01   1.4119207e+01   3.5823149e+01
+   3.1700000e+01   1.4275008e+01   3.5831579e+01
+   3.1700000e+01   1.4495909e+01   3.5833537e+01
+   3.1700000e+01   1.4732562e+01   3.5837397e+01
+   3.1700000e+01   1.4997446e+01   3.5833347e+01
+   3.1700000e+01   1.5706603e+01   3.5837281e+01
+   3.1700000e+01   1.6613545e+01   3.5844116e+01
+   3.1700000e+01   1.7261298e+01   3.5850289e+01
+   3.1700000e+01   1.8017446e+01   3.5853281e+01
+   3.1700000e+01   1.8879421e+01   3.5867727e+01
+   3.1700000e+01   1.9534612e+01   3.5871678e+01
+   3.1700000e+01   1.9774289e+01   3.5868719e+01
+   3.1700000e+01   1.9845992e+01   3.5868760e+01
+   3.1700000e+01   1.9857645e+01   3.5869248e+01
+   3.1700000e+01   1.9858744e+01   3.5869810e+01
+   3.1700000e+01   1.9851843e+01   3.5868702e+01
+   3.1700000e+01   1.9795959e+01   3.5873008e+01
+   3.1750000e+01   2.5103554e+00   3.4896107e+01
+   3.1750000e+01   2.5061901e+00   3.4902207e+01
+   3.1750000e+01   2.5121488e+00   3.4907306e+01
+   3.1750000e+01   2.5413554e+00   3.4914521e+01
+   3.1750000e+01   2.5794959e+00   3.4919405e+01
+   3.1750000e+01   2.6451405e+00   3.4928736e+01
+   3.1750000e+01   2.7416281e+00   3.4940488e+01
+   3.1750000e+01   2.8990331e+00   3.4952802e+01
+   3.1750000e+01   3.0880496e+00   3.4961322e+01
+   3.1750000e+01   3.3536529e+00   3.4973281e+01
+   3.1750000e+01   3.5827603e+00   3.4972736e+01
+   3.1750000e+01   3.8425455e+00   3.4984074e+01
+   3.1750000e+01   4.3142231e+00   3.5036645e+01
+   3.1750000e+01   5.2460165e+00   3.5170777e+01
+   3.1750000e+01   6.6648926e+00   3.5382711e+01
+   3.1750000e+01   8.2569008e+00   3.5621149e+01
+   3.1750000e+01   9.2870413e+00   3.5722876e+01
+   3.1750000e+01   9.5328760e+00   3.5630785e+01
+   3.1750000e+01   9.9026364e+00   3.5537066e+01
+   3.1750000e+01   1.0298083e+01   3.5480702e+01
+   3.1750000e+01   1.0770826e+01   3.5489091e+01
+   3.1750000e+01   1.1255678e+01   3.5531455e+01
+   3.1750000e+01   1.1602421e+01   3.5566000e+01
+   3.1750000e+01   1.1914041e+01   3.5601397e+01
+   3.1750000e+01   1.2147298e+01   3.5626901e+01
+   3.1750000e+01   1.2343058e+01   3.5648785e+01
+   3.1750000e+01   1.2494471e+01   3.5664835e+01
+   3.1750000e+01   1.2597438e+01   3.5676273e+01
+   3.1750000e+01   1.2688149e+01   3.5686380e+01
+   3.1750000e+01   1.2785116e+01   3.5697636e+01
+   3.1750000e+01   1.2848306e+01   3.5705074e+01
+   3.1750000e+01   1.2914322e+01   3.5711992e+01
+   3.1750000e+01   1.3001628e+01   3.5721826e+01
+   3.1750000e+01   1.3051289e+01   3.5725025e+01
+   3.1750000e+01   1.3089132e+01   3.5727711e+01
+   3.1750000e+01   1.3142140e+01   3.5735612e+01
+   3.1750000e+01   1.3179091e+01   3.5738893e+01
+   3.1750000e+01   1.3225289e+01   3.5744364e+01
+   3.1750000e+01   1.3285380e+01   3.5750000e+01
+   3.1750000e+01   1.3351380e+01   3.5760339e+01
+   3.1750000e+01   1.3413512e+01   3.5768570e+01
+   3.1750000e+01   1.3485198e+01   3.5776364e+01
+   3.1750000e+01   1.3539636e+01   3.5778083e+01
+   3.1750000e+01   1.3586083e+01   3.5781620e+01
+   3.1750000e+01   1.3649860e+01   3.5788785e+01
+   3.1750000e+01   1.3724041e+01   3.5795174e+01
+   3.1750000e+01   1.3795636e+01   3.5799347e+01
+   3.1750000e+01   1.3896884e+01   3.5810504e+01
+   3.1750000e+01   1.4007802e+01   3.5819636e+01
+   3.1750000e+01   1.4119207e+01   3.5823149e+01
+   3.1750000e+01   1.4275008e+01   3.5831579e+01
+   3.1750000e+01   1.4495909e+01   3.5833537e+01
+   3.1750000e+01   1.4732562e+01   3.5837397e+01
+   3.1750000e+01   1.4997446e+01   3.5833347e+01
+   3.1750000e+01   1.5706603e+01   3.5837281e+01
+   3.1750000e+01   1.6613545e+01   3.5844116e+01
+   3.1750000e+01   1.7261298e+01   3.5850289e+01
+   3.1750000e+01   1.8017446e+01   3.5853281e+01
+   3.1750000e+01   1.8879421e+01   3.5867727e+01
+   3.1750000e+01   1.9534612e+01   3.5871678e+01
+   3.1750000e+01   1.9774289e+01   3.5868719e+01
+   3.1750000e+01   1.9845992e+01   3.5868760e+01
+   3.1750000e+01   1.9857645e+01   3.5869248e+01
+   3.1750000e+01   1.9858744e+01   3.5869810e+01
+   3.1750000e+01   1.9851843e+01   3.5868702e+01
+   3.1750000e+01   1.9795959e+01   3.5873008e+01
+   3.1800000e+01   2.5103554e+00   3.4896107e+01
+   3.1800000e+01   2.5061901e+00   3.4902207e+01
+   3.1800000e+01   2.5121488e+00   3.4907306e+01
+   3.1800000e+01   2.5413554e+00   3.4914521e+01
+   3.1800000e+01   2.5794959e+00   3.4919405e+01
+   3.1800000e+01   2.6451405e+00   3.4928736e+01
+   3.1800000e+01   2.7416281e+00   3.4940488e+01
+   3.1800000e+01   2.8990331e+00   3.4952802e+01
+   3.1800000e+01   3.0880496e+00   3.4961322e+01
+   3.1800000e+01   3.3536529e+00   3.4973281e+01
+   3.1800000e+01   3.5827603e+00   3.4972736e+01
+   3.1800000e+01   3.8425455e+00   3.4984074e+01
+   3.1800000e+01   4.3142231e+00   3.5036645e+01
+   3.1800000e+01   5.2460165e+00   3.5170777e+01
+   3.1800000e+01   6.6648926e+00   3.5382711e+01
+   3.1800000e+01   8.2569008e+00   3.5621149e+01
+   3.1800000e+01   9.2870413e+00   3.5722876e+01
+   3.1800000e+01   9.5328760e+00   3.5630785e+01
+   3.1800000e+01   9.9026364e+00   3.5537066e+01
+   3.1800000e+01   1.0298083e+01   3.5480702e+01
+   3.1800000e+01   1.0770826e+01   3.5489091e+01
+   3.1800000e+01   1.1255678e+01   3.5531455e+01
+   3.1800000e+01   1.1602421e+01   3.5566000e+01
+   3.1800000e+01   1.1914041e+01   3.5601397e+01
+   3.1800000e+01   1.2147298e+01   3.5626901e+01
+   3.1800000e+01   1.2343058e+01   3.5648785e+01
+   3.1800000e+01   1.2494471e+01   3.5664835e+01
+   3.1800000e+01   1.2597438e+01   3.5676273e+01
+   3.1800000e+01   1.2688149e+01   3.5686380e+01
+   3.1800000e+01   1.2785116e+01   3.5697636e+01
+   3.1800000e+01   1.2848306e+01   3.5705074e+01
+   3.1800000e+01   1.2914322e+01   3.5711992e+01
+   3.1800000e+01   1.3001628e+01   3.5721826e+01
+   3.1800000e+01   1.3051289e+01   3.5725025e+01
+   3.1800000e+01   1.3089132e+01   3.5727711e+01
+   3.1800000e+01   1.3142140e+01   3.5735612e+01
+   3.1800000e+01   1.3179091e+01   3.5738893e+01
+   3.1800000e+01   1.3225289e+01   3.5744364e+01
+   3.1800000e+01   1.3285380e+01   3.5750000e+01
+   3.1800000e+01   1.3351380e+01   3.5760339e+01
+   3.1800000e+01   1.3413512e+01   3.5768570e+01
+   3.1800000e+01   1.3485198e+01   3.5776364e+01
+   3.1800000e+01   1.3539636e+01   3.5778083e+01
+   3.1800000e+01   1.3586083e+01   3.5781620e+01
+   3.1800000e+01   1.3649860e+01   3.5788785e+01
+   3.1800000e+01   1.3724041e+01   3.5795174e+01
+   3.1800000e+01   1.3795636e+01   3.5799347e+01
+   3.1800000e+01   1.3896884e+01   3.5810504e+01
+   3.1800000e+01   1.4007802e+01   3.5819636e+01
+   3.1800000e+01   1.4119207e+01   3.5823149e+01
+   3.1800000e+01   1.4275008e+01   3.5831579e+01
+   3.1800000e+01   1.4495909e+01   3.5833537e+01
+   3.1800000e+01   1.4732562e+01   3.5837397e+01
+   3.1800000e+01   1.4997446e+01   3.5833347e+01
+   3.1800000e+01   1.5706603e+01   3.5837281e+01
+   3.1800000e+01   1.6613545e+01   3.5844116e+01
+   3.1800000e+01   1.7261298e+01   3.5850289e+01
+   3.1800000e+01   1.8017446e+01   3.5853281e+01
+   3.1800000e+01   1.8879421e+01   3.5867727e+01
+   3.1800000e+01   1.9534612e+01   3.5871678e+01
+   3.1800000e+01   1.9774289e+01   3.5868719e+01
+   3.1800000e+01   1.9845992e+01   3.5868760e+01
+   3.1800000e+01   1.9857645e+01   3.5869248e+01
+   3.1800000e+01   1.9858744e+01   3.5869810e+01
+   3.1800000e+01   1.9851843e+01   3.5868702e+01
+   3.1800000e+01   1.9795959e+01   3.5873008e+01
+   3.1850000e+01   2.5103554e+00   3.4896107e+01
+   3.1850000e+01   2.5061901e+00   3.4902207e+01
+   3.1850000e+01   2.5121488e+00   3.4907306e+01
+   3.1850000e+01   2.5413554e+00   3.4914521e+01
+   3.1850000e+01   2.5794959e+00   3.4919405e+01
+   3.1850000e+01   2.6451405e+00   3.4928736e+01
+   3.1850000e+01   2.7416281e+00   3.4940488e+01
+   3.1850000e+01   2.8990331e+00   3.4952802e+01
+   3.1850000e+01   3.0880496e+00   3.4961322e+01
+   3.1850000e+01   3.3536529e+00   3.4973281e+01
+   3.1850000e+01   3.5827603e+00   3.4972736e+01
+   3.1850000e+01   3.8425455e+00   3.4984074e+01
+   3.1850000e+01   4.3142231e+00   3.5036645e+01
+   3.1850000e+01   5.2460165e+00   3.5170777e+01
+   3.1850000e+01   6.6648926e+00   3.5382711e+01
+   3.1850000e+01   8.2569008e+00   3.5621149e+01
+   3.1850000e+01   9.2870413e+00   3.5722876e+01
+   3.1850000e+01   9.5328760e+00   3.5630785e+01
+   3.1850000e+01   9.9026364e+00   3.5537066e+01
+   3.1850000e+01   1.0298083e+01   3.5480702e+01
+   3.1850000e+01   1.0770826e+01   3.5489091e+01
+   3.1850000e+01   1.1255678e+01   3.5531455e+01
+   3.1850000e+01   1.1602421e+01   3.5566000e+01
+   3.1850000e+01   1.1914041e+01   3.5601397e+01
+   3.1850000e+01   1.2147298e+01   3.5626901e+01
+   3.1850000e+01   1.2343058e+01   3.5648785e+01
+   3.1850000e+01   1.2494471e+01   3.5664835e+01
+   3.1850000e+01   1.2597438e+01   3.5676273e+01
+   3.1850000e+01   1.2688149e+01   3.5686380e+01
+   3.1850000e+01   1.2785116e+01   3.5697636e+01
+   3.1850000e+01   1.2848306e+01   3.5705074e+01
+   3.1850000e+01   1.2914322e+01   3.5711992e+01
+   3.1850000e+01   1.3001628e+01   3.5721826e+01
+   3.1850000e+01   1.3051289e+01   3.5725025e+01
+   3.1850000e+01   1.3089132e+01   3.5727711e+01
+   3.1850000e+01   1.3142140e+01   3.5735612e+01
+   3.1850000e+01   1.3179091e+01   3.5738893e+01
+   3.1850000e+01   1.3225289e+01   3.5744364e+01
+   3.1850000e+01   1.3285380e+01   3.5750000e+01
+   3.1850000e+01   1.3351380e+01   3.5760339e+01
+   3.1850000e+01   1.3413512e+01   3.5768570e+01
+   3.1850000e+01   1.3485198e+01   3.5776364e+01
+   3.1850000e+01   1.3539636e+01   3.5778083e+01
+   3.1850000e+01   1.3586083e+01   3.5781620e+01
+   3.1850000e+01   1.3649860e+01   3.5788785e+01
+   3.1850000e+01   1.3724041e+01   3.5795174e+01
+   3.1850000e+01   1.3795636e+01   3.5799347e+01
+   3.1850000e+01   1.3896884e+01   3.5810504e+01
+   3.1850000e+01   1.4007802e+01   3.5819636e+01
+   3.1850000e+01   1.4119207e+01   3.5823149e+01
+   3.1850000e+01   1.4275008e+01   3.5831579e+01
+   3.1850000e+01   1.4495909e+01   3.5833537e+01
+   3.1850000e+01   1.4732562e+01   3.5837397e+01
+   3.1850000e+01   1.4997446e+01   3.5833347e+01
+   3.1850000e+01   1.5706603e+01   3.5837281e+01
+   3.1850000e+01   1.6613545e+01   3.5844116e+01
+   3.1850000e+01   1.7261298e+01   3.5850289e+01
+   3.1850000e+01   1.8017446e+01   3.5853281e+01
+   3.1850000e+01   1.8879421e+01   3.5867727e+01
+   3.1850000e+01   1.9534612e+01   3.5871678e+01
+   3.1850000e+01   1.9774289e+01   3.5868719e+01
+   3.1850000e+01   1.9845992e+01   3.5868760e+01
+   3.1850000e+01   1.9857645e+01   3.5869248e+01
+   3.1850000e+01   1.9858744e+01   3.5869810e+01
+   3.1850000e+01   1.9851843e+01   3.5868702e+01
+   3.1850000e+01   1.9795959e+01   3.5873008e+01
+   3.1900000e+01   2.5103554e+00   3.4896107e+01
+   3.1900000e+01   2.5061901e+00   3.4902207e+01
+   3.1900000e+01   2.5121488e+00   3.4907306e+01
+   3.1900000e+01   2.5413554e+00   3.4914521e+01
+   3.1900000e+01   2.5794959e+00   3.4919405e+01
+   3.1900000e+01   2.6451405e+00   3.4928736e+01
+   3.1900000e+01   2.7416281e+00   3.4940488e+01
+   3.1900000e+01   2.8990331e+00   3.4952802e+01
+   3.1900000e+01   3.0880496e+00   3.4961322e+01
+   3.1900000e+01   3.3536529e+00   3.4973281e+01
+   3.1900000e+01   3.5827603e+00   3.4972736e+01
+   3.1900000e+01   3.8425455e+00   3.4984074e+01
+   3.1900000e+01   4.3142231e+00   3.5036645e+01
+   3.1900000e+01   5.2460165e+00   3.5170777e+01
+   3.1900000e+01   6.6648926e+00   3.5382711e+01
+   3.1900000e+01   8.2569008e+00   3.5621149e+01
+   3.1900000e+01   9.2870413e+00   3.5722876e+01
+   3.1900000e+01   9.5328760e+00   3.5630785e+01
+   3.1900000e+01   9.9026364e+00   3.5537066e+01
+   3.1900000e+01   1.0298083e+01   3.5480702e+01
+   3.1900000e+01   1.0770826e+01   3.5489091e+01
+   3.1900000e+01   1.1255678e+01   3.5531455e+01
+   3.1900000e+01   1.1602421e+01   3.5566000e+01
+   3.1900000e+01   1.1914041e+01   3.5601397e+01
+   3.1900000e+01   1.2147298e+01   3.5626901e+01
+   3.1900000e+01   1.2343058e+01   3.5648785e+01
+   3.1900000e+01   1.2494471e+01   3.5664835e+01
+   3.1900000e+01   1.2597438e+01   3.5676273e+01
+   3.1900000e+01   1.2688149e+01   3.5686380e+01
+   3.1900000e+01   1.2785116e+01   3.5697636e+01
+   3.1900000e+01   1.2848306e+01   3.5705074e+01
+   3.1900000e+01   1.2914322e+01   3.5711992e+01
+   3.1900000e+01   1.3001628e+01   3.5721826e+01
+   3.1900000e+01   1.3051289e+01   3.5725025e+01
+   3.1900000e+01   1.3089132e+01   3.5727711e+01
+   3.1900000e+01   1.3142140e+01   3.5735612e+01
+   3.1900000e+01   1.3179091e+01   3.5738893e+01
+   3.1900000e+01   1.3225289e+01   3.5744364e+01
+   3.1900000e+01   1.3285380e+01   3.5750000e+01
+   3.1900000e+01   1.3351380e+01   3.5760339e+01
+   3.1900000e+01   1.3413512e+01   3.5768570e+01
+   3.1900000e+01   1.3485198e+01   3.5776364e+01
+   3.1900000e+01   1.3539636e+01   3.5778083e+01
+   3.1900000e+01   1.3586083e+01   3.5781620e+01
+   3.1900000e+01   1.3649860e+01   3.5788785e+01
+   3.1900000e+01   1.3724041e+01   3.5795174e+01
+   3.1900000e+01   1.3795636e+01   3.5799347e+01
+   3.1900000e+01   1.3896884e+01   3.5810504e+01
+   3.1900000e+01   1.4007802e+01   3.5819636e+01
+   3.1900000e+01   1.4119207e+01   3.5823149e+01
+   3.1900000e+01   1.4275008e+01   3.5831579e+01
+   3.1900000e+01   1.4495909e+01   3.5833537e+01
+   3.1900000e+01   1.4732562e+01   3.5837397e+01
+   3.1900000e+01   1.4997446e+01   3.5833347e+01
+   3.1900000e+01   1.5706603e+01   3.5837281e+01
+   3.1900000e+01   1.6613545e+01   3.5844116e+01
+   3.1900000e+01   1.7261298e+01   3.5850289e+01
+   3.1900000e+01   1.8017446e+01   3.5853281e+01
+   3.1900000e+01   1.8879421e+01   3.5867727e+01
+   3.1900000e+01   1.9534612e+01   3.5871678e+01
+   3.1900000e+01   1.9774289e+01   3.5868719e+01
+   3.1900000e+01   1.9845992e+01   3.5868760e+01
+   3.1900000e+01   1.9857645e+01   3.5869248e+01
+   3.1900000e+01   1.9858744e+01   3.5869810e+01
+   3.1900000e+01   1.9851843e+01   3.5868702e+01
+   3.1900000e+01   1.9795959e+01   3.5873008e+01
+   3.1950000e+01   2.5103554e+00   3.4896107e+01
+   3.1950000e+01   2.5061901e+00   3.4902207e+01
+   3.1950000e+01   2.5121488e+00   3.4907306e+01
+   3.1950000e+01   2.5413554e+00   3.4914521e+01
+   3.1950000e+01   2.5794959e+00   3.4919405e+01
+   3.1950000e+01   2.6451405e+00   3.4928736e+01
+   3.1950000e+01   2.7416281e+00   3.4940488e+01
+   3.1950000e+01   2.8990331e+00   3.4952802e+01
+   3.1950000e+01   3.0880496e+00   3.4961322e+01
+   3.1950000e+01   3.3536529e+00   3.4973281e+01
+   3.1950000e+01   3.5827603e+00   3.4972736e+01
+   3.1950000e+01   3.8425455e+00   3.4984074e+01
+   3.1950000e+01   4.3142231e+00   3.5036645e+01
+   3.1950000e+01   5.2460165e+00   3.5170777e+01
+   3.1950000e+01   6.6648926e+00   3.5382711e+01
+   3.1950000e+01   8.2569008e+00   3.5621149e+01
+   3.1950000e+01   9.2870413e+00   3.5722876e+01
+   3.1950000e+01   9.5328760e+00   3.5630785e+01
+   3.1950000e+01   9.9026364e+00   3.5537066e+01
+   3.1950000e+01   1.0298083e+01   3.5480702e+01
+   3.1950000e+01   1.0770826e+01   3.5489091e+01
+   3.1950000e+01   1.1255678e+01   3.5531455e+01
+   3.1950000e+01   1.1602421e+01   3.5566000e+01
+   3.1950000e+01   1.1914041e+01   3.5601397e+01
+   3.1950000e+01   1.2147298e+01   3.5626901e+01
+   3.1950000e+01   1.2343058e+01   3.5648785e+01
+   3.1950000e+01   1.2494471e+01   3.5664835e+01
+   3.1950000e+01   1.2597438e+01   3.5676273e+01
+   3.1950000e+01   1.2688149e+01   3.5686380e+01
+   3.1950000e+01   1.2785116e+01   3.5697636e+01
+   3.1950000e+01   1.2848306e+01   3.5705074e+01
+   3.1950000e+01   1.2914322e+01   3.5711992e+01
+   3.1950000e+01   1.3001628e+01   3.5721826e+01
+   3.1950000e+01   1.3051289e+01   3.5725025e+01
+   3.1950000e+01   1.3089132e+01   3.5727711e+01
+   3.1950000e+01   1.3142140e+01   3.5735612e+01
+   3.1950000e+01   1.3179091e+01   3.5738893e+01
+   3.1950000e+01   1.3225289e+01   3.5744364e+01
+   3.1950000e+01   1.3285380e+01   3.5750000e+01
+   3.1950000e+01   1.3351380e+01   3.5760339e+01
+   3.1950000e+01   1.3413512e+01   3.5768570e+01
+   3.1950000e+01   1.3485198e+01   3.5776364e+01
+   3.1950000e+01   1.3539636e+01   3.5778083e+01
+   3.1950000e+01   1.3586083e+01   3.5781620e+01
+   3.1950000e+01   1.3649860e+01   3.5788785e+01
+   3.1950000e+01   1.3724041e+01   3.5795174e+01
+   3.1950000e+01   1.3795636e+01   3.5799347e+01
+   3.1950000e+01   1.3896884e+01   3.5810504e+01
+   3.1950000e+01   1.4007802e+01   3.5819636e+01
+   3.1950000e+01   1.4119207e+01   3.5823149e+01
+   3.1950000e+01   1.4275008e+01   3.5831579e+01
+   3.1950000e+01   1.4495909e+01   3.5833537e+01
+   3.1950000e+01   1.4732562e+01   3.5837397e+01
+   3.1950000e+01   1.4997446e+01   3.5833347e+01
+   3.1950000e+01   1.5706603e+01   3.5837281e+01
+   3.1950000e+01   1.6613545e+01   3.5844116e+01
+   3.1950000e+01   1.7261298e+01   3.5850289e+01
+   3.1950000e+01   1.8017446e+01   3.5853281e+01
+   3.1950000e+01   1.8879421e+01   3.5867727e+01
+   3.1950000e+01   1.9534612e+01   3.5871678e+01
+   3.1950000e+01   1.9774289e+01   3.5868719e+01
+   3.1950000e+01   1.9845992e+01   3.5868760e+01
+   3.1950000e+01   1.9857645e+01   3.5869248e+01
+   3.1950000e+01   1.9858744e+01   3.5869810e+01
+   3.1950000e+01   1.9851843e+01   3.5868702e+01
+   3.1950000e+01   1.9795959e+01   3.5873008e+01
+   3.2000000e+01   2.5103554e+00   3.4896107e+01
+   3.2000000e+01   2.5061901e+00   3.4902207e+01
+   3.2000000e+01   2.5121488e+00   3.4907306e+01
+   3.2000000e+01   2.5413554e+00   3.4914521e+01
+   3.2000000e+01   2.5794959e+00   3.4919405e+01
+   3.2000000e+01   2.6451405e+00   3.4928736e+01
+   3.2000000e+01   2.7416281e+00   3.4940488e+01
+   3.2000000e+01   2.8990331e+00   3.4952802e+01
+   3.2000000e+01   3.0880496e+00   3.4961322e+01
+   3.2000000e+01   3.3536529e+00   3.4973281e+01
+   3.2000000e+01   3.5827603e+00   3.4972736e+01
+   3.2000000e+01   3.8425455e+00   3.4984074e+01
+   3.2000000e+01   4.3142231e+00   3.5036645e+01
+   3.2000000e+01   5.2460165e+00   3.5170777e+01
+   3.2000000e+01   6.6648926e+00   3.5382711e+01
+   3.2000000e+01   8.2569008e+00   3.5621149e+01
+   3.2000000e+01   9.2870413e+00   3.5722876e+01
+   3.2000000e+01   9.5328760e+00   3.5630785e+01
+   3.2000000e+01   9.9026364e+00   3.5537066e+01
+   3.2000000e+01   1.0298083e+01   3.5480702e+01
+   3.2000000e+01   1.0770826e+01   3.5489091e+01
+   3.2000000e+01   1.1255678e+01   3.5531455e+01
+   3.2000000e+01   1.1602421e+01   3.5566000e+01
+   3.2000000e+01   1.1914041e+01   3.5601397e+01
+   3.2000000e+01   1.2147298e+01   3.5626901e+01
+   3.2000000e+01   1.2343058e+01   3.5648785e+01
+   3.2000000e+01   1.2494471e+01   3.5664835e+01
+   3.2000000e+01   1.2597438e+01   3.5676273e+01
+   3.2000000e+01   1.2688149e+01   3.5686380e+01
+   3.2000000e+01   1.2785116e+01   3.5697636e+01
+   3.2000000e+01   1.2848306e+01   3.5705074e+01
+   3.2000000e+01   1.2914322e+01   3.5711992e+01
+   3.2000000e+01   1.3001628e+01   3.5721826e+01
+   3.2000000e+01   1.3051289e+01   3.5725025e+01
+   3.2000000e+01   1.3089132e+01   3.5727711e+01
+   3.2000000e+01   1.3142140e+01   3.5735612e+01
+   3.2000000e+01   1.3179091e+01   3.5738893e+01
+   3.2000000e+01   1.3225289e+01   3.5744364e+01
+   3.2000000e+01   1.3285380e+01   3.5750000e+01
+   3.2000000e+01   1.3351380e+01   3.5760339e+01
+   3.2000000e+01   1.3413512e+01   3.5768570e+01
+   3.2000000e+01   1.3485198e+01   3.5776364e+01
+   3.2000000e+01   1.3539636e+01   3.5778083e+01
+   3.2000000e+01   1.3586083e+01   3.5781620e+01
+   3.2000000e+01   1.3649860e+01   3.5788785e+01
+   3.2000000e+01   1.3724041e+01   3.5795174e+01
+   3.2000000e+01   1.3795636e+01   3.5799347e+01
+   3.2000000e+01   1.3896884e+01   3.5810504e+01
+   3.2000000e+01   1.4007802e+01   3.5819636e+01
+   3.2000000e+01   1.4119207e+01   3.5823149e+01
+   3.2000000e+01   1.4275008e+01   3.5831579e+01
+   3.2000000e+01   1.4495909e+01   3.5833537e+01
+   3.2000000e+01   1.4732562e+01   3.5837397e+01
+   3.2000000e+01   1.4997446e+01   3.5833347e+01
+   3.2000000e+01   1.5706603e+01   3.5837281e+01
+   3.2000000e+01   1.6613545e+01   3.5844116e+01
+   3.2000000e+01   1.7261298e+01   3.5850289e+01
+   3.2000000e+01   1.8017446e+01   3.5853281e+01
+   3.2000000e+01   1.8879421e+01   3.5867727e+01
+   3.2000000e+01   1.9534612e+01   3.5871678e+01
+   3.2000000e+01   1.9774289e+01   3.5868719e+01
+   3.2000000e+01   1.9845992e+01   3.5868760e+01
+   3.2000000e+01   1.9857645e+01   3.5869248e+01
+   3.2000000e+01   1.9858744e+01   3.5869810e+01
+   3.2000000e+01   1.9851843e+01   3.5868702e+01
+   3.2000000e+01   1.9795959e+01   3.5873008e+01
+   3.2050000e+01   2.5103554e+00   3.4896107e+01
+   3.2050000e+01   2.5061901e+00   3.4902207e+01
+   3.2050000e+01   2.5121488e+00   3.4907306e+01
+   3.2050000e+01   2.5413554e+00   3.4914521e+01
+   3.2050000e+01   2.5794959e+00   3.4919405e+01
+   3.2050000e+01   2.6451405e+00   3.4928736e+01
+   3.2050000e+01   2.7416281e+00   3.4940488e+01
+   3.2050000e+01   2.8990331e+00   3.4952802e+01
+   3.2050000e+01   3.0880496e+00   3.4961322e+01
+   3.2050000e+01   3.3536529e+00   3.4973281e+01
+   3.2050000e+01   3.5827603e+00   3.4972736e+01
+   3.2050000e+01   3.8425455e+00   3.4984074e+01
+   3.2050000e+01   4.3142231e+00   3.5036645e+01
+   3.2050000e+01   5.2460165e+00   3.5170777e+01
+   3.2050000e+01   6.6648926e+00   3.5382711e+01
+   3.2050000e+01   8.2569008e+00   3.5621149e+01
+   3.2050000e+01   9.2870413e+00   3.5722876e+01
+   3.2050000e+01   9.5328760e+00   3.5630785e+01
+   3.2050000e+01   9.9026364e+00   3.5537066e+01
+   3.2050000e+01   1.0298083e+01   3.5480702e+01
+   3.2050000e+01   1.0770826e+01   3.5489091e+01
+   3.2050000e+01   1.1255678e+01   3.5531455e+01
+   3.2050000e+01   1.1602421e+01   3.5566000e+01
+   3.2050000e+01   1.1914041e+01   3.5601397e+01
+   3.2050000e+01   1.2147298e+01   3.5626901e+01
+   3.2050000e+01   1.2343058e+01   3.5648785e+01
+   3.2050000e+01   1.2494471e+01   3.5664835e+01
+   3.2050000e+01   1.2597438e+01   3.5676273e+01
+   3.2050000e+01   1.2688149e+01   3.5686380e+01
+   3.2050000e+01   1.2785116e+01   3.5697636e+01
+   3.2050000e+01   1.2848306e+01   3.5705074e+01
+   3.2050000e+01   1.2914322e+01   3.5711992e+01
+   3.2050000e+01   1.3001628e+01   3.5721826e+01
+   3.2050000e+01   1.3051289e+01   3.5725025e+01
+   3.2050000e+01   1.3089132e+01   3.5727711e+01
+   3.2050000e+01   1.3142140e+01   3.5735612e+01
+   3.2050000e+01   1.3179091e+01   3.5738893e+01
+   3.2050000e+01   1.3225289e+01   3.5744364e+01
+   3.2050000e+01   1.3285380e+01   3.5750000e+01
+   3.2050000e+01   1.3351380e+01   3.5760339e+01
+   3.2050000e+01   1.3413512e+01   3.5768570e+01
+   3.2050000e+01   1.3485198e+01   3.5776364e+01
+   3.2050000e+01   1.3539636e+01   3.5778083e+01
+   3.2050000e+01   1.3586083e+01   3.5781620e+01
+   3.2050000e+01   1.3649860e+01   3.5788785e+01
+   3.2050000e+01   1.3724041e+01   3.5795174e+01
+   3.2050000e+01   1.3795636e+01   3.5799347e+01
+   3.2050000e+01   1.3896884e+01   3.5810504e+01
+   3.2050000e+01   1.4007802e+01   3.5819636e+01
+   3.2050000e+01   1.4119207e+01   3.5823149e+01
+   3.2050000e+01   1.4275008e+01   3.5831579e+01
+   3.2050000e+01   1.4495909e+01   3.5833537e+01
+   3.2050000e+01   1.4732562e+01   3.5837397e+01
+   3.2050000e+01   1.4997446e+01   3.5833347e+01
+   3.2050000e+01   1.5706603e+01   3.5837281e+01
+   3.2050000e+01   1.6613545e+01   3.5844116e+01
+   3.2050000e+01   1.7261298e+01   3.5850289e+01
+   3.2050000e+01   1.8017446e+01   3.5853281e+01
+   3.2050000e+01   1.8879421e+01   3.5867727e+01
+   3.2050000e+01   1.9534612e+01   3.5871678e+01
+   3.2050000e+01   1.9774289e+01   3.5868719e+01
+   3.2050000e+01   1.9845992e+01   3.5868760e+01
+   3.2050000e+01   1.9857645e+01   3.5869248e+01
+   3.2050000e+01   1.9858744e+01   3.5869810e+01
+   3.2050000e+01   1.9851843e+01   3.5868702e+01
+   3.2050000e+01   1.9795959e+01   3.5873008e+01
+   3.2100000e+01   2.5103554e+00   3.4896107e+01
+   3.2100000e+01   2.5061901e+00   3.4902207e+01
+   3.2100000e+01   2.5121488e+00   3.4907306e+01
+   3.2100000e+01   2.5413554e+00   3.4914521e+01
+   3.2100000e+01   2.5794959e+00   3.4919405e+01
+   3.2100000e+01   2.6451405e+00   3.4928736e+01
+   3.2100000e+01   2.7416281e+00   3.4940488e+01
+   3.2100000e+01   2.8990331e+00   3.4952802e+01
+   3.2100000e+01   3.0880496e+00   3.4961322e+01
+   3.2100000e+01   3.3536529e+00   3.4973281e+01
+   3.2100000e+01   3.5827603e+00   3.4972736e+01
+   3.2100000e+01   3.8425455e+00   3.4984074e+01
+   3.2100000e+01   4.3142231e+00   3.5036645e+01
+   3.2100000e+01   5.2460165e+00   3.5170777e+01
+   3.2100000e+01   6.6648926e+00   3.5382711e+01
+   3.2100000e+01   8.2569008e+00   3.5621149e+01
+   3.2100000e+01   9.2870413e+00   3.5722876e+01
+   3.2100000e+01   9.5328760e+00   3.5630785e+01
+   3.2100000e+01   9.9026364e+00   3.5537066e+01
+   3.2100000e+01   1.0298083e+01   3.5480702e+01
+   3.2100000e+01   1.0770826e+01   3.5489091e+01
+   3.2100000e+01   1.1255678e+01   3.5531455e+01
+   3.2100000e+01   1.1602421e+01   3.5566000e+01
+   3.2100000e+01   1.1914041e+01   3.5601397e+01
+   3.2100000e+01   1.2147298e+01   3.5626901e+01
+   3.2100000e+01   1.2343058e+01   3.5648785e+01
+   3.2100000e+01   1.2494471e+01   3.5664835e+01
+   3.2100000e+01   1.2597438e+01   3.5676273e+01
+   3.2100000e+01   1.2688149e+01   3.5686380e+01
+   3.2100000e+01   1.2785116e+01   3.5697636e+01
+   3.2100000e+01   1.2848306e+01   3.5705074e+01
+   3.2100000e+01   1.2914322e+01   3.5711992e+01
+   3.2100000e+01   1.3001628e+01   3.5721826e+01
+   3.2100000e+01   1.3051289e+01   3.5725025e+01
+   3.2100000e+01   1.3089132e+01   3.5727711e+01
+   3.2100000e+01   1.3142140e+01   3.5735612e+01
+   3.2100000e+01   1.3179091e+01   3.5738893e+01
+   3.2100000e+01   1.3225289e+01   3.5744364e+01
+   3.2100000e+01   1.3285380e+01   3.5750000e+01
+   3.2100000e+01   1.3351380e+01   3.5760339e+01
+   3.2100000e+01   1.3413512e+01   3.5768570e+01
+   3.2100000e+01   1.3485198e+01   3.5776364e+01
+   3.2100000e+01   1.3539636e+01   3.5778083e+01
+   3.2100000e+01   1.3586083e+01   3.5781620e+01
+   3.2100000e+01   1.3649860e+01   3.5788785e+01
+   3.2100000e+01   1.3724041e+01   3.5795174e+01
+   3.2100000e+01   1.3795636e+01   3.5799347e+01
+   3.2100000e+01   1.3896884e+01   3.5810504e+01
+   3.2100000e+01   1.4007802e+01   3.5819636e+01
+   3.2100000e+01   1.4119207e+01   3.5823149e+01
+   3.2100000e+01   1.4275008e+01   3.5831579e+01
+   3.2100000e+01   1.4495909e+01   3.5833537e+01
+   3.2100000e+01   1.4732562e+01   3.5837397e+01
+   3.2100000e+01   1.4997446e+01   3.5833347e+01
+   3.2100000e+01   1.5706603e+01   3.5837281e+01
+   3.2100000e+01   1.6613545e+01   3.5844116e+01
+   3.2100000e+01   1.7261298e+01   3.5850289e+01
+   3.2100000e+01   1.8017446e+01   3.5853281e+01
+   3.2100000e+01   1.8879421e+01   3.5867727e+01
+   3.2100000e+01   1.9534612e+01   3.5871678e+01
+   3.2100000e+01   1.9774289e+01   3.5868719e+01
+   3.2100000e+01   1.9845992e+01   3.5868760e+01
+   3.2100000e+01   1.9857645e+01   3.5869248e+01
+   3.2100000e+01   1.9858744e+01   3.5869810e+01
+   3.2100000e+01   1.9851843e+01   3.5868702e+01
+   3.2100000e+01   1.9795959e+01   3.5873008e+01
+   3.2150000e+01   2.5103554e+00   3.4896107e+01
+   3.2150000e+01   2.5061901e+00   3.4902207e+01
+   3.2150000e+01   2.5121488e+00   3.4907306e+01
+   3.2150000e+01   2.5413554e+00   3.4914521e+01
+   3.2150000e+01   2.5794959e+00   3.4919405e+01
+   3.2150000e+01   2.6451405e+00   3.4928736e+01
+   3.2150000e+01   2.7416281e+00   3.4940488e+01
+   3.2150000e+01   2.8990331e+00   3.4952802e+01
+   3.2150000e+01   3.0880496e+00   3.4961322e+01
+   3.2150000e+01   3.3536529e+00   3.4973281e+01
+   3.2150000e+01   3.5827603e+00   3.4972736e+01
+   3.2150000e+01   3.8425455e+00   3.4984074e+01
+   3.2150000e+01   4.3142231e+00   3.5036645e+01
+   3.2150000e+01   5.2460165e+00   3.5170777e+01
+   3.2150000e+01   6.6648926e+00   3.5382711e+01
+   3.2150000e+01   8.2569008e+00   3.5621149e+01
+   3.2150000e+01   9.2870413e+00   3.5722876e+01
+   3.2150000e+01   9.5328760e+00   3.5630785e+01
+   3.2150000e+01   9.9026364e+00   3.5537066e+01
+   3.2150000e+01   1.0298083e+01   3.5480702e+01
+   3.2150000e+01   1.0770826e+01   3.5489091e+01
+   3.2150000e+01   1.1255678e+01   3.5531455e+01
+   3.2150000e+01   1.1602421e+01   3.5566000e+01
+   3.2150000e+01   1.1914041e+01   3.5601397e+01
+   3.2150000e+01   1.2147298e+01   3.5626901e+01
+   3.2150000e+01   1.2343058e+01   3.5648785e+01
+   3.2150000e+01   1.2494471e+01   3.5664835e+01
+   3.2150000e+01   1.2597438e+01   3.5676273e+01
+   3.2150000e+01   1.2688149e+01   3.5686380e+01
+   3.2150000e+01   1.2785116e+01   3.5697636e+01
+   3.2150000e+01   1.2848306e+01   3.5705074e+01
+   3.2150000e+01   1.2914322e+01   3.5711992e+01
+   3.2150000e+01   1.3001628e+01   3.5721826e+01
+   3.2150000e+01   1.3051289e+01   3.5725025e+01
+   3.2150000e+01   1.3089132e+01   3.5727711e+01
+   3.2150000e+01   1.3142140e+01   3.5735612e+01
+   3.2150000e+01   1.3179091e+01   3.5738893e+01
+   3.2150000e+01   1.3225289e+01   3.5744364e+01
+   3.2150000e+01   1.3285380e+01   3.5750000e+01
+   3.2150000e+01   1.3351380e+01   3.5760339e+01
+   3.2150000e+01   1.3413512e+01   3.5768570e+01
+   3.2150000e+01   1.3485198e+01   3.5776364e+01
+   3.2150000e+01   1.3539636e+01   3.5778083e+01
+   3.2150000e+01   1.3586083e+01   3.5781620e+01
+   3.2150000e+01   1.3649860e+01   3.5788785e+01
+   3.2150000e+01   1.3724041e+01   3.5795174e+01
+   3.2150000e+01   1.3795636e+01   3.5799347e+01
+   3.2150000e+01   1.3896884e+01   3.5810504e+01
+   3.2150000e+01   1.4007802e+01   3.5819636e+01
+   3.2150000e+01   1.4119207e+01   3.5823149e+01
+   3.2150000e+01   1.4275008e+01   3.5831579e+01
+   3.2150000e+01   1.4495909e+01   3.5833537e+01
+   3.2150000e+01   1.4732562e+01   3.5837397e+01
+   3.2150000e+01   1.4997446e+01   3.5833347e+01
+   3.2150000e+01   1.5706603e+01   3.5837281e+01
+   3.2150000e+01   1.6613545e+01   3.5844116e+01
+   3.2150000e+01   1.7261298e+01   3.5850289e+01
+   3.2150000e+01   1.8017446e+01   3.5853281e+01
+   3.2150000e+01   1.8879421e+01   3.5867727e+01
+   3.2150000e+01   1.9534612e+01   3.5871678e+01
+   3.2150000e+01   1.9774289e+01   3.5868719e+01
+   3.2150000e+01   1.9845992e+01   3.5868760e+01
+   3.2150000e+01   1.9857645e+01   3.5869248e+01
+   3.2150000e+01   1.9858744e+01   3.5869810e+01
+   3.2150000e+01   1.9851843e+01   3.5868702e+01
+   3.2150000e+01   1.9795959e+01   3.5873008e+01
+   3.2200000e+01   2.5103554e+00   3.4896107e+01
+   3.2200000e+01   2.5061901e+00   3.4902207e+01
+   3.2200000e+01   2.5121488e+00   3.4907306e+01
+   3.2200000e+01   2.5413554e+00   3.4914521e+01
+   3.2200000e+01   2.5794959e+00   3.4919405e+01
+   3.2200000e+01   2.6451405e+00   3.4928736e+01
+   3.2200000e+01   2.7416281e+00   3.4940488e+01
+   3.2200000e+01   2.8990331e+00   3.4952802e+01
+   3.2200000e+01   3.0880496e+00   3.4961322e+01
+   3.2200000e+01   3.3536529e+00   3.4973281e+01
+   3.2200000e+01   3.5827603e+00   3.4972736e+01
+   3.2200000e+01   3.8425455e+00   3.4984074e+01
+   3.2200000e+01   4.3142231e+00   3.5036645e+01
+   3.2200000e+01   5.2460165e+00   3.5170777e+01
+   3.2200000e+01   6.6648926e+00   3.5382711e+01
+   3.2200000e+01   8.2569008e+00   3.5621149e+01
+   3.2200000e+01   9.2870413e+00   3.5722876e+01
+   3.2200000e+01   9.5328760e+00   3.5630785e+01
+   3.2200000e+01   9.9026364e+00   3.5537066e+01
+   3.2200000e+01   1.0298083e+01   3.5480702e+01
+   3.2200000e+01   1.0770826e+01   3.5489091e+01
+   3.2200000e+01   1.1255678e+01   3.5531455e+01
+   3.2200000e+01   1.1602421e+01   3.5566000e+01
+   3.2200000e+01   1.1914041e+01   3.5601397e+01
+   3.2200000e+01   1.2147298e+01   3.5626901e+01
+   3.2200000e+01   1.2343058e+01   3.5648785e+01
+   3.2200000e+01   1.2494471e+01   3.5664835e+01
+   3.2200000e+01   1.2597438e+01   3.5676273e+01
+   3.2200000e+01   1.2688149e+01   3.5686380e+01
+   3.2200000e+01   1.2785116e+01   3.5697636e+01
+   3.2200000e+01   1.2848306e+01   3.5705074e+01
+   3.2200000e+01   1.2914322e+01   3.5711992e+01
+   3.2200000e+01   1.3001628e+01   3.5721826e+01
+   3.2200000e+01   1.3051289e+01   3.5725025e+01
+   3.2200000e+01   1.3089132e+01   3.5727711e+01
+   3.2200000e+01   1.3142140e+01   3.5735612e+01
+   3.2200000e+01   1.3179091e+01   3.5738893e+01
+   3.2200000e+01   1.3225289e+01   3.5744364e+01
+   3.2200000e+01   1.3285380e+01   3.5750000e+01
+   3.2200000e+01   1.3351380e+01   3.5760339e+01
+   3.2200000e+01   1.3413512e+01   3.5768570e+01
+   3.2200000e+01   1.3485198e+01   3.5776364e+01
+   3.2200000e+01   1.3539636e+01   3.5778083e+01
+   3.2200000e+01   1.3586083e+01   3.5781620e+01
+   3.2200000e+01   1.3649860e+01   3.5788785e+01
+   3.2200000e+01   1.3724041e+01   3.5795174e+01
+   3.2200000e+01   1.3795636e+01   3.5799347e+01
+   3.2200000e+01   1.3896884e+01   3.5810504e+01
+   3.2200000e+01   1.4007802e+01   3.5819636e+01
+   3.2200000e+01   1.4119207e+01   3.5823149e+01
+   3.2200000e+01   1.4275008e+01   3.5831579e+01
+   3.2200000e+01   1.4495909e+01   3.5833537e+01
+   3.2200000e+01   1.4732562e+01   3.5837397e+01
+   3.2200000e+01   1.4997446e+01   3.5833347e+01
+   3.2200000e+01   1.5706603e+01   3.5837281e+01
+   3.2200000e+01   1.6613545e+01   3.5844116e+01
+   3.2200000e+01   1.7261298e+01   3.5850289e+01
+   3.2200000e+01   1.8017446e+01   3.5853281e+01
+   3.2200000e+01   1.8879421e+01   3.5867727e+01
+   3.2200000e+01   1.9534612e+01   3.5871678e+01
+   3.2200000e+01   1.9774289e+01   3.5868719e+01
+   3.2200000e+01   1.9845992e+01   3.5868760e+01
+   3.2200000e+01   1.9857645e+01   3.5869248e+01
+   3.2200000e+01   1.9858744e+01   3.5869810e+01
+   3.2200000e+01   1.9851843e+01   3.5868702e+01
+   3.2200000e+01   1.9795959e+01   3.5873008e+01
+   3.2250000e+01   2.5103554e+00   3.4896107e+01
+   3.2250000e+01   2.5061901e+00   3.4902207e+01
+   3.2250000e+01   2.5121488e+00   3.4907306e+01
+   3.2250000e+01   2.5413554e+00   3.4914521e+01
+   3.2250000e+01   2.5794959e+00   3.4919405e+01
+   3.2250000e+01   2.6451405e+00   3.4928736e+01
+   3.2250000e+01   2.7416281e+00   3.4940488e+01
+   3.2250000e+01   2.8990331e+00   3.4952802e+01
+   3.2250000e+01   3.0880496e+00   3.4961322e+01
+   3.2250000e+01   3.3536529e+00   3.4973281e+01
+   3.2250000e+01   3.5827603e+00   3.4972736e+01
+   3.2250000e+01   3.8425455e+00   3.4984074e+01
+   3.2250000e+01   4.3142231e+00   3.5036645e+01
+   3.2250000e+01   5.2460165e+00   3.5170777e+01
+   3.2250000e+01   6.6648926e+00   3.5382711e+01
+   3.2250000e+01   8.2569008e+00   3.5621149e+01
+   3.2250000e+01   9.2870413e+00   3.5722876e+01
+   3.2250000e+01   9.5328760e+00   3.5630785e+01
+   3.2250000e+01   9.9026364e+00   3.5537066e+01
+   3.2250000e+01   1.0298083e+01   3.5480702e+01
+   3.2250000e+01   1.0770826e+01   3.5489091e+01
+   3.2250000e+01   1.1255678e+01   3.5531455e+01
+   3.2250000e+01   1.1602421e+01   3.5566000e+01
+   3.2250000e+01   1.1914041e+01   3.5601397e+01
+   3.2250000e+01   1.2147298e+01   3.5626901e+01
+   3.2250000e+01   1.2343058e+01   3.5648785e+01
+   3.2250000e+01   1.2494471e+01   3.5664835e+01
+   3.2250000e+01   1.2597438e+01   3.5676273e+01
+   3.2250000e+01   1.2688149e+01   3.5686380e+01
+   3.2250000e+01   1.2785116e+01   3.5697636e+01
+   3.2250000e+01   1.2848306e+01   3.5705074e+01
+   3.2250000e+01   1.2914322e+01   3.5711992e+01
+   3.2250000e+01   1.3001628e+01   3.5721826e+01
+   3.2250000e+01   1.3051289e+01   3.5725025e+01
+   3.2250000e+01   1.3089132e+01   3.5727711e+01
+   3.2250000e+01   1.3142140e+01   3.5735612e+01
+   3.2250000e+01   1.3179091e+01   3.5738893e+01
+   3.2250000e+01   1.3225289e+01   3.5744364e+01
+   3.2250000e+01   1.3285380e+01   3.5750000e+01
+   3.2250000e+01   1.3351380e+01   3.5760339e+01
+   3.2250000e+01   1.3413512e+01   3.5768570e+01
+   3.2250000e+01   1.3485198e+01   3.5776364e+01
+   3.2250000e+01   1.3539636e+01   3.5778083e+01
+   3.2250000e+01   1.3586083e+01   3.5781620e+01
+   3.2250000e+01   1.3649860e+01   3.5788785e+01
+   3.2250000e+01   1.3724041e+01   3.5795174e+01
+   3.2250000e+01   1.3795636e+01   3.5799347e+01
+   3.2250000e+01   1.3896884e+01   3.5810504e+01
+   3.2250000e+01   1.4007802e+01   3.5819636e+01
+   3.2250000e+01   1.4119207e+01   3.5823149e+01
+   3.2250000e+01   1.4275008e+01   3.5831579e+01
+   3.2250000e+01   1.4495909e+01   3.5833537e+01
+   3.2250000e+01   1.4732562e+01   3.5837397e+01
+   3.2250000e+01   1.4997446e+01   3.5833347e+01
+   3.2250000e+01   1.5706603e+01   3.5837281e+01
+   3.2250000e+01   1.6613545e+01   3.5844116e+01
+   3.2250000e+01   1.7261298e+01   3.5850289e+01
+   3.2250000e+01   1.8017446e+01   3.5853281e+01
+   3.2250000e+01   1.8879421e+01   3.5867727e+01
+   3.2250000e+01   1.9534612e+01   3.5871678e+01
+   3.2250000e+01   1.9774289e+01   3.5868719e+01
+   3.2250000e+01   1.9845992e+01   3.5868760e+01
+   3.2250000e+01   1.9857645e+01   3.5869248e+01
+   3.2250000e+01   1.9858744e+01   3.5869810e+01
+   3.2250000e+01   1.9851843e+01   3.5868702e+01
+   3.2250000e+01   1.9795959e+01   3.5873008e+01
+   3.2300000e+01   2.5103554e+00   3.4896107e+01
+   3.2300000e+01   2.5061901e+00   3.4902207e+01
+   3.2300000e+01   2.5121488e+00   3.4907306e+01
+   3.2300000e+01   2.5413554e+00   3.4914521e+01
+   3.2300000e+01   2.5794959e+00   3.4919405e+01
+   3.2300000e+01   2.6451405e+00   3.4928736e+01
+   3.2300000e+01   2.7416281e+00   3.4940488e+01
+   3.2300000e+01   2.8990331e+00   3.4952802e+01
+   3.2300000e+01   3.0880496e+00   3.4961322e+01
+   3.2300000e+01   3.3536529e+00   3.4973281e+01
+   3.2300000e+01   3.5827603e+00   3.4972736e+01
+   3.2300000e+01   3.8425455e+00   3.4984074e+01
+   3.2300000e+01   4.3142231e+00   3.5036645e+01
+   3.2300000e+01   5.2460165e+00   3.5170777e+01
+   3.2300000e+01   6.6648926e+00   3.5382711e+01
+   3.2300000e+01   8.2569008e+00   3.5621149e+01
+   3.2300000e+01   9.2870413e+00   3.5722876e+01
+   3.2300000e+01   9.5328760e+00   3.5630785e+01
+   3.2300000e+01   9.9026364e+00   3.5537066e+01
+   3.2300000e+01   1.0298083e+01   3.5480702e+01
+   3.2300000e+01   1.0770826e+01   3.5489091e+01
+   3.2300000e+01   1.1255678e+01   3.5531455e+01
+   3.2300000e+01   1.1602421e+01   3.5566000e+01
+   3.2300000e+01   1.1914041e+01   3.5601397e+01
+   3.2300000e+01   1.2147298e+01   3.5626901e+01
+   3.2300000e+01   1.2343058e+01   3.5648785e+01
+   3.2300000e+01   1.2494471e+01   3.5664835e+01
+   3.2300000e+01   1.2597438e+01   3.5676273e+01
+   3.2300000e+01   1.2688149e+01   3.5686380e+01
+   3.2300000e+01   1.2785116e+01   3.5697636e+01
+   3.2300000e+01   1.2848306e+01   3.5705074e+01
+   3.2300000e+01   1.2914322e+01   3.5711992e+01
+   3.2300000e+01   1.3001628e+01   3.5721826e+01
+   3.2300000e+01   1.3051289e+01   3.5725025e+01
+   3.2300000e+01   1.3089132e+01   3.5727711e+01
+   3.2300000e+01   1.3142140e+01   3.5735612e+01
+   3.2300000e+01   1.3179091e+01   3.5738893e+01
+   3.2300000e+01   1.3225289e+01   3.5744364e+01
+   3.2300000e+01   1.3285380e+01   3.5750000e+01
+   3.2300000e+01   1.3351380e+01   3.5760339e+01
+   3.2300000e+01   1.3413512e+01   3.5768570e+01
+   3.2300000e+01   1.3485198e+01   3.5776364e+01
+   3.2300000e+01   1.3539636e+01   3.5778083e+01
+   3.2300000e+01   1.3586083e+01   3.5781620e+01
+   3.2300000e+01   1.3649860e+01   3.5788785e+01
+   3.2300000e+01   1.3724041e+01   3.5795174e+01
+   3.2300000e+01   1.3795636e+01   3.5799347e+01
+   3.2300000e+01   1.3896884e+01   3.5810504e+01
+   3.2300000e+01   1.4007802e+01   3.5819636e+01
+   3.2300000e+01   1.4119207e+01   3.5823149e+01
+   3.2300000e+01   1.4275008e+01   3.5831579e+01
+   3.2300000e+01   1.4495909e+01   3.5833537e+01
+   3.2300000e+01   1.4732562e+01   3.5837397e+01
+   3.2300000e+01   1.4997446e+01   3.5833347e+01
+   3.2300000e+01   1.5706603e+01   3.5837281e+01
+   3.2300000e+01   1.6613545e+01   3.5844116e+01
+   3.2300000e+01   1.7261298e+01   3.5850289e+01
+   3.2300000e+01   1.8017446e+01   3.5853281e+01
+   3.2300000e+01   1.8879421e+01   3.5867727e+01
+   3.2300000e+01   1.9534612e+01   3.5871678e+01
+   3.2300000e+01   1.9774289e+01   3.5868719e+01
+   3.2300000e+01   1.9845992e+01   3.5868760e+01
+   3.2300000e+01   1.9857645e+01   3.5869248e+01
+   3.2300000e+01   1.9858744e+01   3.5869810e+01
+   3.2300000e+01   1.9851843e+01   3.5868702e+01
+   3.2300000e+01   1.9795959e+01   3.5873008e+01
+   3.2350000e+01   2.5103554e+00   3.4896107e+01
+   3.2350000e+01   2.5061901e+00   3.4902207e+01
+   3.2350000e+01   2.5121488e+00   3.4907306e+01
+   3.2350000e+01   2.5413554e+00   3.4914521e+01
+   3.2350000e+01   2.5794959e+00   3.4919405e+01
+   3.2350000e+01   2.6451405e+00   3.4928736e+01
+   3.2350000e+01   2.7416281e+00   3.4940488e+01
+   3.2350000e+01   2.8990331e+00   3.4952802e+01
+   3.2350000e+01   3.0880496e+00   3.4961322e+01
+   3.2350000e+01   3.3536529e+00   3.4973281e+01
+   3.2350000e+01   3.5827603e+00   3.4972736e+01
+   3.2350000e+01   3.8425455e+00   3.4984074e+01
+   3.2350000e+01   4.3142231e+00   3.5036645e+01
+   3.2350000e+01   5.2460165e+00   3.5170777e+01
+   3.2350000e+01   6.6648926e+00   3.5382711e+01
+   3.2350000e+01   8.2569008e+00   3.5621149e+01
+   3.2350000e+01   9.2870413e+00   3.5722876e+01
+   3.2350000e+01   9.5328760e+00   3.5630785e+01
+   3.2350000e+01   9.9026364e+00   3.5537066e+01
+   3.2350000e+01   1.0298083e+01   3.5480702e+01
+   3.2350000e+01   1.0770826e+01   3.5489091e+01
+   3.2350000e+01   1.1255678e+01   3.5531455e+01
+   3.2350000e+01   1.1602421e+01   3.5566000e+01
+   3.2350000e+01   1.1914041e+01   3.5601397e+01
+   3.2350000e+01   1.2147298e+01   3.5626901e+01
+   3.2350000e+01   1.2343058e+01   3.5648785e+01
+   3.2350000e+01   1.2494471e+01   3.5664835e+01
+   3.2350000e+01   1.2597438e+01   3.5676273e+01
+   3.2350000e+01   1.2688149e+01   3.5686380e+01
+   3.2350000e+01   1.2785116e+01   3.5697636e+01
+   3.2350000e+01   1.2848306e+01   3.5705074e+01
+   3.2350000e+01   1.2914322e+01   3.5711992e+01
+   3.2350000e+01   1.3001628e+01   3.5721826e+01
+   3.2350000e+01   1.3051289e+01   3.5725025e+01
+   3.2350000e+01   1.3089132e+01   3.5727711e+01
+   3.2350000e+01   1.3142140e+01   3.5735612e+01
+   3.2350000e+01   1.3179091e+01   3.5738893e+01
+   3.2350000e+01   1.3225289e+01   3.5744364e+01
+   3.2350000e+01   1.3285380e+01   3.5750000e+01
+   3.2350000e+01   1.3351380e+01   3.5760339e+01
+   3.2350000e+01   1.3413512e+01   3.5768570e+01
+   3.2350000e+01   1.3485198e+01   3.5776364e+01
+   3.2350000e+01   1.3539636e+01   3.5778083e+01
+   3.2350000e+01   1.3586083e+01   3.5781620e+01
+   3.2350000e+01   1.3649860e+01   3.5788785e+01
+   3.2350000e+01   1.3724041e+01   3.5795174e+01
+   3.2350000e+01   1.3795636e+01   3.5799347e+01
+   3.2350000e+01   1.3896884e+01   3.5810504e+01
+   3.2350000e+01   1.4007802e+01   3.5819636e+01
+   3.2350000e+01   1.4119207e+01   3.5823149e+01
+   3.2350000e+01   1.4275008e+01   3.5831579e+01
+   3.2350000e+01   1.4495909e+01   3.5833537e+01
+   3.2350000e+01   1.4732562e+01   3.5837397e+01
+   3.2350000e+01   1.4997446e+01   3.5833347e+01
+   3.2350000e+01   1.5706603e+01   3.5837281e+01
+   3.2350000e+01   1.6613545e+01   3.5844116e+01
+   3.2350000e+01   1.7261298e+01   3.5850289e+01
+   3.2350000e+01   1.8017446e+01   3.5853281e+01
+   3.2350000e+01   1.8879421e+01   3.5867727e+01
+   3.2350000e+01   1.9534612e+01   3.5871678e+01
+   3.2350000e+01   1.9774289e+01   3.5868719e+01
+   3.2350000e+01   1.9845992e+01   3.5868760e+01
+   3.2350000e+01   1.9857645e+01   3.5869248e+01
+   3.2350000e+01   1.9858744e+01   3.5869810e+01
+   3.2350000e+01   1.9851843e+01   3.5868702e+01
+   3.2350000e+01   1.9795959e+01   3.5873008e+01
+   3.2400000e+01   2.5103554e+00   3.4896107e+01
+   3.2400000e+01   2.5061901e+00   3.4902207e+01
+   3.2400000e+01   2.5121488e+00   3.4907306e+01
+   3.2400000e+01   2.5413554e+00   3.4914521e+01
+   3.2400000e+01   2.5794959e+00   3.4919405e+01
+   3.2400000e+01   2.6451405e+00   3.4928736e+01
+   3.2400000e+01   2.7416281e+00   3.4940488e+01
+   3.2400000e+01   2.8990331e+00   3.4952802e+01
+   3.2400000e+01   3.0880496e+00   3.4961322e+01
+   3.2400000e+01   3.3536529e+00   3.4973281e+01
+   3.2400000e+01   3.5827603e+00   3.4972736e+01
+   3.2400000e+01   3.8425455e+00   3.4984074e+01
+   3.2400000e+01   4.3142231e+00   3.5036645e+01
+   3.2400000e+01   5.2460165e+00   3.5170777e+01
+   3.2400000e+01   6.6648926e+00   3.5382711e+01
+   3.2400000e+01   8.2569008e+00   3.5621149e+01
+   3.2400000e+01   9.2870413e+00   3.5722876e+01
+   3.2400000e+01   9.5328760e+00   3.5630785e+01
+   3.2400000e+01   9.9026364e+00   3.5537066e+01
+   3.2400000e+01   1.0298083e+01   3.5480702e+01
+   3.2400000e+01   1.0770826e+01   3.5489091e+01
+   3.2400000e+01   1.1255678e+01   3.5531455e+01
+   3.2400000e+01   1.1602421e+01   3.5566000e+01
+   3.2400000e+01   1.1914041e+01   3.5601397e+01
+   3.2400000e+01   1.2147298e+01   3.5626901e+01
+   3.2400000e+01   1.2343058e+01   3.5648785e+01
+   3.2400000e+01   1.2494471e+01   3.5664835e+01
+   3.2400000e+01   1.2597438e+01   3.5676273e+01
+   3.2400000e+01   1.2688149e+01   3.5686380e+01
+   3.2400000e+01   1.2785116e+01   3.5697636e+01
+   3.2400000e+01   1.2848306e+01   3.5705074e+01
+   3.2400000e+01   1.2914322e+01   3.5711992e+01
+   3.2400000e+01   1.3001628e+01   3.5721826e+01
+   3.2400000e+01   1.3051289e+01   3.5725025e+01
+   3.2400000e+01   1.3089132e+01   3.5727711e+01
+   3.2400000e+01   1.3142140e+01   3.5735612e+01
+   3.2400000e+01   1.3179091e+01   3.5738893e+01
+   3.2400000e+01   1.3225289e+01   3.5744364e+01
+   3.2400000e+01   1.3285380e+01   3.5750000e+01
+   3.2400000e+01   1.3351380e+01   3.5760339e+01
+   3.2400000e+01   1.3413512e+01   3.5768570e+01
+   3.2400000e+01   1.3485198e+01   3.5776364e+01
+   3.2400000e+01   1.3539636e+01   3.5778083e+01
+   3.2400000e+01   1.3586083e+01   3.5781620e+01
+   3.2400000e+01   1.3649860e+01   3.5788785e+01
+   3.2400000e+01   1.3724041e+01   3.5795174e+01
+   3.2400000e+01   1.3795636e+01   3.5799347e+01
+   3.2400000e+01   1.3896884e+01   3.5810504e+01
+   3.2400000e+01   1.4007802e+01   3.5819636e+01
+   3.2400000e+01   1.4119207e+01   3.5823149e+01
+   3.2400000e+01   1.4275008e+01   3.5831579e+01
+   3.2400000e+01   1.4495909e+01   3.5833537e+01
+   3.2400000e+01   1.4732562e+01   3.5837397e+01
+   3.2400000e+01   1.4997446e+01   3.5833347e+01
+   3.2400000e+01   1.5706603e+01   3.5837281e+01
+   3.2400000e+01   1.6613545e+01   3.5844116e+01
+   3.2400000e+01   1.7261298e+01   3.5850289e+01
+   3.2400000e+01   1.8017446e+01   3.5853281e+01
+   3.2400000e+01   1.8879421e+01   3.5867727e+01
+   3.2400000e+01   1.9534612e+01   3.5871678e+01
+   3.2400000e+01   1.9774289e+01   3.5868719e+01
+   3.2400000e+01   1.9845992e+01   3.5868760e+01
+   3.2400000e+01   1.9857645e+01   3.5869248e+01
+   3.2400000e+01   1.9858744e+01   3.5869810e+01
+   3.2400000e+01   1.9851843e+01   3.5868702e+01
+   3.2400000e+01   1.9795959e+01   3.5873008e+01
+   3.2450000e+01   2.5103554e+00   3.4896107e+01
+   3.2450000e+01   2.5061901e+00   3.4902207e+01
+   3.2450000e+01   2.5121488e+00   3.4907306e+01
+   3.2450000e+01   2.5413554e+00   3.4914521e+01
+   3.2450000e+01   2.5794959e+00   3.4919405e+01
+   3.2450000e+01   2.6451405e+00   3.4928736e+01
+   3.2450000e+01   2.7416281e+00   3.4940488e+01
+   3.2450000e+01   2.8990331e+00   3.4952802e+01
+   3.2450000e+01   3.0880496e+00   3.4961322e+01
+   3.2450000e+01   3.3536529e+00   3.4973281e+01
+   3.2450000e+01   3.5827603e+00   3.4972736e+01
+   3.2450000e+01   3.8425455e+00   3.4984074e+01
+   3.2450000e+01   4.3142231e+00   3.5036645e+01
+   3.2450000e+01   5.2460165e+00   3.5170777e+01
+   3.2450000e+01   6.6648926e+00   3.5382711e+01
+   3.2450000e+01   8.2569008e+00   3.5621149e+01
+   3.2450000e+01   9.2870413e+00   3.5722876e+01
+   3.2450000e+01   9.5328760e+00   3.5630785e+01
+   3.2450000e+01   9.9026364e+00   3.5537066e+01
+   3.2450000e+01   1.0298083e+01   3.5480702e+01
+   3.2450000e+01   1.0770826e+01   3.5489091e+01
+   3.2450000e+01   1.1255678e+01   3.5531455e+01
+   3.2450000e+01   1.1602421e+01   3.5566000e+01
+   3.2450000e+01   1.1914041e+01   3.5601397e+01
+   3.2450000e+01   1.2147298e+01   3.5626901e+01
+   3.2450000e+01   1.2343058e+01   3.5648785e+01
+   3.2450000e+01   1.2494471e+01   3.5664835e+01
+   3.2450000e+01   1.2597438e+01   3.5676273e+01
+   3.2450000e+01   1.2688149e+01   3.5686380e+01
+   3.2450000e+01   1.2785116e+01   3.5697636e+01
+   3.2450000e+01   1.2848306e+01   3.5705074e+01
+   3.2450000e+01   1.2914322e+01   3.5711992e+01
+   3.2450000e+01   1.3001628e+01   3.5721826e+01
+   3.2450000e+01   1.3051289e+01   3.5725025e+01
+   3.2450000e+01   1.3089132e+01   3.5727711e+01
+   3.2450000e+01   1.3142140e+01   3.5735612e+01
+   3.2450000e+01   1.3179091e+01   3.5738893e+01
+   3.2450000e+01   1.3225289e+01   3.5744364e+01
+   3.2450000e+01   1.3285380e+01   3.5750000e+01
+   3.2450000e+01   1.3351380e+01   3.5760339e+01
+   3.2450000e+01   1.3413512e+01   3.5768570e+01
+   3.2450000e+01   1.3485198e+01   3.5776364e+01
+   3.2450000e+01   1.3539636e+01   3.5778083e+01
+   3.2450000e+01   1.3586083e+01   3.5781620e+01
+   3.2450000e+01   1.3649860e+01   3.5788785e+01
+   3.2450000e+01   1.3724041e+01   3.5795174e+01
+   3.2450000e+01   1.3795636e+01   3.5799347e+01
+   3.2450000e+01   1.3896884e+01   3.5810504e+01
+   3.2450000e+01   1.4007802e+01   3.5819636e+01
+   3.2450000e+01   1.4119207e+01   3.5823149e+01
+   3.2450000e+01   1.4275008e+01   3.5831579e+01
+   3.2450000e+01   1.4495909e+01   3.5833537e+01
+   3.2450000e+01   1.4732562e+01   3.5837397e+01
+   3.2450000e+01   1.4997446e+01   3.5833347e+01
+   3.2450000e+01   1.5706603e+01   3.5837281e+01
+   3.2450000e+01   1.6613545e+01   3.5844116e+01
+   3.2450000e+01   1.7261298e+01   3.5850289e+01
+   3.2450000e+01   1.8017446e+01   3.5853281e+01
+   3.2450000e+01   1.8879421e+01   3.5867727e+01
+   3.2450000e+01   1.9534612e+01   3.5871678e+01
+   3.2450000e+01   1.9774289e+01   3.5868719e+01
+   3.2450000e+01   1.9845992e+01   3.5868760e+01
+   3.2450000e+01   1.9857645e+01   3.5869248e+01
+   3.2450000e+01   1.9858744e+01   3.5869810e+01
+   3.2450000e+01   1.9851843e+01   3.5868702e+01
+   3.2450000e+01   1.9795959e+01   3.5873008e+01
+   3.2500000e+01   2.5103554e+00   3.4896107e+01
+   3.2500000e+01   2.5061901e+00   3.4902207e+01
+   3.2500000e+01   2.5121488e+00   3.4907306e+01
+   3.2500000e+01   2.5413554e+00   3.4914521e+01
+   3.2500000e+01   2.5794959e+00   3.4919405e+01
+   3.2500000e+01   2.6451405e+00   3.4928736e+01
+   3.2500000e+01   2.7416281e+00   3.4940488e+01
+   3.2500000e+01   2.8990331e+00   3.4952802e+01
+   3.2500000e+01   3.0880496e+00   3.4961322e+01
+   3.2500000e+01   3.3536529e+00   3.4973281e+01
+   3.2500000e+01   3.5827603e+00   3.4972736e+01
+   3.2500000e+01   3.8425455e+00   3.4984074e+01
+   3.2500000e+01   4.3142231e+00   3.5036645e+01
+   3.2500000e+01   5.2460165e+00   3.5170777e+01
+   3.2500000e+01   6.6648926e+00   3.5382711e+01
+   3.2500000e+01   8.2569008e+00   3.5621149e+01
+   3.2500000e+01   9.2870413e+00   3.5722876e+01
+   3.2500000e+01   9.5328760e+00   3.5630785e+01
+   3.2500000e+01   9.9026364e+00   3.5537066e+01
+   3.2500000e+01   1.0298083e+01   3.5480702e+01
+   3.2500000e+01   1.0770826e+01   3.5489091e+01
+   3.2500000e+01   1.1255678e+01   3.5531455e+01
+   3.2500000e+01   1.1602421e+01   3.5566000e+01
+   3.2500000e+01   1.1914041e+01   3.5601397e+01
+   3.2500000e+01   1.2147298e+01   3.5626901e+01
+   3.2500000e+01   1.2343058e+01   3.5648785e+01
+   3.2500000e+01   1.2494471e+01   3.5664835e+01
+   3.2500000e+01   1.2597438e+01   3.5676273e+01
+   3.2500000e+01   1.2688149e+01   3.5686380e+01
+   3.2500000e+01   1.2785116e+01   3.5697636e+01
+   3.2500000e+01   1.2848306e+01   3.5705074e+01
+   3.2500000e+01   1.2914322e+01   3.5711992e+01
+   3.2500000e+01   1.3001628e+01   3.5721826e+01
+   3.2500000e+01   1.3051289e+01   3.5725025e+01
+   3.2500000e+01   1.3089132e+01   3.5727711e+01
+   3.2500000e+01   1.3142140e+01   3.5735612e+01
+   3.2500000e+01   1.3179091e+01   3.5738893e+01
+   3.2500000e+01   1.3225289e+01   3.5744364e+01
+   3.2500000e+01   1.3285380e+01   3.5750000e+01
+   3.2500000e+01   1.3351380e+01   3.5760339e+01
+   3.2500000e+01   1.3413512e+01   3.5768570e+01
+   3.2500000e+01   1.3485198e+01   3.5776364e+01
+   3.2500000e+01   1.3539636e+01   3.5778083e+01
+   3.2500000e+01   1.3586083e+01   3.5781620e+01
+   3.2500000e+01   1.3649860e+01   3.5788785e+01
+   3.2500000e+01   1.3724041e+01   3.5795174e+01
+   3.2500000e+01   1.3795636e+01   3.5799347e+01
+   3.2500000e+01   1.3896884e+01   3.5810504e+01
+   3.2500000e+01   1.4007802e+01   3.5819636e+01
+   3.2500000e+01   1.4119207e+01   3.5823149e+01
+   3.2500000e+01   1.4275008e+01   3.5831579e+01
+   3.2500000e+01   1.4495909e+01   3.5833537e+01
+   3.2500000e+01   1.4732562e+01   3.5837397e+01
+   3.2500000e+01   1.4997446e+01   3.5833347e+01
+   3.2500000e+01   1.5706603e+01   3.5837281e+01
+   3.2500000e+01   1.6613545e+01   3.5844116e+01
+   3.2500000e+01   1.7261298e+01   3.5850289e+01
+   3.2500000e+01   1.8017446e+01   3.5853281e+01
+   3.2500000e+01   1.8879421e+01   3.5867727e+01
+   3.2500000e+01   1.9534612e+01   3.5871678e+01
+   3.2500000e+01   1.9774289e+01   3.5868719e+01
+   3.2500000e+01   1.9845992e+01   3.5868760e+01
+   3.2500000e+01   1.9857645e+01   3.5869248e+01
+   3.2500000e+01   1.9858744e+01   3.5869810e+01
+   3.2500000e+01   1.9851843e+01   3.5868702e+01
+   3.2500000e+01   1.9795959e+01   3.5873008e+01
+   3.2550000e+01   2.5103554e+00   3.4896107e+01
+   3.2550000e+01   2.5061901e+00   3.4902207e+01
+   3.2550000e+01   2.5121488e+00   3.4907306e+01
+   3.2550000e+01   2.5413554e+00   3.4914521e+01
+   3.2550000e+01   2.5794959e+00   3.4919405e+01
+   3.2550000e+01   2.6451405e+00   3.4928736e+01
+   3.2550000e+01   2.7416281e+00   3.4940488e+01
+   3.2550000e+01   2.8990331e+00   3.4952802e+01
+   3.2550000e+01   3.0880496e+00   3.4961322e+01
+   3.2550000e+01   3.3536529e+00   3.4973281e+01
+   3.2550000e+01   3.5827603e+00   3.4972736e+01
+   3.2550000e+01   3.8425455e+00   3.4984074e+01
+   3.2550000e+01   4.3142231e+00   3.5036645e+01
+   3.2550000e+01   5.2460165e+00   3.5170777e+01
+   3.2550000e+01   6.6648926e+00   3.5382711e+01
+   3.2550000e+01   8.2569008e+00   3.5621149e+01
+   3.2550000e+01   9.2870413e+00   3.5722876e+01
+   3.2550000e+01   9.5328760e+00   3.5630785e+01
+   3.2550000e+01   9.9026364e+00   3.5537066e+01
+   3.2550000e+01   1.0298083e+01   3.5480702e+01
+   3.2550000e+01   1.0770826e+01   3.5489091e+01
+   3.2550000e+01   1.1255678e+01   3.5531455e+01
+   3.2550000e+01   1.1602421e+01   3.5566000e+01
+   3.2550000e+01   1.1914041e+01   3.5601397e+01
+   3.2550000e+01   1.2147298e+01   3.5626901e+01
+   3.2550000e+01   1.2343058e+01   3.5648785e+01
+   3.2550000e+01   1.2494471e+01   3.5664835e+01
+   3.2550000e+01   1.2597438e+01   3.5676273e+01
+   3.2550000e+01   1.2688149e+01   3.5686380e+01
+   3.2550000e+01   1.2785116e+01   3.5697636e+01
+   3.2550000e+01   1.2848306e+01   3.5705074e+01
+   3.2550000e+01   1.2914322e+01   3.5711992e+01
+   3.2550000e+01   1.3001628e+01   3.5721826e+01
+   3.2550000e+01   1.3051289e+01   3.5725025e+01
+   3.2550000e+01   1.3089132e+01   3.5727711e+01
+   3.2550000e+01   1.3142140e+01   3.5735612e+01
+   3.2550000e+01   1.3179091e+01   3.5738893e+01
+   3.2550000e+01   1.3225289e+01   3.5744364e+01
+   3.2550000e+01   1.3285380e+01   3.5750000e+01
+   3.2550000e+01   1.3351380e+01   3.5760339e+01
+   3.2550000e+01   1.3413512e+01   3.5768570e+01
+   3.2550000e+01   1.3485198e+01   3.5776364e+01
+   3.2550000e+01   1.3539636e+01   3.5778083e+01
+   3.2550000e+01   1.3586083e+01   3.5781620e+01
+   3.2550000e+01   1.3649860e+01   3.5788785e+01
+   3.2550000e+01   1.3724041e+01   3.5795174e+01
+   3.2550000e+01   1.3795636e+01   3.5799347e+01
+   3.2550000e+01   1.3896884e+01   3.5810504e+01
+   3.2550000e+01   1.4007802e+01   3.5819636e+01
+   3.2550000e+01   1.4119207e+01   3.5823149e+01
+   3.2550000e+01   1.4275008e+01   3.5831579e+01
+   3.2550000e+01   1.4495909e+01   3.5833537e+01
+   3.2550000e+01   1.4732562e+01   3.5837397e+01
+   3.2550000e+01   1.4997446e+01   3.5833347e+01
+   3.2550000e+01   1.5706603e+01   3.5837281e+01
+   3.2550000e+01   1.6613545e+01   3.5844116e+01
+   3.2550000e+01   1.7261298e+01   3.5850289e+01
+   3.2550000e+01   1.8017446e+01   3.5853281e+01
+   3.2550000e+01   1.8879421e+01   3.5867727e+01
+   3.2550000e+01   1.9534612e+01   3.5871678e+01
+   3.2550000e+01   1.9774289e+01   3.5868719e+01
+   3.2550000e+01   1.9845992e+01   3.5868760e+01
+   3.2550000e+01   1.9857645e+01   3.5869248e+01
+   3.2550000e+01   1.9858744e+01   3.5869810e+01
+   3.2550000e+01   1.9851843e+01   3.5868702e+01
+   3.2550000e+01   1.9795959e+01   3.5873008e+01
+   3.2600000e+01   2.5103554e+00   3.4896107e+01
+   3.2600000e+01   2.5061901e+00   3.4902207e+01
+   3.2600000e+01   2.5121488e+00   3.4907306e+01
+   3.2600000e+01   2.5413554e+00   3.4914521e+01
+   3.2600000e+01   2.5794959e+00   3.4919405e+01
+   3.2600000e+01   2.6451405e+00   3.4928736e+01
+   3.2600000e+01   2.7416281e+00   3.4940488e+01
+   3.2600000e+01   2.8990331e+00   3.4952802e+01
+   3.2600000e+01   3.0880496e+00   3.4961322e+01
+   3.2600000e+01   3.3536529e+00   3.4973281e+01
+   3.2600000e+01   3.5827603e+00   3.4972736e+01
+   3.2600000e+01   3.8425455e+00   3.4984074e+01
+   3.2600000e+01   4.3142231e+00   3.5036645e+01
+   3.2600000e+01   5.2460165e+00   3.5170777e+01
+   3.2600000e+01   6.6648926e+00   3.5382711e+01
+   3.2600000e+01   8.2569008e+00   3.5621149e+01
+   3.2600000e+01   9.2870413e+00   3.5722876e+01
+   3.2600000e+01   9.5328760e+00   3.5630785e+01
+   3.2600000e+01   9.9026364e+00   3.5537066e+01
+   3.2600000e+01   1.0298083e+01   3.5480702e+01
+   3.2600000e+01   1.0770826e+01   3.5489091e+01
+   3.2600000e+01   1.1255678e+01   3.5531455e+01
+   3.2600000e+01   1.1602421e+01   3.5566000e+01
+   3.2600000e+01   1.1914041e+01   3.5601397e+01
+   3.2600000e+01   1.2147298e+01   3.5626901e+01
+   3.2600000e+01   1.2343058e+01   3.5648785e+01
+   3.2600000e+01   1.2494471e+01   3.5664835e+01
+   3.2600000e+01   1.2597438e+01   3.5676273e+01
+   3.2600000e+01   1.2688149e+01   3.5686380e+01
+   3.2600000e+01   1.2785116e+01   3.5697636e+01
+   3.2600000e+01   1.2848306e+01   3.5705074e+01
+   3.2600000e+01   1.2914322e+01   3.5711992e+01
+   3.2600000e+01   1.3001628e+01   3.5721826e+01
+   3.2600000e+01   1.3051289e+01   3.5725025e+01
+   3.2600000e+01   1.3089132e+01   3.5727711e+01
+   3.2600000e+01   1.3142140e+01   3.5735612e+01
+   3.2600000e+01   1.3179091e+01   3.5738893e+01
+   3.2600000e+01   1.3225289e+01   3.5744364e+01
+   3.2600000e+01   1.3285380e+01   3.5750000e+01
+   3.2600000e+01   1.3351380e+01   3.5760339e+01
+   3.2600000e+01   1.3413512e+01   3.5768570e+01
+   3.2600000e+01   1.3485198e+01   3.5776364e+01
+   3.2600000e+01   1.3539636e+01   3.5778083e+01
+   3.2600000e+01   1.3586083e+01   3.5781620e+01
+   3.2600000e+01   1.3649860e+01   3.5788785e+01
+   3.2600000e+01   1.3724041e+01   3.5795174e+01
+   3.2600000e+01   1.3795636e+01   3.5799347e+01
+   3.2600000e+01   1.3896884e+01   3.5810504e+01
+   3.2600000e+01   1.4007802e+01   3.5819636e+01
+   3.2600000e+01   1.4119207e+01   3.5823149e+01
+   3.2600000e+01   1.4275008e+01   3.5831579e+01
+   3.2600000e+01   1.4495909e+01   3.5833537e+01
+   3.2600000e+01   1.4732562e+01   3.5837397e+01
+   3.2600000e+01   1.4997446e+01   3.5833347e+01
+   3.2600000e+01   1.5706603e+01   3.5837281e+01
+   3.2600000e+01   1.6613545e+01   3.5844116e+01
+   3.2600000e+01   1.7261298e+01   3.5850289e+01
+   3.2600000e+01   1.8017446e+01   3.5853281e+01
+   3.2600000e+01   1.8879421e+01   3.5867727e+01
+   3.2600000e+01   1.9534612e+01   3.5871678e+01
+   3.2600000e+01   1.9774289e+01   3.5868719e+01
+   3.2600000e+01   1.9845992e+01   3.5868760e+01
+   3.2600000e+01   1.9857645e+01   3.5869248e+01
+   3.2600000e+01   1.9858744e+01   3.5869810e+01
+   3.2600000e+01   1.9851843e+01   3.5868702e+01
+   3.2600000e+01   1.9795959e+01   3.5873008e+01
+   3.2650000e+01   2.5103554e+00   3.4896107e+01
+   3.2650000e+01   2.5061901e+00   3.4902207e+01
+   3.2650000e+01   2.5121488e+00   3.4907306e+01
+   3.2650000e+01   2.5413554e+00   3.4914521e+01
+   3.2650000e+01   2.5794959e+00   3.4919405e+01
+   3.2650000e+01   2.6451405e+00   3.4928736e+01
+   3.2650000e+01   2.7416281e+00   3.4940488e+01
+   3.2650000e+01   2.8990331e+00   3.4952802e+01
+   3.2650000e+01   3.0880496e+00   3.4961322e+01
+   3.2650000e+01   3.3536529e+00   3.4973281e+01
+   3.2650000e+01   3.5827603e+00   3.4972736e+01
+   3.2650000e+01   3.8425455e+00   3.4984074e+01
+   3.2650000e+01   4.3142231e+00   3.5036645e+01
+   3.2650000e+01   5.2460165e+00   3.5170777e+01
+   3.2650000e+01   6.6648926e+00   3.5382711e+01
+   3.2650000e+01   8.2569008e+00   3.5621149e+01
+   3.2650000e+01   9.2870413e+00   3.5722876e+01
+   3.2650000e+01   9.5328760e+00   3.5630785e+01
+   3.2650000e+01   9.9026364e+00   3.5537066e+01
+   3.2650000e+01   1.0298083e+01   3.5480702e+01
+   3.2650000e+01   1.0770826e+01   3.5489091e+01
+   3.2650000e+01   1.1255678e+01   3.5531455e+01
+   3.2650000e+01   1.1602421e+01   3.5566000e+01
+   3.2650000e+01   1.1914041e+01   3.5601397e+01
+   3.2650000e+01   1.2147298e+01   3.5626901e+01
+   3.2650000e+01   1.2343058e+01   3.5648785e+01
+   3.2650000e+01   1.2494471e+01   3.5664835e+01
+   3.2650000e+01   1.2597438e+01   3.5676273e+01
+   3.2650000e+01   1.2688149e+01   3.5686380e+01
+   3.2650000e+01   1.2785116e+01   3.5697636e+01
+   3.2650000e+01   1.2848306e+01   3.5705074e+01
+   3.2650000e+01   1.2914322e+01   3.5711992e+01
+   3.2650000e+01   1.3001628e+01   3.5721826e+01
+   3.2650000e+01   1.3051289e+01   3.5725025e+01
+   3.2650000e+01   1.3089132e+01   3.5727711e+01
+   3.2650000e+01   1.3142140e+01   3.5735612e+01
+   3.2650000e+01   1.3179091e+01   3.5738893e+01
+   3.2650000e+01   1.3225289e+01   3.5744364e+01
+   3.2650000e+01   1.3285380e+01   3.5750000e+01
+   3.2650000e+01   1.3351380e+01   3.5760339e+01
+   3.2650000e+01   1.3413512e+01   3.5768570e+01
+   3.2650000e+01   1.3485198e+01   3.5776364e+01
+   3.2650000e+01   1.3539636e+01   3.5778083e+01
+   3.2650000e+01   1.3586083e+01   3.5781620e+01
+   3.2650000e+01   1.3649860e+01   3.5788785e+01
+   3.2650000e+01   1.3724041e+01   3.5795174e+01
+   3.2650000e+01   1.3795636e+01   3.5799347e+01
+   3.2650000e+01   1.3896884e+01   3.5810504e+01
+   3.2650000e+01   1.4007802e+01   3.5819636e+01
+   3.2650000e+01   1.4119207e+01   3.5823149e+01
+   3.2650000e+01   1.4275008e+01   3.5831579e+01
+   3.2650000e+01   1.4495909e+01   3.5833537e+01
+   3.2650000e+01   1.4732562e+01   3.5837397e+01
+   3.2650000e+01   1.4997446e+01   3.5833347e+01
+   3.2650000e+01   1.5706603e+01   3.5837281e+01
+   3.2650000e+01   1.6613545e+01   3.5844116e+01
+   3.2650000e+01   1.7261298e+01   3.5850289e+01
+   3.2650000e+01   1.8017446e+01   3.5853281e+01
+   3.2650000e+01   1.8879421e+01   3.5867727e+01
+   3.2650000e+01   1.9534612e+01   3.5871678e+01
+   3.2650000e+01   1.9774289e+01   3.5868719e+01
+   3.2650000e+01   1.9845992e+01   3.5868760e+01
+   3.2650000e+01   1.9857645e+01   3.5869248e+01
+   3.2650000e+01   1.9858744e+01   3.5869810e+01
+   3.2650000e+01   1.9851843e+01   3.5868702e+01
+   3.2650000e+01   1.9795959e+01   3.5873008e+01
+   3.2700000e+01   2.5103554e+00   3.4896107e+01
+   3.2700000e+01   2.5061901e+00   3.4902207e+01
+   3.2700000e+01   2.5121488e+00   3.4907306e+01
+   3.2700000e+01   2.5413554e+00   3.4914521e+01
+   3.2700000e+01   2.5794959e+00   3.4919405e+01
+   3.2700000e+01   2.6451405e+00   3.4928736e+01
+   3.2700000e+01   2.7416281e+00   3.4940488e+01
+   3.2700000e+01   2.8990331e+00   3.4952802e+01
+   3.2700000e+01   3.0880496e+00   3.4961322e+01
+   3.2700000e+01   3.3536529e+00   3.4973281e+01
+   3.2700000e+01   3.5827603e+00   3.4972736e+01
+   3.2700000e+01   3.8425455e+00   3.4984074e+01
+   3.2700000e+01   4.3142231e+00   3.5036645e+01
+   3.2700000e+01   5.2460165e+00   3.5170777e+01
+   3.2700000e+01   6.6648926e+00   3.5382711e+01
+   3.2700000e+01   8.2569008e+00   3.5621149e+01
+   3.2700000e+01   9.2870413e+00   3.5722876e+01
+   3.2700000e+01   9.5328760e+00   3.5630785e+01
+   3.2700000e+01   9.9026364e+00   3.5537066e+01
+   3.2700000e+01   1.0298083e+01   3.5480702e+01
+   3.2700000e+01   1.0770826e+01   3.5489091e+01
+   3.2700000e+01   1.1255678e+01   3.5531455e+01
+   3.2700000e+01   1.1602421e+01   3.5566000e+01
+   3.2700000e+01   1.1914041e+01   3.5601397e+01
+   3.2700000e+01   1.2147298e+01   3.5626901e+01
+   3.2700000e+01   1.2343058e+01   3.5648785e+01
+   3.2700000e+01   1.2494471e+01   3.5664835e+01
+   3.2700000e+01   1.2597438e+01   3.5676273e+01
+   3.2700000e+01   1.2688149e+01   3.5686380e+01
+   3.2700000e+01   1.2785116e+01   3.5697636e+01
+   3.2700000e+01   1.2848306e+01   3.5705074e+01
+   3.2700000e+01   1.2914322e+01   3.5711992e+01
+   3.2700000e+01   1.3001628e+01   3.5721826e+01
+   3.2700000e+01   1.3051289e+01   3.5725025e+01
+   3.2700000e+01   1.3089132e+01   3.5727711e+01
+   3.2700000e+01   1.3142140e+01   3.5735612e+01
+   3.2700000e+01   1.3179091e+01   3.5738893e+01
+   3.2700000e+01   1.3225289e+01   3.5744364e+01
+   3.2700000e+01   1.3285380e+01   3.5750000e+01
+   3.2700000e+01   1.3351380e+01   3.5760339e+01
+   3.2700000e+01   1.3413512e+01   3.5768570e+01
+   3.2700000e+01   1.3485198e+01   3.5776364e+01
+   3.2700000e+01   1.3539636e+01   3.5778083e+01
+   3.2700000e+01   1.3586083e+01   3.5781620e+01
+   3.2700000e+01   1.3649860e+01   3.5788785e+01
+   3.2700000e+01   1.3724041e+01   3.5795174e+01
+   3.2700000e+01   1.3795636e+01   3.5799347e+01
+   3.2700000e+01   1.3896884e+01   3.5810504e+01
+   3.2700000e+01   1.4007802e+01   3.5819636e+01
+   3.2700000e+01   1.4119207e+01   3.5823149e+01
+   3.2700000e+01   1.4275008e+01   3.5831579e+01
+   3.2700000e+01   1.4495909e+01   3.5833537e+01
+   3.2700000e+01   1.4732562e+01   3.5837397e+01
+   3.2700000e+01   1.4997446e+01   3.5833347e+01
+   3.2700000e+01   1.5706603e+01   3.5837281e+01
+   3.2700000e+01   1.6613545e+01   3.5844116e+01
+   3.2700000e+01   1.7261298e+01   3.5850289e+01
+   3.2700000e+01   1.8017446e+01   3.5853281e+01
+   3.2700000e+01   1.8879421e+01   3.5867727e+01
+   3.2700000e+01   1.9534612e+01   3.5871678e+01
+   3.2700000e+01   1.9774289e+01   3.5868719e+01
+   3.2700000e+01   1.9845992e+01   3.5868760e+01
+   3.2700000e+01   1.9857645e+01   3.5869248e+01
+   3.2700000e+01   1.9858744e+01   3.5869810e+01
+   3.2700000e+01   1.9851843e+01   3.5868702e+01
+   3.2700000e+01   1.9795959e+01   3.5873008e+01
+   3.2750000e+01   2.5103554e+00   3.4896107e+01
+   3.2750000e+01   2.5061901e+00   3.4902207e+01
+   3.2750000e+01   2.5121488e+00   3.4907306e+01
+   3.2750000e+01   2.5413554e+00   3.4914521e+01
+   3.2750000e+01   2.5794959e+00   3.4919405e+01
+   3.2750000e+01   2.6451405e+00   3.4928736e+01
+   3.2750000e+01   2.7416281e+00   3.4940488e+01
+   3.2750000e+01   2.8990331e+00   3.4952802e+01
+   3.2750000e+01   3.0880496e+00   3.4961322e+01
+   3.2750000e+01   3.3536529e+00   3.4973281e+01
+   3.2750000e+01   3.5827603e+00   3.4972736e+01
+   3.2750000e+01   3.8425455e+00   3.4984074e+01
+   3.2750000e+01   4.3142231e+00   3.5036645e+01
+   3.2750000e+01   5.2460165e+00   3.5170777e+01
+   3.2750000e+01   6.6648926e+00   3.5382711e+01
+   3.2750000e+01   8.2569008e+00   3.5621149e+01
+   3.2750000e+01   9.2870413e+00   3.5722876e+01
+   3.2750000e+01   9.5328760e+00   3.5630785e+01
+   3.2750000e+01   9.9026364e+00   3.5537066e+01
+   3.2750000e+01   1.0298083e+01   3.5480702e+01
+   3.2750000e+01   1.0770826e+01   3.5489091e+01
+   3.2750000e+01   1.1255678e+01   3.5531455e+01
+   3.2750000e+01   1.1602421e+01   3.5566000e+01
+   3.2750000e+01   1.1914041e+01   3.5601397e+01
+   3.2750000e+01   1.2147298e+01   3.5626901e+01
+   3.2750000e+01   1.2343058e+01   3.5648785e+01
+   3.2750000e+01   1.2494471e+01   3.5664835e+01
+   3.2750000e+01   1.2597438e+01   3.5676273e+01
+   3.2750000e+01   1.2688149e+01   3.5686380e+01
+   3.2750000e+01   1.2785116e+01   3.5697636e+01
+   3.2750000e+01   1.2848306e+01   3.5705074e+01
+   3.2750000e+01   1.2914322e+01   3.5711992e+01
+   3.2750000e+01   1.3001628e+01   3.5721826e+01
+   3.2750000e+01   1.3051289e+01   3.5725025e+01
+   3.2750000e+01   1.3089132e+01   3.5727711e+01
+   3.2750000e+01   1.3142140e+01   3.5735612e+01
+   3.2750000e+01   1.3179091e+01   3.5738893e+01
+   3.2750000e+01   1.3225289e+01   3.5744364e+01
+   3.2750000e+01   1.3285380e+01   3.5750000e+01
+   3.2750000e+01   1.3351380e+01   3.5760339e+01
+   3.2750000e+01   1.3413512e+01   3.5768570e+01
+   3.2750000e+01   1.3485198e+01   3.5776364e+01
+   3.2750000e+01   1.3539636e+01   3.5778083e+01
+   3.2750000e+01   1.3586083e+01   3.5781620e+01
+   3.2750000e+01   1.3649860e+01   3.5788785e+01
+   3.2750000e+01   1.3724041e+01   3.5795174e+01
+   3.2750000e+01   1.3795636e+01   3.5799347e+01
+   3.2750000e+01   1.3896884e+01   3.5810504e+01
+   3.2750000e+01   1.4007802e+01   3.5819636e+01
+   3.2750000e+01   1.4119207e+01   3.5823149e+01
+   3.2750000e+01   1.4275008e+01   3.5831579e+01
+   3.2750000e+01   1.4495909e+01   3.5833537e+01
+   3.2750000e+01   1.4732562e+01   3.5837397e+01
+   3.2750000e+01   1.4997446e+01   3.5833347e+01
+   3.2750000e+01   1.5706603e+01   3.5837281e+01
+   3.2750000e+01   1.6613545e+01   3.5844116e+01
+   3.2750000e+01   1.7261298e+01   3.5850289e+01
+   3.2750000e+01   1.8017446e+01   3.5853281e+01
+   3.2750000e+01   1.8879421e+01   3.5867727e+01
+   3.2750000e+01   1.9534612e+01   3.5871678e+01
+   3.2750000e+01   1.9774289e+01   3.5868719e+01
+   3.2750000e+01   1.9845992e+01   3.5868760e+01
+   3.2750000e+01   1.9857645e+01   3.5869248e+01
+   3.2750000e+01   1.9858744e+01   3.5869810e+01
+   3.2750000e+01   1.9851843e+01   3.5868702e+01
+   3.2750000e+01   1.9795959e+01   3.5873008e+01
+   3.2800000e+01   2.5103554e+00   3.4896107e+01
+   3.2800000e+01   2.5061901e+00   3.4902207e+01
+   3.2800000e+01   2.5121488e+00   3.4907306e+01
+   3.2800000e+01   2.5413554e+00   3.4914521e+01
+   3.2800000e+01   2.5794959e+00   3.4919405e+01
+   3.2800000e+01   2.6451405e+00   3.4928736e+01
+   3.2800000e+01   2.7416281e+00   3.4940488e+01
+   3.2800000e+01   2.8990331e+00   3.4952802e+01
+   3.2800000e+01   3.0880496e+00   3.4961322e+01
+   3.2800000e+01   3.3536529e+00   3.4973281e+01
+   3.2800000e+01   3.5827603e+00   3.4972736e+01
+   3.2800000e+01   3.8425455e+00   3.4984074e+01
+   3.2800000e+01   4.3142231e+00   3.5036645e+01
+   3.2800000e+01   5.2460165e+00   3.5170777e+01
+   3.2800000e+01   6.6648926e+00   3.5382711e+01
+   3.2800000e+01   8.2569008e+00   3.5621149e+01
+   3.2800000e+01   9.2870413e+00   3.5722876e+01
+   3.2800000e+01   9.5328760e+00   3.5630785e+01
+   3.2800000e+01   9.9026364e+00   3.5537066e+01
+   3.2800000e+01   1.0298083e+01   3.5480702e+01
+   3.2800000e+01   1.0770826e+01   3.5489091e+01
+   3.2800000e+01   1.1255678e+01   3.5531455e+01
+   3.2800000e+01   1.1602421e+01   3.5566000e+01
+   3.2800000e+01   1.1914041e+01   3.5601397e+01
+   3.2800000e+01   1.2147298e+01   3.5626901e+01
+   3.2800000e+01   1.2343058e+01   3.5648785e+01
+   3.2800000e+01   1.2494471e+01   3.5664835e+01
+   3.2800000e+01   1.2597438e+01   3.5676273e+01
+   3.2800000e+01   1.2688149e+01   3.5686380e+01
+   3.2800000e+01   1.2785116e+01   3.5697636e+01
+   3.2800000e+01   1.2848306e+01   3.5705074e+01
+   3.2800000e+01   1.2914322e+01   3.5711992e+01
+   3.2800000e+01   1.3001628e+01   3.5721826e+01
+   3.2800000e+01   1.3051289e+01   3.5725025e+01
+   3.2800000e+01   1.3089132e+01   3.5727711e+01
+   3.2800000e+01   1.3142140e+01   3.5735612e+01
+   3.2800000e+01   1.3179091e+01   3.5738893e+01
+   3.2800000e+01   1.3225289e+01   3.5744364e+01
+   3.2800000e+01   1.3285380e+01   3.5750000e+01
+   3.2800000e+01   1.3351380e+01   3.5760339e+01
+   3.2800000e+01   1.3413512e+01   3.5768570e+01
+   3.2800000e+01   1.3485198e+01   3.5776364e+01
+   3.2800000e+01   1.3539636e+01   3.5778083e+01
+   3.2800000e+01   1.3586083e+01   3.5781620e+01
+   3.2800000e+01   1.3649860e+01   3.5788785e+01
+   3.2800000e+01   1.3724041e+01   3.5795174e+01
+   3.2800000e+01   1.3795636e+01   3.5799347e+01
+   3.2800000e+01   1.3896884e+01   3.5810504e+01
+   3.2800000e+01   1.4007802e+01   3.5819636e+01
+   3.2800000e+01   1.4119207e+01   3.5823149e+01
+   3.2800000e+01   1.4275008e+01   3.5831579e+01
+   3.2800000e+01   1.4495909e+01   3.5833537e+01
+   3.2800000e+01   1.4732562e+01   3.5837397e+01
+   3.2800000e+01   1.4997446e+01   3.5833347e+01
+   3.2800000e+01   1.5706603e+01   3.5837281e+01
+   3.2800000e+01   1.6613545e+01   3.5844116e+01
+   3.2800000e+01   1.7261298e+01   3.5850289e+01
+   3.2800000e+01   1.8017446e+01   3.5853281e+01
+   3.2800000e+01   1.8879421e+01   3.5867727e+01
+   3.2800000e+01   1.9534612e+01   3.5871678e+01
+   3.2800000e+01   1.9774289e+01   3.5868719e+01
+   3.2800000e+01   1.9845992e+01   3.5868760e+01
+   3.2800000e+01   1.9857645e+01   3.5869248e+01
+   3.2800000e+01   1.9858744e+01   3.5869810e+01
+   3.2800000e+01   1.9851843e+01   3.5868702e+01
+   3.2800000e+01   1.9795959e+01   3.5873008e+01
+   3.2850000e+01   2.5103554e+00   3.4896107e+01
+   3.2850000e+01   2.5061901e+00   3.4902207e+01
+   3.2850000e+01   2.5121488e+00   3.4907306e+01
+   3.2850000e+01   2.5413554e+00   3.4914521e+01
+   3.2850000e+01   2.5794959e+00   3.4919405e+01
+   3.2850000e+01   2.6451405e+00   3.4928736e+01
+   3.2850000e+01   2.7416281e+00   3.4940488e+01
+   3.2850000e+01   2.8990331e+00   3.4952802e+01
+   3.2850000e+01   3.0880496e+00   3.4961322e+01
+   3.2850000e+01   3.3536529e+00   3.4973281e+01
+   3.2850000e+01   3.5827603e+00   3.4972736e+01
+   3.2850000e+01   3.8425455e+00   3.4984074e+01
+   3.2850000e+01   4.3142231e+00   3.5036645e+01
+   3.2850000e+01   5.2460165e+00   3.5170777e+01
+   3.2850000e+01   6.6648926e+00   3.5382711e+01
+   3.2850000e+01   8.2569008e+00   3.5621149e+01
+   3.2850000e+01   9.2870413e+00   3.5722876e+01
+   3.2850000e+01   9.5328760e+00   3.5630785e+01
+   3.2850000e+01   9.9026364e+00   3.5537066e+01
+   3.2850000e+01   1.0298083e+01   3.5480702e+01
+   3.2850000e+01   1.0770826e+01   3.5489091e+01
+   3.2850000e+01   1.1255678e+01   3.5531455e+01
+   3.2850000e+01   1.1602421e+01   3.5566000e+01
+   3.2850000e+01   1.1914041e+01   3.5601397e+01
+   3.2850000e+01   1.2147298e+01   3.5626901e+01
+   3.2850000e+01   1.2343058e+01   3.5648785e+01
+   3.2850000e+01   1.2494471e+01   3.5664835e+01
+   3.2850000e+01   1.2597438e+01   3.5676273e+01
+   3.2850000e+01   1.2688149e+01   3.5686380e+01
+   3.2850000e+01   1.2785116e+01   3.5697636e+01
+   3.2850000e+01   1.2848306e+01   3.5705074e+01
+   3.2850000e+01   1.2914322e+01   3.5711992e+01
+   3.2850000e+01   1.3001628e+01   3.5721826e+01
+   3.2850000e+01   1.3051289e+01   3.5725025e+01
+   3.2850000e+01   1.3089132e+01   3.5727711e+01
+   3.2850000e+01   1.3142140e+01   3.5735612e+01
+   3.2850000e+01   1.3179091e+01   3.5738893e+01
+   3.2850000e+01   1.3225289e+01   3.5744364e+01
+   3.2850000e+01   1.3285380e+01   3.5750000e+01
+   3.2850000e+01   1.3351380e+01   3.5760339e+01
+   3.2850000e+01   1.3413512e+01   3.5768570e+01
+   3.2850000e+01   1.3485198e+01   3.5776364e+01
+   3.2850000e+01   1.3539636e+01   3.5778083e+01
+   3.2850000e+01   1.3586083e+01   3.5781620e+01
+   3.2850000e+01   1.3649860e+01   3.5788785e+01
+   3.2850000e+01   1.3724041e+01   3.5795174e+01
+   3.2850000e+01   1.3795636e+01   3.5799347e+01
+   3.2850000e+01   1.3896884e+01   3.5810504e+01
+   3.2850000e+01   1.4007802e+01   3.5819636e+01
+   3.2850000e+01   1.4119207e+01   3.5823149e+01
+   3.2850000e+01   1.4275008e+01   3.5831579e+01
+   3.2850000e+01   1.4495909e+01   3.5833537e+01
+   3.2850000e+01   1.4732562e+01   3.5837397e+01
+   3.2850000e+01   1.4997446e+01   3.5833347e+01
+   3.2850000e+01   1.5706603e+01   3.5837281e+01
+   3.2850000e+01   1.6613545e+01   3.5844116e+01
+   3.2850000e+01   1.7261298e+01   3.5850289e+01
+   3.2850000e+01   1.8017446e+01   3.5853281e+01
+   3.2850000e+01   1.8879421e+01   3.5867727e+01
+   3.2850000e+01   1.9534612e+01   3.5871678e+01
+   3.2850000e+01   1.9774289e+01   3.5868719e+01
+   3.2850000e+01   1.9845992e+01   3.5868760e+01
+   3.2850000e+01   1.9857645e+01   3.5869248e+01
+   3.2850000e+01   1.9858744e+01   3.5869810e+01
+   3.2850000e+01   1.9851843e+01   3.5868702e+01
+   3.2850000e+01   1.9795959e+01   3.5873008e+01
+   3.2900000e+01   2.5103554e+00   3.4896107e+01
+   3.2900000e+01   2.5061901e+00   3.4902207e+01
+   3.2900000e+01   2.5121488e+00   3.4907306e+01
+   3.2900000e+01   2.5413554e+00   3.4914521e+01
+   3.2900000e+01   2.5794959e+00   3.4919405e+01
+   3.2900000e+01   2.6451405e+00   3.4928736e+01
+   3.2900000e+01   2.7416281e+00   3.4940488e+01
+   3.2900000e+01   2.8990331e+00   3.4952802e+01
+   3.2900000e+01   3.0880496e+00   3.4961322e+01
+   3.2900000e+01   3.3536529e+00   3.4973281e+01
+   3.2900000e+01   3.5827603e+00   3.4972736e+01
+   3.2900000e+01   3.8425455e+00   3.4984074e+01
+   3.2900000e+01   4.3142231e+00   3.5036645e+01
+   3.2900000e+01   5.2460165e+00   3.5170777e+01
+   3.2900000e+01   6.6648926e+00   3.5382711e+01
+   3.2900000e+01   8.2569008e+00   3.5621149e+01
+   3.2900000e+01   9.2870413e+00   3.5722876e+01
+   3.2900000e+01   9.5328760e+00   3.5630785e+01
+   3.2900000e+01   9.9026364e+00   3.5537066e+01
+   3.2900000e+01   1.0298083e+01   3.5480702e+01
+   3.2900000e+01   1.0770826e+01   3.5489091e+01
+   3.2900000e+01   1.1255678e+01   3.5531455e+01
+   3.2900000e+01   1.1602421e+01   3.5566000e+01
+   3.2900000e+01   1.1914041e+01   3.5601397e+01
+   3.2900000e+01   1.2147298e+01   3.5626901e+01
+   3.2900000e+01   1.2343058e+01   3.5648785e+01
+   3.2900000e+01   1.2494471e+01   3.5664835e+01
+   3.2900000e+01   1.2597438e+01   3.5676273e+01
+   3.2900000e+01   1.2688149e+01   3.5686380e+01
+   3.2900000e+01   1.2785116e+01   3.5697636e+01
+   3.2900000e+01   1.2848306e+01   3.5705074e+01
+   3.2900000e+01   1.2914322e+01   3.5711992e+01
+   3.2900000e+01   1.3001628e+01   3.5721826e+01
+   3.2900000e+01   1.3051289e+01   3.5725025e+01
+   3.2900000e+01   1.3089132e+01   3.5727711e+01
+   3.2900000e+01   1.3142140e+01   3.5735612e+01
+   3.2900000e+01   1.3179091e+01   3.5738893e+01
+   3.2900000e+01   1.3225289e+01   3.5744364e+01
+   3.2900000e+01   1.3285380e+01   3.5750000e+01
+   3.2900000e+01   1.3351380e+01   3.5760339e+01
+   3.2900000e+01   1.3413512e+01   3.5768570e+01
+   3.2900000e+01   1.3485198e+01   3.5776364e+01
+   3.2900000e+01   1.3539636e+01   3.5778083e+01
+   3.2900000e+01   1.3586083e+01   3.5781620e+01
+   3.2900000e+01   1.3649860e+01   3.5788785e+01
+   3.2900000e+01   1.3724041e+01   3.5795174e+01
+   3.2900000e+01   1.3795636e+01   3.5799347e+01
+   3.2900000e+01   1.3896884e+01   3.5810504e+01
+   3.2900000e+01   1.4007802e+01   3.5819636e+01
+   3.2900000e+01   1.4119207e+01   3.5823149e+01
+   3.2900000e+01   1.4275008e+01   3.5831579e+01
+   3.2900000e+01   1.4495909e+01   3.5833537e+01
+   3.2900000e+01   1.4732562e+01   3.5837397e+01
+   3.2900000e+01   1.4997446e+01   3.5833347e+01
+   3.2900000e+01   1.5706603e+01   3.5837281e+01
+   3.2900000e+01   1.6613545e+01   3.5844116e+01
+   3.2900000e+01   1.7261298e+01   3.5850289e+01
+   3.2900000e+01   1.8017446e+01   3.5853281e+01
+   3.2900000e+01   1.8879421e+01   3.5867727e+01
+   3.2900000e+01   1.9534612e+01   3.5871678e+01
+   3.2900000e+01   1.9774289e+01   3.5868719e+01
+   3.2900000e+01   1.9845992e+01   3.5868760e+01
+   3.2900000e+01   1.9857645e+01   3.5869248e+01
+   3.2900000e+01   1.9858744e+01   3.5869810e+01
+   3.2900000e+01   1.9851843e+01   3.5868702e+01
+   3.2900000e+01   1.9795959e+01   3.5873008e+01
+   3.2950000e+01   2.5103554e+00   3.4896107e+01
+   3.2950000e+01   2.5061901e+00   3.4902207e+01
+   3.2950000e+01   2.5121488e+00   3.4907306e+01
+   3.2950000e+01   2.5413554e+00   3.4914521e+01
+   3.2950000e+01   2.5794959e+00   3.4919405e+01
+   3.2950000e+01   2.6451405e+00   3.4928736e+01
+   3.2950000e+01   2.7416281e+00   3.4940488e+01
+   3.2950000e+01   2.8990331e+00   3.4952802e+01
+   3.2950000e+01   3.0880496e+00   3.4961322e+01
+   3.2950000e+01   3.3536529e+00   3.4973281e+01
+   3.2950000e+01   3.5827603e+00   3.4972736e+01
+   3.2950000e+01   3.8425455e+00   3.4984074e+01
+   3.2950000e+01   4.3142231e+00   3.5036645e+01
+   3.2950000e+01   5.2460165e+00   3.5170777e+01
+   3.2950000e+01   6.6648926e+00   3.5382711e+01
+   3.2950000e+01   8.2569008e+00   3.5621149e+01
+   3.2950000e+01   9.2870413e+00   3.5722876e+01
+   3.2950000e+01   9.5328760e+00   3.5630785e+01
+   3.2950000e+01   9.9026364e+00   3.5537066e+01
+   3.2950000e+01   1.0298083e+01   3.5480702e+01
+   3.2950000e+01   1.0770826e+01   3.5489091e+01
+   3.2950000e+01   1.1255678e+01   3.5531455e+01
+   3.2950000e+01   1.1602421e+01   3.5566000e+01
+   3.2950000e+01   1.1914041e+01   3.5601397e+01
+   3.2950000e+01   1.2147298e+01   3.5626901e+01
+   3.2950000e+01   1.2343058e+01   3.5648785e+01
+   3.2950000e+01   1.2494471e+01   3.5664835e+01
+   3.2950000e+01   1.2597438e+01   3.5676273e+01
+   3.2950000e+01   1.2688149e+01   3.5686380e+01
+   3.2950000e+01   1.2785116e+01   3.5697636e+01
+   3.2950000e+01   1.2848306e+01   3.5705074e+01
+   3.2950000e+01   1.2914322e+01   3.5711992e+01
+   3.2950000e+01   1.3001628e+01   3.5721826e+01
+   3.2950000e+01   1.3051289e+01   3.5725025e+01
+   3.2950000e+01   1.3089132e+01   3.5727711e+01
+   3.2950000e+01   1.3142140e+01   3.5735612e+01
+   3.2950000e+01   1.3179091e+01   3.5738893e+01
+   3.2950000e+01   1.3225289e+01   3.5744364e+01
+   3.2950000e+01   1.3285380e+01   3.5750000e+01
+   3.2950000e+01   1.3351380e+01   3.5760339e+01
+   3.2950000e+01   1.3413512e+01   3.5768570e+01
+   3.2950000e+01   1.3485198e+01   3.5776364e+01
+   3.2950000e+01   1.3539636e+01   3.5778083e+01
+   3.2950000e+01   1.3586083e+01   3.5781620e+01
+   3.2950000e+01   1.3649860e+01   3.5788785e+01
+   3.2950000e+01   1.3724041e+01   3.5795174e+01
+   3.2950000e+01   1.3795636e+01   3.5799347e+01
+   3.2950000e+01   1.3896884e+01   3.5810504e+01
+   3.2950000e+01   1.4007802e+01   3.5819636e+01
+   3.2950000e+01   1.4119207e+01   3.5823149e+01
+   3.2950000e+01   1.4275008e+01   3.5831579e+01
+   3.2950000e+01   1.4495909e+01   3.5833537e+01
+   3.2950000e+01   1.4732562e+01   3.5837397e+01
+   3.2950000e+01   1.4997446e+01   3.5833347e+01
+   3.2950000e+01   1.5706603e+01   3.5837281e+01
+   3.2950000e+01   1.6613545e+01   3.5844116e+01
+   3.2950000e+01   1.7261298e+01   3.5850289e+01
+   3.2950000e+01   1.8017446e+01   3.5853281e+01
+   3.2950000e+01   1.8879421e+01   3.5867727e+01
+   3.2950000e+01   1.9534612e+01   3.5871678e+01
+   3.2950000e+01   1.9774289e+01   3.5868719e+01
+   3.2950000e+01   1.9845992e+01   3.5868760e+01
+   3.2950000e+01   1.9857645e+01   3.5869248e+01
+   3.2950000e+01   1.9858744e+01   3.5869810e+01
+   3.2950000e+01   1.9851843e+01   3.5868702e+01
+   3.2950000e+01   1.9795959e+01   3.5873008e+01
+   3.3000000e+01   2.5103554e+00   3.4896107e+01
+   3.3000000e+01   2.5061901e+00   3.4902207e+01
+   3.3000000e+01   2.5121488e+00   3.4907306e+01
+   3.3000000e+01   2.5413554e+00   3.4914521e+01
+   3.3000000e+01   2.5794959e+00   3.4919405e+01
+   3.3000000e+01   2.6451405e+00   3.4928736e+01
+   3.3000000e+01   2.7416281e+00   3.4940488e+01
+   3.3000000e+01   2.8990331e+00   3.4952802e+01
+   3.3000000e+01   3.0880496e+00   3.4961322e+01
+   3.3000000e+01   3.3536529e+00   3.4973281e+01
+   3.3000000e+01   3.5827603e+00   3.4972736e+01
+   3.3000000e+01   3.8425455e+00   3.4984074e+01
+   3.3000000e+01   4.3142231e+00   3.5036645e+01
+   3.3000000e+01   5.2460165e+00   3.5170777e+01
+   3.3000000e+01   6.6648926e+00   3.5382711e+01
+   3.3000000e+01   8.2569008e+00   3.5621149e+01
+   3.3000000e+01   9.2870413e+00   3.5722876e+01
+   3.3000000e+01   9.5328760e+00   3.5630785e+01
+   3.3000000e+01   9.9026364e+00   3.5537066e+01
+   3.3000000e+01   1.0298083e+01   3.5480702e+01
+   3.3000000e+01   1.0770826e+01   3.5489091e+01
+   3.3000000e+01   1.1255678e+01   3.5531455e+01
+   3.3000000e+01   1.1602421e+01   3.5566000e+01
+   3.3000000e+01   1.1914041e+01   3.5601397e+01
+   3.3000000e+01   1.2147298e+01   3.5626901e+01
+   3.3000000e+01   1.2343058e+01   3.5648785e+01
+   3.3000000e+01   1.2494471e+01   3.5664835e+01
+   3.3000000e+01   1.2597438e+01   3.5676273e+01
+   3.3000000e+01   1.2688149e+01   3.5686380e+01
+   3.3000000e+01   1.2785116e+01   3.5697636e+01
+   3.3000000e+01   1.2848306e+01   3.5705074e+01
+   3.3000000e+01   1.2914322e+01   3.5711992e+01
+   3.3000000e+01   1.3001628e+01   3.5721826e+01
+   3.3000000e+01   1.3051289e+01   3.5725025e+01
+   3.3000000e+01   1.3089132e+01   3.5727711e+01
+   3.3000000e+01   1.3142140e+01   3.5735612e+01
+   3.3000000e+01   1.3179091e+01   3.5738893e+01
+   3.3000000e+01   1.3225289e+01   3.5744364e+01
+   3.3000000e+01   1.3285380e+01   3.5750000e+01
+   3.3000000e+01   1.3351380e+01   3.5760339e+01
+   3.3000000e+01   1.3413512e+01   3.5768570e+01
+   3.3000000e+01   1.3485198e+01   3.5776364e+01
+   3.3000000e+01   1.3539636e+01   3.5778083e+01
+   3.3000000e+01   1.3586083e+01   3.5781620e+01
+   3.3000000e+01   1.3649860e+01   3.5788785e+01
+   3.3000000e+01   1.3724041e+01   3.5795174e+01
+   3.3000000e+01   1.3795636e+01   3.5799347e+01
+   3.3000000e+01   1.3896884e+01   3.5810504e+01
+   3.3000000e+01   1.4007802e+01   3.5819636e+01
+   3.3000000e+01   1.4119207e+01   3.5823149e+01
+   3.3000000e+01   1.4275008e+01   3.5831579e+01
+   3.3000000e+01   1.4495909e+01   3.5833537e+01
+   3.3000000e+01   1.4732562e+01   3.5837397e+01
+   3.3000000e+01   1.4997446e+01   3.5833347e+01
+   3.3000000e+01   1.5706603e+01   3.5837281e+01
+   3.3000000e+01   1.6613545e+01   3.5844116e+01
+   3.3000000e+01   1.7261298e+01   3.5850289e+01
+   3.3000000e+01   1.8017446e+01   3.5853281e+01
+   3.3000000e+01   1.8879421e+01   3.5867727e+01
+   3.3000000e+01   1.9534612e+01   3.5871678e+01
+   3.3000000e+01   1.9774289e+01   3.5868719e+01
+   3.3000000e+01   1.9845992e+01   3.5868760e+01
+   3.3000000e+01   1.9857645e+01   3.5869248e+01
+   3.3000000e+01   1.9858744e+01   3.5869810e+01
+   3.3000000e+01   1.9851843e+01   3.5868702e+01
+   3.3000000e+01   1.9795959e+01   3.5873008e+01
+   3.3050000e+01   2.5103554e+00   3.4896107e+01
+   3.3050000e+01   2.5061901e+00   3.4902207e+01
+   3.3050000e+01   2.5121488e+00   3.4907306e+01
+   3.3050000e+01   2.5413554e+00   3.4914521e+01
+   3.3050000e+01   2.5794959e+00   3.4919405e+01
+   3.3050000e+01   2.6451405e+00   3.4928736e+01
+   3.3050000e+01   2.7416281e+00   3.4940488e+01
+   3.3050000e+01   2.8990331e+00   3.4952802e+01
+   3.3050000e+01   3.0880496e+00   3.4961322e+01
+   3.3050000e+01   3.3536529e+00   3.4973281e+01
+   3.3050000e+01   3.5827603e+00   3.4972736e+01
+   3.3050000e+01   3.8425455e+00   3.4984074e+01
+   3.3050000e+01   4.3142231e+00   3.5036645e+01
+   3.3050000e+01   5.2460165e+00   3.5170777e+01
+   3.3050000e+01   6.6648926e+00   3.5382711e+01
+   3.3050000e+01   8.2569008e+00   3.5621149e+01
+   3.3050000e+01   9.2870413e+00   3.5722876e+01
+   3.3050000e+01   9.5328760e+00   3.5630785e+01
+   3.3050000e+01   9.9026364e+00   3.5537066e+01
+   3.3050000e+01   1.0298083e+01   3.5480702e+01
+   3.3050000e+01   1.0770826e+01   3.5489091e+01
+   3.3050000e+01   1.1255678e+01   3.5531455e+01
+   3.3050000e+01   1.1602421e+01   3.5566000e+01
+   3.3050000e+01   1.1914041e+01   3.5601397e+01
+   3.3050000e+01   1.2147298e+01   3.5626901e+01
+   3.3050000e+01   1.2343058e+01   3.5648785e+01
+   3.3050000e+01   1.2494471e+01   3.5664835e+01
+   3.3050000e+01   1.2597438e+01   3.5676273e+01
+   3.3050000e+01   1.2688149e+01   3.5686380e+01
+   3.3050000e+01   1.2785116e+01   3.5697636e+01
+   3.3050000e+01   1.2848306e+01   3.5705074e+01
+   3.3050000e+01   1.2914322e+01   3.5711992e+01
+   3.3050000e+01   1.3001628e+01   3.5721826e+01
+   3.3050000e+01   1.3051289e+01   3.5725025e+01
+   3.3050000e+01   1.3089132e+01   3.5727711e+01
+   3.3050000e+01   1.3142140e+01   3.5735612e+01
+   3.3050000e+01   1.3179091e+01   3.5738893e+01
+   3.3050000e+01   1.3225289e+01   3.5744364e+01
+   3.3050000e+01   1.3285380e+01   3.5750000e+01
+   3.3050000e+01   1.3351380e+01   3.5760339e+01
+   3.3050000e+01   1.3413512e+01   3.5768570e+01
+   3.3050000e+01   1.3485198e+01   3.5776364e+01
+   3.3050000e+01   1.3539636e+01   3.5778083e+01
+   3.3050000e+01   1.3586083e+01   3.5781620e+01
+   3.3050000e+01   1.3649860e+01   3.5788785e+01
+   3.3050000e+01   1.3724041e+01   3.5795174e+01
+   3.3050000e+01   1.3795636e+01   3.5799347e+01
+   3.3050000e+01   1.3896884e+01   3.5810504e+01
+   3.3050000e+01   1.4007802e+01   3.5819636e+01
+   3.3050000e+01   1.4119207e+01   3.5823149e+01
+   3.3050000e+01   1.4275008e+01   3.5831579e+01
+   3.3050000e+01   1.4495909e+01   3.5833537e+01
+   3.3050000e+01   1.4732562e+01   3.5837397e+01
+   3.3050000e+01   1.4997446e+01   3.5833347e+01
+   3.3050000e+01   1.5706603e+01   3.5837281e+01
+   3.3050000e+01   1.6613545e+01   3.5844116e+01
+   3.3050000e+01   1.7261298e+01   3.5850289e+01
+   3.3050000e+01   1.8017446e+01   3.5853281e+01
+   3.3050000e+01   1.8879421e+01   3.5867727e+01
+   3.3050000e+01   1.9534612e+01   3.5871678e+01
+   3.3050000e+01   1.9774289e+01   3.5868719e+01
+   3.3050000e+01   1.9845992e+01   3.5868760e+01
+   3.3050000e+01   1.9857645e+01   3.5869248e+01
+   3.3050000e+01   1.9858744e+01   3.5869810e+01
+   3.3050000e+01   1.9851843e+01   3.5868702e+01
+   3.3050000e+01   1.9795959e+01   3.5873008e+01
+   3.3100000e+01   2.5103554e+00   3.4896107e+01
+   3.3100000e+01   2.5061901e+00   3.4902207e+01
+   3.3100000e+01   2.5121488e+00   3.4907306e+01
+   3.3100000e+01   2.5413554e+00   3.4914521e+01
+   3.3100000e+01   2.5794959e+00   3.4919405e+01
+   3.3100000e+01   2.6451405e+00   3.4928736e+01
+   3.3100000e+01   2.7416281e+00   3.4940488e+01
+   3.3100000e+01   2.8990331e+00   3.4952802e+01
+   3.3100000e+01   3.0880496e+00   3.4961322e+01
+   3.3100000e+01   3.3536529e+00   3.4973281e+01
+   3.3100000e+01   3.5827603e+00   3.4972736e+01
+   3.3100000e+01   3.8425455e+00   3.4984074e+01
+   3.3100000e+01   4.3142231e+00   3.5036645e+01
+   3.3100000e+01   5.2460165e+00   3.5170777e+01
+   3.3100000e+01   6.6648926e+00   3.5382711e+01
+   3.3100000e+01   8.2569008e+00   3.5621149e+01
+   3.3100000e+01   9.2870413e+00   3.5722876e+01
+   3.3100000e+01   9.5328760e+00   3.5630785e+01
+   3.3100000e+01   9.9026364e+00   3.5537066e+01
+   3.3100000e+01   1.0298083e+01   3.5480702e+01
+   3.3100000e+01   1.0770826e+01   3.5489091e+01
+   3.3100000e+01   1.1255678e+01   3.5531455e+01
+   3.3100000e+01   1.1602421e+01   3.5566000e+01
+   3.3100000e+01   1.1914041e+01   3.5601397e+01
+   3.3100000e+01   1.2147298e+01   3.5626901e+01
+   3.3100000e+01   1.2343058e+01   3.5648785e+01
+   3.3100000e+01   1.2494471e+01   3.5664835e+01
+   3.3100000e+01   1.2597438e+01   3.5676273e+01
+   3.3100000e+01   1.2688149e+01   3.5686380e+01
+   3.3100000e+01   1.2785116e+01   3.5697636e+01
+   3.3100000e+01   1.2848306e+01   3.5705074e+01
+   3.3100000e+01   1.2914322e+01   3.5711992e+01
+   3.3100000e+01   1.3001628e+01   3.5721826e+01
+   3.3100000e+01   1.3051289e+01   3.5725025e+01
+   3.3100000e+01   1.3089132e+01   3.5727711e+01
+   3.3100000e+01   1.3142140e+01   3.5735612e+01
+   3.3100000e+01   1.3179091e+01   3.5738893e+01
+   3.3100000e+01   1.3225289e+01   3.5744364e+01
+   3.3100000e+01   1.3285380e+01   3.5750000e+01
+   3.3100000e+01   1.3351380e+01   3.5760339e+01
+   3.3100000e+01   1.3413512e+01   3.5768570e+01
+   3.3100000e+01   1.3485198e+01   3.5776364e+01
+   3.3100000e+01   1.3539636e+01   3.5778083e+01
+   3.3100000e+01   1.3586083e+01   3.5781620e+01
+   3.3100000e+01   1.3649860e+01   3.5788785e+01
+   3.3100000e+01   1.3724041e+01   3.5795174e+01
+   3.3100000e+01   1.3795636e+01   3.5799347e+01
+   3.3100000e+01   1.3896884e+01   3.5810504e+01
+   3.3100000e+01   1.4007802e+01   3.5819636e+01
+   3.3100000e+01   1.4119207e+01   3.5823149e+01
+   3.3100000e+01   1.4275008e+01   3.5831579e+01
+   3.3100000e+01   1.4495909e+01   3.5833537e+01
+   3.3100000e+01   1.4732562e+01   3.5837397e+01
+   3.3100000e+01   1.4997446e+01   3.5833347e+01
+   3.3100000e+01   1.5706603e+01   3.5837281e+01
+   3.3100000e+01   1.6613545e+01   3.5844116e+01
+   3.3100000e+01   1.7261298e+01   3.5850289e+01
+   3.3100000e+01   1.8017446e+01   3.5853281e+01
+   3.3100000e+01   1.8879421e+01   3.5867727e+01
+   3.3100000e+01   1.9534612e+01   3.5871678e+01
+   3.3100000e+01   1.9774289e+01   3.5868719e+01
+   3.3100000e+01   1.9845992e+01   3.5868760e+01
+   3.3100000e+01   1.9857645e+01   3.5869248e+01
+   3.3100000e+01   1.9858744e+01   3.5869810e+01
+   3.3100000e+01   1.9851843e+01   3.5868702e+01
+   3.3100000e+01   1.9795959e+01   3.5873008e+01
+   3.3150000e+01   2.5103554e+00   3.4896107e+01
+   3.3150000e+01   2.5061901e+00   3.4902207e+01
+   3.3150000e+01   2.5121488e+00   3.4907306e+01
+   3.3150000e+01   2.5413554e+00   3.4914521e+01
+   3.3150000e+01   2.5794959e+00   3.4919405e+01
+   3.3150000e+01   2.6451405e+00   3.4928736e+01
+   3.3150000e+01   2.7416281e+00   3.4940488e+01
+   3.3150000e+01   2.8990331e+00   3.4952802e+01
+   3.3150000e+01   3.0880496e+00   3.4961322e+01
+   3.3150000e+01   3.3536529e+00   3.4973281e+01
+   3.3150000e+01   3.5827603e+00   3.4972736e+01
+   3.3150000e+01   3.8425455e+00   3.4984074e+01
+   3.3150000e+01   4.3142231e+00   3.5036645e+01
+   3.3150000e+01   5.2460165e+00   3.5170777e+01
+   3.3150000e+01   6.6648926e+00   3.5382711e+01
+   3.3150000e+01   8.2569008e+00   3.5621149e+01
+   3.3150000e+01   9.2870413e+00   3.5722876e+01
+   3.3150000e+01   9.5328760e+00   3.5630785e+01
+   3.3150000e+01   9.9026364e+00   3.5537066e+01
+   3.3150000e+01   1.0298083e+01   3.5480702e+01
+   3.3150000e+01   1.0770826e+01   3.5489091e+01
+   3.3150000e+01   1.1255678e+01   3.5531455e+01
+   3.3150000e+01   1.1602421e+01   3.5566000e+01
+   3.3150000e+01   1.1914041e+01   3.5601397e+01
+   3.3150000e+01   1.2147298e+01   3.5626901e+01
+   3.3150000e+01   1.2343058e+01   3.5648785e+01
+   3.3150000e+01   1.2494471e+01   3.5664835e+01
+   3.3150000e+01   1.2597438e+01   3.5676273e+01
+   3.3150000e+01   1.2688149e+01   3.5686380e+01
+   3.3150000e+01   1.2785116e+01   3.5697636e+01
+   3.3150000e+01   1.2848306e+01   3.5705074e+01
+   3.3150000e+01   1.2914322e+01   3.5711992e+01
+   3.3150000e+01   1.3001628e+01   3.5721826e+01
+   3.3150000e+01   1.3051289e+01   3.5725025e+01
+   3.3150000e+01   1.3089132e+01   3.5727711e+01
+   3.3150000e+01   1.3142140e+01   3.5735612e+01
+   3.3150000e+01   1.3179091e+01   3.5738893e+01
+   3.3150000e+01   1.3225289e+01   3.5744364e+01
+   3.3150000e+01   1.3285380e+01   3.5750000e+01
+   3.3150000e+01   1.3351380e+01   3.5760339e+01
+   3.3150000e+01   1.3413512e+01   3.5768570e+01
+   3.3150000e+01   1.3485198e+01   3.5776364e+01
+   3.3150000e+01   1.3539636e+01   3.5778083e+01
+   3.3150000e+01   1.3586083e+01   3.5781620e+01
+   3.3150000e+01   1.3649860e+01   3.5788785e+01
+   3.3150000e+01   1.3724041e+01   3.5795174e+01
+   3.3150000e+01   1.3795636e+01   3.5799347e+01
+   3.3150000e+01   1.3896884e+01   3.5810504e+01
+   3.3150000e+01   1.4007802e+01   3.5819636e+01
+   3.3150000e+01   1.4119207e+01   3.5823149e+01
+   3.3150000e+01   1.4275008e+01   3.5831579e+01
+   3.3150000e+01   1.4495909e+01   3.5833537e+01
+   3.3150000e+01   1.4732562e+01   3.5837397e+01
+   3.3150000e+01   1.4997446e+01   3.5833347e+01
+   3.3150000e+01   1.5706603e+01   3.5837281e+01
+   3.3150000e+01   1.6613545e+01   3.5844116e+01
+   3.3150000e+01   1.7261298e+01   3.5850289e+01
+   3.3150000e+01   1.8017446e+01   3.5853281e+01
+   3.3150000e+01   1.8879421e+01   3.5867727e+01
+   3.3150000e+01   1.9534612e+01   3.5871678e+01
+   3.3150000e+01   1.9774289e+01   3.5868719e+01
+   3.3150000e+01   1.9845992e+01   3.5868760e+01
+   3.3150000e+01   1.9857645e+01   3.5869248e+01
+   3.3150000e+01   1.9858744e+01   3.5869810e+01
+   3.3150000e+01   1.9851843e+01   3.5868702e+01
+   3.3150000e+01   1.9795959e+01   3.5873008e+01
+   3.3200000e+01   2.5103554e+00   3.4896107e+01
+   3.3200000e+01   2.5061901e+00   3.4902207e+01
+   3.3200000e+01   2.5121488e+00   3.4907306e+01
+   3.3200000e+01   2.5413554e+00   3.4914521e+01
+   3.3200000e+01   2.5794959e+00   3.4919405e+01
+   3.3200000e+01   2.6451405e+00   3.4928736e+01
+   3.3200000e+01   2.7416281e+00   3.4940488e+01
+   3.3200000e+01   2.8990331e+00   3.4952802e+01
+   3.3200000e+01   3.0880496e+00   3.4961322e+01
+   3.3200000e+01   3.3536529e+00   3.4973281e+01
+   3.3200000e+01   3.5827603e+00   3.4972736e+01
+   3.3200000e+01   3.8425455e+00   3.4984074e+01
+   3.3200000e+01   4.3142231e+00   3.5036645e+01
+   3.3200000e+01   5.2460165e+00   3.5170777e+01
+   3.3200000e+01   6.6648926e+00   3.5382711e+01
+   3.3200000e+01   8.2569008e+00   3.5621149e+01
+   3.3200000e+01   9.2870413e+00   3.5722876e+01
+   3.3200000e+01   9.5328760e+00   3.5630785e+01
+   3.3200000e+01   9.9026364e+00   3.5537066e+01
+   3.3200000e+01   1.0298083e+01   3.5480702e+01
+   3.3200000e+01   1.0770826e+01   3.5489091e+01
+   3.3200000e+01   1.1255678e+01   3.5531455e+01
+   3.3200000e+01   1.1602421e+01   3.5566000e+01
+   3.3200000e+01   1.1914041e+01   3.5601397e+01
+   3.3200000e+01   1.2147298e+01   3.5626901e+01
+   3.3200000e+01   1.2343058e+01   3.5648785e+01
+   3.3200000e+01   1.2494471e+01   3.5664835e+01
+   3.3200000e+01   1.2597438e+01   3.5676273e+01
+   3.3200000e+01   1.2688149e+01   3.5686380e+01
+   3.3200000e+01   1.2785116e+01   3.5697636e+01
+   3.3200000e+01   1.2848306e+01   3.5705074e+01
+   3.3200000e+01   1.2914322e+01   3.5711992e+01
+   3.3200000e+01   1.3001628e+01   3.5721826e+01
+   3.3200000e+01   1.3051289e+01   3.5725025e+01
+   3.3200000e+01   1.3089132e+01   3.5727711e+01
+   3.3200000e+01   1.3142140e+01   3.5735612e+01
+   3.3200000e+01   1.3179091e+01   3.5738893e+01
+   3.3200000e+01   1.3225289e+01   3.5744364e+01
+   3.3200000e+01   1.3285380e+01   3.5750000e+01
+   3.3200000e+01   1.3351380e+01   3.5760339e+01
+   3.3200000e+01   1.3413512e+01   3.5768570e+01
+   3.3200000e+01   1.3485198e+01   3.5776364e+01
+   3.3200000e+01   1.3539636e+01   3.5778083e+01
+   3.3200000e+01   1.3586083e+01   3.5781620e+01
+   3.3200000e+01   1.3649860e+01   3.5788785e+01
+   3.3200000e+01   1.3724041e+01   3.5795174e+01
+   3.3200000e+01   1.3795636e+01   3.5799347e+01
+   3.3200000e+01   1.3896884e+01   3.5810504e+01
+   3.3200000e+01   1.4007802e+01   3.5819636e+01
+   3.3200000e+01   1.4119207e+01   3.5823149e+01
+   3.3200000e+01   1.4275008e+01   3.5831579e+01
+   3.3200000e+01   1.4495909e+01   3.5833537e+01
+   3.3200000e+01   1.4732562e+01   3.5837397e+01
+   3.3200000e+01   1.4997446e+01   3.5833347e+01
+   3.3200000e+01   1.5706603e+01   3.5837281e+01
+   3.3200000e+01   1.6613545e+01   3.5844116e+01
+   3.3200000e+01   1.7261298e+01   3.5850289e+01
+   3.3200000e+01   1.8017446e+01   3.5853281e+01
+   3.3200000e+01   1.8879421e+01   3.5867727e+01
+   3.3200000e+01   1.9534612e+01   3.5871678e+01
+   3.3200000e+01   1.9774289e+01   3.5868719e+01
+   3.3200000e+01   1.9845992e+01   3.5868760e+01
+   3.3200000e+01   1.9857645e+01   3.5869248e+01
+   3.3200000e+01   1.9858744e+01   3.5869810e+01
+   3.3200000e+01   1.9851843e+01   3.5868702e+01
+   3.3200000e+01   1.9795959e+01   3.5873008e+01
+   3.3250000e+01   2.5103554e+00   3.4896107e+01
+   3.3250000e+01   2.5061901e+00   3.4902207e+01
+   3.3250000e+01   2.5121488e+00   3.4907306e+01
+   3.3250000e+01   2.5413554e+00   3.4914521e+01
+   3.3250000e+01   2.5794959e+00   3.4919405e+01
+   3.3250000e+01   2.6451405e+00   3.4928736e+01
+   3.3250000e+01   2.7416281e+00   3.4940488e+01
+   3.3250000e+01   2.8990331e+00   3.4952802e+01
+   3.3250000e+01   3.0880496e+00   3.4961322e+01
+   3.3250000e+01   3.3536529e+00   3.4973281e+01
+   3.3250000e+01   3.5827603e+00   3.4972736e+01
+   3.3250000e+01   3.8425455e+00   3.4984074e+01
+   3.3250000e+01   4.3142231e+00   3.5036645e+01
+   3.3250000e+01   5.2460165e+00   3.5170777e+01
+   3.3250000e+01   6.6648926e+00   3.5382711e+01
+   3.3250000e+01   8.2569008e+00   3.5621149e+01
+   3.3250000e+01   9.2870413e+00   3.5722876e+01
+   3.3250000e+01   9.5328760e+00   3.5630785e+01
+   3.3250000e+01   9.9026364e+00   3.5537066e+01
+   3.3250000e+01   1.0298083e+01   3.5480702e+01
+   3.3250000e+01   1.0770826e+01   3.5489091e+01
+   3.3250000e+01   1.1255678e+01   3.5531455e+01
+   3.3250000e+01   1.1602421e+01   3.5566000e+01
+   3.3250000e+01   1.1914041e+01   3.5601397e+01
+   3.3250000e+01   1.2147298e+01   3.5626901e+01
+   3.3250000e+01   1.2343058e+01   3.5648785e+01
+   3.3250000e+01   1.2494471e+01   3.5664835e+01
+   3.3250000e+01   1.2597438e+01   3.5676273e+01
+   3.3250000e+01   1.2688149e+01   3.5686380e+01
+   3.3250000e+01   1.2785116e+01   3.5697636e+01
+   3.3250000e+01   1.2848306e+01   3.5705074e+01
+   3.3250000e+01   1.2914322e+01   3.5711992e+01
+   3.3250000e+01   1.3001628e+01   3.5721826e+01
+   3.3250000e+01   1.3051289e+01   3.5725025e+01
+   3.3250000e+01   1.3089132e+01   3.5727711e+01
+   3.3250000e+01   1.3142140e+01   3.5735612e+01
+   3.3250000e+01   1.3179091e+01   3.5738893e+01
+   3.3250000e+01   1.3225289e+01   3.5744364e+01
+   3.3250000e+01   1.3285380e+01   3.5750000e+01
+   3.3250000e+01   1.3351380e+01   3.5760339e+01
+   3.3250000e+01   1.3413512e+01   3.5768570e+01
+   3.3250000e+01   1.3485198e+01   3.5776364e+01
+   3.3250000e+01   1.3539636e+01   3.5778083e+01
+   3.3250000e+01   1.3586083e+01   3.5781620e+01
+   3.3250000e+01   1.3649860e+01   3.5788785e+01
+   3.3250000e+01   1.3724041e+01   3.5795174e+01
+   3.3250000e+01   1.3795636e+01   3.5799347e+01
+   3.3250000e+01   1.3896884e+01   3.5810504e+01
+   3.3250000e+01   1.4007802e+01   3.5819636e+01
+   3.3250000e+01   1.4119207e+01   3.5823149e+01
+   3.3250000e+01   1.4275008e+01   3.5831579e+01
+   3.3250000e+01   1.4495909e+01   3.5833537e+01
+   3.3250000e+01   1.4732562e+01   3.5837397e+01
+   3.3250000e+01   1.4997446e+01   3.5833347e+01
+   3.3250000e+01   1.5706603e+01   3.5837281e+01
+   3.3250000e+01   1.6613545e+01   3.5844116e+01
+   3.3250000e+01   1.7261298e+01   3.5850289e+01
+   3.3250000e+01   1.8017446e+01   3.5853281e+01
+   3.3250000e+01   1.8879421e+01   3.5867727e+01
+   3.3250000e+01   1.9534612e+01   3.5871678e+01
+   3.3250000e+01   1.9774289e+01   3.5868719e+01
+   3.3250000e+01   1.9845992e+01   3.5868760e+01
+   3.3250000e+01   1.9857645e+01   3.5869248e+01
+   3.3250000e+01   1.9858744e+01   3.5869810e+01
+   3.3250000e+01   1.9851843e+01   3.5868702e+01
+   3.3250000e+01   1.9795959e+01   3.5873008e+01
+   3.3300000e+01   2.5103554e+00   3.4896107e+01
+   3.3300000e+01   2.5061901e+00   3.4902207e+01
+   3.3300000e+01   2.5121488e+00   3.4907306e+01
+   3.3300000e+01   2.5413554e+00   3.4914521e+01
+   3.3300000e+01   2.5794959e+00   3.4919405e+01
+   3.3300000e+01   2.6451405e+00   3.4928736e+01
+   3.3300000e+01   2.7416281e+00   3.4940488e+01
+   3.3300000e+01   2.8990331e+00   3.4952802e+01
+   3.3300000e+01   3.0880496e+00   3.4961322e+01
+   3.3300000e+01   3.3536529e+00   3.4973281e+01
+   3.3300000e+01   3.5827603e+00   3.4972736e+01
+   3.3300000e+01   3.8425455e+00   3.4984074e+01
+   3.3300000e+01   4.3142231e+00   3.5036645e+01
+   3.3300000e+01   5.2460165e+00   3.5170777e+01
+   3.3300000e+01   6.6648926e+00   3.5382711e+01
+   3.3300000e+01   8.2569008e+00   3.5621149e+01
+   3.3300000e+01   9.2870413e+00   3.5722876e+01
+   3.3300000e+01   9.5328760e+00   3.5630785e+01
+   3.3300000e+01   9.9026364e+00   3.5537066e+01
+   3.3300000e+01   1.0298083e+01   3.5480702e+01
+   3.3300000e+01   1.0770826e+01   3.5489091e+01
+   3.3300000e+01   1.1255678e+01   3.5531455e+01
+   3.3300000e+01   1.1602421e+01   3.5566000e+01
+   3.3300000e+01   1.1914041e+01   3.5601397e+01
+   3.3300000e+01   1.2147298e+01   3.5626901e+01
+   3.3300000e+01   1.2343058e+01   3.5648785e+01
+   3.3300000e+01   1.2494471e+01   3.5664835e+01
+   3.3300000e+01   1.2597438e+01   3.5676273e+01
+   3.3300000e+01   1.2688149e+01   3.5686380e+01
+   3.3300000e+01   1.2785116e+01   3.5697636e+01
+   3.3300000e+01   1.2848306e+01   3.5705074e+01
+   3.3300000e+01   1.2914322e+01   3.5711992e+01
+   3.3300000e+01   1.3001628e+01   3.5721826e+01
+   3.3300000e+01   1.3051289e+01   3.5725025e+01
+   3.3300000e+01   1.3089132e+01   3.5727711e+01
+   3.3300000e+01   1.3142140e+01   3.5735612e+01
+   3.3300000e+01   1.3179091e+01   3.5738893e+01
+   3.3300000e+01   1.3225289e+01   3.5744364e+01
+   3.3300000e+01   1.3285380e+01   3.5750000e+01
+   3.3300000e+01   1.3351380e+01   3.5760339e+01
+   3.3300000e+01   1.3413512e+01   3.5768570e+01
+   3.3300000e+01   1.3485198e+01   3.5776364e+01
+   3.3300000e+01   1.3539636e+01   3.5778083e+01
+   3.3300000e+01   1.3586083e+01   3.5781620e+01
+   3.3300000e+01   1.3649860e+01   3.5788785e+01
+   3.3300000e+01   1.3724041e+01   3.5795174e+01
+   3.3300000e+01   1.3795636e+01   3.5799347e+01
+   3.3300000e+01   1.3896884e+01   3.5810504e+01
+   3.3300000e+01   1.4007802e+01   3.5819636e+01
+   3.3300000e+01   1.4119207e+01   3.5823149e+01
+   3.3300000e+01   1.4275008e+01   3.5831579e+01
+   3.3300000e+01   1.4495909e+01   3.5833537e+01
+   3.3300000e+01   1.4732562e+01   3.5837397e+01
+   3.3300000e+01   1.4997446e+01   3.5833347e+01
+   3.3300000e+01   1.5706603e+01   3.5837281e+01
+   3.3300000e+01   1.6613545e+01   3.5844116e+01
+   3.3300000e+01   1.7261298e+01   3.5850289e+01
+   3.3300000e+01   1.8017446e+01   3.5853281e+01
+   3.3300000e+01   1.8879421e+01   3.5867727e+01
+   3.3300000e+01   1.9534612e+01   3.5871678e+01
+   3.3300000e+01   1.9774289e+01   3.5868719e+01
+   3.3300000e+01   1.9845992e+01   3.5868760e+01
+   3.3300000e+01   1.9857645e+01   3.5869248e+01
+   3.3300000e+01   1.9858744e+01   3.5869810e+01
+   3.3300000e+01   1.9851843e+01   3.5868702e+01
+   3.3300000e+01   1.9795959e+01   3.5873008e+01
+   3.3350000e+01   2.5103554e+00   3.4896107e+01
+   3.3350000e+01   2.5061901e+00   3.4902207e+01
+   3.3350000e+01   2.5121488e+00   3.4907306e+01
+   3.3350000e+01   2.5413554e+00   3.4914521e+01
+   3.3350000e+01   2.5794959e+00   3.4919405e+01
+   3.3350000e+01   2.6451405e+00   3.4928736e+01
+   3.3350000e+01   2.7416281e+00   3.4940488e+01
+   3.3350000e+01   2.8990331e+00   3.4952802e+01
+   3.3350000e+01   3.0880496e+00   3.4961322e+01
+   3.3350000e+01   3.3536529e+00   3.4973281e+01
+   3.3350000e+01   3.5827603e+00   3.4972736e+01
+   3.3350000e+01   3.8425455e+00   3.4984074e+01
+   3.3350000e+01   4.3142231e+00   3.5036645e+01
+   3.3350000e+01   5.2460165e+00   3.5170777e+01
+   3.3350000e+01   6.6648926e+00   3.5382711e+01
+   3.3350000e+01   8.2569008e+00   3.5621149e+01
+   3.3350000e+01   9.2870413e+00   3.5722876e+01
+   3.3350000e+01   9.5328760e+00   3.5630785e+01
+   3.3350000e+01   9.9026364e+00   3.5537066e+01
+   3.3350000e+01   1.0298083e+01   3.5480702e+01
+   3.3350000e+01   1.0770826e+01   3.5489091e+01
+   3.3350000e+01   1.1255678e+01   3.5531455e+01
+   3.3350000e+01   1.1602421e+01   3.5566000e+01
+   3.3350000e+01   1.1914041e+01   3.5601397e+01
+   3.3350000e+01   1.2147298e+01   3.5626901e+01
+   3.3350000e+01   1.2343058e+01   3.5648785e+01
+   3.3350000e+01   1.2494471e+01   3.5664835e+01
+   3.3350000e+01   1.2597438e+01   3.5676273e+01
+   3.3350000e+01   1.2688149e+01   3.5686380e+01
+   3.3350000e+01   1.2785116e+01   3.5697636e+01
+   3.3350000e+01   1.2848306e+01   3.5705074e+01
+   3.3350000e+01   1.2914322e+01   3.5711992e+01
+   3.3350000e+01   1.3001628e+01   3.5721826e+01
+   3.3350000e+01   1.3051289e+01   3.5725025e+01
+   3.3350000e+01   1.3089132e+01   3.5727711e+01
+   3.3350000e+01   1.3142140e+01   3.5735612e+01
+   3.3350000e+01   1.3179091e+01   3.5738893e+01
+   3.3350000e+01   1.3225289e+01   3.5744364e+01
+   3.3350000e+01   1.3285380e+01   3.5750000e+01
+   3.3350000e+01   1.3351380e+01   3.5760339e+01
+   3.3350000e+01   1.3413512e+01   3.5768570e+01
+   3.3350000e+01   1.3485198e+01   3.5776364e+01
+   3.3350000e+01   1.3539636e+01   3.5778083e+01
+   3.3350000e+01   1.3586083e+01   3.5781620e+01
+   3.3350000e+01   1.3649860e+01   3.5788785e+01
+   3.3350000e+01   1.3724041e+01   3.5795174e+01
+   3.3350000e+01   1.3795636e+01   3.5799347e+01
+   3.3350000e+01   1.3896884e+01   3.5810504e+01
+   3.3350000e+01   1.4007802e+01   3.5819636e+01
+   3.3350000e+01   1.4119207e+01   3.5823149e+01
+   3.3350000e+01   1.4275008e+01   3.5831579e+01
+   3.3350000e+01   1.4495909e+01   3.5833537e+01
+   3.3350000e+01   1.4732562e+01   3.5837397e+01
+   3.3350000e+01   1.4997446e+01   3.5833347e+01
+   3.3350000e+01   1.5706603e+01   3.5837281e+01
+   3.3350000e+01   1.6613545e+01   3.5844116e+01
+   3.3350000e+01   1.7261298e+01   3.5850289e+01
+   3.3350000e+01   1.8017446e+01   3.5853281e+01
+   3.3350000e+01   1.8879421e+01   3.5867727e+01
+   3.3350000e+01   1.9534612e+01   3.5871678e+01
+   3.3350000e+01   1.9774289e+01   3.5868719e+01
+   3.3350000e+01   1.9845992e+01   3.5868760e+01
+   3.3350000e+01   1.9857645e+01   3.5869248e+01
+   3.3350000e+01   1.9858744e+01   3.5869810e+01
+   3.3350000e+01   1.9851843e+01   3.5868702e+01
+   3.3350000e+01   1.9795959e+01   3.5873008e+01
+   3.3400000e+01   2.5103554e+00   3.4896107e+01
+   3.3400000e+01   2.5061901e+00   3.4902207e+01
+   3.3400000e+01   2.5121488e+00   3.4907306e+01
+   3.3400000e+01   2.5413554e+00   3.4914521e+01
+   3.3400000e+01   2.5794959e+00   3.4919405e+01
+   3.3400000e+01   2.6451405e+00   3.4928736e+01
+   3.3400000e+01   2.7416281e+00   3.4940488e+01
+   3.3400000e+01   2.8990331e+00   3.4952802e+01
+   3.3400000e+01   3.0880496e+00   3.4961322e+01
+   3.3400000e+01   3.3536529e+00   3.4973281e+01
+   3.3400000e+01   3.5827603e+00   3.4972736e+01
+   3.3400000e+01   3.8425455e+00   3.4984074e+01
+   3.3400000e+01   4.3142231e+00   3.5036645e+01
+   3.3400000e+01   5.2460165e+00   3.5170777e+01
+   3.3400000e+01   6.6648926e+00   3.5382711e+01
+   3.3400000e+01   8.2569008e+00   3.5621149e+01
+   3.3400000e+01   9.2870413e+00   3.5722876e+01
+   3.3400000e+01   9.5328760e+00   3.5630785e+01
+   3.3400000e+01   9.9026364e+00   3.5537066e+01
+   3.3400000e+01   1.0298083e+01   3.5480702e+01
+   3.3400000e+01   1.0770826e+01   3.5489091e+01
+   3.3400000e+01   1.1255678e+01   3.5531455e+01
+   3.3400000e+01   1.1602421e+01   3.5566000e+01
+   3.3400000e+01   1.1914041e+01   3.5601397e+01
+   3.3400000e+01   1.2147298e+01   3.5626901e+01
+   3.3400000e+01   1.2343058e+01   3.5648785e+01
+   3.3400000e+01   1.2494471e+01   3.5664835e+01
+   3.3400000e+01   1.2597438e+01   3.5676273e+01
+   3.3400000e+01   1.2688149e+01   3.5686380e+01
+   3.3400000e+01   1.2785116e+01   3.5697636e+01
+   3.3400000e+01   1.2848306e+01   3.5705074e+01
+   3.3400000e+01   1.2914322e+01   3.5711992e+01
+   3.3400000e+01   1.3001628e+01   3.5721826e+01
+   3.3400000e+01   1.3051289e+01   3.5725025e+01
+   3.3400000e+01   1.3089132e+01   3.5727711e+01
+   3.3400000e+01   1.3142140e+01   3.5735612e+01
+   3.3400000e+01   1.3179091e+01   3.5738893e+01
+   3.3400000e+01   1.3225289e+01   3.5744364e+01
+   3.3400000e+01   1.3285380e+01   3.5750000e+01
+   3.3400000e+01   1.3351380e+01   3.5760339e+01
+   3.3400000e+01   1.3413512e+01   3.5768570e+01
+   3.3400000e+01   1.3485198e+01   3.5776364e+01
+   3.3400000e+01   1.3539636e+01   3.5778083e+01
+   3.3400000e+01   1.3586083e+01   3.5781620e+01
+   3.3400000e+01   1.3649860e+01   3.5788785e+01
+   3.3400000e+01   1.3724041e+01   3.5795174e+01
+   3.3400000e+01   1.3795636e+01   3.5799347e+01
+   3.3400000e+01   1.3896884e+01   3.5810504e+01
+   3.3400000e+01   1.4007802e+01   3.5819636e+01
+   3.3400000e+01   1.4119207e+01   3.5823149e+01
+   3.3400000e+01   1.4275008e+01   3.5831579e+01
+   3.3400000e+01   1.4495909e+01   3.5833537e+01
+   3.3400000e+01   1.4732562e+01   3.5837397e+01
+   3.3400000e+01   1.4997446e+01   3.5833347e+01
+   3.3400000e+01   1.5706603e+01   3.5837281e+01
+   3.3400000e+01   1.6613545e+01   3.5844116e+01
+   3.3400000e+01   1.7261298e+01   3.5850289e+01
+   3.3400000e+01   1.8017446e+01   3.5853281e+01
+   3.3400000e+01   1.8879421e+01   3.5867727e+01
+   3.3400000e+01   1.9534612e+01   3.5871678e+01
+   3.3400000e+01   1.9774289e+01   3.5868719e+01
+   3.3400000e+01   1.9845992e+01   3.5868760e+01
+   3.3400000e+01   1.9857645e+01   3.5869248e+01
+   3.3400000e+01   1.9858744e+01   3.5869810e+01
+   3.3400000e+01   1.9851843e+01   3.5868702e+01
+   3.3400000e+01   1.9795959e+01   3.5873008e+01
+   3.3450000e+01   2.5103554e+00   3.4896107e+01
+   3.3450000e+01   2.5061901e+00   3.4902207e+01
+   3.3450000e+01   2.5121488e+00   3.4907306e+01
+   3.3450000e+01   2.5413554e+00   3.4914521e+01
+   3.3450000e+01   2.5794959e+00   3.4919405e+01
+   3.3450000e+01   2.6451405e+00   3.4928736e+01
+   3.3450000e+01   2.7416281e+00   3.4940488e+01
+   3.3450000e+01   2.8990331e+00   3.4952802e+01
+   3.3450000e+01   3.0880496e+00   3.4961322e+01
+   3.3450000e+01   3.3536529e+00   3.4973281e+01
+   3.3450000e+01   3.5827603e+00   3.4972736e+01
+   3.3450000e+01   3.8425455e+00   3.4984074e+01
+   3.3450000e+01   4.3142231e+00   3.5036645e+01
+   3.3450000e+01   5.2460165e+00   3.5170777e+01
+   3.3450000e+01   6.6648926e+00   3.5382711e+01
+   3.3450000e+01   8.2569008e+00   3.5621149e+01
+   3.3450000e+01   9.2870413e+00   3.5722876e+01
+   3.3450000e+01   9.5328760e+00   3.5630785e+01
+   3.3450000e+01   9.9026364e+00   3.5537066e+01
+   3.3450000e+01   1.0298083e+01   3.5480702e+01
+   3.3450000e+01   1.0770826e+01   3.5489091e+01
+   3.3450000e+01   1.1255678e+01   3.5531455e+01
+   3.3450000e+01   1.1602421e+01   3.5566000e+01
+   3.3450000e+01   1.1914041e+01   3.5601397e+01
+   3.3450000e+01   1.2147298e+01   3.5626901e+01
+   3.3450000e+01   1.2343058e+01   3.5648785e+01
+   3.3450000e+01   1.2494471e+01   3.5664835e+01
+   3.3450000e+01   1.2597438e+01   3.5676273e+01
+   3.3450000e+01   1.2688149e+01   3.5686380e+01
+   3.3450000e+01   1.2785116e+01   3.5697636e+01
+   3.3450000e+01   1.2848306e+01   3.5705074e+01
+   3.3450000e+01   1.2914322e+01   3.5711992e+01
+   3.3450000e+01   1.3001628e+01   3.5721826e+01
+   3.3450000e+01   1.3051289e+01   3.5725025e+01
+   3.3450000e+01   1.3089132e+01   3.5727711e+01
+   3.3450000e+01   1.3142140e+01   3.5735612e+01
+   3.3450000e+01   1.3179091e+01   3.5738893e+01
+   3.3450000e+01   1.3225289e+01   3.5744364e+01
+   3.3450000e+01   1.3285380e+01   3.5750000e+01
+   3.3450000e+01   1.3351380e+01   3.5760339e+01
+   3.3450000e+01   1.3413512e+01   3.5768570e+01
+   3.3450000e+01   1.3485198e+01   3.5776364e+01
+   3.3450000e+01   1.3539636e+01   3.5778083e+01
+   3.3450000e+01   1.3586083e+01   3.5781620e+01
+   3.3450000e+01   1.3649860e+01   3.5788785e+01
+   3.3450000e+01   1.3724041e+01   3.5795174e+01
+   3.3450000e+01   1.3795636e+01   3.5799347e+01
+   3.3450000e+01   1.3896884e+01   3.5810504e+01
+   3.3450000e+01   1.4007802e+01   3.5819636e+01
+   3.3450000e+01   1.4119207e+01   3.5823149e+01
+   3.3450000e+01   1.4275008e+01   3.5831579e+01
+   3.3450000e+01   1.4495909e+01   3.5833537e+01
+   3.3450000e+01   1.4732562e+01   3.5837397e+01
+   3.3450000e+01   1.4997446e+01   3.5833347e+01
+   3.3450000e+01   1.5706603e+01   3.5837281e+01
+   3.3450000e+01   1.6613545e+01   3.5844116e+01
+   3.3450000e+01   1.7261298e+01   3.5850289e+01
+   3.3450000e+01   1.8017446e+01   3.5853281e+01
+   3.3450000e+01   1.8879421e+01   3.5867727e+01
+   3.3450000e+01   1.9534612e+01   3.5871678e+01
+   3.3450000e+01   1.9774289e+01   3.5868719e+01
+   3.3450000e+01   1.9845992e+01   3.5868760e+01
+   3.3450000e+01   1.9857645e+01   3.5869248e+01
+   3.3450000e+01   1.9858744e+01   3.5869810e+01
+   3.3450000e+01   1.9851843e+01   3.5868702e+01
+   3.3450000e+01   1.9795959e+01   3.5873008e+01
+   3.3500000e+01   2.5103554e+00   3.4896107e+01
+   3.3500000e+01   2.5061901e+00   3.4902207e+01
+   3.3500000e+01   2.5121488e+00   3.4907306e+01
+   3.3500000e+01   2.5413554e+00   3.4914521e+01
+   3.3500000e+01   2.5794959e+00   3.4919405e+01
+   3.3500000e+01   2.6451405e+00   3.4928736e+01
+   3.3500000e+01   2.7416281e+00   3.4940488e+01
+   3.3500000e+01   2.8990331e+00   3.4952802e+01
+   3.3500000e+01   3.0880496e+00   3.4961322e+01
+   3.3500000e+01   3.3536529e+00   3.4973281e+01
+   3.3500000e+01   3.5827603e+00   3.4972736e+01
+   3.3500000e+01   3.8425455e+00   3.4984074e+01
+   3.3500000e+01   4.3142231e+00   3.5036645e+01
+   3.3500000e+01   5.2460165e+00   3.5170777e+01
+   3.3500000e+01   6.6648926e+00   3.5382711e+01
+   3.3500000e+01   8.2569008e+00   3.5621149e+01
+   3.3500000e+01   9.2870413e+00   3.5722876e+01
+   3.3500000e+01   9.5328760e+00   3.5630785e+01
+   3.3500000e+01   9.9026364e+00   3.5537066e+01
+   3.3500000e+01   1.0298083e+01   3.5480702e+01
+   3.3500000e+01   1.0770826e+01   3.5489091e+01
+   3.3500000e+01   1.1255678e+01   3.5531455e+01
+   3.3500000e+01   1.1602421e+01   3.5566000e+01
+   3.3500000e+01   1.1914041e+01   3.5601397e+01
+   3.3500000e+01   1.2147298e+01   3.5626901e+01
+   3.3500000e+01   1.2343058e+01   3.5648785e+01
+   3.3500000e+01   1.2494471e+01   3.5664835e+01
+   3.3500000e+01   1.2597438e+01   3.5676273e+01
+   3.3500000e+01   1.2688149e+01   3.5686380e+01
+   3.3500000e+01   1.2785116e+01   3.5697636e+01
+   3.3500000e+01   1.2848306e+01   3.5705074e+01
+   3.3500000e+01   1.2914322e+01   3.5711992e+01
+   3.3500000e+01   1.3001628e+01   3.5721826e+01
+   3.3500000e+01   1.3051289e+01   3.5725025e+01
+   3.3500000e+01   1.3089132e+01   3.5727711e+01
+   3.3500000e+01   1.3142140e+01   3.5735612e+01
+   3.3500000e+01   1.3179091e+01   3.5738893e+01
+   3.3500000e+01   1.3225289e+01   3.5744364e+01
+   3.3500000e+01   1.3285380e+01   3.5750000e+01
+   3.3500000e+01   1.3351380e+01   3.5760339e+01
+   3.3500000e+01   1.3413512e+01   3.5768570e+01
+   3.3500000e+01   1.3485198e+01   3.5776364e+01
+   3.3500000e+01   1.3539636e+01   3.5778083e+01
+   3.3500000e+01   1.3586083e+01   3.5781620e+01
+   3.3500000e+01   1.3649860e+01   3.5788785e+01
+   3.3500000e+01   1.3724041e+01   3.5795174e+01
+   3.3500000e+01   1.3795636e+01   3.5799347e+01
+   3.3500000e+01   1.3896884e+01   3.5810504e+01
+   3.3500000e+01   1.4007802e+01   3.5819636e+01
+   3.3500000e+01   1.4119207e+01   3.5823149e+01
+   3.3500000e+01   1.4275008e+01   3.5831579e+01
+   3.3500000e+01   1.4495909e+01   3.5833537e+01
+   3.3500000e+01   1.4732562e+01   3.5837397e+01
+   3.3500000e+01   1.4997446e+01   3.5833347e+01
+   3.3500000e+01   1.5706603e+01   3.5837281e+01
+   3.3500000e+01   1.6613545e+01   3.5844116e+01
+   3.3500000e+01   1.7261298e+01   3.5850289e+01
+   3.3500000e+01   1.8017446e+01   3.5853281e+01
+   3.3500000e+01   1.8879421e+01   3.5867727e+01
+   3.3500000e+01   1.9534612e+01   3.5871678e+01
+   3.3500000e+01   1.9774289e+01   3.5868719e+01
+   3.3500000e+01   1.9845992e+01   3.5868760e+01
+   3.3500000e+01   1.9857645e+01   3.5869248e+01
+   3.3500000e+01   1.9858744e+01   3.5869810e+01
+   3.3500000e+01   1.9851843e+01   3.5868702e+01
+   3.3500000e+01   1.9795959e+01   3.5873008e+01
+   3.3550000e+01   2.5103554e+00   3.4896107e+01
+   3.3550000e+01   2.5061901e+00   3.4902207e+01
+   3.3550000e+01   2.5121488e+00   3.4907306e+01
+   3.3550000e+01   2.5413554e+00   3.4914521e+01
+   3.3550000e+01   2.5794959e+00   3.4919405e+01
+   3.3550000e+01   2.6451405e+00   3.4928736e+01
+   3.3550000e+01   2.7416281e+00   3.4940488e+01
+   3.3550000e+01   2.8990331e+00   3.4952802e+01
+   3.3550000e+01   3.0880496e+00   3.4961322e+01
+   3.3550000e+01   3.3536529e+00   3.4973281e+01
+   3.3550000e+01   3.5827603e+00   3.4972736e+01
+   3.3550000e+01   3.8425455e+00   3.4984074e+01
+   3.3550000e+01   4.3142231e+00   3.5036645e+01
+   3.3550000e+01   5.2460165e+00   3.5170777e+01
+   3.3550000e+01   6.6648926e+00   3.5382711e+01
+   3.3550000e+01   8.2569008e+00   3.5621149e+01
+   3.3550000e+01   9.2870413e+00   3.5722876e+01
+   3.3550000e+01   9.5328760e+00   3.5630785e+01
+   3.3550000e+01   9.9026364e+00   3.5537066e+01
+   3.3550000e+01   1.0298083e+01   3.5480702e+01
+   3.3550000e+01   1.0770826e+01   3.5489091e+01
+   3.3550000e+01   1.1255678e+01   3.5531455e+01
+   3.3550000e+01   1.1602421e+01   3.5566000e+01
+   3.3550000e+01   1.1914041e+01   3.5601397e+01
+   3.3550000e+01   1.2147298e+01   3.5626901e+01
+   3.3550000e+01   1.2343058e+01   3.5648785e+01
+   3.3550000e+01   1.2494471e+01   3.5664835e+01
+   3.3550000e+01   1.2597438e+01   3.5676273e+01
+   3.3550000e+01   1.2688149e+01   3.5686380e+01
+   3.3550000e+01   1.2785116e+01   3.5697636e+01
+   3.3550000e+01   1.2848306e+01   3.5705074e+01
+   3.3550000e+01   1.2914322e+01   3.5711992e+01
+   3.3550000e+01   1.3001628e+01   3.5721826e+01
+   3.3550000e+01   1.3051289e+01   3.5725025e+01
+   3.3550000e+01   1.3089132e+01   3.5727711e+01
+   3.3550000e+01   1.3142140e+01   3.5735612e+01
+   3.3550000e+01   1.3179091e+01   3.5738893e+01
+   3.3550000e+01   1.3225289e+01   3.5744364e+01
+   3.3550000e+01   1.3285380e+01   3.5750000e+01
+   3.3550000e+01   1.3351380e+01   3.5760339e+01
+   3.3550000e+01   1.3413512e+01   3.5768570e+01
+   3.3550000e+01   1.3485198e+01   3.5776364e+01
+   3.3550000e+01   1.3539636e+01   3.5778083e+01
+   3.3550000e+01   1.3586083e+01   3.5781620e+01
+   3.3550000e+01   1.3649860e+01   3.5788785e+01
+   3.3550000e+01   1.3724041e+01   3.5795174e+01
+   3.3550000e+01   1.3795636e+01   3.5799347e+01
+   3.3550000e+01   1.3896884e+01   3.5810504e+01
+   3.3550000e+01   1.4007802e+01   3.5819636e+01
+   3.3550000e+01   1.4119207e+01   3.5823149e+01
+   3.3550000e+01   1.4275008e+01   3.5831579e+01
+   3.3550000e+01   1.4495909e+01   3.5833537e+01
+   3.3550000e+01   1.4732562e+01   3.5837397e+01
+   3.3550000e+01   1.4997446e+01   3.5833347e+01
+   3.3550000e+01   1.5706603e+01   3.5837281e+01
+   3.3550000e+01   1.6613545e+01   3.5844116e+01
+   3.3550000e+01   1.7261298e+01   3.5850289e+01
+   3.3550000e+01   1.8017446e+01   3.5853281e+01
+   3.3550000e+01   1.8879421e+01   3.5867727e+01
+   3.3550000e+01   1.9534612e+01   3.5871678e+01
+   3.3550000e+01   1.9774289e+01   3.5868719e+01
+   3.3550000e+01   1.9845992e+01   3.5868760e+01
+   3.3550000e+01   1.9857645e+01   3.5869248e+01
+   3.3550000e+01   1.9858744e+01   3.5869810e+01
+   3.3550000e+01   1.9851843e+01   3.5868702e+01
+   3.3550000e+01   1.9795959e+01   3.5873008e+01
+   3.3600000e+01   2.5103554e+00   3.4896107e+01
+   3.3600000e+01   2.5061901e+00   3.4902207e+01
+   3.3600000e+01   2.5121488e+00   3.4907306e+01
+   3.3600000e+01   2.5413554e+00   3.4914521e+01
+   3.3600000e+01   2.5794959e+00   3.4919405e+01
+   3.3600000e+01   2.6451405e+00   3.4928736e+01
+   3.3600000e+01   2.7416281e+00   3.4940488e+01
+   3.3600000e+01   2.8990331e+00   3.4952802e+01
+   3.3600000e+01   3.0880496e+00   3.4961322e+01
+   3.3600000e+01   3.3536529e+00   3.4973281e+01
+   3.3600000e+01   3.5827603e+00   3.4972736e+01
+   3.3600000e+01   3.8425455e+00   3.4984074e+01
+   3.3600000e+01   4.3142231e+00   3.5036645e+01
+   3.3600000e+01   5.2460165e+00   3.5170777e+01
+   3.3600000e+01   6.6648926e+00   3.5382711e+01
+   3.3600000e+01   8.2569008e+00   3.5621149e+01
+   3.3600000e+01   9.2870413e+00   3.5722876e+01
+   3.3600000e+01   9.5328760e+00   3.5630785e+01
+   3.3600000e+01   9.9026364e+00   3.5537066e+01
+   3.3600000e+01   1.0298083e+01   3.5480702e+01
+   3.3600000e+01   1.0770826e+01   3.5489091e+01
+   3.3600000e+01   1.1255678e+01   3.5531455e+01
+   3.3600000e+01   1.1602421e+01   3.5566000e+01
+   3.3600000e+01   1.1914041e+01   3.5601397e+01
+   3.3600000e+01   1.2147298e+01   3.5626901e+01
+   3.3600000e+01   1.2343058e+01   3.5648785e+01
+   3.3600000e+01   1.2494471e+01   3.5664835e+01
+   3.3600000e+01   1.2597438e+01   3.5676273e+01
+   3.3600000e+01   1.2688149e+01   3.5686380e+01
+   3.3600000e+01   1.2785116e+01   3.5697636e+01
+   3.3600000e+01   1.2848306e+01   3.5705074e+01
+   3.3600000e+01   1.2914322e+01   3.5711992e+01
+   3.3600000e+01   1.3001628e+01   3.5721826e+01
+   3.3600000e+01   1.3051289e+01   3.5725025e+01
+   3.3600000e+01   1.3089132e+01   3.5727711e+01
+   3.3600000e+01   1.3142140e+01   3.5735612e+01
+   3.3600000e+01   1.3179091e+01   3.5738893e+01
+   3.3600000e+01   1.3225289e+01   3.5744364e+01
+   3.3600000e+01   1.3285380e+01   3.5750000e+01
+   3.3600000e+01   1.3351380e+01   3.5760339e+01
+   3.3600000e+01   1.3413512e+01   3.5768570e+01
+   3.3600000e+01   1.3485198e+01   3.5776364e+01
+   3.3600000e+01   1.3539636e+01   3.5778083e+01
+   3.3600000e+01   1.3586083e+01   3.5781620e+01
+   3.3600000e+01   1.3649860e+01   3.5788785e+01
+   3.3600000e+01   1.3724041e+01   3.5795174e+01
+   3.3600000e+01   1.3795636e+01   3.5799347e+01
+   3.3600000e+01   1.3896884e+01   3.5810504e+01
+   3.3600000e+01   1.4007802e+01   3.5819636e+01
+   3.3600000e+01   1.4119207e+01   3.5823149e+01
+   3.3600000e+01   1.4275008e+01   3.5831579e+01
+   3.3600000e+01   1.4495909e+01   3.5833537e+01
+   3.3600000e+01   1.4732562e+01   3.5837397e+01
+   3.3600000e+01   1.4997446e+01   3.5833347e+01
+   3.3600000e+01   1.5706603e+01   3.5837281e+01
+   3.3600000e+01   1.6613545e+01   3.5844116e+01
+   3.3600000e+01   1.7261298e+01   3.5850289e+01
+   3.3600000e+01   1.8017446e+01   3.5853281e+01
+   3.3600000e+01   1.8879421e+01   3.5867727e+01
+   3.3600000e+01   1.9534612e+01   3.5871678e+01
+   3.3600000e+01   1.9774289e+01   3.5868719e+01
+   3.3600000e+01   1.9845992e+01   3.5868760e+01
+   3.3600000e+01   1.9857645e+01   3.5869248e+01
+   3.3600000e+01   1.9858744e+01   3.5869810e+01
+   3.3600000e+01   1.9851843e+01   3.5868702e+01
+   3.3600000e+01   1.9795959e+01   3.5873008e+01
+   3.3650000e+01   2.5103554e+00   3.4896107e+01
+   3.3650000e+01   2.5061901e+00   3.4902207e+01
+   3.3650000e+01   2.5121488e+00   3.4907306e+01
+   3.3650000e+01   2.5413554e+00   3.4914521e+01
+   3.3650000e+01   2.5794959e+00   3.4919405e+01
+   3.3650000e+01   2.6451405e+00   3.4928736e+01
+   3.3650000e+01   2.7416281e+00   3.4940488e+01
+   3.3650000e+01   2.8990331e+00   3.4952802e+01
+   3.3650000e+01   3.0880496e+00   3.4961322e+01
+   3.3650000e+01   3.3536529e+00   3.4973281e+01
+   3.3650000e+01   3.5827603e+00   3.4972736e+01
+   3.3650000e+01   3.8425455e+00   3.4984074e+01
+   3.3650000e+01   4.3142231e+00   3.5036645e+01
+   3.3650000e+01   5.2460165e+00   3.5170777e+01
+   3.3650000e+01   6.6648926e+00   3.5382711e+01
+   3.3650000e+01   8.2569008e+00   3.5621149e+01
+   3.3650000e+01   9.2870413e+00   3.5722876e+01
+   3.3650000e+01   9.5328760e+00   3.5630785e+01
+   3.3650000e+01   9.9026364e+00   3.5537066e+01
+   3.3650000e+01   1.0298083e+01   3.5480702e+01
+   3.3650000e+01   1.0770826e+01   3.5489091e+01
+   3.3650000e+01   1.1255678e+01   3.5531455e+01
+   3.3650000e+01   1.1602421e+01   3.5566000e+01
+   3.3650000e+01   1.1914041e+01   3.5601397e+01
+   3.3650000e+01   1.2147298e+01   3.5626901e+01
+   3.3650000e+01   1.2343058e+01   3.5648785e+01
+   3.3650000e+01   1.2494471e+01   3.5664835e+01
+   3.3650000e+01   1.2597438e+01   3.5676273e+01
+   3.3650000e+01   1.2688149e+01   3.5686380e+01
+   3.3650000e+01   1.2785116e+01   3.5697636e+01
+   3.3650000e+01   1.2848306e+01   3.5705074e+01
+   3.3650000e+01   1.2914322e+01   3.5711992e+01
+   3.3650000e+01   1.3001628e+01   3.5721826e+01
+   3.3650000e+01   1.3051289e+01   3.5725025e+01
+   3.3650000e+01   1.3089132e+01   3.5727711e+01
+   3.3650000e+01   1.3142140e+01   3.5735612e+01
+   3.3650000e+01   1.3179091e+01   3.5738893e+01
+   3.3650000e+01   1.3225289e+01   3.5744364e+01
+   3.3650000e+01   1.3285380e+01   3.5750000e+01
+   3.3650000e+01   1.3351380e+01   3.5760339e+01
+   3.3650000e+01   1.3413512e+01   3.5768570e+01
+   3.3650000e+01   1.3485198e+01   3.5776364e+01
+   3.3650000e+01   1.3539636e+01   3.5778083e+01
+   3.3650000e+01   1.3586083e+01   3.5781620e+01
+   3.3650000e+01   1.3649860e+01   3.5788785e+01
+   3.3650000e+01   1.3724041e+01   3.5795174e+01
+   3.3650000e+01   1.3795636e+01   3.5799347e+01
+   3.3650000e+01   1.3896884e+01   3.5810504e+01
+   3.3650000e+01   1.4007802e+01   3.5819636e+01
+   3.3650000e+01   1.4119207e+01   3.5823149e+01
+   3.3650000e+01   1.4275008e+01   3.5831579e+01
+   3.3650000e+01   1.4495909e+01   3.5833537e+01
+   3.3650000e+01   1.4732562e+01   3.5837397e+01
+   3.3650000e+01   1.4997446e+01   3.5833347e+01
+   3.3650000e+01   1.5706603e+01   3.5837281e+01
+   3.3650000e+01   1.6613545e+01   3.5844116e+01
+   3.3650000e+01   1.7261298e+01   3.5850289e+01
+   3.3650000e+01   1.8017446e+01   3.5853281e+01
+   3.3650000e+01   1.8879421e+01   3.5867727e+01
+   3.3650000e+01   1.9534612e+01   3.5871678e+01
+   3.3650000e+01   1.9774289e+01   3.5868719e+01
+   3.3650000e+01   1.9845992e+01   3.5868760e+01
+   3.3650000e+01   1.9857645e+01   3.5869248e+01
+   3.3650000e+01   1.9858744e+01   3.5869810e+01
+   3.3650000e+01   1.9851843e+01   3.5868702e+01
+   3.3650000e+01   1.9795959e+01   3.5873008e+01
+   3.3700000e+01   2.5103554e+00   3.4896107e+01
+   3.3700000e+01   2.5061901e+00   3.4902207e+01
+   3.3700000e+01   2.5121488e+00   3.4907306e+01
+   3.3700000e+01   2.5413554e+00   3.4914521e+01
+   3.3700000e+01   2.5794959e+00   3.4919405e+01
+   3.3700000e+01   2.6451405e+00   3.4928736e+01
+   3.3700000e+01   2.7416281e+00   3.4940488e+01
+   3.3700000e+01   2.8990331e+00   3.4952802e+01
+   3.3700000e+01   3.0880496e+00   3.4961322e+01
+   3.3700000e+01   3.3536529e+00   3.4973281e+01
+   3.3700000e+01   3.5827603e+00   3.4972736e+01
+   3.3700000e+01   3.8425455e+00   3.4984074e+01
+   3.3700000e+01   4.3142231e+00   3.5036645e+01
+   3.3700000e+01   5.2460165e+00   3.5170777e+01
+   3.3700000e+01   6.6648926e+00   3.5382711e+01
+   3.3700000e+01   8.2569008e+00   3.5621149e+01
+   3.3700000e+01   9.2870413e+00   3.5722876e+01
+   3.3700000e+01   9.5328760e+00   3.5630785e+01
+   3.3700000e+01   9.9026364e+00   3.5537066e+01
+   3.3700000e+01   1.0298083e+01   3.5480702e+01
+   3.3700000e+01   1.0770826e+01   3.5489091e+01
+   3.3700000e+01   1.1255678e+01   3.5531455e+01
+   3.3700000e+01   1.1602421e+01   3.5566000e+01
+   3.3700000e+01   1.1914041e+01   3.5601397e+01
+   3.3700000e+01   1.2147298e+01   3.5626901e+01
+   3.3700000e+01   1.2343058e+01   3.5648785e+01
+   3.3700000e+01   1.2494471e+01   3.5664835e+01
+   3.3700000e+01   1.2597438e+01   3.5676273e+01
+   3.3700000e+01   1.2688149e+01   3.5686380e+01
+   3.3700000e+01   1.2785116e+01   3.5697636e+01
+   3.3700000e+01   1.2848306e+01   3.5705074e+01
+   3.3700000e+01   1.2914322e+01   3.5711992e+01
+   3.3700000e+01   1.3001628e+01   3.5721826e+01
+   3.3700000e+01   1.3051289e+01   3.5725025e+01
+   3.3700000e+01   1.3089132e+01   3.5727711e+01
+   3.3700000e+01   1.3142140e+01   3.5735612e+01
+   3.3700000e+01   1.3179091e+01   3.5738893e+01
+   3.3700000e+01   1.3225289e+01   3.5744364e+01
+   3.3700000e+01   1.3285380e+01   3.5750000e+01
+   3.3700000e+01   1.3351380e+01   3.5760339e+01
+   3.3700000e+01   1.3413512e+01   3.5768570e+01
+   3.3700000e+01   1.3485198e+01   3.5776364e+01
+   3.3700000e+01   1.3539636e+01   3.5778083e+01
+   3.3700000e+01   1.3586083e+01   3.5781620e+01
+   3.3700000e+01   1.3649860e+01   3.5788785e+01
+   3.3700000e+01   1.3724041e+01   3.5795174e+01
+   3.3700000e+01   1.3795636e+01   3.5799347e+01
+   3.3700000e+01   1.3896884e+01   3.5810504e+01
+   3.3700000e+01   1.4007802e+01   3.5819636e+01
+   3.3700000e+01   1.4119207e+01   3.5823149e+01
+   3.3700000e+01   1.4275008e+01   3.5831579e+01
+   3.3700000e+01   1.4495909e+01   3.5833537e+01
+   3.3700000e+01   1.4732562e+01   3.5837397e+01
+   3.3700000e+01   1.4997446e+01   3.5833347e+01
+   3.3700000e+01   1.5706603e+01   3.5837281e+01
+   3.3700000e+01   1.6613545e+01   3.5844116e+01
+   3.3700000e+01   1.7261298e+01   3.5850289e+01
+   3.3700000e+01   1.8017446e+01   3.5853281e+01
+   3.3700000e+01   1.8879421e+01   3.5867727e+01
+   3.3700000e+01   1.9534612e+01   3.5871678e+01
+   3.3700000e+01   1.9774289e+01   3.5868719e+01
+   3.3700000e+01   1.9845992e+01   3.5868760e+01
+   3.3700000e+01   1.9857645e+01   3.5869248e+01
+   3.3700000e+01   1.9858744e+01   3.5869810e+01
+   3.3700000e+01   1.9851843e+01   3.5868702e+01
+   3.3700000e+01   1.9795959e+01   3.5873008e+01
+   3.3750000e+01   2.5103554e+00   3.4896107e+01
+   3.3750000e+01   2.5061901e+00   3.4902207e+01
+   3.3750000e+01   2.5121488e+00   3.4907306e+01
+   3.3750000e+01   2.5413554e+00   3.4914521e+01
+   3.3750000e+01   2.5794959e+00   3.4919405e+01
+   3.3750000e+01   2.6451405e+00   3.4928736e+01
+   3.3750000e+01   2.7416281e+00   3.4940488e+01
+   3.3750000e+01   2.8990331e+00   3.4952802e+01
+   3.3750000e+01   3.0880496e+00   3.4961322e+01
+   3.3750000e+01   3.3536529e+00   3.4973281e+01
+   3.3750000e+01   3.5827603e+00   3.4972736e+01
+   3.3750000e+01   3.8425455e+00   3.4984074e+01
+   3.3750000e+01   4.3142231e+00   3.5036645e+01
+   3.3750000e+01   5.2460165e+00   3.5170777e+01
+   3.3750000e+01   6.6648926e+00   3.5382711e+01
+   3.3750000e+01   8.2569008e+00   3.5621149e+01
+   3.3750000e+01   9.2870413e+00   3.5722876e+01
+   3.3750000e+01   9.5328760e+00   3.5630785e+01
+   3.3750000e+01   9.9026364e+00   3.5537066e+01
+   3.3750000e+01   1.0298083e+01   3.5480702e+01
+   3.3750000e+01   1.0770826e+01   3.5489091e+01
+   3.3750000e+01   1.1255678e+01   3.5531455e+01
+   3.3750000e+01   1.1602421e+01   3.5566000e+01
+   3.3750000e+01   1.1914041e+01   3.5601397e+01
+   3.3750000e+01   1.2147298e+01   3.5626901e+01
+   3.3750000e+01   1.2343058e+01   3.5648785e+01
+   3.3750000e+01   1.2494471e+01   3.5664835e+01
+   3.3750000e+01   1.2597438e+01   3.5676273e+01
+   3.3750000e+01   1.2688149e+01   3.5686380e+01
+   3.3750000e+01   1.2785116e+01   3.5697636e+01
+   3.3750000e+01   1.2848306e+01   3.5705074e+01
+   3.3750000e+01   1.2914322e+01   3.5711992e+01
+   3.3750000e+01   1.3001628e+01   3.5721826e+01
+   3.3750000e+01   1.3051289e+01   3.5725025e+01
+   3.3750000e+01   1.3089132e+01   3.5727711e+01
+   3.3750000e+01   1.3142140e+01   3.5735612e+01
+   3.3750000e+01   1.3179091e+01   3.5738893e+01
+   3.3750000e+01   1.3225289e+01   3.5744364e+01
+   3.3750000e+01   1.3285380e+01   3.5750000e+01
+   3.3750000e+01   1.3351380e+01   3.5760339e+01
+   3.3750000e+01   1.3413512e+01   3.5768570e+01
+   3.3750000e+01   1.3485198e+01   3.5776364e+01
+   3.3750000e+01   1.3539636e+01   3.5778083e+01
+   3.3750000e+01   1.3586083e+01   3.5781620e+01
+   3.3750000e+01   1.3649860e+01   3.5788785e+01
+   3.3750000e+01   1.3724041e+01   3.5795174e+01
+   3.3750000e+01   1.3795636e+01   3.5799347e+01
+   3.3750000e+01   1.3896884e+01   3.5810504e+01
+   3.3750000e+01   1.4007802e+01   3.5819636e+01
+   3.3750000e+01   1.4119207e+01   3.5823149e+01
+   3.3750000e+01   1.4275008e+01   3.5831579e+01
+   3.3750000e+01   1.4495909e+01   3.5833537e+01
+   3.3750000e+01   1.4732562e+01   3.5837397e+01
+   3.3750000e+01   1.4997446e+01   3.5833347e+01
+   3.3750000e+01   1.5706603e+01   3.5837281e+01
+   3.3750000e+01   1.6613545e+01   3.5844116e+01
+   3.3750000e+01   1.7261298e+01   3.5850289e+01
+   3.3750000e+01   1.8017446e+01   3.5853281e+01
+   3.3750000e+01   1.8879421e+01   3.5867727e+01
+   3.3750000e+01   1.9534612e+01   3.5871678e+01
+   3.3750000e+01   1.9774289e+01   3.5868719e+01
+   3.3750000e+01   1.9845992e+01   3.5868760e+01
+   3.3750000e+01   1.9857645e+01   3.5869248e+01
+   3.3750000e+01   1.9858744e+01   3.5869810e+01
+   3.3750000e+01   1.9851843e+01   3.5868702e+01
+   3.3750000e+01   1.9795959e+01   3.5873008e+01
+   3.3800000e+01   2.5103554e+00   3.4896107e+01
+   3.3800000e+01   2.5061901e+00   3.4902207e+01
+   3.3800000e+01   2.5121488e+00   3.4907306e+01
+   3.3800000e+01   2.5413554e+00   3.4914521e+01
+   3.3800000e+01   2.5794959e+00   3.4919405e+01
+   3.3800000e+01   2.6451405e+00   3.4928736e+01
+   3.3800000e+01   2.7416281e+00   3.4940488e+01
+   3.3800000e+01   2.8990331e+00   3.4952802e+01
+   3.3800000e+01   3.0880496e+00   3.4961322e+01
+   3.3800000e+01   3.3536529e+00   3.4973281e+01
+   3.3800000e+01   3.5827603e+00   3.4972736e+01
+   3.3800000e+01   3.8425455e+00   3.4984074e+01
+   3.3800000e+01   4.3142231e+00   3.5036645e+01
+   3.3800000e+01   5.2460165e+00   3.5170777e+01
+   3.3800000e+01   6.6648926e+00   3.5382711e+01
+   3.3800000e+01   8.2569008e+00   3.5621149e+01
+   3.3800000e+01   9.2870413e+00   3.5722876e+01
+   3.3800000e+01   9.5328760e+00   3.5630785e+01
+   3.3800000e+01   9.9026364e+00   3.5537066e+01
+   3.3800000e+01   1.0298083e+01   3.5480702e+01
+   3.3800000e+01   1.0770826e+01   3.5489091e+01
+   3.3800000e+01   1.1255678e+01   3.5531455e+01
+   3.3800000e+01   1.1602421e+01   3.5566000e+01
+   3.3800000e+01   1.1914041e+01   3.5601397e+01
+   3.3800000e+01   1.2147298e+01   3.5626901e+01
+   3.3800000e+01   1.2343058e+01   3.5648785e+01
+   3.3800000e+01   1.2494471e+01   3.5664835e+01
+   3.3800000e+01   1.2597438e+01   3.5676273e+01
+   3.3800000e+01   1.2688149e+01   3.5686380e+01
+   3.3800000e+01   1.2785116e+01   3.5697636e+01
+   3.3800000e+01   1.2848306e+01   3.5705074e+01
+   3.3800000e+01   1.2914322e+01   3.5711992e+01
+   3.3800000e+01   1.3001628e+01   3.5721826e+01
+   3.3800000e+01   1.3051289e+01   3.5725025e+01
+   3.3800000e+01   1.3089132e+01   3.5727711e+01
+   3.3800000e+01   1.3142140e+01   3.5735612e+01
+   3.3800000e+01   1.3179091e+01   3.5738893e+01
+   3.3800000e+01   1.3225289e+01   3.5744364e+01
+   3.3800000e+01   1.3285380e+01   3.5750000e+01
+   3.3800000e+01   1.3351380e+01   3.5760339e+01
+   3.3800000e+01   1.3413512e+01   3.5768570e+01
+   3.3800000e+01   1.3485198e+01   3.5776364e+01
+   3.3800000e+01   1.3539636e+01   3.5778083e+01
+   3.3800000e+01   1.3586083e+01   3.5781620e+01
+   3.3800000e+01   1.3649860e+01   3.5788785e+01
+   3.3800000e+01   1.3724041e+01   3.5795174e+01
+   3.3800000e+01   1.3795636e+01   3.5799347e+01
+   3.3800000e+01   1.3896884e+01   3.5810504e+01
+   3.3800000e+01   1.4007802e+01   3.5819636e+01
+   3.3800000e+01   1.4119207e+01   3.5823149e+01
+   3.3800000e+01   1.4275008e+01   3.5831579e+01
+   3.3800000e+01   1.4495909e+01   3.5833537e+01
+   3.3800000e+01   1.4732562e+01   3.5837397e+01
+   3.3800000e+01   1.4997446e+01   3.5833347e+01
+   3.3800000e+01   1.5706603e+01   3.5837281e+01
+   3.3800000e+01   1.6613545e+01   3.5844116e+01
+   3.3800000e+01   1.7261298e+01   3.5850289e+01
+   3.3800000e+01   1.8017446e+01   3.5853281e+01
+   3.3800000e+01   1.8879421e+01   3.5867727e+01
+   3.3800000e+01   1.9534612e+01   3.5871678e+01
+   3.3800000e+01   1.9774289e+01   3.5868719e+01
+   3.3800000e+01   1.9845992e+01   3.5868760e+01
+   3.3800000e+01   1.9857645e+01   3.5869248e+01
+   3.3800000e+01   1.9858744e+01   3.5869810e+01
+   3.3800000e+01   1.9851843e+01   3.5868702e+01
+   3.3800000e+01   1.9795959e+01   3.5873008e+01
+   3.3850000e+01   2.5103554e+00   3.4896107e+01
+   3.3850000e+01   2.5061901e+00   3.4902207e+01
+   3.3850000e+01   2.5121488e+00   3.4907306e+01
+   3.3850000e+01   2.5413554e+00   3.4914521e+01
+   3.3850000e+01   2.5794959e+00   3.4919405e+01
+   3.3850000e+01   2.6451405e+00   3.4928736e+01
+   3.3850000e+01   2.7416281e+00   3.4940488e+01
+   3.3850000e+01   2.8990331e+00   3.4952802e+01
+   3.3850000e+01   3.0880496e+00   3.4961322e+01
+   3.3850000e+01   3.3536529e+00   3.4973281e+01
+   3.3850000e+01   3.5827603e+00   3.4972736e+01
+   3.3850000e+01   3.8425455e+00   3.4984074e+01
+   3.3850000e+01   4.3142231e+00   3.5036645e+01
+   3.3850000e+01   5.2460165e+00   3.5170777e+01
+   3.3850000e+01   6.6648926e+00   3.5382711e+01
+   3.3850000e+01   8.2569008e+00   3.5621149e+01
+   3.3850000e+01   9.2870413e+00   3.5722876e+01
+   3.3850000e+01   9.5328760e+00   3.5630785e+01
+   3.3850000e+01   9.9026364e+00   3.5537066e+01
+   3.3850000e+01   1.0298083e+01   3.5480702e+01
+   3.3850000e+01   1.0770826e+01   3.5489091e+01
+   3.3850000e+01   1.1255678e+01   3.5531455e+01
+   3.3850000e+01   1.1602421e+01   3.5566000e+01
+   3.3850000e+01   1.1914041e+01   3.5601397e+01
+   3.3850000e+01   1.2147298e+01   3.5626901e+01
+   3.3850000e+01   1.2343058e+01   3.5648785e+01
+   3.3850000e+01   1.2494471e+01   3.5664835e+01
+   3.3850000e+01   1.2597438e+01   3.5676273e+01
+   3.3850000e+01   1.2688149e+01   3.5686380e+01
+   3.3850000e+01   1.2785116e+01   3.5697636e+01
+   3.3850000e+01   1.2848306e+01   3.5705074e+01
+   3.3850000e+01   1.2914322e+01   3.5711992e+01
+   3.3850000e+01   1.3001628e+01   3.5721826e+01
+   3.3850000e+01   1.3051289e+01   3.5725025e+01
+   3.3850000e+01   1.3089132e+01   3.5727711e+01
+   3.3850000e+01   1.3142140e+01   3.5735612e+01
+   3.3850000e+01   1.3179091e+01   3.5738893e+01
+   3.3850000e+01   1.3225289e+01   3.5744364e+01
+   3.3850000e+01   1.3285380e+01   3.5750000e+01
+   3.3850000e+01   1.3351380e+01   3.5760339e+01
+   3.3850000e+01   1.3413512e+01   3.5768570e+01
+   3.3850000e+01   1.3485198e+01   3.5776364e+01
+   3.3850000e+01   1.3539636e+01   3.5778083e+01
+   3.3850000e+01   1.3586083e+01   3.5781620e+01
+   3.3850000e+01   1.3649860e+01   3.5788785e+01
+   3.3850000e+01   1.3724041e+01   3.5795174e+01
+   3.3850000e+01   1.3795636e+01   3.5799347e+01
+   3.3850000e+01   1.3896884e+01   3.5810504e+01
+   3.3850000e+01   1.4007802e+01   3.5819636e+01
+   3.3850000e+01   1.4119207e+01   3.5823149e+01
+   3.3850000e+01   1.4275008e+01   3.5831579e+01
+   3.3850000e+01   1.4495909e+01   3.5833537e+01
+   3.3850000e+01   1.4732562e+01   3.5837397e+01
+   3.3850000e+01   1.4997446e+01   3.5833347e+01
+   3.3850000e+01   1.5706603e+01   3.5837281e+01
+   3.3850000e+01   1.6613545e+01   3.5844116e+01
+   3.3850000e+01   1.7261298e+01   3.5850289e+01
+   3.3850000e+01   1.8017446e+01   3.5853281e+01
+   3.3850000e+01   1.8879421e+01   3.5867727e+01
+   3.3850000e+01   1.9534612e+01   3.5871678e+01
+   3.3850000e+01   1.9774289e+01   3.5868719e+01
+   3.3850000e+01   1.9845992e+01   3.5868760e+01
+   3.3850000e+01   1.9857645e+01   3.5869248e+01
+   3.3850000e+01   1.9858744e+01   3.5869810e+01
+   3.3850000e+01   1.9851843e+01   3.5868702e+01
+   3.3850000e+01   1.9795959e+01   3.5873008e+01
+   3.3900000e+01   2.5103554e+00   3.4896107e+01
+   3.3900000e+01   2.5061901e+00   3.4902207e+01
+   3.3900000e+01   2.5121488e+00   3.4907306e+01
+   3.3900000e+01   2.5413554e+00   3.4914521e+01
+   3.3900000e+01   2.5794959e+00   3.4919405e+01
+   3.3900000e+01   2.6451405e+00   3.4928736e+01
+   3.3900000e+01   2.7416281e+00   3.4940488e+01
+   3.3900000e+01   2.8990331e+00   3.4952802e+01
+   3.3900000e+01   3.0880496e+00   3.4961322e+01
+   3.3900000e+01   3.3536529e+00   3.4973281e+01
+   3.3900000e+01   3.5827603e+00   3.4972736e+01
+   3.3900000e+01   3.8425455e+00   3.4984074e+01
+   3.3900000e+01   4.3142231e+00   3.5036645e+01
+   3.3900000e+01   5.2460165e+00   3.5170777e+01
+   3.3900000e+01   6.6648926e+00   3.5382711e+01
+   3.3900000e+01   8.2569008e+00   3.5621149e+01
+   3.3900000e+01   9.2870413e+00   3.5722876e+01
+   3.3900000e+01   9.5328760e+00   3.5630785e+01
+   3.3900000e+01   9.9026364e+00   3.5537066e+01
+   3.3900000e+01   1.0298083e+01   3.5480702e+01
+   3.3900000e+01   1.0770826e+01   3.5489091e+01
+   3.3900000e+01   1.1255678e+01   3.5531455e+01
+   3.3900000e+01   1.1602421e+01   3.5566000e+01
+   3.3900000e+01   1.1914041e+01   3.5601397e+01
+   3.3900000e+01   1.2147298e+01   3.5626901e+01
+   3.3900000e+01   1.2343058e+01   3.5648785e+01
+   3.3900000e+01   1.2494471e+01   3.5664835e+01
+   3.3900000e+01   1.2597438e+01   3.5676273e+01
+   3.3900000e+01   1.2688149e+01   3.5686380e+01
+   3.3900000e+01   1.2785116e+01   3.5697636e+01
+   3.3900000e+01   1.2848306e+01   3.5705074e+01
+   3.3900000e+01   1.2914322e+01   3.5711992e+01
+   3.3900000e+01   1.3001628e+01   3.5721826e+01
+   3.3900000e+01   1.3051289e+01   3.5725025e+01
+   3.3900000e+01   1.3089132e+01   3.5727711e+01
+   3.3900000e+01   1.3142140e+01   3.5735612e+01
+   3.3900000e+01   1.3179091e+01   3.5738893e+01
+   3.3900000e+01   1.3225289e+01   3.5744364e+01
+   3.3900000e+01   1.3285380e+01   3.5750000e+01
+   3.3900000e+01   1.3351380e+01   3.5760339e+01
+   3.3900000e+01   1.3413512e+01   3.5768570e+01
+   3.3900000e+01   1.3485198e+01   3.5776364e+01
+   3.3900000e+01   1.3539636e+01   3.5778083e+01
+   3.3900000e+01   1.3586083e+01   3.5781620e+01
+   3.3900000e+01   1.3649860e+01   3.5788785e+01
+   3.3900000e+01   1.3724041e+01   3.5795174e+01
+   3.3900000e+01   1.3795636e+01   3.5799347e+01
+   3.3900000e+01   1.3896884e+01   3.5810504e+01
+   3.3900000e+01   1.4007802e+01   3.5819636e+01
+   3.3900000e+01   1.4119207e+01   3.5823149e+01
+   3.3900000e+01   1.4275008e+01   3.5831579e+01
+   3.3900000e+01   1.4495909e+01   3.5833537e+01
+   3.3900000e+01   1.4732562e+01   3.5837397e+01
+   3.3900000e+01   1.4997446e+01   3.5833347e+01
+   3.3900000e+01   1.5706603e+01   3.5837281e+01
+   3.3900000e+01   1.6613545e+01   3.5844116e+01
+   3.3900000e+01   1.7261298e+01   3.5850289e+01
+   3.3900000e+01   1.8017446e+01   3.5853281e+01
+   3.3900000e+01   1.8879421e+01   3.5867727e+01
+   3.3900000e+01   1.9534612e+01   3.5871678e+01
+   3.3900000e+01   1.9774289e+01   3.5868719e+01
+   3.3900000e+01   1.9845992e+01   3.5868760e+01
+   3.3900000e+01   1.9857645e+01   3.5869248e+01
+   3.3900000e+01   1.9858744e+01   3.5869810e+01
+   3.3900000e+01   1.9851843e+01   3.5868702e+01
+   3.3900000e+01   1.9795959e+01   3.5873008e+01
+   3.3950000e+01   2.5103554e+00   3.4896107e+01
+   3.3950000e+01   2.5061901e+00   3.4902207e+01
+   3.3950000e+01   2.5121488e+00   3.4907306e+01
+   3.3950000e+01   2.5413554e+00   3.4914521e+01
+   3.3950000e+01   2.5794959e+00   3.4919405e+01
+   3.3950000e+01   2.6451405e+00   3.4928736e+01
+   3.3950000e+01   2.7416281e+00   3.4940488e+01
+   3.3950000e+01   2.8990331e+00   3.4952802e+01
+   3.3950000e+01   3.0880496e+00   3.4961322e+01
+   3.3950000e+01   3.3536529e+00   3.4973281e+01
+   3.3950000e+01   3.5827603e+00   3.4972736e+01
+   3.3950000e+01   3.8425455e+00   3.4984074e+01
+   3.3950000e+01   4.3142231e+00   3.5036645e+01
+   3.3950000e+01   5.2460165e+00   3.5170777e+01
+   3.3950000e+01   6.6648926e+00   3.5382711e+01
+   3.3950000e+01   8.2569008e+00   3.5621149e+01
+   3.3950000e+01   9.2870413e+00   3.5722876e+01
+   3.3950000e+01   9.5328760e+00   3.5630785e+01
+   3.3950000e+01   9.9026364e+00   3.5537066e+01
+   3.3950000e+01   1.0298083e+01   3.5480702e+01
+   3.3950000e+01   1.0770826e+01   3.5489091e+01
+   3.3950000e+01   1.1255678e+01   3.5531455e+01
+   3.3950000e+01   1.1602421e+01   3.5566000e+01
+   3.3950000e+01   1.1914041e+01   3.5601397e+01
+   3.3950000e+01   1.2147298e+01   3.5626901e+01
+   3.3950000e+01   1.2343058e+01   3.5648785e+01
+   3.3950000e+01   1.2494471e+01   3.5664835e+01
+   3.3950000e+01   1.2597438e+01   3.5676273e+01
+   3.3950000e+01   1.2688149e+01   3.5686380e+01
+   3.3950000e+01   1.2785116e+01   3.5697636e+01
+   3.3950000e+01   1.2848306e+01   3.5705074e+01
+   3.3950000e+01   1.2914322e+01   3.5711992e+01
+   3.3950000e+01   1.3001628e+01   3.5721826e+01
+   3.3950000e+01   1.3051289e+01   3.5725025e+01
+   3.3950000e+01   1.3089132e+01   3.5727711e+01
+   3.3950000e+01   1.3142140e+01   3.5735612e+01
+   3.3950000e+01   1.3179091e+01   3.5738893e+01
+   3.3950000e+01   1.3225289e+01   3.5744364e+01
+   3.3950000e+01   1.3285380e+01   3.5750000e+01
+   3.3950000e+01   1.3351380e+01   3.5760339e+01
+   3.3950000e+01   1.3413512e+01   3.5768570e+01
+   3.3950000e+01   1.3485198e+01   3.5776364e+01
+   3.3950000e+01   1.3539636e+01   3.5778083e+01
+   3.3950000e+01   1.3586083e+01   3.5781620e+01
+   3.3950000e+01   1.3649860e+01   3.5788785e+01
+   3.3950000e+01   1.3724041e+01   3.5795174e+01
+   3.3950000e+01   1.3795636e+01   3.5799347e+01
+   3.3950000e+01   1.3896884e+01   3.5810504e+01
+   3.3950000e+01   1.4007802e+01   3.5819636e+01
+   3.3950000e+01   1.4119207e+01   3.5823149e+01
+   3.3950000e+01   1.4275008e+01   3.5831579e+01
+   3.3950000e+01   1.4495909e+01   3.5833537e+01
+   3.3950000e+01   1.4732562e+01   3.5837397e+01
+   3.3950000e+01   1.4997446e+01   3.5833347e+01
+   3.3950000e+01   1.5706603e+01   3.5837281e+01
+   3.3950000e+01   1.6613545e+01   3.5844116e+01
+   3.3950000e+01   1.7261298e+01   3.5850289e+01
+   3.3950000e+01   1.8017446e+01   3.5853281e+01
+   3.3950000e+01   1.8879421e+01   3.5867727e+01
+   3.3950000e+01   1.9534612e+01   3.5871678e+01
+   3.3950000e+01   1.9774289e+01   3.5868719e+01
+   3.3950000e+01   1.9845992e+01   3.5868760e+01
+   3.3950000e+01   1.9857645e+01   3.5869248e+01
+   3.3950000e+01   1.9858744e+01   3.5869810e+01
+   3.3950000e+01   1.9851843e+01   3.5868702e+01
+   3.3950000e+01   1.9795959e+01   3.5873008e+01
+   3.4000000e+01   2.5103554e+00   3.4896107e+01
+   3.4000000e+01   2.5061901e+00   3.4902207e+01
+   3.4000000e+01   2.5121488e+00   3.4907306e+01
+   3.4000000e+01   2.5413554e+00   3.4914521e+01
+   3.4000000e+01   2.5794959e+00   3.4919405e+01
+   3.4000000e+01   2.6451405e+00   3.4928736e+01
+   3.4000000e+01   2.7416281e+00   3.4940488e+01
+   3.4000000e+01   2.8990331e+00   3.4952802e+01
+   3.4000000e+01   3.0880496e+00   3.4961322e+01
+   3.4000000e+01   3.3536529e+00   3.4973281e+01
+   3.4000000e+01   3.5827603e+00   3.4972736e+01
+   3.4000000e+01   3.8425455e+00   3.4984074e+01
+   3.4000000e+01   4.3142231e+00   3.5036645e+01
+   3.4000000e+01   5.2460165e+00   3.5170777e+01
+   3.4000000e+01   6.6648926e+00   3.5382711e+01
+   3.4000000e+01   8.2569008e+00   3.5621149e+01
+   3.4000000e+01   9.2870413e+00   3.5722876e+01
+   3.4000000e+01   9.5328760e+00   3.5630785e+01
+   3.4000000e+01   9.9026364e+00   3.5537066e+01
+   3.4000000e+01   1.0298083e+01   3.5480702e+01
+   3.4000000e+01   1.0770826e+01   3.5489091e+01
+   3.4000000e+01   1.1255678e+01   3.5531455e+01
+   3.4000000e+01   1.1602421e+01   3.5566000e+01
+   3.4000000e+01   1.1914041e+01   3.5601397e+01
+   3.4000000e+01   1.2147298e+01   3.5626901e+01
+   3.4000000e+01   1.2343058e+01   3.5648785e+01
+   3.4000000e+01   1.2494471e+01   3.5664835e+01
+   3.4000000e+01   1.2597438e+01   3.5676273e+01
+   3.4000000e+01   1.2688149e+01   3.5686380e+01
+   3.4000000e+01   1.2785116e+01   3.5697636e+01
+   3.4000000e+01   1.2848306e+01   3.5705074e+01
+   3.4000000e+01   1.2914322e+01   3.5711992e+01
+   3.4000000e+01   1.3001628e+01   3.5721826e+01
+   3.4000000e+01   1.3051289e+01   3.5725025e+01
+   3.4000000e+01   1.3089132e+01   3.5727711e+01
+   3.4000000e+01   1.3142140e+01   3.5735612e+01
+   3.4000000e+01   1.3179091e+01   3.5738893e+01
+   3.4000000e+01   1.3225289e+01   3.5744364e+01
+   3.4000000e+01   1.3285380e+01   3.5750000e+01
+   3.4000000e+01   1.3351380e+01   3.5760339e+01
+   3.4000000e+01   1.3413512e+01   3.5768570e+01
+   3.4000000e+01   1.3485198e+01   3.5776364e+01
+   3.4000000e+01   1.3539636e+01   3.5778083e+01
+   3.4000000e+01   1.3586083e+01   3.5781620e+01
+   3.4000000e+01   1.3649860e+01   3.5788785e+01
+   3.4000000e+01   1.3724041e+01   3.5795174e+01
+   3.4000000e+01   1.3795636e+01   3.5799347e+01
+   3.4000000e+01   1.3896884e+01   3.5810504e+01
+   3.4000000e+01   1.4007802e+01   3.5819636e+01
+   3.4000000e+01   1.4119207e+01   3.5823149e+01
+   3.4000000e+01   1.4275008e+01   3.5831579e+01
+   3.4000000e+01   1.4495909e+01   3.5833537e+01
+   3.4000000e+01   1.4732562e+01   3.5837397e+01
+   3.4000000e+01   1.4997446e+01   3.5833347e+01
+   3.4000000e+01   1.5706603e+01   3.5837281e+01
+   3.4000000e+01   1.6613545e+01   3.5844116e+01
+   3.4000000e+01   1.7261298e+01   3.5850289e+01
+   3.4000000e+01   1.8017446e+01   3.5853281e+01
+   3.4000000e+01   1.8879421e+01   3.5867727e+01
+   3.4000000e+01   1.9534612e+01   3.5871678e+01
+   3.4000000e+01   1.9774289e+01   3.5868719e+01
+   3.4000000e+01   1.9845992e+01   3.5868760e+01
+   3.4000000e+01   1.9857645e+01   3.5869248e+01
+   3.4000000e+01   1.9858744e+01   3.5869810e+01
+   3.4000000e+01   1.9851843e+01   3.5868702e+01
+   3.4000000e+01   1.9795959e+01   3.5873008e+01
+   3.4050000e+01   2.5103554e+00   3.4896107e+01
+   3.4050000e+01   2.5061901e+00   3.4902207e+01
+   3.4050000e+01   2.5121488e+00   3.4907306e+01
+   3.4050000e+01   2.5413554e+00   3.4914521e+01
+   3.4050000e+01   2.5794959e+00   3.4919405e+01
+   3.4050000e+01   2.6451405e+00   3.4928736e+01
+   3.4050000e+01   2.7416281e+00   3.4940488e+01
+   3.4050000e+01   2.8990331e+00   3.4952802e+01
+   3.4050000e+01   3.0880496e+00   3.4961322e+01
+   3.4050000e+01   3.3536529e+00   3.4973281e+01
+   3.4050000e+01   3.5827603e+00   3.4972736e+01
+   3.4050000e+01   3.8425455e+00   3.4984074e+01
+   3.4050000e+01   4.3142231e+00   3.5036645e+01
+   3.4050000e+01   5.2460165e+00   3.5170777e+01
+   3.4050000e+01   6.6648926e+00   3.5382711e+01
+   3.4050000e+01   8.2569008e+00   3.5621149e+01
+   3.4050000e+01   9.2870413e+00   3.5722876e+01
+   3.4050000e+01   9.5328760e+00   3.5630785e+01
+   3.4050000e+01   9.9026364e+00   3.5537066e+01
+   3.4050000e+01   1.0298083e+01   3.5480702e+01
+   3.4050000e+01   1.0770826e+01   3.5489091e+01
+   3.4050000e+01   1.1255678e+01   3.5531455e+01
+   3.4050000e+01   1.1602421e+01   3.5566000e+01
+   3.4050000e+01   1.1914041e+01   3.5601397e+01
+   3.4050000e+01   1.2147298e+01   3.5626901e+01
+   3.4050000e+01   1.2343058e+01   3.5648785e+01
+   3.4050000e+01   1.2494471e+01   3.5664835e+01
+   3.4050000e+01   1.2597438e+01   3.5676273e+01
+   3.4050000e+01   1.2688149e+01   3.5686380e+01
+   3.4050000e+01   1.2785116e+01   3.5697636e+01
+   3.4050000e+01   1.2848306e+01   3.5705074e+01
+   3.4050000e+01   1.2914322e+01   3.5711992e+01
+   3.4050000e+01   1.3001628e+01   3.5721826e+01
+   3.4050000e+01   1.3051289e+01   3.5725025e+01
+   3.4050000e+01   1.3089132e+01   3.5727711e+01
+   3.4050000e+01   1.3142140e+01   3.5735612e+01
+   3.4050000e+01   1.3179091e+01   3.5738893e+01
+   3.4050000e+01   1.3225289e+01   3.5744364e+01
+   3.4050000e+01   1.3285380e+01   3.5750000e+01
+   3.4050000e+01   1.3351380e+01   3.5760339e+01
+   3.4050000e+01   1.3413512e+01   3.5768570e+01
+   3.4050000e+01   1.3485198e+01   3.5776364e+01
+   3.4050000e+01   1.3539636e+01   3.5778083e+01
+   3.4050000e+01   1.3586083e+01   3.5781620e+01
+   3.4050000e+01   1.3649860e+01   3.5788785e+01
+   3.4050000e+01   1.3724041e+01   3.5795174e+01
+   3.4050000e+01   1.3795636e+01   3.5799347e+01
+   3.4050000e+01   1.3896884e+01   3.5810504e+01
+   3.4050000e+01   1.4007802e+01   3.5819636e+01
+   3.4050000e+01   1.4119207e+01   3.5823149e+01
+   3.4050000e+01   1.4275008e+01   3.5831579e+01
+   3.4050000e+01   1.4495909e+01   3.5833537e+01
+   3.4050000e+01   1.4732562e+01   3.5837397e+01
+   3.4050000e+01   1.4997446e+01   3.5833347e+01
+   3.4050000e+01   1.5706603e+01   3.5837281e+01
+   3.4050000e+01   1.6613545e+01   3.5844116e+01
+   3.4050000e+01   1.7261298e+01   3.5850289e+01
+   3.4050000e+01   1.8017446e+01   3.5853281e+01
+   3.4050000e+01   1.8879421e+01   3.5867727e+01
+   3.4050000e+01   1.9534612e+01   3.5871678e+01
+   3.4050000e+01   1.9774289e+01   3.5868719e+01
+   3.4050000e+01   1.9845992e+01   3.5868760e+01
+   3.4050000e+01   1.9857645e+01   3.5869248e+01
+   3.4050000e+01   1.9858744e+01   3.5869810e+01
+   3.4050000e+01   1.9851843e+01   3.5868702e+01
+   3.4050000e+01   1.9795959e+01   3.5873008e+01
+   3.4100000e+01   2.5103554e+00   3.4896107e+01
+   3.4100000e+01   2.5061901e+00   3.4902207e+01
+   3.4100000e+01   2.5121488e+00   3.4907306e+01
+   3.4100000e+01   2.5413554e+00   3.4914521e+01
+   3.4100000e+01   2.5794959e+00   3.4919405e+01
+   3.4100000e+01   2.6451405e+00   3.4928736e+01
+   3.4100000e+01   2.7416281e+00   3.4940488e+01
+   3.4100000e+01   2.8990331e+00   3.4952802e+01
+   3.4100000e+01   3.0880496e+00   3.4961322e+01
+   3.4100000e+01   3.3536529e+00   3.4973281e+01
+   3.4100000e+01   3.5827603e+00   3.4972736e+01
+   3.4100000e+01   3.8425455e+00   3.4984074e+01
+   3.4100000e+01   4.3142231e+00   3.5036645e+01
+   3.4100000e+01   5.2460165e+00   3.5170777e+01
+   3.4100000e+01   6.6648926e+00   3.5382711e+01
+   3.4100000e+01   8.2569008e+00   3.5621149e+01
+   3.4100000e+01   9.2870413e+00   3.5722876e+01
+   3.4100000e+01   9.5328760e+00   3.5630785e+01
+   3.4100000e+01   9.9026364e+00   3.5537066e+01
+   3.4100000e+01   1.0298083e+01   3.5480702e+01
+   3.4100000e+01   1.0770826e+01   3.5489091e+01
+   3.4100000e+01   1.1255678e+01   3.5531455e+01
+   3.4100000e+01   1.1602421e+01   3.5566000e+01
+   3.4100000e+01   1.1914041e+01   3.5601397e+01
+   3.4100000e+01   1.2147298e+01   3.5626901e+01
+   3.4100000e+01   1.2343058e+01   3.5648785e+01
+   3.4100000e+01   1.2494471e+01   3.5664835e+01
+   3.4100000e+01   1.2597438e+01   3.5676273e+01
+   3.4100000e+01   1.2688149e+01   3.5686380e+01
+   3.4100000e+01   1.2785116e+01   3.5697636e+01
+   3.4100000e+01   1.2848306e+01   3.5705074e+01
+   3.4100000e+01   1.2914322e+01   3.5711992e+01
+   3.4100000e+01   1.3001628e+01   3.5721826e+01
+   3.4100000e+01   1.3051289e+01   3.5725025e+01
+   3.4100000e+01   1.3089132e+01   3.5727711e+01
+   3.4100000e+01   1.3142140e+01   3.5735612e+01
+   3.4100000e+01   1.3179091e+01   3.5738893e+01
+   3.4100000e+01   1.3225289e+01   3.5744364e+01
+   3.4100000e+01   1.3285380e+01   3.5750000e+01
+   3.4100000e+01   1.3351380e+01   3.5760339e+01
+   3.4100000e+01   1.3413512e+01   3.5768570e+01
+   3.4100000e+01   1.3485198e+01   3.5776364e+01
+   3.4100000e+01   1.3539636e+01   3.5778083e+01
+   3.4100000e+01   1.3586083e+01   3.5781620e+01
+   3.4100000e+01   1.3649860e+01   3.5788785e+01
+   3.4100000e+01   1.3724041e+01   3.5795174e+01
+   3.4100000e+01   1.3795636e+01   3.5799347e+01
+   3.4100000e+01   1.3896884e+01   3.5810504e+01
+   3.4100000e+01   1.4007802e+01   3.5819636e+01
+   3.4100000e+01   1.4119207e+01   3.5823149e+01
+   3.4100000e+01   1.4275008e+01   3.5831579e+01
+   3.4100000e+01   1.4495909e+01   3.5833537e+01
+   3.4100000e+01   1.4732562e+01   3.5837397e+01
+   3.4100000e+01   1.4997446e+01   3.5833347e+01
+   3.4100000e+01   1.5706603e+01   3.5837281e+01
+   3.4100000e+01   1.6613545e+01   3.5844116e+01
+   3.4100000e+01   1.7261298e+01   3.5850289e+01
+   3.4100000e+01   1.8017446e+01   3.5853281e+01
+   3.4100000e+01   1.8879421e+01   3.5867727e+01
+   3.4100000e+01   1.9534612e+01   3.5871678e+01
+   3.4100000e+01   1.9774289e+01   3.5868719e+01
+   3.4100000e+01   1.9845992e+01   3.5868760e+01
+   3.4100000e+01   1.9857645e+01   3.5869248e+01
+   3.4100000e+01   1.9858744e+01   3.5869810e+01
+   3.4100000e+01   1.9851843e+01   3.5868702e+01
+   3.4100000e+01   1.9795959e+01   3.5873008e+01
+   3.4150000e+01   2.5103554e+00   3.4896107e+01
+   3.4150000e+01   2.5061901e+00   3.4902207e+01
+   3.4150000e+01   2.5121488e+00   3.4907306e+01
+   3.4150000e+01   2.5413554e+00   3.4914521e+01
+   3.4150000e+01   2.5794959e+00   3.4919405e+01
+   3.4150000e+01   2.6451405e+00   3.4928736e+01
+   3.4150000e+01   2.7416281e+00   3.4940488e+01
+   3.4150000e+01   2.8990331e+00   3.4952802e+01
+   3.4150000e+01   3.0880496e+00   3.4961322e+01
+   3.4150000e+01   3.3536529e+00   3.4973281e+01
+   3.4150000e+01   3.5827603e+00   3.4972736e+01
+   3.4150000e+01   3.8425455e+00   3.4984074e+01
+   3.4150000e+01   4.3142231e+00   3.5036645e+01
+   3.4150000e+01   5.2460165e+00   3.5170777e+01
+   3.4150000e+01   6.6648926e+00   3.5382711e+01
+   3.4150000e+01   8.2569008e+00   3.5621149e+01
+   3.4150000e+01   9.2870413e+00   3.5722876e+01
+   3.4150000e+01   9.5328760e+00   3.5630785e+01
+   3.4150000e+01   9.9026364e+00   3.5537066e+01
+   3.4150000e+01   1.0298083e+01   3.5480702e+01
+   3.4150000e+01   1.0770826e+01   3.5489091e+01
+   3.4150000e+01   1.1255678e+01   3.5531455e+01
+   3.4150000e+01   1.1602421e+01   3.5566000e+01
+   3.4150000e+01   1.1914041e+01   3.5601397e+01
+   3.4150000e+01   1.2147298e+01   3.5626901e+01
+   3.4150000e+01   1.2343058e+01   3.5648785e+01
+   3.4150000e+01   1.2494471e+01   3.5664835e+01
+   3.4150000e+01   1.2597438e+01   3.5676273e+01
+   3.4150000e+01   1.2688149e+01   3.5686380e+01
+   3.4150000e+01   1.2785116e+01   3.5697636e+01
+   3.4150000e+01   1.2848306e+01   3.5705074e+01
+   3.4150000e+01   1.2914322e+01   3.5711992e+01
+   3.4150000e+01   1.3001628e+01   3.5721826e+01
+   3.4150000e+01   1.3051289e+01   3.5725025e+01
+   3.4150000e+01   1.3089132e+01   3.5727711e+01
+   3.4150000e+01   1.3142140e+01   3.5735612e+01
+   3.4150000e+01   1.3179091e+01   3.5738893e+01
+   3.4150000e+01   1.3225289e+01   3.5744364e+01
+   3.4150000e+01   1.3285380e+01   3.5750000e+01
+   3.4150000e+01   1.3351380e+01   3.5760339e+01
+   3.4150000e+01   1.3413512e+01   3.5768570e+01
+   3.4150000e+01   1.3485198e+01   3.5776364e+01
+   3.4150000e+01   1.3539636e+01   3.5778083e+01
+   3.4150000e+01   1.3586083e+01   3.5781620e+01
+   3.4150000e+01   1.3649860e+01   3.5788785e+01
+   3.4150000e+01   1.3724041e+01   3.5795174e+01
+   3.4150000e+01   1.3795636e+01   3.5799347e+01
+   3.4150000e+01   1.3896884e+01   3.5810504e+01
+   3.4150000e+01   1.4007802e+01   3.5819636e+01
+   3.4150000e+01   1.4119207e+01   3.5823149e+01
+   3.4150000e+01   1.4275008e+01   3.5831579e+01
+   3.4150000e+01   1.4495909e+01   3.5833537e+01
+   3.4150000e+01   1.4732562e+01   3.5837397e+01
+   3.4150000e+01   1.4997446e+01   3.5833347e+01
+   3.4150000e+01   1.5706603e+01   3.5837281e+01
+   3.4150000e+01   1.6613545e+01   3.5844116e+01
+   3.4150000e+01   1.7261298e+01   3.5850289e+01
+   3.4150000e+01   1.8017446e+01   3.5853281e+01
+   3.4150000e+01   1.8879421e+01   3.5867727e+01
+   3.4150000e+01   1.9534612e+01   3.5871678e+01
+   3.4150000e+01   1.9774289e+01   3.5868719e+01
+   3.4150000e+01   1.9845992e+01   3.5868760e+01
+   3.4150000e+01   1.9857645e+01   3.5869248e+01
+   3.4150000e+01   1.9858744e+01   3.5869810e+01
+   3.4150000e+01   1.9851843e+01   3.5868702e+01
+   3.4150000e+01   1.9795959e+01   3.5873008e+01
+   3.4200000e+01   2.5103554e+00   3.4896107e+01
+   3.4200000e+01   2.5061901e+00   3.4902207e+01
+   3.4200000e+01   2.5121488e+00   3.4907306e+01
+   3.4200000e+01   2.5413554e+00   3.4914521e+01
+   3.4200000e+01   2.5794959e+00   3.4919405e+01
+   3.4200000e+01   2.6451405e+00   3.4928736e+01
+   3.4200000e+01   2.7416281e+00   3.4940488e+01
+   3.4200000e+01   2.8990331e+00   3.4952802e+01
+   3.4200000e+01   3.0880496e+00   3.4961322e+01
+   3.4200000e+01   3.3536529e+00   3.4973281e+01
+   3.4200000e+01   3.5827603e+00   3.4972736e+01
+   3.4200000e+01   3.8425455e+00   3.4984074e+01
+   3.4200000e+01   4.3142231e+00   3.5036645e+01
+   3.4200000e+01   5.2460165e+00   3.5170777e+01
+   3.4200000e+01   6.6648926e+00   3.5382711e+01
+   3.4200000e+01   8.2569008e+00   3.5621149e+01
+   3.4200000e+01   9.2870413e+00   3.5722876e+01
+   3.4200000e+01   9.5328760e+00   3.5630785e+01
+   3.4200000e+01   9.9026364e+00   3.5537066e+01
+   3.4200000e+01   1.0298083e+01   3.5480702e+01
+   3.4200000e+01   1.0770826e+01   3.5489091e+01
+   3.4200000e+01   1.1255678e+01   3.5531455e+01
+   3.4200000e+01   1.1602421e+01   3.5566000e+01
+   3.4200000e+01   1.1914041e+01   3.5601397e+01
+   3.4200000e+01   1.2147298e+01   3.5626901e+01
+   3.4200000e+01   1.2343058e+01   3.5648785e+01
+   3.4200000e+01   1.2494471e+01   3.5664835e+01
+   3.4200000e+01   1.2597438e+01   3.5676273e+01
+   3.4200000e+01   1.2688149e+01   3.5686380e+01
+   3.4200000e+01   1.2785116e+01   3.5697636e+01
+   3.4200000e+01   1.2848306e+01   3.5705074e+01
+   3.4200000e+01   1.2914322e+01   3.5711992e+01
+   3.4200000e+01   1.3001628e+01   3.5721826e+01
+   3.4200000e+01   1.3051289e+01   3.5725025e+01
+   3.4200000e+01   1.3089132e+01   3.5727711e+01
+   3.4200000e+01   1.3142140e+01   3.5735612e+01
+   3.4200000e+01   1.3179091e+01   3.5738893e+01
+   3.4200000e+01   1.3225289e+01   3.5744364e+01
+   3.4200000e+01   1.3285380e+01   3.5750000e+01
+   3.4200000e+01   1.3351380e+01   3.5760339e+01
+   3.4200000e+01   1.3413512e+01   3.5768570e+01
+   3.4200000e+01   1.3485198e+01   3.5776364e+01
+   3.4200000e+01   1.3539636e+01   3.5778083e+01
+   3.4200000e+01   1.3586083e+01   3.5781620e+01
+   3.4200000e+01   1.3649860e+01   3.5788785e+01
+   3.4200000e+01   1.3724041e+01   3.5795174e+01
+   3.4200000e+01   1.3795636e+01   3.5799347e+01
+   3.4200000e+01   1.3896884e+01   3.5810504e+01
+   3.4200000e+01   1.4007802e+01   3.5819636e+01
+   3.4200000e+01   1.4119207e+01   3.5823149e+01
+   3.4200000e+01   1.4275008e+01   3.5831579e+01
+   3.4200000e+01   1.4495909e+01   3.5833537e+01
+   3.4200000e+01   1.4732562e+01   3.5837397e+01
+   3.4200000e+01   1.4997446e+01   3.5833347e+01
+   3.4200000e+01   1.5706603e+01   3.5837281e+01
+   3.4200000e+01   1.6613545e+01   3.5844116e+01
+   3.4200000e+01   1.7261298e+01   3.5850289e+01
+   3.4200000e+01   1.8017446e+01   3.5853281e+01
+   3.4200000e+01   1.8879421e+01   3.5867727e+01
+   3.4200000e+01   1.9534612e+01   3.5871678e+01
+   3.4200000e+01   1.9774289e+01   3.5868719e+01
+   3.4200000e+01   1.9845992e+01   3.5868760e+01
+   3.4200000e+01   1.9857645e+01   3.5869248e+01
+   3.4200000e+01   1.9858744e+01   3.5869810e+01
+   3.4200000e+01   1.9851843e+01   3.5868702e+01
+   3.4200000e+01   1.9795959e+01   3.5873008e+01
+   3.4250000e+01   2.5103554e+00   3.4896107e+01
+   3.4250000e+01   2.5061901e+00   3.4902207e+01
+   3.4250000e+01   2.5121488e+00   3.4907306e+01
+   3.4250000e+01   2.5413554e+00   3.4914521e+01
+   3.4250000e+01   2.5794959e+00   3.4919405e+01
+   3.4250000e+01   2.6451405e+00   3.4928736e+01
+   3.4250000e+01   2.7416281e+00   3.4940488e+01
+   3.4250000e+01   2.8990331e+00   3.4952802e+01
+   3.4250000e+01   3.0880496e+00   3.4961322e+01
+   3.4250000e+01   3.3536529e+00   3.4973281e+01
+   3.4250000e+01   3.5827603e+00   3.4972736e+01
+   3.4250000e+01   3.8425455e+00   3.4984074e+01
+   3.4250000e+01   4.3142231e+00   3.5036645e+01
+   3.4250000e+01   5.2460165e+00   3.5170777e+01
+   3.4250000e+01   6.6648926e+00   3.5382711e+01
+   3.4250000e+01   8.2569008e+00   3.5621149e+01
+   3.4250000e+01   9.2870413e+00   3.5722876e+01
+   3.4250000e+01   9.5328760e+00   3.5630785e+01
+   3.4250000e+01   9.9026364e+00   3.5537066e+01
+   3.4250000e+01   1.0298083e+01   3.5480702e+01
+   3.4250000e+01   1.0770826e+01   3.5489091e+01
+   3.4250000e+01   1.1255678e+01   3.5531455e+01
+   3.4250000e+01   1.1602421e+01   3.5566000e+01
+   3.4250000e+01   1.1914041e+01   3.5601397e+01
+   3.4250000e+01   1.2147298e+01   3.5626901e+01
+   3.4250000e+01   1.2343058e+01   3.5648785e+01
+   3.4250000e+01   1.2494471e+01   3.5664835e+01
+   3.4250000e+01   1.2597438e+01   3.5676273e+01
+   3.4250000e+01   1.2688149e+01   3.5686380e+01
+   3.4250000e+01   1.2785116e+01   3.5697636e+01
+   3.4250000e+01   1.2848306e+01   3.5705074e+01
+   3.4250000e+01   1.2914322e+01   3.5711992e+01
+   3.4250000e+01   1.3001628e+01   3.5721826e+01
+   3.4250000e+01   1.3051289e+01   3.5725025e+01
+   3.4250000e+01   1.3089132e+01   3.5727711e+01
+   3.4250000e+01   1.3142140e+01   3.5735612e+01
+   3.4250000e+01   1.3179091e+01   3.5738893e+01
+   3.4250000e+01   1.3225289e+01   3.5744364e+01
+   3.4250000e+01   1.3285380e+01   3.5750000e+01
+   3.4250000e+01   1.3351380e+01   3.5760339e+01
+   3.4250000e+01   1.3413512e+01   3.5768570e+01
+   3.4250000e+01   1.3485198e+01   3.5776364e+01
+   3.4250000e+01   1.3539636e+01   3.5778083e+01
+   3.4250000e+01   1.3586083e+01   3.5781620e+01
+   3.4250000e+01   1.3649860e+01   3.5788785e+01
+   3.4250000e+01   1.3724041e+01   3.5795174e+01
+   3.4250000e+01   1.3795636e+01   3.5799347e+01
+   3.4250000e+01   1.3896884e+01   3.5810504e+01
+   3.4250000e+01   1.4007802e+01   3.5819636e+01
+   3.4250000e+01   1.4119207e+01   3.5823149e+01
+   3.4250000e+01   1.4275008e+01   3.5831579e+01
+   3.4250000e+01   1.4495909e+01   3.5833537e+01
+   3.4250000e+01   1.4732562e+01   3.5837397e+01
+   3.4250000e+01   1.4997446e+01   3.5833347e+01
+   3.4250000e+01   1.5706603e+01   3.5837281e+01
+   3.4250000e+01   1.6613545e+01   3.5844116e+01
+   3.4250000e+01   1.7261298e+01   3.5850289e+01
+   3.4250000e+01   1.8017446e+01   3.5853281e+01
+   3.4250000e+01   1.8879421e+01   3.5867727e+01
+   3.4250000e+01   1.9534612e+01   3.5871678e+01
+   3.4250000e+01   1.9774289e+01   3.5868719e+01
+   3.4250000e+01   1.9845992e+01   3.5868760e+01
+   3.4250000e+01   1.9857645e+01   3.5869248e+01
+   3.4250000e+01   1.9858744e+01   3.5869810e+01
+   3.4250000e+01   1.9851843e+01   3.5868702e+01
+   3.4250000e+01   1.9795959e+01   3.5873008e+01
+   3.4300000e+01   2.5103554e+00   3.4896107e+01
+   3.4300000e+01   2.5061901e+00   3.4902207e+01
+   3.4300000e+01   2.5121488e+00   3.4907306e+01
+   3.4300000e+01   2.5413554e+00   3.4914521e+01
+   3.4300000e+01   2.5794959e+00   3.4919405e+01
+   3.4300000e+01   2.6451405e+00   3.4928736e+01
+   3.4300000e+01   2.7416281e+00   3.4940488e+01
+   3.4300000e+01   2.8990331e+00   3.4952802e+01
+   3.4300000e+01   3.0880496e+00   3.4961322e+01
+   3.4300000e+01   3.3536529e+00   3.4973281e+01
+   3.4300000e+01   3.5827603e+00   3.4972736e+01
+   3.4300000e+01   3.8425455e+00   3.4984074e+01
+   3.4300000e+01   4.3142231e+00   3.5036645e+01
+   3.4300000e+01   5.2460165e+00   3.5170777e+01
+   3.4300000e+01   6.6648926e+00   3.5382711e+01
+   3.4300000e+01   8.2569008e+00   3.5621149e+01
+   3.4300000e+01   9.2870413e+00   3.5722876e+01
+   3.4300000e+01   9.5328760e+00   3.5630785e+01
+   3.4300000e+01   9.9026364e+00   3.5537066e+01
+   3.4300000e+01   1.0298083e+01   3.5480702e+01
+   3.4300000e+01   1.0770826e+01   3.5489091e+01
+   3.4300000e+01   1.1255678e+01   3.5531455e+01
+   3.4300000e+01   1.1602421e+01   3.5566000e+01
+   3.4300000e+01   1.1914041e+01   3.5601397e+01
+   3.4300000e+01   1.2147298e+01   3.5626901e+01
+   3.4300000e+01   1.2343058e+01   3.5648785e+01
+   3.4300000e+01   1.2494471e+01   3.5664835e+01
+   3.4300000e+01   1.2597438e+01   3.5676273e+01
+   3.4300000e+01   1.2688149e+01   3.5686380e+01
+   3.4300000e+01   1.2785116e+01   3.5697636e+01
+   3.4300000e+01   1.2848306e+01   3.5705074e+01
+   3.4300000e+01   1.2914322e+01   3.5711992e+01
+   3.4300000e+01   1.3001628e+01   3.5721826e+01
+   3.4300000e+01   1.3051289e+01   3.5725025e+01
+   3.4300000e+01   1.3089132e+01   3.5727711e+01
+   3.4300000e+01   1.3142140e+01   3.5735612e+01
+   3.4300000e+01   1.3179091e+01   3.5738893e+01
+   3.4300000e+01   1.3225289e+01   3.5744364e+01
+   3.4300000e+01   1.3285380e+01   3.5750000e+01
+   3.4300000e+01   1.3351380e+01   3.5760339e+01
+   3.4300000e+01   1.3413512e+01   3.5768570e+01
+   3.4300000e+01   1.3485198e+01   3.5776364e+01
+   3.4300000e+01   1.3539636e+01   3.5778083e+01
+   3.4300000e+01   1.3586083e+01   3.5781620e+01
+   3.4300000e+01   1.3649860e+01   3.5788785e+01
+   3.4300000e+01   1.3724041e+01   3.5795174e+01
+   3.4300000e+01   1.3795636e+01   3.5799347e+01
+   3.4300000e+01   1.3896884e+01   3.5810504e+01
+   3.4300000e+01   1.4007802e+01   3.5819636e+01
+   3.4300000e+01   1.4119207e+01   3.5823149e+01
+   3.4300000e+01   1.4275008e+01   3.5831579e+01
+   3.4300000e+01   1.4495909e+01   3.5833537e+01
+   3.4300000e+01   1.4732562e+01   3.5837397e+01
+   3.4300000e+01   1.4997446e+01   3.5833347e+01
+   3.4300000e+01   1.5706603e+01   3.5837281e+01
+   3.4300000e+01   1.6613545e+01   3.5844116e+01
+   3.4300000e+01   1.7261298e+01   3.5850289e+01
+   3.4300000e+01   1.8017446e+01   3.5853281e+01
+   3.4300000e+01   1.8879421e+01   3.5867727e+01
+   3.4300000e+01   1.9534612e+01   3.5871678e+01
+   3.4300000e+01   1.9774289e+01   3.5868719e+01
+   3.4300000e+01   1.9845992e+01   3.5868760e+01
+   3.4300000e+01   1.9857645e+01   3.5869248e+01
+   3.4300000e+01   1.9858744e+01   3.5869810e+01
+   3.4300000e+01   1.9851843e+01   3.5868702e+01
+   3.4300000e+01   1.9795959e+01   3.5873008e+01
+   3.4350000e+01   2.5103554e+00   3.4896107e+01
+   3.4350000e+01   2.5061901e+00   3.4902207e+01
+   3.4350000e+01   2.5121488e+00   3.4907306e+01
+   3.4350000e+01   2.5413554e+00   3.4914521e+01
+   3.4350000e+01   2.5794959e+00   3.4919405e+01
+   3.4350000e+01   2.6451405e+00   3.4928736e+01
+   3.4350000e+01   2.7416281e+00   3.4940488e+01
+   3.4350000e+01   2.8990331e+00   3.4952802e+01
+   3.4350000e+01   3.0880496e+00   3.4961322e+01
+   3.4350000e+01   3.3536529e+00   3.4973281e+01
+   3.4350000e+01   3.5827603e+00   3.4972736e+01
+   3.4350000e+01   3.8425455e+00   3.4984074e+01
+   3.4350000e+01   4.3142231e+00   3.5036645e+01
+   3.4350000e+01   5.2460165e+00   3.5170777e+01
+   3.4350000e+01   6.6648926e+00   3.5382711e+01
+   3.4350000e+01   8.2569008e+00   3.5621149e+01
+   3.4350000e+01   9.2870413e+00   3.5722876e+01
+   3.4350000e+01   9.5328760e+00   3.5630785e+01
+   3.4350000e+01   9.9026364e+00   3.5537066e+01
+   3.4350000e+01   1.0298083e+01   3.5480702e+01
+   3.4350000e+01   1.0770826e+01   3.5489091e+01
+   3.4350000e+01   1.1255678e+01   3.5531455e+01
+   3.4350000e+01   1.1602421e+01   3.5566000e+01
+   3.4350000e+01   1.1914041e+01   3.5601397e+01
+   3.4350000e+01   1.2147298e+01   3.5626901e+01
+   3.4350000e+01   1.2343058e+01   3.5648785e+01
+   3.4350000e+01   1.2494471e+01   3.5664835e+01
+   3.4350000e+01   1.2597438e+01   3.5676273e+01
+   3.4350000e+01   1.2688149e+01   3.5686380e+01
+   3.4350000e+01   1.2785116e+01   3.5697636e+01
+   3.4350000e+01   1.2848306e+01   3.5705074e+01
+   3.4350000e+01   1.2914322e+01   3.5711992e+01
+   3.4350000e+01   1.3001628e+01   3.5721826e+01
+   3.4350000e+01   1.3051289e+01   3.5725025e+01
+   3.4350000e+01   1.3089132e+01   3.5727711e+01
+   3.4350000e+01   1.3142140e+01   3.5735612e+01
+   3.4350000e+01   1.3179091e+01   3.5738893e+01
+   3.4350000e+01   1.3225289e+01   3.5744364e+01
+   3.4350000e+01   1.3285380e+01   3.5750000e+01
+   3.4350000e+01   1.3351380e+01   3.5760339e+01
+   3.4350000e+01   1.3413512e+01   3.5768570e+01
+   3.4350000e+01   1.3485198e+01   3.5776364e+01
+   3.4350000e+01   1.3539636e+01   3.5778083e+01
+   3.4350000e+01   1.3586083e+01   3.5781620e+01
+   3.4350000e+01   1.3649860e+01   3.5788785e+01
+   3.4350000e+01   1.3724041e+01   3.5795174e+01
+   3.4350000e+01   1.3795636e+01   3.5799347e+01
+   3.4350000e+01   1.3896884e+01   3.5810504e+01
+   3.4350000e+01   1.4007802e+01   3.5819636e+01
+   3.4350000e+01   1.4119207e+01   3.5823149e+01
+   3.4350000e+01   1.4275008e+01   3.5831579e+01
+   3.4350000e+01   1.4495909e+01   3.5833537e+01
+   3.4350000e+01   1.4732562e+01   3.5837397e+01
+   3.4350000e+01   1.4997446e+01   3.5833347e+01
+   3.4350000e+01   1.5706603e+01   3.5837281e+01
+   3.4350000e+01   1.6613545e+01   3.5844116e+01
+   3.4350000e+01   1.7261298e+01   3.5850289e+01
+   3.4350000e+01   1.8017446e+01   3.5853281e+01
+   3.4350000e+01   1.8879421e+01   3.5867727e+01
+   3.4350000e+01   1.9534612e+01   3.5871678e+01
+   3.4350000e+01   1.9774289e+01   3.5868719e+01
+   3.4350000e+01   1.9845992e+01   3.5868760e+01
+   3.4350000e+01   1.9857645e+01   3.5869248e+01
+   3.4350000e+01   1.9858744e+01   3.5869810e+01
+   3.4350000e+01   1.9851843e+01   3.5868702e+01
+   3.4350000e+01   1.9795959e+01   3.5873008e+01
+   3.4400000e+01   2.5103554e+00   3.4896107e+01
+   3.4400000e+01   2.5061901e+00   3.4902207e+01
+   3.4400000e+01   2.5121488e+00   3.4907306e+01
+   3.4400000e+01   2.5413554e+00   3.4914521e+01
+   3.4400000e+01   2.5794959e+00   3.4919405e+01
+   3.4400000e+01   2.6451405e+00   3.4928736e+01
+   3.4400000e+01   2.7416281e+00   3.4940488e+01
+   3.4400000e+01   2.8990331e+00   3.4952802e+01
+   3.4400000e+01   3.0880496e+00   3.4961322e+01
+   3.4400000e+01   3.3536529e+00   3.4973281e+01
+   3.4400000e+01   3.5827603e+00   3.4972736e+01
+   3.4400000e+01   3.8425455e+00   3.4984074e+01
+   3.4400000e+01   4.3142231e+00   3.5036645e+01
+   3.4400000e+01   5.2460165e+00   3.5170777e+01
+   3.4400000e+01   6.6648926e+00   3.5382711e+01
+   3.4400000e+01   8.2569008e+00   3.5621149e+01
+   3.4400000e+01   9.2870413e+00   3.5722876e+01
+   3.4400000e+01   9.5328760e+00   3.5630785e+01
+   3.4400000e+01   9.9026364e+00   3.5537066e+01
+   3.4400000e+01   1.0298083e+01   3.5480702e+01
+   3.4400000e+01   1.0770826e+01   3.5489091e+01
+   3.4400000e+01   1.1255678e+01   3.5531455e+01
+   3.4400000e+01   1.1602421e+01   3.5566000e+01
+   3.4400000e+01   1.1914041e+01   3.5601397e+01
+   3.4400000e+01   1.2147298e+01   3.5626901e+01
+   3.4400000e+01   1.2343058e+01   3.5648785e+01
+   3.4400000e+01   1.2494471e+01   3.5664835e+01
+   3.4400000e+01   1.2597438e+01   3.5676273e+01
+   3.4400000e+01   1.2688149e+01   3.5686380e+01
+   3.4400000e+01   1.2785116e+01   3.5697636e+01
+   3.4400000e+01   1.2848306e+01   3.5705074e+01
+   3.4400000e+01   1.2914322e+01   3.5711992e+01
+   3.4400000e+01   1.3001628e+01   3.5721826e+01
+   3.4400000e+01   1.3051289e+01   3.5725025e+01
+   3.4400000e+01   1.3089132e+01   3.5727711e+01
+   3.4400000e+01   1.3142140e+01   3.5735612e+01
+   3.4400000e+01   1.3179091e+01   3.5738893e+01
+   3.4400000e+01   1.3225289e+01   3.5744364e+01
+   3.4400000e+01   1.3285380e+01   3.5750000e+01
+   3.4400000e+01   1.3351380e+01   3.5760339e+01
+   3.4400000e+01   1.3413512e+01   3.5768570e+01
+   3.4400000e+01   1.3485198e+01   3.5776364e+01
+   3.4400000e+01   1.3539636e+01   3.5778083e+01
+   3.4400000e+01   1.3586083e+01   3.5781620e+01
+   3.4400000e+01   1.3649860e+01   3.5788785e+01
+   3.4400000e+01   1.3724041e+01   3.5795174e+01
+   3.4400000e+01   1.3795636e+01   3.5799347e+01
+   3.4400000e+01   1.3896884e+01   3.5810504e+01
+   3.4400000e+01   1.4007802e+01   3.5819636e+01
+   3.4400000e+01   1.4119207e+01   3.5823149e+01
+   3.4400000e+01   1.4275008e+01   3.5831579e+01
+   3.4400000e+01   1.4495909e+01   3.5833537e+01
+   3.4400000e+01   1.4732562e+01   3.5837397e+01
+   3.4400000e+01   1.4997446e+01   3.5833347e+01
+   3.4400000e+01   1.5706603e+01   3.5837281e+01
+   3.4400000e+01   1.6613545e+01   3.5844116e+01
+   3.4400000e+01   1.7261298e+01   3.5850289e+01
+   3.4400000e+01   1.8017446e+01   3.5853281e+01
+   3.4400000e+01   1.8879421e+01   3.5867727e+01
+   3.4400000e+01   1.9534612e+01   3.5871678e+01
+   3.4400000e+01   1.9774289e+01   3.5868719e+01
+   3.4400000e+01   1.9845992e+01   3.5868760e+01
+   3.4400000e+01   1.9857645e+01   3.5869248e+01
+   3.4400000e+01   1.9858744e+01   3.5869810e+01
+   3.4400000e+01   1.9851843e+01   3.5868702e+01
+   3.4400000e+01   1.9795959e+01   3.5873008e+01
+   3.4450000e+01   2.5103554e+00   3.4896107e+01
+   3.4450000e+01   2.5061901e+00   3.4902207e+01
+   3.4450000e+01   2.5121488e+00   3.4907306e+01
+   3.4450000e+01   2.5413554e+00   3.4914521e+01
+   3.4450000e+01   2.5794959e+00   3.4919405e+01
+   3.4450000e+01   2.6451405e+00   3.4928736e+01
+   3.4450000e+01   2.7416281e+00   3.4940488e+01
+   3.4450000e+01   2.8990331e+00   3.4952802e+01
+   3.4450000e+01   3.0880496e+00   3.4961322e+01
+   3.4450000e+01   3.3536529e+00   3.4973281e+01
+   3.4450000e+01   3.5827603e+00   3.4972736e+01
+   3.4450000e+01   3.8425455e+00   3.4984074e+01
+   3.4450000e+01   4.3142231e+00   3.5036645e+01
+   3.4450000e+01   5.2460165e+00   3.5170777e+01
+   3.4450000e+01   6.6648926e+00   3.5382711e+01
+   3.4450000e+01   8.2569008e+00   3.5621149e+01
+   3.4450000e+01   9.2870413e+00   3.5722876e+01
+   3.4450000e+01   9.5328760e+00   3.5630785e+01
+   3.4450000e+01   9.9026364e+00   3.5537066e+01
+   3.4450000e+01   1.0298083e+01   3.5480702e+01
+   3.4450000e+01   1.0770826e+01   3.5489091e+01
+   3.4450000e+01   1.1255678e+01   3.5531455e+01
+   3.4450000e+01   1.1602421e+01   3.5566000e+01
+   3.4450000e+01   1.1914041e+01   3.5601397e+01
+   3.4450000e+01   1.2147298e+01   3.5626901e+01
+   3.4450000e+01   1.2343058e+01   3.5648785e+01
+   3.4450000e+01   1.2494471e+01   3.5664835e+01
+   3.4450000e+01   1.2597438e+01   3.5676273e+01
+   3.4450000e+01   1.2688149e+01   3.5686380e+01
+   3.4450000e+01   1.2785116e+01   3.5697636e+01
+   3.4450000e+01   1.2848306e+01   3.5705074e+01
+   3.4450000e+01   1.2914322e+01   3.5711992e+01
+   3.4450000e+01   1.3001628e+01   3.5721826e+01
+   3.4450000e+01   1.3051289e+01   3.5725025e+01
+   3.4450000e+01   1.3089132e+01   3.5727711e+01
+   3.4450000e+01   1.3142140e+01   3.5735612e+01
+   3.4450000e+01   1.3179091e+01   3.5738893e+01
+   3.4450000e+01   1.3225289e+01   3.5744364e+01
+   3.4450000e+01   1.3285380e+01   3.5750000e+01
+   3.4450000e+01   1.3351380e+01   3.5760339e+01
+   3.4450000e+01   1.3413512e+01   3.5768570e+01
+   3.4450000e+01   1.3485198e+01   3.5776364e+01
+   3.4450000e+01   1.3539636e+01   3.5778083e+01
+   3.4450000e+01   1.3586083e+01   3.5781620e+01
+   3.4450000e+01   1.3649860e+01   3.5788785e+01
+   3.4450000e+01   1.3724041e+01   3.5795174e+01
+   3.4450000e+01   1.3795636e+01   3.5799347e+01
+   3.4450000e+01   1.3896884e+01   3.5810504e+01
+   3.4450000e+01   1.4007802e+01   3.5819636e+01
+   3.4450000e+01   1.4119207e+01   3.5823149e+01
+   3.4450000e+01   1.4275008e+01   3.5831579e+01
+   3.4450000e+01   1.4495909e+01   3.5833537e+01
+   3.4450000e+01   1.4732562e+01   3.5837397e+01
+   3.4450000e+01   1.4997446e+01   3.5833347e+01
+   3.4450000e+01   1.5706603e+01   3.5837281e+01
+   3.4450000e+01   1.6613545e+01   3.5844116e+01
+   3.4450000e+01   1.7261298e+01   3.5850289e+01
+   3.4450000e+01   1.8017446e+01   3.5853281e+01
+   3.4450000e+01   1.8879421e+01   3.5867727e+01
+   3.4450000e+01   1.9534612e+01   3.5871678e+01
+   3.4450000e+01   1.9774289e+01   3.5868719e+01
+   3.4450000e+01   1.9845992e+01   3.5868760e+01
+   3.4450000e+01   1.9857645e+01   3.5869248e+01
+   3.4450000e+01   1.9858744e+01   3.5869810e+01
+   3.4450000e+01   1.9851843e+01   3.5868702e+01
+   3.4450000e+01   1.9795959e+01   3.5873008e+01
+   3.4500000e+01   2.5103554e+00   3.4896107e+01
+   3.4500000e+01   2.5061901e+00   3.4902207e+01
+   3.4500000e+01   2.5121488e+00   3.4907306e+01
+   3.4500000e+01   2.5413554e+00   3.4914521e+01
+   3.4500000e+01   2.5794959e+00   3.4919405e+01
+   3.4500000e+01   2.6451405e+00   3.4928736e+01
+   3.4500000e+01   2.7416281e+00   3.4940488e+01
+   3.4500000e+01   2.8990331e+00   3.4952802e+01
+   3.4500000e+01   3.0880496e+00   3.4961322e+01
+   3.4500000e+01   3.3536529e+00   3.4973281e+01
+   3.4500000e+01   3.5827603e+00   3.4972736e+01
+   3.4500000e+01   3.8425455e+00   3.4984074e+01
+   3.4500000e+01   4.3142231e+00   3.5036645e+01
+   3.4500000e+01   5.2460165e+00   3.5170777e+01
+   3.4500000e+01   6.6648926e+00   3.5382711e+01
+   3.4500000e+01   8.2569008e+00   3.5621149e+01
+   3.4500000e+01   9.2870413e+00   3.5722876e+01
+   3.4500000e+01   9.5328760e+00   3.5630785e+01
+   3.4500000e+01   9.9026364e+00   3.5537066e+01
+   3.4500000e+01   1.0298083e+01   3.5480702e+01
+   3.4500000e+01   1.0770826e+01   3.5489091e+01
+   3.4500000e+01   1.1255678e+01   3.5531455e+01
+   3.4500000e+01   1.1602421e+01   3.5566000e+01
+   3.4500000e+01   1.1914041e+01   3.5601397e+01
+   3.4500000e+01   1.2147298e+01   3.5626901e+01
+   3.4500000e+01   1.2343058e+01   3.5648785e+01
+   3.4500000e+01   1.2494471e+01   3.5664835e+01
+   3.4500000e+01   1.2597438e+01   3.5676273e+01
+   3.4500000e+01   1.2688149e+01   3.5686380e+01
+   3.4500000e+01   1.2785116e+01   3.5697636e+01
+   3.4500000e+01   1.2848306e+01   3.5705074e+01
+   3.4500000e+01   1.2914322e+01   3.5711992e+01
+   3.4500000e+01   1.3001628e+01   3.5721826e+01
+   3.4500000e+01   1.3051289e+01   3.5725025e+01
+   3.4500000e+01   1.3089132e+01   3.5727711e+01
+   3.4500000e+01   1.3142140e+01   3.5735612e+01
+   3.4500000e+01   1.3179091e+01   3.5738893e+01
+   3.4500000e+01   1.3225289e+01   3.5744364e+01
+   3.4500000e+01   1.3285380e+01   3.5750000e+01
+   3.4500000e+01   1.3351380e+01   3.5760339e+01
+   3.4500000e+01   1.3413512e+01   3.5768570e+01
+   3.4500000e+01   1.3485198e+01   3.5776364e+01
+   3.4500000e+01   1.3539636e+01   3.5778083e+01
+   3.4500000e+01   1.3586083e+01   3.5781620e+01
+   3.4500000e+01   1.3649860e+01   3.5788785e+01
+   3.4500000e+01   1.3724041e+01   3.5795174e+01
+   3.4500000e+01   1.3795636e+01   3.5799347e+01
+   3.4500000e+01   1.3896884e+01   3.5810504e+01
+   3.4500000e+01   1.4007802e+01   3.5819636e+01
+   3.4500000e+01   1.4119207e+01   3.5823149e+01
+   3.4500000e+01   1.4275008e+01   3.5831579e+01
+   3.4500000e+01   1.4495909e+01   3.5833537e+01
+   3.4500000e+01   1.4732562e+01   3.5837397e+01
+   3.4500000e+01   1.4997446e+01   3.5833347e+01
+   3.4500000e+01   1.5706603e+01   3.5837281e+01
+   3.4500000e+01   1.6613545e+01   3.5844116e+01
+   3.4500000e+01   1.7261298e+01   3.5850289e+01
+   3.4500000e+01   1.8017446e+01   3.5853281e+01
+   3.4500000e+01   1.8879421e+01   3.5867727e+01
+   3.4500000e+01   1.9534612e+01   3.5871678e+01
+   3.4500000e+01   1.9774289e+01   3.5868719e+01
+   3.4500000e+01   1.9845992e+01   3.5868760e+01
+   3.4500000e+01   1.9857645e+01   3.5869248e+01
+   3.4500000e+01   1.9858744e+01   3.5869810e+01
+   3.4500000e+01   1.9851843e+01   3.5868702e+01
+   3.4500000e+01   1.9795959e+01   3.5873008e+01
+   3.4550000e+01   2.5103554e+00   3.4896107e+01
+   3.4550000e+01   2.5061901e+00   3.4902207e+01
+   3.4550000e+01   2.5121488e+00   3.4907306e+01
+   3.4550000e+01   2.5413554e+00   3.4914521e+01
+   3.4550000e+01   2.5794959e+00   3.4919405e+01
+   3.4550000e+01   2.6451405e+00   3.4928736e+01
+   3.4550000e+01   2.7416281e+00   3.4940488e+01
+   3.4550000e+01   2.8990331e+00   3.4952802e+01
+   3.4550000e+01   3.0880496e+00   3.4961322e+01
+   3.4550000e+01   3.3536529e+00   3.4973281e+01
+   3.4550000e+01   3.5827603e+00   3.4972736e+01
+   3.4550000e+01   3.8425455e+00   3.4984074e+01
+   3.4550000e+01   4.3142231e+00   3.5036645e+01
+   3.4550000e+01   5.2460165e+00   3.5170777e+01
+   3.4550000e+01   6.6648926e+00   3.5382711e+01
+   3.4550000e+01   8.2569008e+00   3.5621149e+01
+   3.4550000e+01   9.2870413e+00   3.5722876e+01
+   3.4550000e+01   9.5328760e+00   3.5630785e+01
+   3.4550000e+01   9.9026364e+00   3.5537066e+01
+   3.4550000e+01   1.0298083e+01   3.5480702e+01
+   3.4550000e+01   1.0770826e+01   3.5489091e+01
+   3.4550000e+01   1.1255678e+01   3.5531455e+01
+   3.4550000e+01   1.1602421e+01   3.5566000e+01
+   3.4550000e+01   1.1914041e+01   3.5601397e+01
+   3.4550000e+01   1.2147298e+01   3.5626901e+01
+   3.4550000e+01   1.2343058e+01   3.5648785e+01
+   3.4550000e+01   1.2494471e+01   3.5664835e+01
+   3.4550000e+01   1.2597438e+01   3.5676273e+01
+   3.4550000e+01   1.2688149e+01   3.5686380e+01
+   3.4550000e+01   1.2785116e+01   3.5697636e+01
+   3.4550000e+01   1.2848306e+01   3.5705074e+01
+   3.4550000e+01   1.2914322e+01   3.5711992e+01
+   3.4550000e+01   1.3001628e+01   3.5721826e+01
+   3.4550000e+01   1.3051289e+01   3.5725025e+01
+   3.4550000e+01   1.3089132e+01   3.5727711e+01
+   3.4550000e+01   1.3142140e+01   3.5735612e+01
+   3.4550000e+01   1.3179091e+01   3.5738893e+01
+   3.4550000e+01   1.3225289e+01   3.5744364e+01
+   3.4550000e+01   1.3285380e+01   3.5750000e+01
+   3.4550000e+01   1.3351380e+01   3.5760339e+01
+   3.4550000e+01   1.3413512e+01   3.5768570e+01
+   3.4550000e+01   1.3485198e+01   3.5776364e+01
+   3.4550000e+01   1.3539636e+01   3.5778083e+01
+   3.4550000e+01   1.3586083e+01   3.5781620e+01
+   3.4550000e+01   1.3649860e+01   3.5788785e+01
+   3.4550000e+01   1.3724041e+01   3.5795174e+01
+   3.4550000e+01   1.3795636e+01   3.5799347e+01
+   3.4550000e+01   1.3896884e+01   3.5810504e+01
+   3.4550000e+01   1.4007802e+01   3.5819636e+01
+   3.4550000e+01   1.4119207e+01   3.5823149e+01
+   3.4550000e+01   1.4275008e+01   3.5831579e+01
+   3.4550000e+01   1.4495909e+01   3.5833537e+01
+   3.4550000e+01   1.4732562e+01   3.5837397e+01
+   3.4550000e+01   1.4997446e+01   3.5833347e+01
+   3.4550000e+01   1.5706603e+01   3.5837281e+01
+   3.4550000e+01   1.6613545e+01   3.5844116e+01
+   3.4550000e+01   1.7261298e+01   3.5850289e+01
+   3.4550000e+01   1.8017446e+01   3.5853281e+01
+   3.4550000e+01   1.8879421e+01   3.5867727e+01
+   3.4550000e+01   1.9534612e+01   3.5871678e+01
+   3.4550000e+01   1.9774289e+01   3.5868719e+01
+   3.4550000e+01   1.9845992e+01   3.5868760e+01
+   3.4550000e+01   1.9857645e+01   3.5869248e+01
+   3.4550000e+01   1.9858744e+01   3.5869810e+01
+   3.4550000e+01   1.9851843e+01   3.5868702e+01
+   3.4550000e+01   1.9795959e+01   3.5873008e+01
+   3.4600000e+01   2.5103554e+00   3.4896107e+01
+   3.4600000e+01   2.5061901e+00   3.4902207e+01
+   3.4600000e+01   2.5121488e+00   3.4907306e+01
+   3.4600000e+01   2.5413554e+00   3.4914521e+01
+   3.4600000e+01   2.5794959e+00   3.4919405e+01
+   3.4600000e+01   2.6451405e+00   3.4928736e+01
+   3.4600000e+01   2.7416281e+00   3.4940488e+01
+   3.4600000e+01   2.8990331e+00   3.4952802e+01
+   3.4600000e+01   3.0880496e+00   3.4961322e+01
+   3.4600000e+01   3.3536529e+00   3.4973281e+01
+   3.4600000e+01   3.5827603e+00   3.4972736e+01
+   3.4600000e+01   3.8425455e+00   3.4984074e+01
+   3.4600000e+01   4.3142231e+00   3.5036645e+01
+   3.4600000e+01   5.2460165e+00   3.5170777e+01
+   3.4600000e+01   6.6648926e+00   3.5382711e+01
+   3.4600000e+01   8.2569008e+00   3.5621149e+01
+   3.4600000e+01   9.2870413e+00   3.5722876e+01
+   3.4600000e+01   9.5328760e+00   3.5630785e+01
+   3.4600000e+01   9.9026364e+00   3.5537066e+01
+   3.4600000e+01   1.0298083e+01   3.5480702e+01
+   3.4600000e+01   1.0770826e+01   3.5489091e+01
+   3.4600000e+01   1.1255678e+01   3.5531455e+01
+   3.4600000e+01   1.1602421e+01   3.5566000e+01
+   3.4600000e+01   1.1914041e+01   3.5601397e+01
+   3.4600000e+01   1.2147298e+01   3.5626901e+01
+   3.4600000e+01   1.2343058e+01   3.5648785e+01
+   3.4600000e+01   1.2494471e+01   3.5664835e+01
+   3.4600000e+01   1.2597438e+01   3.5676273e+01
+   3.4600000e+01   1.2688149e+01   3.5686380e+01
+   3.4600000e+01   1.2785116e+01   3.5697636e+01
+   3.4600000e+01   1.2848306e+01   3.5705074e+01
+   3.4600000e+01   1.2914322e+01   3.5711992e+01
+   3.4600000e+01   1.3001628e+01   3.5721826e+01
+   3.4600000e+01   1.3051289e+01   3.5725025e+01
+   3.4600000e+01   1.3089132e+01   3.5727711e+01
+   3.4600000e+01   1.3142140e+01   3.5735612e+01
+   3.4600000e+01   1.3179091e+01   3.5738893e+01
+   3.4600000e+01   1.3225289e+01   3.5744364e+01
+   3.4600000e+01   1.3285380e+01   3.5750000e+01
+   3.4600000e+01   1.3351380e+01   3.5760339e+01
+   3.4600000e+01   1.3413512e+01   3.5768570e+01
+   3.4600000e+01   1.3485198e+01   3.5776364e+01
+   3.4600000e+01   1.3539636e+01   3.5778083e+01
+   3.4600000e+01   1.3586083e+01   3.5781620e+01
+   3.4600000e+01   1.3649860e+01   3.5788785e+01
+   3.4600000e+01   1.3724041e+01   3.5795174e+01
+   3.4600000e+01   1.3795636e+01   3.5799347e+01
+   3.4600000e+01   1.3896884e+01   3.5810504e+01
+   3.4600000e+01   1.4007802e+01   3.5819636e+01
+   3.4600000e+01   1.4119207e+01   3.5823149e+01
+   3.4600000e+01   1.4275008e+01   3.5831579e+01
+   3.4600000e+01   1.4495909e+01   3.5833537e+01
+   3.4600000e+01   1.4732562e+01   3.5837397e+01
+   3.4600000e+01   1.4997446e+01   3.5833347e+01
+   3.4600000e+01   1.5706603e+01   3.5837281e+01
+   3.4600000e+01   1.6613545e+01   3.5844116e+01
+   3.4600000e+01   1.7261298e+01   3.5850289e+01
+   3.4600000e+01   1.8017446e+01   3.5853281e+01
+   3.4600000e+01   1.8879421e+01   3.5867727e+01
+   3.4600000e+01   1.9534612e+01   3.5871678e+01
+   3.4600000e+01   1.9774289e+01   3.5868719e+01
+   3.4600000e+01   1.9845992e+01   3.5868760e+01
+   3.4600000e+01   1.9857645e+01   3.5869248e+01
+   3.4600000e+01   1.9858744e+01   3.5869810e+01
+   3.4600000e+01   1.9851843e+01   3.5868702e+01
+   3.4600000e+01   1.9795959e+01   3.5873008e+01
+   3.4650000e+01   2.5103554e+00   3.4896107e+01
+   3.4650000e+01   2.5061901e+00   3.4902207e+01
+   3.4650000e+01   2.5121488e+00   3.4907306e+01
+   3.4650000e+01   2.5413554e+00   3.4914521e+01
+   3.4650000e+01   2.5794959e+00   3.4919405e+01
+   3.4650000e+01   2.6451405e+00   3.4928736e+01
+   3.4650000e+01   2.7416281e+00   3.4940488e+01
+   3.4650000e+01   2.8990331e+00   3.4952802e+01
+   3.4650000e+01   3.0880496e+00   3.4961322e+01
+   3.4650000e+01   3.3536529e+00   3.4973281e+01
+   3.4650000e+01   3.5827603e+00   3.4972736e+01
+   3.4650000e+01   3.8425455e+00   3.4984074e+01
+   3.4650000e+01   4.3142231e+00   3.5036645e+01
+   3.4650000e+01   5.2460165e+00   3.5170777e+01
+   3.4650000e+01   6.6648926e+00   3.5382711e+01
+   3.4650000e+01   8.2569008e+00   3.5621149e+01
+   3.4650000e+01   9.2870413e+00   3.5722876e+01
+   3.4650000e+01   9.5328760e+00   3.5630785e+01
+   3.4650000e+01   9.9026364e+00   3.5537066e+01
+   3.4650000e+01   1.0298083e+01   3.5480702e+01
+   3.4650000e+01   1.0770826e+01   3.5489091e+01
+   3.4650000e+01   1.1255678e+01   3.5531455e+01
+   3.4650000e+01   1.1602421e+01   3.5566000e+01
+   3.4650000e+01   1.1914041e+01   3.5601397e+01
+   3.4650000e+01   1.2147298e+01   3.5626901e+01
+   3.4650000e+01   1.2343058e+01   3.5648785e+01
+   3.4650000e+01   1.2494471e+01   3.5664835e+01
+   3.4650000e+01   1.2597438e+01   3.5676273e+01
+   3.4650000e+01   1.2688149e+01   3.5686380e+01
+   3.4650000e+01   1.2785116e+01   3.5697636e+01
+   3.4650000e+01   1.2848306e+01   3.5705074e+01
+   3.4650000e+01   1.2914322e+01   3.5711992e+01
+   3.4650000e+01   1.3001628e+01   3.5721826e+01
+   3.4650000e+01   1.3051289e+01   3.5725025e+01
+   3.4650000e+01   1.3089132e+01   3.5727711e+01
+   3.4650000e+01   1.3142140e+01   3.5735612e+01
+   3.4650000e+01   1.3179091e+01   3.5738893e+01
+   3.4650000e+01   1.3225289e+01   3.5744364e+01
+   3.4650000e+01   1.3285380e+01   3.5750000e+01
+   3.4650000e+01   1.3351380e+01   3.5760339e+01
+   3.4650000e+01   1.3413512e+01   3.5768570e+01
+   3.4650000e+01   1.3485198e+01   3.5776364e+01
+   3.4650000e+01   1.3539636e+01   3.5778083e+01
+   3.4650000e+01   1.3586083e+01   3.5781620e+01
+   3.4650000e+01   1.3649860e+01   3.5788785e+01
+   3.4650000e+01   1.3724041e+01   3.5795174e+01
+   3.4650000e+01   1.3795636e+01   3.5799347e+01
+   3.4650000e+01   1.3896884e+01   3.5810504e+01
+   3.4650000e+01   1.4007802e+01   3.5819636e+01
+   3.4650000e+01   1.4119207e+01   3.5823149e+01
+   3.4650000e+01   1.4275008e+01   3.5831579e+01
+   3.4650000e+01   1.4495909e+01   3.5833537e+01
+   3.4650000e+01   1.4732562e+01   3.5837397e+01
+   3.4650000e+01   1.4997446e+01   3.5833347e+01
+   3.4650000e+01   1.5706603e+01   3.5837281e+01
+   3.4650000e+01   1.6613545e+01   3.5844116e+01
+   3.4650000e+01   1.7261298e+01   3.5850289e+01
+   3.4650000e+01   1.8017446e+01   3.5853281e+01
+   3.4650000e+01   1.8879421e+01   3.5867727e+01
+   3.4650000e+01   1.9534612e+01   3.5871678e+01
+   3.4650000e+01   1.9774289e+01   3.5868719e+01
+   3.4650000e+01   1.9845992e+01   3.5868760e+01
+   3.4650000e+01   1.9857645e+01   3.5869248e+01
+   3.4650000e+01   1.9858744e+01   3.5869810e+01
+   3.4650000e+01   1.9851843e+01   3.5868702e+01
+   3.4650000e+01   1.9795959e+01   3.5873008e+01
+   3.4700000e+01   2.5103554e+00   3.4896107e+01
+   3.4700000e+01   2.5061901e+00   3.4902207e+01
+   3.4700000e+01   2.5121488e+00   3.4907306e+01
+   3.4700000e+01   2.5413554e+00   3.4914521e+01
+   3.4700000e+01   2.5794959e+00   3.4919405e+01
+   3.4700000e+01   2.6451405e+00   3.4928736e+01
+   3.4700000e+01   2.7416281e+00   3.4940488e+01
+   3.4700000e+01   2.8990331e+00   3.4952802e+01
+   3.4700000e+01   3.0880496e+00   3.4961322e+01
+   3.4700000e+01   3.3536529e+00   3.4973281e+01
+   3.4700000e+01   3.5827603e+00   3.4972736e+01
+   3.4700000e+01   3.8425455e+00   3.4984074e+01
+   3.4700000e+01   4.3142231e+00   3.5036645e+01
+   3.4700000e+01   5.2460165e+00   3.5170777e+01
+   3.4700000e+01   6.6648926e+00   3.5382711e+01
+   3.4700000e+01   8.2569008e+00   3.5621149e+01
+   3.4700000e+01   9.2870413e+00   3.5722876e+01
+   3.4700000e+01   9.5328760e+00   3.5630785e+01
+   3.4700000e+01   9.9026364e+00   3.5537066e+01
+   3.4700000e+01   1.0298083e+01   3.5480702e+01
+   3.4700000e+01   1.0770826e+01   3.5489091e+01
+   3.4700000e+01   1.1255678e+01   3.5531455e+01
+   3.4700000e+01   1.1602421e+01   3.5566000e+01
+   3.4700000e+01   1.1914041e+01   3.5601397e+01
+   3.4700000e+01   1.2147298e+01   3.5626901e+01
+   3.4700000e+01   1.2343058e+01   3.5648785e+01
+   3.4700000e+01   1.2494471e+01   3.5664835e+01
+   3.4700000e+01   1.2597438e+01   3.5676273e+01
+   3.4700000e+01   1.2688149e+01   3.5686380e+01
+   3.4700000e+01   1.2785116e+01   3.5697636e+01
+   3.4700000e+01   1.2848306e+01   3.5705074e+01
+   3.4700000e+01   1.2914322e+01   3.5711992e+01
+   3.4700000e+01   1.3001628e+01   3.5721826e+01
+   3.4700000e+01   1.3051289e+01   3.5725025e+01
+   3.4700000e+01   1.3089132e+01   3.5727711e+01
+   3.4700000e+01   1.3142140e+01   3.5735612e+01
+   3.4700000e+01   1.3179091e+01   3.5738893e+01
+   3.4700000e+01   1.3225289e+01   3.5744364e+01
+   3.4700000e+01   1.3285380e+01   3.5750000e+01
+   3.4700000e+01   1.3351380e+01   3.5760339e+01
+   3.4700000e+01   1.3413512e+01   3.5768570e+01
+   3.4700000e+01   1.3485198e+01   3.5776364e+01
+   3.4700000e+01   1.3539636e+01   3.5778083e+01
+   3.4700000e+01   1.3586083e+01   3.5781620e+01
+   3.4700000e+01   1.3649860e+01   3.5788785e+01
+   3.4700000e+01   1.3724041e+01   3.5795174e+01
+   3.4700000e+01   1.3795636e+01   3.5799347e+01
+   3.4700000e+01   1.3896884e+01   3.5810504e+01
+   3.4700000e+01   1.4007802e+01   3.5819636e+01
+   3.4700000e+01   1.4119207e+01   3.5823149e+01
+   3.4700000e+01   1.4275008e+01   3.5831579e+01
+   3.4700000e+01   1.4495909e+01   3.5833537e+01
+   3.4700000e+01   1.4732562e+01   3.5837397e+01
+   3.4700000e+01   1.4997446e+01   3.5833347e+01
+   3.4700000e+01   1.5706603e+01   3.5837281e+01
+   3.4700000e+01   1.6613545e+01   3.5844116e+01
+   3.4700000e+01   1.7261298e+01   3.5850289e+01
+   3.4700000e+01   1.8017446e+01   3.5853281e+01
+   3.4700000e+01   1.8879421e+01   3.5867727e+01
+   3.4700000e+01   1.9534612e+01   3.5871678e+01
+   3.4700000e+01   1.9774289e+01   3.5868719e+01
+   3.4700000e+01   1.9845992e+01   3.5868760e+01
+   3.4700000e+01   1.9857645e+01   3.5869248e+01
+   3.4700000e+01   1.9858744e+01   3.5869810e+01
+   3.4700000e+01   1.9851843e+01   3.5868702e+01
+   3.4700000e+01   1.9795959e+01   3.5873008e+01
+   3.4750000e+01   2.5103554e+00   3.4896107e+01
+   3.4750000e+01   2.5061901e+00   3.4902207e+01
+   3.4750000e+01   2.5121488e+00   3.4907306e+01
+   3.4750000e+01   2.5413554e+00   3.4914521e+01
+   3.4750000e+01   2.5794959e+00   3.4919405e+01
+   3.4750000e+01   2.6451405e+00   3.4928736e+01
+   3.4750000e+01   2.7416281e+00   3.4940488e+01
+   3.4750000e+01   2.8990331e+00   3.4952802e+01
+   3.4750000e+01   3.0880496e+00   3.4961322e+01
+   3.4750000e+01   3.3536529e+00   3.4973281e+01
+   3.4750000e+01   3.5827603e+00   3.4972736e+01
+   3.4750000e+01   3.8425455e+00   3.4984074e+01
+   3.4750000e+01   4.3142231e+00   3.5036645e+01
+   3.4750000e+01   5.2460165e+00   3.5170777e+01
+   3.4750000e+01   6.6648926e+00   3.5382711e+01
+   3.4750000e+01   8.2569008e+00   3.5621149e+01
+   3.4750000e+01   9.2870413e+00   3.5722876e+01
+   3.4750000e+01   9.5328760e+00   3.5630785e+01
+   3.4750000e+01   9.9026364e+00   3.5537066e+01
+   3.4750000e+01   1.0298083e+01   3.5480702e+01
+   3.4750000e+01   1.0770826e+01   3.5489091e+01
+   3.4750000e+01   1.1255678e+01   3.5531455e+01
+   3.4750000e+01   1.1602421e+01   3.5566000e+01
+   3.4750000e+01   1.1914041e+01   3.5601397e+01
+   3.4750000e+01   1.2147298e+01   3.5626901e+01
+   3.4750000e+01   1.2343058e+01   3.5648785e+01
+   3.4750000e+01   1.2494471e+01   3.5664835e+01
+   3.4750000e+01   1.2597438e+01   3.5676273e+01
+   3.4750000e+01   1.2688149e+01   3.5686380e+01
+   3.4750000e+01   1.2785116e+01   3.5697636e+01
+   3.4750000e+01   1.2848306e+01   3.5705074e+01
+   3.4750000e+01   1.2914322e+01   3.5711992e+01
+   3.4750000e+01   1.3001628e+01   3.5721826e+01
+   3.4750000e+01   1.3051289e+01   3.5725025e+01
+   3.4750000e+01   1.3089132e+01   3.5727711e+01
+   3.4750000e+01   1.3142140e+01   3.5735612e+01
+   3.4750000e+01   1.3179091e+01   3.5738893e+01
+   3.4750000e+01   1.3225289e+01   3.5744364e+01
+   3.4750000e+01   1.3285380e+01   3.5750000e+01
+   3.4750000e+01   1.3351380e+01   3.5760339e+01
+   3.4750000e+01   1.3413512e+01   3.5768570e+01
+   3.4750000e+01   1.3485198e+01   3.5776364e+01
+   3.4750000e+01   1.3539636e+01   3.5778083e+01
+   3.4750000e+01   1.3586083e+01   3.5781620e+01
+   3.4750000e+01   1.3649860e+01   3.5788785e+01
+   3.4750000e+01   1.3724041e+01   3.5795174e+01
+   3.4750000e+01   1.3795636e+01   3.5799347e+01
+   3.4750000e+01   1.3896884e+01   3.5810504e+01
+   3.4750000e+01   1.4007802e+01   3.5819636e+01
+   3.4750000e+01   1.4119207e+01   3.5823149e+01
+   3.4750000e+01   1.4275008e+01   3.5831579e+01
+   3.4750000e+01   1.4495909e+01   3.5833537e+01
+   3.4750000e+01   1.4732562e+01   3.5837397e+01
+   3.4750000e+01   1.4997446e+01   3.5833347e+01
+   3.4750000e+01   1.5706603e+01   3.5837281e+01
+   3.4750000e+01   1.6613545e+01   3.5844116e+01
+   3.4750000e+01   1.7261298e+01   3.5850289e+01
+   3.4750000e+01   1.8017446e+01   3.5853281e+01
+   3.4750000e+01   1.8879421e+01   3.5867727e+01
+   3.4750000e+01   1.9534612e+01   3.5871678e+01
+   3.4750000e+01   1.9774289e+01   3.5868719e+01
+   3.4750000e+01   1.9845992e+01   3.5868760e+01
+   3.4750000e+01   1.9857645e+01   3.5869248e+01
+   3.4750000e+01   1.9858744e+01   3.5869810e+01
+   3.4750000e+01   1.9851843e+01   3.5868702e+01
+   3.4750000e+01   1.9795959e+01   3.5873008e+01
+   3.4800000e+01   2.5103554e+00   3.4896107e+01
+   3.4800000e+01   2.5061901e+00   3.4902207e+01
+   3.4800000e+01   2.5121488e+00   3.4907306e+01
+   3.4800000e+01   2.5413554e+00   3.4914521e+01
+   3.4800000e+01   2.5794959e+00   3.4919405e+01
+   3.4800000e+01   2.6451405e+00   3.4928736e+01
+   3.4800000e+01   2.7416281e+00   3.4940488e+01
+   3.4800000e+01   2.8990331e+00   3.4952802e+01
+   3.4800000e+01   3.0880496e+00   3.4961322e+01
+   3.4800000e+01   3.3536529e+00   3.4973281e+01
+   3.4800000e+01   3.5827603e+00   3.4972736e+01
+   3.4800000e+01   3.8425455e+00   3.4984074e+01
+   3.4800000e+01   4.3142231e+00   3.5036645e+01
+   3.4800000e+01   5.2460165e+00   3.5170777e+01
+   3.4800000e+01   6.6648926e+00   3.5382711e+01
+   3.4800000e+01   8.2569008e+00   3.5621149e+01
+   3.4800000e+01   9.2870413e+00   3.5722876e+01
+   3.4800000e+01   9.5328760e+00   3.5630785e+01
+   3.4800000e+01   9.9026364e+00   3.5537066e+01
+   3.4800000e+01   1.0298083e+01   3.5480702e+01
+   3.4800000e+01   1.0770826e+01   3.5489091e+01
+   3.4800000e+01   1.1255678e+01   3.5531455e+01
+   3.4800000e+01   1.1602421e+01   3.5566000e+01
+   3.4800000e+01   1.1914041e+01   3.5601397e+01
+   3.4800000e+01   1.2147298e+01   3.5626901e+01
+   3.4800000e+01   1.2343058e+01   3.5648785e+01
+   3.4800000e+01   1.2494471e+01   3.5664835e+01
+   3.4800000e+01   1.2597438e+01   3.5676273e+01
+   3.4800000e+01   1.2688149e+01   3.5686380e+01
+   3.4800000e+01   1.2785116e+01   3.5697636e+01
+   3.4800000e+01   1.2848306e+01   3.5705074e+01
+   3.4800000e+01   1.2914322e+01   3.5711992e+01
+   3.4800000e+01   1.3001628e+01   3.5721826e+01
+   3.4800000e+01   1.3051289e+01   3.5725025e+01
+   3.4800000e+01   1.3089132e+01   3.5727711e+01
+   3.4800000e+01   1.3142140e+01   3.5735612e+01
+   3.4800000e+01   1.3179091e+01   3.5738893e+01
+   3.4800000e+01   1.3225289e+01   3.5744364e+01
+   3.4800000e+01   1.3285380e+01   3.5750000e+01
+   3.4800000e+01   1.3351380e+01   3.5760339e+01
+   3.4800000e+01   1.3413512e+01   3.5768570e+01
+   3.4800000e+01   1.3485198e+01   3.5776364e+01
+   3.4800000e+01   1.3539636e+01   3.5778083e+01
+   3.4800000e+01   1.3586083e+01   3.5781620e+01
+   3.4800000e+01   1.3649860e+01   3.5788785e+01
+   3.4800000e+01   1.3724041e+01   3.5795174e+01
+   3.4800000e+01   1.3795636e+01   3.5799347e+01
+   3.4800000e+01   1.3896884e+01   3.5810504e+01
+   3.4800000e+01   1.4007802e+01   3.5819636e+01
+   3.4800000e+01   1.4119207e+01   3.5823149e+01
+   3.4800000e+01   1.4275008e+01   3.5831579e+01
+   3.4800000e+01   1.4495909e+01   3.5833537e+01
+   3.4800000e+01   1.4732562e+01   3.5837397e+01
+   3.4800000e+01   1.4997446e+01   3.5833347e+01
+   3.4800000e+01   1.5706603e+01   3.5837281e+01
+   3.4800000e+01   1.6613545e+01   3.5844116e+01
+   3.4800000e+01   1.7261298e+01   3.5850289e+01
+   3.4800000e+01   1.8017446e+01   3.5853281e+01
+   3.4800000e+01   1.8879421e+01   3.5867727e+01
+   3.4800000e+01   1.9534612e+01   3.5871678e+01
+   3.4800000e+01   1.9774289e+01   3.5868719e+01
+   3.4800000e+01   1.9845992e+01   3.5868760e+01
+   3.4800000e+01   1.9857645e+01   3.5869248e+01
+   3.4800000e+01   1.9858744e+01   3.5869810e+01
+   3.4800000e+01   1.9851843e+01   3.5868702e+01
+   3.4800000e+01   1.9795959e+01   3.5873008e+01
+   3.4850000e+01   2.5103554e+00   3.4896107e+01
+   3.4850000e+01   2.5061901e+00   3.4902207e+01
+   3.4850000e+01   2.5121488e+00   3.4907306e+01
+   3.4850000e+01   2.5413554e+00   3.4914521e+01
+   3.4850000e+01   2.5794959e+00   3.4919405e+01
+   3.4850000e+01   2.6451405e+00   3.4928736e+01
+   3.4850000e+01   2.7416281e+00   3.4940488e+01
+   3.4850000e+01   2.8990331e+00   3.4952802e+01
+   3.4850000e+01   3.0880496e+00   3.4961322e+01
+   3.4850000e+01   3.3536529e+00   3.4973281e+01
+   3.4850000e+01   3.5827603e+00   3.4972736e+01
+   3.4850000e+01   3.8425455e+00   3.4984074e+01
+   3.4850000e+01   4.3142231e+00   3.5036645e+01
+   3.4850000e+01   5.2460165e+00   3.5170777e+01
+   3.4850000e+01   6.6648926e+00   3.5382711e+01
+   3.4850000e+01   8.2569008e+00   3.5621149e+01
+   3.4850000e+01   9.2870413e+00   3.5722876e+01
+   3.4850000e+01   9.5328760e+00   3.5630785e+01
+   3.4850000e+01   9.9026364e+00   3.5537066e+01
+   3.4850000e+01   1.0298083e+01   3.5480702e+01
+   3.4850000e+01   1.0770826e+01   3.5489091e+01
+   3.4850000e+01   1.1255678e+01   3.5531455e+01
+   3.4850000e+01   1.1602421e+01   3.5566000e+01
+   3.4850000e+01   1.1914041e+01   3.5601397e+01
+   3.4850000e+01   1.2147298e+01   3.5626901e+01
+   3.4850000e+01   1.2343058e+01   3.5648785e+01
+   3.4850000e+01   1.2494471e+01   3.5664835e+01
+   3.4850000e+01   1.2597438e+01   3.5676273e+01
+   3.4850000e+01   1.2688149e+01   3.5686380e+01
+   3.4850000e+01   1.2785116e+01   3.5697636e+01
+   3.4850000e+01   1.2848306e+01   3.5705074e+01
+   3.4850000e+01   1.2914322e+01   3.5711992e+01
+   3.4850000e+01   1.3001628e+01   3.5721826e+01
+   3.4850000e+01   1.3051289e+01   3.5725025e+01
+   3.4850000e+01   1.3089132e+01   3.5727711e+01
+   3.4850000e+01   1.3142140e+01   3.5735612e+01
+   3.4850000e+01   1.3179091e+01   3.5738893e+01
+   3.4850000e+01   1.3225289e+01   3.5744364e+01
+   3.4850000e+01   1.3285380e+01   3.5750000e+01
+   3.4850000e+01   1.3351380e+01   3.5760339e+01
+   3.4850000e+01   1.3413512e+01   3.5768570e+01
+   3.4850000e+01   1.3485198e+01   3.5776364e+01
+   3.4850000e+01   1.3539636e+01   3.5778083e+01
+   3.4850000e+01   1.3586083e+01   3.5781620e+01
+   3.4850000e+01   1.3649860e+01   3.5788785e+01
+   3.4850000e+01   1.3724041e+01   3.5795174e+01
+   3.4850000e+01   1.3795636e+01   3.5799347e+01
+   3.4850000e+01   1.3896884e+01   3.5810504e+01
+   3.4850000e+01   1.4007802e+01   3.5819636e+01
+   3.4850000e+01   1.4119207e+01   3.5823149e+01
+   3.4850000e+01   1.4275008e+01   3.5831579e+01
+   3.4850000e+01   1.4495909e+01   3.5833537e+01
+   3.4850000e+01   1.4732562e+01   3.5837397e+01
+   3.4850000e+01   1.4997446e+01   3.5833347e+01
+   3.4850000e+01   1.5706603e+01   3.5837281e+01
+   3.4850000e+01   1.6613545e+01   3.5844116e+01
+   3.4850000e+01   1.7261298e+01   3.5850289e+01
+   3.4850000e+01   1.8017446e+01   3.5853281e+01
+   3.4850000e+01   1.8879421e+01   3.5867727e+01
+   3.4850000e+01   1.9534612e+01   3.5871678e+01
+   3.4850000e+01   1.9774289e+01   3.5868719e+01
+   3.4850000e+01   1.9845992e+01   3.5868760e+01
+   3.4850000e+01   1.9857645e+01   3.5869248e+01
+   3.4850000e+01   1.9858744e+01   3.5869810e+01
+   3.4850000e+01   1.9851843e+01   3.5868702e+01
+   3.4850000e+01   1.9795959e+01   3.5873008e+01
+   3.4900000e+01   2.5103554e+00   3.4896107e+01
+   3.4900000e+01   2.5061901e+00   3.4902207e+01
+   3.4900000e+01   2.5121488e+00   3.4907306e+01
+   3.4900000e+01   2.5413554e+00   3.4914521e+01
+   3.4900000e+01   2.5794959e+00   3.4919405e+01
+   3.4900000e+01   2.6451405e+00   3.4928736e+01
+   3.4900000e+01   2.7416281e+00   3.4940488e+01
+   3.4900000e+01   2.8990331e+00   3.4952802e+01
+   3.4900000e+01   3.0880496e+00   3.4961322e+01
+   3.4900000e+01   3.3536529e+00   3.4973281e+01
+   3.4900000e+01   3.5827603e+00   3.4972736e+01
+   3.4900000e+01   3.8425455e+00   3.4984074e+01
+   3.4900000e+01   4.3142231e+00   3.5036645e+01
+   3.4900000e+01   5.2460165e+00   3.5170777e+01
+   3.4900000e+01   6.6648926e+00   3.5382711e+01
+   3.4900000e+01   8.2569008e+00   3.5621149e+01
+   3.4900000e+01   9.2870413e+00   3.5722876e+01
+   3.4900000e+01   9.5328760e+00   3.5630785e+01
+   3.4900000e+01   9.9026364e+00   3.5537066e+01
+   3.4900000e+01   1.0298083e+01   3.5480702e+01
+   3.4900000e+01   1.0770826e+01   3.5489091e+01
+   3.4900000e+01   1.1255678e+01   3.5531455e+01
+   3.4900000e+01   1.1602421e+01   3.5566000e+01
+   3.4900000e+01   1.1914041e+01   3.5601397e+01
+   3.4900000e+01   1.2147298e+01   3.5626901e+01
+   3.4900000e+01   1.2343058e+01   3.5648785e+01
+   3.4900000e+01   1.2494471e+01   3.5664835e+01
+   3.4900000e+01   1.2597438e+01   3.5676273e+01
+   3.4900000e+01   1.2688149e+01   3.5686380e+01
+   3.4900000e+01   1.2785116e+01   3.5697636e+01
+   3.4900000e+01   1.2848306e+01   3.5705074e+01
+   3.4900000e+01   1.2914322e+01   3.5711992e+01
+   3.4900000e+01   1.3001628e+01   3.5721826e+01
+   3.4900000e+01   1.3051289e+01   3.5725025e+01
+   3.4900000e+01   1.3089132e+01   3.5727711e+01
+   3.4900000e+01   1.3142140e+01   3.5735612e+01
+   3.4900000e+01   1.3179091e+01   3.5738893e+01
+   3.4900000e+01   1.3225289e+01   3.5744364e+01
+   3.4900000e+01   1.3285380e+01   3.5750000e+01
+   3.4900000e+01   1.3351380e+01   3.5760339e+01
+   3.4900000e+01   1.3413512e+01   3.5768570e+01
+   3.4900000e+01   1.3485198e+01   3.5776364e+01
+   3.4900000e+01   1.3539636e+01   3.5778083e+01
+   3.4900000e+01   1.3586083e+01   3.5781620e+01
+   3.4900000e+01   1.3649860e+01   3.5788785e+01
+   3.4900000e+01   1.3724041e+01   3.5795174e+01
+   3.4900000e+01   1.3795636e+01   3.5799347e+01
+   3.4900000e+01   1.3896884e+01   3.5810504e+01
+   3.4900000e+01   1.4007802e+01   3.5819636e+01
+   3.4900000e+01   1.4119207e+01   3.5823149e+01
+   3.4900000e+01   1.4275008e+01   3.5831579e+01
+   3.4900000e+01   1.4495909e+01   3.5833537e+01
+   3.4900000e+01   1.4732562e+01   3.5837397e+01
+   3.4900000e+01   1.4997446e+01   3.5833347e+01
+   3.4900000e+01   1.5706603e+01   3.5837281e+01
+   3.4900000e+01   1.6613545e+01   3.5844116e+01
+   3.4900000e+01   1.7261298e+01   3.5850289e+01
+   3.4900000e+01   1.8017446e+01   3.5853281e+01
+   3.4900000e+01   1.8879421e+01   3.5867727e+01
+   3.4900000e+01   1.9534612e+01   3.5871678e+01
+   3.4900000e+01   1.9774289e+01   3.5868719e+01
+   3.4900000e+01   1.9845992e+01   3.5868760e+01
+   3.4900000e+01   1.9857645e+01   3.5869248e+01
+   3.4900000e+01   1.9858744e+01   3.5869810e+01
+   3.4900000e+01   1.9851843e+01   3.5868702e+01
+   3.4900000e+01   1.9795959e+01   3.5873008e+01
+   3.4950000e+01   2.5103554e+00   3.4896107e+01
+   3.4950000e+01   2.5061901e+00   3.4902207e+01
+   3.4950000e+01   2.5121488e+00   3.4907306e+01
+   3.4950000e+01   2.5413554e+00   3.4914521e+01
+   3.4950000e+01   2.5794959e+00   3.4919405e+01
+   3.4950000e+01   2.6451405e+00   3.4928736e+01
+   3.4950000e+01   2.7416281e+00   3.4940488e+01
+   3.4950000e+01   2.8990331e+00   3.4952802e+01
+   3.4950000e+01   3.0880496e+00   3.4961322e+01
+   3.4950000e+01   3.3536529e+00   3.4973281e+01
+   3.4950000e+01   3.5827603e+00   3.4972736e+01
+   3.4950000e+01   3.8425455e+00   3.4984074e+01
+   3.4950000e+01   4.3142231e+00   3.5036645e+01
+   3.4950000e+01   5.2460165e+00   3.5170777e+01
+   3.4950000e+01   6.6648926e+00   3.5382711e+01
+   3.4950000e+01   8.2569008e+00   3.5621149e+01
+   3.4950000e+01   9.2870413e+00   3.5722876e+01
+   3.4950000e+01   9.5328760e+00   3.5630785e+01
+   3.4950000e+01   9.9026364e+00   3.5537066e+01
+   3.4950000e+01   1.0298083e+01   3.5480702e+01
+   3.4950000e+01   1.0770826e+01   3.5489091e+01
+   3.4950000e+01   1.1255678e+01   3.5531455e+01
+   3.4950000e+01   1.1602421e+01   3.5566000e+01
+   3.4950000e+01   1.1914041e+01   3.5601397e+01
+   3.4950000e+01   1.2147298e+01   3.5626901e+01
+   3.4950000e+01   1.2343058e+01   3.5648785e+01
+   3.4950000e+01   1.2494471e+01   3.5664835e+01
+   3.4950000e+01   1.2597438e+01   3.5676273e+01
+   3.4950000e+01   1.2688149e+01   3.5686380e+01
+   3.4950000e+01   1.2785116e+01   3.5697636e+01
+   3.4950000e+01   1.2848306e+01   3.5705074e+01
+   3.4950000e+01   1.2914322e+01   3.5711992e+01
+   3.4950000e+01   1.3001628e+01   3.5721826e+01
+   3.4950000e+01   1.3051289e+01   3.5725025e+01
+   3.4950000e+01   1.3089132e+01   3.5727711e+01
+   3.4950000e+01   1.3142140e+01   3.5735612e+01
+   3.4950000e+01   1.3179091e+01   3.5738893e+01
+   3.4950000e+01   1.3225289e+01   3.5744364e+01
+   3.4950000e+01   1.3285380e+01   3.5750000e+01
+   3.4950000e+01   1.3351380e+01   3.5760339e+01
+   3.4950000e+01   1.3413512e+01   3.5768570e+01
+   3.4950000e+01   1.3485198e+01   3.5776364e+01
+   3.4950000e+01   1.3539636e+01   3.5778083e+01
+   3.4950000e+01   1.3586083e+01   3.5781620e+01
+   3.4950000e+01   1.3649860e+01   3.5788785e+01
+   3.4950000e+01   1.3724041e+01   3.5795174e+01
+   3.4950000e+01   1.3795636e+01   3.5799347e+01
+   3.4950000e+01   1.3896884e+01   3.5810504e+01
+   3.4950000e+01   1.4007802e+01   3.5819636e+01
+   3.4950000e+01   1.4119207e+01   3.5823149e+01
+   3.4950000e+01   1.4275008e+01   3.5831579e+01
+   3.4950000e+01   1.4495909e+01   3.5833537e+01
+   3.4950000e+01   1.4732562e+01   3.5837397e+01
+   3.4950000e+01   1.4997446e+01   3.5833347e+01
+   3.4950000e+01   1.5706603e+01   3.5837281e+01
+   3.4950000e+01   1.6613545e+01   3.5844116e+01
+   3.4950000e+01   1.7261298e+01   3.5850289e+01
+   3.4950000e+01   1.8017446e+01   3.5853281e+01
+   3.4950000e+01   1.8879421e+01   3.5867727e+01
+   3.4950000e+01   1.9534612e+01   3.5871678e+01
+   3.4950000e+01   1.9774289e+01   3.5868719e+01
+   3.4950000e+01   1.9845992e+01   3.5868760e+01
+   3.4950000e+01   1.9857645e+01   3.5869248e+01
+   3.4950000e+01   1.9858744e+01   3.5869810e+01
+   3.4950000e+01   1.9851843e+01   3.5868702e+01
+   3.4950000e+01   1.9795959e+01   3.5873008e+01
+   3.5000000e+01   2.5103554e+00   3.4896107e+01
+   3.5000000e+01   2.5061901e+00   3.4902207e+01
+   3.5000000e+01   2.5121488e+00   3.4907306e+01
+   3.5000000e+01   2.5413554e+00   3.4914521e+01
+   3.5000000e+01   2.5794959e+00   3.4919405e+01
+   3.5000000e+01   2.6451405e+00   3.4928736e+01
+   3.5000000e+01   2.7416281e+00   3.4940488e+01
+   3.5000000e+01   2.8990331e+00   3.4952802e+01
+   3.5000000e+01   3.0880496e+00   3.4961322e+01
+   3.5000000e+01   3.3536529e+00   3.4973281e+01
+   3.5000000e+01   3.5827603e+00   3.4972736e+01
+   3.5000000e+01   3.8425455e+00   3.4984074e+01
+   3.5000000e+01   4.3142231e+00   3.5036645e+01
+   3.5000000e+01   5.2460165e+00   3.5170777e+01
+   3.5000000e+01   6.6648926e+00   3.5382711e+01
+   3.5000000e+01   8.2569008e+00   3.5621149e+01
+   3.5000000e+01   9.2870413e+00   3.5722876e+01
+   3.5000000e+01   9.5328760e+00   3.5630785e+01
+   3.5000000e+01   9.9026364e+00   3.5537066e+01
+   3.5000000e+01   1.0298083e+01   3.5480702e+01
+   3.5000000e+01   1.0770826e+01   3.5489091e+01
+   3.5000000e+01   1.1255678e+01   3.5531455e+01
+   3.5000000e+01   1.1602421e+01   3.5566000e+01
+   3.5000000e+01   1.1914041e+01   3.5601397e+01
+   3.5000000e+01   1.2147298e+01   3.5626901e+01
+   3.5000000e+01   1.2343058e+01   3.5648785e+01
+   3.5000000e+01   1.2494471e+01   3.5664835e+01
+   3.5000000e+01   1.2597438e+01   3.5676273e+01
+   3.5000000e+01   1.2688149e+01   3.5686380e+01
+   3.5000000e+01   1.2785116e+01   3.5697636e+01
+   3.5000000e+01   1.2848306e+01   3.5705074e+01
+   3.5000000e+01   1.2914322e+01   3.5711992e+01
+   3.5000000e+01   1.3001628e+01   3.5721826e+01
+   3.5000000e+01   1.3051289e+01   3.5725025e+01
+   3.5000000e+01   1.3089132e+01   3.5727711e+01
+   3.5000000e+01   1.3142140e+01   3.5735612e+01
+   3.5000000e+01   1.3179091e+01   3.5738893e+01
+   3.5000000e+01   1.3225289e+01   3.5744364e+01
+   3.5000000e+01   1.3285380e+01   3.5750000e+01
+   3.5000000e+01   1.3351380e+01   3.5760339e+01
+   3.5000000e+01   1.3413512e+01   3.5768570e+01
+   3.5000000e+01   1.3485198e+01   3.5776364e+01
+   3.5000000e+01   1.3539636e+01   3.5778083e+01
+   3.5000000e+01   1.3586083e+01   3.5781620e+01
+   3.5000000e+01   1.3649860e+01   3.5788785e+01
+   3.5000000e+01   1.3724041e+01   3.5795174e+01
+   3.5000000e+01   1.3795636e+01   3.5799347e+01
+   3.5000000e+01   1.3896884e+01   3.5810504e+01
+   3.5000000e+01   1.4007802e+01   3.5819636e+01
+   3.5000000e+01   1.4119207e+01   3.5823149e+01
+   3.5000000e+01   1.4275008e+01   3.5831579e+01
+   3.5000000e+01   1.4495909e+01   3.5833537e+01
+   3.5000000e+01   1.4732562e+01   3.5837397e+01
+   3.5000000e+01   1.4997446e+01   3.5833347e+01
+   3.5000000e+01   1.5706603e+01   3.5837281e+01
+   3.5000000e+01   1.6613545e+01   3.5844116e+01
+   3.5000000e+01   1.7261298e+01   3.5850289e+01
+   3.5000000e+01   1.8017446e+01   3.5853281e+01
+   3.5000000e+01   1.8879421e+01   3.5867727e+01
+   3.5000000e+01   1.9534612e+01   3.5871678e+01
+   3.5000000e+01   1.9774289e+01   3.5868719e+01
+   3.5000000e+01   1.9845992e+01   3.5868760e+01
+   3.5000000e+01   1.9857645e+01   3.5869248e+01
+   3.5000000e+01   1.9858744e+01   3.5869810e+01
+   3.5000000e+01   1.9851843e+01   3.5868702e+01
+   3.5000000e+01   1.9795959e+01   3.5873008e+01
+   3.5050000e+01   2.5103554e+00   3.4896107e+01
+   3.5050000e+01   2.5061901e+00   3.4902207e+01
+   3.5050000e+01   2.5121488e+00   3.4907306e+01
+   3.5050000e+01   2.5413554e+00   3.4914521e+01
+   3.5050000e+01   2.5794959e+00   3.4919405e+01
+   3.5050000e+01   2.6451405e+00   3.4928736e+01
+   3.5050000e+01   2.7416281e+00   3.4940488e+01
+   3.5050000e+01   2.8990331e+00   3.4952802e+01
+   3.5050000e+01   3.0880496e+00   3.4961322e+01
+   3.5050000e+01   3.3536529e+00   3.4973281e+01
+   3.5050000e+01   3.5827603e+00   3.4972736e+01
+   3.5050000e+01   3.8425455e+00   3.4984074e+01
+   3.5050000e+01   4.3142231e+00   3.5036645e+01
+   3.5050000e+01   5.2460165e+00   3.5170777e+01
+   3.5050000e+01   6.6648926e+00   3.5382711e+01
+   3.5050000e+01   8.2569008e+00   3.5621149e+01
+   3.5050000e+01   9.2870413e+00   3.5722876e+01
+   3.5050000e+01   9.5328760e+00   3.5630785e+01
+   3.5050000e+01   9.9026364e+00   3.5537066e+01
+   3.5050000e+01   1.0298083e+01   3.5480702e+01
+   3.5050000e+01   1.0770826e+01   3.5489091e+01
+   3.5050000e+01   1.1255678e+01   3.5531455e+01
+   3.5050000e+01   1.1602421e+01   3.5566000e+01
+   3.5050000e+01   1.1914041e+01   3.5601397e+01
+   3.5050000e+01   1.2147298e+01   3.5626901e+01
+   3.5050000e+01   1.2343058e+01   3.5648785e+01
+   3.5050000e+01   1.2494471e+01   3.5664835e+01
+   3.5050000e+01   1.2597438e+01   3.5676273e+01
+   3.5050000e+01   1.2688149e+01   3.5686380e+01
+   3.5050000e+01   1.2785116e+01   3.5697636e+01
+   3.5050000e+01   1.2848306e+01   3.5705074e+01
+   3.5050000e+01   1.2914322e+01   3.5711992e+01
+   3.5050000e+01   1.3001628e+01   3.5721826e+01
+   3.5050000e+01   1.3051289e+01   3.5725025e+01
+   3.5050000e+01   1.3089132e+01   3.5727711e+01
+   3.5050000e+01   1.3142140e+01   3.5735612e+01
+   3.5050000e+01   1.3179091e+01   3.5738893e+01
+   3.5050000e+01   1.3225289e+01   3.5744364e+01
+   3.5050000e+01   1.3285380e+01   3.5750000e+01
+   3.5050000e+01   1.3351380e+01   3.5760339e+01
+   3.5050000e+01   1.3413512e+01   3.5768570e+01
+   3.5050000e+01   1.3485198e+01   3.5776364e+01
+   3.5050000e+01   1.3539636e+01   3.5778083e+01
+   3.5050000e+01   1.3586083e+01   3.5781620e+01
+   3.5050000e+01   1.3649860e+01   3.5788785e+01
+   3.5050000e+01   1.3724041e+01   3.5795174e+01
+   3.5050000e+01   1.3795636e+01   3.5799347e+01
+   3.5050000e+01   1.3896884e+01   3.5810504e+01
+   3.5050000e+01   1.4007802e+01   3.5819636e+01
+   3.5050000e+01   1.4119207e+01   3.5823149e+01
+   3.5050000e+01   1.4275008e+01   3.5831579e+01
+   3.5050000e+01   1.4495909e+01   3.5833537e+01
+   3.5050000e+01   1.4732562e+01   3.5837397e+01
+   3.5050000e+01   1.4997446e+01   3.5833347e+01
+   3.5050000e+01   1.5706603e+01   3.5837281e+01
+   3.5050000e+01   1.6613545e+01   3.5844116e+01
+   3.5050000e+01   1.7261298e+01   3.5850289e+01
+   3.5050000e+01   1.8017446e+01   3.5853281e+01
+   3.5050000e+01   1.8879421e+01   3.5867727e+01
+   3.5050000e+01   1.9534612e+01   3.5871678e+01
+   3.5050000e+01   1.9774289e+01   3.5868719e+01
+   3.5050000e+01   1.9845992e+01   3.5868760e+01
+   3.5050000e+01   1.9857645e+01   3.5869248e+01
+   3.5050000e+01   1.9858744e+01   3.5869810e+01
+   3.5050000e+01   1.9851843e+01   3.5868702e+01
+   3.5050000e+01   1.9795959e+01   3.5873008e+01
+   3.5100000e+01   2.5103554e+00   3.4896107e+01
+   3.5100000e+01   2.5061901e+00   3.4902207e+01
+   3.5100000e+01   2.5121488e+00   3.4907306e+01
+   3.5100000e+01   2.5413554e+00   3.4914521e+01
+   3.5100000e+01   2.5794959e+00   3.4919405e+01
+   3.5100000e+01   2.6451405e+00   3.4928736e+01
+   3.5100000e+01   2.7416281e+00   3.4940488e+01
+   3.5100000e+01   2.8990331e+00   3.4952802e+01
+   3.5100000e+01   3.0880496e+00   3.4961322e+01
+   3.5100000e+01   3.3536529e+00   3.4973281e+01
+   3.5100000e+01   3.5827603e+00   3.4972736e+01
+   3.5100000e+01   3.8425455e+00   3.4984074e+01
+   3.5100000e+01   4.3142231e+00   3.5036645e+01
+   3.5100000e+01   5.2460165e+00   3.5170777e+01
+   3.5100000e+01   6.6648926e+00   3.5382711e+01
+   3.5100000e+01   8.2569008e+00   3.5621149e+01
+   3.5100000e+01   9.2870413e+00   3.5722876e+01
+   3.5100000e+01   9.5328760e+00   3.5630785e+01
+   3.5100000e+01   9.9026364e+00   3.5537066e+01
+   3.5100000e+01   1.0298083e+01   3.5480702e+01
+   3.5100000e+01   1.0770826e+01   3.5489091e+01
+   3.5100000e+01   1.1255678e+01   3.5531455e+01
+   3.5100000e+01   1.1602421e+01   3.5566000e+01
+   3.5100000e+01   1.1914041e+01   3.5601397e+01
+   3.5100000e+01   1.2147298e+01   3.5626901e+01
+   3.5100000e+01   1.2343058e+01   3.5648785e+01
+   3.5100000e+01   1.2494471e+01   3.5664835e+01
+   3.5100000e+01   1.2597438e+01   3.5676273e+01
+   3.5100000e+01   1.2688149e+01   3.5686380e+01
+   3.5100000e+01   1.2785116e+01   3.5697636e+01
+   3.5100000e+01   1.2848306e+01   3.5705074e+01
+   3.5100000e+01   1.2914322e+01   3.5711992e+01
+   3.5100000e+01   1.3001628e+01   3.5721826e+01
+   3.5100000e+01   1.3051289e+01   3.5725025e+01
+   3.5100000e+01   1.3089132e+01   3.5727711e+01
+   3.5100000e+01   1.3142140e+01   3.5735612e+01
+   3.5100000e+01   1.3179091e+01   3.5738893e+01
+   3.5100000e+01   1.3225289e+01   3.5744364e+01
+   3.5100000e+01   1.3285380e+01   3.5750000e+01
+   3.5100000e+01   1.3351380e+01   3.5760339e+01
+   3.5100000e+01   1.3413512e+01   3.5768570e+01
+   3.5100000e+01   1.3485198e+01   3.5776364e+01
+   3.5100000e+01   1.3539636e+01   3.5778083e+01
+   3.5100000e+01   1.3586083e+01   3.5781620e+01
+   3.5100000e+01   1.3649860e+01   3.5788785e+01
+   3.5100000e+01   1.3724041e+01   3.5795174e+01
+   3.5100000e+01   1.3795636e+01   3.5799347e+01
+   3.5100000e+01   1.3896884e+01   3.5810504e+01
+   3.5100000e+01   1.4007802e+01   3.5819636e+01
+   3.5100000e+01   1.4119207e+01   3.5823149e+01
+   3.5100000e+01   1.4275008e+01   3.5831579e+01
+   3.5100000e+01   1.4495909e+01   3.5833537e+01
+   3.5100000e+01   1.4732562e+01   3.5837397e+01
+   3.5100000e+01   1.4997446e+01   3.5833347e+01
+   3.5100000e+01   1.5706603e+01   3.5837281e+01
+   3.5100000e+01   1.6613545e+01   3.5844116e+01
+   3.5100000e+01   1.7261298e+01   3.5850289e+01
+   3.5100000e+01   1.8017446e+01   3.5853281e+01
+   3.5100000e+01   1.8879421e+01   3.5867727e+01
+   3.5100000e+01   1.9534612e+01   3.5871678e+01
+   3.5100000e+01   1.9774289e+01   3.5868719e+01
+   3.5100000e+01   1.9845992e+01   3.5868760e+01
+   3.5100000e+01   1.9857645e+01   3.5869248e+01
+   3.5100000e+01   1.9858744e+01   3.5869810e+01
+   3.5100000e+01   1.9851843e+01   3.5868702e+01
+   3.5100000e+01   1.9795959e+01   3.5873008e+01
+   3.5150000e+01   2.5103554e+00   3.4896107e+01
+   3.5150000e+01   2.5061901e+00   3.4902207e+01
+   3.5150000e+01   2.5121488e+00   3.4907306e+01
+   3.5150000e+01   2.5413554e+00   3.4914521e+01
+   3.5150000e+01   2.5794959e+00   3.4919405e+01
+   3.5150000e+01   2.6451405e+00   3.4928736e+01
+   3.5150000e+01   2.7416281e+00   3.4940488e+01
+   3.5150000e+01   2.8990331e+00   3.4952802e+01
+   3.5150000e+01   3.0880496e+00   3.4961322e+01
+   3.5150000e+01   3.3536529e+00   3.4973281e+01
+   3.5150000e+01   3.5827603e+00   3.4972736e+01
+   3.5150000e+01   3.8425455e+00   3.4984074e+01
+   3.5150000e+01   4.3142231e+00   3.5036645e+01
+   3.5150000e+01   5.2460165e+00   3.5170777e+01
+   3.5150000e+01   6.6648926e+00   3.5382711e+01
+   3.5150000e+01   8.2569008e+00   3.5621149e+01
+   3.5150000e+01   9.2870413e+00   3.5722876e+01
+   3.5150000e+01   9.5328760e+00   3.5630785e+01
+   3.5150000e+01   9.9026364e+00   3.5537066e+01
+   3.5150000e+01   1.0298083e+01   3.5480702e+01
+   3.5150000e+01   1.0770826e+01   3.5489091e+01
+   3.5150000e+01   1.1255678e+01   3.5531455e+01
+   3.5150000e+01   1.1602421e+01   3.5566000e+01
+   3.5150000e+01   1.1914041e+01   3.5601397e+01
+   3.5150000e+01   1.2147298e+01   3.5626901e+01
+   3.5150000e+01   1.2343058e+01   3.5648785e+01
+   3.5150000e+01   1.2494471e+01   3.5664835e+01
+   3.5150000e+01   1.2597438e+01   3.5676273e+01
+   3.5150000e+01   1.2688149e+01   3.5686380e+01
+   3.5150000e+01   1.2785116e+01   3.5697636e+01
+   3.5150000e+01   1.2848306e+01   3.5705074e+01
+   3.5150000e+01   1.2914322e+01   3.5711992e+01
+   3.5150000e+01   1.3001628e+01   3.5721826e+01
+   3.5150000e+01   1.3051289e+01   3.5725025e+01
+   3.5150000e+01   1.3089132e+01   3.5727711e+01
+   3.5150000e+01   1.3142140e+01   3.5735612e+01
+   3.5150000e+01   1.3179091e+01   3.5738893e+01
+   3.5150000e+01   1.3225289e+01   3.5744364e+01
+   3.5150000e+01   1.3285380e+01   3.5750000e+01
+   3.5150000e+01   1.3351380e+01   3.5760339e+01
+   3.5150000e+01   1.3413512e+01   3.5768570e+01
+   3.5150000e+01   1.3485198e+01   3.5776364e+01
+   3.5150000e+01   1.3539636e+01   3.5778083e+01
+   3.5150000e+01   1.3586083e+01   3.5781620e+01
+   3.5150000e+01   1.3649860e+01   3.5788785e+01
+   3.5150000e+01   1.3724041e+01   3.5795174e+01
+   3.5150000e+01   1.3795636e+01   3.5799347e+01
+   3.5150000e+01   1.3896884e+01   3.5810504e+01
+   3.5150000e+01   1.4007802e+01   3.5819636e+01
+   3.5150000e+01   1.4119207e+01   3.5823149e+01
+   3.5150000e+01   1.4275008e+01   3.5831579e+01
+   3.5150000e+01   1.4495909e+01   3.5833537e+01
+   3.5150000e+01   1.4732562e+01   3.5837397e+01
+   3.5150000e+01   1.4997446e+01   3.5833347e+01
+   3.5150000e+01   1.5706603e+01   3.5837281e+01
+   3.5150000e+01   1.6613545e+01   3.5844116e+01
+   3.5150000e+01   1.7261298e+01   3.5850289e+01
+   3.5150000e+01   1.8017446e+01   3.5853281e+01
+   3.5150000e+01   1.8879421e+01   3.5867727e+01
+   3.5150000e+01   1.9534612e+01   3.5871678e+01
+   3.5150000e+01   1.9774289e+01   3.5868719e+01
+   3.5150000e+01   1.9845992e+01   3.5868760e+01
+   3.5150000e+01   1.9857645e+01   3.5869248e+01
+   3.5150000e+01   1.9858744e+01   3.5869810e+01
+   3.5150000e+01   1.9851843e+01   3.5868702e+01
+   3.5150000e+01   1.9795959e+01   3.5873008e+01
+   3.5200000e+01   2.5103554e+00   3.4896107e+01
+   3.5200000e+01   2.5061901e+00   3.4902207e+01
+   3.5200000e+01   2.5121488e+00   3.4907306e+01
+   3.5200000e+01   2.5413554e+00   3.4914521e+01
+   3.5200000e+01   2.5794959e+00   3.4919405e+01
+   3.5200000e+01   2.6451405e+00   3.4928736e+01
+   3.5200000e+01   2.7416281e+00   3.4940488e+01
+   3.5200000e+01   2.8990331e+00   3.4952802e+01
+   3.5200000e+01   3.0880496e+00   3.4961322e+01
+   3.5200000e+01   3.3536529e+00   3.4973281e+01
+   3.5200000e+01   3.5827603e+00   3.4972736e+01
+   3.5200000e+01   3.8425455e+00   3.4984074e+01
+   3.5200000e+01   4.3142231e+00   3.5036645e+01
+   3.5200000e+01   5.2460165e+00   3.5170777e+01
+   3.5200000e+01   6.6648926e+00   3.5382711e+01
+   3.5200000e+01   8.2569008e+00   3.5621149e+01
+   3.5200000e+01   9.2870413e+00   3.5722876e+01
+   3.5200000e+01   9.5328760e+00   3.5630785e+01
+   3.5200000e+01   9.9026364e+00   3.5537066e+01
+   3.5200000e+01   1.0298083e+01   3.5480702e+01
+   3.5200000e+01   1.0770826e+01   3.5489091e+01
+   3.5200000e+01   1.1255678e+01   3.5531455e+01
+   3.5200000e+01   1.1602421e+01   3.5566000e+01
+   3.5200000e+01   1.1914041e+01   3.5601397e+01
+   3.5200000e+01   1.2147298e+01   3.5626901e+01
+   3.5200000e+01   1.2343058e+01   3.5648785e+01
+   3.5200000e+01   1.2494471e+01   3.5664835e+01
+   3.5200000e+01   1.2597438e+01   3.5676273e+01
+   3.5200000e+01   1.2688149e+01   3.5686380e+01
+   3.5200000e+01   1.2785116e+01   3.5697636e+01
+   3.5200000e+01   1.2848306e+01   3.5705074e+01
+   3.5200000e+01   1.2914322e+01   3.5711992e+01
+   3.5200000e+01   1.3001628e+01   3.5721826e+01
+   3.5200000e+01   1.3051289e+01   3.5725025e+01
+   3.5200000e+01   1.3089132e+01   3.5727711e+01
+   3.5200000e+01   1.3142140e+01   3.5735612e+01
+   3.5200000e+01   1.3179091e+01   3.5738893e+01
+   3.5200000e+01   1.3225289e+01   3.5744364e+01
+   3.5200000e+01   1.3285380e+01   3.5750000e+01
+   3.5200000e+01   1.3351380e+01   3.5760339e+01
+   3.5200000e+01   1.3413512e+01   3.5768570e+01
+   3.5200000e+01   1.3485198e+01   3.5776364e+01
+   3.5200000e+01   1.3539636e+01   3.5778083e+01
+   3.5200000e+01   1.3586083e+01   3.5781620e+01
+   3.5200000e+01   1.3649860e+01   3.5788785e+01
+   3.5200000e+01   1.3724041e+01   3.5795174e+01
+   3.5200000e+01   1.3795636e+01   3.5799347e+01
+   3.5200000e+01   1.3896884e+01   3.5810504e+01
+   3.5200000e+01   1.4007802e+01   3.5819636e+01
+   3.5200000e+01   1.4119207e+01   3.5823149e+01
+   3.5200000e+01   1.4275008e+01   3.5831579e+01
+   3.5200000e+01   1.4495909e+01   3.5833537e+01
+   3.5200000e+01   1.4732562e+01   3.5837397e+01
+   3.5200000e+01   1.4997446e+01   3.5833347e+01
+   3.5200000e+01   1.5706603e+01   3.5837281e+01
+   3.5200000e+01   1.6613545e+01   3.5844116e+01
+   3.5200000e+01   1.7261298e+01   3.5850289e+01
+   3.5200000e+01   1.8017446e+01   3.5853281e+01
+   3.5200000e+01   1.8879421e+01   3.5867727e+01
+   3.5200000e+01   1.9534612e+01   3.5871678e+01
+   3.5200000e+01   1.9774289e+01   3.5868719e+01
+   3.5200000e+01   1.9845992e+01   3.5868760e+01
+   3.5200000e+01   1.9857645e+01   3.5869248e+01
+   3.5200000e+01   1.9858744e+01   3.5869810e+01
+   3.5200000e+01   1.9851843e+01   3.5868702e+01
+   3.5200000e+01   1.9795959e+01   3.5873008e+01
+   3.5250000e+01   2.5103554e+00   3.4896107e+01
+   3.5250000e+01   2.5061901e+00   3.4902207e+01
+   3.5250000e+01   2.5121488e+00   3.4907306e+01
+   3.5250000e+01   2.5413554e+00   3.4914521e+01
+   3.5250000e+01   2.5794959e+00   3.4919405e+01
+   3.5250000e+01   2.6451405e+00   3.4928736e+01
+   3.5250000e+01   2.7416281e+00   3.4940488e+01
+   3.5250000e+01   2.8990331e+00   3.4952802e+01
+   3.5250000e+01   3.0880496e+00   3.4961322e+01
+   3.5250000e+01   3.3536529e+00   3.4973281e+01
+   3.5250000e+01   3.5827603e+00   3.4972736e+01
+   3.5250000e+01   3.8425455e+00   3.4984074e+01
+   3.5250000e+01   4.3142231e+00   3.5036645e+01
+   3.5250000e+01   5.2460165e+00   3.5170777e+01
+   3.5250000e+01   6.6648926e+00   3.5382711e+01
+   3.5250000e+01   8.2569008e+00   3.5621149e+01
+   3.5250000e+01   9.2870413e+00   3.5722876e+01
+   3.5250000e+01   9.5328760e+00   3.5630785e+01
+   3.5250000e+01   9.9026364e+00   3.5537066e+01
+   3.5250000e+01   1.0298083e+01   3.5480702e+01
+   3.5250000e+01   1.0770826e+01   3.5489091e+01
+   3.5250000e+01   1.1255678e+01   3.5531455e+01
+   3.5250000e+01   1.1602421e+01   3.5566000e+01
+   3.5250000e+01   1.1914041e+01   3.5601397e+01
+   3.5250000e+01   1.2147298e+01   3.5626901e+01
+   3.5250000e+01   1.2343058e+01   3.5648785e+01
+   3.5250000e+01   1.2494471e+01   3.5664835e+01
+   3.5250000e+01   1.2597438e+01   3.5676273e+01
+   3.5250000e+01   1.2688149e+01   3.5686380e+01
+   3.5250000e+01   1.2785116e+01   3.5697636e+01
+   3.5250000e+01   1.2848306e+01   3.5705074e+01
+   3.5250000e+01   1.2914322e+01   3.5711992e+01
+   3.5250000e+01   1.3001628e+01   3.5721826e+01
+   3.5250000e+01   1.3051289e+01   3.5725025e+01
+   3.5250000e+01   1.3089132e+01   3.5727711e+01
+   3.5250000e+01   1.3142140e+01   3.5735612e+01
+   3.5250000e+01   1.3179091e+01   3.5738893e+01
+   3.5250000e+01   1.3225289e+01   3.5744364e+01
+   3.5250000e+01   1.3285380e+01   3.5750000e+01
+   3.5250000e+01   1.3351380e+01   3.5760339e+01
+   3.5250000e+01   1.3413512e+01   3.5768570e+01
+   3.5250000e+01   1.3485198e+01   3.5776364e+01
+   3.5250000e+01   1.3539636e+01   3.5778083e+01
+   3.5250000e+01   1.3586083e+01   3.5781620e+01
+   3.5250000e+01   1.3649860e+01   3.5788785e+01
+   3.5250000e+01   1.3724041e+01   3.5795174e+01
+   3.5250000e+01   1.3795636e+01   3.5799347e+01
+   3.5250000e+01   1.3896884e+01   3.5810504e+01
+   3.5250000e+01   1.4007802e+01   3.5819636e+01
+   3.5250000e+01   1.4119207e+01   3.5823149e+01
+   3.5250000e+01   1.4275008e+01   3.5831579e+01
+   3.5250000e+01   1.4495909e+01   3.5833537e+01
+   3.5250000e+01   1.4732562e+01   3.5837397e+01
+   3.5250000e+01   1.4997446e+01   3.5833347e+01
+   3.5250000e+01   1.5706603e+01   3.5837281e+01
+   3.5250000e+01   1.6613545e+01   3.5844116e+01
+   3.5250000e+01   1.7261298e+01   3.5850289e+01
+   3.5250000e+01   1.8017446e+01   3.5853281e+01
+   3.5250000e+01   1.8879421e+01   3.5867727e+01
+   3.5250000e+01   1.9534612e+01   3.5871678e+01
+   3.5250000e+01   1.9774289e+01   3.5868719e+01
+   3.5250000e+01   1.9845992e+01   3.5868760e+01
+   3.5250000e+01   1.9857645e+01   3.5869248e+01
+   3.5250000e+01   1.9858744e+01   3.5869810e+01
+   3.5250000e+01   1.9851843e+01   3.5868702e+01
+   3.5250000e+01   1.9795959e+01   3.5873008e+01
+   3.5300000e+01   2.5103554e+00   3.4896107e+01
+   3.5300000e+01   2.5061901e+00   3.4902207e+01
+   3.5300000e+01   2.5121488e+00   3.4907306e+01
+   3.5300000e+01   2.5413554e+00   3.4914521e+01
+   3.5300000e+01   2.5794959e+00   3.4919405e+01
+   3.5300000e+01   2.6451405e+00   3.4928736e+01
+   3.5300000e+01   2.7416281e+00   3.4940488e+01
+   3.5300000e+01   2.8990331e+00   3.4952802e+01
+   3.5300000e+01   3.0880496e+00   3.4961322e+01
+   3.5300000e+01   3.3536529e+00   3.4973281e+01
+   3.5300000e+01   3.5827603e+00   3.4972736e+01
+   3.5300000e+01   3.8425455e+00   3.4984074e+01
+   3.5300000e+01   4.3142231e+00   3.5036645e+01
+   3.5300000e+01   5.2460165e+00   3.5170777e+01
+   3.5300000e+01   6.6648926e+00   3.5382711e+01
+   3.5300000e+01   8.2569008e+00   3.5621149e+01
+   3.5300000e+01   9.2870413e+00   3.5722876e+01
+   3.5300000e+01   9.5328760e+00   3.5630785e+01
+   3.5300000e+01   9.9026364e+00   3.5537066e+01
+   3.5300000e+01   1.0298083e+01   3.5480702e+01
+   3.5300000e+01   1.0770826e+01   3.5489091e+01
+   3.5300000e+01   1.1255678e+01   3.5531455e+01
+   3.5300000e+01   1.1602421e+01   3.5566000e+01
+   3.5300000e+01   1.1914041e+01   3.5601397e+01
+   3.5300000e+01   1.2147298e+01   3.5626901e+01
+   3.5300000e+01   1.2343058e+01   3.5648785e+01
+   3.5300000e+01   1.2494471e+01   3.5664835e+01
+   3.5300000e+01   1.2597438e+01   3.5676273e+01
+   3.5300000e+01   1.2688149e+01   3.5686380e+01
+   3.5300000e+01   1.2785116e+01   3.5697636e+01
+   3.5300000e+01   1.2848306e+01   3.5705074e+01
+   3.5300000e+01   1.2914322e+01   3.5711992e+01
+   3.5300000e+01   1.3001628e+01   3.5721826e+01
+   3.5300000e+01   1.3051289e+01   3.5725025e+01
+   3.5300000e+01   1.3089132e+01   3.5727711e+01
+   3.5300000e+01   1.3142140e+01   3.5735612e+01
+   3.5300000e+01   1.3179091e+01   3.5738893e+01
+   3.5300000e+01   1.3225289e+01   3.5744364e+01
+   3.5300000e+01   1.3285380e+01   3.5750000e+01
+   3.5300000e+01   1.3351380e+01   3.5760339e+01
+   3.5300000e+01   1.3413512e+01   3.5768570e+01
+   3.5300000e+01   1.3485198e+01   3.5776364e+01
+   3.5300000e+01   1.3539636e+01   3.5778083e+01
+   3.5300000e+01   1.3586083e+01   3.5781620e+01
+   3.5300000e+01   1.3649860e+01   3.5788785e+01
+   3.5300000e+01   1.3724041e+01   3.5795174e+01
+   3.5300000e+01   1.3795636e+01   3.5799347e+01
+   3.5300000e+01   1.3896884e+01   3.5810504e+01
+   3.5300000e+01   1.4007802e+01   3.5819636e+01
+   3.5300000e+01   1.4119207e+01   3.5823149e+01
+   3.5300000e+01   1.4275008e+01   3.5831579e+01
+   3.5300000e+01   1.4495909e+01   3.5833537e+01
+   3.5300000e+01   1.4732562e+01   3.5837397e+01
+   3.5300000e+01   1.4997446e+01   3.5833347e+01
+   3.5300000e+01   1.5706603e+01   3.5837281e+01
+   3.5300000e+01   1.6613545e+01   3.5844116e+01
+   3.5300000e+01   1.7261298e+01   3.5850289e+01
+   3.5300000e+01   1.8017446e+01   3.5853281e+01
+   3.5300000e+01   1.8879421e+01   3.5867727e+01
+   3.5300000e+01   1.9534612e+01   3.5871678e+01
+   3.5300000e+01   1.9774289e+01   3.5868719e+01
+   3.5300000e+01   1.9845992e+01   3.5868760e+01
+   3.5300000e+01   1.9857645e+01   3.5869248e+01
+   3.5300000e+01   1.9858744e+01   3.5869810e+01
+   3.5300000e+01   1.9851843e+01   3.5868702e+01
+   3.5300000e+01   1.9795959e+01   3.5873008e+01
+   3.5350000e+01   2.5103554e+00   3.4896107e+01
+   3.5350000e+01   2.5061901e+00   3.4902207e+01
+   3.5350000e+01   2.5121488e+00   3.4907306e+01
+   3.5350000e+01   2.5413554e+00   3.4914521e+01
+   3.5350000e+01   2.5794959e+00   3.4919405e+01
+   3.5350000e+01   2.6451405e+00   3.4928736e+01
+   3.5350000e+01   2.7416281e+00   3.4940488e+01
+   3.5350000e+01   2.8990331e+00   3.4952802e+01
+   3.5350000e+01   3.0880496e+00   3.4961322e+01
+   3.5350000e+01   3.3536529e+00   3.4973281e+01
+   3.5350000e+01   3.5827603e+00   3.4972736e+01
+   3.5350000e+01   3.8425455e+00   3.4984074e+01
+   3.5350000e+01   4.3142231e+00   3.5036645e+01
+   3.5350000e+01   5.2460165e+00   3.5170777e+01
+   3.5350000e+01   6.6648926e+00   3.5382711e+01
+   3.5350000e+01   8.2569008e+00   3.5621149e+01
+   3.5350000e+01   9.2870413e+00   3.5722876e+01
+   3.5350000e+01   9.5328760e+00   3.5630785e+01
+   3.5350000e+01   9.9026364e+00   3.5537066e+01
+   3.5350000e+01   1.0298083e+01   3.5480702e+01
+   3.5350000e+01   1.0770826e+01   3.5489091e+01
+   3.5350000e+01   1.1255678e+01   3.5531455e+01
+   3.5350000e+01   1.1602421e+01   3.5566000e+01
+   3.5350000e+01   1.1914041e+01   3.5601397e+01
+   3.5350000e+01   1.2147298e+01   3.5626901e+01
+   3.5350000e+01   1.2343058e+01   3.5648785e+01
+   3.5350000e+01   1.2494471e+01   3.5664835e+01
+   3.5350000e+01   1.2597438e+01   3.5676273e+01
+   3.5350000e+01   1.2688149e+01   3.5686380e+01
+   3.5350000e+01   1.2785116e+01   3.5697636e+01
+   3.5350000e+01   1.2848306e+01   3.5705074e+01
+   3.5350000e+01   1.2914322e+01   3.5711992e+01
+   3.5350000e+01   1.3001628e+01   3.5721826e+01
+   3.5350000e+01   1.3051289e+01   3.5725025e+01
+   3.5350000e+01   1.3089132e+01   3.5727711e+01
+   3.5350000e+01   1.3142140e+01   3.5735612e+01
+   3.5350000e+01   1.3179091e+01   3.5738893e+01
+   3.5350000e+01   1.3225289e+01   3.5744364e+01
+   3.5350000e+01   1.3285380e+01   3.5750000e+01
+   3.5350000e+01   1.3351380e+01   3.5760339e+01
+   3.5350000e+01   1.3413512e+01   3.5768570e+01
+   3.5350000e+01   1.3485198e+01   3.5776364e+01
+   3.5350000e+01   1.3539636e+01   3.5778083e+01
+   3.5350000e+01   1.3586083e+01   3.5781620e+01
+   3.5350000e+01   1.3649860e+01   3.5788785e+01
+   3.5350000e+01   1.3724041e+01   3.5795174e+01
+   3.5350000e+01   1.3795636e+01   3.5799347e+01
+   3.5350000e+01   1.3896884e+01   3.5810504e+01
+   3.5350000e+01   1.4007802e+01   3.5819636e+01
+   3.5350000e+01   1.4119207e+01   3.5823149e+01
+   3.5350000e+01   1.4275008e+01   3.5831579e+01
+   3.5350000e+01   1.4495909e+01   3.5833537e+01
+   3.5350000e+01   1.4732562e+01   3.5837397e+01
+   3.5350000e+01   1.4997446e+01   3.5833347e+01
+   3.5350000e+01   1.5706603e+01   3.5837281e+01
+   3.5350000e+01   1.6613545e+01   3.5844116e+01
+   3.5350000e+01   1.7261298e+01   3.5850289e+01
+   3.5350000e+01   1.8017446e+01   3.5853281e+01
+   3.5350000e+01   1.8879421e+01   3.5867727e+01
+   3.5350000e+01   1.9534612e+01   3.5871678e+01
+   3.5350000e+01   1.9774289e+01   3.5868719e+01
+   3.5350000e+01   1.9845992e+01   3.5868760e+01
+   3.5350000e+01   1.9857645e+01   3.5869248e+01
+   3.5350000e+01   1.9858744e+01   3.5869810e+01
+   3.5350000e+01   1.9851843e+01   3.5868702e+01
+   3.5350000e+01   1.9795959e+01   3.5873008e+01
+   3.5400000e+01   2.5103554e+00   3.4896107e+01
+   3.5400000e+01   2.5061901e+00   3.4902207e+01
+   3.5400000e+01   2.5121488e+00   3.4907306e+01
+   3.5400000e+01   2.5413554e+00   3.4914521e+01
+   3.5400000e+01   2.5794959e+00   3.4919405e+01
+   3.5400000e+01   2.6451405e+00   3.4928736e+01
+   3.5400000e+01   2.7416281e+00   3.4940488e+01
+   3.5400000e+01   2.8990331e+00   3.4952802e+01
+   3.5400000e+01   3.0880496e+00   3.4961322e+01
+   3.5400000e+01   3.3536529e+00   3.4973281e+01
+   3.5400000e+01   3.5827603e+00   3.4972736e+01
+   3.5400000e+01   3.8425455e+00   3.4984074e+01
+   3.5400000e+01   4.3142231e+00   3.5036645e+01
+   3.5400000e+01   5.2460165e+00   3.5170777e+01
+   3.5400000e+01   6.6648926e+00   3.5382711e+01
+   3.5400000e+01   8.2569008e+00   3.5621149e+01
+   3.5400000e+01   9.2870413e+00   3.5722876e+01
+   3.5400000e+01   9.5328760e+00   3.5630785e+01
+   3.5400000e+01   9.9026364e+00   3.5537066e+01
+   3.5400000e+01   1.0298083e+01   3.5480702e+01
+   3.5400000e+01   1.0770826e+01   3.5489091e+01
+   3.5400000e+01   1.1255678e+01   3.5531455e+01
+   3.5400000e+01   1.1602421e+01   3.5566000e+01
+   3.5400000e+01   1.1914041e+01   3.5601397e+01
+   3.5400000e+01   1.2147298e+01   3.5626901e+01
+   3.5400000e+01   1.2343058e+01   3.5648785e+01
+   3.5400000e+01   1.2494471e+01   3.5664835e+01
+   3.5400000e+01   1.2597438e+01   3.5676273e+01
+   3.5400000e+01   1.2688149e+01   3.5686380e+01
+   3.5400000e+01   1.2785116e+01   3.5697636e+01
+   3.5400000e+01   1.2848306e+01   3.5705074e+01
+   3.5400000e+01   1.2914322e+01   3.5711992e+01
+   3.5400000e+01   1.3001628e+01   3.5721826e+01
+   3.5400000e+01   1.3051289e+01   3.5725025e+01
+   3.5400000e+01   1.3089132e+01   3.5727711e+01
+   3.5400000e+01   1.3142140e+01   3.5735612e+01
+   3.5400000e+01   1.3179091e+01   3.5738893e+01
+   3.5400000e+01   1.3225289e+01   3.5744364e+01
+   3.5400000e+01   1.3285380e+01   3.5750000e+01
+   3.5400000e+01   1.3351380e+01   3.5760339e+01
+   3.5400000e+01   1.3413512e+01   3.5768570e+01
+   3.5400000e+01   1.3485198e+01   3.5776364e+01
+   3.5400000e+01   1.3539636e+01   3.5778083e+01
+   3.5400000e+01   1.3586083e+01   3.5781620e+01
+   3.5400000e+01   1.3649860e+01   3.5788785e+01
+   3.5400000e+01   1.3724041e+01   3.5795174e+01
+   3.5400000e+01   1.3795636e+01   3.5799347e+01
+   3.5400000e+01   1.3896884e+01   3.5810504e+01
+   3.5400000e+01   1.4007802e+01   3.5819636e+01
+   3.5400000e+01   1.4119207e+01   3.5823149e+01
+   3.5400000e+01   1.4275008e+01   3.5831579e+01
+   3.5400000e+01   1.4495909e+01   3.5833537e+01
+   3.5400000e+01   1.4732562e+01   3.5837397e+01
+   3.5400000e+01   1.4997446e+01   3.5833347e+01
+   3.5400000e+01   1.5706603e+01   3.5837281e+01
+   3.5400000e+01   1.6613545e+01   3.5844116e+01
+   3.5400000e+01   1.7261298e+01   3.5850289e+01
+   3.5400000e+01   1.8017446e+01   3.5853281e+01
+   3.5400000e+01   1.8879421e+01   3.5867727e+01
+   3.5400000e+01   1.9534612e+01   3.5871678e+01
+   3.5400000e+01   1.9774289e+01   3.5868719e+01
+   3.5400000e+01   1.9845992e+01   3.5868760e+01
+   3.5400000e+01   1.9857645e+01   3.5869248e+01
+   3.5400000e+01   1.9858744e+01   3.5869810e+01
+   3.5400000e+01   1.9851843e+01   3.5868702e+01
+   3.5400000e+01   1.9795959e+01   3.5873008e+01
+   3.5450000e+01   2.5103554e+00   3.4896107e+01
+   3.5450000e+01   2.5061901e+00   3.4902207e+01
+   3.5450000e+01   2.5121488e+00   3.4907306e+01
+   3.5450000e+01   2.5413554e+00   3.4914521e+01
+   3.5450000e+01   2.5794959e+00   3.4919405e+01
+   3.5450000e+01   2.6451405e+00   3.4928736e+01
+   3.5450000e+01   2.7416281e+00   3.4940488e+01
+   3.5450000e+01   2.8990331e+00   3.4952802e+01
+   3.5450000e+01   3.0880496e+00   3.4961322e+01
+   3.5450000e+01   3.3536529e+00   3.4973281e+01
+   3.5450000e+01   3.5827603e+00   3.4972736e+01
+   3.5450000e+01   3.8425455e+00   3.4984074e+01
+   3.5450000e+01   4.3142231e+00   3.5036645e+01
+   3.5450000e+01   5.2460165e+00   3.5170777e+01
+   3.5450000e+01   6.6648926e+00   3.5382711e+01
+   3.5450000e+01   8.2569008e+00   3.5621149e+01
+   3.5450000e+01   9.2870413e+00   3.5722876e+01
+   3.5450000e+01   9.5328760e+00   3.5630785e+01
+   3.5450000e+01   9.9026364e+00   3.5537066e+01
+   3.5450000e+01   1.0298083e+01   3.5480702e+01
+   3.5450000e+01   1.0770826e+01   3.5489091e+01
+   3.5450000e+01   1.1255678e+01   3.5531455e+01
+   3.5450000e+01   1.1602421e+01   3.5566000e+01
+   3.5450000e+01   1.1914041e+01   3.5601397e+01
+   3.5450000e+01   1.2147298e+01   3.5626901e+01
+   3.5450000e+01   1.2343058e+01   3.5648785e+01
+   3.5450000e+01   1.2494471e+01   3.5664835e+01
+   3.5450000e+01   1.2597438e+01   3.5676273e+01
+   3.5450000e+01   1.2688149e+01   3.5686380e+01
+   3.5450000e+01   1.2785116e+01   3.5697636e+01
+   3.5450000e+01   1.2848306e+01   3.5705074e+01
+   3.5450000e+01   1.2914322e+01   3.5711992e+01
+   3.5450000e+01   1.3001628e+01   3.5721826e+01
+   3.5450000e+01   1.3051289e+01   3.5725025e+01
+   3.5450000e+01   1.3089132e+01   3.5727711e+01
+   3.5450000e+01   1.3142140e+01   3.5735612e+01
+   3.5450000e+01   1.3179091e+01   3.5738893e+01
+   3.5450000e+01   1.3225289e+01   3.5744364e+01
+   3.5450000e+01   1.3285380e+01   3.5750000e+01
+   3.5450000e+01   1.3351380e+01   3.5760339e+01
+   3.5450000e+01   1.3413512e+01   3.5768570e+01
+   3.5450000e+01   1.3485198e+01   3.5776364e+01
+   3.5450000e+01   1.3539636e+01   3.5778083e+01
+   3.5450000e+01   1.3586083e+01   3.5781620e+01
+   3.5450000e+01   1.3649860e+01   3.5788785e+01
+   3.5450000e+01   1.3724041e+01   3.5795174e+01
+   3.5450000e+01   1.3795636e+01   3.5799347e+01
+   3.5450000e+01   1.3896884e+01   3.5810504e+01
+   3.5450000e+01   1.4007802e+01   3.5819636e+01
+   3.5450000e+01   1.4119207e+01   3.5823149e+01
+   3.5450000e+01   1.4275008e+01   3.5831579e+01
+   3.5450000e+01   1.4495909e+01   3.5833537e+01
+   3.5450000e+01   1.4732562e+01   3.5837397e+01
+   3.5450000e+01   1.4997446e+01   3.5833347e+01
+   3.5450000e+01   1.5706603e+01   3.5837281e+01
+   3.5450000e+01   1.6613545e+01   3.5844116e+01
+   3.5450000e+01   1.7261298e+01   3.5850289e+01
+   3.5450000e+01   1.8017446e+01   3.5853281e+01
+   3.5450000e+01   1.8879421e+01   3.5867727e+01
+   3.5450000e+01   1.9534612e+01   3.5871678e+01
+   3.5450000e+01   1.9774289e+01   3.5868719e+01
+   3.5450000e+01   1.9845992e+01   3.5868760e+01
+   3.5450000e+01   1.9857645e+01   3.5869248e+01
+   3.5450000e+01   1.9858744e+01   3.5869810e+01
+   3.5450000e+01   1.9851843e+01   3.5868702e+01
+   3.5450000e+01   1.9795959e+01   3.5873008e+01
+   3.5500000e+01   2.5103554e+00   3.4896107e+01
+   3.5500000e+01   2.5061901e+00   3.4902207e+01
+   3.5500000e+01   2.5121488e+00   3.4907306e+01
+   3.5500000e+01   2.5413554e+00   3.4914521e+01
+   3.5500000e+01   2.5794959e+00   3.4919405e+01
+   3.5500000e+01   2.6451405e+00   3.4928736e+01
+   3.5500000e+01   2.7416281e+00   3.4940488e+01
+   3.5500000e+01   2.8990331e+00   3.4952802e+01
+   3.5500000e+01   3.0880496e+00   3.4961322e+01
+   3.5500000e+01   3.3536529e+00   3.4973281e+01
+   3.5500000e+01   3.5827603e+00   3.4972736e+01
+   3.5500000e+01   3.8425455e+00   3.4984074e+01
+   3.5500000e+01   4.3142231e+00   3.5036645e+01
+   3.5500000e+01   5.2460165e+00   3.5170777e+01
+   3.5500000e+01   6.6648926e+00   3.5382711e+01
+   3.5500000e+01   8.2569008e+00   3.5621149e+01
+   3.5500000e+01   9.2870413e+00   3.5722876e+01
+   3.5500000e+01   9.5328760e+00   3.5630785e+01
+   3.5500000e+01   9.9026364e+00   3.5537066e+01
+   3.5500000e+01   1.0298083e+01   3.5480702e+01
+   3.5500000e+01   1.0770826e+01   3.5489091e+01
+   3.5500000e+01   1.1255678e+01   3.5531455e+01
+   3.5500000e+01   1.1602421e+01   3.5566000e+01
+   3.5500000e+01   1.1914041e+01   3.5601397e+01
+   3.5500000e+01   1.2147298e+01   3.5626901e+01
+   3.5500000e+01   1.2343058e+01   3.5648785e+01
+   3.5500000e+01   1.2494471e+01   3.5664835e+01
+   3.5500000e+01   1.2597438e+01   3.5676273e+01
+   3.5500000e+01   1.2688149e+01   3.5686380e+01
+   3.5500000e+01   1.2785116e+01   3.5697636e+01
+   3.5500000e+01   1.2848306e+01   3.5705074e+01
+   3.5500000e+01   1.2914322e+01   3.5711992e+01
+   3.5500000e+01   1.3001628e+01   3.5721826e+01
+   3.5500000e+01   1.3051289e+01   3.5725025e+01
+   3.5500000e+01   1.3089132e+01   3.5727711e+01
+   3.5500000e+01   1.3142140e+01   3.5735612e+01
+   3.5500000e+01   1.3179091e+01   3.5738893e+01
+   3.5500000e+01   1.3225289e+01   3.5744364e+01
+   3.5500000e+01   1.3285380e+01   3.5750000e+01
+   3.5500000e+01   1.3351380e+01   3.5760339e+01
+   3.5500000e+01   1.3413512e+01   3.5768570e+01
+   3.5500000e+01   1.3485198e+01   3.5776364e+01
+   3.5500000e+01   1.3539636e+01   3.5778083e+01
+   3.5500000e+01   1.3586083e+01   3.5781620e+01
+   3.5500000e+01   1.3649860e+01   3.5788785e+01
+   3.5500000e+01   1.3724041e+01   3.5795174e+01
+   3.5500000e+01   1.3795636e+01   3.5799347e+01
+   3.5500000e+01   1.3896884e+01   3.5810504e+01
+   3.5500000e+01   1.4007802e+01   3.5819636e+01
+   3.5500000e+01   1.4119207e+01   3.5823149e+01
+   3.5500000e+01   1.4275008e+01   3.5831579e+01
+   3.5500000e+01   1.4495909e+01   3.5833537e+01
+   3.5500000e+01   1.4732562e+01   3.5837397e+01
+   3.5500000e+01   1.4997446e+01   3.5833347e+01
+   3.5500000e+01   1.5706603e+01   3.5837281e+01
+   3.5500000e+01   1.6613545e+01   3.5844116e+01
+   3.5500000e+01   1.7261298e+01   3.5850289e+01
+   3.5500000e+01   1.8017446e+01   3.5853281e+01
+   3.5500000e+01   1.8879421e+01   3.5867727e+01
+   3.5500000e+01   1.9534612e+01   3.5871678e+01
+   3.5500000e+01   1.9774289e+01   3.5868719e+01
+   3.5500000e+01   1.9845992e+01   3.5868760e+01
+   3.5500000e+01   1.9857645e+01   3.5869248e+01
+   3.5500000e+01   1.9858744e+01   3.5869810e+01
+   3.5500000e+01   1.9851843e+01   3.5868702e+01
+   3.5500000e+01   1.9795959e+01   3.5873008e+01
+   3.5550000e+01   2.5103554e+00   3.4896107e+01
+   3.5550000e+01   2.5061901e+00   3.4902207e+01
+   3.5550000e+01   2.5121488e+00   3.4907306e+01
+   3.5550000e+01   2.5413554e+00   3.4914521e+01
+   3.5550000e+01   2.5794959e+00   3.4919405e+01
+   3.5550000e+01   2.6451405e+00   3.4928736e+01
+   3.5550000e+01   2.7416281e+00   3.4940488e+01
+   3.5550000e+01   2.8990331e+00   3.4952802e+01
+   3.5550000e+01   3.0880496e+00   3.4961322e+01
+   3.5550000e+01   3.3536529e+00   3.4973281e+01
+   3.5550000e+01   3.5827603e+00   3.4972736e+01
+   3.5550000e+01   3.8425455e+00   3.4984074e+01
+   3.5550000e+01   4.3142231e+00   3.5036645e+01
+   3.5550000e+01   5.2460165e+00   3.5170777e+01
+   3.5550000e+01   6.6648926e+00   3.5382711e+01
+   3.5550000e+01   8.2569008e+00   3.5621149e+01
+   3.5550000e+01   9.2870413e+00   3.5722876e+01
+   3.5550000e+01   9.5328760e+00   3.5630785e+01
+   3.5550000e+01   9.9026364e+00   3.5537066e+01
+   3.5550000e+01   1.0298083e+01   3.5480702e+01
+   3.5550000e+01   1.0770826e+01   3.5489091e+01
+   3.5550000e+01   1.1255678e+01   3.5531455e+01
+   3.5550000e+01   1.1602421e+01   3.5566000e+01
+   3.5550000e+01   1.1914041e+01   3.5601397e+01
+   3.5550000e+01   1.2147298e+01   3.5626901e+01
+   3.5550000e+01   1.2343058e+01   3.5648785e+01
+   3.5550000e+01   1.2494471e+01   3.5664835e+01
+   3.5550000e+01   1.2597438e+01   3.5676273e+01
+   3.5550000e+01   1.2688149e+01   3.5686380e+01
+   3.5550000e+01   1.2785116e+01   3.5697636e+01
+   3.5550000e+01   1.2848306e+01   3.5705074e+01
+   3.5550000e+01   1.2914322e+01   3.5711992e+01
+   3.5550000e+01   1.3001628e+01   3.5721826e+01
+   3.5550000e+01   1.3051289e+01   3.5725025e+01
+   3.5550000e+01   1.3089132e+01   3.5727711e+01
+   3.5550000e+01   1.3142140e+01   3.5735612e+01
+   3.5550000e+01   1.3179091e+01   3.5738893e+01
+   3.5550000e+01   1.3225289e+01   3.5744364e+01
+   3.5550000e+01   1.3285380e+01   3.5750000e+01
+   3.5550000e+01   1.3351380e+01   3.5760339e+01
+   3.5550000e+01   1.3413512e+01   3.5768570e+01
+   3.5550000e+01   1.3485198e+01   3.5776364e+01
+   3.5550000e+01   1.3539636e+01   3.5778083e+01
+   3.5550000e+01   1.3586083e+01   3.5781620e+01
+   3.5550000e+01   1.3649860e+01   3.5788785e+01
+   3.5550000e+01   1.3724041e+01   3.5795174e+01
+   3.5550000e+01   1.3795636e+01   3.5799347e+01
+   3.5550000e+01   1.3896884e+01   3.5810504e+01
+   3.5550000e+01   1.4007802e+01   3.5819636e+01
+   3.5550000e+01   1.4119207e+01   3.5823149e+01
+   3.5550000e+01   1.4275008e+01   3.5831579e+01
+   3.5550000e+01   1.4495909e+01   3.5833537e+01
+   3.5550000e+01   1.4732562e+01   3.5837397e+01
+   3.5550000e+01   1.4997446e+01   3.5833347e+01
+   3.5550000e+01   1.5706603e+01   3.5837281e+01
+   3.5550000e+01   1.6613545e+01   3.5844116e+01
+   3.5550000e+01   1.7261298e+01   3.5850289e+01
+   3.5550000e+01   1.8017446e+01   3.5853281e+01
+   3.5550000e+01   1.8879421e+01   3.5867727e+01
+   3.5550000e+01   1.9534612e+01   3.5871678e+01
+   3.5550000e+01   1.9774289e+01   3.5868719e+01
+   3.5550000e+01   1.9845992e+01   3.5868760e+01
+   3.5550000e+01   1.9857645e+01   3.5869248e+01
+   3.5550000e+01   1.9858744e+01   3.5869810e+01
+   3.5550000e+01   1.9851843e+01   3.5868702e+01
+   3.5550000e+01   1.9795959e+01   3.5873008e+01
+   3.5600000e+01   2.5103554e+00   3.4896107e+01
+   3.5600000e+01   2.5061901e+00   3.4902207e+01
+   3.5600000e+01   2.5121488e+00   3.4907306e+01
+   3.5600000e+01   2.5413554e+00   3.4914521e+01
+   3.5600000e+01   2.5794959e+00   3.4919405e+01
+   3.5600000e+01   2.6451405e+00   3.4928736e+01
+   3.5600000e+01   2.7416281e+00   3.4940488e+01
+   3.5600000e+01   2.8990331e+00   3.4952802e+01
+   3.5600000e+01   3.0880496e+00   3.4961322e+01
+   3.5600000e+01   3.3536529e+00   3.4973281e+01
+   3.5600000e+01   3.5827603e+00   3.4972736e+01
+   3.5600000e+01   3.8425455e+00   3.4984074e+01
+   3.5600000e+01   4.3142231e+00   3.5036645e+01
+   3.5600000e+01   5.2460165e+00   3.5170777e+01
+   3.5600000e+01   6.6648926e+00   3.5382711e+01
+   3.5600000e+01   8.2569008e+00   3.5621149e+01
+   3.5600000e+01   9.2870413e+00   3.5722876e+01
+   3.5600000e+01   9.5328760e+00   3.5630785e+01
+   3.5600000e+01   9.9026364e+00   3.5537066e+01
+   3.5600000e+01   1.0298083e+01   3.5480702e+01
+   3.5600000e+01   1.0770826e+01   3.5489091e+01
+   3.5600000e+01   1.1255678e+01   3.5531455e+01
+   3.5600000e+01   1.1602421e+01   3.5566000e+01
+   3.5600000e+01   1.1914041e+01   3.5601397e+01
+   3.5600000e+01   1.2147298e+01   3.5626901e+01
+   3.5600000e+01   1.2343058e+01   3.5648785e+01
+   3.5600000e+01   1.2494471e+01   3.5664835e+01
+   3.5600000e+01   1.2597438e+01   3.5676273e+01
+   3.5600000e+01   1.2688149e+01   3.5686380e+01
+   3.5600000e+01   1.2785116e+01   3.5697636e+01
+   3.5600000e+01   1.2848306e+01   3.5705074e+01
+   3.5600000e+01   1.2914322e+01   3.5711992e+01
+   3.5600000e+01   1.3001628e+01   3.5721826e+01
+   3.5600000e+01   1.3051289e+01   3.5725025e+01
+   3.5600000e+01   1.3089132e+01   3.5727711e+01
+   3.5600000e+01   1.3142140e+01   3.5735612e+01
+   3.5600000e+01   1.3179091e+01   3.5738893e+01
+   3.5600000e+01   1.3225289e+01   3.5744364e+01
+   3.5600000e+01   1.3285380e+01   3.5750000e+01
+   3.5600000e+01   1.3351380e+01   3.5760339e+01
+   3.5600000e+01   1.3413512e+01   3.5768570e+01
+   3.5600000e+01   1.3485198e+01   3.5776364e+01
+   3.5600000e+01   1.3539636e+01   3.5778083e+01
+   3.5600000e+01   1.3586083e+01   3.5781620e+01
+   3.5600000e+01   1.3649860e+01   3.5788785e+01
+   3.5600000e+01   1.3724041e+01   3.5795174e+01
+   3.5600000e+01   1.3795636e+01   3.5799347e+01
+   3.5600000e+01   1.3896884e+01   3.5810504e+01
+   3.5600000e+01   1.4007802e+01   3.5819636e+01
+   3.5600000e+01   1.4119207e+01   3.5823149e+01
+   3.5600000e+01   1.4275008e+01   3.5831579e+01
+   3.5600000e+01   1.4495909e+01   3.5833537e+01
+   3.5600000e+01   1.4732562e+01   3.5837397e+01
+   3.5600000e+01   1.4997446e+01   3.5833347e+01
+   3.5600000e+01   1.5706603e+01   3.5837281e+01
+   3.5600000e+01   1.6613545e+01   3.5844116e+01
+   3.5600000e+01   1.7261298e+01   3.5850289e+01
+   3.5600000e+01   1.8017446e+01   3.5853281e+01
+   3.5600000e+01   1.8879421e+01   3.5867727e+01
+   3.5600000e+01   1.9534612e+01   3.5871678e+01
+   3.5600000e+01   1.9774289e+01   3.5868719e+01
+   3.5600000e+01   1.9845992e+01   3.5868760e+01
+   3.5600000e+01   1.9857645e+01   3.5869248e+01
+   3.5600000e+01   1.9858744e+01   3.5869810e+01
+   3.5600000e+01   1.9851843e+01   3.5868702e+01
+   3.5600000e+01   1.9795959e+01   3.5873008e+01
+   3.5650000e+01   2.5103554e+00   3.4896107e+01
+   3.5650000e+01   2.5061901e+00   3.4902207e+01
+   3.5650000e+01   2.5121488e+00   3.4907306e+01
+   3.5650000e+01   2.5413554e+00   3.4914521e+01
+   3.5650000e+01   2.5794959e+00   3.4919405e+01
+   3.5650000e+01   2.6451405e+00   3.4928736e+01
+   3.5650000e+01   2.7416281e+00   3.4940488e+01
+   3.5650000e+01   2.8990331e+00   3.4952802e+01
+   3.5650000e+01   3.0880496e+00   3.4961322e+01
+   3.5650000e+01   3.3536529e+00   3.4973281e+01
+   3.5650000e+01   3.5827603e+00   3.4972736e+01
+   3.5650000e+01   3.8425455e+00   3.4984074e+01
+   3.5650000e+01   4.3142231e+00   3.5036645e+01
+   3.5650000e+01   5.2460165e+00   3.5170777e+01
+   3.5650000e+01   6.6648926e+00   3.5382711e+01
+   3.5650000e+01   8.2569008e+00   3.5621149e+01
+   3.5650000e+01   9.2870413e+00   3.5722876e+01
+   3.5650000e+01   9.5328760e+00   3.5630785e+01
+   3.5650000e+01   9.9026364e+00   3.5537066e+01
+   3.5650000e+01   1.0298083e+01   3.5480702e+01
+   3.5650000e+01   1.0770826e+01   3.5489091e+01
+   3.5650000e+01   1.1255678e+01   3.5531455e+01
+   3.5650000e+01   1.1602421e+01   3.5566000e+01
+   3.5650000e+01   1.1914041e+01   3.5601397e+01
+   3.5650000e+01   1.2147298e+01   3.5626901e+01
+   3.5650000e+01   1.2343058e+01   3.5648785e+01
+   3.5650000e+01   1.2494471e+01   3.5664835e+01
+   3.5650000e+01   1.2597438e+01   3.5676273e+01
+   3.5650000e+01   1.2688149e+01   3.5686380e+01
+   3.5650000e+01   1.2785116e+01   3.5697636e+01
+   3.5650000e+01   1.2848306e+01   3.5705074e+01
+   3.5650000e+01   1.2914322e+01   3.5711992e+01
+   3.5650000e+01   1.3001628e+01   3.5721826e+01
+   3.5650000e+01   1.3051289e+01   3.5725025e+01
+   3.5650000e+01   1.3089132e+01   3.5727711e+01
+   3.5650000e+01   1.3142140e+01   3.5735612e+01
+   3.5650000e+01   1.3179091e+01   3.5738893e+01
+   3.5650000e+01   1.3225289e+01   3.5744364e+01
+   3.5650000e+01   1.3285380e+01   3.5750000e+01
+   3.5650000e+01   1.3351380e+01   3.5760339e+01
+   3.5650000e+01   1.3413512e+01   3.5768570e+01
+   3.5650000e+01   1.3485198e+01   3.5776364e+01
+   3.5650000e+01   1.3539636e+01   3.5778083e+01
+   3.5650000e+01   1.3586083e+01   3.5781620e+01
+   3.5650000e+01   1.3649860e+01   3.5788785e+01
+   3.5650000e+01   1.3724041e+01   3.5795174e+01
+   3.5650000e+01   1.3795636e+01   3.5799347e+01
+   3.5650000e+01   1.3896884e+01   3.5810504e+01
+   3.5650000e+01   1.4007802e+01   3.5819636e+01
+   3.5650000e+01   1.4119207e+01   3.5823149e+01
+   3.5650000e+01   1.4275008e+01   3.5831579e+01
+   3.5650000e+01   1.4495909e+01   3.5833537e+01
+   3.5650000e+01   1.4732562e+01   3.5837397e+01
+   3.5650000e+01   1.4997446e+01   3.5833347e+01
+   3.5650000e+01   1.5706603e+01   3.5837281e+01
+   3.5650000e+01   1.6613545e+01   3.5844116e+01
+   3.5650000e+01   1.7261298e+01   3.5850289e+01
+   3.5650000e+01   1.8017446e+01   3.5853281e+01
+   3.5650000e+01   1.8879421e+01   3.5867727e+01
+   3.5650000e+01   1.9534612e+01   3.5871678e+01
+   3.5650000e+01   1.9774289e+01   3.5868719e+01
+   3.5650000e+01   1.9845992e+01   3.5868760e+01
+   3.5650000e+01   1.9857645e+01   3.5869248e+01
+   3.5650000e+01   1.9858744e+01   3.5869810e+01
+   3.5650000e+01   1.9851843e+01   3.5868702e+01
+   3.5650000e+01   1.9795959e+01   3.5873008e+01
+   3.5700000e+01   2.5103554e+00   3.4896107e+01
+   3.5700000e+01   2.5061901e+00   3.4902207e+01
+   3.5700000e+01   2.5121488e+00   3.4907306e+01
+   3.5700000e+01   2.5413554e+00   3.4914521e+01
+   3.5700000e+01   2.5794959e+00   3.4919405e+01
+   3.5700000e+01   2.6451405e+00   3.4928736e+01
+   3.5700000e+01   2.7416281e+00   3.4940488e+01
+   3.5700000e+01   2.8990331e+00   3.4952802e+01
+   3.5700000e+01   3.0880496e+00   3.4961322e+01
+   3.5700000e+01   3.3536529e+00   3.4973281e+01
+   3.5700000e+01   3.5827603e+00   3.4972736e+01
+   3.5700000e+01   3.8425455e+00   3.4984074e+01
+   3.5700000e+01   4.3142231e+00   3.5036645e+01
+   3.5700000e+01   5.2460165e+00   3.5170777e+01
+   3.5700000e+01   6.6648926e+00   3.5382711e+01
+   3.5700000e+01   8.2569008e+00   3.5621149e+01
+   3.5700000e+01   9.2870413e+00   3.5722876e+01
+   3.5700000e+01   9.5328760e+00   3.5630785e+01
+   3.5700000e+01   9.9026364e+00   3.5537066e+01
+   3.5700000e+01   1.0298083e+01   3.5480702e+01
+   3.5700000e+01   1.0770826e+01   3.5489091e+01
+   3.5700000e+01   1.1255678e+01   3.5531455e+01
+   3.5700000e+01   1.1602421e+01   3.5566000e+01
+   3.5700000e+01   1.1914041e+01   3.5601397e+01
+   3.5700000e+01   1.2147298e+01   3.5626901e+01
+   3.5700000e+01   1.2343058e+01   3.5648785e+01
+   3.5700000e+01   1.2494471e+01   3.5664835e+01
+   3.5700000e+01   1.2597438e+01   3.5676273e+01
+   3.5700000e+01   1.2688149e+01   3.5686380e+01
+   3.5700000e+01   1.2785116e+01   3.5697636e+01
+   3.5700000e+01   1.2848306e+01   3.5705074e+01
+   3.5700000e+01   1.2914322e+01   3.5711992e+01
+   3.5700000e+01   1.3001628e+01   3.5721826e+01
+   3.5700000e+01   1.3051289e+01   3.5725025e+01
+   3.5700000e+01   1.3089132e+01   3.5727711e+01
+   3.5700000e+01   1.3142140e+01   3.5735612e+01
+   3.5700000e+01   1.3179091e+01   3.5738893e+01
+   3.5700000e+01   1.3225289e+01   3.5744364e+01
+   3.5700000e+01   1.3285380e+01   3.5750000e+01
+   3.5700000e+01   1.3351380e+01   3.5760339e+01
+   3.5700000e+01   1.3413512e+01   3.5768570e+01
+   3.5700000e+01   1.3485198e+01   3.5776364e+01
+   3.5700000e+01   1.3539636e+01   3.5778083e+01
+   3.5700000e+01   1.3586083e+01   3.5781620e+01
+   3.5700000e+01   1.3649860e+01   3.5788785e+01
+   3.5700000e+01   1.3724041e+01   3.5795174e+01
+   3.5700000e+01   1.3795636e+01   3.5799347e+01
+   3.5700000e+01   1.3896884e+01   3.5810504e+01
+   3.5700000e+01   1.4007802e+01   3.5819636e+01
+   3.5700000e+01   1.4119207e+01   3.5823149e+01
+   3.5700000e+01   1.4275008e+01   3.5831579e+01
+   3.5700000e+01   1.4495909e+01   3.5833537e+01
+   3.5700000e+01   1.4732562e+01   3.5837397e+01
+   3.5700000e+01   1.4997446e+01   3.5833347e+01
+   3.5700000e+01   1.5706603e+01   3.5837281e+01
+   3.5700000e+01   1.6613545e+01   3.5844116e+01
+   3.5700000e+01   1.7261298e+01   3.5850289e+01
+   3.5700000e+01   1.8017446e+01   3.5853281e+01
+   3.5700000e+01   1.8879421e+01   3.5867727e+01
+   3.5700000e+01   1.9534612e+01   3.5871678e+01
+   3.5700000e+01   1.9774289e+01   3.5868719e+01
+   3.5700000e+01   1.9845992e+01   3.5868760e+01
+   3.5700000e+01   1.9857645e+01   3.5869248e+01
+   3.5700000e+01   1.9858744e+01   3.5869810e+01
+   3.5700000e+01   1.9851843e+01   3.5868702e+01
+   3.5700000e+01   1.9795959e+01   3.5873008e+01
+   3.5750000e+01   2.5103554e+00   3.4896107e+01
+   3.5750000e+01   2.5061901e+00   3.4902207e+01
+   3.5750000e+01   2.5121488e+00   3.4907306e+01
+   3.5750000e+01   2.5413554e+00   3.4914521e+01
+   3.5750000e+01   2.5794959e+00   3.4919405e+01
+   3.5750000e+01   2.6451405e+00   3.4928736e+01
+   3.5750000e+01   2.7416281e+00   3.4940488e+01
+   3.5750000e+01   2.8990331e+00   3.4952802e+01
+   3.5750000e+01   3.0880496e+00   3.4961322e+01
+   3.5750000e+01   3.3536529e+00   3.4973281e+01
+   3.5750000e+01   3.5827603e+00   3.4972736e+01
+   3.5750000e+01   3.8425455e+00   3.4984074e+01
+   3.5750000e+01   4.3142231e+00   3.5036645e+01
+   3.5750000e+01   5.2460165e+00   3.5170777e+01
+   3.5750000e+01   6.6648926e+00   3.5382711e+01
+   3.5750000e+01   8.2569008e+00   3.5621149e+01
+   3.5750000e+01   9.2870413e+00   3.5722876e+01
+   3.5750000e+01   9.5328760e+00   3.5630785e+01
+   3.5750000e+01   9.9026364e+00   3.5537066e+01
+   3.5750000e+01   1.0298083e+01   3.5480702e+01
+   3.5750000e+01   1.0770826e+01   3.5489091e+01
+   3.5750000e+01   1.1255678e+01   3.5531455e+01
+   3.5750000e+01   1.1602421e+01   3.5566000e+01
+   3.5750000e+01   1.1914041e+01   3.5601397e+01
+   3.5750000e+01   1.2147298e+01   3.5626901e+01
+   3.5750000e+01   1.2343058e+01   3.5648785e+01
+   3.5750000e+01   1.2494471e+01   3.5664835e+01
+   3.5750000e+01   1.2597438e+01   3.5676273e+01
+   3.5750000e+01   1.2688149e+01   3.5686380e+01
+   3.5750000e+01   1.2785116e+01   3.5697636e+01
+   3.5750000e+01   1.2848306e+01   3.5705074e+01
+   3.5750000e+01   1.2914322e+01   3.5711992e+01
+   3.5750000e+01   1.3001628e+01   3.5721826e+01
+   3.5750000e+01   1.3051289e+01   3.5725025e+01
+   3.5750000e+01   1.3089132e+01   3.5727711e+01
+   3.5750000e+01   1.3142140e+01   3.5735612e+01
+   3.5750000e+01   1.3179091e+01   3.5738893e+01
+   3.5750000e+01   1.3225289e+01   3.5744364e+01
+   3.5750000e+01   1.3285380e+01   3.5750000e+01
+   3.5750000e+01   1.3351380e+01   3.5760339e+01
+   3.5750000e+01   1.3413512e+01   3.5768570e+01
+   3.5750000e+01   1.3485198e+01   3.5776364e+01
+   3.5750000e+01   1.3539636e+01   3.5778083e+01
+   3.5750000e+01   1.3586083e+01   3.5781620e+01
+   3.5750000e+01   1.3649860e+01   3.5788785e+01
+   3.5750000e+01   1.3724041e+01   3.5795174e+01
+   3.5750000e+01   1.3795636e+01   3.5799347e+01
+   3.5750000e+01   1.3896884e+01   3.5810504e+01
+   3.5750000e+01   1.4007802e+01   3.5819636e+01
+   3.5750000e+01   1.4119207e+01   3.5823149e+01
+   3.5750000e+01   1.4275008e+01   3.5831579e+01
+   3.5750000e+01   1.4495909e+01   3.5833537e+01
+   3.5750000e+01   1.4732562e+01   3.5837397e+01
+   3.5750000e+01   1.4997446e+01   3.5833347e+01
+   3.5750000e+01   1.5706603e+01   3.5837281e+01
+   3.5750000e+01   1.6613545e+01   3.5844116e+01
+   3.5750000e+01   1.7261298e+01   3.5850289e+01
+   3.5750000e+01   1.8017446e+01   3.5853281e+01
+   3.5750000e+01   1.8879421e+01   3.5867727e+01
+   3.5750000e+01   1.9534612e+01   3.5871678e+01
+   3.5750000e+01   1.9774289e+01   3.5868719e+01
+   3.5750000e+01   1.9845992e+01   3.5868760e+01
+   3.5750000e+01   1.9857645e+01   3.5869248e+01
+   3.5750000e+01   1.9858744e+01   3.5869810e+01
+   3.5750000e+01   1.9851843e+01   3.5868702e+01
+   3.5750000e+01   1.9795959e+01   3.5873008e+01
+   3.5800000e+01   2.5103554e+00   3.4896107e+01
+   3.5800000e+01   2.5061901e+00   3.4902207e+01
+   3.5800000e+01   2.5121488e+00   3.4907306e+01
+   3.5800000e+01   2.5413554e+00   3.4914521e+01
+   3.5800000e+01   2.5794959e+00   3.4919405e+01
+   3.5800000e+01   2.6451405e+00   3.4928736e+01
+   3.5800000e+01   2.7416281e+00   3.4940488e+01
+   3.5800000e+01   2.8990331e+00   3.4952802e+01
+   3.5800000e+01   3.0880496e+00   3.4961322e+01
+   3.5800000e+01   3.3536529e+00   3.4973281e+01
+   3.5800000e+01   3.5827603e+00   3.4972736e+01
+   3.5800000e+01   3.8425455e+00   3.4984074e+01
+   3.5800000e+01   4.3142231e+00   3.5036645e+01
+   3.5800000e+01   5.2460165e+00   3.5170777e+01
+   3.5800000e+01   6.6648926e+00   3.5382711e+01
+   3.5800000e+01   8.2569008e+00   3.5621149e+01
+   3.5800000e+01   9.2870413e+00   3.5722876e+01
+   3.5800000e+01   9.5328760e+00   3.5630785e+01
+   3.5800000e+01   9.9026364e+00   3.5537066e+01
+   3.5800000e+01   1.0298083e+01   3.5480702e+01
+   3.5800000e+01   1.0770826e+01   3.5489091e+01
+   3.5800000e+01   1.1255678e+01   3.5531455e+01
+   3.5800000e+01   1.1602421e+01   3.5566000e+01
+   3.5800000e+01   1.1914041e+01   3.5601397e+01
+   3.5800000e+01   1.2147298e+01   3.5626901e+01
+   3.5800000e+01   1.2343058e+01   3.5648785e+01
+   3.5800000e+01   1.2494471e+01   3.5664835e+01
+   3.5800000e+01   1.2597438e+01   3.5676273e+01
+   3.5800000e+01   1.2688149e+01   3.5686380e+01
+   3.5800000e+01   1.2785116e+01   3.5697636e+01
+   3.5800000e+01   1.2848306e+01   3.5705074e+01
+   3.5800000e+01   1.2914322e+01   3.5711992e+01
+   3.5800000e+01   1.3001628e+01   3.5721826e+01
+   3.5800000e+01   1.3051289e+01   3.5725025e+01
+   3.5800000e+01   1.3089132e+01   3.5727711e+01
+   3.5800000e+01   1.3142140e+01   3.5735612e+01
+   3.5800000e+01   1.3179091e+01   3.5738893e+01
+   3.5800000e+01   1.3225289e+01   3.5744364e+01
+   3.5800000e+01   1.3285380e+01   3.5750000e+01
+   3.5800000e+01   1.3351380e+01   3.5760339e+01
+   3.5800000e+01   1.3413512e+01   3.5768570e+01
+   3.5800000e+01   1.3485198e+01   3.5776364e+01
+   3.5800000e+01   1.3539636e+01   3.5778083e+01
+   3.5800000e+01   1.3586083e+01   3.5781620e+01
+   3.5800000e+01   1.3649860e+01   3.5788785e+01
+   3.5800000e+01   1.3724041e+01   3.5795174e+01
+   3.5800000e+01   1.3795636e+01   3.5799347e+01
+   3.5800000e+01   1.3896884e+01   3.5810504e+01
+   3.5800000e+01   1.4007802e+01   3.5819636e+01
+   3.5800000e+01   1.4119207e+01   3.5823149e+01
+   3.5800000e+01   1.4275008e+01   3.5831579e+01
+   3.5800000e+01   1.4495909e+01   3.5833537e+01
+   3.5800000e+01   1.4732562e+01   3.5837397e+01
+   3.5800000e+01   1.4997446e+01   3.5833347e+01
+   3.5800000e+01   1.5706603e+01   3.5837281e+01
+   3.5800000e+01   1.6613545e+01   3.5844116e+01
+   3.5800000e+01   1.7261298e+01   3.5850289e+01
+   3.5800000e+01   1.8017446e+01   3.5853281e+01
+   3.5800000e+01   1.8879421e+01   3.5867727e+01
+   3.5800000e+01   1.9534612e+01   3.5871678e+01
+   3.5800000e+01   1.9774289e+01   3.5868719e+01
+   3.5800000e+01   1.9845992e+01   3.5868760e+01
+   3.5800000e+01   1.9857645e+01   3.5869248e+01
+   3.5800000e+01   1.9858744e+01   3.5869810e+01
+   3.5800000e+01   1.9851843e+01   3.5868702e+01
+   3.5800000e+01   1.9795959e+01   3.5873008e+01
+   3.5850000e+01   2.5103554e+00   3.4896107e+01
+   3.5850000e+01   2.5061901e+00   3.4902207e+01
+   3.5850000e+01   2.5121488e+00   3.4907306e+01
+   3.5850000e+01   2.5413554e+00   3.4914521e+01
+   3.5850000e+01   2.5794959e+00   3.4919405e+01
+   3.5850000e+01   2.6451405e+00   3.4928736e+01
+   3.5850000e+01   2.7416281e+00   3.4940488e+01
+   3.5850000e+01   2.8990331e+00   3.4952802e+01
+   3.5850000e+01   3.0880496e+00   3.4961322e+01
+   3.5850000e+01   3.3536529e+00   3.4973281e+01
+   3.5850000e+01   3.5827603e+00   3.4972736e+01
+   3.5850000e+01   3.8425455e+00   3.4984074e+01
+   3.5850000e+01   4.3142231e+00   3.5036645e+01
+   3.5850000e+01   5.2460165e+00   3.5170777e+01
+   3.5850000e+01   6.6648926e+00   3.5382711e+01
+   3.5850000e+01   8.2569008e+00   3.5621149e+01
+   3.5850000e+01   9.2870413e+00   3.5722876e+01
+   3.5850000e+01   9.5328760e+00   3.5630785e+01
+   3.5850000e+01   9.9026364e+00   3.5537066e+01
+   3.5850000e+01   1.0298083e+01   3.5480702e+01
+   3.5850000e+01   1.0770826e+01   3.5489091e+01
+   3.5850000e+01   1.1255678e+01   3.5531455e+01
+   3.5850000e+01   1.1602421e+01   3.5566000e+01
+   3.5850000e+01   1.1914041e+01   3.5601397e+01
+   3.5850000e+01   1.2147298e+01   3.5626901e+01
+   3.5850000e+01   1.2343058e+01   3.5648785e+01
+   3.5850000e+01   1.2494471e+01   3.5664835e+01
+   3.5850000e+01   1.2597438e+01   3.5676273e+01
+   3.5850000e+01   1.2688149e+01   3.5686380e+01
+   3.5850000e+01   1.2785116e+01   3.5697636e+01
+   3.5850000e+01   1.2848306e+01   3.5705074e+01
+   3.5850000e+01   1.2914322e+01   3.5711992e+01
+   3.5850000e+01   1.3001628e+01   3.5721826e+01
+   3.5850000e+01   1.3051289e+01   3.5725025e+01
+   3.5850000e+01   1.3089132e+01   3.5727711e+01
+   3.5850000e+01   1.3142140e+01   3.5735612e+01
+   3.5850000e+01   1.3179091e+01   3.5738893e+01
+   3.5850000e+01   1.3225289e+01   3.5744364e+01
+   3.5850000e+01   1.3285380e+01   3.5750000e+01
+   3.5850000e+01   1.3351380e+01   3.5760339e+01
+   3.5850000e+01   1.3413512e+01   3.5768570e+01
+   3.5850000e+01   1.3485198e+01   3.5776364e+01
+   3.5850000e+01   1.3539636e+01   3.5778083e+01
+   3.5850000e+01   1.3586083e+01   3.5781620e+01
+   3.5850000e+01   1.3649860e+01   3.5788785e+01
+   3.5850000e+01   1.3724041e+01   3.5795174e+01
+   3.5850000e+01   1.3795636e+01   3.5799347e+01
+   3.5850000e+01   1.3896884e+01   3.5810504e+01
+   3.5850000e+01   1.4007802e+01   3.5819636e+01
+   3.5850000e+01   1.4119207e+01   3.5823149e+01
+   3.5850000e+01   1.4275008e+01   3.5831579e+01
+   3.5850000e+01   1.4495909e+01   3.5833537e+01
+   3.5850000e+01   1.4732562e+01   3.5837397e+01
+   3.5850000e+01   1.4997446e+01   3.5833347e+01
+   3.5850000e+01   1.5706603e+01   3.5837281e+01
+   3.5850000e+01   1.6613545e+01   3.5844116e+01
+   3.5850000e+01   1.7261298e+01   3.5850289e+01
+   3.5850000e+01   1.8017446e+01   3.5853281e+01
+   3.5850000e+01   1.8879421e+01   3.5867727e+01
+   3.5850000e+01   1.9534612e+01   3.5871678e+01
+   3.5850000e+01   1.9774289e+01   3.5868719e+01
+   3.5850000e+01   1.9845992e+01   3.5868760e+01
+   3.5850000e+01   1.9857645e+01   3.5869248e+01
+   3.5850000e+01   1.9858744e+01   3.5869810e+01
+   3.5850000e+01   1.9851843e+01   3.5868702e+01
+   3.5850000e+01   1.9795959e+01   3.5873008e+01
+   3.5900000e+01   2.5103554e+00   3.4896107e+01
+   3.5900000e+01   2.5061901e+00   3.4902207e+01
+   3.5900000e+01   2.5121488e+00   3.4907306e+01
+   3.5900000e+01   2.5413554e+00   3.4914521e+01
+   3.5900000e+01   2.5794959e+00   3.4919405e+01
+   3.5900000e+01   2.6451405e+00   3.4928736e+01
+   3.5900000e+01   2.7416281e+00   3.4940488e+01
+   3.5900000e+01   2.8990331e+00   3.4952802e+01
+   3.5900000e+01   3.0880496e+00   3.4961322e+01
+   3.5900000e+01   3.3536529e+00   3.4973281e+01
+   3.5900000e+01   3.5827603e+00   3.4972736e+01
+   3.5900000e+01   3.8425455e+00   3.4984074e+01
+   3.5900000e+01   4.3142231e+00   3.5036645e+01
+   3.5900000e+01   5.2460165e+00   3.5170777e+01
+   3.5900000e+01   6.6648926e+00   3.5382711e+01
+   3.5900000e+01   8.2569008e+00   3.5621149e+01
+   3.5900000e+01   9.2870413e+00   3.5722876e+01
+   3.5900000e+01   9.5328760e+00   3.5630785e+01
+   3.5900000e+01   9.9026364e+00   3.5537066e+01
+   3.5900000e+01   1.0298083e+01   3.5480702e+01
+   3.5900000e+01   1.0770826e+01   3.5489091e+01
+   3.5900000e+01   1.1255678e+01   3.5531455e+01
+   3.5900000e+01   1.1602421e+01   3.5566000e+01
+   3.5900000e+01   1.1914041e+01   3.5601397e+01
+   3.5900000e+01   1.2147298e+01   3.5626901e+01
+   3.5900000e+01   1.2343058e+01   3.5648785e+01
+   3.5900000e+01   1.2494471e+01   3.5664835e+01
+   3.5900000e+01   1.2597438e+01   3.5676273e+01
+   3.5900000e+01   1.2688149e+01   3.5686380e+01
+   3.5900000e+01   1.2785116e+01   3.5697636e+01
+   3.5900000e+01   1.2848306e+01   3.5705074e+01
+   3.5900000e+01   1.2914322e+01   3.5711992e+01
+   3.5900000e+01   1.3001628e+01   3.5721826e+01
+   3.5900000e+01   1.3051289e+01   3.5725025e+01
+   3.5900000e+01   1.3089132e+01   3.5727711e+01
+   3.5900000e+01   1.3142140e+01   3.5735612e+01
+   3.5900000e+01   1.3179091e+01   3.5738893e+01
+   3.5900000e+01   1.3225289e+01   3.5744364e+01
+   3.5900000e+01   1.3285380e+01   3.5750000e+01
+   3.5900000e+01   1.3351380e+01   3.5760339e+01
+   3.5900000e+01   1.3413512e+01   3.5768570e+01
+   3.5900000e+01   1.3485198e+01   3.5776364e+01
+   3.5900000e+01   1.3539636e+01   3.5778083e+01
+   3.5900000e+01   1.3586083e+01   3.5781620e+01
+   3.5900000e+01   1.3649860e+01   3.5788785e+01
+   3.5900000e+01   1.3724041e+01   3.5795174e+01
+   3.5900000e+01   1.3795636e+01   3.5799347e+01
+   3.5900000e+01   1.3896884e+01   3.5810504e+01
+   3.5900000e+01   1.4007802e+01   3.5819636e+01
+   3.5900000e+01   1.4119207e+01   3.5823149e+01
+   3.5900000e+01   1.4275008e+01   3.5831579e+01
+   3.5900000e+01   1.4495909e+01   3.5833537e+01
+   3.5900000e+01   1.4732562e+01   3.5837397e+01
+   3.5900000e+01   1.4997446e+01   3.5833347e+01
+   3.5900000e+01   1.5706603e+01   3.5837281e+01
+   3.5900000e+01   1.6613545e+01   3.5844116e+01
+   3.5900000e+01   1.7261298e+01   3.5850289e+01
+   3.5900000e+01   1.8017446e+01   3.5853281e+01
+   3.5900000e+01   1.8879421e+01   3.5867727e+01
+   3.5900000e+01   1.9534612e+01   3.5871678e+01
+   3.5900000e+01   1.9774289e+01   3.5868719e+01
+   3.5900000e+01   1.9845992e+01   3.5868760e+01
+   3.5900000e+01   1.9857645e+01   3.5869248e+01
+   3.5900000e+01   1.9858744e+01   3.5869810e+01
+   3.5900000e+01   1.9851843e+01   3.5868702e+01
+   3.5900000e+01   1.9795959e+01   3.5873008e+01
+   3.5950000e+01   2.5103554e+00   3.4896107e+01
+   3.5950000e+01   2.5061901e+00   3.4902207e+01
+   3.5950000e+01   2.5121488e+00   3.4907306e+01
+   3.5950000e+01   2.5413554e+00   3.4914521e+01
+   3.5950000e+01   2.5794959e+00   3.4919405e+01
+   3.5950000e+01   2.6451405e+00   3.4928736e+01
+   3.5950000e+01   2.7416281e+00   3.4940488e+01
+   3.5950000e+01   2.8990331e+00   3.4952802e+01
+   3.5950000e+01   3.0880496e+00   3.4961322e+01
+   3.5950000e+01   3.3536529e+00   3.4973281e+01
+   3.5950000e+01   3.5827603e+00   3.4972736e+01
+   3.5950000e+01   3.8425455e+00   3.4984074e+01
+   3.5950000e+01   4.3142231e+00   3.5036645e+01
+   3.5950000e+01   5.2460165e+00   3.5170777e+01
+   3.5950000e+01   6.6648926e+00   3.5382711e+01
+   3.5950000e+01   8.2569008e+00   3.5621149e+01
+   3.5950000e+01   9.2870413e+00   3.5722876e+01
+   3.5950000e+01   9.5328760e+00   3.5630785e+01
+   3.5950000e+01   9.9026364e+00   3.5537066e+01
+   3.5950000e+01   1.0298083e+01   3.5480702e+01
+   3.5950000e+01   1.0770826e+01   3.5489091e+01
+   3.5950000e+01   1.1255678e+01   3.5531455e+01
+   3.5950000e+01   1.1602421e+01   3.5566000e+01
+   3.5950000e+01   1.1914041e+01   3.5601397e+01
+   3.5950000e+01   1.2147298e+01   3.5626901e+01
+   3.5950000e+01   1.2343058e+01   3.5648785e+01
+   3.5950000e+01   1.2494471e+01   3.5664835e+01
+   3.5950000e+01   1.2597438e+01   3.5676273e+01
+   3.5950000e+01   1.2688149e+01   3.5686380e+01
+   3.5950000e+01   1.2785116e+01   3.5697636e+01
+   3.5950000e+01   1.2848306e+01   3.5705074e+01
+   3.5950000e+01   1.2914322e+01   3.5711992e+01
+   3.5950000e+01   1.3001628e+01   3.5721826e+01
+   3.5950000e+01   1.3051289e+01   3.5725025e+01
+   3.5950000e+01   1.3089132e+01   3.5727711e+01
+   3.5950000e+01   1.3142140e+01   3.5735612e+01
+   3.5950000e+01   1.3179091e+01   3.5738893e+01
+   3.5950000e+01   1.3225289e+01   3.5744364e+01
+   3.5950000e+01   1.3285380e+01   3.5750000e+01
+   3.5950000e+01   1.3351380e+01   3.5760339e+01
+   3.5950000e+01   1.3413512e+01   3.5768570e+01
+   3.5950000e+01   1.3485198e+01   3.5776364e+01
+   3.5950000e+01   1.3539636e+01   3.5778083e+01
+   3.5950000e+01   1.3586083e+01   3.5781620e+01
+   3.5950000e+01   1.3649860e+01   3.5788785e+01
+   3.5950000e+01   1.3724041e+01   3.5795174e+01
+   3.5950000e+01   1.3795636e+01   3.5799347e+01
+   3.5950000e+01   1.3896884e+01   3.5810504e+01
+   3.5950000e+01   1.4007802e+01   3.5819636e+01
+   3.5950000e+01   1.4119207e+01   3.5823149e+01
+   3.5950000e+01   1.4275008e+01   3.5831579e+01
+   3.5950000e+01   1.4495909e+01   3.5833537e+01
+   3.5950000e+01   1.4732562e+01   3.5837397e+01
+   3.5950000e+01   1.4997446e+01   3.5833347e+01
+   3.5950000e+01   1.5706603e+01   3.5837281e+01
+   3.5950000e+01   1.6613545e+01   3.5844116e+01
+   3.5950000e+01   1.7261298e+01   3.5850289e+01
+   3.5950000e+01   1.8017446e+01   3.5853281e+01
+   3.5950000e+01   1.8879421e+01   3.5867727e+01
+   3.5950000e+01   1.9534612e+01   3.5871678e+01
+   3.5950000e+01   1.9774289e+01   3.5868719e+01
+   3.5950000e+01   1.9845992e+01   3.5868760e+01
+   3.5950000e+01   1.9857645e+01   3.5869248e+01
+   3.5950000e+01   1.9858744e+01   3.5869810e+01
+   3.5950000e+01   1.9851843e+01   3.5868702e+01
+   3.5950000e+01   1.9795959e+01   3.5873008e+01
+   3.6000000e+01   2.5103554e+00   3.4896107e+01
+   3.6000000e+01   2.5061901e+00   3.4902207e+01
+   3.6000000e+01   2.5121488e+00   3.4907306e+01
+   3.6000000e+01   2.5413554e+00   3.4914521e+01
+   3.6000000e+01   2.5794959e+00   3.4919405e+01
+   3.6000000e+01   2.6451405e+00   3.4928736e+01
+   3.6000000e+01   2.7416281e+00   3.4940488e+01
+   3.6000000e+01   2.8990331e+00   3.4952802e+01
+   3.6000000e+01   3.0880496e+00   3.4961322e+01
+   3.6000000e+01   3.3536529e+00   3.4973281e+01
+   3.6000000e+01   3.5827603e+00   3.4972736e+01
+   3.6000000e+01   3.8425455e+00   3.4984074e+01
+   3.6000000e+01   4.3142231e+00   3.5036645e+01
+   3.6000000e+01   5.2460165e+00   3.5170777e+01
+   3.6000000e+01   6.6648926e+00   3.5382711e+01
+   3.6000000e+01   8.2569008e+00   3.5621149e+01
+   3.6000000e+01   9.2870413e+00   3.5722876e+01
+   3.6000000e+01   9.5328760e+00   3.5630785e+01
+   3.6000000e+01   9.9026364e+00   3.5537066e+01
+   3.6000000e+01   1.0298083e+01   3.5480702e+01
+   3.6000000e+01   1.0770826e+01   3.5489091e+01
+   3.6000000e+01   1.1255678e+01   3.5531455e+01
+   3.6000000e+01   1.1602421e+01   3.5566000e+01
+   3.6000000e+01   1.1914041e+01   3.5601397e+01
+   3.6000000e+01   1.2147298e+01   3.5626901e+01
+   3.6000000e+01   1.2343058e+01   3.5648785e+01
+   3.6000000e+01   1.2494471e+01   3.5664835e+01
+   3.6000000e+01   1.2597438e+01   3.5676273e+01
+   3.6000000e+01   1.2688149e+01   3.5686380e+01
+   3.6000000e+01   1.2785116e+01   3.5697636e+01
+   3.6000000e+01   1.2848306e+01   3.5705074e+01
+   3.6000000e+01   1.2914322e+01   3.5711992e+01
+   3.6000000e+01   1.3001628e+01   3.5721826e+01
+   3.6000000e+01   1.3051289e+01   3.5725025e+01
+   3.6000000e+01   1.3089132e+01   3.5727711e+01
+   3.6000000e+01   1.3142140e+01   3.5735612e+01
+   3.6000000e+01   1.3179091e+01   3.5738893e+01
+   3.6000000e+01   1.3225289e+01   3.5744364e+01
+   3.6000000e+01   1.3285380e+01   3.5750000e+01
+   3.6000000e+01   1.3351380e+01   3.5760339e+01
+   3.6000000e+01   1.3413512e+01   3.5768570e+01
+   3.6000000e+01   1.3485198e+01   3.5776364e+01
+   3.6000000e+01   1.3539636e+01   3.5778083e+01
+   3.6000000e+01   1.3586083e+01   3.5781620e+01
+   3.6000000e+01   1.3649860e+01   3.5788785e+01
+   3.6000000e+01   1.3724041e+01   3.5795174e+01
+   3.6000000e+01   1.3795636e+01   3.5799347e+01
+   3.6000000e+01   1.3896884e+01   3.5810504e+01
+   3.6000000e+01   1.4007802e+01   3.5819636e+01
+   3.6000000e+01   1.4119207e+01   3.5823149e+01
+   3.6000000e+01   1.4275008e+01   3.5831579e+01
+   3.6000000e+01   1.4495909e+01   3.5833537e+01
+   3.6000000e+01   1.4732562e+01   3.5837397e+01
+   3.6000000e+01   1.4997446e+01   3.5833347e+01
+   3.6000000e+01   1.5706603e+01   3.5837281e+01
+   3.6000000e+01   1.6613545e+01   3.5844116e+01
+   3.6000000e+01   1.7261298e+01   3.5850289e+01
+   3.6000000e+01   1.8017446e+01   3.5853281e+01
+   3.6000000e+01   1.8879421e+01   3.5867727e+01
+   3.6000000e+01   1.9534612e+01   3.5871678e+01
+   3.6000000e+01   1.9774289e+01   3.5868719e+01
+   3.6000000e+01   1.9845992e+01   3.5868760e+01
+   3.6000000e+01   1.9857645e+01   3.5869248e+01
+   3.6000000e+01   1.9858744e+01   3.5869810e+01
+   3.6000000e+01   1.9851843e+01   3.5868702e+01
+   3.6000000e+01   1.9795959e+01   3.5873008e+01
+   3.6050000e+01   2.5103554e+00   3.4896107e+01
+   3.6050000e+01   2.5061901e+00   3.4902207e+01
+   3.6050000e+01   2.5121488e+00   3.4907306e+01
+   3.6050000e+01   2.5413554e+00   3.4914521e+01
+   3.6050000e+01   2.5794959e+00   3.4919405e+01
+   3.6050000e+01   2.6451405e+00   3.4928736e+01
+   3.6050000e+01   2.7416281e+00   3.4940488e+01
+   3.6050000e+01   2.8990331e+00   3.4952802e+01
+   3.6050000e+01   3.0880496e+00   3.4961322e+01
+   3.6050000e+01   3.3536529e+00   3.4973281e+01
+   3.6050000e+01   3.5827603e+00   3.4972736e+01
+   3.6050000e+01   3.8425455e+00   3.4984074e+01
+   3.6050000e+01   4.3142231e+00   3.5036645e+01
+   3.6050000e+01   5.2460165e+00   3.5170777e+01
+   3.6050000e+01   6.6648926e+00   3.5382711e+01
+   3.6050000e+01   8.2569008e+00   3.5621149e+01
+   3.6050000e+01   9.2870413e+00   3.5722876e+01
+   3.6050000e+01   9.5328760e+00   3.5630785e+01
+   3.6050000e+01   9.9026364e+00   3.5537066e+01
+   3.6050000e+01   1.0298083e+01   3.5480702e+01
+   3.6050000e+01   1.0770826e+01   3.5489091e+01
+   3.6050000e+01   1.1255678e+01   3.5531455e+01
+   3.6050000e+01   1.1602421e+01   3.5566000e+01
+   3.6050000e+01   1.1914041e+01   3.5601397e+01
+   3.6050000e+01   1.2147298e+01   3.5626901e+01
+   3.6050000e+01   1.2343058e+01   3.5648785e+01
+   3.6050000e+01   1.2494471e+01   3.5664835e+01
+   3.6050000e+01   1.2597438e+01   3.5676273e+01
+   3.6050000e+01   1.2688149e+01   3.5686380e+01
+   3.6050000e+01   1.2785116e+01   3.5697636e+01
+   3.6050000e+01   1.2848306e+01   3.5705074e+01
+   3.6050000e+01   1.2914322e+01   3.5711992e+01
+   3.6050000e+01   1.3001628e+01   3.5721826e+01
+   3.6050000e+01   1.3051289e+01   3.5725025e+01
+   3.6050000e+01   1.3089132e+01   3.5727711e+01
+   3.6050000e+01   1.3142140e+01   3.5735612e+01
+   3.6050000e+01   1.3179091e+01   3.5738893e+01
+   3.6050000e+01   1.3225289e+01   3.5744364e+01
+   3.6050000e+01   1.3285380e+01   3.5750000e+01
+   3.6050000e+01   1.3351380e+01   3.5760339e+01
+   3.6050000e+01   1.3413512e+01   3.5768570e+01
+   3.6050000e+01   1.3485198e+01   3.5776364e+01
+   3.6050000e+01   1.3539636e+01   3.5778083e+01
+   3.6050000e+01   1.3586083e+01   3.5781620e+01
+   3.6050000e+01   1.3649860e+01   3.5788785e+01
+   3.6050000e+01   1.3724041e+01   3.5795174e+01
+   3.6050000e+01   1.3795636e+01   3.5799347e+01
+   3.6050000e+01   1.3896884e+01   3.5810504e+01
+   3.6050000e+01   1.4007802e+01   3.5819636e+01
+   3.6050000e+01   1.4119207e+01   3.5823149e+01
+   3.6050000e+01   1.4275008e+01   3.5831579e+01
+   3.6050000e+01   1.4495909e+01   3.5833537e+01
+   3.6050000e+01   1.4732562e+01   3.5837397e+01
+   3.6050000e+01   1.4997446e+01   3.5833347e+01
+   3.6050000e+01   1.5706603e+01   3.5837281e+01
+   3.6050000e+01   1.6613545e+01   3.5844116e+01
+   3.6050000e+01   1.7261298e+01   3.5850289e+01
+   3.6050000e+01   1.8017446e+01   3.5853281e+01
+   3.6050000e+01   1.8879421e+01   3.5867727e+01
+   3.6050000e+01   1.9534612e+01   3.5871678e+01
+   3.6050000e+01   1.9774289e+01   3.5868719e+01
+   3.6050000e+01   1.9845992e+01   3.5868760e+01
+   3.6050000e+01   1.9857645e+01   3.5869248e+01
+   3.6050000e+01   1.9858744e+01   3.5869810e+01
+   3.6050000e+01   1.9851843e+01   3.5868702e+01
+   3.6050000e+01   1.9795959e+01   3.5873008e+01
+   3.6100000e+01   2.5103554e+00   3.4896107e+01
+   3.6100000e+01   2.5061901e+00   3.4902207e+01
+   3.6100000e+01   2.5121488e+00   3.4907306e+01
+   3.6100000e+01   2.5413554e+00   3.4914521e+01
+   3.6100000e+01   2.5794959e+00   3.4919405e+01
+   3.6100000e+01   2.6451405e+00   3.4928736e+01
+   3.6100000e+01   2.7416281e+00   3.4940488e+01
+   3.6100000e+01   2.8990331e+00   3.4952802e+01
+   3.6100000e+01   3.0880496e+00   3.4961322e+01
+   3.6100000e+01   3.3536529e+00   3.4973281e+01
+   3.6100000e+01   3.5827603e+00   3.4972736e+01
+   3.6100000e+01   3.8425455e+00   3.4984074e+01
+   3.6100000e+01   4.3142231e+00   3.5036645e+01
+   3.6100000e+01   5.2460165e+00   3.5170777e+01
+   3.6100000e+01   6.6648926e+00   3.5382711e+01
+   3.6100000e+01   8.2569008e+00   3.5621149e+01
+   3.6100000e+01   9.2870413e+00   3.5722876e+01
+   3.6100000e+01   9.5328760e+00   3.5630785e+01
+   3.6100000e+01   9.9026364e+00   3.5537066e+01
+   3.6100000e+01   1.0298083e+01   3.5480702e+01
+   3.6100000e+01   1.0770826e+01   3.5489091e+01
+   3.6100000e+01   1.1255678e+01   3.5531455e+01
+   3.6100000e+01   1.1602421e+01   3.5566000e+01
+   3.6100000e+01   1.1914041e+01   3.5601397e+01
+   3.6100000e+01   1.2147298e+01   3.5626901e+01
+   3.6100000e+01   1.2343058e+01   3.5648785e+01
+   3.6100000e+01   1.2494471e+01   3.5664835e+01
+   3.6100000e+01   1.2597438e+01   3.5676273e+01
+   3.6100000e+01   1.2688149e+01   3.5686380e+01
+   3.6100000e+01   1.2785116e+01   3.5697636e+01
+   3.6100000e+01   1.2848306e+01   3.5705074e+01
+   3.6100000e+01   1.2914322e+01   3.5711992e+01
+   3.6100000e+01   1.3001628e+01   3.5721826e+01
+   3.6100000e+01   1.3051289e+01   3.5725025e+01
+   3.6100000e+01   1.3089132e+01   3.5727711e+01
+   3.6100000e+01   1.3142140e+01   3.5735612e+01
+   3.6100000e+01   1.3179091e+01   3.5738893e+01
+   3.6100000e+01   1.3225289e+01   3.5744364e+01
+   3.6100000e+01   1.3285380e+01   3.5750000e+01
+   3.6100000e+01   1.3351380e+01   3.5760339e+01
+   3.6100000e+01   1.3413512e+01   3.5768570e+01
+   3.6100000e+01   1.3485198e+01   3.5776364e+01
+   3.6100000e+01   1.3539636e+01   3.5778083e+01
+   3.6100000e+01   1.3586083e+01   3.5781620e+01
+   3.6100000e+01   1.3649860e+01   3.5788785e+01
+   3.6100000e+01   1.3724041e+01   3.5795174e+01
+   3.6100000e+01   1.3795636e+01   3.5799347e+01
+   3.6100000e+01   1.3896884e+01   3.5810504e+01
+   3.6100000e+01   1.4007802e+01   3.5819636e+01
+   3.6100000e+01   1.4119207e+01   3.5823149e+01
+   3.6100000e+01   1.4275008e+01   3.5831579e+01
+   3.6100000e+01   1.4495909e+01   3.5833537e+01
+   3.6100000e+01   1.4732562e+01   3.5837397e+01
+   3.6100000e+01   1.4997446e+01   3.5833347e+01
+   3.6100000e+01   1.5706603e+01   3.5837281e+01
+   3.6100000e+01   1.6613545e+01   3.5844116e+01
+   3.6100000e+01   1.7261298e+01   3.5850289e+01
+   3.6100000e+01   1.8017446e+01   3.5853281e+01
+   3.6100000e+01   1.8879421e+01   3.5867727e+01
+   3.6100000e+01   1.9534612e+01   3.5871678e+01
+   3.6100000e+01   1.9774289e+01   3.5868719e+01
+   3.6100000e+01   1.9845992e+01   3.5868760e+01
+   3.6100000e+01   1.9857645e+01   3.5869248e+01
+   3.6100000e+01   1.9858744e+01   3.5869810e+01
+   3.6100000e+01   1.9851843e+01   3.5868702e+01
+   3.6100000e+01   1.9795959e+01   3.5873008e+01
+   3.6150000e+01   2.5103554e+00   3.4896107e+01
+   3.6150000e+01   2.5061901e+00   3.4902207e+01
+   3.6150000e+01   2.5121488e+00   3.4907306e+01
+   3.6150000e+01   2.5413554e+00   3.4914521e+01
+   3.6150000e+01   2.5794959e+00   3.4919405e+01
+   3.6150000e+01   2.6451405e+00   3.4928736e+01
+   3.6150000e+01   2.7416281e+00   3.4940488e+01
+   3.6150000e+01   2.8990331e+00   3.4952802e+01
+   3.6150000e+01   3.0880496e+00   3.4961322e+01
+   3.6150000e+01   3.3536529e+00   3.4973281e+01
+   3.6150000e+01   3.5827603e+00   3.4972736e+01
+   3.6150000e+01   3.8425455e+00   3.4984074e+01
+   3.6150000e+01   4.3142231e+00   3.5036645e+01
+   3.6150000e+01   5.2460165e+00   3.5170777e+01
+   3.6150000e+01   6.6648926e+00   3.5382711e+01
+   3.6150000e+01   8.2569008e+00   3.5621149e+01
+   3.6150000e+01   9.2870413e+00   3.5722876e+01
+   3.6150000e+01   9.5328760e+00   3.5630785e+01
+   3.6150000e+01   9.9026364e+00   3.5537066e+01
+   3.6150000e+01   1.0298083e+01   3.5480702e+01
+   3.6150000e+01   1.0770826e+01   3.5489091e+01
+   3.6150000e+01   1.1255678e+01   3.5531455e+01
+   3.6150000e+01   1.1602421e+01   3.5566000e+01
+   3.6150000e+01   1.1914041e+01   3.5601397e+01
+   3.6150000e+01   1.2147298e+01   3.5626901e+01
+   3.6150000e+01   1.2343058e+01   3.5648785e+01
+   3.6150000e+01   1.2494471e+01   3.5664835e+01
+   3.6150000e+01   1.2597438e+01   3.5676273e+01
+   3.6150000e+01   1.2688149e+01   3.5686380e+01
+   3.6150000e+01   1.2785116e+01   3.5697636e+01
+   3.6150000e+01   1.2848306e+01   3.5705074e+01
+   3.6150000e+01   1.2914322e+01   3.5711992e+01
+   3.6150000e+01   1.3001628e+01   3.5721826e+01
+   3.6150000e+01   1.3051289e+01   3.5725025e+01
+   3.6150000e+01   1.3089132e+01   3.5727711e+01
+   3.6150000e+01   1.3142140e+01   3.5735612e+01
+   3.6150000e+01   1.3179091e+01   3.5738893e+01
+   3.6150000e+01   1.3225289e+01   3.5744364e+01
+   3.6150000e+01   1.3285380e+01   3.5750000e+01
+   3.6150000e+01   1.3351380e+01   3.5760339e+01
+   3.6150000e+01   1.3413512e+01   3.5768570e+01
+   3.6150000e+01   1.3485198e+01   3.5776364e+01
+   3.6150000e+01   1.3539636e+01   3.5778083e+01
+   3.6150000e+01   1.3586083e+01   3.5781620e+01
+   3.6150000e+01   1.3649860e+01   3.5788785e+01
+   3.6150000e+01   1.3724041e+01   3.5795174e+01
+   3.6150000e+01   1.3795636e+01   3.5799347e+01
+   3.6150000e+01   1.3896884e+01   3.5810504e+01
+   3.6150000e+01   1.4007802e+01   3.5819636e+01
+   3.6150000e+01   1.4119207e+01   3.5823149e+01
+   3.6150000e+01   1.4275008e+01   3.5831579e+01
+   3.6150000e+01   1.4495909e+01   3.5833537e+01
+   3.6150000e+01   1.4732562e+01   3.5837397e+01
+   3.6150000e+01   1.4997446e+01   3.5833347e+01
+   3.6150000e+01   1.5706603e+01   3.5837281e+01
+   3.6150000e+01   1.6613545e+01   3.5844116e+01
+   3.6150000e+01   1.7261298e+01   3.5850289e+01
+   3.6150000e+01   1.8017446e+01   3.5853281e+01
+   3.6150000e+01   1.8879421e+01   3.5867727e+01
+   3.6150000e+01   1.9534612e+01   3.5871678e+01
+   3.6150000e+01   1.9774289e+01   3.5868719e+01
+   3.6150000e+01   1.9845992e+01   3.5868760e+01
+   3.6150000e+01   1.9857645e+01   3.5869248e+01
+   3.6150000e+01   1.9858744e+01   3.5869810e+01
+   3.6150000e+01   1.9851843e+01   3.5868702e+01
+   3.6150000e+01   1.9795959e+01   3.5873008e+01
+   3.6200000e+01   2.5103554e+00   3.4896107e+01
+   3.6200000e+01   2.5061901e+00   3.4902207e+01
+   3.6200000e+01   2.5121488e+00   3.4907306e+01
+   3.6200000e+01   2.5413554e+00   3.4914521e+01
+   3.6200000e+01   2.5794959e+00   3.4919405e+01
+   3.6200000e+01   2.6451405e+00   3.4928736e+01
+   3.6200000e+01   2.7416281e+00   3.4940488e+01
+   3.6200000e+01   2.8990331e+00   3.4952802e+01
+   3.6200000e+01   3.0880496e+00   3.4961322e+01
+   3.6200000e+01   3.3536529e+00   3.4973281e+01
+   3.6200000e+01   3.5827603e+00   3.4972736e+01
+   3.6200000e+01   3.8425455e+00   3.4984074e+01
+   3.6200000e+01   4.3142231e+00   3.5036645e+01
+   3.6200000e+01   5.2460165e+00   3.5170777e+01
+   3.6200000e+01   6.6648926e+00   3.5382711e+01
+   3.6200000e+01   8.2569008e+00   3.5621149e+01
+   3.6200000e+01   9.2870413e+00   3.5722876e+01
+   3.6200000e+01   9.5328760e+00   3.5630785e+01
+   3.6200000e+01   9.9026364e+00   3.5537066e+01
+   3.6200000e+01   1.0298083e+01   3.5480702e+01
+   3.6200000e+01   1.0770826e+01   3.5489091e+01
+   3.6200000e+01   1.1255678e+01   3.5531455e+01
+   3.6200000e+01   1.1602421e+01   3.5566000e+01
+   3.6200000e+01   1.1914041e+01   3.5601397e+01
+   3.6200000e+01   1.2147298e+01   3.5626901e+01
+   3.6200000e+01   1.2343058e+01   3.5648785e+01
+   3.6200000e+01   1.2494471e+01   3.5664835e+01
+   3.6200000e+01   1.2597438e+01   3.5676273e+01
+   3.6200000e+01   1.2688149e+01   3.5686380e+01
+   3.6200000e+01   1.2785116e+01   3.5697636e+01
+   3.6200000e+01   1.2848306e+01   3.5705074e+01
+   3.6200000e+01   1.2914322e+01   3.5711992e+01
+   3.6200000e+01   1.3001628e+01   3.5721826e+01
+   3.6200000e+01   1.3051289e+01   3.5725025e+01
+   3.6200000e+01   1.3089132e+01   3.5727711e+01
+   3.6200000e+01   1.3142140e+01   3.5735612e+01
+   3.6200000e+01   1.3179091e+01   3.5738893e+01
+   3.6200000e+01   1.3225289e+01   3.5744364e+01
+   3.6200000e+01   1.3285380e+01   3.5750000e+01
+   3.6200000e+01   1.3351380e+01   3.5760339e+01
+   3.6200000e+01   1.3413512e+01   3.5768570e+01
+   3.6200000e+01   1.3485198e+01   3.5776364e+01
+   3.6200000e+01   1.3539636e+01   3.5778083e+01
+   3.6200000e+01   1.3586083e+01   3.5781620e+01
+   3.6200000e+01   1.3649860e+01   3.5788785e+01
+   3.6200000e+01   1.3724041e+01   3.5795174e+01
+   3.6200000e+01   1.3795636e+01   3.5799347e+01
+   3.6200000e+01   1.3896884e+01   3.5810504e+01
+   3.6200000e+01   1.4007802e+01   3.5819636e+01
+   3.6200000e+01   1.4119207e+01   3.5823149e+01
+   3.6200000e+01   1.4275008e+01   3.5831579e+01
+   3.6200000e+01   1.4495909e+01   3.5833537e+01
+   3.6200000e+01   1.4732562e+01   3.5837397e+01
+   3.6200000e+01   1.4997446e+01   3.5833347e+01
+   3.6200000e+01   1.5706603e+01   3.5837281e+01
+   3.6200000e+01   1.6613545e+01   3.5844116e+01
+   3.6200000e+01   1.7261298e+01   3.5850289e+01
+   3.6200000e+01   1.8017446e+01   3.5853281e+01
+   3.6200000e+01   1.8879421e+01   3.5867727e+01
+   3.6200000e+01   1.9534612e+01   3.5871678e+01
+   3.6200000e+01   1.9774289e+01   3.5868719e+01
+   3.6200000e+01   1.9845992e+01   3.5868760e+01
+   3.6200000e+01   1.9857645e+01   3.5869248e+01
+   3.6200000e+01   1.9858744e+01   3.5869810e+01
+   3.6200000e+01   1.9851843e+01   3.5868702e+01
+   3.6200000e+01   1.9795959e+01   3.5873008e+01
+   3.6250000e+01   2.5103554e+00   3.4896107e+01
+   3.6250000e+01   2.5061901e+00   3.4902207e+01
+   3.6250000e+01   2.5121488e+00   3.4907306e+01
+   3.6250000e+01   2.5413554e+00   3.4914521e+01
+   3.6250000e+01   2.5794959e+00   3.4919405e+01
+   3.6250000e+01   2.6451405e+00   3.4928736e+01
+   3.6250000e+01   2.7416281e+00   3.4940488e+01
+   3.6250000e+01   2.8990331e+00   3.4952802e+01
+   3.6250000e+01   3.0880496e+00   3.4961322e+01
+   3.6250000e+01   3.3536529e+00   3.4973281e+01
+   3.6250000e+01   3.5827603e+00   3.4972736e+01
+   3.6250000e+01   3.8425455e+00   3.4984074e+01
+   3.6250000e+01   4.3142231e+00   3.5036645e+01
+   3.6250000e+01   5.2460165e+00   3.5170777e+01
+   3.6250000e+01   6.6648926e+00   3.5382711e+01
+   3.6250000e+01   8.2569008e+00   3.5621149e+01
+   3.6250000e+01   9.2870413e+00   3.5722876e+01
+   3.6250000e+01   9.5328760e+00   3.5630785e+01
+   3.6250000e+01   9.9026364e+00   3.5537066e+01
+   3.6250000e+01   1.0298083e+01   3.5480702e+01
+   3.6250000e+01   1.0770826e+01   3.5489091e+01
+   3.6250000e+01   1.1255678e+01   3.5531455e+01
+   3.6250000e+01   1.1602421e+01   3.5566000e+01
+   3.6250000e+01   1.1914041e+01   3.5601397e+01
+   3.6250000e+01   1.2147298e+01   3.5626901e+01
+   3.6250000e+01   1.2343058e+01   3.5648785e+01
+   3.6250000e+01   1.2494471e+01   3.5664835e+01
+   3.6250000e+01   1.2597438e+01   3.5676273e+01
+   3.6250000e+01   1.2688149e+01   3.5686380e+01
+   3.6250000e+01   1.2785116e+01   3.5697636e+01
+   3.6250000e+01   1.2848306e+01   3.5705074e+01
+   3.6250000e+01   1.2914322e+01   3.5711992e+01
+   3.6250000e+01   1.3001628e+01   3.5721826e+01
+   3.6250000e+01   1.3051289e+01   3.5725025e+01
+   3.6250000e+01   1.3089132e+01   3.5727711e+01
+   3.6250000e+01   1.3142140e+01   3.5735612e+01
+   3.6250000e+01   1.3179091e+01   3.5738893e+01
+   3.6250000e+01   1.3225289e+01   3.5744364e+01
+   3.6250000e+01   1.3285380e+01   3.5750000e+01
+   3.6250000e+01   1.3351380e+01   3.5760339e+01
+   3.6250000e+01   1.3413512e+01   3.5768570e+01
+   3.6250000e+01   1.3485198e+01   3.5776364e+01
+   3.6250000e+01   1.3539636e+01   3.5778083e+01
+   3.6250000e+01   1.3586083e+01   3.5781620e+01
+   3.6250000e+01   1.3649860e+01   3.5788785e+01
+   3.6250000e+01   1.3724041e+01   3.5795174e+01
+   3.6250000e+01   1.3795636e+01   3.5799347e+01
+   3.6250000e+01   1.3896884e+01   3.5810504e+01
+   3.6250000e+01   1.4007802e+01   3.5819636e+01
+   3.6250000e+01   1.4119207e+01   3.5823149e+01
+   3.6250000e+01   1.4275008e+01   3.5831579e+01
+   3.6250000e+01   1.4495909e+01   3.5833537e+01
+   3.6250000e+01   1.4732562e+01   3.5837397e+01
+   3.6250000e+01   1.4997446e+01   3.5833347e+01
+   3.6250000e+01   1.5706603e+01   3.5837281e+01
+   3.6250000e+01   1.6613545e+01   3.5844116e+01
+   3.6250000e+01   1.7261298e+01   3.5850289e+01
+   3.6250000e+01   1.8017446e+01   3.5853281e+01
+   3.6250000e+01   1.8879421e+01   3.5867727e+01
+   3.6250000e+01   1.9534612e+01   3.5871678e+01
+   3.6250000e+01   1.9774289e+01   3.5868719e+01
+   3.6250000e+01   1.9845992e+01   3.5868760e+01
+   3.6250000e+01   1.9857645e+01   3.5869248e+01
+   3.6250000e+01   1.9858744e+01   3.5869810e+01
+   3.6250000e+01   1.9851843e+01   3.5868702e+01
+   3.6250000e+01   1.9795959e+01   3.5873008e+01
+   3.6300000e+01   2.5103554e+00   3.4896107e+01
+   3.6300000e+01   2.5061901e+00   3.4902207e+01
+   3.6300000e+01   2.5121488e+00   3.4907306e+01
+   3.6300000e+01   2.5413554e+00   3.4914521e+01
+   3.6300000e+01   2.5794959e+00   3.4919405e+01
+   3.6300000e+01   2.6451405e+00   3.4928736e+01
+   3.6300000e+01   2.7416281e+00   3.4940488e+01
+   3.6300000e+01   2.8990331e+00   3.4952802e+01
+   3.6300000e+01   3.0880496e+00   3.4961322e+01
+   3.6300000e+01   3.3536529e+00   3.4973281e+01
+   3.6300000e+01   3.5827603e+00   3.4972736e+01
+   3.6300000e+01   3.8425455e+00   3.4984074e+01
+   3.6300000e+01   4.3142231e+00   3.5036645e+01
+   3.6300000e+01   5.2460165e+00   3.5170777e+01
+   3.6300000e+01   6.6648926e+00   3.5382711e+01
+   3.6300000e+01   8.2569008e+00   3.5621149e+01
+   3.6300000e+01   9.2870413e+00   3.5722876e+01
+   3.6300000e+01   9.5328760e+00   3.5630785e+01
+   3.6300000e+01   9.9026364e+00   3.5537066e+01
+   3.6300000e+01   1.0298083e+01   3.5480702e+01
+   3.6300000e+01   1.0770826e+01   3.5489091e+01
+   3.6300000e+01   1.1255678e+01   3.5531455e+01
+   3.6300000e+01   1.1602421e+01   3.5566000e+01
+   3.6300000e+01   1.1914041e+01   3.5601397e+01
+   3.6300000e+01   1.2147298e+01   3.5626901e+01
+   3.6300000e+01   1.2343058e+01   3.5648785e+01
+   3.6300000e+01   1.2494471e+01   3.5664835e+01
+   3.6300000e+01   1.2597438e+01   3.5676273e+01
+   3.6300000e+01   1.2688149e+01   3.5686380e+01
+   3.6300000e+01   1.2785116e+01   3.5697636e+01
+   3.6300000e+01   1.2848306e+01   3.5705074e+01
+   3.6300000e+01   1.2914322e+01   3.5711992e+01
+   3.6300000e+01   1.3001628e+01   3.5721826e+01
+   3.6300000e+01   1.3051289e+01   3.5725025e+01
+   3.6300000e+01   1.3089132e+01   3.5727711e+01
+   3.6300000e+01   1.3142140e+01   3.5735612e+01
+   3.6300000e+01   1.3179091e+01   3.5738893e+01
+   3.6300000e+01   1.3225289e+01   3.5744364e+01
+   3.6300000e+01   1.3285380e+01   3.5750000e+01
+   3.6300000e+01   1.3351380e+01   3.5760339e+01
+   3.6300000e+01   1.3413512e+01   3.5768570e+01
+   3.6300000e+01   1.3485198e+01   3.5776364e+01
+   3.6300000e+01   1.3539636e+01   3.5778083e+01
+   3.6300000e+01   1.3586083e+01   3.5781620e+01
+   3.6300000e+01   1.3649860e+01   3.5788785e+01
+   3.6300000e+01   1.3724041e+01   3.5795174e+01
+   3.6300000e+01   1.3795636e+01   3.5799347e+01
+   3.6300000e+01   1.3896884e+01   3.5810504e+01
+   3.6300000e+01   1.4007802e+01   3.5819636e+01
+   3.6300000e+01   1.4119207e+01   3.5823149e+01
+   3.6300000e+01   1.4275008e+01   3.5831579e+01
+   3.6300000e+01   1.4495909e+01   3.5833537e+01
+   3.6300000e+01   1.4732562e+01   3.5837397e+01
+   3.6300000e+01   1.4997446e+01   3.5833347e+01
+   3.6300000e+01   1.5706603e+01   3.5837281e+01
+   3.6300000e+01   1.6613545e+01   3.5844116e+01
+   3.6300000e+01   1.7261298e+01   3.5850289e+01
+   3.6300000e+01   1.8017446e+01   3.5853281e+01
+   3.6300000e+01   1.8879421e+01   3.5867727e+01
+   3.6300000e+01   1.9534612e+01   3.5871678e+01
+   3.6300000e+01   1.9774289e+01   3.5868719e+01
+   3.6300000e+01   1.9845992e+01   3.5868760e+01
+   3.6300000e+01   1.9857645e+01   3.5869248e+01
+   3.6300000e+01   1.9858744e+01   3.5869810e+01
+   3.6300000e+01   1.9851843e+01   3.5868702e+01
+   3.6300000e+01   1.9795959e+01   3.5873008e+01
+   3.6350000e+01   2.5103554e+00   3.4896107e+01
+   3.6350000e+01   2.5061901e+00   3.4902207e+01
+   3.6350000e+01   2.5121488e+00   3.4907306e+01
+   3.6350000e+01   2.5413554e+00   3.4914521e+01
+   3.6350000e+01   2.5794959e+00   3.4919405e+01
+   3.6350000e+01   2.6451405e+00   3.4928736e+01
+   3.6350000e+01   2.7416281e+00   3.4940488e+01
+   3.6350000e+01   2.8990331e+00   3.4952802e+01
+   3.6350000e+01   3.0880496e+00   3.4961322e+01
+   3.6350000e+01   3.3536529e+00   3.4973281e+01
+   3.6350000e+01   3.5827603e+00   3.4972736e+01
+   3.6350000e+01   3.8425455e+00   3.4984074e+01
+   3.6350000e+01   4.3142231e+00   3.5036645e+01
+   3.6350000e+01   5.2460165e+00   3.5170777e+01
+   3.6350000e+01   6.6648926e+00   3.5382711e+01
+   3.6350000e+01   8.2569008e+00   3.5621149e+01
+   3.6350000e+01   9.2870413e+00   3.5722876e+01
+   3.6350000e+01   9.5328760e+00   3.5630785e+01
+   3.6350000e+01   9.9026364e+00   3.5537066e+01
+   3.6350000e+01   1.0298083e+01   3.5480702e+01
+   3.6350000e+01   1.0770826e+01   3.5489091e+01
+   3.6350000e+01   1.1255678e+01   3.5531455e+01
+   3.6350000e+01   1.1602421e+01   3.5566000e+01
+   3.6350000e+01   1.1914041e+01   3.5601397e+01
+   3.6350000e+01   1.2147298e+01   3.5626901e+01
+   3.6350000e+01   1.2343058e+01   3.5648785e+01
+   3.6350000e+01   1.2494471e+01   3.5664835e+01
+   3.6350000e+01   1.2597438e+01   3.5676273e+01
+   3.6350000e+01   1.2688149e+01   3.5686380e+01
+   3.6350000e+01   1.2785116e+01   3.5697636e+01
+   3.6350000e+01   1.2848306e+01   3.5705074e+01
+   3.6350000e+01   1.2914322e+01   3.5711992e+01
+   3.6350000e+01   1.3001628e+01   3.5721826e+01
+   3.6350000e+01   1.3051289e+01   3.5725025e+01
+   3.6350000e+01   1.3089132e+01   3.5727711e+01
+   3.6350000e+01   1.3142140e+01   3.5735612e+01
+   3.6350000e+01   1.3179091e+01   3.5738893e+01
+   3.6350000e+01   1.3225289e+01   3.5744364e+01
+   3.6350000e+01   1.3285380e+01   3.5750000e+01
+   3.6350000e+01   1.3351380e+01   3.5760339e+01
+   3.6350000e+01   1.3413512e+01   3.5768570e+01
+   3.6350000e+01   1.3485198e+01   3.5776364e+01
+   3.6350000e+01   1.3539636e+01   3.5778083e+01
+   3.6350000e+01   1.3586083e+01   3.5781620e+01
+   3.6350000e+01   1.3649860e+01   3.5788785e+01
+   3.6350000e+01   1.3724041e+01   3.5795174e+01
+   3.6350000e+01   1.3795636e+01   3.5799347e+01
+   3.6350000e+01   1.3896884e+01   3.5810504e+01
+   3.6350000e+01   1.4007802e+01   3.5819636e+01
+   3.6350000e+01   1.4119207e+01   3.5823149e+01
+   3.6350000e+01   1.4275008e+01   3.5831579e+01
+   3.6350000e+01   1.4495909e+01   3.5833537e+01
+   3.6350000e+01   1.4732562e+01   3.5837397e+01
+   3.6350000e+01   1.4997446e+01   3.5833347e+01
+   3.6350000e+01   1.5706603e+01   3.5837281e+01
+   3.6350000e+01   1.6613545e+01   3.5844116e+01
+   3.6350000e+01   1.7261298e+01   3.5850289e+01
+   3.6350000e+01   1.8017446e+01   3.5853281e+01
+   3.6350000e+01   1.8879421e+01   3.5867727e+01
+   3.6350000e+01   1.9534612e+01   3.5871678e+01
+   3.6350000e+01   1.9774289e+01   3.5868719e+01
+   3.6350000e+01   1.9845992e+01   3.5868760e+01
+   3.6350000e+01   1.9857645e+01   3.5869248e+01
+   3.6350000e+01   1.9858744e+01   3.5869810e+01
+   3.6350000e+01   1.9851843e+01   3.5868702e+01
+   3.6350000e+01   1.9795959e+01   3.5873008e+01
+   3.6400000e+01   2.5103554e+00   3.4896107e+01
+   3.6400000e+01   2.5061901e+00   3.4902207e+01
+   3.6400000e+01   2.5121488e+00   3.4907306e+01
+   3.6400000e+01   2.5413554e+00   3.4914521e+01
+   3.6400000e+01   2.5794959e+00   3.4919405e+01
+   3.6400000e+01   2.6451405e+00   3.4928736e+01
+   3.6400000e+01   2.7416281e+00   3.4940488e+01
+   3.6400000e+01   2.8990331e+00   3.4952802e+01
+   3.6400000e+01   3.0880496e+00   3.4961322e+01
+   3.6400000e+01   3.3536529e+00   3.4973281e+01
+   3.6400000e+01   3.5827603e+00   3.4972736e+01
+   3.6400000e+01   3.8425455e+00   3.4984074e+01
+   3.6400000e+01   4.3142231e+00   3.5036645e+01
+   3.6400000e+01   5.2460165e+00   3.5170777e+01
+   3.6400000e+01   6.6648926e+00   3.5382711e+01
+   3.6400000e+01   8.2569008e+00   3.5621149e+01
+   3.6400000e+01   9.2870413e+00   3.5722876e+01
+   3.6400000e+01   9.5328760e+00   3.5630785e+01
+   3.6400000e+01   9.9026364e+00   3.5537066e+01
+   3.6400000e+01   1.0298083e+01   3.5480702e+01
+   3.6400000e+01   1.0770826e+01   3.5489091e+01
+   3.6400000e+01   1.1255678e+01   3.5531455e+01
+   3.6400000e+01   1.1602421e+01   3.5566000e+01
+   3.6400000e+01   1.1914041e+01   3.5601397e+01
+   3.6400000e+01   1.2147298e+01   3.5626901e+01
+   3.6400000e+01   1.2343058e+01   3.5648785e+01
+   3.6400000e+01   1.2494471e+01   3.5664835e+01
+   3.6400000e+01   1.2597438e+01   3.5676273e+01
+   3.6400000e+01   1.2688149e+01   3.5686380e+01
+   3.6400000e+01   1.2785116e+01   3.5697636e+01
+   3.6400000e+01   1.2848306e+01   3.5705074e+01
+   3.6400000e+01   1.2914322e+01   3.5711992e+01
+   3.6400000e+01   1.3001628e+01   3.5721826e+01
+   3.6400000e+01   1.3051289e+01   3.5725025e+01
+   3.6400000e+01   1.3089132e+01   3.5727711e+01
+   3.6400000e+01   1.3142140e+01   3.5735612e+01
+   3.6400000e+01   1.3179091e+01   3.5738893e+01
+   3.6400000e+01   1.3225289e+01   3.5744364e+01
+   3.6400000e+01   1.3285380e+01   3.5750000e+01
+   3.6400000e+01   1.3351380e+01   3.5760339e+01
+   3.6400000e+01   1.3413512e+01   3.5768570e+01
+   3.6400000e+01   1.3485198e+01   3.5776364e+01
+   3.6400000e+01   1.3539636e+01   3.5778083e+01
+   3.6400000e+01   1.3586083e+01   3.5781620e+01
+   3.6400000e+01   1.3649860e+01   3.5788785e+01
+   3.6400000e+01   1.3724041e+01   3.5795174e+01
+   3.6400000e+01   1.3795636e+01   3.5799347e+01
+   3.6400000e+01   1.3896884e+01   3.5810504e+01
+   3.6400000e+01   1.4007802e+01   3.5819636e+01
+   3.6400000e+01   1.4119207e+01   3.5823149e+01
+   3.6400000e+01   1.4275008e+01   3.5831579e+01
+   3.6400000e+01   1.4495909e+01   3.5833537e+01
+   3.6400000e+01   1.4732562e+01   3.5837397e+01
+   3.6400000e+01   1.4997446e+01   3.5833347e+01
+   3.6400000e+01   1.5706603e+01   3.5837281e+01
+   3.6400000e+01   1.6613545e+01   3.5844116e+01
+   3.6400000e+01   1.7261298e+01   3.5850289e+01
+   3.6400000e+01   1.8017446e+01   3.5853281e+01
+   3.6400000e+01   1.8879421e+01   3.5867727e+01
+   3.6400000e+01   1.9534612e+01   3.5871678e+01
+   3.6400000e+01   1.9774289e+01   3.5868719e+01
+   3.6400000e+01   1.9845992e+01   3.5868760e+01
+   3.6400000e+01   1.9857645e+01   3.5869248e+01
+   3.6400000e+01   1.9858744e+01   3.5869810e+01
+   3.6400000e+01   1.9851843e+01   3.5868702e+01
+   3.6400000e+01   1.9795959e+01   3.5873008e+01
+   3.6450000e+01   2.5103554e+00   3.4896107e+01
+   3.6450000e+01   2.5061901e+00   3.4902207e+01
+   3.6450000e+01   2.5121488e+00   3.4907306e+01
+   3.6450000e+01   2.5413554e+00   3.4914521e+01
+   3.6450000e+01   2.5794959e+00   3.4919405e+01
+   3.6450000e+01   2.6451405e+00   3.4928736e+01
+   3.6450000e+01   2.7416281e+00   3.4940488e+01
+   3.6450000e+01   2.8990331e+00   3.4952802e+01
+   3.6450000e+01   3.0880496e+00   3.4961322e+01
+   3.6450000e+01   3.3536529e+00   3.4973281e+01
+   3.6450000e+01   3.5827603e+00   3.4972736e+01
+   3.6450000e+01   3.8425455e+00   3.4984074e+01
+   3.6450000e+01   4.3142231e+00   3.5036645e+01
+   3.6450000e+01   5.2460165e+00   3.5170777e+01
+   3.6450000e+01   6.6648926e+00   3.5382711e+01
+   3.6450000e+01   8.2569008e+00   3.5621149e+01
+   3.6450000e+01   9.2870413e+00   3.5722876e+01
+   3.6450000e+01   9.5328760e+00   3.5630785e+01
+   3.6450000e+01   9.9026364e+00   3.5537066e+01
+   3.6450000e+01   1.0298083e+01   3.5480702e+01
+   3.6450000e+01   1.0770826e+01   3.5489091e+01
+   3.6450000e+01   1.1255678e+01   3.5531455e+01
+   3.6450000e+01   1.1602421e+01   3.5566000e+01
+   3.6450000e+01   1.1914041e+01   3.5601397e+01
+   3.6450000e+01   1.2147298e+01   3.5626901e+01
+   3.6450000e+01   1.2343058e+01   3.5648785e+01
+   3.6450000e+01   1.2494471e+01   3.5664835e+01
+   3.6450000e+01   1.2597438e+01   3.5676273e+01
+   3.6450000e+01   1.2688149e+01   3.5686380e+01
+   3.6450000e+01   1.2785116e+01   3.5697636e+01
+   3.6450000e+01   1.2848306e+01   3.5705074e+01
+   3.6450000e+01   1.2914322e+01   3.5711992e+01
+   3.6450000e+01   1.3001628e+01   3.5721826e+01
+   3.6450000e+01   1.3051289e+01   3.5725025e+01
+   3.6450000e+01   1.3089132e+01   3.5727711e+01
+   3.6450000e+01   1.3142140e+01   3.5735612e+01
+   3.6450000e+01   1.3179091e+01   3.5738893e+01
+   3.6450000e+01   1.3225289e+01   3.5744364e+01
+   3.6450000e+01   1.3285380e+01   3.5750000e+01
+   3.6450000e+01   1.3351380e+01   3.5760339e+01
+   3.6450000e+01   1.3413512e+01   3.5768570e+01
+   3.6450000e+01   1.3485198e+01   3.5776364e+01
+   3.6450000e+01   1.3539636e+01   3.5778083e+01
+   3.6450000e+01   1.3586083e+01   3.5781620e+01
+   3.6450000e+01   1.3649860e+01   3.5788785e+01
+   3.6450000e+01   1.3724041e+01   3.5795174e+01
+   3.6450000e+01   1.3795636e+01   3.5799347e+01
+   3.6450000e+01   1.3896884e+01   3.5810504e+01
+   3.6450000e+01   1.4007802e+01   3.5819636e+01
+   3.6450000e+01   1.4119207e+01   3.5823149e+01
+   3.6450000e+01   1.4275008e+01   3.5831579e+01
+   3.6450000e+01   1.4495909e+01   3.5833537e+01
+   3.6450000e+01   1.4732562e+01   3.5837397e+01
+   3.6450000e+01   1.4997446e+01   3.5833347e+01
+   3.6450000e+01   1.5706603e+01   3.5837281e+01
+   3.6450000e+01   1.6613545e+01   3.5844116e+01
+   3.6450000e+01   1.7261298e+01   3.5850289e+01
+   3.6450000e+01   1.8017446e+01   3.5853281e+01
+   3.6450000e+01   1.8879421e+01   3.5867727e+01
+   3.6450000e+01   1.9534612e+01   3.5871678e+01
+   3.6450000e+01   1.9774289e+01   3.5868719e+01
+   3.6450000e+01   1.9845992e+01   3.5868760e+01
+   3.6450000e+01   1.9857645e+01   3.5869248e+01
+   3.6450000e+01   1.9858744e+01   3.5869810e+01
+   3.6450000e+01   1.9851843e+01   3.5868702e+01
+   3.6450000e+01   1.9795959e+01   3.5873008e+01
+   3.6500000e+01   2.5103554e+00   3.4896107e+01
+   3.6500000e+01   2.5061901e+00   3.4902207e+01
+   3.6500000e+01   2.5121488e+00   3.4907306e+01
+   3.6500000e+01   2.5413554e+00   3.4914521e+01
+   3.6500000e+01   2.5794959e+00   3.4919405e+01
+   3.6500000e+01   2.6451405e+00   3.4928736e+01
+   3.6500000e+01   2.7416281e+00   3.4940488e+01
+   3.6500000e+01   2.8990331e+00   3.4952802e+01
+   3.6500000e+01   3.0880496e+00   3.4961322e+01
+   3.6500000e+01   3.3536529e+00   3.4973281e+01
+   3.6500000e+01   3.5827603e+00   3.4972736e+01
+   3.6500000e+01   3.8425455e+00   3.4984074e+01
+   3.6500000e+01   4.3142231e+00   3.5036645e+01
+   3.6500000e+01   5.2460165e+00   3.5170777e+01
+   3.6500000e+01   6.6648926e+00   3.5382711e+01
+   3.6500000e+01   8.2569008e+00   3.5621149e+01
+   3.6500000e+01   9.2870413e+00   3.5722876e+01
+   3.6500000e+01   9.5328760e+00   3.5630785e+01
+   3.6500000e+01   9.9026364e+00   3.5537066e+01
+   3.6500000e+01   1.0298083e+01   3.5480702e+01
+   3.6500000e+01   1.0770826e+01   3.5489091e+01
+   3.6500000e+01   1.1255678e+01   3.5531455e+01
+   3.6500000e+01   1.1602421e+01   3.5566000e+01
+   3.6500000e+01   1.1914041e+01   3.5601397e+01
+   3.6500000e+01   1.2147298e+01   3.5626901e+01
+   3.6500000e+01   1.2343058e+01   3.5648785e+01
+   3.6500000e+01   1.2494471e+01   3.5664835e+01
+   3.6500000e+01   1.2597438e+01   3.5676273e+01
+   3.6500000e+01   1.2688149e+01   3.5686380e+01
+   3.6500000e+01   1.2785116e+01   3.5697636e+01
+   3.6500000e+01   1.2848306e+01   3.5705074e+01
+   3.6500000e+01   1.2914322e+01   3.5711992e+01
+   3.6500000e+01   1.3001628e+01   3.5721826e+01
+   3.6500000e+01   1.3051289e+01   3.5725025e+01
+   3.6500000e+01   1.3089132e+01   3.5727711e+01
+   3.6500000e+01   1.3142140e+01   3.5735612e+01
+   3.6500000e+01   1.3179091e+01   3.5738893e+01
+   3.6500000e+01   1.3225289e+01   3.5744364e+01
+   3.6500000e+01   1.3285380e+01   3.5750000e+01
+   3.6500000e+01   1.3351380e+01   3.5760339e+01
+   3.6500000e+01   1.3413512e+01   3.5768570e+01
+   3.6500000e+01   1.3485198e+01   3.5776364e+01
+   3.6500000e+01   1.3539636e+01   3.5778083e+01
+   3.6500000e+01   1.3586083e+01   3.5781620e+01
+   3.6500000e+01   1.3649860e+01   3.5788785e+01
+   3.6500000e+01   1.3724041e+01   3.5795174e+01
+   3.6500000e+01   1.3795636e+01   3.5799347e+01
+   3.6500000e+01   1.3896884e+01   3.5810504e+01
+   3.6500000e+01   1.4007802e+01   3.5819636e+01
+   3.6500000e+01   1.4119207e+01   3.5823149e+01
+   3.6500000e+01   1.4275008e+01   3.5831579e+01
+   3.6500000e+01   1.4495909e+01   3.5833537e+01
+   3.6500000e+01   1.4732562e+01   3.5837397e+01
+   3.6500000e+01   1.4997446e+01   3.5833347e+01
+   3.6500000e+01   1.5706603e+01   3.5837281e+01
+   3.6500000e+01   1.6613545e+01   3.5844116e+01
+   3.6500000e+01   1.7261298e+01   3.5850289e+01
+   3.6500000e+01   1.8017446e+01   3.5853281e+01
+   3.6500000e+01   1.8879421e+01   3.5867727e+01
+   3.6500000e+01   1.9534612e+01   3.5871678e+01
+   3.6500000e+01   1.9774289e+01   3.5868719e+01
+   3.6500000e+01   1.9845992e+01   3.5868760e+01
+   3.6500000e+01   1.9857645e+01   3.5869248e+01
+   3.6500000e+01   1.9858744e+01   3.5869810e+01
+   3.6500000e+01   1.9851843e+01   3.5868702e+01
+   3.6500000e+01   1.9795959e+01   3.5873008e+01
+   3.6550000e+01   2.5103554e+00   3.4896107e+01
+   3.6550000e+01   2.5061901e+00   3.4902207e+01
+   3.6550000e+01   2.5121488e+00   3.4907306e+01
+   3.6550000e+01   2.5413554e+00   3.4914521e+01
+   3.6550000e+01   2.5794959e+00   3.4919405e+01
+   3.6550000e+01   2.6451405e+00   3.4928736e+01
+   3.6550000e+01   2.7416281e+00   3.4940488e+01
+   3.6550000e+01   2.8990331e+00   3.4952802e+01
+   3.6550000e+01   3.0880496e+00   3.4961322e+01
+   3.6550000e+01   3.3536529e+00   3.4973281e+01
+   3.6550000e+01   3.5827603e+00   3.4972736e+01
+   3.6550000e+01   3.8425455e+00   3.4984074e+01
+   3.6550000e+01   4.3142231e+00   3.5036645e+01
+   3.6550000e+01   5.2460165e+00   3.5170777e+01
+   3.6550000e+01   6.6648926e+00   3.5382711e+01
+   3.6550000e+01   8.2569008e+00   3.5621149e+01
+   3.6550000e+01   9.2870413e+00   3.5722876e+01
+   3.6550000e+01   9.5328760e+00   3.5630785e+01
+   3.6550000e+01   9.9026364e+00   3.5537066e+01
+   3.6550000e+01   1.0298083e+01   3.5480702e+01
+   3.6550000e+01   1.0770826e+01   3.5489091e+01
+   3.6550000e+01   1.1255678e+01   3.5531455e+01
+   3.6550000e+01   1.1602421e+01   3.5566000e+01
+   3.6550000e+01   1.1914041e+01   3.5601397e+01
+   3.6550000e+01   1.2147298e+01   3.5626901e+01
+   3.6550000e+01   1.2343058e+01   3.5648785e+01
+   3.6550000e+01   1.2494471e+01   3.5664835e+01
+   3.6550000e+01   1.2597438e+01   3.5676273e+01
+   3.6550000e+01   1.2688149e+01   3.5686380e+01
+   3.6550000e+01   1.2785116e+01   3.5697636e+01
+   3.6550000e+01   1.2848306e+01   3.5705074e+01
+   3.6550000e+01   1.2914322e+01   3.5711992e+01
+   3.6550000e+01   1.3001628e+01   3.5721826e+01
+   3.6550000e+01   1.3051289e+01   3.5725025e+01
+   3.6550000e+01   1.3089132e+01   3.5727711e+01
+   3.6550000e+01   1.3142140e+01   3.5735612e+01
+   3.6550000e+01   1.3179091e+01   3.5738893e+01
+   3.6550000e+01   1.3225289e+01   3.5744364e+01
+   3.6550000e+01   1.3285380e+01   3.5750000e+01
+   3.6550000e+01   1.3351380e+01   3.5760339e+01
+   3.6550000e+01   1.3413512e+01   3.5768570e+01
+   3.6550000e+01   1.3485198e+01   3.5776364e+01
+   3.6550000e+01   1.3539636e+01   3.5778083e+01
+   3.6550000e+01   1.3586083e+01   3.5781620e+01
+   3.6550000e+01   1.3649860e+01   3.5788785e+01
+   3.6550000e+01   1.3724041e+01   3.5795174e+01
+   3.6550000e+01   1.3795636e+01   3.5799347e+01
+   3.6550000e+01   1.3896884e+01   3.5810504e+01
+   3.6550000e+01   1.4007802e+01   3.5819636e+01
+   3.6550000e+01   1.4119207e+01   3.5823149e+01
+   3.6550000e+01   1.4275008e+01   3.5831579e+01
+   3.6550000e+01   1.4495909e+01   3.5833537e+01
+   3.6550000e+01   1.4732562e+01   3.5837397e+01
+   3.6550000e+01   1.4997446e+01   3.5833347e+01
+   3.6550000e+01   1.5706603e+01   3.5837281e+01
+   3.6550000e+01   1.6613545e+01   3.5844116e+01
+   3.6550000e+01   1.7261298e+01   3.5850289e+01
+   3.6550000e+01   1.8017446e+01   3.5853281e+01
+   3.6550000e+01   1.8879421e+01   3.5867727e+01
+   3.6550000e+01   1.9534612e+01   3.5871678e+01
+   3.6550000e+01   1.9774289e+01   3.5868719e+01
+   3.6550000e+01   1.9845992e+01   3.5868760e+01
+   3.6550000e+01   1.9857645e+01   3.5869248e+01
+   3.6550000e+01   1.9858744e+01   3.5869810e+01
+   3.6550000e+01   1.9851843e+01   3.5868702e+01
+   3.6550000e+01   1.9795959e+01   3.5873008e+01
+   3.6600000e+01   2.5103554e+00   3.4896107e+01
+   3.6600000e+01   2.5061901e+00   3.4902207e+01
+   3.6600000e+01   2.5121488e+00   3.4907306e+01
+   3.6600000e+01   2.5413554e+00   3.4914521e+01
+   3.6600000e+01   2.5794959e+00   3.4919405e+01
+   3.6600000e+01   2.6451405e+00   3.4928736e+01
+   3.6600000e+01   2.7416281e+00   3.4940488e+01
+   3.6600000e+01   2.8990331e+00   3.4952802e+01
+   3.6600000e+01   3.0880496e+00   3.4961322e+01
+   3.6600000e+01   3.3536529e+00   3.4973281e+01
+   3.6600000e+01   3.5827603e+00   3.4972736e+01
+   3.6600000e+01   3.8425455e+00   3.4984074e+01
+   3.6600000e+01   4.3142231e+00   3.5036645e+01
+   3.6600000e+01   5.2460165e+00   3.5170777e+01
+   3.6600000e+01   6.6648926e+00   3.5382711e+01
+   3.6600000e+01   8.2569008e+00   3.5621149e+01
+   3.6600000e+01   9.2870413e+00   3.5722876e+01
+   3.6600000e+01   9.5328760e+00   3.5630785e+01
+   3.6600000e+01   9.9026364e+00   3.5537066e+01
+   3.6600000e+01   1.0298083e+01   3.5480702e+01
+   3.6600000e+01   1.0770826e+01   3.5489091e+01
+   3.6600000e+01   1.1255678e+01   3.5531455e+01
+   3.6600000e+01   1.1602421e+01   3.5566000e+01
+   3.6600000e+01   1.1914041e+01   3.5601397e+01
+   3.6600000e+01   1.2147298e+01   3.5626901e+01
+   3.6600000e+01   1.2343058e+01   3.5648785e+01
+   3.6600000e+01   1.2494471e+01   3.5664835e+01
+   3.6600000e+01   1.2597438e+01   3.5676273e+01
+   3.6600000e+01   1.2688149e+01   3.5686380e+01
+   3.6600000e+01   1.2785116e+01   3.5697636e+01
+   3.6600000e+01   1.2848306e+01   3.5705074e+01
+   3.6600000e+01   1.2914322e+01   3.5711992e+01
+   3.6600000e+01   1.3001628e+01   3.5721826e+01
+   3.6600000e+01   1.3051289e+01   3.5725025e+01
+   3.6600000e+01   1.3089132e+01   3.5727711e+01
+   3.6600000e+01   1.3142140e+01   3.5735612e+01
+   3.6600000e+01   1.3179091e+01   3.5738893e+01
+   3.6600000e+01   1.3225289e+01   3.5744364e+01
+   3.6600000e+01   1.3285380e+01   3.5750000e+01
+   3.6600000e+01   1.3351380e+01   3.5760339e+01
+   3.6600000e+01   1.3413512e+01   3.5768570e+01
+   3.6600000e+01   1.3485198e+01   3.5776364e+01
+   3.6600000e+01   1.3539636e+01   3.5778083e+01
+   3.6600000e+01   1.3586083e+01   3.5781620e+01
+   3.6600000e+01   1.3649860e+01   3.5788785e+01
+   3.6600000e+01   1.3724041e+01   3.5795174e+01
+   3.6600000e+01   1.3795636e+01   3.5799347e+01
+   3.6600000e+01   1.3896884e+01   3.5810504e+01
+   3.6600000e+01   1.4007802e+01   3.5819636e+01
+   3.6600000e+01   1.4119207e+01   3.5823149e+01
+   3.6600000e+01   1.4275008e+01   3.5831579e+01
+   3.6600000e+01   1.4495909e+01   3.5833537e+01
+   3.6600000e+01   1.4732562e+01   3.5837397e+01
+   3.6600000e+01   1.4997446e+01   3.5833347e+01
+   3.6600000e+01   1.5706603e+01   3.5837281e+01
+   3.6600000e+01   1.6613545e+01   3.5844116e+01
+   3.6600000e+01   1.7261298e+01   3.5850289e+01
+   3.6600000e+01   1.8017446e+01   3.5853281e+01
+   3.6600000e+01   1.8879421e+01   3.5867727e+01
+   3.6600000e+01   1.9534612e+01   3.5871678e+01
+   3.6600000e+01   1.9774289e+01   3.5868719e+01
+   3.6600000e+01   1.9845992e+01   3.5868760e+01
+   3.6600000e+01   1.9857645e+01   3.5869248e+01
+   3.6600000e+01   1.9858744e+01   3.5869810e+01
+   3.6600000e+01   1.9851843e+01   3.5868702e+01
+   3.6600000e+01   1.9795959e+01   3.5873008e+01
+   3.6650000e+01   2.5103554e+00   3.4896107e+01
+   3.6650000e+01   2.5061901e+00   3.4902207e+01
+   3.6650000e+01   2.5121488e+00   3.4907306e+01
+   3.6650000e+01   2.5413554e+00   3.4914521e+01
+   3.6650000e+01   2.5794959e+00   3.4919405e+01
+   3.6650000e+01   2.6451405e+00   3.4928736e+01
+   3.6650000e+01   2.7416281e+00   3.4940488e+01
+   3.6650000e+01   2.8990331e+00   3.4952802e+01
+   3.6650000e+01   3.0880496e+00   3.4961322e+01
+   3.6650000e+01   3.3536529e+00   3.4973281e+01
+   3.6650000e+01   3.5827603e+00   3.4972736e+01
+   3.6650000e+01   3.8425455e+00   3.4984074e+01
+   3.6650000e+01   4.3142231e+00   3.5036645e+01
+   3.6650000e+01   5.2460165e+00   3.5170777e+01
+   3.6650000e+01   6.6648926e+00   3.5382711e+01
+   3.6650000e+01   8.2569008e+00   3.5621149e+01
+   3.6650000e+01   9.2870413e+00   3.5722876e+01
+   3.6650000e+01   9.5328760e+00   3.5630785e+01
+   3.6650000e+01   9.9026364e+00   3.5537066e+01
+   3.6650000e+01   1.0298083e+01   3.5480702e+01
+   3.6650000e+01   1.0770826e+01   3.5489091e+01
+   3.6650000e+01   1.1255678e+01   3.5531455e+01
+   3.6650000e+01   1.1602421e+01   3.5566000e+01
+   3.6650000e+01   1.1914041e+01   3.5601397e+01
+   3.6650000e+01   1.2147298e+01   3.5626901e+01
+   3.6650000e+01   1.2343058e+01   3.5648785e+01
+   3.6650000e+01   1.2494471e+01   3.5664835e+01
+   3.6650000e+01   1.2597438e+01   3.5676273e+01
+   3.6650000e+01   1.2688149e+01   3.5686380e+01
+   3.6650000e+01   1.2785116e+01   3.5697636e+01
+   3.6650000e+01   1.2848306e+01   3.5705074e+01
+   3.6650000e+01   1.2914322e+01   3.5711992e+01
+   3.6650000e+01   1.3001628e+01   3.5721826e+01
+   3.6650000e+01   1.3051289e+01   3.5725025e+01
+   3.6650000e+01   1.3089132e+01   3.5727711e+01
+   3.6650000e+01   1.3142140e+01   3.5735612e+01
+   3.6650000e+01   1.3179091e+01   3.5738893e+01
+   3.6650000e+01   1.3225289e+01   3.5744364e+01
+   3.6650000e+01   1.3285380e+01   3.5750000e+01
+   3.6650000e+01   1.3351380e+01   3.5760339e+01
+   3.6650000e+01   1.3413512e+01   3.5768570e+01
+   3.6650000e+01   1.3485198e+01   3.5776364e+01
+   3.6650000e+01   1.3539636e+01   3.5778083e+01
+   3.6650000e+01   1.3586083e+01   3.5781620e+01
+   3.6650000e+01   1.3649860e+01   3.5788785e+01
+   3.6650000e+01   1.3724041e+01   3.5795174e+01
+   3.6650000e+01   1.3795636e+01   3.5799347e+01
+   3.6650000e+01   1.3896884e+01   3.5810504e+01
+   3.6650000e+01   1.4007802e+01   3.5819636e+01
+   3.6650000e+01   1.4119207e+01   3.5823149e+01
+   3.6650000e+01   1.4275008e+01   3.5831579e+01
+   3.6650000e+01   1.4495909e+01   3.5833537e+01
+   3.6650000e+01   1.4732562e+01   3.5837397e+01
+   3.6650000e+01   1.4997446e+01   3.5833347e+01
+   3.6650000e+01   1.5706603e+01   3.5837281e+01
+   3.6650000e+01   1.6613545e+01   3.5844116e+01
+   3.6650000e+01   1.7261298e+01   3.5850289e+01
+   3.6650000e+01   1.8017446e+01   3.5853281e+01
+   3.6650000e+01   1.8879421e+01   3.5867727e+01
+   3.6650000e+01   1.9534612e+01   3.5871678e+01
+   3.6650000e+01   1.9774289e+01   3.5868719e+01
+   3.6650000e+01   1.9845992e+01   3.5868760e+01
+   3.6650000e+01   1.9857645e+01   3.5869248e+01
+   3.6650000e+01   1.9858744e+01   3.5869810e+01
+   3.6650000e+01   1.9851843e+01   3.5868702e+01
+   3.6650000e+01   1.9795959e+01   3.5873008e+01
+   3.6700000e+01   2.5103554e+00   3.4896107e+01
+   3.6700000e+01   2.5061901e+00   3.4902207e+01
+   3.6700000e+01   2.5121488e+00   3.4907306e+01
+   3.6700000e+01   2.5413554e+00   3.4914521e+01
+   3.6700000e+01   2.5794959e+00   3.4919405e+01
+   3.6700000e+01   2.6451405e+00   3.4928736e+01
+   3.6700000e+01   2.7416281e+00   3.4940488e+01
+   3.6700000e+01   2.8990331e+00   3.4952802e+01
+   3.6700000e+01   3.0880496e+00   3.4961322e+01
+   3.6700000e+01   3.3536529e+00   3.4973281e+01
+   3.6700000e+01   3.5827603e+00   3.4972736e+01
+   3.6700000e+01   3.8425455e+00   3.4984074e+01
+   3.6700000e+01   4.3142231e+00   3.5036645e+01
+   3.6700000e+01   5.2460165e+00   3.5170777e+01
+   3.6700000e+01   6.6648926e+00   3.5382711e+01
+   3.6700000e+01   8.2569008e+00   3.5621149e+01
+   3.6700000e+01   9.2870413e+00   3.5722876e+01
+   3.6700000e+01   9.5328760e+00   3.5630785e+01
+   3.6700000e+01   9.9026364e+00   3.5537066e+01
+   3.6700000e+01   1.0298083e+01   3.5480702e+01
+   3.6700000e+01   1.0770826e+01   3.5489091e+01
+   3.6700000e+01   1.1255678e+01   3.5531455e+01
+   3.6700000e+01   1.1602421e+01   3.5566000e+01
+   3.6700000e+01   1.1914041e+01   3.5601397e+01
+   3.6700000e+01   1.2147298e+01   3.5626901e+01
+   3.6700000e+01   1.2343058e+01   3.5648785e+01
+   3.6700000e+01   1.2494471e+01   3.5664835e+01
+   3.6700000e+01   1.2597438e+01   3.5676273e+01
+   3.6700000e+01   1.2688149e+01   3.5686380e+01
+   3.6700000e+01   1.2785116e+01   3.5697636e+01
+   3.6700000e+01   1.2848306e+01   3.5705074e+01
+   3.6700000e+01   1.2914322e+01   3.5711992e+01
+   3.6700000e+01   1.3001628e+01   3.5721826e+01
+   3.6700000e+01   1.3051289e+01   3.5725025e+01
+   3.6700000e+01   1.3089132e+01   3.5727711e+01
+   3.6700000e+01   1.3142140e+01   3.5735612e+01
+   3.6700000e+01   1.3179091e+01   3.5738893e+01
+   3.6700000e+01   1.3225289e+01   3.5744364e+01
+   3.6700000e+01   1.3285380e+01   3.5750000e+01
+   3.6700000e+01   1.3351380e+01   3.5760339e+01
+   3.6700000e+01   1.3413512e+01   3.5768570e+01
+   3.6700000e+01   1.3485198e+01   3.5776364e+01
+   3.6700000e+01   1.3539636e+01   3.5778083e+01
+   3.6700000e+01   1.3586083e+01   3.5781620e+01
+   3.6700000e+01   1.3649860e+01   3.5788785e+01
+   3.6700000e+01   1.3724041e+01   3.5795174e+01
+   3.6700000e+01   1.3795636e+01   3.5799347e+01
+   3.6700000e+01   1.3896884e+01   3.5810504e+01
+   3.6700000e+01   1.4007802e+01   3.5819636e+01
+   3.6700000e+01   1.4119207e+01   3.5823149e+01
+   3.6700000e+01   1.4275008e+01   3.5831579e+01
+   3.6700000e+01   1.4495909e+01   3.5833537e+01
+   3.6700000e+01   1.4732562e+01   3.5837397e+01
+   3.6700000e+01   1.4997446e+01   3.5833347e+01
+   3.6700000e+01   1.5706603e+01   3.5837281e+01
+   3.6700000e+01   1.6613545e+01   3.5844116e+01
+   3.6700000e+01   1.7261298e+01   3.5850289e+01
+   3.6700000e+01   1.8017446e+01   3.5853281e+01
+   3.6700000e+01   1.8879421e+01   3.5867727e+01
+   3.6700000e+01   1.9534612e+01   3.5871678e+01
+   3.6700000e+01   1.9774289e+01   3.5868719e+01
+   3.6700000e+01   1.9845992e+01   3.5868760e+01
+   3.6700000e+01   1.9857645e+01   3.5869248e+01
+   3.6700000e+01   1.9858744e+01   3.5869810e+01
+   3.6700000e+01   1.9851843e+01   3.5868702e+01
+   3.6700000e+01   1.9795959e+01   3.5873008e+01
+   3.6750000e+01   2.5103554e+00   3.4896107e+01
+   3.6750000e+01   2.5061901e+00   3.4902207e+01
+   3.6750000e+01   2.5121488e+00   3.4907306e+01
+   3.6750000e+01   2.5413554e+00   3.4914521e+01
+   3.6750000e+01   2.5794959e+00   3.4919405e+01
+   3.6750000e+01   2.6451405e+00   3.4928736e+01
+   3.6750000e+01   2.7416281e+00   3.4940488e+01
+   3.6750000e+01   2.8990331e+00   3.4952802e+01
+   3.6750000e+01   3.0880496e+00   3.4961322e+01
+   3.6750000e+01   3.3536529e+00   3.4973281e+01
+   3.6750000e+01   3.5827603e+00   3.4972736e+01
+   3.6750000e+01   3.8425455e+00   3.4984074e+01
+   3.6750000e+01   4.3142231e+00   3.5036645e+01
+   3.6750000e+01   5.2460165e+00   3.5170777e+01
+   3.6750000e+01   6.6648926e+00   3.5382711e+01
+   3.6750000e+01   8.2569008e+00   3.5621149e+01
+   3.6750000e+01   9.2870413e+00   3.5722876e+01
+   3.6750000e+01   9.5328760e+00   3.5630785e+01
+   3.6750000e+01   9.9026364e+00   3.5537066e+01
+   3.6750000e+01   1.0298083e+01   3.5480702e+01
+   3.6750000e+01   1.0770826e+01   3.5489091e+01
+   3.6750000e+01   1.1255678e+01   3.5531455e+01
+   3.6750000e+01   1.1602421e+01   3.5566000e+01
+   3.6750000e+01   1.1914041e+01   3.5601397e+01
+   3.6750000e+01   1.2147298e+01   3.5626901e+01
+   3.6750000e+01   1.2343058e+01   3.5648785e+01
+   3.6750000e+01   1.2494471e+01   3.5664835e+01
+   3.6750000e+01   1.2597438e+01   3.5676273e+01
+   3.6750000e+01   1.2688149e+01   3.5686380e+01
+   3.6750000e+01   1.2785116e+01   3.5697636e+01
+   3.6750000e+01   1.2848306e+01   3.5705074e+01
+   3.6750000e+01   1.2914322e+01   3.5711992e+01
+   3.6750000e+01   1.3001628e+01   3.5721826e+01
+   3.6750000e+01   1.3051289e+01   3.5725025e+01
+   3.6750000e+01   1.3089132e+01   3.5727711e+01
+   3.6750000e+01   1.3142140e+01   3.5735612e+01
+   3.6750000e+01   1.3179091e+01   3.5738893e+01
+   3.6750000e+01   1.3225289e+01   3.5744364e+01
+   3.6750000e+01   1.3285380e+01   3.5750000e+01
+   3.6750000e+01   1.3351380e+01   3.5760339e+01
+   3.6750000e+01   1.3413512e+01   3.5768570e+01
+   3.6750000e+01   1.3485198e+01   3.5776364e+01
+   3.6750000e+01   1.3539636e+01   3.5778083e+01
+   3.6750000e+01   1.3586083e+01   3.5781620e+01
+   3.6750000e+01   1.3649860e+01   3.5788785e+01
+   3.6750000e+01   1.3724041e+01   3.5795174e+01
+   3.6750000e+01   1.3795636e+01   3.5799347e+01
+   3.6750000e+01   1.3896884e+01   3.5810504e+01
+   3.6750000e+01   1.4007802e+01   3.5819636e+01
+   3.6750000e+01   1.4119207e+01   3.5823149e+01
+   3.6750000e+01   1.4275008e+01   3.5831579e+01
+   3.6750000e+01   1.4495909e+01   3.5833537e+01
+   3.6750000e+01   1.4732562e+01   3.5837397e+01
+   3.6750000e+01   1.4997446e+01   3.5833347e+01
+   3.6750000e+01   1.5706603e+01   3.5837281e+01
+   3.6750000e+01   1.6613545e+01   3.5844116e+01
+   3.6750000e+01   1.7261298e+01   3.5850289e+01
+   3.6750000e+01   1.8017446e+01   3.5853281e+01
+   3.6750000e+01   1.8879421e+01   3.5867727e+01
+   3.6750000e+01   1.9534612e+01   3.5871678e+01
+   3.6750000e+01   1.9774289e+01   3.5868719e+01
+   3.6750000e+01   1.9845992e+01   3.5868760e+01
+   3.6750000e+01   1.9857645e+01   3.5869248e+01
+   3.6750000e+01   1.9858744e+01   3.5869810e+01
+   3.6750000e+01   1.9851843e+01   3.5868702e+01
+   3.6750000e+01   1.9795959e+01   3.5873008e+01
+   3.6800000e+01   2.5103554e+00   3.4896107e+01
+   3.6800000e+01   2.5061901e+00   3.4902207e+01
+   3.6800000e+01   2.5121488e+00   3.4907306e+01
+   3.6800000e+01   2.5413554e+00   3.4914521e+01
+   3.6800000e+01   2.5794959e+00   3.4919405e+01
+   3.6800000e+01   2.6451405e+00   3.4928736e+01
+   3.6800000e+01   2.7416281e+00   3.4940488e+01
+   3.6800000e+01   2.8990331e+00   3.4952802e+01
+   3.6800000e+01   3.0880496e+00   3.4961322e+01
+   3.6800000e+01   3.3536529e+00   3.4973281e+01
+   3.6800000e+01   3.5827603e+00   3.4972736e+01
+   3.6800000e+01   3.8425455e+00   3.4984074e+01
+   3.6800000e+01   4.3142231e+00   3.5036645e+01
+   3.6800000e+01   5.2460165e+00   3.5170777e+01
+   3.6800000e+01   6.6648926e+00   3.5382711e+01
+   3.6800000e+01   8.2569008e+00   3.5621149e+01
+   3.6800000e+01   9.2870413e+00   3.5722876e+01
+   3.6800000e+01   9.5328760e+00   3.5630785e+01
+   3.6800000e+01   9.9026364e+00   3.5537066e+01
+   3.6800000e+01   1.0298083e+01   3.5480702e+01
+   3.6800000e+01   1.0770826e+01   3.5489091e+01
+   3.6800000e+01   1.1255678e+01   3.5531455e+01
+   3.6800000e+01   1.1602421e+01   3.5566000e+01
+   3.6800000e+01   1.1914041e+01   3.5601397e+01
+   3.6800000e+01   1.2147298e+01   3.5626901e+01
+   3.6800000e+01   1.2343058e+01   3.5648785e+01
+   3.6800000e+01   1.2494471e+01   3.5664835e+01
+   3.6800000e+01   1.2597438e+01   3.5676273e+01
+   3.6800000e+01   1.2688149e+01   3.5686380e+01
+   3.6800000e+01   1.2785116e+01   3.5697636e+01
+   3.6800000e+01   1.2848306e+01   3.5705074e+01
+   3.6800000e+01   1.2914322e+01   3.5711992e+01
+   3.6800000e+01   1.3001628e+01   3.5721826e+01
+   3.6800000e+01   1.3051289e+01   3.5725025e+01
+   3.6800000e+01   1.3089132e+01   3.5727711e+01
+   3.6800000e+01   1.3142140e+01   3.5735612e+01
+   3.6800000e+01   1.3179091e+01   3.5738893e+01
+   3.6800000e+01   1.3225289e+01   3.5744364e+01
+   3.6800000e+01   1.3285380e+01   3.5750000e+01
+   3.6800000e+01   1.3351380e+01   3.5760339e+01
+   3.6800000e+01   1.3413512e+01   3.5768570e+01
+   3.6800000e+01   1.3485198e+01   3.5776364e+01
+   3.6800000e+01   1.3539636e+01   3.5778083e+01
+   3.6800000e+01   1.3586083e+01   3.5781620e+01
+   3.6800000e+01   1.3649860e+01   3.5788785e+01
+   3.6800000e+01   1.3724041e+01   3.5795174e+01
+   3.6800000e+01   1.3795636e+01   3.5799347e+01
+   3.6800000e+01   1.3896884e+01   3.5810504e+01
+   3.6800000e+01   1.4007802e+01   3.5819636e+01
+   3.6800000e+01   1.4119207e+01   3.5823149e+01
+   3.6800000e+01   1.4275008e+01   3.5831579e+01
+   3.6800000e+01   1.4495909e+01   3.5833537e+01
+   3.6800000e+01   1.4732562e+01   3.5837397e+01
+   3.6800000e+01   1.4997446e+01   3.5833347e+01
+   3.6800000e+01   1.5706603e+01   3.5837281e+01
+   3.6800000e+01   1.6613545e+01   3.5844116e+01
+   3.6800000e+01   1.7261298e+01   3.5850289e+01
+   3.6800000e+01   1.8017446e+01   3.5853281e+01
+   3.6800000e+01   1.8879421e+01   3.5867727e+01
+   3.6800000e+01   1.9534612e+01   3.5871678e+01
+   3.6800000e+01   1.9774289e+01   3.5868719e+01
+   3.6800000e+01   1.9845992e+01   3.5868760e+01
+   3.6800000e+01   1.9857645e+01   3.5869248e+01
+   3.6800000e+01   1.9858744e+01   3.5869810e+01
+   3.6800000e+01   1.9851843e+01   3.5868702e+01
+   3.6800000e+01   1.9795959e+01   3.5873008e+01
+   3.6850000e+01   2.5103554e+00   3.4896107e+01
+   3.6850000e+01   2.5061901e+00   3.4902207e+01
+   3.6850000e+01   2.5121488e+00   3.4907306e+01
+   3.6850000e+01   2.5413554e+00   3.4914521e+01
+   3.6850000e+01   2.5794959e+00   3.4919405e+01
+   3.6850000e+01   2.6451405e+00   3.4928736e+01
+   3.6850000e+01   2.7416281e+00   3.4940488e+01
+   3.6850000e+01   2.8990331e+00   3.4952802e+01
+   3.6850000e+01   3.0880496e+00   3.4961322e+01
+   3.6850000e+01   3.3536529e+00   3.4973281e+01
+   3.6850000e+01   3.5827603e+00   3.4972736e+01
+   3.6850000e+01   3.8425455e+00   3.4984074e+01
+   3.6850000e+01   4.3142231e+00   3.5036645e+01
+   3.6850000e+01   5.2460165e+00   3.5170777e+01
+   3.6850000e+01   6.6648926e+00   3.5382711e+01
+   3.6850000e+01   8.2569008e+00   3.5621149e+01
+   3.6850000e+01   9.2870413e+00   3.5722876e+01
+   3.6850000e+01   9.5328760e+00   3.5630785e+01
+   3.6850000e+01   9.9026364e+00   3.5537066e+01
+   3.6850000e+01   1.0298083e+01   3.5480702e+01
+   3.6850000e+01   1.0770826e+01   3.5489091e+01
+   3.6850000e+01   1.1255678e+01   3.5531455e+01
+   3.6850000e+01   1.1602421e+01   3.5566000e+01
+   3.6850000e+01   1.1914041e+01   3.5601397e+01
+   3.6850000e+01   1.2147298e+01   3.5626901e+01
+   3.6850000e+01   1.2343058e+01   3.5648785e+01
+   3.6850000e+01   1.2494471e+01   3.5664835e+01
+   3.6850000e+01   1.2597438e+01   3.5676273e+01
+   3.6850000e+01   1.2688149e+01   3.5686380e+01
+   3.6850000e+01   1.2785116e+01   3.5697636e+01
+   3.6850000e+01   1.2848306e+01   3.5705074e+01
+   3.6850000e+01   1.2914322e+01   3.5711992e+01
+   3.6850000e+01   1.3001628e+01   3.5721826e+01
+   3.6850000e+01   1.3051289e+01   3.5725025e+01
+   3.6850000e+01   1.3089132e+01   3.5727711e+01
+   3.6850000e+01   1.3142140e+01   3.5735612e+01
+   3.6850000e+01   1.3179091e+01   3.5738893e+01
+   3.6850000e+01   1.3225289e+01   3.5744364e+01
+   3.6850000e+01   1.3285380e+01   3.5750000e+01
+   3.6850000e+01   1.3351380e+01   3.5760339e+01
+   3.6850000e+01   1.3413512e+01   3.5768570e+01
+   3.6850000e+01   1.3485198e+01   3.5776364e+01
+   3.6850000e+01   1.3539636e+01   3.5778083e+01
+   3.6850000e+01   1.3586083e+01   3.5781620e+01
+   3.6850000e+01   1.3649860e+01   3.5788785e+01
+   3.6850000e+01   1.3724041e+01   3.5795174e+01
+   3.6850000e+01   1.3795636e+01   3.5799347e+01
+   3.6850000e+01   1.3896884e+01   3.5810504e+01
+   3.6850000e+01   1.4007802e+01   3.5819636e+01
+   3.6850000e+01   1.4119207e+01   3.5823149e+01
+   3.6850000e+01   1.4275008e+01   3.5831579e+01
+   3.6850000e+01   1.4495909e+01   3.5833537e+01
+   3.6850000e+01   1.4732562e+01   3.5837397e+01
+   3.6850000e+01   1.4997446e+01   3.5833347e+01
+   3.6850000e+01   1.5706603e+01   3.5837281e+01
+   3.6850000e+01   1.6613545e+01   3.5844116e+01
+   3.6850000e+01   1.7261298e+01   3.5850289e+01
+   3.6850000e+01   1.8017446e+01   3.5853281e+01
+   3.6850000e+01   1.8879421e+01   3.5867727e+01
+   3.6850000e+01   1.9534612e+01   3.5871678e+01
+   3.6850000e+01   1.9774289e+01   3.5868719e+01
+   3.6850000e+01   1.9845992e+01   3.5868760e+01
+   3.6850000e+01   1.9857645e+01   3.5869248e+01
+   3.6850000e+01   1.9858744e+01   3.5869810e+01
+   3.6850000e+01   1.9851843e+01   3.5868702e+01
+   3.6850000e+01   1.9795959e+01   3.5873008e+01
+   3.6900000e+01   2.5103554e+00   3.4896107e+01
+   3.6900000e+01   2.5061901e+00   3.4902207e+01
+   3.6900000e+01   2.5121488e+00   3.4907306e+01
+   3.6900000e+01   2.5413554e+00   3.4914521e+01
+   3.6900000e+01   2.5794959e+00   3.4919405e+01
+   3.6900000e+01   2.6451405e+00   3.4928736e+01
+   3.6900000e+01   2.7416281e+00   3.4940488e+01
+   3.6900000e+01   2.8990331e+00   3.4952802e+01
+   3.6900000e+01   3.0880496e+00   3.4961322e+01
+   3.6900000e+01   3.3536529e+00   3.4973281e+01
+   3.6900000e+01   3.5827603e+00   3.4972736e+01
+   3.6900000e+01   3.8425455e+00   3.4984074e+01
+   3.6900000e+01   4.3142231e+00   3.5036645e+01
+   3.6900000e+01   5.2460165e+00   3.5170777e+01
+   3.6900000e+01   6.6648926e+00   3.5382711e+01
+   3.6900000e+01   8.2569008e+00   3.5621149e+01
+   3.6900000e+01   9.2870413e+00   3.5722876e+01
+   3.6900000e+01   9.5328760e+00   3.5630785e+01
+   3.6900000e+01   9.9026364e+00   3.5537066e+01
+   3.6900000e+01   1.0298083e+01   3.5480702e+01
+   3.6900000e+01   1.0770826e+01   3.5489091e+01
+   3.6900000e+01   1.1255678e+01   3.5531455e+01
+   3.6900000e+01   1.1602421e+01   3.5566000e+01
+   3.6900000e+01   1.1914041e+01   3.5601397e+01
+   3.6900000e+01   1.2147298e+01   3.5626901e+01
+   3.6900000e+01   1.2343058e+01   3.5648785e+01
+   3.6900000e+01   1.2494471e+01   3.5664835e+01
+   3.6900000e+01   1.2597438e+01   3.5676273e+01
+   3.6900000e+01   1.2688149e+01   3.5686380e+01
+   3.6900000e+01   1.2785116e+01   3.5697636e+01
+   3.6900000e+01   1.2848306e+01   3.5705074e+01
+   3.6900000e+01   1.2914322e+01   3.5711992e+01
+   3.6900000e+01   1.3001628e+01   3.5721826e+01
+   3.6900000e+01   1.3051289e+01   3.5725025e+01
+   3.6900000e+01   1.3089132e+01   3.5727711e+01
+   3.6900000e+01   1.3142140e+01   3.5735612e+01
+   3.6900000e+01   1.3179091e+01   3.5738893e+01
+   3.6900000e+01   1.3225289e+01   3.5744364e+01
+   3.6900000e+01   1.3285380e+01   3.5750000e+01
+   3.6900000e+01   1.3351380e+01   3.5760339e+01
+   3.6900000e+01   1.3413512e+01   3.5768570e+01
+   3.6900000e+01   1.3485198e+01   3.5776364e+01
+   3.6900000e+01   1.3539636e+01   3.5778083e+01
+   3.6900000e+01   1.3586083e+01   3.5781620e+01
+   3.6900000e+01   1.3649860e+01   3.5788785e+01
+   3.6900000e+01   1.3724041e+01   3.5795174e+01
+   3.6900000e+01   1.3795636e+01   3.5799347e+01
+   3.6900000e+01   1.3896884e+01   3.5810504e+01
+   3.6900000e+01   1.4007802e+01   3.5819636e+01
+   3.6900000e+01   1.4119207e+01   3.5823149e+01
+   3.6900000e+01   1.4275008e+01   3.5831579e+01
+   3.6900000e+01   1.4495909e+01   3.5833537e+01
+   3.6900000e+01   1.4732562e+01   3.5837397e+01
+   3.6900000e+01   1.4997446e+01   3.5833347e+01
+   3.6900000e+01   1.5706603e+01   3.5837281e+01
+   3.6900000e+01   1.6613545e+01   3.5844116e+01
+   3.6900000e+01   1.7261298e+01   3.5850289e+01
+   3.6900000e+01   1.8017446e+01   3.5853281e+01
+   3.6900000e+01   1.8879421e+01   3.5867727e+01
+   3.6900000e+01   1.9534612e+01   3.5871678e+01
+   3.6900000e+01   1.9774289e+01   3.5868719e+01
+   3.6900000e+01   1.9845992e+01   3.5868760e+01
+   3.6900000e+01   1.9857645e+01   3.5869248e+01
+   3.6900000e+01   1.9858744e+01   3.5869810e+01
+   3.6900000e+01   1.9851843e+01   3.5868702e+01
+   3.6900000e+01   1.9795959e+01   3.5873008e+01
+   3.6950000e+01   2.5103554e+00   3.4896107e+01
+   3.6950000e+01   2.5061901e+00   3.4902207e+01
+   3.6950000e+01   2.5121488e+00   3.4907306e+01
+   3.6950000e+01   2.5413554e+00   3.4914521e+01
+   3.6950000e+01   2.5794959e+00   3.4919405e+01
+   3.6950000e+01   2.6451405e+00   3.4928736e+01
+   3.6950000e+01   2.7416281e+00   3.4940488e+01
+   3.6950000e+01   2.8990331e+00   3.4952802e+01
+   3.6950000e+01   3.0880496e+00   3.4961322e+01
+   3.6950000e+01   3.3536529e+00   3.4973281e+01
+   3.6950000e+01   3.5827603e+00   3.4972736e+01
+   3.6950000e+01   3.8425455e+00   3.4984074e+01
+   3.6950000e+01   4.3142231e+00   3.5036645e+01
+   3.6950000e+01   5.2460165e+00   3.5170777e+01
+   3.6950000e+01   6.6648926e+00   3.5382711e+01
+   3.6950000e+01   8.2569008e+00   3.5621149e+01
+   3.6950000e+01   9.2870413e+00   3.5722876e+01
+   3.6950000e+01   9.5328760e+00   3.5630785e+01
+   3.6950000e+01   9.9026364e+00   3.5537066e+01
+   3.6950000e+01   1.0298083e+01   3.5480702e+01
+   3.6950000e+01   1.0770826e+01   3.5489091e+01
+   3.6950000e+01   1.1255678e+01   3.5531455e+01
+   3.6950000e+01   1.1602421e+01   3.5566000e+01
+   3.6950000e+01   1.1914041e+01   3.5601397e+01
+   3.6950000e+01   1.2147298e+01   3.5626901e+01
+   3.6950000e+01   1.2343058e+01   3.5648785e+01
+   3.6950000e+01   1.2494471e+01   3.5664835e+01
+   3.6950000e+01   1.2597438e+01   3.5676273e+01
+   3.6950000e+01   1.2688149e+01   3.5686380e+01
+   3.6950000e+01   1.2785116e+01   3.5697636e+01
+   3.6950000e+01   1.2848306e+01   3.5705074e+01
+   3.6950000e+01   1.2914322e+01   3.5711992e+01
+   3.6950000e+01   1.3001628e+01   3.5721826e+01
+   3.6950000e+01   1.3051289e+01   3.5725025e+01
+   3.6950000e+01   1.3089132e+01   3.5727711e+01
+   3.6950000e+01   1.3142140e+01   3.5735612e+01
+   3.6950000e+01   1.3179091e+01   3.5738893e+01
+   3.6950000e+01   1.3225289e+01   3.5744364e+01
+   3.6950000e+01   1.3285380e+01   3.5750000e+01
+   3.6950000e+01   1.3351380e+01   3.5760339e+01
+   3.6950000e+01   1.3413512e+01   3.5768570e+01
+   3.6950000e+01   1.3485198e+01   3.5776364e+01
+   3.6950000e+01   1.3539636e+01   3.5778083e+01
+   3.6950000e+01   1.3586083e+01   3.5781620e+01
+   3.6950000e+01   1.3649860e+01   3.5788785e+01
+   3.6950000e+01   1.3724041e+01   3.5795174e+01
+   3.6950000e+01   1.3795636e+01   3.5799347e+01
+   3.6950000e+01   1.3896884e+01   3.5810504e+01
+   3.6950000e+01   1.4007802e+01   3.5819636e+01
+   3.6950000e+01   1.4119207e+01   3.5823149e+01
+   3.6950000e+01   1.4275008e+01   3.5831579e+01
+   3.6950000e+01   1.4495909e+01   3.5833537e+01
+   3.6950000e+01   1.4732562e+01   3.5837397e+01
+   3.6950000e+01   1.4997446e+01   3.5833347e+01
+   3.6950000e+01   1.5706603e+01   3.5837281e+01
+   3.6950000e+01   1.6613545e+01   3.5844116e+01
+   3.6950000e+01   1.7261298e+01   3.5850289e+01
+   3.6950000e+01   1.8017446e+01   3.5853281e+01
+   3.6950000e+01   1.8879421e+01   3.5867727e+01
+   3.6950000e+01   1.9534612e+01   3.5871678e+01
+   3.6950000e+01   1.9774289e+01   3.5868719e+01
+   3.6950000e+01   1.9845992e+01   3.5868760e+01
+   3.6950000e+01   1.9857645e+01   3.5869248e+01
+   3.6950000e+01   1.9858744e+01   3.5869810e+01
+   3.6950000e+01   1.9851843e+01   3.5868702e+01
+   3.6950000e+01   1.9795959e+01   3.5873008e+01
+   3.7000000e+01   2.5103554e+00   3.4896107e+01
+   3.7000000e+01   2.5061901e+00   3.4902207e+01
+   3.7000000e+01   2.5121488e+00   3.4907306e+01
+   3.7000000e+01   2.5413554e+00   3.4914521e+01
+   3.7000000e+01   2.5794959e+00   3.4919405e+01
+   3.7000000e+01   2.6451405e+00   3.4928736e+01
+   3.7000000e+01   2.7416281e+00   3.4940488e+01
+   3.7000000e+01   2.8990331e+00   3.4952802e+01
+   3.7000000e+01   3.0880496e+00   3.4961322e+01
+   3.7000000e+01   3.3536529e+00   3.4973281e+01
+   3.7000000e+01   3.5827603e+00   3.4972736e+01
+   3.7000000e+01   3.8425455e+00   3.4984074e+01
+   3.7000000e+01   4.3142231e+00   3.5036645e+01
+   3.7000000e+01   5.2460165e+00   3.5170777e+01
+   3.7000000e+01   6.6648926e+00   3.5382711e+01
+   3.7000000e+01   8.2569008e+00   3.5621149e+01
+   3.7000000e+01   9.2870413e+00   3.5722876e+01
+   3.7000000e+01   9.5328760e+00   3.5630785e+01
+   3.7000000e+01   9.9026364e+00   3.5537066e+01
+   3.7000000e+01   1.0298083e+01   3.5480702e+01
+   3.7000000e+01   1.0770826e+01   3.5489091e+01
+   3.7000000e+01   1.1255678e+01   3.5531455e+01
+   3.7000000e+01   1.1602421e+01   3.5566000e+01
+   3.7000000e+01   1.1914041e+01   3.5601397e+01
+   3.7000000e+01   1.2147298e+01   3.5626901e+01
+   3.7000000e+01   1.2343058e+01   3.5648785e+01
+   3.7000000e+01   1.2494471e+01   3.5664835e+01
+   3.7000000e+01   1.2597438e+01   3.5676273e+01
+   3.7000000e+01   1.2688149e+01   3.5686380e+01
+   3.7000000e+01   1.2785116e+01   3.5697636e+01
+   3.7000000e+01   1.2848306e+01   3.5705074e+01
+   3.7000000e+01   1.2914322e+01   3.5711992e+01
+   3.7000000e+01   1.3001628e+01   3.5721826e+01
+   3.7000000e+01   1.3051289e+01   3.5725025e+01
+   3.7000000e+01   1.3089132e+01   3.5727711e+01
+   3.7000000e+01   1.3142140e+01   3.5735612e+01
+   3.7000000e+01   1.3179091e+01   3.5738893e+01
+   3.7000000e+01   1.3225289e+01   3.5744364e+01
+   3.7000000e+01   1.3285380e+01   3.5750000e+01
+   3.7000000e+01   1.3351380e+01   3.5760339e+01
+   3.7000000e+01   1.3413512e+01   3.5768570e+01
+   3.7000000e+01   1.3485198e+01   3.5776364e+01
+   3.7000000e+01   1.3539636e+01   3.5778083e+01
+   3.7000000e+01   1.3586083e+01   3.5781620e+01
+   3.7000000e+01   1.3649860e+01   3.5788785e+01
+   3.7000000e+01   1.3724041e+01   3.5795174e+01
+   3.7000000e+01   1.3795636e+01   3.5799347e+01
+   3.7000000e+01   1.3896884e+01   3.5810504e+01
+   3.7000000e+01   1.4007802e+01   3.5819636e+01
+   3.7000000e+01   1.4119207e+01   3.5823149e+01
+   3.7000000e+01   1.4275008e+01   3.5831579e+01
+   3.7000000e+01   1.4495909e+01   3.5833537e+01
+   3.7000000e+01   1.4732562e+01   3.5837397e+01
+   3.7000000e+01   1.4997446e+01   3.5833347e+01
+   3.7000000e+01   1.5706603e+01   3.5837281e+01
+   3.7000000e+01   1.6613545e+01   3.5844116e+01
+   3.7000000e+01   1.7261298e+01   3.5850289e+01
+   3.7000000e+01   1.8017446e+01   3.5853281e+01
+   3.7000000e+01   1.8879421e+01   3.5867727e+01
+   3.7000000e+01   1.9534612e+01   3.5871678e+01
+   3.7000000e+01   1.9774289e+01   3.5868719e+01
+   3.7000000e+01   1.9845992e+01   3.5868760e+01
+   3.7000000e+01   1.9857645e+01   3.5869248e+01
+   3.7000000e+01   1.9858744e+01   3.5869810e+01
+   3.7000000e+01   1.9851843e+01   3.5868702e+01
+   3.7000000e+01   1.9795959e+01   3.5873008e+01
+   3.7050000e+01   2.5103554e+00   3.4896107e+01
+   3.7050000e+01   2.5061901e+00   3.4902207e+01
+   3.7050000e+01   2.5121488e+00   3.4907306e+01
+   3.7050000e+01   2.5413554e+00   3.4914521e+01
+   3.7050000e+01   2.5794959e+00   3.4919405e+01
+   3.7050000e+01   2.6451405e+00   3.4928736e+01
+   3.7050000e+01   2.7416281e+00   3.4940488e+01
+   3.7050000e+01   2.8990331e+00   3.4952802e+01
+   3.7050000e+01   3.0880496e+00   3.4961322e+01
+   3.7050000e+01   3.3536529e+00   3.4973281e+01
+   3.7050000e+01   3.5827603e+00   3.4972736e+01
+   3.7050000e+01   3.8425455e+00   3.4984074e+01
+   3.7050000e+01   4.3142231e+00   3.5036645e+01
+   3.7050000e+01   5.2460165e+00   3.5170777e+01
+   3.7050000e+01   6.6648926e+00   3.5382711e+01
+   3.7050000e+01   8.2569008e+00   3.5621149e+01
+   3.7050000e+01   9.2870413e+00   3.5722876e+01
+   3.7050000e+01   9.5328760e+00   3.5630785e+01
+   3.7050000e+01   9.9026364e+00   3.5537066e+01
+   3.7050000e+01   1.0298083e+01   3.5480702e+01
+   3.7050000e+01   1.0770826e+01   3.5489091e+01
+   3.7050000e+01   1.1255678e+01   3.5531455e+01
+   3.7050000e+01   1.1602421e+01   3.5566000e+01
+   3.7050000e+01   1.1914041e+01   3.5601397e+01
+   3.7050000e+01   1.2147298e+01   3.5626901e+01
+   3.7050000e+01   1.2343058e+01   3.5648785e+01
+   3.7050000e+01   1.2494471e+01   3.5664835e+01
+   3.7050000e+01   1.2597438e+01   3.5676273e+01
+   3.7050000e+01   1.2688149e+01   3.5686380e+01
+   3.7050000e+01   1.2785116e+01   3.5697636e+01
+   3.7050000e+01   1.2848306e+01   3.5705074e+01
+   3.7050000e+01   1.2914322e+01   3.5711992e+01
+   3.7050000e+01   1.3001628e+01   3.5721826e+01
+   3.7050000e+01   1.3051289e+01   3.5725025e+01
+   3.7050000e+01   1.3089132e+01   3.5727711e+01
+   3.7050000e+01   1.3142140e+01   3.5735612e+01
+   3.7050000e+01   1.3179091e+01   3.5738893e+01
+   3.7050000e+01   1.3225289e+01   3.5744364e+01
+   3.7050000e+01   1.3285380e+01   3.5750000e+01
+   3.7050000e+01   1.3351380e+01   3.5760339e+01
+   3.7050000e+01   1.3413512e+01   3.5768570e+01
+   3.7050000e+01   1.3485198e+01   3.5776364e+01
+   3.7050000e+01   1.3539636e+01   3.5778083e+01
+   3.7050000e+01   1.3586083e+01   3.5781620e+01
+   3.7050000e+01   1.3649860e+01   3.5788785e+01
+   3.7050000e+01   1.3724041e+01   3.5795174e+01
+   3.7050000e+01   1.3795636e+01   3.5799347e+01
+   3.7050000e+01   1.3896884e+01   3.5810504e+01
+   3.7050000e+01   1.4007802e+01   3.5819636e+01
+   3.7050000e+01   1.4119207e+01   3.5823149e+01
+   3.7050000e+01   1.4275008e+01   3.5831579e+01
+   3.7050000e+01   1.4495909e+01   3.5833537e+01
+   3.7050000e+01   1.4732562e+01   3.5837397e+01
+   3.7050000e+01   1.4997446e+01   3.5833347e+01
+   3.7050000e+01   1.5706603e+01   3.5837281e+01
+   3.7050000e+01   1.6613545e+01   3.5844116e+01
+   3.7050000e+01   1.7261298e+01   3.5850289e+01
+   3.7050000e+01   1.8017446e+01   3.5853281e+01
+   3.7050000e+01   1.8879421e+01   3.5867727e+01
+   3.7050000e+01   1.9534612e+01   3.5871678e+01
+   3.7050000e+01   1.9774289e+01   3.5868719e+01
+   3.7050000e+01   1.9845992e+01   3.5868760e+01
+   3.7050000e+01   1.9857645e+01   3.5869248e+01
+   3.7050000e+01   1.9858744e+01   3.5869810e+01
+   3.7050000e+01   1.9851843e+01   3.5868702e+01
+   3.7050000e+01   1.9795959e+01   3.5873008e+01
+   3.7100000e+01   2.5103554e+00   3.4896107e+01
+   3.7100000e+01   2.5061901e+00   3.4902207e+01
+   3.7100000e+01   2.5121488e+00   3.4907306e+01
+   3.7100000e+01   2.5413554e+00   3.4914521e+01
+   3.7100000e+01   2.5794959e+00   3.4919405e+01
+   3.7100000e+01   2.6451405e+00   3.4928736e+01
+   3.7100000e+01   2.7416281e+00   3.4940488e+01
+   3.7100000e+01   2.8990331e+00   3.4952802e+01
+   3.7100000e+01   3.0880496e+00   3.4961322e+01
+   3.7100000e+01   3.3536529e+00   3.4973281e+01
+   3.7100000e+01   3.5827603e+00   3.4972736e+01
+   3.7100000e+01   3.8425455e+00   3.4984074e+01
+   3.7100000e+01   4.3142231e+00   3.5036645e+01
+   3.7100000e+01   5.2460165e+00   3.5170777e+01
+   3.7100000e+01   6.6648926e+00   3.5382711e+01
+   3.7100000e+01   8.2569008e+00   3.5621149e+01
+   3.7100000e+01   9.2870413e+00   3.5722876e+01
+   3.7100000e+01   9.5328760e+00   3.5630785e+01
+   3.7100000e+01   9.9026364e+00   3.5537066e+01
+   3.7100000e+01   1.0298083e+01   3.5480702e+01
+   3.7100000e+01   1.0770826e+01   3.5489091e+01
+   3.7100000e+01   1.1255678e+01   3.5531455e+01
+   3.7100000e+01   1.1602421e+01   3.5566000e+01
+   3.7100000e+01   1.1914041e+01   3.5601397e+01
+   3.7100000e+01   1.2147298e+01   3.5626901e+01
+   3.7100000e+01   1.2343058e+01   3.5648785e+01
+   3.7100000e+01   1.2494471e+01   3.5664835e+01
+   3.7100000e+01   1.2597438e+01   3.5676273e+01
+   3.7100000e+01   1.2688149e+01   3.5686380e+01
+   3.7100000e+01   1.2785116e+01   3.5697636e+01
+   3.7100000e+01   1.2848306e+01   3.5705074e+01
+   3.7100000e+01   1.2914322e+01   3.5711992e+01
+   3.7100000e+01   1.3001628e+01   3.5721826e+01
+   3.7100000e+01   1.3051289e+01   3.5725025e+01
+   3.7100000e+01   1.3089132e+01   3.5727711e+01
+   3.7100000e+01   1.3142140e+01   3.5735612e+01
+   3.7100000e+01   1.3179091e+01   3.5738893e+01
+   3.7100000e+01   1.3225289e+01   3.5744364e+01
+   3.7100000e+01   1.3285380e+01   3.5750000e+01
+   3.7100000e+01   1.3351380e+01   3.5760339e+01
+   3.7100000e+01   1.3413512e+01   3.5768570e+01
+   3.7100000e+01   1.3485198e+01   3.5776364e+01
+   3.7100000e+01   1.3539636e+01   3.5778083e+01
+   3.7100000e+01   1.3586083e+01   3.5781620e+01
+   3.7100000e+01   1.3649860e+01   3.5788785e+01
+   3.7100000e+01   1.3724041e+01   3.5795174e+01
+   3.7100000e+01   1.3795636e+01   3.5799347e+01
+   3.7100000e+01   1.3896884e+01   3.5810504e+01
+   3.7100000e+01   1.4007802e+01   3.5819636e+01
+   3.7100000e+01   1.4119207e+01   3.5823149e+01
+   3.7100000e+01   1.4275008e+01   3.5831579e+01
+   3.7100000e+01   1.4495909e+01   3.5833537e+01
+   3.7100000e+01   1.4732562e+01   3.5837397e+01
+   3.7100000e+01   1.4997446e+01   3.5833347e+01
+   3.7100000e+01   1.5706603e+01   3.5837281e+01
+   3.7100000e+01   1.6613545e+01   3.5844116e+01
+   3.7100000e+01   1.7261298e+01   3.5850289e+01
+   3.7100000e+01   1.8017446e+01   3.5853281e+01
+   3.7100000e+01   1.8879421e+01   3.5867727e+01
+   3.7100000e+01   1.9534612e+01   3.5871678e+01
+   3.7100000e+01   1.9774289e+01   3.5868719e+01
+   3.7100000e+01   1.9845992e+01   3.5868760e+01
+   3.7100000e+01   1.9857645e+01   3.5869248e+01
+   3.7100000e+01   1.9858744e+01   3.5869810e+01
+   3.7100000e+01   1.9851843e+01   3.5868702e+01
+   3.7100000e+01   1.9795959e+01   3.5873008e+01
+   3.7150000e+01   2.5103554e+00   3.4896107e+01
+   3.7150000e+01   2.5061901e+00   3.4902207e+01
+   3.7150000e+01   2.5121488e+00   3.4907306e+01
+   3.7150000e+01   2.5413554e+00   3.4914521e+01
+   3.7150000e+01   2.5794959e+00   3.4919405e+01
+   3.7150000e+01   2.6451405e+00   3.4928736e+01
+   3.7150000e+01   2.7416281e+00   3.4940488e+01
+   3.7150000e+01   2.8990331e+00   3.4952802e+01
+   3.7150000e+01   3.0880496e+00   3.4961322e+01
+   3.7150000e+01   3.3536529e+00   3.4973281e+01
+   3.7150000e+01   3.5827603e+00   3.4972736e+01
+   3.7150000e+01   3.8425455e+00   3.4984074e+01
+   3.7150000e+01   4.3142231e+00   3.5036645e+01
+   3.7150000e+01   5.2460165e+00   3.5170777e+01
+   3.7150000e+01   6.6648926e+00   3.5382711e+01
+   3.7150000e+01   8.2569008e+00   3.5621149e+01
+   3.7150000e+01   9.2870413e+00   3.5722876e+01
+   3.7150000e+01   9.5328760e+00   3.5630785e+01
+   3.7150000e+01   9.9026364e+00   3.5537066e+01
+   3.7150000e+01   1.0298083e+01   3.5480702e+01
+   3.7150000e+01   1.0770826e+01   3.5489091e+01
+   3.7150000e+01   1.1255678e+01   3.5531455e+01
+   3.7150000e+01   1.1602421e+01   3.5566000e+01
+   3.7150000e+01   1.1914041e+01   3.5601397e+01
+   3.7150000e+01   1.2147298e+01   3.5626901e+01
+   3.7150000e+01   1.2343058e+01   3.5648785e+01
+   3.7150000e+01   1.2494471e+01   3.5664835e+01
+   3.7150000e+01   1.2597438e+01   3.5676273e+01
+   3.7150000e+01   1.2688149e+01   3.5686380e+01
+   3.7150000e+01   1.2785116e+01   3.5697636e+01
+   3.7150000e+01   1.2848306e+01   3.5705074e+01
+   3.7150000e+01   1.2914322e+01   3.5711992e+01
+   3.7150000e+01   1.3001628e+01   3.5721826e+01
+   3.7150000e+01   1.3051289e+01   3.5725025e+01
+   3.7150000e+01   1.3089132e+01   3.5727711e+01
+   3.7150000e+01   1.3142140e+01   3.5735612e+01
+   3.7150000e+01   1.3179091e+01   3.5738893e+01
+   3.7150000e+01   1.3225289e+01   3.5744364e+01
+   3.7150000e+01   1.3285380e+01   3.5750000e+01
+   3.7150000e+01   1.3351380e+01   3.5760339e+01
+   3.7150000e+01   1.3413512e+01   3.5768570e+01
+   3.7150000e+01   1.3485198e+01   3.5776364e+01
+   3.7150000e+01   1.3539636e+01   3.5778083e+01
+   3.7150000e+01   1.3586083e+01   3.5781620e+01
+   3.7150000e+01   1.3649860e+01   3.5788785e+01
+   3.7150000e+01   1.3724041e+01   3.5795174e+01
+   3.7150000e+01   1.3795636e+01   3.5799347e+01
+   3.7150000e+01   1.3896884e+01   3.5810504e+01
+   3.7150000e+01   1.4007802e+01   3.5819636e+01
+   3.7150000e+01   1.4119207e+01   3.5823149e+01
+   3.7150000e+01   1.4275008e+01   3.5831579e+01
+   3.7150000e+01   1.4495909e+01   3.5833537e+01
+   3.7150000e+01   1.4732562e+01   3.5837397e+01
+   3.7150000e+01   1.4997446e+01   3.5833347e+01
+   3.7150000e+01   1.5706603e+01   3.5837281e+01
+   3.7150000e+01   1.6613545e+01   3.5844116e+01
+   3.7150000e+01   1.7261298e+01   3.5850289e+01
+   3.7150000e+01   1.8017446e+01   3.5853281e+01
+   3.7150000e+01   1.8879421e+01   3.5867727e+01
+   3.7150000e+01   1.9534612e+01   3.5871678e+01
+   3.7150000e+01   1.9774289e+01   3.5868719e+01
+   3.7150000e+01   1.9845992e+01   3.5868760e+01
+   3.7150000e+01   1.9857645e+01   3.5869248e+01
+   3.7150000e+01   1.9858744e+01   3.5869810e+01
+   3.7150000e+01   1.9851843e+01   3.5868702e+01
+   3.7150000e+01   1.9795959e+01   3.5873008e+01
+   3.7200000e+01   2.5103554e+00   3.4896107e+01
+   3.7200000e+01   2.5061901e+00   3.4902207e+01
+   3.7200000e+01   2.5121488e+00   3.4907306e+01
+   3.7200000e+01   2.5413554e+00   3.4914521e+01
+   3.7200000e+01   2.5794959e+00   3.4919405e+01
+   3.7200000e+01   2.6451405e+00   3.4928736e+01
+   3.7200000e+01   2.7416281e+00   3.4940488e+01
+   3.7200000e+01   2.8990331e+00   3.4952802e+01
+   3.7200000e+01   3.0880496e+00   3.4961322e+01
+   3.7200000e+01   3.3536529e+00   3.4973281e+01
+   3.7200000e+01   3.5827603e+00   3.4972736e+01
+   3.7200000e+01   3.8425455e+00   3.4984074e+01
+   3.7200000e+01   4.3142231e+00   3.5036645e+01
+   3.7200000e+01   5.2460165e+00   3.5170777e+01
+   3.7200000e+01   6.6648926e+00   3.5382711e+01
+   3.7200000e+01   8.2569008e+00   3.5621149e+01
+   3.7200000e+01   9.2870413e+00   3.5722876e+01
+   3.7200000e+01   9.5328760e+00   3.5630785e+01
+   3.7200000e+01   9.9026364e+00   3.5537066e+01
+   3.7200000e+01   1.0298083e+01   3.5480702e+01
+   3.7200000e+01   1.0770826e+01   3.5489091e+01
+   3.7200000e+01   1.1255678e+01   3.5531455e+01
+   3.7200000e+01   1.1602421e+01   3.5566000e+01
+   3.7200000e+01   1.1914041e+01   3.5601397e+01
+   3.7200000e+01   1.2147298e+01   3.5626901e+01
+   3.7200000e+01   1.2343058e+01   3.5648785e+01
+   3.7200000e+01   1.2494471e+01   3.5664835e+01
+   3.7200000e+01   1.2597438e+01   3.5676273e+01
+   3.7200000e+01   1.2688149e+01   3.5686380e+01
+   3.7200000e+01   1.2785116e+01   3.5697636e+01
+   3.7200000e+01   1.2848306e+01   3.5705074e+01
+   3.7200000e+01   1.2914322e+01   3.5711992e+01
+   3.7200000e+01   1.3001628e+01   3.5721826e+01
+   3.7200000e+01   1.3051289e+01   3.5725025e+01
+   3.7200000e+01   1.3089132e+01   3.5727711e+01
+   3.7200000e+01   1.3142140e+01   3.5735612e+01
+   3.7200000e+01   1.3179091e+01   3.5738893e+01
+   3.7200000e+01   1.3225289e+01   3.5744364e+01
+   3.7200000e+01   1.3285380e+01   3.5750000e+01
+   3.7200000e+01   1.3351380e+01   3.5760339e+01
+   3.7200000e+01   1.3413512e+01   3.5768570e+01
+   3.7200000e+01   1.3485198e+01   3.5776364e+01
+   3.7200000e+01   1.3539636e+01   3.5778083e+01
+   3.7200000e+01   1.3586083e+01   3.5781620e+01
+   3.7200000e+01   1.3649860e+01   3.5788785e+01
+   3.7200000e+01   1.3724041e+01   3.5795174e+01
+   3.7200000e+01   1.3795636e+01   3.5799347e+01
+   3.7200000e+01   1.3896884e+01   3.5810504e+01
+   3.7200000e+01   1.4007802e+01   3.5819636e+01
+   3.7200000e+01   1.4119207e+01   3.5823149e+01
+   3.7200000e+01   1.4275008e+01   3.5831579e+01
+   3.7200000e+01   1.4495909e+01   3.5833537e+01
+   3.7200000e+01   1.4732562e+01   3.5837397e+01
+   3.7200000e+01   1.4997446e+01   3.5833347e+01
+   3.7200000e+01   1.5706603e+01   3.5837281e+01
+   3.7200000e+01   1.6613545e+01   3.5844116e+01
+   3.7200000e+01   1.7261298e+01   3.5850289e+01
+   3.7200000e+01   1.8017446e+01   3.5853281e+01
+   3.7200000e+01   1.8879421e+01   3.5867727e+01
+   3.7200000e+01   1.9534612e+01   3.5871678e+01
+   3.7200000e+01   1.9774289e+01   3.5868719e+01
+   3.7200000e+01   1.9845992e+01   3.5868760e+01
+   3.7200000e+01   1.9857645e+01   3.5869248e+01
+   3.7200000e+01   1.9858744e+01   3.5869810e+01
+   3.7200000e+01   1.9851843e+01   3.5868702e+01
+   3.7200000e+01   1.9795959e+01   3.5873008e+01
+   3.7250000e+01   2.5103554e+00   3.4896107e+01
+   3.7250000e+01   2.5061901e+00   3.4902207e+01
+   3.7250000e+01   2.5121488e+00   3.4907306e+01
+   3.7250000e+01   2.5413554e+00   3.4914521e+01
+   3.7250000e+01   2.5794959e+00   3.4919405e+01
+   3.7250000e+01   2.6451405e+00   3.4928736e+01
+   3.7250000e+01   2.7416281e+00   3.4940488e+01
+   3.7250000e+01   2.8990331e+00   3.4952802e+01
+   3.7250000e+01   3.0880496e+00   3.4961322e+01
+   3.7250000e+01   3.3536529e+00   3.4973281e+01
+   3.7250000e+01   3.5827603e+00   3.4972736e+01
+   3.7250000e+01   3.8425455e+00   3.4984074e+01
+   3.7250000e+01   4.3142231e+00   3.5036645e+01
+   3.7250000e+01   5.2460165e+00   3.5170777e+01
+   3.7250000e+01   6.6648926e+00   3.5382711e+01
+   3.7250000e+01   8.2569008e+00   3.5621149e+01
+   3.7250000e+01   9.2870413e+00   3.5722876e+01
+   3.7250000e+01   9.5328760e+00   3.5630785e+01
+   3.7250000e+01   9.9026364e+00   3.5537066e+01
+   3.7250000e+01   1.0298083e+01   3.5480702e+01
+   3.7250000e+01   1.0770826e+01   3.5489091e+01
+   3.7250000e+01   1.1255678e+01   3.5531455e+01
+   3.7250000e+01   1.1602421e+01   3.5566000e+01
+   3.7250000e+01   1.1914041e+01   3.5601397e+01
+   3.7250000e+01   1.2147298e+01   3.5626901e+01
+   3.7250000e+01   1.2343058e+01   3.5648785e+01
+   3.7250000e+01   1.2494471e+01   3.5664835e+01
+   3.7250000e+01   1.2597438e+01   3.5676273e+01
+   3.7250000e+01   1.2688149e+01   3.5686380e+01
+   3.7250000e+01   1.2785116e+01   3.5697636e+01
+   3.7250000e+01   1.2848306e+01   3.5705074e+01
+   3.7250000e+01   1.2914322e+01   3.5711992e+01
+   3.7250000e+01   1.3001628e+01   3.5721826e+01
+   3.7250000e+01   1.3051289e+01   3.5725025e+01
+   3.7250000e+01   1.3089132e+01   3.5727711e+01
+   3.7250000e+01   1.3142140e+01   3.5735612e+01
+   3.7250000e+01   1.3179091e+01   3.5738893e+01
+   3.7250000e+01   1.3225289e+01   3.5744364e+01
+   3.7250000e+01   1.3285380e+01   3.5750000e+01
+   3.7250000e+01   1.3351380e+01   3.5760339e+01
+   3.7250000e+01   1.3413512e+01   3.5768570e+01
+   3.7250000e+01   1.3485198e+01   3.5776364e+01
+   3.7250000e+01   1.3539636e+01   3.5778083e+01
+   3.7250000e+01   1.3586083e+01   3.5781620e+01
+   3.7250000e+01   1.3649860e+01   3.5788785e+01
+   3.7250000e+01   1.3724041e+01   3.5795174e+01
+   3.7250000e+01   1.3795636e+01   3.5799347e+01
+   3.7250000e+01   1.3896884e+01   3.5810504e+01
+   3.7250000e+01   1.4007802e+01   3.5819636e+01
+   3.7250000e+01   1.4119207e+01   3.5823149e+01
+   3.7250000e+01   1.4275008e+01   3.5831579e+01
+   3.7250000e+01   1.4495909e+01   3.5833537e+01
+   3.7250000e+01   1.4732562e+01   3.5837397e+01
+   3.7250000e+01   1.4997446e+01   3.5833347e+01
+   3.7250000e+01   1.5706603e+01   3.5837281e+01
+   3.7250000e+01   1.6613545e+01   3.5844116e+01
+   3.7250000e+01   1.7261298e+01   3.5850289e+01
+   3.7250000e+01   1.8017446e+01   3.5853281e+01
+   3.7250000e+01   1.8879421e+01   3.5867727e+01
+   3.7250000e+01   1.9534612e+01   3.5871678e+01
+   3.7250000e+01   1.9774289e+01   3.5868719e+01
+   3.7250000e+01   1.9845992e+01   3.5868760e+01
+   3.7250000e+01   1.9857645e+01   3.5869248e+01
+   3.7250000e+01   1.9858744e+01   3.5869810e+01
+   3.7250000e+01   1.9851843e+01   3.5868702e+01
+   3.7250000e+01   1.9795959e+01   3.5873008e+01
+   3.7300000e+01   2.5103554e+00   3.4896107e+01
+   3.7300000e+01   2.5061901e+00   3.4902207e+01
+   3.7300000e+01   2.5121488e+00   3.4907306e+01
+   3.7300000e+01   2.5413554e+00   3.4914521e+01
+   3.7300000e+01   2.5794959e+00   3.4919405e+01
+   3.7300000e+01   2.6451405e+00   3.4928736e+01
+   3.7300000e+01   2.7416281e+00   3.4940488e+01
+   3.7300000e+01   2.8990331e+00   3.4952802e+01
+   3.7300000e+01   3.0880496e+00   3.4961322e+01
+   3.7300000e+01   3.3536529e+00   3.4973281e+01
+   3.7300000e+01   3.5827603e+00   3.4972736e+01
+   3.7300000e+01   3.8425455e+00   3.4984074e+01
+   3.7300000e+01   4.3142231e+00   3.5036645e+01
+   3.7300000e+01   5.2460165e+00   3.5170777e+01
+   3.7300000e+01   6.6648926e+00   3.5382711e+01
+   3.7300000e+01   8.2569008e+00   3.5621149e+01
+   3.7300000e+01   9.2870413e+00   3.5722876e+01
+   3.7300000e+01   9.5328760e+00   3.5630785e+01
+   3.7300000e+01   9.9026364e+00   3.5537066e+01
+   3.7300000e+01   1.0298083e+01   3.5480702e+01
+   3.7300000e+01   1.0770826e+01   3.5489091e+01
+   3.7300000e+01   1.1255678e+01   3.5531455e+01
+   3.7300000e+01   1.1602421e+01   3.5566000e+01
+   3.7300000e+01   1.1914041e+01   3.5601397e+01
+   3.7300000e+01   1.2147298e+01   3.5626901e+01
+   3.7300000e+01   1.2343058e+01   3.5648785e+01
+   3.7300000e+01   1.2494471e+01   3.5664835e+01
+   3.7300000e+01   1.2597438e+01   3.5676273e+01
+   3.7300000e+01   1.2688149e+01   3.5686380e+01
+   3.7300000e+01   1.2785116e+01   3.5697636e+01
+   3.7300000e+01   1.2848306e+01   3.5705074e+01
+   3.7300000e+01   1.2914322e+01   3.5711992e+01
+   3.7300000e+01   1.3001628e+01   3.5721826e+01
+   3.7300000e+01   1.3051289e+01   3.5725025e+01
+   3.7300000e+01   1.3089132e+01   3.5727711e+01
+   3.7300000e+01   1.3142140e+01   3.5735612e+01
+   3.7300000e+01   1.3179091e+01   3.5738893e+01
+   3.7300000e+01   1.3225289e+01   3.5744364e+01
+   3.7300000e+01   1.3285380e+01   3.5750000e+01
+   3.7300000e+01   1.3351380e+01   3.5760339e+01
+   3.7300000e+01   1.3413512e+01   3.5768570e+01
+   3.7300000e+01   1.3485198e+01   3.5776364e+01
+   3.7300000e+01   1.3539636e+01   3.5778083e+01
+   3.7300000e+01   1.3586083e+01   3.5781620e+01
+   3.7300000e+01   1.3649860e+01   3.5788785e+01
+   3.7300000e+01   1.3724041e+01   3.5795174e+01
+   3.7300000e+01   1.3795636e+01   3.5799347e+01
+   3.7300000e+01   1.3896884e+01   3.5810504e+01
+   3.7300000e+01   1.4007802e+01   3.5819636e+01
+   3.7300000e+01   1.4119207e+01   3.5823149e+01
+   3.7300000e+01   1.4275008e+01   3.5831579e+01
+   3.7300000e+01   1.4495909e+01   3.5833537e+01
+   3.7300000e+01   1.4732562e+01   3.5837397e+01
+   3.7300000e+01   1.4997446e+01   3.5833347e+01
+   3.7300000e+01   1.5706603e+01   3.5837281e+01
+   3.7300000e+01   1.6613545e+01   3.5844116e+01
+   3.7300000e+01   1.7261298e+01   3.5850289e+01
+   3.7300000e+01   1.8017446e+01   3.5853281e+01
+   3.7300000e+01   1.8879421e+01   3.5867727e+01
+   3.7300000e+01   1.9534612e+01   3.5871678e+01
+   3.7300000e+01   1.9774289e+01   3.5868719e+01
+   3.7300000e+01   1.9845992e+01   3.5868760e+01
+   3.7300000e+01   1.9857645e+01   3.5869248e+01
+   3.7300000e+01   1.9858744e+01   3.5869810e+01
+   3.7300000e+01   1.9851843e+01   3.5868702e+01
+   3.7300000e+01   1.9795959e+01   3.5873008e+01
+   3.7350000e+01   2.5103554e+00   3.4896107e+01
+   3.7350000e+01   2.5061901e+00   3.4902207e+01
+   3.7350000e+01   2.5121488e+00   3.4907306e+01
+   3.7350000e+01   2.5413554e+00   3.4914521e+01
+   3.7350000e+01   2.5794959e+00   3.4919405e+01
+   3.7350000e+01   2.6451405e+00   3.4928736e+01
+   3.7350000e+01   2.7416281e+00   3.4940488e+01
+   3.7350000e+01   2.8990331e+00   3.4952802e+01
+   3.7350000e+01   3.0880496e+00   3.4961322e+01
+   3.7350000e+01   3.3536529e+00   3.4973281e+01
+   3.7350000e+01   3.5827603e+00   3.4972736e+01
+   3.7350000e+01   3.8425455e+00   3.4984074e+01
+   3.7350000e+01   4.3142231e+00   3.5036645e+01
+   3.7350000e+01   5.2460165e+00   3.5170777e+01
+   3.7350000e+01   6.6648926e+00   3.5382711e+01
+   3.7350000e+01   8.2569008e+00   3.5621149e+01
+   3.7350000e+01   9.2870413e+00   3.5722876e+01
+   3.7350000e+01   9.5328760e+00   3.5630785e+01
+   3.7350000e+01   9.9026364e+00   3.5537066e+01
+   3.7350000e+01   1.0298083e+01   3.5480702e+01
+   3.7350000e+01   1.0770826e+01   3.5489091e+01
+   3.7350000e+01   1.1255678e+01   3.5531455e+01
+   3.7350000e+01   1.1602421e+01   3.5566000e+01
+   3.7350000e+01   1.1914041e+01   3.5601397e+01
+   3.7350000e+01   1.2147298e+01   3.5626901e+01
+   3.7350000e+01   1.2343058e+01   3.5648785e+01
+   3.7350000e+01   1.2494471e+01   3.5664835e+01
+   3.7350000e+01   1.2597438e+01   3.5676273e+01
+   3.7350000e+01   1.2688149e+01   3.5686380e+01
+   3.7350000e+01   1.2785116e+01   3.5697636e+01
+   3.7350000e+01   1.2848306e+01   3.5705074e+01
+   3.7350000e+01   1.2914322e+01   3.5711992e+01
+   3.7350000e+01   1.3001628e+01   3.5721826e+01
+   3.7350000e+01   1.3051289e+01   3.5725025e+01
+   3.7350000e+01   1.3089132e+01   3.5727711e+01
+   3.7350000e+01   1.3142140e+01   3.5735612e+01
+   3.7350000e+01   1.3179091e+01   3.5738893e+01
+   3.7350000e+01   1.3225289e+01   3.5744364e+01
+   3.7350000e+01   1.3285380e+01   3.5750000e+01
+   3.7350000e+01   1.3351380e+01   3.5760339e+01
+   3.7350000e+01   1.3413512e+01   3.5768570e+01
+   3.7350000e+01   1.3485198e+01   3.5776364e+01
+   3.7350000e+01   1.3539636e+01   3.5778083e+01
+   3.7350000e+01   1.3586083e+01   3.5781620e+01
+   3.7350000e+01   1.3649860e+01   3.5788785e+01
+   3.7350000e+01   1.3724041e+01   3.5795174e+01
+   3.7350000e+01   1.3795636e+01   3.5799347e+01
+   3.7350000e+01   1.3896884e+01   3.5810504e+01
+   3.7350000e+01   1.4007802e+01   3.5819636e+01
+   3.7350000e+01   1.4119207e+01   3.5823149e+01
+   3.7350000e+01   1.4275008e+01   3.5831579e+01
+   3.7350000e+01   1.4495909e+01   3.5833537e+01
+   3.7350000e+01   1.4732562e+01   3.5837397e+01
+   3.7350000e+01   1.4997446e+01   3.5833347e+01
+   3.7350000e+01   1.5706603e+01   3.5837281e+01
+   3.7350000e+01   1.6613545e+01   3.5844116e+01
+   3.7350000e+01   1.7261298e+01   3.5850289e+01
+   3.7350000e+01   1.8017446e+01   3.5853281e+01
+   3.7350000e+01   1.8879421e+01   3.5867727e+01
+   3.7350000e+01   1.9534612e+01   3.5871678e+01
+   3.7350000e+01   1.9774289e+01   3.5868719e+01
+   3.7350000e+01   1.9845992e+01   3.5868760e+01
+   3.7350000e+01   1.9857645e+01   3.5869248e+01
+   3.7350000e+01   1.9858744e+01   3.5869810e+01
+   3.7350000e+01   1.9851843e+01   3.5868702e+01
+   3.7350000e+01   1.9795959e+01   3.5873008e+01
+   3.7400000e+01   2.5103554e+00   3.4896107e+01
+   3.7400000e+01   2.5061901e+00   3.4902207e+01
+   3.7400000e+01   2.5121488e+00   3.4907306e+01
+   3.7400000e+01   2.5413554e+00   3.4914521e+01
+   3.7400000e+01   2.5794959e+00   3.4919405e+01
+   3.7400000e+01   2.6451405e+00   3.4928736e+01
+   3.7400000e+01   2.7416281e+00   3.4940488e+01
+   3.7400000e+01   2.8990331e+00   3.4952802e+01
+   3.7400000e+01   3.0880496e+00   3.4961322e+01
+   3.7400000e+01   3.3536529e+00   3.4973281e+01
+   3.7400000e+01   3.5827603e+00   3.4972736e+01
+   3.7400000e+01   3.8425455e+00   3.4984074e+01
+   3.7400000e+01   4.3142231e+00   3.5036645e+01
+   3.7400000e+01   5.2460165e+00   3.5170777e+01
+   3.7400000e+01   6.6648926e+00   3.5382711e+01
+   3.7400000e+01   8.2569008e+00   3.5621149e+01
+   3.7400000e+01   9.2870413e+00   3.5722876e+01
+   3.7400000e+01   9.5328760e+00   3.5630785e+01
+   3.7400000e+01   9.9026364e+00   3.5537066e+01
+   3.7400000e+01   1.0298083e+01   3.5480702e+01
+   3.7400000e+01   1.0770826e+01   3.5489091e+01
+   3.7400000e+01   1.1255678e+01   3.5531455e+01
+   3.7400000e+01   1.1602421e+01   3.5566000e+01
+   3.7400000e+01   1.1914041e+01   3.5601397e+01
+   3.7400000e+01   1.2147298e+01   3.5626901e+01
+   3.7400000e+01   1.2343058e+01   3.5648785e+01
+   3.7400000e+01   1.2494471e+01   3.5664835e+01
+   3.7400000e+01   1.2597438e+01   3.5676273e+01
+   3.7400000e+01   1.2688149e+01   3.5686380e+01
+   3.7400000e+01   1.2785116e+01   3.5697636e+01
+   3.7400000e+01   1.2848306e+01   3.5705074e+01
+   3.7400000e+01   1.2914322e+01   3.5711992e+01
+   3.7400000e+01   1.3001628e+01   3.5721826e+01
+   3.7400000e+01   1.3051289e+01   3.5725025e+01
+   3.7400000e+01   1.3089132e+01   3.5727711e+01
+   3.7400000e+01   1.3142140e+01   3.5735612e+01
+   3.7400000e+01   1.3179091e+01   3.5738893e+01
+   3.7400000e+01   1.3225289e+01   3.5744364e+01
+   3.7400000e+01   1.3285380e+01   3.5750000e+01
+   3.7400000e+01   1.3351380e+01   3.5760339e+01
+   3.7400000e+01   1.3413512e+01   3.5768570e+01
+   3.7400000e+01   1.3485198e+01   3.5776364e+01
+   3.7400000e+01   1.3539636e+01   3.5778083e+01
+   3.7400000e+01   1.3586083e+01   3.5781620e+01
+   3.7400000e+01   1.3649860e+01   3.5788785e+01
+   3.7400000e+01   1.3724041e+01   3.5795174e+01
+   3.7400000e+01   1.3795636e+01   3.5799347e+01
+   3.7400000e+01   1.3896884e+01   3.5810504e+01
+   3.7400000e+01   1.4007802e+01   3.5819636e+01
+   3.7400000e+01   1.4119207e+01   3.5823149e+01
+   3.7400000e+01   1.4275008e+01   3.5831579e+01
+   3.7400000e+01   1.4495909e+01   3.5833537e+01
+   3.7400000e+01   1.4732562e+01   3.5837397e+01
+   3.7400000e+01   1.4997446e+01   3.5833347e+01
+   3.7400000e+01   1.5706603e+01   3.5837281e+01
+   3.7400000e+01   1.6613545e+01   3.5844116e+01
+   3.7400000e+01   1.7261298e+01   3.5850289e+01
+   3.7400000e+01   1.8017446e+01   3.5853281e+01
+   3.7400000e+01   1.8879421e+01   3.5867727e+01
+   3.7400000e+01   1.9534612e+01   3.5871678e+01
+   3.7400000e+01   1.9774289e+01   3.5868719e+01
+   3.7400000e+01   1.9845992e+01   3.5868760e+01
+   3.7400000e+01   1.9857645e+01   3.5869248e+01
+   3.7400000e+01   1.9858744e+01   3.5869810e+01
+   3.7400000e+01   1.9851843e+01   3.5868702e+01
+   3.7400000e+01   1.9795959e+01   3.5873008e+01
+   3.7450000e+01   2.5103554e+00   3.4896107e+01
+   3.7450000e+01   2.5061901e+00   3.4902207e+01
+   3.7450000e+01   2.5121488e+00   3.4907306e+01
+   3.7450000e+01   2.5413554e+00   3.4914521e+01
+   3.7450000e+01   2.5794959e+00   3.4919405e+01
+   3.7450000e+01   2.6451405e+00   3.4928736e+01
+   3.7450000e+01   2.7416281e+00   3.4940488e+01
+   3.7450000e+01   2.8990331e+00   3.4952802e+01
+   3.7450000e+01   3.0880496e+00   3.4961322e+01
+   3.7450000e+01   3.3536529e+00   3.4973281e+01
+   3.7450000e+01   3.5827603e+00   3.4972736e+01
+   3.7450000e+01   3.8425455e+00   3.4984074e+01
+   3.7450000e+01   4.3142231e+00   3.5036645e+01
+   3.7450000e+01   5.2460165e+00   3.5170777e+01
+   3.7450000e+01   6.6648926e+00   3.5382711e+01
+   3.7450000e+01   8.2569008e+00   3.5621149e+01
+   3.7450000e+01   9.2870413e+00   3.5722876e+01
+   3.7450000e+01   9.5328760e+00   3.5630785e+01
+   3.7450000e+01   9.9026364e+00   3.5537066e+01
+   3.7450000e+01   1.0298083e+01   3.5480702e+01
+   3.7450000e+01   1.0770826e+01   3.5489091e+01
+   3.7450000e+01   1.1255678e+01   3.5531455e+01
+   3.7450000e+01   1.1602421e+01   3.5566000e+01
+   3.7450000e+01   1.1914041e+01   3.5601397e+01
+   3.7450000e+01   1.2147298e+01   3.5626901e+01
+   3.7450000e+01   1.2343058e+01   3.5648785e+01
+   3.7450000e+01   1.2494471e+01   3.5664835e+01
+   3.7450000e+01   1.2597438e+01   3.5676273e+01
+   3.7450000e+01   1.2688149e+01   3.5686380e+01
+   3.7450000e+01   1.2785116e+01   3.5697636e+01
+   3.7450000e+01   1.2848306e+01   3.5705074e+01
+   3.7450000e+01   1.2914322e+01   3.5711992e+01
+   3.7450000e+01   1.3001628e+01   3.5721826e+01
+   3.7450000e+01   1.3051289e+01   3.5725025e+01
+   3.7450000e+01   1.3089132e+01   3.5727711e+01
+   3.7450000e+01   1.3142140e+01   3.5735612e+01
+   3.7450000e+01   1.3179091e+01   3.5738893e+01
+   3.7450000e+01   1.3225289e+01   3.5744364e+01
+   3.7450000e+01   1.3285380e+01   3.5750000e+01
+   3.7450000e+01   1.3351380e+01   3.5760339e+01
+   3.7450000e+01   1.3413512e+01   3.5768570e+01
+   3.7450000e+01   1.3485198e+01   3.5776364e+01
+   3.7450000e+01   1.3539636e+01   3.5778083e+01
+   3.7450000e+01   1.3586083e+01   3.5781620e+01
+   3.7450000e+01   1.3649860e+01   3.5788785e+01
+   3.7450000e+01   1.3724041e+01   3.5795174e+01
+   3.7450000e+01   1.3795636e+01   3.5799347e+01
+   3.7450000e+01   1.3896884e+01   3.5810504e+01
+   3.7450000e+01   1.4007802e+01   3.5819636e+01
+   3.7450000e+01   1.4119207e+01   3.5823149e+01
+   3.7450000e+01   1.4275008e+01   3.5831579e+01
+   3.7450000e+01   1.4495909e+01   3.5833537e+01
+   3.7450000e+01   1.4732562e+01   3.5837397e+01
+   3.7450000e+01   1.4997446e+01   3.5833347e+01
+   3.7450000e+01   1.5706603e+01   3.5837281e+01
+   3.7450000e+01   1.6613545e+01   3.5844116e+01
+   3.7450000e+01   1.7261298e+01   3.5850289e+01
+   3.7450000e+01   1.8017446e+01   3.5853281e+01
+   3.7450000e+01   1.8879421e+01   3.5867727e+01
+   3.7450000e+01   1.9534612e+01   3.5871678e+01
+   3.7450000e+01   1.9774289e+01   3.5868719e+01
+   3.7450000e+01   1.9845992e+01   3.5868760e+01
+   3.7450000e+01   1.9857645e+01   3.5869248e+01
+   3.7450000e+01   1.9858744e+01   3.5869810e+01
+   3.7450000e+01   1.9851843e+01   3.5868702e+01
+   3.7450000e+01   1.9795959e+01   3.5873008e+01
+   3.7500000e+01   2.5103554e+00   3.4896107e+01
+   3.7500000e+01   2.5061901e+00   3.4902207e+01
+   3.7500000e+01   2.5121488e+00   3.4907306e+01
+   3.7500000e+01   2.5413554e+00   3.4914521e+01
+   3.7500000e+01   2.5794959e+00   3.4919405e+01
+   3.7500000e+01   2.6451405e+00   3.4928736e+01
+   3.7500000e+01   2.7416281e+00   3.4940488e+01
+   3.7500000e+01   2.8990331e+00   3.4952802e+01
+   3.7500000e+01   3.0880496e+00   3.4961322e+01
+   3.7500000e+01   3.3536529e+00   3.4973281e+01
+   3.7500000e+01   3.5827603e+00   3.4972736e+01
+   3.7500000e+01   3.8425455e+00   3.4984074e+01
+   3.7500000e+01   4.3142231e+00   3.5036645e+01
+   3.7500000e+01   5.2460165e+00   3.5170777e+01
+   3.7500000e+01   6.6648926e+00   3.5382711e+01
+   3.7500000e+01   8.2569008e+00   3.5621149e+01
+   3.7500000e+01   9.2870413e+00   3.5722876e+01
+   3.7500000e+01   9.5328760e+00   3.5630785e+01
+   3.7500000e+01   9.9026364e+00   3.5537066e+01
+   3.7500000e+01   1.0298083e+01   3.5480702e+01
+   3.7500000e+01   1.0770826e+01   3.5489091e+01
+   3.7500000e+01   1.1255678e+01   3.5531455e+01
+   3.7500000e+01   1.1602421e+01   3.5566000e+01
+   3.7500000e+01   1.1914041e+01   3.5601397e+01
+   3.7500000e+01   1.2147298e+01   3.5626901e+01
+   3.7500000e+01   1.2343058e+01   3.5648785e+01
+   3.7500000e+01   1.2494471e+01   3.5664835e+01
+   3.7500000e+01   1.2597438e+01   3.5676273e+01
+   3.7500000e+01   1.2688149e+01   3.5686380e+01
+   3.7500000e+01   1.2785116e+01   3.5697636e+01
+   3.7500000e+01   1.2848306e+01   3.5705074e+01
+   3.7500000e+01   1.2914322e+01   3.5711992e+01
+   3.7500000e+01   1.3001628e+01   3.5721826e+01
+   3.7500000e+01   1.3051289e+01   3.5725025e+01
+   3.7500000e+01   1.3089132e+01   3.5727711e+01
+   3.7500000e+01   1.3142140e+01   3.5735612e+01
+   3.7500000e+01   1.3179091e+01   3.5738893e+01
+   3.7500000e+01   1.3225289e+01   3.5744364e+01
+   3.7500000e+01   1.3285380e+01   3.5750000e+01
+   3.7500000e+01   1.3351380e+01   3.5760339e+01
+   3.7500000e+01   1.3413512e+01   3.5768570e+01
+   3.7500000e+01   1.3485198e+01   3.5776364e+01
+   3.7500000e+01   1.3539636e+01   3.5778083e+01
+   3.7500000e+01   1.3586083e+01   3.5781620e+01
+   3.7500000e+01   1.3649860e+01   3.5788785e+01
+   3.7500000e+01   1.3724041e+01   3.5795174e+01
+   3.7500000e+01   1.3795636e+01   3.5799347e+01
+   3.7500000e+01   1.3896884e+01   3.5810504e+01
+   3.7500000e+01   1.4007802e+01   3.5819636e+01
+   3.7500000e+01   1.4119207e+01   3.5823149e+01
+   3.7500000e+01   1.4275008e+01   3.5831579e+01
+   3.7500000e+01   1.4495909e+01   3.5833537e+01
+   3.7500000e+01   1.4732562e+01   3.5837397e+01
+   3.7500000e+01   1.4997446e+01   3.5833347e+01
+   3.7500000e+01   1.5706603e+01   3.5837281e+01
+   3.7500000e+01   1.6613545e+01   3.5844116e+01
+   3.7500000e+01   1.7261298e+01   3.5850289e+01
+   3.7500000e+01   1.8017446e+01   3.5853281e+01
+   3.7500000e+01   1.8879421e+01   3.5867727e+01
+   3.7500000e+01   1.9534612e+01   3.5871678e+01
+   3.7500000e+01   1.9774289e+01   3.5868719e+01
+   3.7500000e+01   1.9845992e+01   3.5868760e+01
+   3.7500000e+01   1.9857645e+01   3.5869248e+01
+   3.7500000e+01   1.9858744e+01   3.5869810e+01
+   3.7500000e+01   1.9851843e+01   3.5868702e+01
+   3.7500000e+01   1.9795959e+01   3.5873008e+01
+   3.7550000e+01   2.5103554e+00   3.4896107e+01
+   3.7550000e+01   2.5061901e+00   3.4902207e+01
+   3.7550000e+01   2.5121488e+00   3.4907306e+01
+   3.7550000e+01   2.5413554e+00   3.4914521e+01
+   3.7550000e+01   2.5794959e+00   3.4919405e+01
+   3.7550000e+01   2.6451405e+00   3.4928736e+01
+   3.7550000e+01   2.7416281e+00   3.4940488e+01
+   3.7550000e+01   2.8990331e+00   3.4952802e+01
+   3.7550000e+01   3.0880496e+00   3.4961322e+01
+   3.7550000e+01   3.3536529e+00   3.4973281e+01
+   3.7550000e+01   3.5827603e+00   3.4972736e+01
+   3.7550000e+01   3.8425455e+00   3.4984074e+01
+   3.7550000e+01   4.3142231e+00   3.5036645e+01
+   3.7550000e+01   5.2460165e+00   3.5170777e+01
+   3.7550000e+01   6.6648926e+00   3.5382711e+01
+   3.7550000e+01   8.2569008e+00   3.5621149e+01
+   3.7550000e+01   9.2870413e+00   3.5722876e+01
+   3.7550000e+01   9.5328760e+00   3.5630785e+01
+   3.7550000e+01   9.9026364e+00   3.5537066e+01
+   3.7550000e+01   1.0298083e+01   3.5480702e+01
+   3.7550000e+01   1.0770826e+01   3.5489091e+01
+   3.7550000e+01   1.1255678e+01   3.5531455e+01
+   3.7550000e+01   1.1602421e+01   3.5566000e+01
+   3.7550000e+01   1.1914041e+01   3.5601397e+01
+   3.7550000e+01   1.2147298e+01   3.5626901e+01
+   3.7550000e+01   1.2343058e+01   3.5648785e+01
+   3.7550000e+01   1.2494471e+01   3.5664835e+01
+   3.7550000e+01   1.2597438e+01   3.5676273e+01
+   3.7550000e+01   1.2688149e+01   3.5686380e+01
+   3.7550000e+01   1.2785116e+01   3.5697636e+01
+   3.7550000e+01   1.2848306e+01   3.5705074e+01
+   3.7550000e+01   1.2914322e+01   3.5711992e+01
+   3.7550000e+01   1.3001628e+01   3.5721826e+01
+   3.7550000e+01   1.3051289e+01   3.5725025e+01
+   3.7550000e+01   1.3089132e+01   3.5727711e+01
+   3.7550000e+01   1.3142140e+01   3.5735612e+01
+   3.7550000e+01   1.3179091e+01   3.5738893e+01
+   3.7550000e+01   1.3225289e+01   3.5744364e+01
+   3.7550000e+01   1.3285380e+01   3.5750000e+01
+   3.7550000e+01   1.3351380e+01   3.5760339e+01
+   3.7550000e+01   1.3413512e+01   3.5768570e+01
+   3.7550000e+01   1.3485198e+01   3.5776364e+01
+   3.7550000e+01   1.3539636e+01   3.5778083e+01
+   3.7550000e+01   1.3586083e+01   3.5781620e+01
+   3.7550000e+01   1.3649860e+01   3.5788785e+01
+   3.7550000e+01   1.3724041e+01   3.5795174e+01
+   3.7550000e+01   1.3795636e+01   3.5799347e+01
+   3.7550000e+01   1.3896884e+01   3.5810504e+01
+   3.7550000e+01   1.4007802e+01   3.5819636e+01
+   3.7550000e+01   1.4119207e+01   3.5823149e+01
+   3.7550000e+01   1.4275008e+01   3.5831579e+01
+   3.7550000e+01   1.4495909e+01   3.5833537e+01
+   3.7550000e+01   1.4732562e+01   3.5837397e+01
+   3.7550000e+01   1.4997446e+01   3.5833347e+01
+   3.7550000e+01   1.5706603e+01   3.5837281e+01
+   3.7550000e+01   1.6613545e+01   3.5844116e+01
+   3.7550000e+01   1.7261298e+01   3.5850289e+01
+   3.7550000e+01   1.8017446e+01   3.5853281e+01
+   3.7550000e+01   1.8879421e+01   3.5867727e+01
+   3.7550000e+01   1.9534612e+01   3.5871678e+01
+   3.7550000e+01   1.9774289e+01   3.5868719e+01
+   3.7550000e+01   1.9845992e+01   3.5868760e+01
+   3.7550000e+01   1.9857645e+01   3.5869248e+01
+   3.7550000e+01   1.9858744e+01   3.5869810e+01
+   3.7550000e+01   1.9851843e+01   3.5868702e+01
+   3.7550000e+01   1.9795959e+01   3.5873008e+01
+   3.7600000e+01   2.5103554e+00   3.4896107e+01
+   3.7600000e+01   2.5061901e+00   3.4902207e+01
+   3.7600000e+01   2.5121488e+00   3.4907306e+01
+   3.7600000e+01   2.5413554e+00   3.4914521e+01
+   3.7600000e+01   2.5794959e+00   3.4919405e+01
+   3.7600000e+01   2.6451405e+00   3.4928736e+01
+   3.7600000e+01   2.7416281e+00   3.4940488e+01
+   3.7600000e+01   2.8990331e+00   3.4952802e+01
+   3.7600000e+01   3.0880496e+00   3.4961322e+01
+   3.7600000e+01   3.3536529e+00   3.4973281e+01
+   3.7600000e+01   3.5827603e+00   3.4972736e+01
+   3.7600000e+01   3.8425455e+00   3.4984074e+01
+   3.7600000e+01   4.3142231e+00   3.5036645e+01
+   3.7600000e+01   5.2460165e+00   3.5170777e+01
+   3.7600000e+01   6.6648926e+00   3.5382711e+01
+   3.7600000e+01   8.2569008e+00   3.5621149e+01
+   3.7600000e+01   9.2870413e+00   3.5722876e+01
+   3.7600000e+01   9.5328760e+00   3.5630785e+01
+   3.7600000e+01   9.9026364e+00   3.5537066e+01
+   3.7600000e+01   1.0298083e+01   3.5480702e+01
+   3.7600000e+01   1.0770826e+01   3.5489091e+01
+   3.7600000e+01   1.1255678e+01   3.5531455e+01
+   3.7600000e+01   1.1602421e+01   3.5566000e+01
+   3.7600000e+01   1.1914041e+01   3.5601397e+01
+   3.7600000e+01   1.2147298e+01   3.5626901e+01
+   3.7600000e+01   1.2343058e+01   3.5648785e+01
+   3.7600000e+01   1.2494471e+01   3.5664835e+01
+   3.7600000e+01   1.2597438e+01   3.5676273e+01
+   3.7600000e+01   1.2688149e+01   3.5686380e+01
+   3.7600000e+01   1.2785116e+01   3.5697636e+01
+   3.7600000e+01   1.2848306e+01   3.5705074e+01
+   3.7600000e+01   1.2914322e+01   3.5711992e+01
+   3.7600000e+01   1.3001628e+01   3.5721826e+01
+   3.7600000e+01   1.3051289e+01   3.5725025e+01
+   3.7600000e+01   1.3089132e+01   3.5727711e+01
+   3.7600000e+01   1.3142140e+01   3.5735612e+01
+   3.7600000e+01   1.3179091e+01   3.5738893e+01
+   3.7600000e+01   1.3225289e+01   3.5744364e+01
+   3.7600000e+01   1.3285380e+01   3.5750000e+01
+   3.7600000e+01   1.3351380e+01   3.5760339e+01
+   3.7600000e+01   1.3413512e+01   3.5768570e+01
+   3.7600000e+01   1.3485198e+01   3.5776364e+01
+   3.7600000e+01   1.3539636e+01   3.5778083e+01
+   3.7600000e+01   1.3586083e+01   3.5781620e+01
+   3.7600000e+01   1.3649860e+01   3.5788785e+01
+   3.7600000e+01   1.3724041e+01   3.5795174e+01
+   3.7600000e+01   1.3795636e+01   3.5799347e+01
+   3.7600000e+01   1.3896884e+01   3.5810504e+01
+   3.7600000e+01   1.4007802e+01   3.5819636e+01
+   3.7600000e+01   1.4119207e+01   3.5823149e+01
+   3.7600000e+01   1.4275008e+01   3.5831579e+01
+   3.7600000e+01   1.4495909e+01   3.5833537e+01
+   3.7600000e+01   1.4732562e+01   3.5837397e+01
+   3.7600000e+01   1.4997446e+01   3.5833347e+01
+   3.7600000e+01   1.5706603e+01   3.5837281e+01
+   3.7600000e+01   1.6613545e+01   3.5844116e+01
+   3.7600000e+01   1.7261298e+01   3.5850289e+01
+   3.7600000e+01   1.8017446e+01   3.5853281e+01
+   3.7600000e+01   1.8879421e+01   3.5867727e+01
+   3.7600000e+01   1.9534612e+01   3.5871678e+01
+   3.7600000e+01   1.9774289e+01   3.5868719e+01
+   3.7600000e+01   1.9845992e+01   3.5868760e+01
+   3.7600000e+01   1.9857645e+01   3.5869248e+01
+   3.7600000e+01   1.9858744e+01   3.5869810e+01
+   3.7600000e+01   1.9851843e+01   3.5868702e+01
+   3.7600000e+01   1.9795959e+01   3.5873008e+01
+   3.7650000e+01   2.5103554e+00   3.4896107e+01
+   3.7650000e+01   2.5061901e+00   3.4902207e+01
+   3.7650000e+01   2.5121488e+00   3.4907306e+01
+   3.7650000e+01   2.5413554e+00   3.4914521e+01
+   3.7650000e+01   2.5794959e+00   3.4919405e+01
+   3.7650000e+01   2.6451405e+00   3.4928736e+01
+   3.7650000e+01   2.7416281e+00   3.4940488e+01
+   3.7650000e+01   2.8990331e+00   3.4952802e+01
+   3.7650000e+01   3.0880496e+00   3.4961322e+01
+   3.7650000e+01   3.3536529e+00   3.4973281e+01
+   3.7650000e+01   3.5827603e+00   3.4972736e+01
+   3.7650000e+01   3.8425455e+00   3.4984074e+01
+   3.7650000e+01   4.3142231e+00   3.5036645e+01
+   3.7650000e+01   5.2460165e+00   3.5170777e+01
+   3.7650000e+01   6.6648926e+00   3.5382711e+01
+   3.7650000e+01   8.2569008e+00   3.5621149e+01
+   3.7650000e+01   9.2870413e+00   3.5722876e+01
+   3.7650000e+01   9.5328760e+00   3.5630785e+01
+   3.7650000e+01   9.9026364e+00   3.5537066e+01
+   3.7650000e+01   1.0298083e+01   3.5480702e+01
+   3.7650000e+01   1.0770826e+01   3.5489091e+01
+   3.7650000e+01   1.1255678e+01   3.5531455e+01
+   3.7650000e+01   1.1602421e+01   3.5566000e+01
+   3.7650000e+01   1.1914041e+01   3.5601397e+01
+   3.7650000e+01   1.2147298e+01   3.5626901e+01
+   3.7650000e+01   1.2343058e+01   3.5648785e+01
+   3.7650000e+01   1.2494471e+01   3.5664835e+01
+   3.7650000e+01   1.2597438e+01   3.5676273e+01
+   3.7650000e+01   1.2688149e+01   3.5686380e+01
+   3.7650000e+01   1.2785116e+01   3.5697636e+01
+   3.7650000e+01   1.2848306e+01   3.5705074e+01
+   3.7650000e+01   1.2914322e+01   3.5711992e+01
+   3.7650000e+01   1.3001628e+01   3.5721826e+01
+   3.7650000e+01   1.3051289e+01   3.5725025e+01
+   3.7650000e+01   1.3089132e+01   3.5727711e+01
+   3.7650000e+01   1.3142140e+01   3.5735612e+01
+   3.7650000e+01   1.3179091e+01   3.5738893e+01
+   3.7650000e+01   1.3225289e+01   3.5744364e+01
+   3.7650000e+01   1.3285380e+01   3.5750000e+01
+   3.7650000e+01   1.3351380e+01   3.5760339e+01
+   3.7650000e+01   1.3413512e+01   3.5768570e+01
+   3.7650000e+01   1.3485198e+01   3.5776364e+01
+   3.7650000e+01   1.3539636e+01   3.5778083e+01
+   3.7650000e+01   1.3586083e+01   3.5781620e+01
+   3.7650000e+01   1.3649860e+01   3.5788785e+01
+   3.7650000e+01   1.3724041e+01   3.5795174e+01
+   3.7650000e+01   1.3795636e+01   3.5799347e+01
+   3.7650000e+01   1.3896884e+01   3.5810504e+01
+   3.7650000e+01   1.4007802e+01   3.5819636e+01
+   3.7650000e+01   1.4119207e+01   3.5823149e+01
+   3.7650000e+01   1.4275008e+01   3.5831579e+01
+   3.7650000e+01   1.4495909e+01   3.5833537e+01
+   3.7650000e+01   1.4732562e+01   3.5837397e+01
+   3.7650000e+01   1.4997446e+01   3.5833347e+01
+   3.7650000e+01   1.5706603e+01   3.5837281e+01
+   3.7650000e+01   1.6613545e+01   3.5844116e+01
+   3.7650000e+01   1.7261298e+01   3.5850289e+01
+   3.7650000e+01   1.8017446e+01   3.5853281e+01
+   3.7650000e+01   1.8879421e+01   3.5867727e+01
+   3.7650000e+01   1.9534612e+01   3.5871678e+01
+   3.7650000e+01   1.9774289e+01   3.5868719e+01
+   3.7650000e+01   1.9845992e+01   3.5868760e+01
+   3.7650000e+01   1.9857645e+01   3.5869248e+01
+   3.7650000e+01   1.9858744e+01   3.5869810e+01
+   3.7650000e+01   1.9851843e+01   3.5868702e+01
+   3.7650000e+01   1.9795959e+01   3.5873008e+01
+   3.7700000e+01   2.5103554e+00   3.4896107e+01
+   3.7700000e+01   2.5061901e+00   3.4902207e+01
+   3.7700000e+01   2.5121488e+00   3.4907306e+01
+   3.7700000e+01   2.5413554e+00   3.4914521e+01
+   3.7700000e+01   2.5794959e+00   3.4919405e+01
+   3.7700000e+01   2.6451405e+00   3.4928736e+01
+   3.7700000e+01   2.7416281e+00   3.4940488e+01
+   3.7700000e+01   2.8990331e+00   3.4952802e+01
+   3.7700000e+01   3.0880496e+00   3.4961322e+01
+   3.7700000e+01   3.3536529e+00   3.4973281e+01
+   3.7700000e+01   3.5827603e+00   3.4972736e+01
+   3.7700000e+01   3.8425455e+00   3.4984074e+01
+   3.7700000e+01   4.3142231e+00   3.5036645e+01
+   3.7700000e+01   5.2460165e+00   3.5170777e+01
+   3.7700000e+01   6.6648926e+00   3.5382711e+01
+   3.7700000e+01   8.2569008e+00   3.5621149e+01
+   3.7700000e+01   9.2870413e+00   3.5722876e+01
+   3.7700000e+01   9.5328760e+00   3.5630785e+01
+   3.7700000e+01   9.9026364e+00   3.5537066e+01
+   3.7700000e+01   1.0298083e+01   3.5480702e+01
+   3.7700000e+01   1.0770826e+01   3.5489091e+01
+   3.7700000e+01   1.1255678e+01   3.5531455e+01
+   3.7700000e+01   1.1602421e+01   3.5566000e+01
+   3.7700000e+01   1.1914041e+01   3.5601397e+01
+   3.7700000e+01   1.2147298e+01   3.5626901e+01
+   3.7700000e+01   1.2343058e+01   3.5648785e+01
+   3.7700000e+01   1.2494471e+01   3.5664835e+01
+   3.7700000e+01   1.2597438e+01   3.5676273e+01
+   3.7700000e+01   1.2688149e+01   3.5686380e+01
+   3.7700000e+01   1.2785116e+01   3.5697636e+01
+   3.7700000e+01   1.2848306e+01   3.5705074e+01
+   3.7700000e+01   1.2914322e+01   3.5711992e+01
+   3.7700000e+01   1.3001628e+01   3.5721826e+01
+   3.7700000e+01   1.3051289e+01   3.5725025e+01
+   3.7700000e+01   1.3089132e+01   3.5727711e+01
+   3.7700000e+01   1.3142140e+01   3.5735612e+01
+   3.7700000e+01   1.3179091e+01   3.5738893e+01
+   3.7700000e+01   1.3225289e+01   3.5744364e+01
+   3.7700000e+01   1.3285380e+01   3.5750000e+01
+   3.7700000e+01   1.3351380e+01   3.5760339e+01
+   3.7700000e+01   1.3413512e+01   3.5768570e+01
+   3.7700000e+01   1.3485198e+01   3.5776364e+01
+   3.7700000e+01   1.3539636e+01   3.5778083e+01
+   3.7700000e+01   1.3586083e+01   3.5781620e+01
+   3.7700000e+01   1.3649860e+01   3.5788785e+01
+   3.7700000e+01   1.3724041e+01   3.5795174e+01
+   3.7700000e+01   1.3795636e+01   3.5799347e+01
+   3.7700000e+01   1.3896884e+01   3.5810504e+01
+   3.7700000e+01   1.4007802e+01   3.5819636e+01
+   3.7700000e+01   1.4119207e+01   3.5823149e+01
+   3.7700000e+01   1.4275008e+01   3.5831579e+01
+   3.7700000e+01   1.4495909e+01   3.5833537e+01
+   3.7700000e+01   1.4732562e+01   3.5837397e+01
+   3.7700000e+01   1.4997446e+01   3.5833347e+01
+   3.7700000e+01   1.5706603e+01   3.5837281e+01
+   3.7700000e+01   1.6613545e+01   3.5844116e+01
+   3.7700000e+01   1.7261298e+01   3.5850289e+01
+   3.7700000e+01   1.8017446e+01   3.5853281e+01
+   3.7700000e+01   1.8879421e+01   3.5867727e+01
+   3.7700000e+01   1.9534612e+01   3.5871678e+01
+   3.7700000e+01   1.9774289e+01   3.5868719e+01
+   3.7700000e+01   1.9845992e+01   3.5868760e+01
+   3.7700000e+01   1.9857645e+01   3.5869248e+01
+   3.7700000e+01   1.9858744e+01   3.5869810e+01
+   3.7700000e+01   1.9851843e+01   3.5868702e+01
+   3.7700000e+01   1.9795959e+01   3.5873008e+01
+   3.7750000e+01   2.5103554e+00   3.4896107e+01
+   3.7750000e+01   2.5061901e+00   3.4902207e+01
+   3.7750000e+01   2.5121488e+00   3.4907306e+01
+   3.7750000e+01   2.5413554e+00   3.4914521e+01
+   3.7750000e+01   2.5794959e+00   3.4919405e+01
+   3.7750000e+01   2.6451405e+00   3.4928736e+01
+   3.7750000e+01   2.7416281e+00   3.4940488e+01
+   3.7750000e+01   2.8990331e+00   3.4952802e+01
+   3.7750000e+01   3.0880496e+00   3.4961322e+01
+   3.7750000e+01   3.3536529e+00   3.4973281e+01
+   3.7750000e+01   3.5827603e+00   3.4972736e+01
+   3.7750000e+01   3.8425455e+00   3.4984074e+01
+   3.7750000e+01   4.3142231e+00   3.5036645e+01
+   3.7750000e+01   5.2460165e+00   3.5170777e+01
+   3.7750000e+01   6.6648926e+00   3.5382711e+01
+   3.7750000e+01   8.2569008e+00   3.5621149e+01
+   3.7750000e+01   9.2870413e+00   3.5722876e+01
+   3.7750000e+01   9.5328760e+00   3.5630785e+01
+   3.7750000e+01   9.9026364e+00   3.5537066e+01
+   3.7750000e+01   1.0298083e+01   3.5480702e+01
+   3.7750000e+01   1.0770826e+01   3.5489091e+01
+   3.7750000e+01   1.1255678e+01   3.5531455e+01
+   3.7750000e+01   1.1602421e+01   3.5566000e+01
+   3.7750000e+01   1.1914041e+01   3.5601397e+01
+   3.7750000e+01   1.2147298e+01   3.5626901e+01
+   3.7750000e+01   1.2343058e+01   3.5648785e+01
+   3.7750000e+01   1.2494471e+01   3.5664835e+01
+   3.7750000e+01   1.2597438e+01   3.5676273e+01
+   3.7750000e+01   1.2688149e+01   3.5686380e+01
+   3.7750000e+01   1.2785116e+01   3.5697636e+01
+   3.7750000e+01   1.2848306e+01   3.5705074e+01
+   3.7750000e+01   1.2914322e+01   3.5711992e+01
+   3.7750000e+01   1.3001628e+01   3.5721826e+01
+   3.7750000e+01   1.3051289e+01   3.5725025e+01
+   3.7750000e+01   1.3089132e+01   3.5727711e+01
+   3.7750000e+01   1.3142140e+01   3.5735612e+01
+   3.7750000e+01   1.3179091e+01   3.5738893e+01
+   3.7750000e+01   1.3225289e+01   3.5744364e+01
+   3.7750000e+01   1.3285380e+01   3.5750000e+01
+   3.7750000e+01   1.3351380e+01   3.5760339e+01
+   3.7750000e+01   1.3413512e+01   3.5768570e+01
+   3.7750000e+01   1.3485198e+01   3.5776364e+01
+   3.7750000e+01   1.3539636e+01   3.5778083e+01
+   3.7750000e+01   1.3586083e+01   3.5781620e+01
+   3.7750000e+01   1.3649860e+01   3.5788785e+01
+   3.7750000e+01   1.3724041e+01   3.5795174e+01
+   3.7750000e+01   1.3795636e+01   3.5799347e+01
+   3.7750000e+01   1.3896884e+01   3.5810504e+01
+   3.7750000e+01   1.4007802e+01   3.5819636e+01
+   3.7750000e+01   1.4119207e+01   3.5823149e+01
+   3.7750000e+01   1.4275008e+01   3.5831579e+01
+   3.7750000e+01   1.4495909e+01   3.5833537e+01
+   3.7750000e+01   1.4732562e+01   3.5837397e+01
+   3.7750000e+01   1.4997446e+01   3.5833347e+01
+   3.7750000e+01   1.5706603e+01   3.5837281e+01
+   3.7750000e+01   1.6613545e+01   3.5844116e+01
+   3.7750000e+01   1.7261298e+01   3.5850289e+01
+   3.7750000e+01   1.8017446e+01   3.5853281e+01
+   3.7750000e+01   1.8879421e+01   3.5867727e+01
+   3.7750000e+01   1.9534612e+01   3.5871678e+01
+   3.7750000e+01   1.9774289e+01   3.5868719e+01
+   3.7750000e+01   1.9845992e+01   3.5868760e+01
+   3.7750000e+01   1.9857645e+01   3.5869248e+01
+   3.7750000e+01   1.9858744e+01   3.5869810e+01
+   3.7750000e+01   1.9851843e+01   3.5868702e+01
+   3.7750000e+01   1.9795959e+01   3.5873008e+01
+   3.7800000e+01   2.5103554e+00   3.4896107e+01
+   3.7800000e+01   2.5061901e+00   3.4902207e+01
+   3.7800000e+01   2.5121488e+00   3.4907306e+01
+   3.7800000e+01   2.5413554e+00   3.4914521e+01
+   3.7800000e+01   2.5794959e+00   3.4919405e+01
+   3.7800000e+01   2.6451405e+00   3.4928736e+01
+   3.7800000e+01   2.7416281e+00   3.4940488e+01
+   3.7800000e+01   2.8990331e+00   3.4952802e+01
+   3.7800000e+01   3.0880496e+00   3.4961322e+01
+   3.7800000e+01   3.3536529e+00   3.4973281e+01
+   3.7800000e+01   3.5827603e+00   3.4972736e+01
+   3.7800000e+01   3.8425455e+00   3.4984074e+01
+   3.7800000e+01   4.3142231e+00   3.5036645e+01
+   3.7800000e+01   5.2460165e+00   3.5170777e+01
+   3.7800000e+01   6.6648926e+00   3.5382711e+01
+   3.7800000e+01   8.2569008e+00   3.5621149e+01
+   3.7800000e+01   9.2870413e+00   3.5722876e+01
+   3.7800000e+01   9.5328760e+00   3.5630785e+01
+   3.7800000e+01   9.9026364e+00   3.5537066e+01
+   3.7800000e+01   1.0298083e+01   3.5480702e+01
+   3.7800000e+01   1.0770826e+01   3.5489091e+01
+   3.7800000e+01   1.1255678e+01   3.5531455e+01
+   3.7800000e+01   1.1602421e+01   3.5566000e+01
+   3.7800000e+01   1.1914041e+01   3.5601397e+01
+   3.7800000e+01   1.2147298e+01   3.5626901e+01
+   3.7800000e+01   1.2343058e+01   3.5648785e+01
+   3.7800000e+01   1.2494471e+01   3.5664835e+01
+   3.7800000e+01   1.2597438e+01   3.5676273e+01
+   3.7800000e+01   1.2688149e+01   3.5686380e+01
+   3.7800000e+01   1.2785116e+01   3.5697636e+01
+   3.7800000e+01   1.2848306e+01   3.5705074e+01
+   3.7800000e+01   1.2914322e+01   3.5711992e+01
+   3.7800000e+01   1.3001628e+01   3.5721826e+01
+   3.7800000e+01   1.3051289e+01   3.5725025e+01
+   3.7800000e+01   1.3089132e+01   3.5727711e+01
+   3.7800000e+01   1.3142140e+01   3.5735612e+01
+   3.7800000e+01   1.3179091e+01   3.5738893e+01
+   3.7800000e+01   1.3225289e+01   3.5744364e+01
+   3.7800000e+01   1.3285380e+01   3.5750000e+01
+   3.7800000e+01   1.3351380e+01   3.5760339e+01
+   3.7800000e+01   1.3413512e+01   3.5768570e+01
+   3.7800000e+01   1.3485198e+01   3.5776364e+01
+   3.7800000e+01   1.3539636e+01   3.5778083e+01
+   3.7800000e+01   1.3586083e+01   3.5781620e+01
+   3.7800000e+01   1.3649860e+01   3.5788785e+01
+   3.7800000e+01   1.3724041e+01   3.5795174e+01
+   3.7800000e+01   1.3795636e+01   3.5799347e+01
+   3.7800000e+01   1.3896884e+01   3.5810504e+01
+   3.7800000e+01   1.4007802e+01   3.5819636e+01
+   3.7800000e+01   1.4119207e+01   3.5823149e+01
+   3.7800000e+01   1.4275008e+01   3.5831579e+01
+   3.7800000e+01   1.4495909e+01   3.5833537e+01
+   3.7800000e+01   1.4732562e+01   3.5837397e+01
+   3.7800000e+01   1.4997446e+01   3.5833347e+01
+   3.7800000e+01   1.5706603e+01   3.5837281e+01
+   3.7800000e+01   1.6613545e+01   3.5844116e+01
+   3.7800000e+01   1.7261298e+01   3.5850289e+01
+   3.7800000e+01   1.8017446e+01   3.5853281e+01
+   3.7800000e+01   1.8879421e+01   3.5867727e+01
+   3.7800000e+01   1.9534612e+01   3.5871678e+01
+   3.7800000e+01   1.9774289e+01   3.5868719e+01
+   3.7800000e+01   1.9845992e+01   3.5868760e+01
+   3.7800000e+01   1.9857645e+01   3.5869248e+01
+   3.7800000e+01   1.9858744e+01   3.5869810e+01
+   3.7800000e+01   1.9851843e+01   3.5868702e+01
+   3.7800000e+01   1.9795959e+01   3.5873008e+01
+   3.7850000e+01   2.5103554e+00   3.4896107e+01
+   3.7850000e+01   2.5061901e+00   3.4902207e+01
+   3.7850000e+01   2.5121488e+00   3.4907306e+01
+   3.7850000e+01   2.5413554e+00   3.4914521e+01
+   3.7850000e+01   2.5794959e+00   3.4919405e+01
+   3.7850000e+01   2.6451405e+00   3.4928736e+01
+   3.7850000e+01   2.7416281e+00   3.4940488e+01
+   3.7850000e+01   2.8990331e+00   3.4952802e+01
+   3.7850000e+01   3.0880496e+00   3.4961322e+01
+   3.7850000e+01   3.3536529e+00   3.4973281e+01
+   3.7850000e+01   3.5827603e+00   3.4972736e+01
+   3.7850000e+01   3.8425455e+00   3.4984074e+01
+   3.7850000e+01   4.3142231e+00   3.5036645e+01
+   3.7850000e+01   5.2460165e+00   3.5170777e+01
+   3.7850000e+01   6.6648926e+00   3.5382711e+01
+   3.7850000e+01   8.2569008e+00   3.5621149e+01
+   3.7850000e+01   9.2870413e+00   3.5722876e+01
+   3.7850000e+01   9.5328760e+00   3.5630785e+01
+   3.7850000e+01   9.9026364e+00   3.5537066e+01
+   3.7850000e+01   1.0298083e+01   3.5480702e+01
+   3.7850000e+01   1.0770826e+01   3.5489091e+01
+   3.7850000e+01   1.1255678e+01   3.5531455e+01
+   3.7850000e+01   1.1602421e+01   3.5566000e+01
+   3.7850000e+01   1.1914041e+01   3.5601397e+01
+   3.7850000e+01   1.2147298e+01   3.5626901e+01
+   3.7850000e+01   1.2343058e+01   3.5648785e+01
+   3.7850000e+01   1.2494471e+01   3.5664835e+01
+   3.7850000e+01   1.2597438e+01   3.5676273e+01
+   3.7850000e+01   1.2688149e+01   3.5686380e+01
+   3.7850000e+01   1.2785116e+01   3.5697636e+01
+   3.7850000e+01   1.2848306e+01   3.5705074e+01
+   3.7850000e+01   1.2914322e+01   3.5711992e+01
+   3.7850000e+01   1.3001628e+01   3.5721826e+01
+   3.7850000e+01   1.3051289e+01   3.5725025e+01
+   3.7850000e+01   1.3089132e+01   3.5727711e+01
+   3.7850000e+01   1.3142140e+01   3.5735612e+01
+   3.7850000e+01   1.3179091e+01   3.5738893e+01
+   3.7850000e+01   1.3225289e+01   3.5744364e+01
+   3.7850000e+01   1.3285380e+01   3.5750000e+01
+   3.7850000e+01   1.3351380e+01   3.5760339e+01
+   3.7850000e+01   1.3413512e+01   3.5768570e+01
+   3.7850000e+01   1.3485198e+01   3.5776364e+01
+   3.7850000e+01   1.3539636e+01   3.5778083e+01
+   3.7850000e+01   1.3586083e+01   3.5781620e+01
+   3.7850000e+01   1.3649860e+01   3.5788785e+01
+   3.7850000e+01   1.3724041e+01   3.5795174e+01
+   3.7850000e+01   1.3795636e+01   3.5799347e+01
+   3.7850000e+01   1.3896884e+01   3.5810504e+01
+   3.7850000e+01   1.4007802e+01   3.5819636e+01
+   3.7850000e+01   1.4119207e+01   3.5823149e+01
+   3.7850000e+01   1.4275008e+01   3.5831579e+01
+   3.7850000e+01   1.4495909e+01   3.5833537e+01
+   3.7850000e+01   1.4732562e+01   3.5837397e+01
+   3.7850000e+01   1.4997446e+01   3.5833347e+01
+   3.7850000e+01   1.5706603e+01   3.5837281e+01
+   3.7850000e+01   1.6613545e+01   3.5844116e+01
+   3.7850000e+01   1.7261298e+01   3.5850289e+01
+   3.7850000e+01   1.8017446e+01   3.5853281e+01
+   3.7850000e+01   1.8879421e+01   3.5867727e+01
+   3.7850000e+01   1.9534612e+01   3.5871678e+01
+   3.7850000e+01   1.9774289e+01   3.5868719e+01
+   3.7850000e+01   1.9845992e+01   3.5868760e+01
+   3.7850000e+01   1.9857645e+01   3.5869248e+01
+   3.7850000e+01   1.9858744e+01   3.5869810e+01
+   3.7850000e+01   1.9851843e+01   3.5868702e+01
+   3.7850000e+01   1.9795959e+01   3.5873008e+01
+   3.7900000e+01   2.5103554e+00   3.4896107e+01
+   3.7900000e+01   2.5061901e+00   3.4902207e+01
+   3.7900000e+01   2.5121488e+00   3.4907306e+01
+   3.7900000e+01   2.5413554e+00   3.4914521e+01
+   3.7900000e+01   2.5794959e+00   3.4919405e+01
+   3.7900000e+01   2.6451405e+00   3.4928736e+01
+   3.7900000e+01   2.7416281e+00   3.4940488e+01
+   3.7900000e+01   2.8990331e+00   3.4952802e+01
+   3.7900000e+01   3.0880496e+00   3.4961322e+01
+   3.7900000e+01   3.3536529e+00   3.4973281e+01
+   3.7900000e+01   3.5827603e+00   3.4972736e+01
+   3.7900000e+01   3.8425455e+00   3.4984074e+01
+   3.7900000e+01   4.3142231e+00   3.5036645e+01
+   3.7900000e+01   5.2460165e+00   3.5170777e+01
+   3.7900000e+01   6.6648926e+00   3.5382711e+01
+   3.7900000e+01   8.2569008e+00   3.5621149e+01
+   3.7900000e+01   9.2870413e+00   3.5722876e+01
+   3.7900000e+01   9.5328760e+00   3.5630785e+01
+   3.7900000e+01   9.9026364e+00   3.5537066e+01
+   3.7900000e+01   1.0298083e+01   3.5480702e+01
+   3.7900000e+01   1.0770826e+01   3.5489091e+01
+   3.7900000e+01   1.1255678e+01   3.5531455e+01
+   3.7900000e+01   1.1602421e+01   3.5566000e+01
+   3.7900000e+01   1.1914041e+01   3.5601397e+01
+   3.7900000e+01   1.2147298e+01   3.5626901e+01
+   3.7900000e+01   1.2343058e+01   3.5648785e+01
+   3.7900000e+01   1.2494471e+01   3.5664835e+01
+   3.7900000e+01   1.2597438e+01   3.5676273e+01
+   3.7900000e+01   1.2688149e+01   3.5686380e+01
+   3.7900000e+01   1.2785116e+01   3.5697636e+01
+   3.7900000e+01   1.2848306e+01   3.5705074e+01
+   3.7900000e+01   1.2914322e+01   3.5711992e+01
+   3.7900000e+01   1.3001628e+01   3.5721826e+01
+   3.7900000e+01   1.3051289e+01   3.5725025e+01
+   3.7900000e+01   1.3089132e+01   3.5727711e+01
+   3.7900000e+01   1.3142140e+01   3.5735612e+01
+   3.7900000e+01   1.3179091e+01   3.5738893e+01
+   3.7900000e+01   1.3225289e+01   3.5744364e+01
+   3.7900000e+01   1.3285380e+01   3.5750000e+01
+   3.7900000e+01   1.3351380e+01   3.5760339e+01
+   3.7900000e+01   1.3413512e+01   3.5768570e+01
+   3.7900000e+01   1.3485198e+01   3.5776364e+01
+   3.7900000e+01   1.3539636e+01   3.5778083e+01
+   3.7900000e+01   1.3586083e+01   3.5781620e+01
+   3.7900000e+01   1.3649860e+01   3.5788785e+01
+   3.7900000e+01   1.3724041e+01   3.5795174e+01
+   3.7900000e+01   1.3795636e+01   3.5799347e+01
+   3.7900000e+01   1.3896884e+01   3.5810504e+01
+   3.7900000e+01   1.4007802e+01   3.5819636e+01
+   3.7900000e+01   1.4119207e+01   3.5823149e+01
+   3.7900000e+01   1.4275008e+01   3.5831579e+01
+   3.7900000e+01   1.4495909e+01   3.5833537e+01
+   3.7900000e+01   1.4732562e+01   3.5837397e+01
+   3.7900000e+01   1.4997446e+01   3.5833347e+01
+   3.7900000e+01   1.5706603e+01   3.5837281e+01
+   3.7900000e+01   1.6613545e+01   3.5844116e+01
+   3.7900000e+01   1.7261298e+01   3.5850289e+01
+   3.7900000e+01   1.8017446e+01   3.5853281e+01
+   3.7900000e+01   1.8879421e+01   3.5867727e+01
+   3.7900000e+01   1.9534612e+01   3.5871678e+01
+   3.7900000e+01   1.9774289e+01   3.5868719e+01
+   3.7900000e+01   1.9845992e+01   3.5868760e+01
+   3.7900000e+01   1.9857645e+01   3.5869248e+01
+   3.7900000e+01   1.9858744e+01   3.5869810e+01
+   3.7900000e+01   1.9851843e+01   3.5868702e+01
+   3.7900000e+01   1.9795959e+01   3.5873008e+01
+   3.7950000e+01   2.5103554e+00   3.4896107e+01
+   3.7950000e+01   2.5061901e+00   3.4902207e+01
+   3.7950000e+01   2.5121488e+00   3.4907306e+01
+   3.7950000e+01   2.5413554e+00   3.4914521e+01
+   3.7950000e+01   2.5794959e+00   3.4919405e+01
+   3.7950000e+01   2.6451405e+00   3.4928736e+01
+   3.7950000e+01   2.7416281e+00   3.4940488e+01
+   3.7950000e+01   2.8990331e+00   3.4952802e+01
+   3.7950000e+01   3.0880496e+00   3.4961322e+01
+   3.7950000e+01   3.3536529e+00   3.4973281e+01
+   3.7950000e+01   3.5827603e+00   3.4972736e+01
+   3.7950000e+01   3.8425455e+00   3.4984074e+01
+   3.7950000e+01   4.3142231e+00   3.5036645e+01
+   3.7950000e+01   5.2460165e+00   3.5170777e+01
+   3.7950000e+01   6.6648926e+00   3.5382711e+01
+   3.7950000e+01   8.2569008e+00   3.5621149e+01
+   3.7950000e+01   9.2870413e+00   3.5722876e+01
+   3.7950000e+01   9.5328760e+00   3.5630785e+01
+   3.7950000e+01   9.9026364e+00   3.5537066e+01
+   3.7950000e+01   1.0298083e+01   3.5480702e+01
+   3.7950000e+01   1.0770826e+01   3.5489091e+01
+   3.7950000e+01   1.1255678e+01   3.5531455e+01
+   3.7950000e+01   1.1602421e+01   3.5566000e+01
+   3.7950000e+01   1.1914041e+01   3.5601397e+01
+   3.7950000e+01   1.2147298e+01   3.5626901e+01
+   3.7950000e+01   1.2343058e+01   3.5648785e+01
+   3.7950000e+01   1.2494471e+01   3.5664835e+01
+   3.7950000e+01   1.2597438e+01   3.5676273e+01
+   3.7950000e+01   1.2688149e+01   3.5686380e+01
+   3.7950000e+01   1.2785116e+01   3.5697636e+01
+   3.7950000e+01   1.2848306e+01   3.5705074e+01
+   3.7950000e+01   1.2914322e+01   3.5711992e+01
+   3.7950000e+01   1.3001628e+01   3.5721826e+01
+   3.7950000e+01   1.3051289e+01   3.5725025e+01
+   3.7950000e+01   1.3089132e+01   3.5727711e+01
+   3.7950000e+01   1.3142140e+01   3.5735612e+01
+   3.7950000e+01   1.3179091e+01   3.5738893e+01
+   3.7950000e+01   1.3225289e+01   3.5744364e+01
+   3.7950000e+01   1.3285380e+01   3.5750000e+01
+   3.7950000e+01   1.3351380e+01   3.5760339e+01
+   3.7950000e+01   1.3413512e+01   3.5768570e+01
+   3.7950000e+01   1.3485198e+01   3.5776364e+01
+   3.7950000e+01   1.3539636e+01   3.5778083e+01
+   3.7950000e+01   1.3586083e+01   3.5781620e+01
+   3.7950000e+01   1.3649860e+01   3.5788785e+01
+   3.7950000e+01   1.3724041e+01   3.5795174e+01
+   3.7950000e+01   1.3795636e+01   3.5799347e+01
+   3.7950000e+01   1.3896884e+01   3.5810504e+01
+   3.7950000e+01   1.4007802e+01   3.5819636e+01
+   3.7950000e+01   1.4119207e+01   3.5823149e+01
+   3.7950000e+01   1.4275008e+01   3.5831579e+01
+   3.7950000e+01   1.4495909e+01   3.5833537e+01
+   3.7950000e+01   1.4732562e+01   3.5837397e+01
+   3.7950000e+01   1.4997446e+01   3.5833347e+01
+   3.7950000e+01   1.5706603e+01   3.5837281e+01
+   3.7950000e+01   1.6613545e+01   3.5844116e+01
+   3.7950000e+01   1.7261298e+01   3.5850289e+01
+   3.7950000e+01   1.8017446e+01   3.5853281e+01
+   3.7950000e+01   1.8879421e+01   3.5867727e+01
+   3.7950000e+01   1.9534612e+01   3.5871678e+01
+   3.7950000e+01   1.9774289e+01   3.5868719e+01
+   3.7950000e+01   1.9845992e+01   3.5868760e+01
+   3.7950000e+01   1.9857645e+01   3.5869248e+01
+   3.7950000e+01   1.9858744e+01   3.5869810e+01
+   3.7950000e+01   1.9851843e+01   3.5868702e+01
+   3.7950000e+01   1.9795959e+01   3.5873008e+01
+   3.8000000e+01   2.5103554e+00   3.4896107e+01
+   3.8000000e+01   2.5061901e+00   3.4902207e+01
+   3.8000000e+01   2.5121488e+00   3.4907306e+01
+   3.8000000e+01   2.5413554e+00   3.4914521e+01
+   3.8000000e+01   2.5794959e+00   3.4919405e+01
+   3.8000000e+01   2.6451405e+00   3.4928736e+01
+   3.8000000e+01   2.7416281e+00   3.4940488e+01
+   3.8000000e+01   2.8990331e+00   3.4952802e+01
+   3.8000000e+01   3.0880496e+00   3.4961322e+01
+   3.8000000e+01   3.3536529e+00   3.4973281e+01
+   3.8000000e+01   3.5827603e+00   3.4972736e+01
+   3.8000000e+01   3.8425455e+00   3.4984074e+01
+   3.8000000e+01   4.3142231e+00   3.5036645e+01
+   3.8000000e+01   5.2460165e+00   3.5170777e+01
+   3.8000000e+01   6.6648926e+00   3.5382711e+01
+   3.8000000e+01   8.2569008e+00   3.5621149e+01
+   3.8000000e+01   9.2870413e+00   3.5722876e+01
+   3.8000000e+01   9.5328760e+00   3.5630785e+01
+   3.8000000e+01   9.9026364e+00   3.5537066e+01
+   3.8000000e+01   1.0298083e+01   3.5480702e+01
+   3.8000000e+01   1.0770826e+01   3.5489091e+01
+   3.8000000e+01   1.1255678e+01   3.5531455e+01
+   3.8000000e+01   1.1602421e+01   3.5566000e+01
+   3.8000000e+01   1.1914041e+01   3.5601397e+01
+   3.8000000e+01   1.2147298e+01   3.5626901e+01
+   3.8000000e+01   1.2343058e+01   3.5648785e+01
+   3.8000000e+01   1.2494471e+01   3.5664835e+01
+   3.8000000e+01   1.2597438e+01   3.5676273e+01
+   3.8000000e+01   1.2688149e+01   3.5686380e+01
+   3.8000000e+01   1.2785116e+01   3.5697636e+01
+   3.8000000e+01   1.2848306e+01   3.5705074e+01
+   3.8000000e+01   1.2914322e+01   3.5711992e+01
+   3.8000000e+01   1.3001628e+01   3.5721826e+01
+   3.8000000e+01   1.3051289e+01   3.5725025e+01
+   3.8000000e+01   1.3089132e+01   3.5727711e+01
+   3.8000000e+01   1.3142140e+01   3.5735612e+01
+   3.8000000e+01   1.3179091e+01   3.5738893e+01
+   3.8000000e+01   1.3225289e+01   3.5744364e+01
+   3.8000000e+01   1.3285380e+01   3.5750000e+01
+   3.8000000e+01   1.3351380e+01   3.5760339e+01
+   3.8000000e+01   1.3413512e+01   3.5768570e+01
+   3.8000000e+01   1.3485198e+01   3.5776364e+01
+   3.8000000e+01   1.3539636e+01   3.5778083e+01
+   3.8000000e+01   1.3586083e+01   3.5781620e+01
+   3.8000000e+01   1.3649860e+01   3.5788785e+01
+   3.8000000e+01   1.3724041e+01   3.5795174e+01
+   3.8000000e+01   1.3795636e+01   3.5799347e+01
+   3.8000000e+01   1.3896884e+01   3.5810504e+01
+   3.8000000e+01   1.4007802e+01   3.5819636e+01
+   3.8000000e+01   1.4119207e+01   3.5823149e+01
+   3.8000000e+01   1.4275008e+01   3.5831579e+01
+   3.8000000e+01   1.4495909e+01   3.5833537e+01
+   3.8000000e+01   1.4732562e+01   3.5837397e+01
+   3.8000000e+01   1.4997446e+01   3.5833347e+01
+   3.8000000e+01   1.5706603e+01   3.5837281e+01
+   3.8000000e+01   1.6613545e+01   3.5844116e+01
+   3.8000000e+01   1.7261298e+01   3.5850289e+01
+   3.8000000e+01   1.8017446e+01   3.5853281e+01
+   3.8000000e+01   1.8879421e+01   3.5867727e+01
+   3.8000000e+01   1.9534612e+01   3.5871678e+01
+   3.8000000e+01   1.9774289e+01   3.5868719e+01
+   3.8000000e+01   1.9845992e+01   3.5868760e+01
+   3.8000000e+01   1.9857645e+01   3.5869248e+01
+   3.8000000e+01   1.9858744e+01   3.5869810e+01
+   3.8000000e+01   1.9851843e+01   3.5868702e+01
+   3.8000000e+01   1.9795959e+01   3.5873008e+01
+   3.8050000e+01   2.5103554e+00   3.4896107e+01
+   3.8050000e+01   2.5061901e+00   3.4902207e+01
+   3.8050000e+01   2.5121488e+00   3.4907306e+01
+   3.8050000e+01   2.5413554e+00   3.4914521e+01
+   3.8050000e+01   2.5794959e+00   3.4919405e+01
+   3.8050000e+01   2.6451405e+00   3.4928736e+01
+   3.8050000e+01   2.7416281e+00   3.4940488e+01
+   3.8050000e+01   2.8990331e+00   3.4952802e+01
+   3.8050000e+01   3.0880496e+00   3.4961322e+01
+   3.8050000e+01   3.3536529e+00   3.4973281e+01
+   3.8050000e+01   3.5827603e+00   3.4972736e+01
+   3.8050000e+01   3.8425455e+00   3.4984074e+01
+   3.8050000e+01   4.3142231e+00   3.5036645e+01
+   3.8050000e+01   5.2460165e+00   3.5170777e+01
+   3.8050000e+01   6.6648926e+00   3.5382711e+01
+   3.8050000e+01   8.2569008e+00   3.5621149e+01
+   3.8050000e+01   9.2870413e+00   3.5722876e+01
+   3.8050000e+01   9.5328760e+00   3.5630785e+01
+   3.8050000e+01   9.9026364e+00   3.5537066e+01
+   3.8050000e+01   1.0298083e+01   3.5480702e+01
+   3.8050000e+01   1.0770826e+01   3.5489091e+01
+   3.8050000e+01   1.1255678e+01   3.5531455e+01
+   3.8050000e+01   1.1602421e+01   3.5566000e+01
+   3.8050000e+01   1.1914041e+01   3.5601397e+01
+   3.8050000e+01   1.2147298e+01   3.5626901e+01
+   3.8050000e+01   1.2343058e+01   3.5648785e+01
+   3.8050000e+01   1.2494471e+01   3.5664835e+01
+   3.8050000e+01   1.2597438e+01   3.5676273e+01
+   3.8050000e+01   1.2688149e+01   3.5686380e+01
+   3.8050000e+01   1.2785116e+01   3.5697636e+01
+   3.8050000e+01   1.2848306e+01   3.5705074e+01
+   3.8050000e+01   1.2914322e+01   3.5711992e+01
+   3.8050000e+01   1.3001628e+01   3.5721826e+01
+   3.8050000e+01   1.3051289e+01   3.5725025e+01
+   3.8050000e+01   1.3089132e+01   3.5727711e+01
+   3.8050000e+01   1.3142140e+01   3.5735612e+01
+   3.8050000e+01   1.3179091e+01   3.5738893e+01
+   3.8050000e+01   1.3225289e+01   3.5744364e+01
+   3.8050000e+01   1.3285380e+01   3.5750000e+01
+   3.8050000e+01   1.3351380e+01   3.5760339e+01
+   3.8050000e+01   1.3413512e+01   3.5768570e+01
+   3.8050000e+01   1.3485198e+01   3.5776364e+01
+   3.8050000e+01   1.3539636e+01   3.5778083e+01
+   3.8050000e+01   1.3586083e+01   3.5781620e+01
+   3.8050000e+01   1.3649860e+01   3.5788785e+01
+   3.8050000e+01   1.3724041e+01   3.5795174e+01
+   3.8050000e+01   1.3795636e+01   3.5799347e+01
+   3.8050000e+01   1.3896884e+01   3.5810504e+01
+   3.8050000e+01   1.4007802e+01   3.5819636e+01
+   3.8050000e+01   1.4119207e+01   3.5823149e+01
+   3.8050000e+01   1.4275008e+01   3.5831579e+01
+   3.8050000e+01   1.4495909e+01   3.5833537e+01
+   3.8050000e+01   1.4732562e+01   3.5837397e+01
+   3.8050000e+01   1.4997446e+01   3.5833347e+01
+   3.8050000e+01   1.5706603e+01   3.5837281e+01
+   3.8050000e+01   1.6613545e+01   3.5844116e+01
+   3.8050000e+01   1.7261298e+01   3.5850289e+01
+   3.8050000e+01   1.8017446e+01   3.5853281e+01
+   3.8050000e+01   1.8879421e+01   3.5867727e+01
+   3.8050000e+01   1.9534612e+01   3.5871678e+01
+   3.8050000e+01   1.9774289e+01   3.5868719e+01
+   3.8050000e+01   1.9845992e+01   3.5868760e+01
+   3.8050000e+01   1.9857645e+01   3.5869248e+01
+   3.8050000e+01   1.9858744e+01   3.5869810e+01
+   3.8050000e+01   1.9851843e+01   3.5868702e+01
+   3.8050000e+01   1.9795959e+01   3.5873008e+01
+   3.8100000e+01   2.5103554e+00   3.4896107e+01
+   3.8100000e+01   2.5061901e+00   3.4902207e+01
+   3.8100000e+01   2.5121488e+00   3.4907306e+01
+   3.8100000e+01   2.5413554e+00   3.4914521e+01
+   3.8100000e+01   2.5794959e+00   3.4919405e+01
+   3.8100000e+01   2.6451405e+00   3.4928736e+01
+   3.8100000e+01   2.7416281e+00   3.4940488e+01
+   3.8100000e+01   2.8990331e+00   3.4952802e+01
+   3.8100000e+01   3.0880496e+00   3.4961322e+01
+   3.8100000e+01   3.3536529e+00   3.4973281e+01
+   3.8100000e+01   3.5827603e+00   3.4972736e+01
+   3.8100000e+01   3.8425455e+00   3.4984074e+01
+   3.8100000e+01   4.3142231e+00   3.5036645e+01
+   3.8100000e+01   5.2460165e+00   3.5170777e+01
+   3.8100000e+01   6.6648926e+00   3.5382711e+01
+   3.8100000e+01   8.2569008e+00   3.5621149e+01
+   3.8100000e+01   9.2870413e+00   3.5722876e+01
+   3.8100000e+01   9.5328760e+00   3.5630785e+01
+   3.8100000e+01   9.9026364e+00   3.5537066e+01
+   3.8100000e+01   1.0298083e+01   3.5480702e+01
+   3.8100000e+01   1.0770826e+01   3.5489091e+01
+   3.8100000e+01   1.1255678e+01   3.5531455e+01
+   3.8100000e+01   1.1602421e+01   3.5566000e+01
+   3.8100000e+01   1.1914041e+01   3.5601397e+01
+   3.8100000e+01   1.2147298e+01   3.5626901e+01
+   3.8100000e+01   1.2343058e+01   3.5648785e+01
+   3.8100000e+01   1.2494471e+01   3.5664835e+01
+   3.8100000e+01   1.2597438e+01   3.5676273e+01
+   3.8100000e+01   1.2688149e+01   3.5686380e+01
+   3.8100000e+01   1.2785116e+01   3.5697636e+01
+   3.8100000e+01   1.2848306e+01   3.5705074e+01
+   3.8100000e+01   1.2914322e+01   3.5711992e+01
+   3.8100000e+01   1.3001628e+01   3.5721826e+01
+   3.8100000e+01   1.3051289e+01   3.5725025e+01
+   3.8100000e+01   1.3089132e+01   3.5727711e+01
+   3.8100000e+01   1.3142140e+01   3.5735612e+01
+   3.8100000e+01   1.3179091e+01   3.5738893e+01
+   3.8100000e+01   1.3225289e+01   3.5744364e+01
+   3.8100000e+01   1.3285380e+01   3.5750000e+01
+   3.8100000e+01   1.3351380e+01   3.5760339e+01
+   3.8100000e+01   1.3413512e+01   3.5768570e+01
+   3.8100000e+01   1.3485198e+01   3.5776364e+01
+   3.8100000e+01   1.3539636e+01   3.5778083e+01
+   3.8100000e+01   1.3586083e+01   3.5781620e+01
+   3.8100000e+01   1.3649860e+01   3.5788785e+01
+   3.8100000e+01   1.3724041e+01   3.5795174e+01
+   3.8100000e+01   1.3795636e+01   3.5799347e+01
+   3.8100000e+01   1.3896884e+01   3.5810504e+01
+   3.8100000e+01   1.4007802e+01   3.5819636e+01
+   3.8100000e+01   1.4119207e+01   3.5823149e+01
+   3.8100000e+01   1.4275008e+01   3.5831579e+01
+   3.8100000e+01   1.4495909e+01   3.5833537e+01
+   3.8100000e+01   1.4732562e+01   3.5837397e+01
+   3.8100000e+01   1.4997446e+01   3.5833347e+01
+   3.8100000e+01   1.5706603e+01   3.5837281e+01
+   3.8100000e+01   1.6613545e+01   3.5844116e+01
+   3.8100000e+01   1.7261298e+01   3.5850289e+01
+   3.8100000e+01   1.8017446e+01   3.5853281e+01
+   3.8100000e+01   1.8879421e+01   3.5867727e+01
+   3.8100000e+01   1.9534612e+01   3.5871678e+01
+   3.8100000e+01   1.9774289e+01   3.5868719e+01
+   3.8100000e+01   1.9845992e+01   3.5868760e+01
+   3.8100000e+01   1.9857645e+01   3.5869248e+01
+   3.8100000e+01   1.9858744e+01   3.5869810e+01
+   3.8100000e+01   1.9851843e+01   3.5868702e+01
+   3.8100000e+01   1.9795959e+01   3.5873008e+01
+   3.8150000e+01   2.5103554e+00   3.4896107e+01
+   3.8150000e+01   2.5061901e+00   3.4902207e+01
+   3.8150000e+01   2.5121488e+00   3.4907306e+01
+   3.8150000e+01   2.5413554e+00   3.4914521e+01
+   3.8150000e+01   2.5794959e+00   3.4919405e+01
+   3.8150000e+01   2.6451405e+00   3.4928736e+01
+   3.8150000e+01   2.7416281e+00   3.4940488e+01
+   3.8150000e+01   2.8990331e+00   3.4952802e+01
+   3.8150000e+01   3.0880496e+00   3.4961322e+01
+   3.8150000e+01   3.3536529e+00   3.4973281e+01
+   3.8150000e+01   3.5827603e+00   3.4972736e+01
+   3.8150000e+01   3.8425455e+00   3.4984074e+01
+   3.8150000e+01   4.3142231e+00   3.5036645e+01
+   3.8150000e+01   5.2460165e+00   3.5170777e+01
+   3.8150000e+01   6.6648926e+00   3.5382711e+01
+   3.8150000e+01   8.2569008e+00   3.5621149e+01
+   3.8150000e+01   9.2870413e+00   3.5722876e+01
+   3.8150000e+01   9.5328760e+00   3.5630785e+01
+   3.8150000e+01   9.9026364e+00   3.5537066e+01
+   3.8150000e+01   1.0298083e+01   3.5480702e+01
+   3.8150000e+01   1.0770826e+01   3.5489091e+01
+   3.8150000e+01   1.1255678e+01   3.5531455e+01
+   3.8150000e+01   1.1602421e+01   3.5566000e+01
+   3.8150000e+01   1.1914041e+01   3.5601397e+01
+   3.8150000e+01   1.2147298e+01   3.5626901e+01
+   3.8150000e+01   1.2343058e+01   3.5648785e+01
+   3.8150000e+01   1.2494471e+01   3.5664835e+01
+   3.8150000e+01   1.2597438e+01   3.5676273e+01
+   3.8150000e+01   1.2688149e+01   3.5686380e+01
+   3.8150000e+01   1.2785116e+01   3.5697636e+01
+   3.8150000e+01   1.2848306e+01   3.5705074e+01
+   3.8150000e+01   1.2914322e+01   3.5711992e+01
+   3.8150000e+01   1.3001628e+01   3.5721826e+01
+   3.8150000e+01   1.3051289e+01   3.5725025e+01
+   3.8150000e+01   1.3089132e+01   3.5727711e+01
+   3.8150000e+01   1.3142140e+01   3.5735612e+01
+   3.8150000e+01   1.3179091e+01   3.5738893e+01
+   3.8150000e+01   1.3225289e+01   3.5744364e+01
+   3.8150000e+01   1.3285380e+01   3.5750000e+01
+   3.8150000e+01   1.3351380e+01   3.5760339e+01
+   3.8150000e+01   1.3413512e+01   3.5768570e+01
+   3.8150000e+01   1.3485198e+01   3.5776364e+01
+   3.8150000e+01   1.3539636e+01   3.5778083e+01
+   3.8150000e+01   1.3586083e+01   3.5781620e+01
+   3.8150000e+01   1.3649860e+01   3.5788785e+01
+   3.8150000e+01   1.3724041e+01   3.5795174e+01
+   3.8150000e+01   1.3795636e+01   3.5799347e+01
+   3.8150000e+01   1.3896884e+01   3.5810504e+01
+   3.8150000e+01   1.4007802e+01   3.5819636e+01
+   3.8150000e+01   1.4119207e+01   3.5823149e+01
+   3.8150000e+01   1.4275008e+01   3.5831579e+01
+   3.8150000e+01   1.4495909e+01   3.5833537e+01
+   3.8150000e+01   1.4732562e+01   3.5837397e+01
+   3.8150000e+01   1.4997446e+01   3.5833347e+01
+   3.8150000e+01   1.5706603e+01   3.5837281e+01
+   3.8150000e+01   1.6613545e+01   3.5844116e+01
+   3.8150000e+01   1.7261298e+01   3.5850289e+01
+   3.8150000e+01   1.8017446e+01   3.5853281e+01
+   3.8150000e+01   1.8879421e+01   3.5867727e+01
+   3.8150000e+01   1.9534612e+01   3.5871678e+01
+   3.8150000e+01   1.9774289e+01   3.5868719e+01
+   3.8150000e+01   1.9845992e+01   3.5868760e+01
+   3.8150000e+01   1.9857645e+01   3.5869248e+01
+   3.8150000e+01   1.9858744e+01   3.5869810e+01
+   3.8150000e+01   1.9851843e+01   3.5868702e+01
+   3.8150000e+01   1.9795959e+01   3.5873008e+01
+   3.8200000e+01   2.5103554e+00   3.4896107e+01
+   3.8200000e+01   2.5061901e+00   3.4902207e+01
+   3.8200000e+01   2.5121488e+00   3.4907306e+01
+   3.8200000e+01   2.5413554e+00   3.4914521e+01
+   3.8200000e+01   2.5794959e+00   3.4919405e+01
+   3.8200000e+01   2.6451405e+00   3.4928736e+01
+   3.8200000e+01   2.7416281e+00   3.4940488e+01
+   3.8200000e+01   2.8990331e+00   3.4952802e+01
+   3.8200000e+01   3.0880496e+00   3.4961322e+01
+   3.8200000e+01   3.3536529e+00   3.4973281e+01
+   3.8200000e+01   3.5827603e+00   3.4972736e+01
+   3.8200000e+01   3.8425455e+00   3.4984074e+01
+   3.8200000e+01   4.3142231e+00   3.5036645e+01
+   3.8200000e+01   5.2460165e+00   3.5170777e+01
+   3.8200000e+01   6.6648926e+00   3.5382711e+01
+   3.8200000e+01   8.2569008e+00   3.5621149e+01
+   3.8200000e+01   9.2870413e+00   3.5722876e+01
+   3.8200000e+01   9.5328760e+00   3.5630785e+01
+   3.8200000e+01   9.9026364e+00   3.5537066e+01
+   3.8200000e+01   1.0298083e+01   3.5480702e+01
+   3.8200000e+01   1.0770826e+01   3.5489091e+01
+   3.8200000e+01   1.1255678e+01   3.5531455e+01
+   3.8200000e+01   1.1602421e+01   3.5566000e+01
+   3.8200000e+01   1.1914041e+01   3.5601397e+01
+   3.8200000e+01   1.2147298e+01   3.5626901e+01
+   3.8200000e+01   1.2343058e+01   3.5648785e+01
+   3.8200000e+01   1.2494471e+01   3.5664835e+01
+   3.8200000e+01   1.2597438e+01   3.5676273e+01
+   3.8200000e+01   1.2688149e+01   3.5686380e+01
+   3.8200000e+01   1.2785116e+01   3.5697636e+01
+   3.8200000e+01   1.2848306e+01   3.5705074e+01
+   3.8200000e+01   1.2914322e+01   3.5711992e+01
+   3.8200000e+01   1.3001628e+01   3.5721826e+01
+   3.8200000e+01   1.3051289e+01   3.5725025e+01
+   3.8200000e+01   1.3089132e+01   3.5727711e+01
+   3.8200000e+01   1.3142140e+01   3.5735612e+01
+   3.8200000e+01   1.3179091e+01   3.5738893e+01
+   3.8200000e+01   1.3225289e+01   3.5744364e+01
+   3.8200000e+01   1.3285380e+01   3.5750000e+01
+   3.8200000e+01   1.3351380e+01   3.5760339e+01
+   3.8200000e+01   1.3413512e+01   3.5768570e+01
+   3.8200000e+01   1.3485198e+01   3.5776364e+01
+   3.8200000e+01   1.3539636e+01   3.5778083e+01
+   3.8200000e+01   1.3586083e+01   3.5781620e+01
+   3.8200000e+01   1.3649860e+01   3.5788785e+01
+   3.8200000e+01   1.3724041e+01   3.5795174e+01
+   3.8200000e+01   1.3795636e+01   3.5799347e+01
+   3.8200000e+01   1.3896884e+01   3.5810504e+01
+   3.8200000e+01   1.4007802e+01   3.5819636e+01
+   3.8200000e+01   1.4119207e+01   3.5823149e+01
+   3.8200000e+01   1.4275008e+01   3.5831579e+01
+   3.8200000e+01   1.4495909e+01   3.5833537e+01
+   3.8200000e+01   1.4732562e+01   3.5837397e+01
+   3.8200000e+01   1.4997446e+01   3.5833347e+01
+   3.8200000e+01   1.5706603e+01   3.5837281e+01
+   3.8200000e+01   1.6613545e+01   3.5844116e+01
+   3.8200000e+01   1.7261298e+01   3.5850289e+01
+   3.8200000e+01   1.8017446e+01   3.5853281e+01
+   3.8200000e+01   1.8879421e+01   3.5867727e+01
+   3.8200000e+01   1.9534612e+01   3.5871678e+01
+   3.8200000e+01   1.9774289e+01   3.5868719e+01
+   3.8200000e+01   1.9845992e+01   3.5868760e+01
+   3.8200000e+01   1.9857645e+01   3.5869248e+01
+   3.8200000e+01   1.9858744e+01   3.5869810e+01
+   3.8200000e+01   1.9851843e+01   3.5868702e+01
+   3.8200000e+01   1.9795959e+01   3.5873008e+01
+   3.8250000e+01   2.5103554e+00   3.4896107e+01
+   3.8250000e+01   2.5061901e+00   3.4902207e+01
+   3.8250000e+01   2.5121488e+00   3.4907306e+01
+   3.8250000e+01   2.5413554e+00   3.4914521e+01
+   3.8250000e+01   2.5794959e+00   3.4919405e+01
+   3.8250000e+01   2.6451405e+00   3.4928736e+01
+   3.8250000e+01   2.7416281e+00   3.4940488e+01
+   3.8250000e+01   2.8990331e+00   3.4952802e+01
+   3.8250000e+01   3.0880496e+00   3.4961322e+01
+   3.8250000e+01   3.3536529e+00   3.4973281e+01
+   3.8250000e+01   3.5827603e+00   3.4972736e+01
+   3.8250000e+01   3.8425455e+00   3.4984074e+01
+   3.8250000e+01   4.3142231e+00   3.5036645e+01
+   3.8250000e+01   5.2460165e+00   3.5170777e+01
+   3.8250000e+01   6.6648926e+00   3.5382711e+01
+   3.8250000e+01   8.2569008e+00   3.5621149e+01
+   3.8250000e+01   9.2870413e+00   3.5722876e+01
+   3.8250000e+01   9.5328760e+00   3.5630785e+01
+   3.8250000e+01   9.9026364e+00   3.5537066e+01
+   3.8250000e+01   1.0298083e+01   3.5480702e+01
+   3.8250000e+01   1.0770826e+01   3.5489091e+01
+   3.8250000e+01   1.1255678e+01   3.5531455e+01
+   3.8250000e+01   1.1602421e+01   3.5566000e+01
+   3.8250000e+01   1.1914041e+01   3.5601397e+01
+   3.8250000e+01   1.2147298e+01   3.5626901e+01
+   3.8250000e+01   1.2343058e+01   3.5648785e+01
+   3.8250000e+01   1.2494471e+01   3.5664835e+01
+   3.8250000e+01   1.2597438e+01   3.5676273e+01
+   3.8250000e+01   1.2688149e+01   3.5686380e+01
+   3.8250000e+01   1.2785116e+01   3.5697636e+01
+   3.8250000e+01   1.2848306e+01   3.5705074e+01
+   3.8250000e+01   1.2914322e+01   3.5711992e+01
+   3.8250000e+01   1.3001628e+01   3.5721826e+01
+   3.8250000e+01   1.3051289e+01   3.5725025e+01
+   3.8250000e+01   1.3089132e+01   3.5727711e+01
+   3.8250000e+01   1.3142140e+01   3.5735612e+01
+   3.8250000e+01   1.3179091e+01   3.5738893e+01
+   3.8250000e+01   1.3225289e+01   3.5744364e+01
+   3.8250000e+01   1.3285380e+01   3.5750000e+01
+   3.8250000e+01   1.3351380e+01   3.5760339e+01
+   3.8250000e+01   1.3413512e+01   3.5768570e+01
+   3.8250000e+01   1.3485198e+01   3.5776364e+01
+   3.8250000e+01   1.3539636e+01   3.5778083e+01
+   3.8250000e+01   1.3586083e+01   3.5781620e+01
+   3.8250000e+01   1.3649860e+01   3.5788785e+01
+   3.8250000e+01   1.3724041e+01   3.5795174e+01
+   3.8250000e+01   1.3795636e+01   3.5799347e+01
+   3.8250000e+01   1.3896884e+01   3.5810504e+01
+   3.8250000e+01   1.4007802e+01   3.5819636e+01
+   3.8250000e+01   1.4119207e+01   3.5823149e+01
+   3.8250000e+01   1.4275008e+01   3.5831579e+01
+   3.8250000e+01   1.4495909e+01   3.5833537e+01
+   3.8250000e+01   1.4732562e+01   3.5837397e+01
+   3.8250000e+01   1.4997446e+01   3.5833347e+01
+   3.8250000e+01   1.5706603e+01   3.5837281e+01
+   3.8250000e+01   1.6613545e+01   3.5844116e+01
+   3.8250000e+01   1.7261298e+01   3.5850289e+01
+   3.8250000e+01   1.8017446e+01   3.5853281e+01
+   3.8250000e+01   1.8879421e+01   3.5867727e+01
+   3.8250000e+01   1.9534612e+01   3.5871678e+01
+   3.8250000e+01   1.9774289e+01   3.5868719e+01
+   3.8250000e+01   1.9845992e+01   3.5868760e+01
+   3.8250000e+01   1.9857645e+01   3.5869248e+01
+   3.8250000e+01   1.9858744e+01   3.5869810e+01
+   3.8250000e+01   1.9851843e+01   3.5868702e+01
+   3.8250000e+01   1.9795959e+01   3.5873008e+01
+   3.8300000e+01   2.5103554e+00   3.4896107e+01
+   3.8300000e+01   2.5061901e+00   3.4902207e+01
+   3.8300000e+01   2.5121488e+00   3.4907306e+01
+   3.8300000e+01   2.5413554e+00   3.4914521e+01
+   3.8300000e+01   2.5794959e+00   3.4919405e+01
+   3.8300000e+01   2.6451405e+00   3.4928736e+01
+   3.8300000e+01   2.7416281e+00   3.4940488e+01
+   3.8300000e+01   2.8990331e+00   3.4952802e+01
+   3.8300000e+01   3.0880496e+00   3.4961322e+01
+   3.8300000e+01   3.3536529e+00   3.4973281e+01
+   3.8300000e+01   3.5827603e+00   3.4972736e+01
+   3.8300000e+01   3.8425455e+00   3.4984074e+01
+   3.8300000e+01   4.3142231e+00   3.5036645e+01
+   3.8300000e+01   5.2460165e+00   3.5170777e+01
+   3.8300000e+01   6.6648926e+00   3.5382711e+01
+   3.8300000e+01   8.2569008e+00   3.5621149e+01
+   3.8300000e+01   9.2870413e+00   3.5722876e+01
+   3.8300000e+01   9.5328760e+00   3.5630785e+01
+   3.8300000e+01   9.9026364e+00   3.5537066e+01
+   3.8300000e+01   1.0298083e+01   3.5480702e+01
+   3.8300000e+01   1.0770826e+01   3.5489091e+01
+   3.8300000e+01   1.1255678e+01   3.5531455e+01
+   3.8300000e+01   1.1602421e+01   3.5566000e+01
+   3.8300000e+01   1.1914041e+01   3.5601397e+01
+   3.8300000e+01   1.2147298e+01   3.5626901e+01
+   3.8300000e+01   1.2343058e+01   3.5648785e+01
+   3.8300000e+01   1.2494471e+01   3.5664835e+01
+   3.8300000e+01   1.2597438e+01   3.5676273e+01
+   3.8300000e+01   1.2688149e+01   3.5686380e+01
+   3.8300000e+01   1.2785116e+01   3.5697636e+01
+   3.8300000e+01   1.2848306e+01   3.5705074e+01
+   3.8300000e+01   1.2914322e+01   3.5711992e+01
+   3.8300000e+01   1.3001628e+01   3.5721826e+01
+   3.8300000e+01   1.3051289e+01   3.5725025e+01
+   3.8300000e+01   1.3089132e+01   3.5727711e+01
+   3.8300000e+01   1.3142140e+01   3.5735612e+01
+   3.8300000e+01   1.3179091e+01   3.5738893e+01
+   3.8300000e+01   1.3225289e+01   3.5744364e+01
+   3.8300000e+01   1.3285380e+01   3.5750000e+01
+   3.8300000e+01   1.3351380e+01   3.5760339e+01
+   3.8300000e+01   1.3413512e+01   3.5768570e+01
+   3.8300000e+01   1.3485198e+01   3.5776364e+01
+   3.8300000e+01   1.3539636e+01   3.5778083e+01
+   3.8300000e+01   1.3586083e+01   3.5781620e+01
+   3.8300000e+01   1.3649860e+01   3.5788785e+01
+   3.8300000e+01   1.3724041e+01   3.5795174e+01
+   3.8300000e+01   1.3795636e+01   3.5799347e+01
+   3.8300000e+01   1.3896884e+01   3.5810504e+01
+   3.8300000e+01   1.4007802e+01   3.5819636e+01
+   3.8300000e+01   1.4119207e+01   3.5823149e+01
+   3.8300000e+01   1.4275008e+01   3.5831579e+01
+   3.8300000e+01   1.4495909e+01   3.5833537e+01
+   3.8300000e+01   1.4732562e+01   3.5837397e+01
+   3.8300000e+01   1.4997446e+01   3.5833347e+01
+   3.8300000e+01   1.5706603e+01   3.5837281e+01
+   3.8300000e+01   1.6613545e+01   3.5844116e+01
+   3.8300000e+01   1.7261298e+01   3.5850289e+01
+   3.8300000e+01   1.8017446e+01   3.5853281e+01
+   3.8300000e+01   1.8879421e+01   3.5867727e+01
+   3.8300000e+01   1.9534612e+01   3.5871678e+01
+   3.8300000e+01   1.9774289e+01   3.5868719e+01
+   3.8300000e+01   1.9845992e+01   3.5868760e+01
+   3.8300000e+01   1.9857645e+01   3.5869248e+01
+   3.8300000e+01   1.9858744e+01   3.5869810e+01
+   3.8300000e+01   1.9851843e+01   3.5868702e+01
+   3.8300000e+01   1.9795959e+01   3.5873008e+01
+   3.8350000e+01   2.5103554e+00   3.4896107e+01
+   3.8350000e+01   2.5061901e+00   3.4902207e+01
+   3.8350000e+01   2.5121488e+00   3.4907306e+01
+   3.8350000e+01   2.5413554e+00   3.4914521e+01
+   3.8350000e+01   2.5794959e+00   3.4919405e+01
+   3.8350000e+01   2.6451405e+00   3.4928736e+01
+   3.8350000e+01   2.7416281e+00   3.4940488e+01
+   3.8350000e+01   2.8990331e+00   3.4952802e+01
+   3.8350000e+01   3.0880496e+00   3.4961322e+01
+   3.8350000e+01   3.3536529e+00   3.4973281e+01
+   3.8350000e+01   3.5827603e+00   3.4972736e+01
+   3.8350000e+01   3.8425455e+00   3.4984074e+01
+   3.8350000e+01   4.3142231e+00   3.5036645e+01
+   3.8350000e+01   5.2460165e+00   3.5170777e+01
+   3.8350000e+01   6.6648926e+00   3.5382711e+01
+   3.8350000e+01   8.2569008e+00   3.5621149e+01
+   3.8350000e+01   9.2870413e+00   3.5722876e+01
+   3.8350000e+01   9.5328760e+00   3.5630785e+01
+   3.8350000e+01   9.9026364e+00   3.5537066e+01
+   3.8350000e+01   1.0298083e+01   3.5480702e+01
+   3.8350000e+01   1.0770826e+01   3.5489091e+01
+   3.8350000e+01   1.1255678e+01   3.5531455e+01
+   3.8350000e+01   1.1602421e+01   3.5566000e+01
+   3.8350000e+01   1.1914041e+01   3.5601397e+01
+   3.8350000e+01   1.2147298e+01   3.5626901e+01
+   3.8350000e+01   1.2343058e+01   3.5648785e+01
+   3.8350000e+01   1.2494471e+01   3.5664835e+01
+   3.8350000e+01   1.2597438e+01   3.5676273e+01
+   3.8350000e+01   1.2688149e+01   3.5686380e+01
+   3.8350000e+01   1.2785116e+01   3.5697636e+01
+   3.8350000e+01   1.2848306e+01   3.5705074e+01
+   3.8350000e+01   1.2914322e+01   3.5711992e+01
+   3.8350000e+01   1.3001628e+01   3.5721826e+01
+   3.8350000e+01   1.3051289e+01   3.5725025e+01
+   3.8350000e+01   1.3089132e+01   3.5727711e+01
+   3.8350000e+01   1.3142140e+01   3.5735612e+01
+   3.8350000e+01   1.3179091e+01   3.5738893e+01
+   3.8350000e+01   1.3225289e+01   3.5744364e+01
+   3.8350000e+01   1.3285380e+01   3.5750000e+01
+   3.8350000e+01   1.3351380e+01   3.5760339e+01
+   3.8350000e+01   1.3413512e+01   3.5768570e+01
+   3.8350000e+01   1.3485198e+01   3.5776364e+01
+   3.8350000e+01   1.3539636e+01   3.5778083e+01
+   3.8350000e+01   1.3586083e+01   3.5781620e+01
+   3.8350000e+01   1.3649860e+01   3.5788785e+01
+   3.8350000e+01   1.3724041e+01   3.5795174e+01
+   3.8350000e+01   1.3795636e+01   3.5799347e+01
+   3.8350000e+01   1.3896884e+01   3.5810504e+01
+   3.8350000e+01   1.4007802e+01   3.5819636e+01
+   3.8350000e+01   1.4119207e+01   3.5823149e+01
+   3.8350000e+01   1.4275008e+01   3.5831579e+01
+   3.8350000e+01   1.4495909e+01   3.5833537e+01
+   3.8350000e+01   1.4732562e+01   3.5837397e+01
+   3.8350000e+01   1.4997446e+01   3.5833347e+01
+   3.8350000e+01   1.5706603e+01   3.5837281e+01
+   3.8350000e+01   1.6613545e+01   3.5844116e+01
+   3.8350000e+01   1.7261298e+01   3.5850289e+01
+   3.8350000e+01   1.8017446e+01   3.5853281e+01
+   3.8350000e+01   1.8879421e+01   3.5867727e+01
+   3.8350000e+01   1.9534612e+01   3.5871678e+01
+   3.8350000e+01   1.9774289e+01   3.5868719e+01
+   3.8350000e+01   1.9845992e+01   3.5868760e+01
+   3.8350000e+01   1.9857645e+01   3.5869248e+01
+   3.8350000e+01   1.9858744e+01   3.5869810e+01
+   3.8350000e+01   1.9851843e+01   3.5868702e+01
+   3.8350000e+01   1.9795959e+01   3.5873008e+01
+   3.8400000e+01   2.5103554e+00   3.4896107e+01
+   3.8400000e+01   2.5061901e+00   3.4902207e+01
+   3.8400000e+01   2.5121488e+00   3.4907306e+01
+   3.8400000e+01   2.5413554e+00   3.4914521e+01
+   3.8400000e+01   2.5794959e+00   3.4919405e+01
+   3.8400000e+01   2.6451405e+00   3.4928736e+01
+   3.8400000e+01   2.7416281e+00   3.4940488e+01
+   3.8400000e+01   2.8990331e+00   3.4952802e+01
+   3.8400000e+01   3.0880496e+00   3.4961322e+01
+   3.8400000e+01   3.3536529e+00   3.4973281e+01
+   3.8400000e+01   3.5827603e+00   3.4972736e+01
+   3.8400000e+01   3.8425455e+00   3.4984074e+01
+   3.8400000e+01   4.3142231e+00   3.5036645e+01
+   3.8400000e+01   5.2460165e+00   3.5170777e+01
+   3.8400000e+01   6.6648926e+00   3.5382711e+01
+   3.8400000e+01   8.2569008e+00   3.5621149e+01
+   3.8400000e+01   9.2870413e+00   3.5722876e+01
+   3.8400000e+01   9.5328760e+00   3.5630785e+01
+   3.8400000e+01   9.9026364e+00   3.5537066e+01
+   3.8400000e+01   1.0298083e+01   3.5480702e+01
+   3.8400000e+01   1.0770826e+01   3.5489091e+01
+   3.8400000e+01   1.1255678e+01   3.5531455e+01
+   3.8400000e+01   1.1602421e+01   3.5566000e+01
+   3.8400000e+01   1.1914041e+01   3.5601397e+01
+   3.8400000e+01   1.2147298e+01   3.5626901e+01
+   3.8400000e+01   1.2343058e+01   3.5648785e+01
+   3.8400000e+01   1.2494471e+01   3.5664835e+01
+   3.8400000e+01   1.2597438e+01   3.5676273e+01
+   3.8400000e+01   1.2688149e+01   3.5686380e+01
+   3.8400000e+01   1.2785116e+01   3.5697636e+01
+   3.8400000e+01   1.2848306e+01   3.5705074e+01
+   3.8400000e+01   1.2914322e+01   3.5711992e+01
+   3.8400000e+01   1.3001628e+01   3.5721826e+01
+   3.8400000e+01   1.3051289e+01   3.5725025e+01
+   3.8400000e+01   1.3089132e+01   3.5727711e+01
+   3.8400000e+01   1.3142140e+01   3.5735612e+01
+   3.8400000e+01   1.3179091e+01   3.5738893e+01
+   3.8400000e+01   1.3225289e+01   3.5744364e+01
+   3.8400000e+01   1.3285380e+01   3.5750000e+01
+   3.8400000e+01   1.3351380e+01   3.5760339e+01
+   3.8400000e+01   1.3413512e+01   3.5768570e+01
+   3.8400000e+01   1.3485198e+01   3.5776364e+01
+   3.8400000e+01   1.3539636e+01   3.5778083e+01
+   3.8400000e+01   1.3586083e+01   3.5781620e+01
+   3.8400000e+01   1.3649860e+01   3.5788785e+01
+   3.8400000e+01   1.3724041e+01   3.5795174e+01
+   3.8400000e+01   1.3795636e+01   3.5799347e+01
+   3.8400000e+01   1.3896884e+01   3.5810504e+01
+   3.8400000e+01   1.4007802e+01   3.5819636e+01
+   3.8400000e+01   1.4119207e+01   3.5823149e+01
+   3.8400000e+01   1.4275008e+01   3.5831579e+01
+   3.8400000e+01   1.4495909e+01   3.5833537e+01
+   3.8400000e+01   1.4732562e+01   3.5837397e+01
+   3.8400000e+01   1.4997446e+01   3.5833347e+01
+   3.8400000e+01   1.5706603e+01   3.5837281e+01
+   3.8400000e+01   1.6613545e+01   3.5844116e+01
+   3.8400000e+01   1.7261298e+01   3.5850289e+01
+   3.8400000e+01   1.8017446e+01   3.5853281e+01
+   3.8400000e+01   1.8879421e+01   3.5867727e+01
+   3.8400000e+01   1.9534612e+01   3.5871678e+01
+   3.8400000e+01   1.9774289e+01   3.5868719e+01
+   3.8400000e+01   1.9845992e+01   3.5868760e+01
+   3.8400000e+01   1.9857645e+01   3.5869248e+01
+   3.8400000e+01   1.9858744e+01   3.5869810e+01
+   3.8400000e+01   1.9851843e+01   3.5868702e+01
+   3.8400000e+01   1.9795959e+01   3.5873008e+01
+   3.8450000e+01   2.5103554e+00   3.4896107e+01
+   3.8450000e+01   2.5061901e+00   3.4902207e+01
+   3.8450000e+01   2.5121488e+00   3.4907306e+01
+   3.8450000e+01   2.5413554e+00   3.4914521e+01
+   3.8450000e+01   2.5794959e+00   3.4919405e+01
+   3.8450000e+01   2.6451405e+00   3.4928736e+01
+   3.8450000e+01   2.7416281e+00   3.4940488e+01
+   3.8450000e+01   2.8990331e+00   3.4952802e+01
+   3.8450000e+01   3.0880496e+00   3.4961322e+01
+   3.8450000e+01   3.3536529e+00   3.4973281e+01
+   3.8450000e+01   3.5827603e+00   3.4972736e+01
+   3.8450000e+01   3.8425455e+00   3.4984074e+01
+   3.8450000e+01   4.3142231e+00   3.5036645e+01
+   3.8450000e+01   5.2460165e+00   3.5170777e+01
+   3.8450000e+01   6.6648926e+00   3.5382711e+01
+   3.8450000e+01   8.2569008e+00   3.5621149e+01
+   3.8450000e+01   9.2870413e+00   3.5722876e+01
+   3.8450000e+01   9.5328760e+00   3.5630785e+01
+   3.8450000e+01   9.9026364e+00   3.5537066e+01
+   3.8450000e+01   1.0298083e+01   3.5480702e+01
+   3.8450000e+01   1.0770826e+01   3.5489091e+01
+   3.8450000e+01   1.1255678e+01   3.5531455e+01
+   3.8450000e+01   1.1602421e+01   3.5566000e+01
+   3.8450000e+01   1.1914041e+01   3.5601397e+01
+   3.8450000e+01   1.2147298e+01   3.5626901e+01
+   3.8450000e+01   1.2343058e+01   3.5648785e+01
+   3.8450000e+01   1.2494471e+01   3.5664835e+01
+   3.8450000e+01   1.2597438e+01   3.5676273e+01
+   3.8450000e+01   1.2688149e+01   3.5686380e+01
+   3.8450000e+01   1.2785116e+01   3.5697636e+01
+   3.8450000e+01   1.2848306e+01   3.5705074e+01
+   3.8450000e+01   1.2914322e+01   3.5711992e+01
+   3.8450000e+01   1.3001628e+01   3.5721826e+01
+   3.8450000e+01   1.3051289e+01   3.5725025e+01
+   3.8450000e+01   1.3089132e+01   3.5727711e+01
+   3.8450000e+01   1.3142140e+01   3.5735612e+01
+   3.8450000e+01   1.3179091e+01   3.5738893e+01
+   3.8450000e+01   1.3225289e+01   3.5744364e+01
+   3.8450000e+01   1.3285380e+01   3.5750000e+01
+   3.8450000e+01   1.3351380e+01   3.5760339e+01
+   3.8450000e+01   1.3413512e+01   3.5768570e+01
+   3.8450000e+01   1.3485198e+01   3.5776364e+01
+   3.8450000e+01   1.3539636e+01   3.5778083e+01
+   3.8450000e+01   1.3586083e+01   3.5781620e+01
+   3.8450000e+01   1.3649860e+01   3.5788785e+01
+   3.8450000e+01   1.3724041e+01   3.5795174e+01
+   3.8450000e+01   1.3795636e+01   3.5799347e+01
+   3.8450000e+01   1.3896884e+01   3.5810504e+01
+   3.8450000e+01   1.4007802e+01   3.5819636e+01
+   3.8450000e+01   1.4119207e+01   3.5823149e+01
+   3.8450000e+01   1.4275008e+01   3.5831579e+01
+   3.8450000e+01   1.4495909e+01   3.5833537e+01
+   3.8450000e+01   1.4732562e+01   3.5837397e+01
+   3.8450000e+01   1.4997446e+01   3.5833347e+01
+   3.8450000e+01   1.5706603e+01   3.5837281e+01
+   3.8450000e+01   1.6613545e+01   3.5844116e+01
+   3.8450000e+01   1.7261298e+01   3.5850289e+01
+   3.8450000e+01   1.8017446e+01   3.5853281e+01
+   3.8450000e+01   1.8879421e+01   3.5867727e+01
+   3.8450000e+01   1.9534612e+01   3.5871678e+01
+   3.8450000e+01   1.9774289e+01   3.5868719e+01
+   3.8450000e+01   1.9845992e+01   3.5868760e+01
+   3.8450000e+01   1.9857645e+01   3.5869248e+01
+   3.8450000e+01   1.9858744e+01   3.5869810e+01
+   3.8450000e+01   1.9851843e+01   3.5868702e+01
+   3.8450000e+01   1.9795959e+01   3.5873008e+01
+   3.8500000e+01   2.5103554e+00   3.4896107e+01
+   3.8500000e+01   2.5061901e+00   3.4902207e+01
+   3.8500000e+01   2.5121488e+00   3.4907306e+01
+   3.8500000e+01   2.5413554e+00   3.4914521e+01
+   3.8500000e+01   2.5794959e+00   3.4919405e+01
+   3.8500000e+01   2.6451405e+00   3.4928736e+01
+   3.8500000e+01   2.7416281e+00   3.4940488e+01
+   3.8500000e+01   2.8990331e+00   3.4952802e+01
+   3.8500000e+01   3.0880496e+00   3.4961322e+01
+   3.8500000e+01   3.3536529e+00   3.4973281e+01
+   3.8500000e+01   3.5827603e+00   3.4972736e+01
+   3.8500000e+01   3.8425455e+00   3.4984074e+01
+   3.8500000e+01   4.3142231e+00   3.5036645e+01
+   3.8500000e+01   5.2460165e+00   3.5170777e+01
+   3.8500000e+01   6.6648926e+00   3.5382711e+01
+   3.8500000e+01   8.2569008e+00   3.5621149e+01
+   3.8500000e+01   9.2870413e+00   3.5722876e+01
+   3.8500000e+01   9.5328760e+00   3.5630785e+01
+   3.8500000e+01   9.9026364e+00   3.5537066e+01
+   3.8500000e+01   1.0298083e+01   3.5480702e+01
+   3.8500000e+01   1.0770826e+01   3.5489091e+01
+   3.8500000e+01   1.1255678e+01   3.5531455e+01
+   3.8500000e+01   1.1602421e+01   3.5566000e+01
+   3.8500000e+01   1.1914041e+01   3.5601397e+01
+   3.8500000e+01   1.2147298e+01   3.5626901e+01
+   3.8500000e+01   1.2343058e+01   3.5648785e+01
+   3.8500000e+01   1.2494471e+01   3.5664835e+01
+   3.8500000e+01   1.2597438e+01   3.5676273e+01
+   3.8500000e+01   1.2688149e+01   3.5686380e+01
+   3.8500000e+01   1.2785116e+01   3.5697636e+01
+   3.8500000e+01   1.2848306e+01   3.5705074e+01
+   3.8500000e+01   1.2914322e+01   3.5711992e+01
+   3.8500000e+01   1.3001628e+01   3.5721826e+01
+   3.8500000e+01   1.3051289e+01   3.5725025e+01
+   3.8500000e+01   1.3089132e+01   3.5727711e+01
+   3.8500000e+01   1.3142140e+01   3.5735612e+01
+   3.8500000e+01   1.3179091e+01   3.5738893e+01
+   3.8500000e+01   1.3225289e+01   3.5744364e+01
+   3.8500000e+01   1.3285380e+01   3.5750000e+01
+   3.8500000e+01   1.3351380e+01   3.5760339e+01
+   3.8500000e+01   1.3413512e+01   3.5768570e+01
+   3.8500000e+01   1.3485198e+01   3.5776364e+01
+   3.8500000e+01   1.3539636e+01   3.5778083e+01
+   3.8500000e+01   1.3586083e+01   3.5781620e+01
+   3.8500000e+01   1.3649860e+01   3.5788785e+01
+   3.8500000e+01   1.3724041e+01   3.5795174e+01
+   3.8500000e+01   1.3795636e+01   3.5799347e+01
+   3.8500000e+01   1.3896884e+01   3.5810504e+01
+   3.8500000e+01   1.4007802e+01   3.5819636e+01
+   3.8500000e+01   1.4119207e+01   3.5823149e+01
+   3.8500000e+01   1.4275008e+01   3.5831579e+01
+   3.8500000e+01   1.4495909e+01   3.5833537e+01
+   3.8500000e+01   1.4732562e+01   3.5837397e+01
+   3.8500000e+01   1.4997446e+01   3.5833347e+01
+   3.8500000e+01   1.5706603e+01   3.5837281e+01
+   3.8500000e+01   1.6613545e+01   3.5844116e+01
+   3.8500000e+01   1.7261298e+01   3.5850289e+01
+   3.8500000e+01   1.8017446e+01   3.5853281e+01
+   3.8500000e+01   1.8879421e+01   3.5867727e+01
+   3.8500000e+01   1.9534612e+01   3.5871678e+01
+   3.8500000e+01   1.9774289e+01   3.5868719e+01
+   3.8500000e+01   1.9845992e+01   3.5868760e+01
+   3.8500000e+01   1.9857645e+01   3.5869248e+01
+   3.8500000e+01   1.9858744e+01   3.5869810e+01
+   3.8500000e+01   1.9851843e+01   3.5868702e+01
+   3.8500000e+01   1.9795959e+01   3.5873008e+01
+   3.8550000e+01   2.5103554e+00   3.4896107e+01
+   3.8550000e+01   2.5061901e+00   3.4902207e+01
+   3.8550000e+01   2.5121488e+00   3.4907306e+01
+   3.8550000e+01   2.5413554e+00   3.4914521e+01
+   3.8550000e+01   2.5794959e+00   3.4919405e+01
+   3.8550000e+01   2.6451405e+00   3.4928736e+01
+   3.8550000e+01   2.7416281e+00   3.4940488e+01
+   3.8550000e+01   2.8990331e+00   3.4952802e+01
+   3.8550000e+01   3.0880496e+00   3.4961322e+01
+   3.8550000e+01   3.3536529e+00   3.4973281e+01
+   3.8550000e+01   3.5827603e+00   3.4972736e+01
+   3.8550000e+01   3.8425455e+00   3.4984074e+01
+   3.8550000e+01   4.3142231e+00   3.5036645e+01
+   3.8550000e+01   5.2460165e+00   3.5170777e+01
+   3.8550000e+01   6.6648926e+00   3.5382711e+01
+   3.8550000e+01   8.2569008e+00   3.5621149e+01
+   3.8550000e+01   9.2870413e+00   3.5722876e+01
+   3.8550000e+01   9.5328760e+00   3.5630785e+01
+   3.8550000e+01   9.9026364e+00   3.5537066e+01
+   3.8550000e+01   1.0298083e+01   3.5480702e+01
+   3.8550000e+01   1.0770826e+01   3.5489091e+01
+   3.8550000e+01   1.1255678e+01   3.5531455e+01
+   3.8550000e+01   1.1602421e+01   3.5566000e+01
+   3.8550000e+01   1.1914041e+01   3.5601397e+01
+   3.8550000e+01   1.2147298e+01   3.5626901e+01
+   3.8550000e+01   1.2343058e+01   3.5648785e+01
+   3.8550000e+01   1.2494471e+01   3.5664835e+01
+   3.8550000e+01   1.2597438e+01   3.5676273e+01
+   3.8550000e+01   1.2688149e+01   3.5686380e+01
+   3.8550000e+01   1.2785116e+01   3.5697636e+01
+   3.8550000e+01   1.2848306e+01   3.5705074e+01
+   3.8550000e+01   1.2914322e+01   3.5711992e+01
+   3.8550000e+01   1.3001628e+01   3.5721826e+01
+   3.8550000e+01   1.3051289e+01   3.5725025e+01
+   3.8550000e+01   1.3089132e+01   3.5727711e+01
+   3.8550000e+01   1.3142140e+01   3.5735612e+01
+   3.8550000e+01   1.3179091e+01   3.5738893e+01
+   3.8550000e+01   1.3225289e+01   3.5744364e+01
+   3.8550000e+01   1.3285380e+01   3.5750000e+01
+   3.8550000e+01   1.3351380e+01   3.5760339e+01
+   3.8550000e+01   1.3413512e+01   3.5768570e+01
+   3.8550000e+01   1.3485198e+01   3.5776364e+01
+   3.8550000e+01   1.3539636e+01   3.5778083e+01
+   3.8550000e+01   1.3586083e+01   3.5781620e+01
+   3.8550000e+01   1.3649860e+01   3.5788785e+01
+   3.8550000e+01   1.3724041e+01   3.5795174e+01
+   3.8550000e+01   1.3795636e+01   3.5799347e+01
+   3.8550000e+01   1.3896884e+01   3.5810504e+01
+   3.8550000e+01   1.4007802e+01   3.5819636e+01
+   3.8550000e+01   1.4119207e+01   3.5823149e+01
+   3.8550000e+01   1.4275008e+01   3.5831579e+01
+   3.8550000e+01   1.4495909e+01   3.5833537e+01
+   3.8550000e+01   1.4732562e+01   3.5837397e+01
+   3.8550000e+01   1.4997446e+01   3.5833347e+01
+   3.8550000e+01   1.5706603e+01   3.5837281e+01
+   3.8550000e+01   1.6613545e+01   3.5844116e+01
+   3.8550000e+01   1.7261298e+01   3.5850289e+01
+   3.8550000e+01   1.8017446e+01   3.5853281e+01
+   3.8550000e+01   1.8879421e+01   3.5867727e+01
+   3.8550000e+01   1.9534612e+01   3.5871678e+01
+   3.8550000e+01   1.9774289e+01   3.5868719e+01
+   3.8550000e+01   1.9845992e+01   3.5868760e+01
+   3.8550000e+01   1.9857645e+01   3.5869248e+01
+   3.8550000e+01   1.9858744e+01   3.5869810e+01
+   3.8550000e+01   1.9851843e+01   3.5868702e+01
+   3.8550000e+01   1.9795959e+01   3.5873008e+01
+   3.8600000e+01   2.5103554e+00   3.4896107e+01
+   3.8600000e+01   2.5061901e+00   3.4902207e+01
+   3.8600000e+01   2.5121488e+00   3.4907306e+01
+   3.8600000e+01   2.5413554e+00   3.4914521e+01
+   3.8600000e+01   2.5794959e+00   3.4919405e+01
+   3.8600000e+01   2.6451405e+00   3.4928736e+01
+   3.8600000e+01   2.7416281e+00   3.4940488e+01
+   3.8600000e+01   2.8990331e+00   3.4952802e+01
+   3.8600000e+01   3.0880496e+00   3.4961322e+01
+   3.8600000e+01   3.3536529e+00   3.4973281e+01
+   3.8600000e+01   3.5827603e+00   3.4972736e+01
+   3.8600000e+01   3.8425455e+00   3.4984074e+01
+   3.8600000e+01   4.3142231e+00   3.5036645e+01
+   3.8600000e+01   5.2460165e+00   3.5170777e+01
+   3.8600000e+01   6.6648926e+00   3.5382711e+01
+   3.8600000e+01   8.2569008e+00   3.5621149e+01
+   3.8600000e+01   9.2870413e+00   3.5722876e+01
+   3.8600000e+01   9.5328760e+00   3.5630785e+01
+   3.8600000e+01   9.9026364e+00   3.5537066e+01
+   3.8600000e+01   1.0298083e+01   3.5480702e+01
+   3.8600000e+01   1.0770826e+01   3.5489091e+01
+   3.8600000e+01   1.1255678e+01   3.5531455e+01
+   3.8600000e+01   1.1602421e+01   3.5566000e+01
+   3.8600000e+01   1.1914041e+01   3.5601397e+01
+   3.8600000e+01   1.2147298e+01   3.5626901e+01
+   3.8600000e+01   1.2343058e+01   3.5648785e+01
+   3.8600000e+01   1.2494471e+01   3.5664835e+01
+   3.8600000e+01   1.2597438e+01   3.5676273e+01
+   3.8600000e+01   1.2688149e+01   3.5686380e+01
+   3.8600000e+01   1.2785116e+01   3.5697636e+01
+   3.8600000e+01   1.2848306e+01   3.5705074e+01
+   3.8600000e+01   1.2914322e+01   3.5711992e+01
+   3.8600000e+01   1.3001628e+01   3.5721826e+01
+   3.8600000e+01   1.3051289e+01   3.5725025e+01
+   3.8600000e+01   1.3089132e+01   3.5727711e+01
+   3.8600000e+01   1.3142140e+01   3.5735612e+01
+   3.8600000e+01   1.3179091e+01   3.5738893e+01
+   3.8600000e+01   1.3225289e+01   3.5744364e+01
+   3.8600000e+01   1.3285380e+01   3.5750000e+01
+   3.8600000e+01   1.3351380e+01   3.5760339e+01
+   3.8600000e+01   1.3413512e+01   3.5768570e+01
+   3.8600000e+01   1.3485198e+01   3.5776364e+01
+   3.8600000e+01   1.3539636e+01   3.5778083e+01
+   3.8600000e+01   1.3586083e+01   3.5781620e+01
+   3.8600000e+01   1.3649860e+01   3.5788785e+01
+   3.8600000e+01   1.3724041e+01   3.5795174e+01
+   3.8600000e+01   1.3795636e+01   3.5799347e+01
+   3.8600000e+01   1.3896884e+01   3.5810504e+01
+   3.8600000e+01   1.4007802e+01   3.5819636e+01
+   3.8600000e+01   1.4119207e+01   3.5823149e+01
+   3.8600000e+01   1.4275008e+01   3.5831579e+01
+   3.8600000e+01   1.4495909e+01   3.5833537e+01
+   3.8600000e+01   1.4732562e+01   3.5837397e+01
+   3.8600000e+01   1.4997446e+01   3.5833347e+01
+   3.8600000e+01   1.5706603e+01   3.5837281e+01
+   3.8600000e+01   1.6613545e+01   3.5844116e+01
+   3.8600000e+01   1.7261298e+01   3.5850289e+01
+   3.8600000e+01   1.8017446e+01   3.5853281e+01
+   3.8600000e+01   1.8879421e+01   3.5867727e+01
+   3.8600000e+01   1.9534612e+01   3.5871678e+01
+   3.8600000e+01   1.9774289e+01   3.5868719e+01
+   3.8600000e+01   1.9845992e+01   3.5868760e+01
+   3.8600000e+01   1.9857645e+01   3.5869248e+01
+   3.8600000e+01   1.9858744e+01   3.5869810e+01
+   3.8600000e+01   1.9851843e+01   3.5868702e+01
+   3.8600000e+01   1.9795959e+01   3.5873008e+01
+   3.8650000e+01   2.5103554e+00   3.4896107e+01
+   3.8650000e+01   2.5061901e+00   3.4902207e+01
+   3.8650000e+01   2.5121488e+00   3.4907306e+01
+   3.8650000e+01   2.5413554e+00   3.4914521e+01
+   3.8650000e+01   2.5794959e+00   3.4919405e+01
+   3.8650000e+01   2.6451405e+00   3.4928736e+01
+   3.8650000e+01   2.7416281e+00   3.4940488e+01
+   3.8650000e+01   2.8990331e+00   3.4952802e+01
+   3.8650000e+01   3.0880496e+00   3.4961322e+01
+   3.8650000e+01   3.3536529e+00   3.4973281e+01
+   3.8650000e+01   3.5827603e+00   3.4972736e+01
+   3.8650000e+01   3.8425455e+00   3.4984074e+01
+   3.8650000e+01   4.3142231e+00   3.5036645e+01
+   3.8650000e+01   5.2460165e+00   3.5170777e+01
+   3.8650000e+01   6.6648926e+00   3.5382711e+01
+   3.8650000e+01   8.2569008e+00   3.5621149e+01
+   3.8650000e+01   9.2870413e+00   3.5722876e+01
+   3.8650000e+01   9.5328760e+00   3.5630785e+01
+   3.8650000e+01   9.9026364e+00   3.5537066e+01
+   3.8650000e+01   1.0298083e+01   3.5480702e+01
+   3.8650000e+01   1.0770826e+01   3.5489091e+01
+   3.8650000e+01   1.1255678e+01   3.5531455e+01
+   3.8650000e+01   1.1602421e+01   3.5566000e+01
+   3.8650000e+01   1.1914041e+01   3.5601397e+01
+   3.8650000e+01   1.2147298e+01   3.5626901e+01
+   3.8650000e+01   1.2343058e+01   3.5648785e+01
+   3.8650000e+01   1.2494471e+01   3.5664835e+01
+   3.8650000e+01   1.2597438e+01   3.5676273e+01
+   3.8650000e+01   1.2688149e+01   3.5686380e+01
+   3.8650000e+01   1.2785116e+01   3.5697636e+01
+   3.8650000e+01   1.2848306e+01   3.5705074e+01
+   3.8650000e+01   1.2914322e+01   3.5711992e+01
+   3.8650000e+01   1.3001628e+01   3.5721826e+01
+   3.8650000e+01   1.3051289e+01   3.5725025e+01
+   3.8650000e+01   1.3089132e+01   3.5727711e+01
+   3.8650000e+01   1.3142140e+01   3.5735612e+01
+   3.8650000e+01   1.3179091e+01   3.5738893e+01
+   3.8650000e+01   1.3225289e+01   3.5744364e+01
+   3.8650000e+01   1.3285380e+01   3.5750000e+01
+   3.8650000e+01   1.3351380e+01   3.5760339e+01
+   3.8650000e+01   1.3413512e+01   3.5768570e+01
+   3.8650000e+01   1.3485198e+01   3.5776364e+01
+   3.8650000e+01   1.3539636e+01   3.5778083e+01
+   3.8650000e+01   1.3586083e+01   3.5781620e+01
+   3.8650000e+01   1.3649860e+01   3.5788785e+01
+   3.8650000e+01   1.3724041e+01   3.5795174e+01
+   3.8650000e+01   1.3795636e+01   3.5799347e+01
+   3.8650000e+01   1.3896884e+01   3.5810504e+01
+   3.8650000e+01   1.4007802e+01   3.5819636e+01
+   3.8650000e+01   1.4119207e+01   3.5823149e+01
+   3.8650000e+01   1.4275008e+01   3.5831579e+01
+   3.8650000e+01   1.4495909e+01   3.5833537e+01
+   3.8650000e+01   1.4732562e+01   3.5837397e+01
+   3.8650000e+01   1.4997446e+01   3.5833347e+01
+   3.8650000e+01   1.5706603e+01   3.5837281e+01
+   3.8650000e+01   1.6613545e+01   3.5844116e+01
+   3.8650000e+01   1.7261298e+01   3.5850289e+01
+   3.8650000e+01   1.8017446e+01   3.5853281e+01
+   3.8650000e+01   1.8879421e+01   3.5867727e+01
+   3.8650000e+01   1.9534612e+01   3.5871678e+01
+   3.8650000e+01   1.9774289e+01   3.5868719e+01
+   3.8650000e+01   1.9845992e+01   3.5868760e+01
+   3.8650000e+01   1.9857645e+01   3.5869248e+01
+   3.8650000e+01   1.9858744e+01   3.5869810e+01
+   3.8650000e+01   1.9851843e+01   3.5868702e+01
+   3.8650000e+01   1.9795959e+01   3.5873008e+01
+   3.8700000e+01   2.5103554e+00   3.4896107e+01
+   3.8700000e+01   2.5061901e+00   3.4902207e+01
+   3.8700000e+01   2.5121488e+00   3.4907306e+01
+   3.8700000e+01   2.5413554e+00   3.4914521e+01
+   3.8700000e+01   2.5794959e+00   3.4919405e+01
+   3.8700000e+01   2.6451405e+00   3.4928736e+01
+   3.8700000e+01   2.7416281e+00   3.4940488e+01
+   3.8700000e+01   2.8990331e+00   3.4952802e+01
+   3.8700000e+01   3.0880496e+00   3.4961322e+01
+   3.8700000e+01   3.3536529e+00   3.4973281e+01
+   3.8700000e+01   3.5827603e+00   3.4972736e+01
+   3.8700000e+01   3.8425455e+00   3.4984074e+01
+   3.8700000e+01   4.3142231e+00   3.5036645e+01
+   3.8700000e+01   5.2460165e+00   3.5170777e+01
+   3.8700000e+01   6.6648926e+00   3.5382711e+01
+   3.8700000e+01   8.2569008e+00   3.5621149e+01
+   3.8700000e+01   9.2870413e+00   3.5722876e+01
+   3.8700000e+01   9.5328760e+00   3.5630785e+01
+   3.8700000e+01   9.9026364e+00   3.5537066e+01
+   3.8700000e+01   1.0298083e+01   3.5480702e+01
+   3.8700000e+01   1.0770826e+01   3.5489091e+01
+   3.8700000e+01   1.1255678e+01   3.5531455e+01
+   3.8700000e+01   1.1602421e+01   3.5566000e+01
+   3.8700000e+01   1.1914041e+01   3.5601397e+01
+   3.8700000e+01   1.2147298e+01   3.5626901e+01
+   3.8700000e+01   1.2343058e+01   3.5648785e+01
+   3.8700000e+01   1.2494471e+01   3.5664835e+01
+   3.8700000e+01   1.2597438e+01   3.5676273e+01
+   3.8700000e+01   1.2688149e+01   3.5686380e+01
+   3.8700000e+01   1.2785116e+01   3.5697636e+01
+   3.8700000e+01   1.2848306e+01   3.5705074e+01
+   3.8700000e+01   1.2914322e+01   3.5711992e+01
+   3.8700000e+01   1.3001628e+01   3.5721826e+01
+   3.8700000e+01   1.3051289e+01   3.5725025e+01
+   3.8700000e+01   1.3089132e+01   3.5727711e+01
+   3.8700000e+01   1.3142140e+01   3.5735612e+01
+   3.8700000e+01   1.3179091e+01   3.5738893e+01
+   3.8700000e+01   1.3225289e+01   3.5744364e+01
+   3.8700000e+01   1.3285380e+01   3.5750000e+01
+   3.8700000e+01   1.3351380e+01   3.5760339e+01
+   3.8700000e+01   1.3413512e+01   3.5768570e+01
+   3.8700000e+01   1.3485198e+01   3.5776364e+01
+   3.8700000e+01   1.3539636e+01   3.5778083e+01
+   3.8700000e+01   1.3586083e+01   3.5781620e+01
+   3.8700000e+01   1.3649860e+01   3.5788785e+01
+   3.8700000e+01   1.3724041e+01   3.5795174e+01
+   3.8700000e+01   1.3795636e+01   3.5799347e+01
+   3.8700000e+01   1.3896884e+01   3.5810504e+01
+   3.8700000e+01   1.4007802e+01   3.5819636e+01
+   3.8700000e+01   1.4119207e+01   3.5823149e+01
+   3.8700000e+01   1.4275008e+01   3.5831579e+01
+   3.8700000e+01   1.4495909e+01   3.5833537e+01
+   3.8700000e+01   1.4732562e+01   3.5837397e+01
+   3.8700000e+01   1.4997446e+01   3.5833347e+01
+   3.8700000e+01   1.5706603e+01   3.5837281e+01
+   3.8700000e+01   1.6613545e+01   3.5844116e+01
+   3.8700000e+01   1.7261298e+01   3.5850289e+01
+   3.8700000e+01   1.8017446e+01   3.5853281e+01
+   3.8700000e+01   1.8879421e+01   3.5867727e+01
+   3.8700000e+01   1.9534612e+01   3.5871678e+01
+   3.8700000e+01   1.9774289e+01   3.5868719e+01
+   3.8700000e+01   1.9845992e+01   3.5868760e+01
+   3.8700000e+01   1.9857645e+01   3.5869248e+01
+   3.8700000e+01   1.9858744e+01   3.5869810e+01
+   3.8700000e+01   1.9851843e+01   3.5868702e+01
+   3.8700000e+01   1.9795959e+01   3.5873008e+01
+   3.8750000e+01   2.5103554e+00   3.4896107e+01
+   3.8750000e+01   2.5061901e+00   3.4902207e+01
+   3.8750000e+01   2.5121488e+00   3.4907306e+01
+   3.8750000e+01   2.5413554e+00   3.4914521e+01
+   3.8750000e+01   2.5794959e+00   3.4919405e+01
+   3.8750000e+01   2.6451405e+00   3.4928736e+01
+   3.8750000e+01   2.7416281e+00   3.4940488e+01
+   3.8750000e+01   2.8990331e+00   3.4952802e+01
+   3.8750000e+01   3.0880496e+00   3.4961322e+01
+   3.8750000e+01   3.3536529e+00   3.4973281e+01
+   3.8750000e+01   3.5827603e+00   3.4972736e+01
+   3.8750000e+01   3.8425455e+00   3.4984074e+01
+   3.8750000e+01   4.3142231e+00   3.5036645e+01
+   3.8750000e+01   5.2460165e+00   3.5170777e+01
+   3.8750000e+01   6.6648926e+00   3.5382711e+01
+   3.8750000e+01   8.2569008e+00   3.5621149e+01
+   3.8750000e+01   9.2870413e+00   3.5722876e+01
+   3.8750000e+01   9.5328760e+00   3.5630785e+01
+   3.8750000e+01   9.9026364e+00   3.5537066e+01
+   3.8750000e+01   1.0298083e+01   3.5480702e+01
+   3.8750000e+01   1.0770826e+01   3.5489091e+01
+   3.8750000e+01   1.1255678e+01   3.5531455e+01
+   3.8750000e+01   1.1602421e+01   3.5566000e+01
+   3.8750000e+01   1.1914041e+01   3.5601397e+01
+   3.8750000e+01   1.2147298e+01   3.5626901e+01
+   3.8750000e+01   1.2343058e+01   3.5648785e+01
+   3.8750000e+01   1.2494471e+01   3.5664835e+01
+   3.8750000e+01   1.2597438e+01   3.5676273e+01
+   3.8750000e+01   1.2688149e+01   3.5686380e+01
+   3.8750000e+01   1.2785116e+01   3.5697636e+01
+   3.8750000e+01   1.2848306e+01   3.5705074e+01
+   3.8750000e+01   1.2914322e+01   3.5711992e+01
+   3.8750000e+01   1.3001628e+01   3.5721826e+01
+   3.8750000e+01   1.3051289e+01   3.5725025e+01
+   3.8750000e+01   1.3089132e+01   3.5727711e+01
+   3.8750000e+01   1.3142140e+01   3.5735612e+01
+   3.8750000e+01   1.3179091e+01   3.5738893e+01
+   3.8750000e+01   1.3225289e+01   3.5744364e+01
+   3.8750000e+01   1.3285380e+01   3.5750000e+01
+   3.8750000e+01   1.3351380e+01   3.5760339e+01
+   3.8750000e+01   1.3413512e+01   3.5768570e+01
+   3.8750000e+01   1.3485198e+01   3.5776364e+01
+   3.8750000e+01   1.3539636e+01   3.5778083e+01
+   3.8750000e+01   1.3586083e+01   3.5781620e+01
+   3.8750000e+01   1.3649860e+01   3.5788785e+01
+   3.8750000e+01   1.3724041e+01   3.5795174e+01
+   3.8750000e+01   1.3795636e+01   3.5799347e+01
+   3.8750000e+01   1.3896884e+01   3.5810504e+01
+   3.8750000e+01   1.4007802e+01   3.5819636e+01
+   3.8750000e+01   1.4119207e+01   3.5823149e+01
+   3.8750000e+01   1.4275008e+01   3.5831579e+01
+   3.8750000e+01   1.4495909e+01   3.5833537e+01
+   3.8750000e+01   1.4732562e+01   3.5837397e+01
+   3.8750000e+01   1.4997446e+01   3.5833347e+01
+   3.8750000e+01   1.5706603e+01   3.5837281e+01
+   3.8750000e+01   1.6613545e+01   3.5844116e+01
+   3.8750000e+01   1.7261298e+01   3.5850289e+01
+   3.8750000e+01   1.8017446e+01   3.5853281e+01
+   3.8750000e+01   1.8879421e+01   3.5867727e+01
+   3.8750000e+01   1.9534612e+01   3.5871678e+01
+   3.8750000e+01   1.9774289e+01   3.5868719e+01
+   3.8750000e+01   1.9845992e+01   3.5868760e+01
+   3.8750000e+01   1.9857645e+01   3.5869248e+01
+   3.8750000e+01   1.9858744e+01   3.5869810e+01
+   3.8750000e+01   1.9851843e+01   3.5868702e+01
+   3.8750000e+01   1.9795959e+01   3.5873008e+01
+   3.8800000e+01   2.5103554e+00   3.4896107e+01
+   3.8800000e+01   2.5061901e+00   3.4902207e+01
+   3.8800000e+01   2.5121488e+00   3.4907306e+01
+   3.8800000e+01   2.5413554e+00   3.4914521e+01
+   3.8800000e+01   2.5794959e+00   3.4919405e+01
+   3.8800000e+01   2.6451405e+00   3.4928736e+01
+   3.8800000e+01   2.7416281e+00   3.4940488e+01
+   3.8800000e+01   2.8990331e+00   3.4952802e+01
+   3.8800000e+01   3.0880496e+00   3.4961322e+01
+   3.8800000e+01   3.3536529e+00   3.4973281e+01
+   3.8800000e+01   3.5827603e+00   3.4972736e+01
+   3.8800000e+01   3.8425455e+00   3.4984074e+01
+   3.8800000e+01   4.3142231e+00   3.5036645e+01
+   3.8800000e+01   5.2460165e+00   3.5170777e+01
+   3.8800000e+01   6.6648926e+00   3.5382711e+01
+   3.8800000e+01   8.2569008e+00   3.5621149e+01
+   3.8800000e+01   9.2870413e+00   3.5722876e+01
+   3.8800000e+01   9.5328760e+00   3.5630785e+01
+   3.8800000e+01   9.9026364e+00   3.5537066e+01
+   3.8800000e+01   1.0298083e+01   3.5480702e+01
+   3.8800000e+01   1.0770826e+01   3.5489091e+01
+   3.8800000e+01   1.1255678e+01   3.5531455e+01
+   3.8800000e+01   1.1602421e+01   3.5566000e+01
+   3.8800000e+01   1.1914041e+01   3.5601397e+01
+   3.8800000e+01   1.2147298e+01   3.5626901e+01
+   3.8800000e+01   1.2343058e+01   3.5648785e+01
+   3.8800000e+01   1.2494471e+01   3.5664835e+01
+   3.8800000e+01   1.2597438e+01   3.5676273e+01
+   3.8800000e+01   1.2688149e+01   3.5686380e+01
+   3.8800000e+01   1.2785116e+01   3.5697636e+01
+   3.8800000e+01   1.2848306e+01   3.5705074e+01
+   3.8800000e+01   1.2914322e+01   3.5711992e+01
+   3.8800000e+01   1.3001628e+01   3.5721826e+01
+   3.8800000e+01   1.3051289e+01   3.5725025e+01
+   3.8800000e+01   1.3089132e+01   3.5727711e+01
+   3.8800000e+01   1.3142140e+01   3.5735612e+01
+   3.8800000e+01   1.3179091e+01   3.5738893e+01
+   3.8800000e+01   1.3225289e+01   3.5744364e+01
+   3.8800000e+01   1.3285380e+01   3.5750000e+01
+   3.8800000e+01   1.3351380e+01   3.5760339e+01
+   3.8800000e+01   1.3413512e+01   3.5768570e+01
+   3.8800000e+01   1.3485198e+01   3.5776364e+01
+   3.8800000e+01   1.3539636e+01   3.5778083e+01
+   3.8800000e+01   1.3586083e+01   3.5781620e+01
+   3.8800000e+01   1.3649860e+01   3.5788785e+01
+   3.8800000e+01   1.3724041e+01   3.5795174e+01
+   3.8800000e+01   1.3795636e+01   3.5799347e+01
+   3.8800000e+01   1.3896884e+01   3.5810504e+01
+   3.8800000e+01   1.4007802e+01   3.5819636e+01
+   3.8800000e+01   1.4119207e+01   3.5823149e+01
+   3.8800000e+01   1.4275008e+01   3.5831579e+01
+   3.8800000e+01   1.4495909e+01   3.5833537e+01
+   3.8800000e+01   1.4732562e+01   3.5837397e+01
+   3.8800000e+01   1.4997446e+01   3.5833347e+01
+   3.8800000e+01   1.5706603e+01   3.5837281e+01
+   3.8800000e+01   1.6613545e+01   3.5844116e+01
+   3.8800000e+01   1.7261298e+01   3.5850289e+01
+   3.8800000e+01   1.8017446e+01   3.5853281e+01
+   3.8800000e+01   1.8879421e+01   3.5867727e+01
+   3.8800000e+01   1.9534612e+01   3.5871678e+01
+   3.8800000e+01   1.9774289e+01   3.5868719e+01
+   3.8800000e+01   1.9845992e+01   3.5868760e+01
+   3.8800000e+01   1.9857645e+01   3.5869248e+01
+   3.8800000e+01   1.9858744e+01   3.5869810e+01
+   3.8800000e+01   1.9851843e+01   3.5868702e+01
+   3.8800000e+01   1.9795959e+01   3.5873008e+01
+   3.8850000e+01   2.5103554e+00   3.4896107e+01
+   3.8850000e+01   2.5061901e+00   3.4902207e+01
+   3.8850000e+01   2.5121488e+00   3.4907306e+01
+   3.8850000e+01   2.5413554e+00   3.4914521e+01
+   3.8850000e+01   2.5794959e+00   3.4919405e+01
+   3.8850000e+01   2.6451405e+00   3.4928736e+01
+   3.8850000e+01   2.7416281e+00   3.4940488e+01
+   3.8850000e+01   2.8990331e+00   3.4952802e+01
+   3.8850000e+01   3.0880496e+00   3.4961322e+01
+   3.8850000e+01   3.3536529e+00   3.4973281e+01
+   3.8850000e+01   3.5827603e+00   3.4972736e+01
+   3.8850000e+01   3.8425455e+00   3.4984074e+01
+   3.8850000e+01   4.3142231e+00   3.5036645e+01
+   3.8850000e+01   5.2460165e+00   3.5170777e+01
+   3.8850000e+01   6.6648926e+00   3.5382711e+01
+   3.8850000e+01   8.2569008e+00   3.5621149e+01
+   3.8850000e+01   9.2870413e+00   3.5722876e+01
+   3.8850000e+01   9.5328760e+00   3.5630785e+01
+   3.8850000e+01   9.9026364e+00   3.5537066e+01
+   3.8850000e+01   1.0298083e+01   3.5480702e+01
+   3.8850000e+01   1.0770826e+01   3.5489091e+01
+   3.8850000e+01   1.1255678e+01   3.5531455e+01
+   3.8850000e+01   1.1602421e+01   3.5566000e+01
+   3.8850000e+01   1.1914041e+01   3.5601397e+01
+   3.8850000e+01   1.2147298e+01   3.5626901e+01
+   3.8850000e+01   1.2343058e+01   3.5648785e+01
+   3.8850000e+01   1.2494471e+01   3.5664835e+01
+   3.8850000e+01   1.2597438e+01   3.5676273e+01
+   3.8850000e+01   1.2688149e+01   3.5686380e+01
+   3.8850000e+01   1.2785116e+01   3.5697636e+01
+   3.8850000e+01   1.2848306e+01   3.5705074e+01
+   3.8850000e+01   1.2914322e+01   3.5711992e+01
+   3.8850000e+01   1.3001628e+01   3.5721826e+01
+   3.8850000e+01   1.3051289e+01   3.5725025e+01
+   3.8850000e+01   1.3089132e+01   3.5727711e+01
+   3.8850000e+01   1.3142140e+01   3.5735612e+01
+   3.8850000e+01   1.3179091e+01   3.5738893e+01
+   3.8850000e+01   1.3225289e+01   3.5744364e+01
+   3.8850000e+01   1.3285380e+01   3.5750000e+01
+   3.8850000e+01   1.3351380e+01   3.5760339e+01
+   3.8850000e+01   1.3413512e+01   3.5768570e+01
+   3.8850000e+01   1.3485198e+01   3.5776364e+01
+   3.8850000e+01   1.3539636e+01   3.5778083e+01
+   3.8850000e+01   1.3586083e+01   3.5781620e+01
+   3.8850000e+01   1.3649860e+01   3.5788785e+01
+   3.8850000e+01   1.3724041e+01   3.5795174e+01
+   3.8850000e+01   1.3795636e+01   3.5799347e+01
+   3.8850000e+01   1.3896884e+01   3.5810504e+01
+   3.8850000e+01   1.4007802e+01   3.5819636e+01
+   3.8850000e+01   1.4119207e+01   3.5823149e+01
+   3.8850000e+01   1.4275008e+01   3.5831579e+01
+   3.8850000e+01   1.4495909e+01   3.5833537e+01
+   3.8850000e+01   1.4732562e+01   3.5837397e+01
+   3.8850000e+01   1.4997446e+01   3.5833347e+01
+   3.8850000e+01   1.5706603e+01   3.5837281e+01
+   3.8850000e+01   1.6613545e+01   3.5844116e+01
+   3.8850000e+01   1.7261298e+01   3.5850289e+01
+   3.8850000e+01   1.8017446e+01   3.5853281e+01
+   3.8850000e+01   1.8879421e+01   3.5867727e+01
+   3.8850000e+01   1.9534612e+01   3.5871678e+01
+   3.8850000e+01   1.9774289e+01   3.5868719e+01
+   3.8850000e+01   1.9845992e+01   3.5868760e+01
+   3.8850000e+01   1.9857645e+01   3.5869248e+01
+   3.8850000e+01   1.9858744e+01   3.5869810e+01
+   3.8850000e+01   1.9851843e+01   3.5868702e+01
+   3.8850000e+01   1.9795959e+01   3.5873008e+01
+   3.8900000e+01   2.5103554e+00   3.4896107e+01
+   3.8900000e+01   2.5061901e+00   3.4902207e+01
+   3.8900000e+01   2.5121488e+00   3.4907306e+01
+   3.8900000e+01   2.5413554e+00   3.4914521e+01
+   3.8900000e+01   2.5794959e+00   3.4919405e+01
+   3.8900000e+01   2.6451405e+00   3.4928736e+01
+   3.8900000e+01   2.7416281e+00   3.4940488e+01
+   3.8900000e+01   2.8990331e+00   3.4952802e+01
+   3.8900000e+01   3.0880496e+00   3.4961322e+01
+   3.8900000e+01   3.3536529e+00   3.4973281e+01
+   3.8900000e+01   3.5827603e+00   3.4972736e+01
+   3.8900000e+01   3.8425455e+00   3.4984074e+01
+   3.8900000e+01   4.3142231e+00   3.5036645e+01
+   3.8900000e+01   5.2460165e+00   3.5170777e+01
+   3.8900000e+01   6.6648926e+00   3.5382711e+01
+   3.8900000e+01   8.2569008e+00   3.5621149e+01
+   3.8900000e+01   9.2870413e+00   3.5722876e+01
+   3.8900000e+01   9.5328760e+00   3.5630785e+01
+   3.8900000e+01   9.9026364e+00   3.5537066e+01
+   3.8900000e+01   1.0298083e+01   3.5480702e+01
+   3.8900000e+01   1.0770826e+01   3.5489091e+01
+   3.8900000e+01   1.1255678e+01   3.5531455e+01
+   3.8900000e+01   1.1602421e+01   3.5566000e+01
+   3.8900000e+01   1.1914041e+01   3.5601397e+01
+   3.8900000e+01   1.2147298e+01   3.5626901e+01
+   3.8900000e+01   1.2343058e+01   3.5648785e+01
+   3.8900000e+01   1.2494471e+01   3.5664835e+01
+   3.8900000e+01   1.2597438e+01   3.5676273e+01
+   3.8900000e+01   1.2688149e+01   3.5686380e+01
+   3.8900000e+01   1.2785116e+01   3.5697636e+01
+   3.8900000e+01   1.2848306e+01   3.5705074e+01
+   3.8900000e+01   1.2914322e+01   3.5711992e+01
+   3.8900000e+01   1.3001628e+01   3.5721826e+01
+   3.8900000e+01   1.3051289e+01   3.5725025e+01
+   3.8900000e+01   1.3089132e+01   3.5727711e+01
+   3.8900000e+01   1.3142140e+01   3.5735612e+01
+   3.8900000e+01   1.3179091e+01   3.5738893e+01
+   3.8900000e+01   1.3225289e+01   3.5744364e+01
+   3.8900000e+01   1.3285380e+01   3.5750000e+01
+   3.8900000e+01   1.3351380e+01   3.5760339e+01
+   3.8900000e+01   1.3413512e+01   3.5768570e+01
+   3.8900000e+01   1.3485198e+01   3.5776364e+01
+   3.8900000e+01   1.3539636e+01   3.5778083e+01
+   3.8900000e+01   1.3586083e+01   3.5781620e+01
+   3.8900000e+01   1.3649860e+01   3.5788785e+01
+   3.8900000e+01   1.3724041e+01   3.5795174e+01
+   3.8900000e+01   1.3795636e+01   3.5799347e+01
+   3.8900000e+01   1.3896884e+01   3.5810504e+01
+   3.8900000e+01   1.4007802e+01   3.5819636e+01
+   3.8900000e+01   1.4119207e+01   3.5823149e+01
+   3.8900000e+01   1.4275008e+01   3.5831579e+01
+   3.8900000e+01   1.4495909e+01   3.5833537e+01
+   3.8900000e+01   1.4732562e+01   3.5837397e+01
+   3.8900000e+01   1.4997446e+01   3.5833347e+01
+   3.8900000e+01   1.5706603e+01   3.5837281e+01
+   3.8900000e+01   1.6613545e+01   3.5844116e+01
+   3.8900000e+01   1.7261298e+01   3.5850289e+01
+   3.8900000e+01   1.8017446e+01   3.5853281e+01
+   3.8900000e+01   1.8879421e+01   3.5867727e+01
+   3.8900000e+01   1.9534612e+01   3.5871678e+01
+   3.8900000e+01   1.9774289e+01   3.5868719e+01
+   3.8900000e+01   1.9845992e+01   3.5868760e+01
+   3.8900000e+01   1.9857645e+01   3.5869248e+01
+   3.8900000e+01   1.9858744e+01   3.5869810e+01
+   3.8900000e+01   1.9851843e+01   3.5868702e+01
+   3.8900000e+01   1.9795959e+01   3.5873008e+01
+   3.8950000e+01   2.5103554e+00   3.4896107e+01
+   3.8950000e+01   2.5061901e+00   3.4902207e+01
+   3.8950000e+01   2.5121488e+00   3.4907306e+01
+   3.8950000e+01   2.5413554e+00   3.4914521e+01
+   3.8950000e+01   2.5794959e+00   3.4919405e+01
+   3.8950000e+01   2.6451405e+00   3.4928736e+01
+   3.8950000e+01   2.7416281e+00   3.4940488e+01
+   3.8950000e+01   2.8990331e+00   3.4952802e+01
+   3.8950000e+01   3.0880496e+00   3.4961322e+01
+   3.8950000e+01   3.3536529e+00   3.4973281e+01
+   3.8950000e+01   3.5827603e+00   3.4972736e+01
+   3.8950000e+01   3.8425455e+00   3.4984074e+01
+   3.8950000e+01   4.3142231e+00   3.5036645e+01
+   3.8950000e+01   5.2460165e+00   3.5170777e+01
+   3.8950000e+01   6.6648926e+00   3.5382711e+01
+   3.8950000e+01   8.2569008e+00   3.5621149e+01
+   3.8950000e+01   9.2870413e+00   3.5722876e+01
+   3.8950000e+01   9.5328760e+00   3.5630785e+01
+   3.8950000e+01   9.9026364e+00   3.5537066e+01
+   3.8950000e+01   1.0298083e+01   3.5480702e+01
+   3.8950000e+01   1.0770826e+01   3.5489091e+01
+   3.8950000e+01   1.1255678e+01   3.5531455e+01
+   3.8950000e+01   1.1602421e+01   3.5566000e+01
+   3.8950000e+01   1.1914041e+01   3.5601397e+01
+   3.8950000e+01   1.2147298e+01   3.5626901e+01
+   3.8950000e+01   1.2343058e+01   3.5648785e+01
+   3.8950000e+01   1.2494471e+01   3.5664835e+01
+   3.8950000e+01   1.2597438e+01   3.5676273e+01
+   3.8950000e+01   1.2688149e+01   3.5686380e+01
+   3.8950000e+01   1.2785116e+01   3.5697636e+01
+   3.8950000e+01   1.2848306e+01   3.5705074e+01
+   3.8950000e+01   1.2914322e+01   3.5711992e+01
+   3.8950000e+01   1.3001628e+01   3.5721826e+01
+   3.8950000e+01   1.3051289e+01   3.5725025e+01
+   3.8950000e+01   1.3089132e+01   3.5727711e+01
+   3.8950000e+01   1.3142140e+01   3.5735612e+01
+   3.8950000e+01   1.3179091e+01   3.5738893e+01
+   3.8950000e+01   1.3225289e+01   3.5744364e+01
+   3.8950000e+01   1.3285380e+01   3.5750000e+01
+   3.8950000e+01   1.3351380e+01   3.5760339e+01
+   3.8950000e+01   1.3413512e+01   3.5768570e+01
+   3.8950000e+01   1.3485198e+01   3.5776364e+01
+   3.8950000e+01   1.3539636e+01   3.5778083e+01
+   3.8950000e+01   1.3586083e+01   3.5781620e+01
+   3.8950000e+01   1.3649860e+01   3.5788785e+01
+   3.8950000e+01   1.3724041e+01   3.5795174e+01
+   3.8950000e+01   1.3795636e+01   3.5799347e+01
+   3.8950000e+01   1.3896884e+01   3.5810504e+01
+   3.8950000e+01   1.4007802e+01   3.5819636e+01
+   3.8950000e+01   1.4119207e+01   3.5823149e+01
+   3.8950000e+01   1.4275008e+01   3.5831579e+01
+   3.8950000e+01   1.4495909e+01   3.5833537e+01
+   3.8950000e+01   1.4732562e+01   3.5837397e+01
+   3.8950000e+01   1.4997446e+01   3.5833347e+01
+   3.8950000e+01   1.5706603e+01   3.5837281e+01
+   3.8950000e+01   1.6613545e+01   3.5844116e+01
+   3.8950000e+01   1.7261298e+01   3.5850289e+01
+   3.8950000e+01   1.8017446e+01   3.5853281e+01
+   3.8950000e+01   1.8879421e+01   3.5867727e+01
+   3.8950000e+01   1.9534612e+01   3.5871678e+01
+   3.8950000e+01   1.9774289e+01   3.5868719e+01
+   3.8950000e+01   1.9845992e+01   3.5868760e+01
+   3.8950000e+01   1.9857645e+01   3.5869248e+01
+   3.8950000e+01   1.9858744e+01   3.5869810e+01
+   3.8950000e+01   1.9851843e+01   3.5868702e+01
+   3.8950000e+01   1.9795959e+01   3.5873008e+01
+   3.9000000e+01   2.5103554e+00   3.4896107e+01
+   3.9000000e+01   2.5061901e+00   3.4902207e+01
+   3.9000000e+01   2.5121488e+00   3.4907306e+01
+   3.9000000e+01   2.5413554e+00   3.4914521e+01
+   3.9000000e+01   2.5794959e+00   3.4919405e+01
+   3.9000000e+01   2.6451405e+00   3.4928736e+01
+   3.9000000e+01   2.7416281e+00   3.4940488e+01
+   3.9000000e+01   2.8990331e+00   3.4952802e+01
+   3.9000000e+01   3.0880496e+00   3.4961322e+01
+   3.9000000e+01   3.3536529e+00   3.4973281e+01
+   3.9000000e+01   3.5827603e+00   3.4972736e+01
+   3.9000000e+01   3.8425455e+00   3.4984074e+01
+   3.9000000e+01   4.3142231e+00   3.5036645e+01
+   3.9000000e+01   5.2460165e+00   3.5170777e+01
+   3.9000000e+01   6.6648926e+00   3.5382711e+01
+   3.9000000e+01   8.2569008e+00   3.5621149e+01
+   3.9000000e+01   9.2870413e+00   3.5722876e+01
+   3.9000000e+01   9.5328760e+00   3.5630785e+01
+   3.9000000e+01   9.9026364e+00   3.5537066e+01
+   3.9000000e+01   1.0298083e+01   3.5480702e+01
+   3.9000000e+01   1.0770826e+01   3.5489091e+01
+   3.9000000e+01   1.1255678e+01   3.5531455e+01
+   3.9000000e+01   1.1602421e+01   3.5566000e+01
+   3.9000000e+01   1.1914041e+01   3.5601397e+01
+   3.9000000e+01   1.2147298e+01   3.5626901e+01
+   3.9000000e+01   1.2343058e+01   3.5648785e+01
+   3.9000000e+01   1.2494471e+01   3.5664835e+01
+   3.9000000e+01   1.2597438e+01   3.5676273e+01
+   3.9000000e+01   1.2688149e+01   3.5686380e+01
+   3.9000000e+01   1.2785116e+01   3.5697636e+01
+   3.9000000e+01   1.2848306e+01   3.5705074e+01
+   3.9000000e+01   1.2914322e+01   3.5711992e+01
+   3.9000000e+01   1.3001628e+01   3.5721826e+01
+   3.9000000e+01   1.3051289e+01   3.5725025e+01
+   3.9000000e+01   1.3089132e+01   3.5727711e+01
+   3.9000000e+01   1.3142140e+01   3.5735612e+01
+   3.9000000e+01   1.3179091e+01   3.5738893e+01
+   3.9000000e+01   1.3225289e+01   3.5744364e+01
+   3.9000000e+01   1.3285380e+01   3.5750000e+01
+   3.9000000e+01   1.3351380e+01   3.5760339e+01
+   3.9000000e+01   1.3413512e+01   3.5768570e+01
+   3.9000000e+01   1.3485198e+01   3.5776364e+01
+   3.9000000e+01   1.3539636e+01   3.5778083e+01
+   3.9000000e+01   1.3586083e+01   3.5781620e+01
+   3.9000000e+01   1.3649860e+01   3.5788785e+01
+   3.9000000e+01   1.3724041e+01   3.5795174e+01
+   3.9000000e+01   1.3795636e+01   3.5799347e+01
+   3.9000000e+01   1.3896884e+01   3.5810504e+01
+   3.9000000e+01   1.4007802e+01   3.5819636e+01
+   3.9000000e+01   1.4119207e+01   3.5823149e+01
+   3.9000000e+01   1.4275008e+01   3.5831579e+01
+   3.9000000e+01   1.4495909e+01   3.5833537e+01
+   3.9000000e+01   1.4732562e+01   3.5837397e+01
+   3.9000000e+01   1.4997446e+01   3.5833347e+01
+   3.9000000e+01   1.5706603e+01   3.5837281e+01
+   3.9000000e+01   1.6613545e+01   3.5844116e+01
+   3.9000000e+01   1.7261298e+01   3.5850289e+01
+   3.9000000e+01   1.8017446e+01   3.5853281e+01
+   3.9000000e+01   1.8879421e+01   3.5867727e+01
+   3.9000000e+01   1.9534612e+01   3.5871678e+01
+   3.9000000e+01   1.9774289e+01   3.5868719e+01
+   3.9000000e+01   1.9845992e+01   3.5868760e+01
+   3.9000000e+01   1.9857645e+01   3.5869248e+01
+   3.9000000e+01   1.9858744e+01   3.5869810e+01
+   3.9000000e+01   1.9851843e+01   3.5868702e+01
+   3.9000000e+01   1.9795959e+01   3.5873008e+01
+   3.9050000e+01   2.5103554e+00   3.4896107e+01
+   3.9050000e+01   2.5061901e+00   3.4902207e+01
+   3.9050000e+01   2.5121488e+00   3.4907306e+01
+   3.9050000e+01   2.5413554e+00   3.4914521e+01
+   3.9050000e+01   2.5794959e+00   3.4919405e+01
+   3.9050000e+01   2.6451405e+00   3.4928736e+01
+   3.9050000e+01   2.7416281e+00   3.4940488e+01
+   3.9050000e+01   2.8990331e+00   3.4952802e+01
+   3.9050000e+01   3.0880496e+00   3.4961322e+01
+   3.9050000e+01   3.3536529e+00   3.4973281e+01
+   3.9050000e+01   3.5827603e+00   3.4972736e+01
+   3.9050000e+01   3.8425455e+00   3.4984074e+01
+   3.9050000e+01   4.3142231e+00   3.5036645e+01
+   3.9050000e+01   5.2460165e+00   3.5170777e+01
+   3.9050000e+01   6.6648926e+00   3.5382711e+01
+   3.9050000e+01   8.2569008e+00   3.5621149e+01
+   3.9050000e+01   9.2870413e+00   3.5722876e+01
+   3.9050000e+01   9.5328760e+00   3.5630785e+01
+   3.9050000e+01   9.9026364e+00   3.5537066e+01
+   3.9050000e+01   1.0298083e+01   3.5480702e+01
+   3.9050000e+01   1.0770826e+01   3.5489091e+01
+   3.9050000e+01   1.1255678e+01   3.5531455e+01
+   3.9050000e+01   1.1602421e+01   3.5566000e+01
+   3.9050000e+01   1.1914041e+01   3.5601397e+01
+   3.9050000e+01   1.2147298e+01   3.5626901e+01
+   3.9050000e+01   1.2343058e+01   3.5648785e+01
+   3.9050000e+01   1.2494471e+01   3.5664835e+01
+   3.9050000e+01   1.2597438e+01   3.5676273e+01
+   3.9050000e+01   1.2688149e+01   3.5686380e+01
+   3.9050000e+01   1.2785116e+01   3.5697636e+01
+   3.9050000e+01   1.2848306e+01   3.5705074e+01
+   3.9050000e+01   1.2914322e+01   3.5711992e+01
+   3.9050000e+01   1.3001628e+01   3.5721826e+01
+   3.9050000e+01   1.3051289e+01   3.5725025e+01
+   3.9050000e+01   1.3089132e+01   3.5727711e+01
+   3.9050000e+01   1.3142140e+01   3.5735612e+01
+   3.9050000e+01   1.3179091e+01   3.5738893e+01
+   3.9050000e+01   1.3225289e+01   3.5744364e+01
+   3.9050000e+01   1.3285380e+01   3.5750000e+01
+   3.9050000e+01   1.3351380e+01   3.5760339e+01
+   3.9050000e+01   1.3413512e+01   3.5768570e+01
+   3.9050000e+01   1.3485198e+01   3.5776364e+01
+   3.9050000e+01   1.3539636e+01   3.5778083e+01
+   3.9050000e+01   1.3586083e+01   3.5781620e+01
+   3.9050000e+01   1.3649860e+01   3.5788785e+01
+   3.9050000e+01   1.3724041e+01   3.5795174e+01
+   3.9050000e+01   1.3795636e+01   3.5799347e+01
+   3.9050000e+01   1.3896884e+01   3.5810504e+01
+   3.9050000e+01   1.4007802e+01   3.5819636e+01
+   3.9050000e+01   1.4119207e+01   3.5823149e+01
+   3.9050000e+01   1.4275008e+01   3.5831579e+01
+   3.9050000e+01   1.4495909e+01   3.5833537e+01
+   3.9050000e+01   1.4732562e+01   3.5837397e+01
+   3.9050000e+01   1.4997446e+01   3.5833347e+01
+   3.9050000e+01   1.5706603e+01   3.5837281e+01
+   3.9050000e+01   1.6613545e+01   3.5844116e+01
+   3.9050000e+01   1.7261298e+01   3.5850289e+01
+   3.9050000e+01   1.8017446e+01   3.5853281e+01
+   3.9050000e+01   1.8879421e+01   3.5867727e+01
+   3.9050000e+01   1.9534612e+01   3.5871678e+01
+   3.9050000e+01   1.9774289e+01   3.5868719e+01
+   3.9050000e+01   1.9845992e+01   3.5868760e+01
+   3.9050000e+01   1.9857645e+01   3.5869248e+01
+   3.9050000e+01   1.9858744e+01   3.5869810e+01
+   3.9050000e+01   1.9851843e+01   3.5868702e+01
+   3.9050000e+01   1.9795959e+01   3.5873008e+01
+   3.9100000e+01   2.5103554e+00   3.4896107e+01
+   3.9100000e+01   2.5061901e+00   3.4902207e+01
+   3.9100000e+01   2.5121488e+00   3.4907306e+01
+   3.9100000e+01   2.5413554e+00   3.4914521e+01
+   3.9100000e+01   2.5794959e+00   3.4919405e+01
+   3.9100000e+01   2.6451405e+00   3.4928736e+01
+   3.9100000e+01   2.7416281e+00   3.4940488e+01
+   3.9100000e+01   2.8990331e+00   3.4952802e+01
+   3.9100000e+01   3.0880496e+00   3.4961322e+01
+   3.9100000e+01   3.3536529e+00   3.4973281e+01
+   3.9100000e+01   3.5827603e+00   3.4972736e+01
+   3.9100000e+01   3.8425455e+00   3.4984074e+01
+   3.9100000e+01   4.3142231e+00   3.5036645e+01
+   3.9100000e+01   5.2460165e+00   3.5170777e+01
+   3.9100000e+01   6.6648926e+00   3.5382711e+01
+   3.9100000e+01   8.2569008e+00   3.5621149e+01
+   3.9100000e+01   9.2870413e+00   3.5722876e+01
+   3.9100000e+01   9.5328760e+00   3.5630785e+01
+   3.9100000e+01   9.9026364e+00   3.5537066e+01
+   3.9100000e+01   1.0298083e+01   3.5480702e+01
+   3.9100000e+01   1.0770826e+01   3.5489091e+01
+   3.9100000e+01   1.1255678e+01   3.5531455e+01
+   3.9100000e+01   1.1602421e+01   3.5566000e+01
+   3.9100000e+01   1.1914041e+01   3.5601397e+01
+   3.9100000e+01   1.2147298e+01   3.5626901e+01
+   3.9100000e+01   1.2343058e+01   3.5648785e+01
+   3.9100000e+01   1.2494471e+01   3.5664835e+01
+   3.9100000e+01   1.2597438e+01   3.5676273e+01
+   3.9100000e+01   1.2688149e+01   3.5686380e+01
+   3.9100000e+01   1.2785116e+01   3.5697636e+01
+   3.9100000e+01   1.2848306e+01   3.5705074e+01
+   3.9100000e+01   1.2914322e+01   3.5711992e+01
+   3.9100000e+01   1.3001628e+01   3.5721826e+01
+   3.9100000e+01   1.3051289e+01   3.5725025e+01
+   3.9100000e+01   1.3089132e+01   3.5727711e+01
+   3.9100000e+01   1.3142140e+01   3.5735612e+01
+   3.9100000e+01   1.3179091e+01   3.5738893e+01
+   3.9100000e+01   1.3225289e+01   3.5744364e+01
+   3.9100000e+01   1.3285380e+01   3.5750000e+01
+   3.9100000e+01   1.3351380e+01   3.5760339e+01
+   3.9100000e+01   1.3413512e+01   3.5768570e+01
+   3.9100000e+01   1.3485198e+01   3.5776364e+01
+   3.9100000e+01   1.3539636e+01   3.5778083e+01
+   3.9100000e+01   1.3586083e+01   3.5781620e+01
+   3.9100000e+01   1.3649860e+01   3.5788785e+01
+   3.9100000e+01   1.3724041e+01   3.5795174e+01
+   3.9100000e+01   1.3795636e+01   3.5799347e+01
+   3.9100000e+01   1.3896884e+01   3.5810504e+01
+   3.9100000e+01   1.4007802e+01   3.5819636e+01
+   3.9100000e+01   1.4119207e+01   3.5823149e+01
+   3.9100000e+01   1.4275008e+01   3.5831579e+01
+   3.9100000e+01   1.4495909e+01   3.5833537e+01
+   3.9100000e+01   1.4732562e+01   3.5837397e+01
+   3.9100000e+01   1.4997446e+01   3.5833347e+01
+   3.9100000e+01   1.5706603e+01   3.5837281e+01
+   3.9100000e+01   1.6613545e+01   3.5844116e+01
+   3.9100000e+01   1.7261298e+01   3.5850289e+01
+   3.9100000e+01   1.8017446e+01   3.5853281e+01
+   3.9100000e+01   1.8879421e+01   3.5867727e+01
+   3.9100000e+01   1.9534612e+01   3.5871678e+01
+   3.9100000e+01   1.9774289e+01   3.5868719e+01
+   3.9100000e+01   1.9845992e+01   3.5868760e+01
+   3.9100000e+01   1.9857645e+01   3.5869248e+01
+   3.9100000e+01   1.9858744e+01   3.5869810e+01
+   3.9100000e+01   1.9851843e+01   3.5868702e+01
+   3.9100000e+01   1.9795959e+01   3.5873008e+01
+   3.9150000e+01   2.5103554e+00   3.4896107e+01
+   3.9150000e+01   2.5061901e+00   3.4902207e+01
+   3.9150000e+01   2.5121488e+00   3.4907306e+01
+   3.9150000e+01   2.5413554e+00   3.4914521e+01
+   3.9150000e+01   2.5794959e+00   3.4919405e+01
+   3.9150000e+01   2.6451405e+00   3.4928736e+01
+   3.9150000e+01   2.7416281e+00   3.4940488e+01
+   3.9150000e+01   2.8990331e+00   3.4952802e+01
+   3.9150000e+01   3.0880496e+00   3.4961322e+01
+   3.9150000e+01   3.3536529e+00   3.4973281e+01
+   3.9150000e+01   3.5827603e+00   3.4972736e+01
+   3.9150000e+01   3.8425455e+00   3.4984074e+01
+   3.9150000e+01   4.3142231e+00   3.5036645e+01
+   3.9150000e+01   5.2460165e+00   3.5170777e+01
+   3.9150000e+01   6.6648926e+00   3.5382711e+01
+   3.9150000e+01   8.2569008e+00   3.5621149e+01
+   3.9150000e+01   9.2870413e+00   3.5722876e+01
+   3.9150000e+01   9.5328760e+00   3.5630785e+01
+   3.9150000e+01   9.9026364e+00   3.5537066e+01
+   3.9150000e+01   1.0298083e+01   3.5480702e+01
+   3.9150000e+01   1.0770826e+01   3.5489091e+01
+   3.9150000e+01   1.1255678e+01   3.5531455e+01
+   3.9150000e+01   1.1602421e+01   3.5566000e+01
+   3.9150000e+01   1.1914041e+01   3.5601397e+01
+   3.9150000e+01   1.2147298e+01   3.5626901e+01
+   3.9150000e+01   1.2343058e+01   3.5648785e+01
+   3.9150000e+01   1.2494471e+01   3.5664835e+01
+   3.9150000e+01   1.2597438e+01   3.5676273e+01
+   3.9150000e+01   1.2688149e+01   3.5686380e+01
+   3.9150000e+01   1.2785116e+01   3.5697636e+01
+   3.9150000e+01   1.2848306e+01   3.5705074e+01
+   3.9150000e+01   1.2914322e+01   3.5711992e+01
+   3.9150000e+01   1.3001628e+01   3.5721826e+01
+   3.9150000e+01   1.3051289e+01   3.5725025e+01
+   3.9150000e+01   1.3089132e+01   3.5727711e+01
+   3.9150000e+01   1.3142140e+01   3.5735612e+01
+   3.9150000e+01   1.3179091e+01   3.5738893e+01
+   3.9150000e+01   1.3225289e+01   3.5744364e+01
+   3.9150000e+01   1.3285380e+01   3.5750000e+01
+   3.9150000e+01   1.3351380e+01   3.5760339e+01
+   3.9150000e+01   1.3413512e+01   3.5768570e+01
+   3.9150000e+01   1.3485198e+01   3.5776364e+01
+   3.9150000e+01   1.3539636e+01   3.5778083e+01
+   3.9150000e+01   1.3586083e+01   3.5781620e+01
+   3.9150000e+01   1.3649860e+01   3.5788785e+01
+   3.9150000e+01   1.3724041e+01   3.5795174e+01
+   3.9150000e+01   1.3795636e+01   3.5799347e+01
+   3.9150000e+01   1.3896884e+01   3.5810504e+01
+   3.9150000e+01   1.4007802e+01   3.5819636e+01
+   3.9150000e+01   1.4119207e+01   3.5823149e+01
+   3.9150000e+01   1.4275008e+01   3.5831579e+01
+   3.9150000e+01   1.4495909e+01   3.5833537e+01
+   3.9150000e+01   1.4732562e+01   3.5837397e+01
+   3.9150000e+01   1.4997446e+01   3.5833347e+01
+   3.9150000e+01   1.5706603e+01   3.5837281e+01
+   3.9150000e+01   1.6613545e+01   3.5844116e+01
+   3.9150000e+01   1.7261298e+01   3.5850289e+01
+   3.9150000e+01   1.8017446e+01   3.5853281e+01
+   3.9150000e+01   1.8879421e+01   3.5867727e+01
+   3.9150000e+01   1.9534612e+01   3.5871678e+01
+   3.9150000e+01   1.9774289e+01   3.5868719e+01
+   3.9150000e+01   1.9845992e+01   3.5868760e+01
+   3.9150000e+01   1.9857645e+01   3.5869248e+01
+   3.9150000e+01   1.9858744e+01   3.5869810e+01
+   3.9150000e+01   1.9851843e+01   3.5868702e+01
+   3.9150000e+01   1.9795959e+01   3.5873008e+01
+   3.9200000e+01   2.5103554e+00   3.4896107e+01
+   3.9200000e+01   2.5061901e+00   3.4902207e+01
+   3.9200000e+01   2.5121488e+00   3.4907306e+01
+   3.9200000e+01   2.5413554e+00   3.4914521e+01
+   3.9200000e+01   2.5794959e+00   3.4919405e+01
+   3.9200000e+01   2.6451405e+00   3.4928736e+01
+   3.9200000e+01   2.7416281e+00   3.4940488e+01
+   3.9200000e+01   2.8990331e+00   3.4952802e+01
+   3.9200000e+01   3.0880496e+00   3.4961322e+01
+   3.9200000e+01   3.3536529e+00   3.4973281e+01
+   3.9200000e+01   3.5827603e+00   3.4972736e+01
+   3.9200000e+01   3.8425455e+00   3.4984074e+01
+   3.9200000e+01   4.3142231e+00   3.5036645e+01
+   3.9200000e+01   5.2460165e+00   3.5170777e+01
+   3.9200000e+01   6.6648926e+00   3.5382711e+01
+   3.9200000e+01   8.2569008e+00   3.5621149e+01
+   3.9200000e+01   9.2870413e+00   3.5722876e+01
+   3.9200000e+01   9.5328760e+00   3.5630785e+01
+   3.9200000e+01   9.9026364e+00   3.5537066e+01
+   3.9200000e+01   1.0298083e+01   3.5480702e+01
+   3.9200000e+01   1.0770826e+01   3.5489091e+01
+   3.9200000e+01   1.1255678e+01   3.5531455e+01
+   3.9200000e+01   1.1602421e+01   3.5566000e+01
+   3.9200000e+01   1.1914041e+01   3.5601397e+01
+   3.9200000e+01   1.2147298e+01   3.5626901e+01
+   3.9200000e+01   1.2343058e+01   3.5648785e+01
+   3.9200000e+01   1.2494471e+01   3.5664835e+01
+   3.9200000e+01   1.2597438e+01   3.5676273e+01
+   3.9200000e+01   1.2688149e+01   3.5686380e+01
+   3.9200000e+01   1.2785116e+01   3.5697636e+01
+   3.9200000e+01   1.2848306e+01   3.5705074e+01
+   3.9200000e+01   1.2914322e+01   3.5711992e+01
+   3.9200000e+01   1.3001628e+01   3.5721826e+01
+   3.9200000e+01   1.3051289e+01   3.5725025e+01
+   3.9200000e+01   1.3089132e+01   3.5727711e+01
+   3.9200000e+01   1.3142140e+01   3.5735612e+01
+   3.9200000e+01   1.3179091e+01   3.5738893e+01
+   3.9200000e+01   1.3225289e+01   3.5744364e+01
+   3.9200000e+01   1.3285380e+01   3.5750000e+01
+   3.9200000e+01   1.3351380e+01   3.5760339e+01
+   3.9200000e+01   1.3413512e+01   3.5768570e+01
+   3.9200000e+01   1.3485198e+01   3.5776364e+01
+   3.9200000e+01   1.3539636e+01   3.5778083e+01
+   3.9200000e+01   1.3586083e+01   3.5781620e+01
+   3.9200000e+01   1.3649860e+01   3.5788785e+01
+   3.9200000e+01   1.3724041e+01   3.5795174e+01
+   3.9200000e+01   1.3795636e+01   3.5799347e+01
+   3.9200000e+01   1.3896884e+01   3.5810504e+01
+   3.9200000e+01   1.4007802e+01   3.5819636e+01
+   3.9200000e+01   1.4119207e+01   3.5823149e+01
+   3.9200000e+01   1.4275008e+01   3.5831579e+01
+   3.9200000e+01   1.4495909e+01   3.5833537e+01
+   3.9200000e+01   1.4732562e+01   3.5837397e+01
+   3.9200000e+01   1.4997446e+01   3.5833347e+01
+   3.9200000e+01   1.5706603e+01   3.5837281e+01
+   3.9200000e+01   1.6613545e+01   3.5844116e+01
+   3.9200000e+01   1.7261298e+01   3.5850289e+01
+   3.9200000e+01   1.8017446e+01   3.5853281e+01
+   3.9200000e+01   1.8879421e+01   3.5867727e+01
+   3.9200000e+01   1.9534612e+01   3.5871678e+01
+   3.9200000e+01   1.9774289e+01   3.5868719e+01
+   3.9200000e+01   1.9845992e+01   3.5868760e+01
+   3.9200000e+01   1.9857645e+01   3.5869248e+01
+   3.9200000e+01   1.9858744e+01   3.5869810e+01
+   3.9200000e+01   1.9851843e+01   3.5868702e+01
+   3.9200000e+01   1.9795959e+01   3.5873008e+01
+   3.9250000e+01   2.5103554e+00   3.4896107e+01
+   3.9250000e+01   2.5061901e+00   3.4902207e+01
+   3.9250000e+01   2.5121488e+00   3.4907306e+01
+   3.9250000e+01   2.5413554e+00   3.4914521e+01
+   3.9250000e+01   2.5794959e+00   3.4919405e+01
+   3.9250000e+01   2.6451405e+00   3.4928736e+01
+   3.9250000e+01   2.7416281e+00   3.4940488e+01
+   3.9250000e+01   2.8990331e+00   3.4952802e+01
+   3.9250000e+01   3.0880496e+00   3.4961322e+01
+   3.9250000e+01   3.3536529e+00   3.4973281e+01
+   3.9250000e+01   3.5827603e+00   3.4972736e+01
+   3.9250000e+01   3.8425455e+00   3.4984074e+01
+   3.9250000e+01   4.3142231e+00   3.5036645e+01
+   3.9250000e+01   5.2460165e+00   3.5170777e+01
+   3.9250000e+01   6.6648926e+00   3.5382711e+01
+   3.9250000e+01   8.2569008e+00   3.5621149e+01
+   3.9250000e+01   9.2870413e+00   3.5722876e+01
+   3.9250000e+01   9.5328760e+00   3.5630785e+01
+   3.9250000e+01   9.9026364e+00   3.5537066e+01
+   3.9250000e+01   1.0298083e+01   3.5480702e+01
+   3.9250000e+01   1.0770826e+01   3.5489091e+01
+   3.9250000e+01   1.1255678e+01   3.5531455e+01
+   3.9250000e+01   1.1602421e+01   3.5566000e+01
+   3.9250000e+01   1.1914041e+01   3.5601397e+01
+   3.9250000e+01   1.2147298e+01   3.5626901e+01
+   3.9250000e+01   1.2343058e+01   3.5648785e+01
+   3.9250000e+01   1.2494471e+01   3.5664835e+01
+   3.9250000e+01   1.2597438e+01   3.5676273e+01
+   3.9250000e+01   1.2688149e+01   3.5686380e+01
+   3.9250000e+01   1.2785116e+01   3.5697636e+01
+   3.9250000e+01   1.2848306e+01   3.5705074e+01
+   3.9250000e+01   1.2914322e+01   3.5711992e+01
+   3.9250000e+01   1.3001628e+01   3.5721826e+01
+   3.9250000e+01   1.3051289e+01   3.5725025e+01
+   3.9250000e+01   1.3089132e+01   3.5727711e+01
+   3.9250000e+01   1.3142140e+01   3.5735612e+01
+   3.9250000e+01   1.3179091e+01   3.5738893e+01
+   3.9250000e+01   1.3225289e+01   3.5744364e+01
+   3.9250000e+01   1.3285380e+01   3.5750000e+01
+   3.9250000e+01   1.3351380e+01   3.5760339e+01
+   3.9250000e+01   1.3413512e+01   3.5768570e+01
+   3.9250000e+01   1.3485198e+01   3.5776364e+01
+   3.9250000e+01   1.3539636e+01   3.5778083e+01
+   3.9250000e+01   1.3586083e+01   3.5781620e+01
+   3.9250000e+01   1.3649860e+01   3.5788785e+01
+   3.9250000e+01   1.3724041e+01   3.5795174e+01
+   3.9250000e+01   1.3795636e+01   3.5799347e+01
+   3.9250000e+01   1.3896884e+01   3.5810504e+01
+   3.9250000e+01   1.4007802e+01   3.5819636e+01
+   3.9250000e+01   1.4119207e+01   3.5823149e+01
+   3.9250000e+01   1.4275008e+01   3.5831579e+01
+   3.9250000e+01   1.4495909e+01   3.5833537e+01
+   3.9250000e+01   1.4732562e+01   3.5837397e+01
+   3.9250000e+01   1.4997446e+01   3.5833347e+01
+   3.9250000e+01   1.5706603e+01   3.5837281e+01
+   3.9250000e+01   1.6613545e+01   3.5844116e+01
+   3.9250000e+01   1.7261298e+01   3.5850289e+01
+   3.9250000e+01   1.8017446e+01   3.5853281e+01
+   3.9250000e+01   1.8879421e+01   3.5867727e+01
+   3.9250000e+01   1.9534612e+01   3.5871678e+01
+   3.9250000e+01   1.9774289e+01   3.5868719e+01
+   3.9250000e+01   1.9845992e+01   3.5868760e+01
+   3.9250000e+01   1.9857645e+01   3.5869248e+01
+   3.9250000e+01   1.9858744e+01   3.5869810e+01
+   3.9250000e+01   1.9851843e+01   3.5868702e+01
+   3.9250000e+01   1.9795959e+01   3.5873008e+01
+   3.9300000e+01   2.5103554e+00   3.4896107e+01
+   3.9300000e+01   2.5061901e+00   3.4902207e+01
+   3.9300000e+01   2.5121488e+00   3.4907306e+01
+   3.9300000e+01   2.5413554e+00   3.4914521e+01
+   3.9300000e+01   2.5794959e+00   3.4919405e+01
+   3.9300000e+01   2.6451405e+00   3.4928736e+01
+   3.9300000e+01   2.7416281e+00   3.4940488e+01
+   3.9300000e+01   2.8990331e+00   3.4952802e+01
+   3.9300000e+01   3.0880496e+00   3.4961322e+01
+   3.9300000e+01   3.3536529e+00   3.4973281e+01
+   3.9300000e+01   3.5827603e+00   3.4972736e+01
+   3.9300000e+01   3.8425455e+00   3.4984074e+01
+   3.9300000e+01   4.3142231e+00   3.5036645e+01
+   3.9300000e+01   5.2460165e+00   3.5170777e+01
+   3.9300000e+01   6.6648926e+00   3.5382711e+01
+   3.9300000e+01   8.2569008e+00   3.5621149e+01
+   3.9300000e+01   9.2870413e+00   3.5722876e+01
+   3.9300000e+01   9.5328760e+00   3.5630785e+01
+   3.9300000e+01   9.9026364e+00   3.5537066e+01
+   3.9300000e+01   1.0298083e+01   3.5480702e+01
+   3.9300000e+01   1.0770826e+01   3.5489091e+01
+   3.9300000e+01   1.1255678e+01   3.5531455e+01
+   3.9300000e+01   1.1602421e+01   3.5566000e+01
+   3.9300000e+01   1.1914041e+01   3.5601397e+01
+   3.9300000e+01   1.2147298e+01   3.5626901e+01
+   3.9300000e+01   1.2343058e+01   3.5648785e+01
+   3.9300000e+01   1.2494471e+01   3.5664835e+01
+   3.9300000e+01   1.2597438e+01   3.5676273e+01
+   3.9300000e+01   1.2688149e+01   3.5686380e+01
+   3.9300000e+01   1.2785116e+01   3.5697636e+01
+   3.9300000e+01   1.2848306e+01   3.5705074e+01
+   3.9300000e+01   1.2914322e+01   3.5711992e+01
+   3.9300000e+01   1.3001628e+01   3.5721826e+01
+   3.9300000e+01   1.3051289e+01   3.5725025e+01
+   3.9300000e+01   1.3089132e+01   3.5727711e+01
+   3.9300000e+01   1.3142140e+01   3.5735612e+01
+   3.9300000e+01   1.3179091e+01   3.5738893e+01
+   3.9300000e+01   1.3225289e+01   3.5744364e+01
+   3.9300000e+01   1.3285380e+01   3.5750000e+01
+   3.9300000e+01   1.3351380e+01   3.5760339e+01
+   3.9300000e+01   1.3413512e+01   3.5768570e+01
+   3.9300000e+01   1.3485198e+01   3.5776364e+01
+   3.9300000e+01   1.3539636e+01   3.5778083e+01
+   3.9300000e+01   1.3586083e+01   3.5781620e+01
+   3.9300000e+01   1.3649860e+01   3.5788785e+01
+   3.9300000e+01   1.3724041e+01   3.5795174e+01
+   3.9300000e+01   1.3795636e+01   3.5799347e+01
+   3.9300000e+01   1.3896884e+01   3.5810504e+01
+   3.9300000e+01   1.4007802e+01   3.5819636e+01
+   3.9300000e+01   1.4119207e+01   3.5823149e+01
+   3.9300000e+01   1.4275008e+01   3.5831579e+01
+   3.9300000e+01   1.4495909e+01   3.5833537e+01
+   3.9300000e+01   1.4732562e+01   3.5837397e+01
+   3.9300000e+01   1.4997446e+01   3.5833347e+01
+   3.9300000e+01   1.5706603e+01   3.5837281e+01
+   3.9300000e+01   1.6613545e+01   3.5844116e+01
+   3.9300000e+01   1.7261298e+01   3.5850289e+01
+   3.9300000e+01   1.8017446e+01   3.5853281e+01
+   3.9300000e+01   1.8879421e+01   3.5867727e+01
+   3.9300000e+01   1.9534612e+01   3.5871678e+01
+   3.9300000e+01   1.9774289e+01   3.5868719e+01
+   3.9300000e+01   1.9845992e+01   3.5868760e+01
+   3.9300000e+01   1.9857645e+01   3.5869248e+01
+   3.9300000e+01   1.9858744e+01   3.5869810e+01
+   3.9300000e+01   1.9851843e+01   3.5868702e+01
+   3.9300000e+01   1.9795959e+01   3.5873008e+01
+   3.9350000e+01   2.5103554e+00   3.4896107e+01
+   3.9350000e+01   2.5061901e+00   3.4902207e+01
+   3.9350000e+01   2.5121488e+00   3.4907306e+01
+   3.9350000e+01   2.5413554e+00   3.4914521e+01
+   3.9350000e+01   2.5794959e+00   3.4919405e+01
+   3.9350000e+01   2.6451405e+00   3.4928736e+01
+   3.9350000e+01   2.7416281e+00   3.4940488e+01
+   3.9350000e+01   2.8990331e+00   3.4952802e+01
+   3.9350000e+01   3.0880496e+00   3.4961322e+01
+   3.9350000e+01   3.3536529e+00   3.4973281e+01
+   3.9350000e+01   3.5827603e+00   3.4972736e+01
+   3.9350000e+01   3.8425455e+00   3.4984074e+01
+   3.9350000e+01   4.3142231e+00   3.5036645e+01
+   3.9350000e+01   5.2460165e+00   3.5170777e+01
+   3.9350000e+01   6.6648926e+00   3.5382711e+01
+   3.9350000e+01   8.2569008e+00   3.5621149e+01
+   3.9350000e+01   9.2870413e+00   3.5722876e+01
+   3.9350000e+01   9.5328760e+00   3.5630785e+01
+   3.9350000e+01   9.9026364e+00   3.5537066e+01
+   3.9350000e+01   1.0298083e+01   3.5480702e+01
+   3.9350000e+01   1.0770826e+01   3.5489091e+01
+   3.9350000e+01   1.1255678e+01   3.5531455e+01
+   3.9350000e+01   1.1602421e+01   3.5566000e+01
+   3.9350000e+01   1.1914041e+01   3.5601397e+01
+   3.9350000e+01   1.2147298e+01   3.5626901e+01
+   3.9350000e+01   1.2343058e+01   3.5648785e+01
+   3.9350000e+01   1.2494471e+01   3.5664835e+01
+   3.9350000e+01   1.2597438e+01   3.5676273e+01
+   3.9350000e+01   1.2688149e+01   3.5686380e+01
+   3.9350000e+01   1.2785116e+01   3.5697636e+01
+   3.9350000e+01   1.2848306e+01   3.5705074e+01
+   3.9350000e+01   1.2914322e+01   3.5711992e+01
+   3.9350000e+01   1.3001628e+01   3.5721826e+01
+   3.9350000e+01   1.3051289e+01   3.5725025e+01
+   3.9350000e+01   1.3089132e+01   3.5727711e+01
+   3.9350000e+01   1.3142140e+01   3.5735612e+01
+   3.9350000e+01   1.3179091e+01   3.5738893e+01
+   3.9350000e+01   1.3225289e+01   3.5744364e+01
+   3.9350000e+01   1.3285380e+01   3.5750000e+01
+   3.9350000e+01   1.3351380e+01   3.5760339e+01
+   3.9350000e+01   1.3413512e+01   3.5768570e+01
+   3.9350000e+01   1.3485198e+01   3.5776364e+01
+   3.9350000e+01   1.3539636e+01   3.5778083e+01
+   3.9350000e+01   1.3586083e+01   3.5781620e+01
+   3.9350000e+01   1.3649860e+01   3.5788785e+01
+   3.9350000e+01   1.3724041e+01   3.5795174e+01
+   3.9350000e+01   1.3795636e+01   3.5799347e+01
+   3.9350000e+01   1.3896884e+01   3.5810504e+01
+   3.9350000e+01   1.4007802e+01   3.5819636e+01
+   3.9350000e+01   1.4119207e+01   3.5823149e+01
+   3.9350000e+01   1.4275008e+01   3.5831579e+01
+   3.9350000e+01   1.4495909e+01   3.5833537e+01
+   3.9350000e+01   1.4732562e+01   3.5837397e+01
+   3.9350000e+01   1.4997446e+01   3.5833347e+01
+   3.9350000e+01   1.5706603e+01   3.5837281e+01
+   3.9350000e+01   1.6613545e+01   3.5844116e+01
+   3.9350000e+01   1.7261298e+01   3.5850289e+01
+   3.9350000e+01   1.8017446e+01   3.5853281e+01
+   3.9350000e+01   1.8879421e+01   3.5867727e+01
+   3.9350000e+01   1.9534612e+01   3.5871678e+01
+   3.9350000e+01   1.9774289e+01   3.5868719e+01
+   3.9350000e+01   1.9845992e+01   3.5868760e+01
+   3.9350000e+01   1.9857645e+01   3.5869248e+01
+   3.9350000e+01   1.9858744e+01   3.5869810e+01
+   3.9350000e+01   1.9851843e+01   3.5868702e+01
+   3.9350000e+01   1.9795959e+01   3.5873008e+01
+   3.9400000e+01   2.5103554e+00   3.4896107e+01
+   3.9400000e+01   2.5061901e+00   3.4902207e+01
+   3.9400000e+01   2.5121488e+00   3.4907306e+01
+   3.9400000e+01   2.5413554e+00   3.4914521e+01
+   3.9400000e+01   2.5794959e+00   3.4919405e+01
+   3.9400000e+01   2.6451405e+00   3.4928736e+01
+   3.9400000e+01   2.7416281e+00   3.4940488e+01
+   3.9400000e+01   2.8990331e+00   3.4952802e+01
+   3.9400000e+01   3.0880496e+00   3.4961322e+01
+   3.9400000e+01   3.3536529e+00   3.4973281e+01
+   3.9400000e+01   3.5827603e+00   3.4972736e+01
+   3.9400000e+01   3.8425455e+00   3.4984074e+01
+   3.9400000e+01   4.3142231e+00   3.5036645e+01
+   3.9400000e+01   5.2460165e+00   3.5170777e+01
+   3.9400000e+01   6.6648926e+00   3.5382711e+01
+   3.9400000e+01   8.2569008e+00   3.5621149e+01
+   3.9400000e+01   9.2870413e+00   3.5722876e+01
+   3.9400000e+01   9.5328760e+00   3.5630785e+01
+   3.9400000e+01   9.9026364e+00   3.5537066e+01
+   3.9400000e+01   1.0298083e+01   3.5480702e+01
+   3.9400000e+01   1.0770826e+01   3.5489091e+01
+   3.9400000e+01   1.1255678e+01   3.5531455e+01
+   3.9400000e+01   1.1602421e+01   3.5566000e+01
+   3.9400000e+01   1.1914041e+01   3.5601397e+01
+   3.9400000e+01   1.2147298e+01   3.5626901e+01
+   3.9400000e+01   1.2343058e+01   3.5648785e+01
+   3.9400000e+01   1.2494471e+01   3.5664835e+01
+   3.9400000e+01   1.2597438e+01   3.5676273e+01
+   3.9400000e+01   1.2688149e+01   3.5686380e+01
+   3.9400000e+01   1.2785116e+01   3.5697636e+01
+   3.9400000e+01   1.2848306e+01   3.5705074e+01
+   3.9400000e+01   1.2914322e+01   3.5711992e+01
+   3.9400000e+01   1.3001628e+01   3.5721826e+01
+   3.9400000e+01   1.3051289e+01   3.5725025e+01
+   3.9400000e+01   1.3089132e+01   3.5727711e+01
+   3.9400000e+01   1.3142140e+01   3.5735612e+01
+   3.9400000e+01   1.3179091e+01   3.5738893e+01
+   3.9400000e+01   1.3225289e+01   3.5744364e+01
+   3.9400000e+01   1.3285380e+01   3.5750000e+01
+   3.9400000e+01   1.3351380e+01   3.5760339e+01
+   3.9400000e+01   1.3413512e+01   3.5768570e+01
+   3.9400000e+01   1.3485198e+01   3.5776364e+01
+   3.9400000e+01   1.3539636e+01   3.5778083e+01
+   3.9400000e+01   1.3586083e+01   3.5781620e+01
+   3.9400000e+01   1.3649860e+01   3.5788785e+01
+   3.9400000e+01   1.3724041e+01   3.5795174e+01
+   3.9400000e+01   1.3795636e+01   3.5799347e+01
+   3.9400000e+01   1.3896884e+01   3.5810504e+01
+   3.9400000e+01   1.4007802e+01   3.5819636e+01
+   3.9400000e+01   1.4119207e+01   3.5823149e+01
+   3.9400000e+01   1.4275008e+01   3.5831579e+01
+   3.9400000e+01   1.4495909e+01   3.5833537e+01
+   3.9400000e+01   1.4732562e+01   3.5837397e+01
+   3.9400000e+01   1.4997446e+01   3.5833347e+01
+   3.9400000e+01   1.5706603e+01   3.5837281e+01
+   3.9400000e+01   1.6613545e+01   3.5844116e+01
+   3.9400000e+01   1.7261298e+01   3.5850289e+01
+   3.9400000e+01   1.8017446e+01   3.5853281e+01
+   3.9400000e+01   1.8879421e+01   3.5867727e+01
+   3.9400000e+01   1.9534612e+01   3.5871678e+01
+   3.9400000e+01   1.9774289e+01   3.5868719e+01
+   3.9400000e+01   1.9845992e+01   3.5868760e+01
+   3.9400000e+01   1.9857645e+01   3.5869248e+01
+   3.9400000e+01   1.9858744e+01   3.5869810e+01
+   3.9400000e+01   1.9851843e+01   3.5868702e+01
+   3.9400000e+01   1.9795959e+01   3.5873008e+01
+   3.9450000e+01   2.5103554e+00   3.4896107e+01
+   3.9450000e+01   2.5061901e+00   3.4902207e+01
+   3.9450000e+01   2.5121488e+00   3.4907306e+01
+   3.9450000e+01   2.5413554e+00   3.4914521e+01
+   3.9450000e+01   2.5794959e+00   3.4919405e+01
+   3.9450000e+01   2.6451405e+00   3.4928736e+01
+   3.9450000e+01   2.7416281e+00   3.4940488e+01
+   3.9450000e+01   2.8990331e+00   3.4952802e+01
+   3.9450000e+01   3.0880496e+00   3.4961322e+01
+   3.9450000e+01   3.3536529e+00   3.4973281e+01
+   3.9450000e+01   3.5827603e+00   3.4972736e+01
+   3.9450000e+01   3.8425455e+00   3.4984074e+01
+   3.9450000e+01   4.3142231e+00   3.5036645e+01
+   3.9450000e+01   5.2460165e+00   3.5170777e+01
+   3.9450000e+01   6.6648926e+00   3.5382711e+01
+   3.9450000e+01   8.2569008e+00   3.5621149e+01
+   3.9450000e+01   9.2870413e+00   3.5722876e+01
+   3.9450000e+01   9.5328760e+00   3.5630785e+01
+   3.9450000e+01   9.9026364e+00   3.5537066e+01
+   3.9450000e+01   1.0298083e+01   3.5480702e+01
+   3.9450000e+01   1.0770826e+01   3.5489091e+01
+   3.9450000e+01   1.1255678e+01   3.5531455e+01
+   3.9450000e+01   1.1602421e+01   3.5566000e+01
+   3.9450000e+01   1.1914041e+01   3.5601397e+01
+   3.9450000e+01   1.2147298e+01   3.5626901e+01
+   3.9450000e+01   1.2343058e+01   3.5648785e+01
+   3.9450000e+01   1.2494471e+01   3.5664835e+01
+   3.9450000e+01   1.2597438e+01   3.5676273e+01
+   3.9450000e+01   1.2688149e+01   3.5686380e+01
+   3.9450000e+01   1.2785116e+01   3.5697636e+01
+   3.9450000e+01   1.2848306e+01   3.5705074e+01
+   3.9450000e+01   1.2914322e+01   3.5711992e+01
+   3.9450000e+01   1.3001628e+01   3.5721826e+01
+   3.9450000e+01   1.3051289e+01   3.5725025e+01
+   3.9450000e+01   1.3089132e+01   3.5727711e+01
+   3.9450000e+01   1.3142140e+01   3.5735612e+01
+   3.9450000e+01   1.3179091e+01   3.5738893e+01
+   3.9450000e+01   1.3225289e+01   3.5744364e+01
+   3.9450000e+01   1.3285380e+01   3.5750000e+01
+   3.9450000e+01   1.3351380e+01   3.5760339e+01
+   3.9450000e+01   1.3413512e+01   3.5768570e+01
+   3.9450000e+01   1.3485198e+01   3.5776364e+01
+   3.9450000e+01   1.3539636e+01   3.5778083e+01
+   3.9450000e+01   1.3586083e+01   3.5781620e+01
+   3.9450000e+01   1.3649860e+01   3.5788785e+01
+   3.9450000e+01   1.3724041e+01   3.5795174e+01
+   3.9450000e+01   1.3795636e+01   3.5799347e+01
+   3.9450000e+01   1.3896884e+01   3.5810504e+01
+   3.9450000e+01   1.4007802e+01   3.5819636e+01
+   3.9450000e+01   1.4119207e+01   3.5823149e+01
+   3.9450000e+01   1.4275008e+01   3.5831579e+01
+   3.9450000e+01   1.4495909e+01   3.5833537e+01
+   3.9450000e+01   1.4732562e+01   3.5837397e+01
+   3.9450000e+01   1.4997446e+01   3.5833347e+01
+   3.9450000e+01   1.5706603e+01   3.5837281e+01
+   3.9450000e+01   1.6613545e+01   3.5844116e+01
+   3.9450000e+01   1.7261298e+01   3.5850289e+01
+   3.9450000e+01   1.8017446e+01   3.5853281e+01
+   3.9450000e+01   1.8879421e+01   3.5867727e+01
+   3.9450000e+01   1.9534612e+01   3.5871678e+01
+   3.9450000e+01   1.9774289e+01   3.5868719e+01
+   3.9450000e+01   1.9845992e+01   3.5868760e+01
+   3.9450000e+01   1.9857645e+01   3.5869248e+01
+   3.9450000e+01   1.9858744e+01   3.5869810e+01
+   3.9450000e+01   1.9851843e+01   3.5868702e+01
+   3.9450000e+01   1.9795959e+01   3.5873008e+01
+   3.9500000e+01   2.5103554e+00   3.4896107e+01
+   3.9500000e+01   2.5061901e+00   3.4902207e+01
+   3.9500000e+01   2.5121488e+00   3.4907306e+01
+   3.9500000e+01   2.5413554e+00   3.4914521e+01
+   3.9500000e+01   2.5794959e+00   3.4919405e+01
+   3.9500000e+01   2.6451405e+00   3.4928736e+01
+   3.9500000e+01   2.7416281e+00   3.4940488e+01
+   3.9500000e+01   2.8990331e+00   3.4952802e+01
+   3.9500000e+01   3.0880496e+00   3.4961322e+01
+   3.9500000e+01   3.3536529e+00   3.4973281e+01
+   3.9500000e+01   3.5827603e+00   3.4972736e+01
+   3.9500000e+01   3.8425455e+00   3.4984074e+01
+   3.9500000e+01   4.3142231e+00   3.5036645e+01
+   3.9500000e+01   5.2460165e+00   3.5170777e+01
+   3.9500000e+01   6.6648926e+00   3.5382711e+01
+   3.9500000e+01   8.2569008e+00   3.5621149e+01
+   3.9500000e+01   9.2870413e+00   3.5722876e+01
+   3.9500000e+01   9.5328760e+00   3.5630785e+01
+   3.9500000e+01   9.9026364e+00   3.5537066e+01
+   3.9500000e+01   1.0298083e+01   3.5480702e+01
+   3.9500000e+01   1.0770826e+01   3.5489091e+01
+   3.9500000e+01   1.1255678e+01   3.5531455e+01
+   3.9500000e+01   1.1602421e+01   3.5566000e+01
+   3.9500000e+01   1.1914041e+01   3.5601397e+01
+   3.9500000e+01   1.2147298e+01   3.5626901e+01
+   3.9500000e+01   1.2343058e+01   3.5648785e+01
+   3.9500000e+01   1.2494471e+01   3.5664835e+01
+   3.9500000e+01   1.2597438e+01   3.5676273e+01
+   3.9500000e+01   1.2688149e+01   3.5686380e+01
+   3.9500000e+01   1.2785116e+01   3.5697636e+01
+   3.9500000e+01   1.2848306e+01   3.5705074e+01
+   3.9500000e+01   1.2914322e+01   3.5711992e+01
+   3.9500000e+01   1.3001628e+01   3.5721826e+01
+   3.9500000e+01   1.3051289e+01   3.5725025e+01
+   3.9500000e+01   1.3089132e+01   3.5727711e+01
+   3.9500000e+01   1.3142140e+01   3.5735612e+01
+   3.9500000e+01   1.3179091e+01   3.5738893e+01
+   3.9500000e+01   1.3225289e+01   3.5744364e+01
+   3.9500000e+01   1.3285380e+01   3.5750000e+01
+   3.9500000e+01   1.3351380e+01   3.5760339e+01
+   3.9500000e+01   1.3413512e+01   3.5768570e+01
+   3.9500000e+01   1.3485198e+01   3.5776364e+01
+   3.9500000e+01   1.3539636e+01   3.5778083e+01
+   3.9500000e+01   1.3586083e+01   3.5781620e+01
+   3.9500000e+01   1.3649860e+01   3.5788785e+01
+   3.9500000e+01   1.3724041e+01   3.5795174e+01
+   3.9500000e+01   1.3795636e+01   3.5799347e+01
+   3.9500000e+01   1.3896884e+01   3.5810504e+01
+   3.9500000e+01   1.4007802e+01   3.5819636e+01
+   3.9500000e+01   1.4119207e+01   3.5823149e+01
+   3.9500000e+01   1.4275008e+01   3.5831579e+01
+   3.9500000e+01   1.4495909e+01   3.5833537e+01
+   3.9500000e+01   1.4732562e+01   3.5837397e+01
+   3.9500000e+01   1.4997446e+01   3.5833347e+01
+   3.9500000e+01   1.5706603e+01   3.5837281e+01
+   3.9500000e+01   1.6613545e+01   3.5844116e+01
+   3.9500000e+01   1.7261298e+01   3.5850289e+01
+   3.9500000e+01   1.8017446e+01   3.5853281e+01
+   3.9500000e+01   1.8879421e+01   3.5867727e+01
+   3.9500000e+01   1.9534612e+01   3.5871678e+01
+   3.9500000e+01   1.9774289e+01   3.5868719e+01
+   3.9500000e+01   1.9845992e+01   3.5868760e+01
+   3.9500000e+01   1.9857645e+01   3.5869248e+01
+   3.9500000e+01   1.9858744e+01   3.5869810e+01
+   3.9500000e+01   1.9851843e+01   3.5868702e+01
+   3.9500000e+01   1.9795959e+01   3.5873008e+01
+   3.9550000e+01   2.5103554e+00   3.4896107e+01
+   3.9550000e+01   2.5061901e+00   3.4902207e+01
+   3.9550000e+01   2.5121488e+00   3.4907306e+01
+   3.9550000e+01   2.5413554e+00   3.4914521e+01
+   3.9550000e+01   2.5794959e+00   3.4919405e+01
+   3.9550000e+01   2.6451405e+00   3.4928736e+01
+   3.9550000e+01   2.7416281e+00   3.4940488e+01
+   3.9550000e+01   2.8990331e+00   3.4952802e+01
+   3.9550000e+01   3.0880496e+00   3.4961322e+01
+   3.9550000e+01   3.3536529e+00   3.4973281e+01
+   3.9550000e+01   3.5827603e+00   3.4972736e+01
+   3.9550000e+01   3.8425455e+00   3.4984074e+01
+   3.9550000e+01   4.3142231e+00   3.5036645e+01
+   3.9550000e+01   5.2460165e+00   3.5170777e+01
+   3.9550000e+01   6.6648926e+00   3.5382711e+01
+   3.9550000e+01   8.2569008e+00   3.5621149e+01
+   3.9550000e+01   9.2870413e+00   3.5722876e+01
+   3.9550000e+01   9.5328760e+00   3.5630785e+01
+   3.9550000e+01   9.9026364e+00   3.5537066e+01
+   3.9550000e+01   1.0298083e+01   3.5480702e+01
+   3.9550000e+01   1.0770826e+01   3.5489091e+01
+   3.9550000e+01   1.1255678e+01   3.5531455e+01
+   3.9550000e+01   1.1602421e+01   3.5566000e+01
+   3.9550000e+01   1.1914041e+01   3.5601397e+01
+   3.9550000e+01   1.2147298e+01   3.5626901e+01
+   3.9550000e+01   1.2343058e+01   3.5648785e+01
+   3.9550000e+01   1.2494471e+01   3.5664835e+01
+   3.9550000e+01   1.2597438e+01   3.5676273e+01
+   3.9550000e+01   1.2688149e+01   3.5686380e+01
+   3.9550000e+01   1.2785116e+01   3.5697636e+01
+   3.9550000e+01   1.2848306e+01   3.5705074e+01
+   3.9550000e+01   1.2914322e+01   3.5711992e+01
+   3.9550000e+01   1.3001628e+01   3.5721826e+01
+   3.9550000e+01   1.3051289e+01   3.5725025e+01
+   3.9550000e+01   1.3089132e+01   3.5727711e+01
+   3.9550000e+01   1.3142140e+01   3.5735612e+01
+   3.9550000e+01   1.3179091e+01   3.5738893e+01
+   3.9550000e+01   1.3225289e+01   3.5744364e+01
+   3.9550000e+01   1.3285380e+01   3.5750000e+01
+   3.9550000e+01   1.3351380e+01   3.5760339e+01
+   3.9550000e+01   1.3413512e+01   3.5768570e+01
+   3.9550000e+01   1.3485198e+01   3.5776364e+01
+   3.9550000e+01   1.3539636e+01   3.5778083e+01
+   3.9550000e+01   1.3586083e+01   3.5781620e+01
+   3.9550000e+01   1.3649860e+01   3.5788785e+01
+   3.9550000e+01   1.3724041e+01   3.5795174e+01
+   3.9550000e+01   1.3795636e+01   3.5799347e+01
+   3.9550000e+01   1.3896884e+01   3.5810504e+01
+   3.9550000e+01   1.4007802e+01   3.5819636e+01
+   3.9550000e+01   1.4119207e+01   3.5823149e+01
+   3.9550000e+01   1.4275008e+01   3.5831579e+01
+   3.9550000e+01   1.4495909e+01   3.5833537e+01
+   3.9550000e+01   1.4732562e+01   3.5837397e+01
+   3.9550000e+01   1.4997446e+01   3.5833347e+01
+   3.9550000e+01   1.5706603e+01   3.5837281e+01
+   3.9550000e+01   1.6613545e+01   3.5844116e+01
+   3.9550000e+01   1.7261298e+01   3.5850289e+01
+   3.9550000e+01   1.8017446e+01   3.5853281e+01
+   3.9550000e+01   1.8879421e+01   3.5867727e+01
+   3.9550000e+01   1.9534612e+01   3.5871678e+01
+   3.9550000e+01   1.9774289e+01   3.5868719e+01
+   3.9550000e+01   1.9845992e+01   3.5868760e+01
+   3.9550000e+01   1.9857645e+01   3.5869248e+01
+   3.9550000e+01   1.9858744e+01   3.5869810e+01
+   3.9550000e+01   1.9851843e+01   3.5868702e+01
+   3.9550000e+01   1.9795959e+01   3.5873008e+01
+   3.9600000e+01   2.5103554e+00   3.4896107e+01
+   3.9600000e+01   2.5061901e+00   3.4902207e+01
+   3.9600000e+01   2.5121488e+00   3.4907306e+01
+   3.9600000e+01   2.5413554e+00   3.4914521e+01
+   3.9600000e+01   2.5794959e+00   3.4919405e+01
+   3.9600000e+01   2.6451405e+00   3.4928736e+01
+   3.9600000e+01   2.7416281e+00   3.4940488e+01
+   3.9600000e+01   2.8990331e+00   3.4952802e+01
+   3.9600000e+01   3.0880496e+00   3.4961322e+01
+   3.9600000e+01   3.3536529e+00   3.4973281e+01
+   3.9600000e+01   3.5827603e+00   3.4972736e+01
+   3.9600000e+01   3.8425455e+00   3.4984074e+01
+   3.9600000e+01   4.3142231e+00   3.5036645e+01
+   3.9600000e+01   5.2460165e+00   3.5170777e+01
+   3.9600000e+01   6.6648926e+00   3.5382711e+01
+   3.9600000e+01   8.2569008e+00   3.5621149e+01
+   3.9600000e+01   9.2870413e+00   3.5722876e+01
+   3.9600000e+01   9.5328760e+00   3.5630785e+01
+   3.9600000e+01   9.9026364e+00   3.5537066e+01
+   3.9600000e+01   1.0298083e+01   3.5480702e+01
+   3.9600000e+01   1.0770826e+01   3.5489091e+01
+   3.9600000e+01   1.1255678e+01   3.5531455e+01
+   3.9600000e+01   1.1602421e+01   3.5566000e+01
+   3.9600000e+01   1.1914041e+01   3.5601397e+01
+   3.9600000e+01   1.2147298e+01   3.5626901e+01
+   3.9600000e+01   1.2343058e+01   3.5648785e+01
+   3.9600000e+01   1.2494471e+01   3.5664835e+01
+   3.9600000e+01   1.2597438e+01   3.5676273e+01
+   3.9600000e+01   1.2688149e+01   3.5686380e+01
+   3.9600000e+01   1.2785116e+01   3.5697636e+01
+   3.9600000e+01   1.2848306e+01   3.5705074e+01
+   3.9600000e+01   1.2914322e+01   3.5711992e+01
+   3.9600000e+01   1.3001628e+01   3.5721826e+01
+   3.9600000e+01   1.3051289e+01   3.5725025e+01
+   3.9600000e+01   1.3089132e+01   3.5727711e+01
+   3.9600000e+01   1.3142140e+01   3.5735612e+01
+   3.9600000e+01   1.3179091e+01   3.5738893e+01
+   3.9600000e+01   1.3225289e+01   3.5744364e+01
+   3.9600000e+01   1.3285380e+01   3.5750000e+01
+   3.9600000e+01   1.3351380e+01   3.5760339e+01
+   3.9600000e+01   1.3413512e+01   3.5768570e+01
+   3.9600000e+01   1.3485198e+01   3.5776364e+01
+   3.9600000e+01   1.3539636e+01   3.5778083e+01
+   3.9600000e+01   1.3586083e+01   3.5781620e+01
+   3.9600000e+01   1.3649860e+01   3.5788785e+01
+   3.9600000e+01   1.3724041e+01   3.5795174e+01
+   3.9600000e+01   1.3795636e+01   3.5799347e+01
+   3.9600000e+01   1.3896884e+01   3.5810504e+01
+   3.9600000e+01   1.4007802e+01   3.5819636e+01
+   3.9600000e+01   1.4119207e+01   3.5823149e+01
+   3.9600000e+01   1.4275008e+01   3.5831579e+01
+   3.9600000e+01   1.4495909e+01   3.5833537e+01
+   3.9600000e+01   1.4732562e+01   3.5837397e+01
+   3.9600000e+01   1.4997446e+01   3.5833347e+01
+   3.9600000e+01   1.5706603e+01   3.5837281e+01
+   3.9600000e+01   1.6613545e+01   3.5844116e+01
+   3.9600000e+01   1.7261298e+01   3.5850289e+01
+   3.9600000e+01   1.8017446e+01   3.5853281e+01
+   3.9600000e+01   1.8879421e+01   3.5867727e+01
+   3.9600000e+01   1.9534612e+01   3.5871678e+01
+   3.9600000e+01   1.9774289e+01   3.5868719e+01
+   3.9600000e+01   1.9845992e+01   3.5868760e+01
+   3.9600000e+01   1.9857645e+01   3.5869248e+01
+   3.9600000e+01   1.9858744e+01   3.5869810e+01
+   3.9600000e+01   1.9851843e+01   3.5868702e+01
+   3.9600000e+01   1.9795959e+01   3.5873008e+01
+   3.9650000e+01   2.5103554e+00   3.4896107e+01
+   3.9650000e+01   2.5061901e+00   3.4902207e+01
+   3.9650000e+01   2.5121488e+00   3.4907306e+01
+   3.9650000e+01   2.5413554e+00   3.4914521e+01
+   3.9650000e+01   2.5794959e+00   3.4919405e+01
+   3.9650000e+01   2.6451405e+00   3.4928736e+01
+   3.9650000e+01   2.7416281e+00   3.4940488e+01
+   3.9650000e+01   2.8990331e+00   3.4952802e+01
+   3.9650000e+01   3.0880496e+00   3.4961322e+01
+   3.9650000e+01   3.3536529e+00   3.4973281e+01
+   3.9650000e+01   3.5827603e+00   3.4972736e+01
+   3.9650000e+01   3.8425455e+00   3.4984074e+01
+   3.9650000e+01   4.3142231e+00   3.5036645e+01
+   3.9650000e+01   5.2460165e+00   3.5170777e+01
+   3.9650000e+01   6.6648926e+00   3.5382711e+01
+   3.9650000e+01   8.2569008e+00   3.5621149e+01
+   3.9650000e+01   9.2870413e+00   3.5722876e+01
+   3.9650000e+01   9.5328760e+00   3.5630785e+01
+   3.9650000e+01   9.9026364e+00   3.5537066e+01
+   3.9650000e+01   1.0298083e+01   3.5480702e+01
+   3.9650000e+01   1.0770826e+01   3.5489091e+01
+   3.9650000e+01   1.1255678e+01   3.5531455e+01
+   3.9650000e+01   1.1602421e+01   3.5566000e+01
+   3.9650000e+01   1.1914041e+01   3.5601397e+01
+   3.9650000e+01   1.2147298e+01   3.5626901e+01
+   3.9650000e+01   1.2343058e+01   3.5648785e+01
+   3.9650000e+01   1.2494471e+01   3.5664835e+01
+   3.9650000e+01   1.2597438e+01   3.5676273e+01
+   3.9650000e+01   1.2688149e+01   3.5686380e+01
+   3.9650000e+01   1.2785116e+01   3.5697636e+01
+   3.9650000e+01   1.2848306e+01   3.5705074e+01
+   3.9650000e+01   1.2914322e+01   3.5711992e+01
+   3.9650000e+01   1.3001628e+01   3.5721826e+01
+   3.9650000e+01   1.3051289e+01   3.5725025e+01
+   3.9650000e+01   1.3089132e+01   3.5727711e+01
+   3.9650000e+01   1.3142140e+01   3.5735612e+01
+   3.9650000e+01   1.3179091e+01   3.5738893e+01
+   3.9650000e+01   1.3225289e+01   3.5744364e+01
+   3.9650000e+01   1.3285380e+01   3.5750000e+01
+   3.9650000e+01   1.3351380e+01   3.5760339e+01
+   3.9650000e+01   1.3413512e+01   3.5768570e+01
+   3.9650000e+01   1.3485198e+01   3.5776364e+01
+   3.9650000e+01   1.3539636e+01   3.5778083e+01
+   3.9650000e+01   1.3586083e+01   3.5781620e+01
+   3.9650000e+01   1.3649860e+01   3.5788785e+01
+   3.9650000e+01   1.3724041e+01   3.5795174e+01
+   3.9650000e+01   1.3795636e+01   3.5799347e+01
+   3.9650000e+01   1.3896884e+01   3.5810504e+01
+   3.9650000e+01   1.4007802e+01   3.5819636e+01
+   3.9650000e+01   1.4119207e+01   3.5823149e+01
+   3.9650000e+01   1.4275008e+01   3.5831579e+01
+   3.9650000e+01   1.4495909e+01   3.5833537e+01
+   3.9650000e+01   1.4732562e+01   3.5837397e+01
+   3.9650000e+01   1.4997446e+01   3.5833347e+01
+   3.9650000e+01   1.5706603e+01   3.5837281e+01
+   3.9650000e+01   1.6613545e+01   3.5844116e+01
+   3.9650000e+01   1.7261298e+01   3.5850289e+01
+   3.9650000e+01   1.8017446e+01   3.5853281e+01
+   3.9650000e+01   1.8879421e+01   3.5867727e+01
+   3.9650000e+01   1.9534612e+01   3.5871678e+01
+   3.9650000e+01   1.9774289e+01   3.5868719e+01
+   3.9650000e+01   1.9845992e+01   3.5868760e+01
+   3.9650000e+01   1.9857645e+01   3.5869248e+01
+   3.9650000e+01   1.9858744e+01   3.5869810e+01
+   3.9650000e+01   1.9851843e+01   3.5868702e+01
+   3.9650000e+01   1.9795959e+01   3.5873008e+01
+   3.9700000e+01   2.5103554e+00   3.4896107e+01
+   3.9700000e+01   2.5061901e+00   3.4902207e+01
+   3.9700000e+01   2.5121488e+00   3.4907306e+01
+   3.9700000e+01   2.5413554e+00   3.4914521e+01
+   3.9700000e+01   2.5794959e+00   3.4919405e+01
+   3.9700000e+01   2.6451405e+00   3.4928736e+01
+   3.9700000e+01   2.7416281e+00   3.4940488e+01
+   3.9700000e+01   2.8990331e+00   3.4952802e+01
+   3.9700000e+01   3.0880496e+00   3.4961322e+01
+   3.9700000e+01   3.3536529e+00   3.4973281e+01
+   3.9700000e+01   3.5827603e+00   3.4972736e+01
+   3.9700000e+01   3.8425455e+00   3.4984074e+01
+   3.9700000e+01   4.3142231e+00   3.5036645e+01
+   3.9700000e+01   5.2460165e+00   3.5170777e+01
+   3.9700000e+01   6.6648926e+00   3.5382711e+01
+   3.9700000e+01   8.2569008e+00   3.5621149e+01
+   3.9700000e+01   9.2870413e+00   3.5722876e+01
+   3.9700000e+01   9.5328760e+00   3.5630785e+01
+   3.9700000e+01   9.9026364e+00   3.5537066e+01
+   3.9700000e+01   1.0298083e+01   3.5480702e+01
+   3.9700000e+01   1.0770826e+01   3.5489091e+01
+   3.9700000e+01   1.1255678e+01   3.5531455e+01
+   3.9700000e+01   1.1602421e+01   3.5566000e+01
+   3.9700000e+01   1.1914041e+01   3.5601397e+01
+   3.9700000e+01   1.2147298e+01   3.5626901e+01
+   3.9700000e+01   1.2343058e+01   3.5648785e+01
+   3.9700000e+01   1.2494471e+01   3.5664835e+01
+   3.9700000e+01   1.2597438e+01   3.5676273e+01
+   3.9700000e+01   1.2688149e+01   3.5686380e+01
+   3.9700000e+01   1.2785116e+01   3.5697636e+01
+   3.9700000e+01   1.2848306e+01   3.5705074e+01
+   3.9700000e+01   1.2914322e+01   3.5711992e+01
+   3.9700000e+01   1.3001628e+01   3.5721826e+01
+   3.9700000e+01   1.3051289e+01   3.5725025e+01
+   3.9700000e+01   1.3089132e+01   3.5727711e+01
+   3.9700000e+01   1.3142140e+01   3.5735612e+01
+   3.9700000e+01   1.3179091e+01   3.5738893e+01
+   3.9700000e+01   1.3225289e+01   3.5744364e+01
+   3.9700000e+01   1.3285380e+01   3.5750000e+01
+   3.9700000e+01   1.3351380e+01   3.5760339e+01
+   3.9700000e+01   1.3413512e+01   3.5768570e+01
+   3.9700000e+01   1.3485198e+01   3.5776364e+01
+   3.9700000e+01   1.3539636e+01   3.5778083e+01
+   3.9700000e+01   1.3586083e+01   3.5781620e+01
+   3.9700000e+01   1.3649860e+01   3.5788785e+01
+   3.9700000e+01   1.3724041e+01   3.5795174e+01
+   3.9700000e+01   1.3795636e+01   3.5799347e+01
+   3.9700000e+01   1.3896884e+01   3.5810504e+01
+   3.9700000e+01   1.4007802e+01   3.5819636e+01
+   3.9700000e+01   1.4119207e+01   3.5823149e+01
+   3.9700000e+01   1.4275008e+01   3.5831579e+01
+   3.9700000e+01   1.4495909e+01   3.5833537e+01
+   3.9700000e+01   1.4732562e+01   3.5837397e+01
+   3.9700000e+01   1.4997446e+01   3.5833347e+01
+   3.9700000e+01   1.5706603e+01   3.5837281e+01
+   3.9700000e+01   1.6613545e+01   3.5844116e+01
+   3.9700000e+01   1.7261298e+01   3.5850289e+01
+   3.9700000e+01   1.8017446e+01   3.5853281e+01
+   3.9700000e+01   1.8879421e+01   3.5867727e+01
+   3.9700000e+01   1.9534612e+01   3.5871678e+01
+   3.9700000e+01   1.9774289e+01   3.5868719e+01
+   3.9700000e+01   1.9845992e+01   3.5868760e+01
+   3.9700000e+01   1.9857645e+01   3.5869248e+01
+   3.9700000e+01   1.9858744e+01   3.5869810e+01
+   3.9700000e+01   1.9851843e+01   3.5868702e+01
+   3.9700000e+01   1.9795959e+01   3.5873008e+01
+   3.9750000e+01   2.5103554e+00   3.4896107e+01
+   3.9750000e+01   2.5061901e+00   3.4902207e+01
+   3.9750000e+01   2.5121488e+00   3.4907306e+01
+   3.9750000e+01   2.5413554e+00   3.4914521e+01
+   3.9750000e+01   2.5794959e+00   3.4919405e+01
+   3.9750000e+01   2.6451405e+00   3.4928736e+01
+   3.9750000e+01   2.7416281e+00   3.4940488e+01
+   3.9750000e+01   2.8990331e+00   3.4952802e+01
+   3.9750000e+01   3.0880496e+00   3.4961322e+01
+   3.9750000e+01   3.3536529e+00   3.4973281e+01
+   3.9750000e+01   3.5827603e+00   3.4972736e+01
+   3.9750000e+01   3.8425455e+00   3.4984074e+01
+   3.9750000e+01   4.3142231e+00   3.5036645e+01
+   3.9750000e+01   5.2460165e+00   3.5170777e+01
+   3.9750000e+01   6.6648926e+00   3.5382711e+01
+   3.9750000e+01   8.2569008e+00   3.5621149e+01
+   3.9750000e+01   9.2870413e+00   3.5722876e+01
+   3.9750000e+01   9.5328760e+00   3.5630785e+01
+   3.9750000e+01   9.9026364e+00   3.5537066e+01
+   3.9750000e+01   1.0298083e+01   3.5480702e+01
+   3.9750000e+01   1.0770826e+01   3.5489091e+01
+   3.9750000e+01   1.1255678e+01   3.5531455e+01
+   3.9750000e+01   1.1602421e+01   3.5566000e+01
+   3.9750000e+01   1.1914041e+01   3.5601397e+01
+   3.9750000e+01   1.2147298e+01   3.5626901e+01
+   3.9750000e+01   1.2343058e+01   3.5648785e+01
+   3.9750000e+01   1.2494471e+01   3.5664835e+01
+   3.9750000e+01   1.2597438e+01   3.5676273e+01
+   3.9750000e+01   1.2688149e+01   3.5686380e+01
+   3.9750000e+01   1.2785116e+01   3.5697636e+01
+   3.9750000e+01   1.2848306e+01   3.5705074e+01
+   3.9750000e+01   1.2914322e+01   3.5711992e+01
+   3.9750000e+01   1.3001628e+01   3.5721826e+01
+   3.9750000e+01   1.3051289e+01   3.5725025e+01
+   3.9750000e+01   1.3089132e+01   3.5727711e+01
+   3.9750000e+01   1.3142140e+01   3.5735612e+01
+   3.9750000e+01   1.3179091e+01   3.5738893e+01
+   3.9750000e+01   1.3225289e+01   3.5744364e+01
+   3.9750000e+01   1.3285380e+01   3.5750000e+01
+   3.9750000e+01   1.3351380e+01   3.5760339e+01
+   3.9750000e+01   1.3413512e+01   3.5768570e+01
+   3.9750000e+01   1.3485198e+01   3.5776364e+01
+   3.9750000e+01   1.3539636e+01   3.5778083e+01
+   3.9750000e+01   1.3586083e+01   3.5781620e+01
+   3.9750000e+01   1.3649860e+01   3.5788785e+01
+   3.9750000e+01   1.3724041e+01   3.5795174e+01
+   3.9750000e+01   1.3795636e+01   3.5799347e+01
+   3.9750000e+01   1.3896884e+01   3.5810504e+01
+   3.9750000e+01   1.4007802e+01   3.5819636e+01
+   3.9750000e+01   1.4119207e+01   3.5823149e+01
+   3.9750000e+01   1.4275008e+01   3.5831579e+01
+   3.9750000e+01   1.4495909e+01   3.5833537e+01
+   3.9750000e+01   1.4732562e+01   3.5837397e+01
+   3.9750000e+01   1.4997446e+01   3.5833347e+01
+   3.9750000e+01   1.5706603e+01   3.5837281e+01
+   3.9750000e+01   1.6613545e+01   3.5844116e+01
+   3.9750000e+01   1.7261298e+01   3.5850289e+01
+   3.9750000e+01   1.8017446e+01   3.5853281e+01
+   3.9750000e+01   1.8879421e+01   3.5867727e+01
+   3.9750000e+01   1.9534612e+01   3.5871678e+01
+   3.9750000e+01   1.9774289e+01   3.5868719e+01
+   3.9750000e+01   1.9845992e+01   3.5868760e+01
+   3.9750000e+01   1.9857645e+01   3.5869248e+01
+   3.9750000e+01   1.9858744e+01   3.5869810e+01
+   3.9750000e+01   1.9851843e+01   3.5868702e+01
+   3.9750000e+01   1.9795959e+01   3.5873008e+01
+   3.9800000e+01   2.5103554e+00   3.4896107e+01
+   3.9800000e+01   2.5061901e+00   3.4902207e+01
+   3.9800000e+01   2.5121488e+00   3.4907306e+01
+   3.9800000e+01   2.5413554e+00   3.4914521e+01
+   3.9800000e+01   2.5794959e+00   3.4919405e+01
+   3.9800000e+01   2.6451405e+00   3.4928736e+01
+   3.9800000e+01   2.7416281e+00   3.4940488e+01
+   3.9800000e+01   2.8990331e+00   3.4952802e+01
+   3.9800000e+01   3.0880496e+00   3.4961322e+01
+   3.9800000e+01   3.3536529e+00   3.4973281e+01
+   3.9800000e+01   3.5827603e+00   3.4972736e+01
+   3.9800000e+01   3.8425455e+00   3.4984074e+01
+   3.9800000e+01   4.3142231e+00   3.5036645e+01
+   3.9800000e+01   5.2460165e+00   3.5170777e+01
+   3.9800000e+01   6.6648926e+00   3.5382711e+01
+   3.9800000e+01   8.2569008e+00   3.5621149e+01
+   3.9800000e+01   9.2870413e+00   3.5722876e+01
+   3.9800000e+01   9.5328760e+00   3.5630785e+01
+   3.9800000e+01   9.9026364e+00   3.5537066e+01
+   3.9800000e+01   1.0298083e+01   3.5480702e+01
+   3.9800000e+01   1.0770826e+01   3.5489091e+01
+   3.9800000e+01   1.1255678e+01   3.5531455e+01
+   3.9800000e+01   1.1602421e+01   3.5566000e+01
+   3.9800000e+01   1.1914041e+01   3.5601397e+01
+   3.9800000e+01   1.2147298e+01   3.5626901e+01
+   3.9800000e+01   1.2343058e+01   3.5648785e+01
+   3.9800000e+01   1.2494471e+01   3.5664835e+01
+   3.9800000e+01   1.2597438e+01   3.5676273e+01
+   3.9800000e+01   1.2688149e+01   3.5686380e+01
+   3.9800000e+01   1.2785116e+01   3.5697636e+01
+   3.9800000e+01   1.2848306e+01   3.5705074e+01
+   3.9800000e+01   1.2914322e+01   3.5711992e+01
+   3.9800000e+01   1.3001628e+01   3.5721826e+01
+   3.9800000e+01   1.3051289e+01   3.5725025e+01
+   3.9800000e+01   1.3089132e+01   3.5727711e+01
+   3.9800000e+01   1.3142140e+01   3.5735612e+01
+   3.9800000e+01   1.3179091e+01   3.5738893e+01
+   3.9800000e+01   1.3225289e+01   3.5744364e+01
+   3.9800000e+01   1.3285380e+01   3.5750000e+01
+   3.9800000e+01   1.3351380e+01   3.5760339e+01
+   3.9800000e+01   1.3413512e+01   3.5768570e+01
+   3.9800000e+01   1.3485198e+01   3.5776364e+01
+   3.9800000e+01   1.3539636e+01   3.5778083e+01
+   3.9800000e+01   1.3586083e+01   3.5781620e+01
+   3.9800000e+01   1.3649860e+01   3.5788785e+01
+   3.9800000e+01   1.3724041e+01   3.5795174e+01
+   3.9800000e+01   1.3795636e+01   3.5799347e+01
+   3.9800000e+01   1.3896884e+01   3.5810504e+01
+   3.9800000e+01   1.4007802e+01   3.5819636e+01
+   3.9800000e+01   1.4119207e+01   3.5823149e+01
+   3.9800000e+01   1.4275008e+01   3.5831579e+01
+   3.9800000e+01   1.4495909e+01   3.5833537e+01
+   3.9800000e+01   1.4732562e+01   3.5837397e+01
+   3.9800000e+01   1.4997446e+01   3.5833347e+01
+   3.9800000e+01   1.5706603e+01   3.5837281e+01
+   3.9800000e+01   1.6613545e+01   3.5844116e+01
+   3.9800000e+01   1.7261298e+01   3.5850289e+01
+   3.9800000e+01   1.8017446e+01   3.5853281e+01
+   3.9800000e+01   1.8879421e+01   3.5867727e+01
+   3.9800000e+01   1.9534612e+01   3.5871678e+01
+   3.9800000e+01   1.9774289e+01   3.5868719e+01
+   3.9800000e+01   1.9845992e+01   3.5868760e+01
+   3.9800000e+01   1.9857645e+01   3.5869248e+01
+   3.9800000e+01   1.9858744e+01   3.5869810e+01
+   3.9800000e+01   1.9851843e+01   3.5868702e+01
+   3.9800000e+01   1.9795959e+01   3.5873008e+01
+   3.9850000e+01   2.5103554e+00   3.4896107e+01
+   3.9850000e+01   2.5061901e+00   3.4902207e+01
+   3.9850000e+01   2.5121488e+00   3.4907306e+01
+   3.9850000e+01   2.5413554e+00   3.4914521e+01
+   3.9850000e+01   2.5794959e+00   3.4919405e+01
+   3.9850000e+01   2.6451405e+00   3.4928736e+01
+   3.9850000e+01   2.7416281e+00   3.4940488e+01
+   3.9850000e+01   2.8990331e+00   3.4952802e+01
+   3.9850000e+01   3.0880496e+00   3.4961322e+01
+   3.9850000e+01   3.3536529e+00   3.4973281e+01
+   3.9850000e+01   3.5827603e+00   3.4972736e+01
+   3.9850000e+01   3.8425455e+00   3.4984074e+01
+   3.9850000e+01   4.3142231e+00   3.5036645e+01
+   3.9850000e+01   5.2460165e+00   3.5170777e+01
+   3.9850000e+01   6.6648926e+00   3.5382711e+01
+   3.9850000e+01   8.2569008e+00   3.5621149e+01
+   3.9850000e+01   9.2870413e+00   3.5722876e+01
+   3.9850000e+01   9.5328760e+00   3.5630785e+01
+   3.9850000e+01   9.9026364e+00   3.5537066e+01
+   3.9850000e+01   1.0298083e+01   3.5480702e+01
+   3.9850000e+01   1.0770826e+01   3.5489091e+01
+   3.9850000e+01   1.1255678e+01   3.5531455e+01
+   3.9850000e+01   1.1602421e+01   3.5566000e+01
+   3.9850000e+01   1.1914041e+01   3.5601397e+01
+   3.9850000e+01   1.2147298e+01   3.5626901e+01
+   3.9850000e+01   1.2343058e+01   3.5648785e+01
+   3.9850000e+01   1.2494471e+01   3.5664835e+01
+   3.9850000e+01   1.2597438e+01   3.5676273e+01
+   3.9850000e+01   1.2688149e+01   3.5686380e+01
+   3.9850000e+01   1.2785116e+01   3.5697636e+01
+   3.9850000e+01   1.2848306e+01   3.5705074e+01
+   3.9850000e+01   1.2914322e+01   3.5711992e+01
+   3.9850000e+01   1.3001628e+01   3.5721826e+01
+   3.9850000e+01   1.3051289e+01   3.5725025e+01
+   3.9850000e+01   1.3089132e+01   3.5727711e+01
+   3.9850000e+01   1.3142140e+01   3.5735612e+01
+   3.9850000e+01   1.3179091e+01   3.5738893e+01
+   3.9850000e+01   1.3225289e+01   3.5744364e+01
+   3.9850000e+01   1.3285380e+01   3.5750000e+01
+   3.9850000e+01   1.3351380e+01   3.5760339e+01
+   3.9850000e+01   1.3413512e+01   3.5768570e+01
+   3.9850000e+01   1.3485198e+01   3.5776364e+01
+   3.9850000e+01   1.3539636e+01   3.5778083e+01
+   3.9850000e+01   1.3586083e+01   3.5781620e+01
+   3.9850000e+01   1.3649860e+01   3.5788785e+01
+   3.9850000e+01   1.3724041e+01   3.5795174e+01
+   3.9850000e+01   1.3795636e+01   3.5799347e+01
+   3.9850000e+01   1.3896884e+01   3.5810504e+01
+   3.9850000e+01   1.4007802e+01   3.5819636e+01
+   3.9850000e+01   1.4119207e+01   3.5823149e+01
+   3.9850000e+01   1.4275008e+01   3.5831579e+01
+   3.9850000e+01   1.4495909e+01   3.5833537e+01
+   3.9850000e+01   1.4732562e+01   3.5837397e+01
+   3.9850000e+01   1.4997446e+01   3.5833347e+01
+   3.9850000e+01   1.5706603e+01   3.5837281e+01
+   3.9850000e+01   1.6613545e+01   3.5844116e+01
+   3.9850000e+01   1.7261298e+01   3.5850289e+01
+   3.9850000e+01   1.8017446e+01   3.5853281e+01
+   3.9850000e+01   1.8879421e+01   3.5867727e+01
+   3.9850000e+01   1.9534612e+01   3.5871678e+01
+   3.9850000e+01   1.9774289e+01   3.5868719e+01
+   3.9850000e+01   1.9845992e+01   3.5868760e+01
+   3.9850000e+01   1.9857645e+01   3.5869248e+01
+   3.9850000e+01   1.9858744e+01   3.5869810e+01
+   3.9850000e+01   1.9851843e+01   3.5868702e+01
+   3.9850000e+01   1.9795959e+01   3.5873008e+01
+   3.9900000e+01   2.5103554e+00   3.4896107e+01
+   3.9900000e+01   2.5061901e+00   3.4902207e+01
+   3.9900000e+01   2.5121488e+00   3.4907306e+01
+   3.9900000e+01   2.5413554e+00   3.4914521e+01
+   3.9900000e+01   2.5794959e+00   3.4919405e+01
+   3.9900000e+01   2.6451405e+00   3.4928736e+01
+   3.9900000e+01   2.7416281e+00   3.4940488e+01
+   3.9900000e+01   2.8990331e+00   3.4952802e+01
+   3.9900000e+01   3.0880496e+00   3.4961322e+01
+   3.9900000e+01   3.3536529e+00   3.4973281e+01
+   3.9900000e+01   3.5827603e+00   3.4972736e+01
+   3.9900000e+01   3.8425455e+00   3.4984074e+01
+   3.9900000e+01   4.3142231e+00   3.5036645e+01
+   3.9900000e+01   5.2460165e+00   3.5170777e+01
+   3.9900000e+01   6.6648926e+00   3.5382711e+01
+   3.9900000e+01   8.2569008e+00   3.5621149e+01
+   3.9900000e+01   9.2870413e+00   3.5722876e+01
+   3.9900000e+01   9.5328760e+00   3.5630785e+01
+   3.9900000e+01   9.9026364e+00   3.5537066e+01
+   3.9900000e+01   1.0298083e+01   3.5480702e+01
+   3.9900000e+01   1.0770826e+01   3.5489091e+01
+   3.9900000e+01   1.1255678e+01   3.5531455e+01
+   3.9900000e+01   1.1602421e+01   3.5566000e+01
+   3.9900000e+01   1.1914041e+01   3.5601397e+01
+   3.9900000e+01   1.2147298e+01   3.5626901e+01
+   3.9900000e+01   1.2343058e+01   3.5648785e+01
+   3.9900000e+01   1.2494471e+01   3.5664835e+01
+   3.9900000e+01   1.2597438e+01   3.5676273e+01
+   3.9900000e+01   1.2688149e+01   3.5686380e+01
+   3.9900000e+01   1.2785116e+01   3.5697636e+01
+   3.9900000e+01   1.2848306e+01   3.5705074e+01
+   3.9900000e+01   1.2914322e+01   3.5711992e+01
+   3.9900000e+01   1.3001628e+01   3.5721826e+01
+   3.9900000e+01   1.3051289e+01   3.5725025e+01
+   3.9900000e+01   1.3089132e+01   3.5727711e+01
+   3.9900000e+01   1.3142140e+01   3.5735612e+01
+   3.9900000e+01   1.3179091e+01   3.5738893e+01
+   3.9900000e+01   1.3225289e+01   3.5744364e+01
+   3.9900000e+01   1.3285380e+01   3.5750000e+01
+   3.9900000e+01   1.3351380e+01   3.5760339e+01
+   3.9900000e+01   1.3413512e+01   3.5768570e+01
+   3.9900000e+01   1.3485198e+01   3.5776364e+01
+   3.9900000e+01   1.3539636e+01   3.5778083e+01
+   3.9900000e+01   1.3586083e+01   3.5781620e+01
+   3.9900000e+01   1.3649860e+01   3.5788785e+01
+   3.9900000e+01   1.3724041e+01   3.5795174e+01
+   3.9900000e+01   1.3795636e+01   3.5799347e+01
+   3.9900000e+01   1.3896884e+01   3.5810504e+01
+   3.9900000e+01   1.4007802e+01   3.5819636e+01
+   3.9900000e+01   1.4119207e+01   3.5823149e+01
+   3.9900000e+01   1.4275008e+01   3.5831579e+01
+   3.9900000e+01   1.4495909e+01   3.5833537e+01
+   3.9900000e+01   1.4732562e+01   3.5837397e+01
+   3.9900000e+01   1.4997446e+01   3.5833347e+01
+   3.9900000e+01   1.5706603e+01   3.5837281e+01
+   3.9900000e+01   1.6613545e+01   3.5844116e+01
+   3.9900000e+01   1.7261298e+01   3.5850289e+01
+   3.9900000e+01   1.8017446e+01   3.5853281e+01
+   3.9900000e+01   1.8879421e+01   3.5867727e+01
+   3.9900000e+01   1.9534612e+01   3.5871678e+01
+   3.9900000e+01   1.9774289e+01   3.5868719e+01
+   3.9900000e+01   1.9845992e+01   3.5868760e+01
+   3.9900000e+01   1.9857645e+01   3.5869248e+01
+   3.9900000e+01   1.9858744e+01   3.5869810e+01
+   3.9900000e+01   1.9851843e+01   3.5868702e+01
+   3.9900000e+01   1.9795959e+01   3.5873008e+01
+   3.9950000e+01   2.5103554e+00   3.4896107e+01
+   3.9950000e+01   2.5061901e+00   3.4902207e+01
+   3.9950000e+01   2.5121488e+00   3.4907306e+01
+   3.9950000e+01   2.5413554e+00   3.4914521e+01
+   3.9950000e+01   2.5794959e+00   3.4919405e+01
+   3.9950000e+01   2.6451405e+00   3.4928736e+01
+   3.9950000e+01   2.7416281e+00   3.4940488e+01
+   3.9950000e+01   2.8990331e+00   3.4952802e+01
+   3.9950000e+01   3.0880496e+00   3.4961322e+01
+   3.9950000e+01   3.3536529e+00   3.4973281e+01
+   3.9950000e+01   3.5827603e+00   3.4972736e+01
+   3.9950000e+01   3.8425455e+00   3.4984074e+01
+   3.9950000e+01   4.3142231e+00   3.5036645e+01
+   3.9950000e+01   5.2460165e+00   3.5170777e+01
+   3.9950000e+01   6.6648926e+00   3.5382711e+01
+   3.9950000e+01   8.2569008e+00   3.5621149e+01
+   3.9950000e+01   9.2870413e+00   3.5722876e+01
+   3.9950000e+01   9.5328760e+00   3.5630785e+01
+   3.9950000e+01   9.9026364e+00   3.5537066e+01
+   3.9950000e+01   1.0298083e+01   3.5480702e+01
+   3.9950000e+01   1.0770826e+01   3.5489091e+01
+   3.9950000e+01   1.1255678e+01   3.5531455e+01
+   3.9950000e+01   1.1602421e+01   3.5566000e+01
+   3.9950000e+01   1.1914041e+01   3.5601397e+01
+   3.9950000e+01   1.2147298e+01   3.5626901e+01
+   3.9950000e+01   1.2343058e+01   3.5648785e+01
+   3.9950000e+01   1.2494471e+01   3.5664835e+01
+   3.9950000e+01   1.2597438e+01   3.5676273e+01
+   3.9950000e+01   1.2688149e+01   3.5686380e+01
+   3.9950000e+01   1.2785116e+01   3.5697636e+01
+   3.9950000e+01   1.2848306e+01   3.5705074e+01
+   3.9950000e+01   1.2914322e+01   3.5711992e+01
+   3.9950000e+01   1.3001628e+01   3.5721826e+01
+   3.9950000e+01   1.3051289e+01   3.5725025e+01
+   3.9950000e+01   1.3089132e+01   3.5727711e+01
+   3.9950000e+01   1.3142140e+01   3.5735612e+01
+   3.9950000e+01   1.3179091e+01   3.5738893e+01
+   3.9950000e+01   1.3225289e+01   3.5744364e+01
+   3.9950000e+01   1.3285380e+01   3.5750000e+01
+   3.9950000e+01   1.3351380e+01   3.5760339e+01
+   3.9950000e+01   1.3413512e+01   3.5768570e+01
+   3.9950000e+01   1.3485198e+01   3.5776364e+01
+   3.9950000e+01   1.3539636e+01   3.5778083e+01
+   3.9950000e+01   1.3586083e+01   3.5781620e+01
+   3.9950000e+01   1.3649860e+01   3.5788785e+01
+   3.9950000e+01   1.3724041e+01   3.5795174e+01
+   3.9950000e+01   1.3795636e+01   3.5799347e+01
+   3.9950000e+01   1.3896884e+01   3.5810504e+01
+   3.9950000e+01   1.4007802e+01   3.5819636e+01
+   3.9950000e+01   1.4119207e+01   3.5823149e+01
+   3.9950000e+01   1.4275008e+01   3.5831579e+01
+   3.9950000e+01   1.4495909e+01   3.5833537e+01
+   3.9950000e+01   1.4732562e+01   3.5837397e+01
+   3.9950000e+01   1.4997446e+01   3.5833347e+01
+   3.9950000e+01   1.5706603e+01   3.5837281e+01
+   3.9950000e+01   1.6613545e+01   3.5844116e+01
+   3.9950000e+01   1.7261298e+01   3.5850289e+01
+   3.9950000e+01   1.8017446e+01   3.5853281e+01
+   3.9950000e+01   1.8879421e+01   3.5867727e+01
+   3.9950000e+01   1.9534612e+01   3.5871678e+01
+   3.9950000e+01   1.9774289e+01   3.5868719e+01
+   3.9950000e+01   1.9845992e+01   3.5868760e+01
+   3.9950000e+01   1.9857645e+01   3.5869248e+01
+   3.9950000e+01   1.9858744e+01   3.5869810e+01
+   3.9950000e+01   1.9851843e+01   3.5868702e+01
+   3.9950000e+01   1.9795959e+01   3.5873008e+01
+   4.0000000e+01   2.5103554e+00   3.4896107e+01
+   4.0000000e+01   2.5061901e+00   3.4902207e+01
+   4.0000000e+01   2.5121488e+00   3.4907306e+01
+   4.0000000e+01   2.5413554e+00   3.4914521e+01
+   4.0000000e+01   2.5794959e+00   3.4919405e+01
+   4.0000000e+01   2.6451405e+00   3.4928736e+01
+   4.0000000e+01   2.7416281e+00   3.4940488e+01
+   4.0000000e+01   2.8990331e+00   3.4952802e+01
+   4.0000000e+01   3.0880496e+00   3.4961322e+01
+   4.0000000e+01   3.3536529e+00   3.4973281e+01
+   4.0000000e+01   3.5827603e+00   3.4972736e+01
+   4.0000000e+01   3.8425455e+00   3.4984074e+01
+   4.0000000e+01   4.3142231e+00   3.5036645e+01
+   4.0000000e+01   5.2460165e+00   3.5170777e+01
+   4.0000000e+01   6.6648926e+00   3.5382711e+01
+   4.0000000e+01   8.2569008e+00   3.5621149e+01
+   4.0000000e+01   9.2870413e+00   3.5722876e+01
+   4.0000000e+01   9.5328760e+00   3.5630785e+01
+   4.0000000e+01   9.9026364e+00   3.5537066e+01
+   4.0000000e+01   1.0298083e+01   3.5480702e+01
+   4.0000000e+01   1.0770826e+01   3.5489091e+01
+   4.0000000e+01   1.1255678e+01   3.5531455e+01
+   4.0000000e+01   1.1602421e+01   3.5566000e+01
+   4.0000000e+01   1.1914041e+01   3.5601397e+01
+   4.0000000e+01   1.2147298e+01   3.5626901e+01
+   4.0000000e+01   1.2343058e+01   3.5648785e+01
+   4.0000000e+01   1.2494471e+01   3.5664835e+01
+   4.0000000e+01   1.2597438e+01   3.5676273e+01
+   4.0000000e+01   1.2688149e+01   3.5686380e+01
+   4.0000000e+01   1.2785116e+01   3.5697636e+01
+   4.0000000e+01   1.2848306e+01   3.5705074e+01
+   4.0000000e+01   1.2914322e+01   3.5711992e+01
+   4.0000000e+01   1.3001628e+01   3.5721826e+01
+   4.0000000e+01   1.3051289e+01   3.5725025e+01
+   4.0000000e+01   1.3089132e+01   3.5727711e+01
+   4.0000000e+01   1.3142140e+01   3.5735612e+01
+   4.0000000e+01   1.3179091e+01   3.5738893e+01
+   4.0000000e+01   1.3225289e+01   3.5744364e+01
+   4.0000000e+01   1.3285380e+01   3.5750000e+01
+   4.0000000e+01   1.3351380e+01   3.5760339e+01
+   4.0000000e+01   1.3413512e+01   3.5768570e+01
+   4.0000000e+01   1.3485198e+01   3.5776364e+01
+   4.0000000e+01   1.3539636e+01   3.5778083e+01
+   4.0000000e+01   1.3586083e+01   3.5781620e+01
+   4.0000000e+01   1.3649860e+01   3.5788785e+01
+   4.0000000e+01   1.3724041e+01   3.5795174e+01
+   4.0000000e+01   1.3795636e+01   3.5799347e+01
+   4.0000000e+01   1.3896884e+01   3.5810504e+01
+   4.0000000e+01   1.4007802e+01   3.5819636e+01
+   4.0000000e+01   1.4119207e+01   3.5823149e+01
+   4.0000000e+01   1.4275008e+01   3.5831579e+01
+   4.0000000e+01   1.4495909e+01   3.5833537e+01
+   4.0000000e+01   1.4732562e+01   3.5837397e+01
+   4.0000000e+01   1.4997446e+01   3.5833347e+01
+   4.0000000e+01   1.5706603e+01   3.5837281e+01
+   4.0000000e+01   1.6613545e+01   3.5844116e+01
+   4.0000000e+01   1.7261298e+01   3.5850289e+01
+   4.0000000e+01   1.8017446e+01   3.5853281e+01
+   4.0000000e+01   1.8879421e+01   3.5867727e+01
+   4.0000000e+01   1.9534612e+01   3.5871678e+01
+   4.0000000e+01   1.9774289e+01   3.5868719e+01
+   4.0000000e+01   1.9845992e+01   3.5868760e+01
+   4.0000000e+01   1.9857645e+01   3.5869248e+01
+   4.0000000e+01   1.9858744e+01   3.5869810e+01
+   4.0000000e+01   1.9851843e+01   3.5868702e+01
+   4.0000000e+01   1.9795959e+01   3.5873008e+01
+   4.0050000e+01   2.5103554e+00   3.4896107e+01
+   4.0050000e+01   2.5061901e+00   3.4902207e+01
+   4.0050000e+01   2.5121488e+00   3.4907306e+01
+   4.0050000e+01   2.5413554e+00   3.4914521e+01
+   4.0050000e+01   2.5794959e+00   3.4919405e+01
+   4.0050000e+01   2.6451405e+00   3.4928736e+01
+   4.0050000e+01   2.7416281e+00   3.4940488e+01
+   4.0050000e+01   2.8990331e+00   3.4952802e+01
+   4.0050000e+01   3.0880496e+00   3.4961322e+01
+   4.0050000e+01   3.3536529e+00   3.4973281e+01
+   4.0050000e+01   3.5827603e+00   3.4972736e+01
+   4.0050000e+01   3.8425455e+00   3.4984074e+01
+   4.0050000e+01   4.3142231e+00   3.5036645e+01
+   4.0050000e+01   5.2460165e+00   3.5170777e+01
+   4.0050000e+01   6.6648926e+00   3.5382711e+01
+   4.0050000e+01   8.2569008e+00   3.5621149e+01
+   4.0050000e+01   9.2870413e+00   3.5722876e+01
+   4.0050000e+01   9.5328760e+00   3.5630785e+01
+   4.0050000e+01   9.9026364e+00   3.5537066e+01
+   4.0050000e+01   1.0298083e+01   3.5480702e+01
+   4.0050000e+01   1.0770826e+01   3.5489091e+01
+   4.0050000e+01   1.1255678e+01   3.5531455e+01
+   4.0050000e+01   1.1602421e+01   3.5566000e+01
+   4.0050000e+01   1.1914041e+01   3.5601397e+01
+   4.0050000e+01   1.2147298e+01   3.5626901e+01
+   4.0050000e+01   1.2343058e+01   3.5648785e+01
+   4.0050000e+01   1.2494471e+01   3.5664835e+01
+   4.0050000e+01   1.2597438e+01   3.5676273e+01
+   4.0050000e+01   1.2688149e+01   3.5686380e+01
+   4.0050000e+01   1.2785116e+01   3.5697636e+01
+   4.0050000e+01   1.2848306e+01   3.5705074e+01
+   4.0050000e+01   1.2914322e+01   3.5711992e+01
+   4.0050000e+01   1.3001628e+01   3.5721826e+01
+   4.0050000e+01   1.3051289e+01   3.5725025e+01
+   4.0050000e+01   1.3089132e+01   3.5727711e+01
+   4.0050000e+01   1.3142140e+01   3.5735612e+01
+   4.0050000e+01   1.3179091e+01   3.5738893e+01
+   4.0050000e+01   1.3225289e+01   3.5744364e+01
+   4.0050000e+01   1.3285380e+01   3.5750000e+01
+   4.0050000e+01   1.3351380e+01   3.5760339e+01
+   4.0050000e+01   1.3413512e+01   3.5768570e+01
+   4.0050000e+01   1.3485198e+01   3.5776364e+01
+   4.0050000e+01   1.3539636e+01   3.5778083e+01
+   4.0050000e+01   1.3586083e+01   3.5781620e+01
+   4.0050000e+01   1.3649860e+01   3.5788785e+01
+   4.0050000e+01   1.3724041e+01   3.5795174e+01
+   4.0050000e+01   1.3795636e+01   3.5799347e+01
+   4.0050000e+01   1.3896884e+01   3.5810504e+01
+   4.0050000e+01   1.4007802e+01   3.5819636e+01
+   4.0050000e+01   1.4119207e+01   3.5823149e+01
+   4.0050000e+01   1.4275008e+01   3.5831579e+01
+   4.0050000e+01   1.4495909e+01   3.5833537e+01
+   4.0050000e+01   1.4732562e+01   3.5837397e+01
+   4.0050000e+01   1.4997446e+01   3.5833347e+01
+   4.0050000e+01   1.5706603e+01   3.5837281e+01
+   4.0050000e+01   1.6613545e+01   3.5844116e+01
+   4.0050000e+01   1.7261298e+01   3.5850289e+01
+   4.0050000e+01   1.8017446e+01   3.5853281e+01
+   4.0050000e+01   1.8879421e+01   3.5867727e+01
+   4.0050000e+01   1.9534612e+01   3.5871678e+01
+   4.0050000e+01   1.9774289e+01   3.5868719e+01
+   4.0050000e+01   1.9845992e+01   3.5868760e+01
+   4.0050000e+01   1.9857645e+01   3.5869248e+01
+   4.0050000e+01   1.9858744e+01   3.5869810e+01
+   4.0050000e+01   1.9851843e+01   3.5868702e+01
+   4.0050000e+01   1.9795959e+01   3.5873008e+01
+   4.0100000e+01   2.5103554e+00   3.4896107e+01
+   4.0100000e+01   2.5061901e+00   3.4902207e+01
+   4.0100000e+01   2.5121488e+00   3.4907306e+01
+   4.0100000e+01   2.5413554e+00   3.4914521e+01
+   4.0100000e+01   2.5794959e+00   3.4919405e+01
+   4.0100000e+01   2.6451405e+00   3.4928736e+01
+   4.0100000e+01   2.7416281e+00   3.4940488e+01
+   4.0100000e+01   2.8990331e+00   3.4952802e+01
+   4.0100000e+01   3.0880496e+00   3.4961322e+01
+   4.0100000e+01   3.3536529e+00   3.4973281e+01
+   4.0100000e+01   3.5827603e+00   3.4972736e+01
+   4.0100000e+01   3.8425455e+00   3.4984074e+01
+   4.0100000e+01   4.3142231e+00   3.5036645e+01
+   4.0100000e+01   5.2460165e+00   3.5170777e+01
+   4.0100000e+01   6.6648926e+00   3.5382711e+01
+   4.0100000e+01   8.2569008e+00   3.5621149e+01
+   4.0100000e+01   9.2870413e+00   3.5722876e+01
+   4.0100000e+01   9.5328760e+00   3.5630785e+01
+   4.0100000e+01   9.9026364e+00   3.5537066e+01
+   4.0100000e+01   1.0298083e+01   3.5480702e+01
+   4.0100000e+01   1.0770826e+01   3.5489091e+01
+   4.0100000e+01   1.1255678e+01   3.5531455e+01
+   4.0100000e+01   1.1602421e+01   3.5566000e+01
+   4.0100000e+01   1.1914041e+01   3.5601397e+01
+   4.0100000e+01   1.2147298e+01   3.5626901e+01
+   4.0100000e+01   1.2343058e+01   3.5648785e+01
+   4.0100000e+01   1.2494471e+01   3.5664835e+01
+   4.0100000e+01   1.2597438e+01   3.5676273e+01
+   4.0100000e+01   1.2688149e+01   3.5686380e+01
+   4.0100000e+01   1.2785116e+01   3.5697636e+01
+   4.0100000e+01   1.2848306e+01   3.5705074e+01
+   4.0100000e+01   1.2914322e+01   3.5711992e+01
+   4.0100000e+01   1.3001628e+01   3.5721826e+01
+   4.0100000e+01   1.3051289e+01   3.5725025e+01
+   4.0100000e+01   1.3089132e+01   3.5727711e+01
+   4.0100000e+01   1.3142140e+01   3.5735612e+01
+   4.0100000e+01   1.3179091e+01   3.5738893e+01
+   4.0100000e+01   1.3225289e+01   3.5744364e+01
+   4.0100000e+01   1.3285380e+01   3.5750000e+01
+   4.0100000e+01   1.3351380e+01   3.5760339e+01
+   4.0100000e+01   1.3413512e+01   3.5768570e+01
+   4.0100000e+01   1.3485198e+01   3.5776364e+01
+   4.0100000e+01   1.3539636e+01   3.5778083e+01
+   4.0100000e+01   1.3586083e+01   3.5781620e+01
+   4.0100000e+01   1.3649860e+01   3.5788785e+01
+   4.0100000e+01   1.3724041e+01   3.5795174e+01
+   4.0100000e+01   1.3795636e+01   3.5799347e+01
+   4.0100000e+01   1.3896884e+01   3.5810504e+01
+   4.0100000e+01   1.4007802e+01   3.5819636e+01
+   4.0100000e+01   1.4119207e+01   3.5823149e+01
+   4.0100000e+01   1.4275008e+01   3.5831579e+01
+   4.0100000e+01   1.4495909e+01   3.5833537e+01
+   4.0100000e+01   1.4732562e+01   3.5837397e+01
+   4.0100000e+01   1.4997446e+01   3.5833347e+01
+   4.0100000e+01   1.5706603e+01   3.5837281e+01
+   4.0100000e+01   1.6613545e+01   3.5844116e+01
+   4.0100000e+01   1.7261298e+01   3.5850289e+01
+   4.0100000e+01   1.8017446e+01   3.5853281e+01
+   4.0100000e+01   1.8879421e+01   3.5867727e+01
+   4.0100000e+01   1.9534612e+01   3.5871678e+01
+   4.0100000e+01   1.9774289e+01   3.5868719e+01
+   4.0100000e+01   1.9845992e+01   3.5868760e+01
+   4.0100000e+01   1.9857645e+01   3.5869248e+01
+   4.0100000e+01   1.9858744e+01   3.5869810e+01
+   4.0100000e+01   1.9851843e+01   3.5868702e+01
+   4.0100000e+01   1.9795959e+01   3.5873008e+01
+   4.0150000e+01   2.5103554e+00   3.4896107e+01
+   4.0150000e+01   2.5061901e+00   3.4902207e+01
+   4.0150000e+01   2.5121488e+00   3.4907306e+01
+   4.0150000e+01   2.5413554e+00   3.4914521e+01
+   4.0150000e+01   2.5794959e+00   3.4919405e+01
+   4.0150000e+01   2.6451405e+00   3.4928736e+01
+   4.0150000e+01   2.7416281e+00   3.4940488e+01
+   4.0150000e+01   2.8990331e+00   3.4952802e+01
+   4.0150000e+01   3.0880496e+00   3.4961322e+01
+   4.0150000e+01   3.3536529e+00   3.4973281e+01
+   4.0150000e+01   3.5827603e+00   3.4972736e+01
+   4.0150000e+01   3.8425455e+00   3.4984074e+01
+   4.0150000e+01   4.3142231e+00   3.5036645e+01
+   4.0150000e+01   5.2460165e+00   3.5170777e+01
+   4.0150000e+01   6.6648926e+00   3.5382711e+01
+   4.0150000e+01   8.2569008e+00   3.5621149e+01
+   4.0150000e+01   9.2870413e+00   3.5722876e+01
+   4.0150000e+01   9.5328760e+00   3.5630785e+01
+   4.0150000e+01   9.9026364e+00   3.5537066e+01
+   4.0150000e+01   1.0298083e+01   3.5480702e+01
+   4.0150000e+01   1.0770826e+01   3.5489091e+01
+   4.0150000e+01   1.1255678e+01   3.5531455e+01
+   4.0150000e+01   1.1602421e+01   3.5566000e+01
+   4.0150000e+01   1.1914041e+01   3.5601397e+01
+   4.0150000e+01   1.2147298e+01   3.5626901e+01
+   4.0150000e+01   1.2343058e+01   3.5648785e+01
+   4.0150000e+01   1.2494471e+01   3.5664835e+01
+   4.0150000e+01   1.2597438e+01   3.5676273e+01
+   4.0150000e+01   1.2688149e+01   3.5686380e+01
+   4.0150000e+01   1.2785116e+01   3.5697636e+01
+   4.0150000e+01   1.2848306e+01   3.5705074e+01
+   4.0150000e+01   1.2914322e+01   3.5711992e+01
+   4.0150000e+01   1.3001628e+01   3.5721826e+01
+   4.0150000e+01   1.3051289e+01   3.5725025e+01
+   4.0150000e+01   1.3089132e+01   3.5727711e+01
+   4.0150000e+01   1.3142140e+01   3.5735612e+01
+   4.0150000e+01   1.3179091e+01   3.5738893e+01
+   4.0150000e+01   1.3225289e+01   3.5744364e+01
+   4.0150000e+01   1.3285380e+01   3.5750000e+01
+   4.0150000e+01   1.3351380e+01   3.5760339e+01
+   4.0150000e+01   1.3413512e+01   3.5768570e+01
+   4.0150000e+01   1.3485198e+01   3.5776364e+01
+   4.0150000e+01   1.3539636e+01   3.5778083e+01
+   4.0150000e+01   1.3586083e+01   3.5781620e+01
+   4.0150000e+01   1.3649860e+01   3.5788785e+01
+   4.0150000e+01   1.3724041e+01   3.5795174e+01
+   4.0150000e+01   1.3795636e+01   3.5799347e+01
+   4.0150000e+01   1.3896884e+01   3.5810504e+01
+   4.0150000e+01   1.4007802e+01   3.5819636e+01
+   4.0150000e+01   1.4119207e+01   3.5823149e+01
+   4.0150000e+01   1.4275008e+01   3.5831579e+01
+   4.0150000e+01   1.4495909e+01   3.5833537e+01
+   4.0150000e+01   1.4732562e+01   3.5837397e+01
+   4.0150000e+01   1.4997446e+01   3.5833347e+01
+   4.0150000e+01   1.5706603e+01   3.5837281e+01
+   4.0150000e+01   1.6613545e+01   3.5844116e+01
+   4.0150000e+01   1.7261298e+01   3.5850289e+01
+   4.0150000e+01   1.8017446e+01   3.5853281e+01
+   4.0150000e+01   1.8879421e+01   3.5867727e+01
+   4.0150000e+01   1.9534612e+01   3.5871678e+01
+   4.0150000e+01   1.9774289e+01   3.5868719e+01
+   4.0150000e+01   1.9845992e+01   3.5868760e+01
+   4.0150000e+01   1.9857645e+01   3.5869248e+01
+   4.0150000e+01   1.9858744e+01   3.5869810e+01
+   4.0150000e+01   1.9851843e+01   3.5868702e+01
+   4.0150000e+01   1.9795959e+01   3.5873008e+01
+   4.0200000e+01   2.5103554e+00   3.4896107e+01
+   4.0200000e+01   2.5061901e+00   3.4902207e+01
+   4.0200000e+01   2.5121488e+00   3.4907306e+01
+   4.0200000e+01   2.5413554e+00   3.4914521e+01
+   4.0200000e+01   2.5794959e+00   3.4919405e+01
+   4.0200000e+01   2.6451405e+00   3.4928736e+01
+   4.0200000e+01   2.7416281e+00   3.4940488e+01
+   4.0200000e+01   2.8990331e+00   3.4952802e+01
+   4.0200000e+01   3.0880496e+00   3.4961322e+01
+   4.0200000e+01   3.3536529e+00   3.4973281e+01
+   4.0200000e+01   3.5827603e+00   3.4972736e+01
+   4.0200000e+01   3.8425455e+00   3.4984074e+01
+   4.0200000e+01   4.3142231e+00   3.5036645e+01
+   4.0200000e+01   5.2460165e+00   3.5170777e+01
+   4.0200000e+01   6.6648926e+00   3.5382711e+01
+   4.0200000e+01   8.2569008e+00   3.5621149e+01
+   4.0200000e+01   9.2870413e+00   3.5722876e+01
+   4.0200000e+01   9.5328760e+00   3.5630785e+01
+   4.0200000e+01   9.9026364e+00   3.5537066e+01
+   4.0200000e+01   1.0298083e+01   3.5480702e+01
+   4.0200000e+01   1.0770826e+01   3.5489091e+01
+   4.0200000e+01   1.1255678e+01   3.5531455e+01
+   4.0200000e+01   1.1602421e+01   3.5566000e+01
+   4.0200000e+01   1.1914041e+01   3.5601397e+01
+   4.0200000e+01   1.2147298e+01   3.5626901e+01
+   4.0200000e+01   1.2343058e+01   3.5648785e+01
+   4.0200000e+01   1.2494471e+01   3.5664835e+01
+   4.0200000e+01   1.2597438e+01   3.5676273e+01
+   4.0200000e+01   1.2688149e+01   3.5686380e+01
+   4.0200000e+01   1.2785116e+01   3.5697636e+01
+   4.0200000e+01   1.2848306e+01   3.5705074e+01
+   4.0200000e+01   1.2914322e+01   3.5711992e+01
+   4.0200000e+01   1.3001628e+01   3.5721826e+01
+   4.0200000e+01   1.3051289e+01   3.5725025e+01
+   4.0200000e+01   1.3089132e+01   3.5727711e+01
+   4.0200000e+01   1.3142140e+01   3.5735612e+01
+   4.0200000e+01   1.3179091e+01   3.5738893e+01
+   4.0200000e+01   1.3225289e+01   3.5744364e+01
+   4.0200000e+01   1.3285380e+01   3.5750000e+01
+   4.0200000e+01   1.3351380e+01   3.5760339e+01
+   4.0200000e+01   1.3413512e+01   3.5768570e+01
+   4.0200000e+01   1.3485198e+01   3.5776364e+01
+   4.0200000e+01   1.3539636e+01   3.5778083e+01
+   4.0200000e+01   1.3586083e+01   3.5781620e+01
+   4.0200000e+01   1.3649860e+01   3.5788785e+01
+   4.0200000e+01   1.3724041e+01   3.5795174e+01
+   4.0200000e+01   1.3795636e+01   3.5799347e+01
+   4.0200000e+01   1.3896884e+01   3.5810504e+01
+   4.0200000e+01   1.4007802e+01   3.5819636e+01
+   4.0200000e+01   1.4119207e+01   3.5823149e+01
+   4.0200000e+01   1.4275008e+01   3.5831579e+01
+   4.0200000e+01   1.4495909e+01   3.5833537e+01
+   4.0200000e+01   1.4732562e+01   3.5837397e+01
+   4.0200000e+01   1.4997446e+01   3.5833347e+01
+   4.0200000e+01   1.5706603e+01   3.5837281e+01
+   4.0200000e+01   1.6613545e+01   3.5844116e+01
+   4.0200000e+01   1.7261298e+01   3.5850289e+01
+   4.0200000e+01   1.8017446e+01   3.5853281e+01
+   4.0200000e+01   1.8879421e+01   3.5867727e+01
+   4.0200000e+01   1.9534612e+01   3.5871678e+01
+   4.0200000e+01   1.9774289e+01   3.5868719e+01
+   4.0200000e+01   1.9845992e+01   3.5868760e+01
+   4.0200000e+01   1.9857645e+01   3.5869248e+01
+   4.0200000e+01   1.9858744e+01   3.5869810e+01
+   4.0200000e+01   1.9851843e+01   3.5868702e+01
+   4.0200000e+01   1.9795959e+01   3.5873008e+01
+   4.0250000e+01   2.5103554e+00   3.4896107e+01
+   4.0250000e+01   2.5061901e+00   3.4902207e+01
+   4.0250000e+01   2.5121488e+00   3.4907306e+01
+   4.0250000e+01   2.5413554e+00   3.4914521e+01
+   4.0250000e+01   2.5794959e+00   3.4919405e+01
+   4.0250000e+01   2.6451405e+00   3.4928736e+01
+   4.0250000e+01   2.7416281e+00   3.4940488e+01
+   4.0250000e+01   2.8990331e+00   3.4952802e+01
+   4.0250000e+01   3.0880496e+00   3.4961322e+01
+   4.0250000e+01   3.3536529e+00   3.4973281e+01
+   4.0250000e+01   3.5827603e+00   3.4972736e+01
+   4.0250000e+01   3.8425455e+00   3.4984074e+01
+   4.0250000e+01   4.3142231e+00   3.5036645e+01
+   4.0250000e+01   5.2460165e+00   3.5170777e+01
+   4.0250000e+01   6.6648926e+00   3.5382711e+01
+   4.0250000e+01   8.2569008e+00   3.5621149e+01
+   4.0250000e+01   9.2870413e+00   3.5722876e+01
+   4.0250000e+01   9.5328760e+00   3.5630785e+01
+   4.0250000e+01   9.9026364e+00   3.5537066e+01
+   4.0250000e+01   1.0298083e+01   3.5480702e+01
+   4.0250000e+01   1.0770826e+01   3.5489091e+01
+   4.0250000e+01   1.1255678e+01   3.5531455e+01
+   4.0250000e+01   1.1602421e+01   3.5566000e+01
+   4.0250000e+01   1.1914041e+01   3.5601397e+01
+   4.0250000e+01   1.2147298e+01   3.5626901e+01
+   4.0250000e+01   1.2343058e+01   3.5648785e+01
+   4.0250000e+01   1.2494471e+01   3.5664835e+01
+   4.0250000e+01   1.2597438e+01   3.5676273e+01
+   4.0250000e+01   1.2688149e+01   3.5686380e+01
+   4.0250000e+01   1.2785116e+01   3.5697636e+01
+   4.0250000e+01   1.2848306e+01   3.5705074e+01
+   4.0250000e+01   1.2914322e+01   3.5711992e+01
+   4.0250000e+01   1.3001628e+01   3.5721826e+01
+   4.0250000e+01   1.3051289e+01   3.5725025e+01
+   4.0250000e+01   1.3089132e+01   3.5727711e+01
+   4.0250000e+01   1.3142140e+01   3.5735612e+01
+   4.0250000e+01   1.3179091e+01   3.5738893e+01
+   4.0250000e+01   1.3225289e+01   3.5744364e+01
+   4.0250000e+01   1.3285380e+01   3.5750000e+01
+   4.0250000e+01   1.3351380e+01   3.5760339e+01
+   4.0250000e+01   1.3413512e+01   3.5768570e+01
+   4.0250000e+01   1.3485198e+01   3.5776364e+01
+   4.0250000e+01   1.3539636e+01   3.5778083e+01
+   4.0250000e+01   1.3586083e+01   3.5781620e+01
+   4.0250000e+01   1.3649860e+01   3.5788785e+01
+   4.0250000e+01   1.3724041e+01   3.5795174e+01
+   4.0250000e+01   1.3795636e+01   3.5799347e+01
+   4.0250000e+01   1.3896884e+01   3.5810504e+01
+   4.0250000e+01   1.4007802e+01   3.5819636e+01
+   4.0250000e+01   1.4119207e+01   3.5823149e+01
+   4.0250000e+01   1.4275008e+01   3.5831579e+01
+   4.0250000e+01   1.4495909e+01   3.5833537e+01
+   4.0250000e+01   1.4732562e+01   3.5837397e+01
+   4.0250000e+01   1.4997446e+01   3.5833347e+01
+   4.0250000e+01   1.5706603e+01   3.5837281e+01
+   4.0250000e+01   1.6613545e+01   3.5844116e+01
+   4.0250000e+01   1.7261298e+01   3.5850289e+01
+   4.0250000e+01   1.8017446e+01   3.5853281e+01
+   4.0250000e+01   1.8879421e+01   3.5867727e+01
+   4.0250000e+01   1.9534612e+01   3.5871678e+01
+   4.0250000e+01   1.9774289e+01   3.5868719e+01
+   4.0250000e+01   1.9845992e+01   3.5868760e+01
+   4.0250000e+01   1.9857645e+01   3.5869248e+01
+   4.0250000e+01   1.9858744e+01   3.5869810e+01
+   4.0250000e+01   1.9851843e+01   3.5868702e+01
+   4.0250000e+01   1.9795959e+01   3.5873008e+01
+   4.0300000e+01   2.5103554e+00   3.4896107e+01
+   4.0300000e+01   2.5061901e+00   3.4902207e+01
+   4.0300000e+01   2.5121488e+00   3.4907306e+01
+   4.0300000e+01   2.5413554e+00   3.4914521e+01
+   4.0300000e+01   2.5794959e+00   3.4919405e+01
+   4.0300000e+01   2.6451405e+00   3.4928736e+01
+   4.0300000e+01   2.7416281e+00   3.4940488e+01
+   4.0300000e+01   2.8990331e+00   3.4952802e+01
+   4.0300000e+01   3.0880496e+00   3.4961322e+01
+   4.0300000e+01   3.3536529e+00   3.4973281e+01
+   4.0300000e+01   3.5827603e+00   3.4972736e+01
+   4.0300000e+01   3.8425455e+00   3.4984074e+01
+   4.0300000e+01   4.3142231e+00   3.5036645e+01
+   4.0300000e+01   5.2460165e+00   3.5170777e+01
+   4.0300000e+01   6.6648926e+00   3.5382711e+01
+   4.0300000e+01   8.2569008e+00   3.5621149e+01
+   4.0300000e+01   9.2870413e+00   3.5722876e+01
+   4.0300000e+01   9.5328760e+00   3.5630785e+01
+   4.0300000e+01   9.9026364e+00   3.5537066e+01
+   4.0300000e+01   1.0298083e+01   3.5480702e+01
+   4.0300000e+01   1.0770826e+01   3.5489091e+01
+   4.0300000e+01   1.1255678e+01   3.5531455e+01
+   4.0300000e+01   1.1602421e+01   3.5566000e+01
+   4.0300000e+01   1.1914041e+01   3.5601397e+01
+   4.0300000e+01   1.2147298e+01   3.5626901e+01
+   4.0300000e+01   1.2343058e+01   3.5648785e+01
+   4.0300000e+01   1.2494471e+01   3.5664835e+01
+   4.0300000e+01   1.2597438e+01   3.5676273e+01
+   4.0300000e+01   1.2688149e+01   3.5686380e+01
+   4.0300000e+01   1.2785116e+01   3.5697636e+01
+   4.0300000e+01   1.2848306e+01   3.5705074e+01
+   4.0300000e+01   1.2914322e+01   3.5711992e+01
+   4.0300000e+01   1.3001628e+01   3.5721826e+01
+   4.0300000e+01   1.3051289e+01   3.5725025e+01
+   4.0300000e+01   1.3089132e+01   3.5727711e+01
+   4.0300000e+01   1.3142140e+01   3.5735612e+01
+   4.0300000e+01   1.3179091e+01   3.5738893e+01
+   4.0300000e+01   1.3225289e+01   3.5744364e+01
+   4.0300000e+01   1.3285380e+01   3.5750000e+01
+   4.0300000e+01   1.3351380e+01   3.5760339e+01
+   4.0300000e+01   1.3413512e+01   3.5768570e+01
+   4.0300000e+01   1.3485198e+01   3.5776364e+01
+   4.0300000e+01   1.3539636e+01   3.5778083e+01
+   4.0300000e+01   1.3586083e+01   3.5781620e+01
+   4.0300000e+01   1.3649860e+01   3.5788785e+01
+   4.0300000e+01   1.3724041e+01   3.5795174e+01
+   4.0300000e+01   1.3795636e+01   3.5799347e+01
+   4.0300000e+01   1.3896884e+01   3.5810504e+01
+   4.0300000e+01   1.4007802e+01   3.5819636e+01
+   4.0300000e+01   1.4119207e+01   3.5823149e+01
+   4.0300000e+01   1.4275008e+01   3.5831579e+01
+   4.0300000e+01   1.4495909e+01   3.5833537e+01
+   4.0300000e+01   1.4732562e+01   3.5837397e+01
+   4.0300000e+01   1.4997446e+01   3.5833347e+01
+   4.0300000e+01   1.5706603e+01   3.5837281e+01
+   4.0300000e+01   1.6613545e+01   3.5844116e+01
+   4.0300000e+01   1.7261298e+01   3.5850289e+01
+   4.0300000e+01   1.8017446e+01   3.5853281e+01
+   4.0300000e+01   1.8879421e+01   3.5867727e+01
+   4.0300000e+01   1.9534612e+01   3.5871678e+01
+   4.0300000e+01   1.9774289e+01   3.5868719e+01
+   4.0300000e+01   1.9845992e+01   3.5868760e+01
+   4.0300000e+01   1.9857645e+01   3.5869248e+01
+   4.0300000e+01   1.9858744e+01   3.5869810e+01
+   4.0300000e+01   1.9851843e+01   3.5868702e+01
+   4.0300000e+01   1.9795959e+01   3.5873008e+01
+   4.0350000e+01   2.5103554e+00   3.4896107e+01
+   4.0350000e+01   2.5061901e+00   3.4902207e+01
+   4.0350000e+01   2.5121488e+00   3.4907306e+01
+   4.0350000e+01   2.5413554e+00   3.4914521e+01
+   4.0350000e+01   2.5794959e+00   3.4919405e+01
+   4.0350000e+01   2.6451405e+00   3.4928736e+01
+   4.0350000e+01   2.7416281e+00   3.4940488e+01
+   4.0350000e+01   2.8990331e+00   3.4952802e+01
+   4.0350000e+01   3.0880496e+00   3.4961322e+01
+   4.0350000e+01   3.3536529e+00   3.4973281e+01
+   4.0350000e+01   3.5827603e+00   3.4972736e+01
+   4.0350000e+01   3.8425455e+00   3.4984074e+01
+   4.0350000e+01   4.3142231e+00   3.5036645e+01
+   4.0350000e+01   5.2460165e+00   3.5170777e+01
+   4.0350000e+01   6.6648926e+00   3.5382711e+01
+   4.0350000e+01   8.2569008e+00   3.5621149e+01
+   4.0350000e+01   9.2870413e+00   3.5722876e+01
+   4.0350000e+01   9.5328760e+00   3.5630785e+01
+   4.0350000e+01   9.9026364e+00   3.5537066e+01
+   4.0350000e+01   1.0298083e+01   3.5480702e+01
+   4.0350000e+01   1.0770826e+01   3.5489091e+01
+   4.0350000e+01   1.1255678e+01   3.5531455e+01
+   4.0350000e+01   1.1602421e+01   3.5566000e+01
+   4.0350000e+01   1.1914041e+01   3.5601397e+01
+   4.0350000e+01   1.2147298e+01   3.5626901e+01
+   4.0350000e+01   1.2343058e+01   3.5648785e+01
+   4.0350000e+01   1.2494471e+01   3.5664835e+01
+   4.0350000e+01   1.2597438e+01   3.5676273e+01
+   4.0350000e+01   1.2688149e+01   3.5686380e+01
+   4.0350000e+01   1.2785116e+01   3.5697636e+01
+   4.0350000e+01   1.2848306e+01   3.5705074e+01
+   4.0350000e+01   1.2914322e+01   3.5711992e+01
+   4.0350000e+01   1.3001628e+01   3.5721826e+01
+   4.0350000e+01   1.3051289e+01   3.5725025e+01
+   4.0350000e+01   1.3089132e+01   3.5727711e+01
+   4.0350000e+01   1.3142140e+01   3.5735612e+01
+   4.0350000e+01   1.3179091e+01   3.5738893e+01
+   4.0350000e+01   1.3225289e+01   3.5744364e+01
+   4.0350000e+01   1.3285380e+01   3.5750000e+01
+   4.0350000e+01   1.3351380e+01   3.5760339e+01
+   4.0350000e+01   1.3413512e+01   3.5768570e+01
+   4.0350000e+01   1.3485198e+01   3.5776364e+01
+   4.0350000e+01   1.3539636e+01   3.5778083e+01
+   4.0350000e+01   1.3586083e+01   3.5781620e+01
+   4.0350000e+01   1.3649860e+01   3.5788785e+01
+   4.0350000e+01   1.3724041e+01   3.5795174e+01
+   4.0350000e+01   1.3795636e+01   3.5799347e+01
+   4.0350000e+01   1.3896884e+01   3.5810504e+01
+   4.0350000e+01   1.4007802e+01   3.5819636e+01
+   4.0350000e+01   1.4119207e+01   3.5823149e+01
+   4.0350000e+01   1.4275008e+01   3.5831579e+01
+   4.0350000e+01   1.4495909e+01   3.5833537e+01
+   4.0350000e+01   1.4732562e+01   3.5837397e+01
+   4.0350000e+01   1.4997446e+01   3.5833347e+01
+   4.0350000e+01   1.5706603e+01   3.5837281e+01
+   4.0350000e+01   1.6613545e+01   3.5844116e+01
+   4.0350000e+01   1.7261298e+01   3.5850289e+01
+   4.0350000e+01   1.8017446e+01   3.5853281e+01
+   4.0350000e+01   1.8879421e+01   3.5867727e+01
+   4.0350000e+01   1.9534612e+01   3.5871678e+01
+   4.0350000e+01   1.9774289e+01   3.5868719e+01
+   4.0350000e+01   1.9845992e+01   3.5868760e+01
+   4.0350000e+01   1.9857645e+01   3.5869248e+01
+   4.0350000e+01   1.9858744e+01   3.5869810e+01
+   4.0350000e+01   1.9851843e+01   3.5868702e+01
+   4.0350000e+01   1.9795959e+01   3.5873008e+01
+   4.0400000e+01   2.5103554e+00   3.4896107e+01
+   4.0400000e+01   2.5061901e+00   3.4902207e+01
+   4.0400000e+01   2.5121488e+00   3.4907306e+01
+   4.0400000e+01   2.5413554e+00   3.4914521e+01
+   4.0400000e+01   2.5794959e+00   3.4919405e+01
+   4.0400000e+01   2.6451405e+00   3.4928736e+01
+   4.0400000e+01   2.7416281e+00   3.4940488e+01
+   4.0400000e+01   2.8990331e+00   3.4952802e+01
+   4.0400000e+01   3.0880496e+00   3.4961322e+01
+   4.0400000e+01   3.3536529e+00   3.4973281e+01
+   4.0400000e+01   3.5827603e+00   3.4972736e+01
+   4.0400000e+01   3.8425455e+00   3.4984074e+01
+   4.0400000e+01   4.3142231e+00   3.5036645e+01
+   4.0400000e+01   5.2460165e+00   3.5170777e+01
+   4.0400000e+01   6.6648926e+00   3.5382711e+01
+   4.0400000e+01   8.2569008e+00   3.5621149e+01
+   4.0400000e+01   9.2870413e+00   3.5722876e+01
+   4.0400000e+01   9.5328760e+00   3.5630785e+01
+   4.0400000e+01   9.9026364e+00   3.5537066e+01
+   4.0400000e+01   1.0298083e+01   3.5480702e+01
+   4.0400000e+01   1.0770826e+01   3.5489091e+01
+   4.0400000e+01   1.1255678e+01   3.5531455e+01
+   4.0400000e+01   1.1602421e+01   3.5566000e+01
+   4.0400000e+01   1.1914041e+01   3.5601397e+01
+   4.0400000e+01   1.2147298e+01   3.5626901e+01
+   4.0400000e+01   1.2343058e+01   3.5648785e+01
+   4.0400000e+01   1.2494471e+01   3.5664835e+01
+   4.0400000e+01   1.2597438e+01   3.5676273e+01
+   4.0400000e+01   1.2688149e+01   3.5686380e+01
+   4.0400000e+01   1.2785116e+01   3.5697636e+01
+   4.0400000e+01   1.2848306e+01   3.5705074e+01
+   4.0400000e+01   1.2914322e+01   3.5711992e+01
+   4.0400000e+01   1.3001628e+01   3.5721826e+01
+   4.0400000e+01   1.3051289e+01   3.5725025e+01
+   4.0400000e+01   1.3089132e+01   3.5727711e+01
+   4.0400000e+01   1.3142140e+01   3.5735612e+01
+   4.0400000e+01   1.3179091e+01   3.5738893e+01
+   4.0400000e+01   1.3225289e+01   3.5744364e+01
+   4.0400000e+01   1.3285380e+01   3.5750000e+01
+   4.0400000e+01   1.3351380e+01   3.5760339e+01
+   4.0400000e+01   1.3413512e+01   3.5768570e+01
+   4.0400000e+01   1.3485198e+01   3.5776364e+01
+   4.0400000e+01   1.3539636e+01   3.5778083e+01
+   4.0400000e+01   1.3586083e+01   3.5781620e+01
+   4.0400000e+01   1.3649860e+01   3.5788785e+01
+   4.0400000e+01   1.3724041e+01   3.5795174e+01
+   4.0400000e+01   1.3795636e+01   3.5799347e+01
+   4.0400000e+01   1.3896884e+01   3.5810504e+01
+   4.0400000e+01   1.4007802e+01   3.5819636e+01
+   4.0400000e+01   1.4119207e+01   3.5823149e+01
+   4.0400000e+01   1.4275008e+01   3.5831579e+01
+   4.0400000e+01   1.4495909e+01   3.5833537e+01
+   4.0400000e+01   1.4732562e+01   3.5837397e+01
+   4.0400000e+01   1.4997446e+01   3.5833347e+01
+   4.0400000e+01   1.5706603e+01   3.5837281e+01
+   4.0400000e+01   1.6613545e+01   3.5844116e+01
+   4.0400000e+01   1.7261298e+01   3.5850289e+01
+   4.0400000e+01   1.8017446e+01   3.5853281e+01
+   4.0400000e+01   1.8879421e+01   3.5867727e+01
+   4.0400000e+01   1.9534612e+01   3.5871678e+01
+   4.0400000e+01   1.9774289e+01   3.5868719e+01
+   4.0400000e+01   1.9845992e+01   3.5868760e+01
+   4.0400000e+01   1.9857645e+01   3.5869248e+01
+   4.0400000e+01   1.9858744e+01   3.5869810e+01
+   4.0400000e+01   1.9851843e+01   3.5868702e+01
+   4.0400000e+01   1.9795959e+01   3.5873008e+01
+   4.0450000e+01   2.5103554e+00   3.4896107e+01
+   4.0450000e+01   2.5061901e+00   3.4902207e+01
+   4.0450000e+01   2.5121488e+00   3.4907306e+01
+   4.0450000e+01   2.5413554e+00   3.4914521e+01
+   4.0450000e+01   2.5794959e+00   3.4919405e+01
+   4.0450000e+01   2.6451405e+00   3.4928736e+01
+   4.0450000e+01   2.7416281e+00   3.4940488e+01
+   4.0450000e+01   2.8990331e+00   3.4952802e+01
+   4.0450000e+01   3.0880496e+00   3.4961322e+01
+   4.0450000e+01   3.3536529e+00   3.4973281e+01
+   4.0450000e+01   3.5827603e+00   3.4972736e+01
+   4.0450000e+01   3.8425455e+00   3.4984074e+01
+   4.0450000e+01   4.3142231e+00   3.5036645e+01
+   4.0450000e+01   5.2460165e+00   3.5170777e+01
+   4.0450000e+01   6.6648926e+00   3.5382711e+01
+   4.0450000e+01   8.2569008e+00   3.5621149e+01
+   4.0450000e+01   9.2870413e+00   3.5722876e+01
+   4.0450000e+01   9.5328760e+00   3.5630785e+01
+   4.0450000e+01   9.9026364e+00   3.5537066e+01
+   4.0450000e+01   1.0298083e+01   3.5480702e+01
+   4.0450000e+01   1.0770826e+01   3.5489091e+01
+   4.0450000e+01   1.1255678e+01   3.5531455e+01
+   4.0450000e+01   1.1602421e+01   3.5566000e+01
+   4.0450000e+01   1.1914041e+01   3.5601397e+01
+   4.0450000e+01   1.2147298e+01   3.5626901e+01
+   4.0450000e+01   1.2343058e+01   3.5648785e+01
+   4.0450000e+01   1.2494471e+01   3.5664835e+01
+   4.0450000e+01   1.2597438e+01   3.5676273e+01
+   4.0450000e+01   1.2688149e+01   3.5686380e+01
+   4.0450000e+01   1.2785116e+01   3.5697636e+01
+   4.0450000e+01   1.2848306e+01   3.5705074e+01
+   4.0450000e+01   1.2914322e+01   3.5711992e+01
+   4.0450000e+01   1.3001628e+01   3.5721826e+01
+   4.0450000e+01   1.3051289e+01   3.5725025e+01
+   4.0450000e+01   1.3089132e+01   3.5727711e+01
+   4.0450000e+01   1.3142140e+01   3.5735612e+01
+   4.0450000e+01   1.3179091e+01   3.5738893e+01
+   4.0450000e+01   1.3225289e+01   3.5744364e+01
+   4.0450000e+01   1.3285380e+01   3.5750000e+01
+   4.0450000e+01   1.3351380e+01   3.5760339e+01
+   4.0450000e+01   1.3413512e+01   3.5768570e+01
+   4.0450000e+01   1.3485198e+01   3.5776364e+01
+   4.0450000e+01   1.3539636e+01   3.5778083e+01
+   4.0450000e+01   1.3586083e+01   3.5781620e+01
+   4.0450000e+01   1.3649860e+01   3.5788785e+01
+   4.0450000e+01   1.3724041e+01   3.5795174e+01
+   4.0450000e+01   1.3795636e+01   3.5799347e+01
+   4.0450000e+01   1.3896884e+01   3.5810504e+01
+   4.0450000e+01   1.4007802e+01   3.5819636e+01
+   4.0450000e+01   1.4119207e+01   3.5823149e+01
+   4.0450000e+01   1.4275008e+01   3.5831579e+01
+   4.0450000e+01   1.4495909e+01   3.5833537e+01
+   4.0450000e+01   1.4732562e+01   3.5837397e+01
+   4.0450000e+01   1.4997446e+01   3.5833347e+01
+   4.0450000e+01   1.5706603e+01   3.5837281e+01
+   4.0450000e+01   1.6613545e+01   3.5844116e+01
+   4.0450000e+01   1.7261298e+01   3.5850289e+01
+   4.0450000e+01   1.8017446e+01   3.5853281e+01
+   4.0450000e+01   1.8879421e+01   3.5867727e+01
+   4.0450000e+01   1.9534612e+01   3.5871678e+01
+   4.0450000e+01   1.9774289e+01   3.5868719e+01
+   4.0450000e+01   1.9845992e+01   3.5868760e+01
+   4.0450000e+01   1.9857645e+01   3.5869248e+01
+   4.0450000e+01   1.9858744e+01   3.5869810e+01
+   4.0450000e+01   1.9851843e+01   3.5868702e+01
+   4.0450000e+01   1.9795959e+01   3.5873008e+01
+   4.0500000e+01   2.5103554e+00   3.4896107e+01
+   4.0500000e+01   2.5061901e+00   3.4902207e+01
+   4.0500000e+01   2.5121488e+00   3.4907306e+01
+   4.0500000e+01   2.5413554e+00   3.4914521e+01
+   4.0500000e+01   2.5794959e+00   3.4919405e+01
+   4.0500000e+01   2.6451405e+00   3.4928736e+01
+   4.0500000e+01   2.7416281e+00   3.4940488e+01
+   4.0500000e+01   2.8990331e+00   3.4952802e+01
+   4.0500000e+01   3.0880496e+00   3.4961322e+01
+   4.0500000e+01   3.3536529e+00   3.4973281e+01
+   4.0500000e+01   3.5827603e+00   3.4972736e+01
+   4.0500000e+01   3.8425455e+00   3.4984074e+01
+   4.0500000e+01   4.3142231e+00   3.5036645e+01
+   4.0500000e+01   5.2460165e+00   3.5170777e+01
+   4.0500000e+01   6.6648926e+00   3.5382711e+01
+   4.0500000e+01   8.2569008e+00   3.5621149e+01
+   4.0500000e+01   9.2870413e+00   3.5722876e+01
+   4.0500000e+01   9.5328760e+00   3.5630785e+01
+   4.0500000e+01   9.9026364e+00   3.5537066e+01
+   4.0500000e+01   1.0298083e+01   3.5480702e+01
+   4.0500000e+01   1.0770826e+01   3.5489091e+01
+   4.0500000e+01   1.1255678e+01   3.5531455e+01
+   4.0500000e+01   1.1602421e+01   3.5566000e+01
+   4.0500000e+01   1.1914041e+01   3.5601397e+01
+   4.0500000e+01   1.2147298e+01   3.5626901e+01
+   4.0500000e+01   1.2343058e+01   3.5648785e+01
+   4.0500000e+01   1.2494471e+01   3.5664835e+01
+   4.0500000e+01   1.2597438e+01   3.5676273e+01
+   4.0500000e+01   1.2688149e+01   3.5686380e+01
+   4.0500000e+01   1.2785116e+01   3.5697636e+01
+   4.0500000e+01   1.2848306e+01   3.5705074e+01
+   4.0500000e+01   1.2914322e+01   3.5711992e+01
+   4.0500000e+01   1.3001628e+01   3.5721826e+01
+   4.0500000e+01   1.3051289e+01   3.5725025e+01
+   4.0500000e+01   1.3089132e+01   3.5727711e+01
+   4.0500000e+01   1.3142140e+01   3.5735612e+01
+   4.0500000e+01   1.3179091e+01   3.5738893e+01
+   4.0500000e+01   1.3225289e+01   3.5744364e+01
+   4.0500000e+01   1.3285380e+01   3.5750000e+01
+   4.0500000e+01   1.3351380e+01   3.5760339e+01
+   4.0500000e+01   1.3413512e+01   3.5768570e+01
+   4.0500000e+01   1.3485198e+01   3.5776364e+01
+   4.0500000e+01   1.3539636e+01   3.5778083e+01
+   4.0500000e+01   1.3586083e+01   3.5781620e+01
+   4.0500000e+01   1.3649860e+01   3.5788785e+01
+   4.0500000e+01   1.3724041e+01   3.5795174e+01
+   4.0500000e+01   1.3795636e+01   3.5799347e+01
+   4.0500000e+01   1.3896884e+01   3.5810504e+01
+   4.0500000e+01   1.4007802e+01   3.5819636e+01
+   4.0500000e+01   1.4119207e+01   3.5823149e+01
+   4.0500000e+01   1.4275008e+01   3.5831579e+01
+   4.0500000e+01   1.4495909e+01   3.5833537e+01
+   4.0500000e+01   1.4732562e+01   3.5837397e+01
+   4.0500000e+01   1.4997446e+01   3.5833347e+01
+   4.0500000e+01   1.5706603e+01   3.5837281e+01
+   4.0500000e+01   1.6613545e+01   3.5844116e+01
+   4.0500000e+01   1.7261298e+01   3.5850289e+01
+   4.0500000e+01   1.8017446e+01   3.5853281e+01
+   4.0500000e+01   1.8879421e+01   3.5867727e+01
+   4.0500000e+01   1.9534612e+01   3.5871678e+01
+   4.0500000e+01   1.9774289e+01   3.5868719e+01
+   4.0500000e+01   1.9845992e+01   3.5868760e+01
+   4.0500000e+01   1.9857645e+01   3.5869248e+01
+   4.0500000e+01   1.9858744e+01   3.5869810e+01
+   4.0500000e+01   1.9851843e+01   3.5868702e+01
+   4.0500000e+01   1.9795959e+01   3.5873008e+01
+   4.0550000e+01   2.5103554e+00   3.4896107e+01
+   4.0550000e+01   2.5061901e+00   3.4902207e+01
+   4.0550000e+01   2.5121488e+00   3.4907306e+01
+   4.0550000e+01   2.5413554e+00   3.4914521e+01
+   4.0550000e+01   2.5794959e+00   3.4919405e+01
+   4.0550000e+01   2.6451405e+00   3.4928736e+01
+   4.0550000e+01   2.7416281e+00   3.4940488e+01
+   4.0550000e+01   2.8990331e+00   3.4952802e+01
+   4.0550000e+01   3.0880496e+00   3.4961322e+01
+   4.0550000e+01   3.3536529e+00   3.4973281e+01
+   4.0550000e+01   3.5827603e+00   3.4972736e+01
+   4.0550000e+01   3.8425455e+00   3.4984074e+01
+   4.0550000e+01   4.3142231e+00   3.5036645e+01
+   4.0550000e+01   5.2460165e+00   3.5170777e+01
+   4.0550000e+01   6.6648926e+00   3.5382711e+01
+   4.0550000e+01   8.2569008e+00   3.5621149e+01
+   4.0550000e+01   9.2870413e+00   3.5722876e+01
+   4.0550000e+01   9.5328760e+00   3.5630785e+01
+   4.0550000e+01   9.9026364e+00   3.5537066e+01
+   4.0550000e+01   1.0298083e+01   3.5480702e+01
+   4.0550000e+01   1.0770826e+01   3.5489091e+01
+   4.0550000e+01   1.1255678e+01   3.5531455e+01
+   4.0550000e+01   1.1602421e+01   3.5566000e+01
+   4.0550000e+01   1.1914041e+01   3.5601397e+01
+   4.0550000e+01   1.2147298e+01   3.5626901e+01
+   4.0550000e+01   1.2343058e+01   3.5648785e+01
+   4.0550000e+01   1.2494471e+01   3.5664835e+01
+   4.0550000e+01   1.2597438e+01   3.5676273e+01
+   4.0550000e+01   1.2688149e+01   3.5686380e+01
+   4.0550000e+01   1.2785116e+01   3.5697636e+01
+   4.0550000e+01   1.2848306e+01   3.5705074e+01
+   4.0550000e+01   1.2914322e+01   3.5711992e+01
+   4.0550000e+01   1.3001628e+01   3.5721826e+01
+   4.0550000e+01   1.3051289e+01   3.5725025e+01
+   4.0550000e+01   1.3089132e+01   3.5727711e+01
+   4.0550000e+01   1.3142140e+01   3.5735612e+01
+   4.0550000e+01   1.3179091e+01   3.5738893e+01
+   4.0550000e+01   1.3225289e+01   3.5744364e+01
+   4.0550000e+01   1.3285380e+01   3.5750000e+01
+   4.0550000e+01   1.3351380e+01   3.5760339e+01
+   4.0550000e+01   1.3413512e+01   3.5768570e+01
+   4.0550000e+01   1.3485198e+01   3.5776364e+01
+   4.0550000e+01   1.3539636e+01   3.5778083e+01
+   4.0550000e+01   1.3586083e+01   3.5781620e+01
+   4.0550000e+01   1.3649860e+01   3.5788785e+01
+   4.0550000e+01   1.3724041e+01   3.5795174e+01
+   4.0550000e+01   1.3795636e+01   3.5799347e+01
+   4.0550000e+01   1.3896884e+01   3.5810504e+01
+   4.0550000e+01   1.4007802e+01   3.5819636e+01
+   4.0550000e+01   1.4119207e+01   3.5823149e+01
+   4.0550000e+01   1.4275008e+01   3.5831579e+01
+   4.0550000e+01   1.4495909e+01   3.5833537e+01
+   4.0550000e+01   1.4732562e+01   3.5837397e+01
+   4.0550000e+01   1.4997446e+01   3.5833347e+01
+   4.0550000e+01   1.5706603e+01   3.5837281e+01
+   4.0550000e+01   1.6613545e+01   3.5844116e+01
+   4.0550000e+01   1.7261298e+01   3.5850289e+01
+   4.0550000e+01   1.8017446e+01   3.5853281e+01
+   4.0550000e+01   1.8879421e+01   3.5867727e+01
+   4.0550000e+01   1.9534612e+01   3.5871678e+01
+   4.0550000e+01   1.9774289e+01   3.5868719e+01
+   4.0550000e+01   1.9845992e+01   3.5868760e+01
+   4.0550000e+01   1.9857645e+01   3.5869248e+01
+   4.0550000e+01   1.9858744e+01   3.5869810e+01
+   4.0550000e+01   1.9851843e+01   3.5868702e+01
+   4.0550000e+01   1.9795959e+01   3.5873008e+01
+   4.0600000e+01   2.5103554e+00   3.4896107e+01
+   4.0600000e+01   2.5061901e+00   3.4902207e+01
+   4.0600000e+01   2.5121488e+00   3.4907306e+01
+   4.0600000e+01   2.5413554e+00   3.4914521e+01
+   4.0600000e+01   2.5794959e+00   3.4919405e+01
+   4.0600000e+01   2.6451405e+00   3.4928736e+01
+   4.0600000e+01   2.7416281e+00   3.4940488e+01
+   4.0600000e+01   2.8990331e+00   3.4952802e+01
+   4.0600000e+01   3.0880496e+00   3.4961322e+01
+   4.0600000e+01   3.3536529e+00   3.4973281e+01
+   4.0600000e+01   3.5827603e+00   3.4972736e+01
+   4.0600000e+01   3.8425455e+00   3.4984074e+01
+   4.0600000e+01   4.3142231e+00   3.5036645e+01
+   4.0600000e+01   5.2460165e+00   3.5170777e+01
+   4.0600000e+01   6.6648926e+00   3.5382711e+01
+   4.0600000e+01   8.2569008e+00   3.5621149e+01
+   4.0600000e+01   9.2870413e+00   3.5722876e+01
+   4.0600000e+01   9.5328760e+00   3.5630785e+01
+   4.0600000e+01   9.9026364e+00   3.5537066e+01
+   4.0600000e+01   1.0298083e+01   3.5480702e+01
+   4.0600000e+01   1.0770826e+01   3.5489091e+01
+   4.0600000e+01   1.1255678e+01   3.5531455e+01
+   4.0600000e+01   1.1602421e+01   3.5566000e+01
+   4.0600000e+01   1.1914041e+01   3.5601397e+01
+   4.0600000e+01   1.2147298e+01   3.5626901e+01
+   4.0600000e+01   1.2343058e+01   3.5648785e+01
+   4.0600000e+01   1.2494471e+01   3.5664835e+01
+   4.0600000e+01   1.2597438e+01   3.5676273e+01
+   4.0600000e+01   1.2688149e+01   3.5686380e+01
+   4.0600000e+01   1.2785116e+01   3.5697636e+01
+   4.0600000e+01   1.2848306e+01   3.5705074e+01
+   4.0600000e+01   1.2914322e+01   3.5711992e+01
+   4.0600000e+01   1.3001628e+01   3.5721826e+01
+   4.0600000e+01   1.3051289e+01   3.5725025e+01
+   4.0600000e+01   1.3089132e+01   3.5727711e+01
+   4.0600000e+01   1.3142140e+01   3.5735612e+01
+   4.0600000e+01   1.3179091e+01   3.5738893e+01
+   4.0600000e+01   1.3225289e+01   3.5744364e+01
+   4.0600000e+01   1.3285380e+01   3.5750000e+01
+   4.0600000e+01   1.3351380e+01   3.5760339e+01
+   4.0600000e+01   1.3413512e+01   3.5768570e+01
+   4.0600000e+01   1.3485198e+01   3.5776364e+01
+   4.0600000e+01   1.3539636e+01   3.5778083e+01
+   4.0600000e+01   1.3586083e+01   3.5781620e+01
+   4.0600000e+01   1.3649860e+01   3.5788785e+01
+   4.0600000e+01   1.3724041e+01   3.5795174e+01
+   4.0600000e+01   1.3795636e+01   3.5799347e+01
+   4.0600000e+01   1.3896884e+01   3.5810504e+01
+   4.0600000e+01   1.4007802e+01   3.5819636e+01
+   4.0600000e+01   1.4119207e+01   3.5823149e+01
+   4.0600000e+01   1.4275008e+01   3.5831579e+01
+   4.0600000e+01   1.4495909e+01   3.5833537e+01
+   4.0600000e+01   1.4732562e+01   3.5837397e+01
+   4.0600000e+01   1.4997446e+01   3.5833347e+01
+   4.0600000e+01   1.5706603e+01   3.5837281e+01
+   4.0600000e+01   1.6613545e+01   3.5844116e+01
+   4.0600000e+01   1.7261298e+01   3.5850289e+01
+   4.0600000e+01   1.8017446e+01   3.5853281e+01
+   4.0600000e+01   1.8879421e+01   3.5867727e+01
+   4.0600000e+01   1.9534612e+01   3.5871678e+01
+   4.0600000e+01   1.9774289e+01   3.5868719e+01
+   4.0600000e+01   1.9845992e+01   3.5868760e+01
+   4.0600000e+01   1.9857645e+01   3.5869248e+01
+   4.0600000e+01   1.9858744e+01   3.5869810e+01
+   4.0600000e+01   1.9851843e+01   3.5868702e+01
+   4.0600000e+01   1.9795959e+01   3.5873008e+01
+   4.0650000e+01   2.5103554e+00   3.4896107e+01
+   4.0650000e+01   2.5061901e+00   3.4902207e+01
+   4.0650000e+01   2.5121488e+00   3.4907306e+01
+   4.0650000e+01   2.5413554e+00   3.4914521e+01
+   4.0650000e+01   2.5794959e+00   3.4919405e+01
+   4.0650000e+01   2.6451405e+00   3.4928736e+01
+   4.0650000e+01   2.7416281e+00   3.4940488e+01
+   4.0650000e+01   2.8990331e+00   3.4952802e+01
+   4.0650000e+01   3.0880496e+00   3.4961322e+01
+   4.0650000e+01   3.3536529e+00   3.4973281e+01
+   4.0650000e+01   3.5827603e+00   3.4972736e+01
+   4.0650000e+01   3.8425455e+00   3.4984074e+01
+   4.0650000e+01   4.3142231e+00   3.5036645e+01
+   4.0650000e+01   5.2460165e+00   3.5170777e+01
+   4.0650000e+01   6.6648926e+00   3.5382711e+01
+   4.0650000e+01   8.2569008e+00   3.5621149e+01
+   4.0650000e+01   9.2870413e+00   3.5722876e+01
+   4.0650000e+01   9.5328760e+00   3.5630785e+01
+   4.0650000e+01   9.9026364e+00   3.5537066e+01
+   4.0650000e+01   1.0298083e+01   3.5480702e+01
+   4.0650000e+01   1.0770826e+01   3.5489091e+01
+   4.0650000e+01   1.1255678e+01   3.5531455e+01
+   4.0650000e+01   1.1602421e+01   3.5566000e+01
+   4.0650000e+01   1.1914041e+01   3.5601397e+01
+   4.0650000e+01   1.2147298e+01   3.5626901e+01
+   4.0650000e+01   1.2343058e+01   3.5648785e+01
+   4.0650000e+01   1.2494471e+01   3.5664835e+01
+   4.0650000e+01   1.2597438e+01   3.5676273e+01
+   4.0650000e+01   1.2688149e+01   3.5686380e+01
+   4.0650000e+01   1.2785116e+01   3.5697636e+01
+   4.0650000e+01   1.2848306e+01   3.5705074e+01
+   4.0650000e+01   1.2914322e+01   3.5711992e+01
+   4.0650000e+01   1.3001628e+01   3.5721826e+01
+   4.0650000e+01   1.3051289e+01   3.5725025e+01
+   4.0650000e+01   1.3089132e+01   3.5727711e+01
+   4.0650000e+01   1.3142140e+01   3.5735612e+01
+   4.0650000e+01   1.3179091e+01   3.5738893e+01
+   4.0650000e+01   1.3225289e+01   3.5744364e+01
+   4.0650000e+01   1.3285380e+01   3.5750000e+01
+   4.0650000e+01   1.3351380e+01   3.5760339e+01
+   4.0650000e+01   1.3413512e+01   3.5768570e+01
+   4.0650000e+01   1.3485198e+01   3.5776364e+01
+   4.0650000e+01   1.3539636e+01   3.5778083e+01
+   4.0650000e+01   1.3586083e+01   3.5781620e+01
+   4.0650000e+01   1.3649860e+01   3.5788785e+01
+   4.0650000e+01   1.3724041e+01   3.5795174e+01
+   4.0650000e+01   1.3795636e+01   3.5799347e+01
+   4.0650000e+01   1.3896884e+01   3.5810504e+01
+   4.0650000e+01   1.4007802e+01   3.5819636e+01
+   4.0650000e+01   1.4119207e+01   3.5823149e+01
+   4.0650000e+01   1.4275008e+01   3.5831579e+01
+   4.0650000e+01   1.4495909e+01   3.5833537e+01
+   4.0650000e+01   1.4732562e+01   3.5837397e+01
+   4.0650000e+01   1.4997446e+01   3.5833347e+01
+   4.0650000e+01   1.5706603e+01   3.5837281e+01
+   4.0650000e+01   1.6613545e+01   3.5844116e+01
+   4.0650000e+01   1.7261298e+01   3.5850289e+01
+   4.0650000e+01   1.8017446e+01   3.5853281e+01
+   4.0650000e+01   1.8879421e+01   3.5867727e+01
+   4.0650000e+01   1.9534612e+01   3.5871678e+01
+   4.0650000e+01   1.9774289e+01   3.5868719e+01
+   4.0650000e+01   1.9845992e+01   3.5868760e+01
+   4.0650000e+01   1.9857645e+01   3.5869248e+01
+   4.0650000e+01   1.9858744e+01   3.5869810e+01
+   4.0650000e+01   1.9851843e+01   3.5868702e+01
+   4.0650000e+01   1.9795959e+01   3.5873008e+01
+   4.0700000e+01   2.5103554e+00   3.4896107e+01
+   4.0700000e+01   2.5061901e+00   3.4902207e+01
+   4.0700000e+01   2.5121488e+00   3.4907306e+01
+   4.0700000e+01   2.5413554e+00   3.4914521e+01
+   4.0700000e+01   2.5794959e+00   3.4919405e+01
+   4.0700000e+01   2.6451405e+00   3.4928736e+01
+   4.0700000e+01   2.7416281e+00   3.4940488e+01
+   4.0700000e+01   2.8990331e+00   3.4952802e+01
+   4.0700000e+01   3.0880496e+00   3.4961322e+01
+   4.0700000e+01   3.3536529e+00   3.4973281e+01
+   4.0700000e+01   3.5827603e+00   3.4972736e+01
+   4.0700000e+01   3.8425455e+00   3.4984074e+01
+   4.0700000e+01   4.3142231e+00   3.5036645e+01
+   4.0700000e+01   5.2460165e+00   3.5170777e+01
+   4.0700000e+01   6.6648926e+00   3.5382711e+01
+   4.0700000e+01   8.2569008e+00   3.5621149e+01
+   4.0700000e+01   9.2870413e+00   3.5722876e+01
+   4.0700000e+01   9.5328760e+00   3.5630785e+01
+   4.0700000e+01   9.9026364e+00   3.5537066e+01
+   4.0700000e+01   1.0298083e+01   3.5480702e+01
+   4.0700000e+01   1.0770826e+01   3.5489091e+01
+   4.0700000e+01   1.1255678e+01   3.5531455e+01
+   4.0700000e+01   1.1602421e+01   3.5566000e+01
+   4.0700000e+01   1.1914041e+01   3.5601397e+01
+   4.0700000e+01   1.2147298e+01   3.5626901e+01
+   4.0700000e+01   1.2343058e+01   3.5648785e+01
+   4.0700000e+01   1.2494471e+01   3.5664835e+01
+   4.0700000e+01   1.2597438e+01   3.5676273e+01
+   4.0700000e+01   1.2688149e+01   3.5686380e+01
+   4.0700000e+01   1.2785116e+01   3.5697636e+01
+   4.0700000e+01   1.2848306e+01   3.5705074e+01
+   4.0700000e+01   1.2914322e+01   3.5711992e+01
+   4.0700000e+01   1.3001628e+01   3.5721826e+01
+   4.0700000e+01   1.3051289e+01   3.5725025e+01
+   4.0700000e+01   1.3089132e+01   3.5727711e+01
+   4.0700000e+01   1.3142140e+01   3.5735612e+01
+   4.0700000e+01   1.3179091e+01   3.5738893e+01
+   4.0700000e+01   1.3225289e+01   3.5744364e+01
+   4.0700000e+01   1.3285380e+01   3.5750000e+01
+   4.0700000e+01   1.3351380e+01   3.5760339e+01
+   4.0700000e+01   1.3413512e+01   3.5768570e+01
+   4.0700000e+01   1.3485198e+01   3.5776364e+01
+   4.0700000e+01   1.3539636e+01   3.5778083e+01
+   4.0700000e+01   1.3586083e+01   3.5781620e+01
+   4.0700000e+01   1.3649860e+01   3.5788785e+01
+   4.0700000e+01   1.3724041e+01   3.5795174e+01
+   4.0700000e+01   1.3795636e+01   3.5799347e+01
+   4.0700000e+01   1.3896884e+01   3.5810504e+01
+   4.0700000e+01   1.4007802e+01   3.5819636e+01
+   4.0700000e+01   1.4119207e+01   3.5823149e+01
+   4.0700000e+01   1.4275008e+01   3.5831579e+01
+   4.0700000e+01   1.4495909e+01   3.5833537e+01
+   4.0700000e+01   1.4732562e+01   3.5837397e+01
+   4.0700000e+01   1.4997446e+01   3.5833347e+01
+   4.0700000e+01   1.5706603e+01   3.5837281e+01
+   4.0700000e+01   1.6613545e+01   3.5844116e+01
+   4.0700000e+01   1.7261298e+01   3.5850289e+01
+   4.0700000e+01   1.8017446e+01   3.5853281e+01
+   4.0700000e+01   1.8879421e+01   3.5867727e+01
+   4.0700000e+01   1.9534612e+01   3.5871678e+01
+   4.0700000e+01   1.9774289e+01   3.5868719e+01
+   4.0700000e+01   1.9845992e+01   3.5868760e+01
+   4.0700000e+01   1.9857645e+01   3.5869248e+01
+   4.0700000e+01   1.9858744e+01   3.5869810e+01
+   4.0700000e+01   1.9851843e+01   3.5868702e+01
+   4.0700000e+01   1.9795959e+01   3.5873008e+01
+   4.0750000e+01   2.5103554e+00   3.4896107e+01
+   4.0750000e+01   2.5061901e+00   3.4902207e+01
+   4.0750000e+01   2.5121488e+00   3.4907306e+01
+   4.0750000e+01   2.5413554e+00   3.4914521e+01
+   4.0750000e+01   2.5794959e+00   3.4919405e+01
+   4.0750000e+01   2.6451405e+00   3.4928736e+01
+   4.0750000e+01   2.7416281e+00   3.4940488e+01
+   4.0750000e+01   2.8990331e+00   3.4952802e+01
+   4.0750000e+01   3.0880496e+00   3.4961322e+01
+   4.0750000e+01   3.3536529e+00   3.4973281e+01
+   4.0750000e+01   3.5827603e+00   3.4972736e+01
+   4.0750000e+01   3.8425455e+00   3.4984074e+01
+   4.0750000e+01   4.3142231e+00   3.5036645e+01
+   4.0750000e+01   5.2460165e+00   3.5170777e+01
+   4.0750000e+01   6.6648926e+00   3.5382711e+01
+   4.0750000e+01   8.2569008e+00   3.5621149e+01
+   4.0750000e+01   9.2870413e+00   3.5722876e+01
+   4.0750000e+01   9.5328760e+00   3.5630785e+01
+   4.0750000e+01   9.9026364e+00   3.5537066e+01
+   4.0750000e+01   1.0298083e+01   3.5480702e+01
+   4.0750000e+01   1.0770826e+01   3.5489091e+01
+   4.0750000e+01   1.1255678e+01   3.5531455e+01
+   4.0750000e+01   1.1602421e+01   3.5566000e+01
+   4.0750000e+01   1.1914041e+01   3.5601397e+01
+   4.0750000e+01   1.2147298e+01   3.5626901e+01
+   4.0750000e+01   1.2343058e+01   3.5648785e+01
+   4.0750000e+01   1.2494471e+01   3.5664835e+01
+   4.0750000e+01   1.2597438e+01   3.5676273e+01
+   4.0750000e+01   1.2688149e+01   3.5686380e+01
+   4.0750000e+01   1.2785116e+01   3.5697636e+01
+   4.0750000e+01   1.2848306e+01   3.5705074e+01
+   4.0750000e+01   1.2914322e+01   3.5711992e+01
+   4.0750000e+01   1.3001628e+01   3.5721826e+01
+   4.0750000e+01   1.3051289e+01   3.5725025e+01
+   4.0750000e+01   1.3089132e+01   3.5727711e+01
+   4.0750000e+01   1.3142140e+01   3.5735612e+01
+   4.0750000e+01   1.3179091e+01   3.5738893e+01
+   4.0750000e+01   1.3225289e+01   3.5744364e+01
+   4.0750000e+01   1.3285380e+01   3.5750000e+01
+   4.0750000e+01   1.3351380e+01   3.5760339e+01
+   4.0750000e+01   1.3413512e+01   3.5768570e+01
+   4.0750000e+01   1.3485198e+01   3.5776364e+01
+   4.0750000e+01   1.3539636e+01   3.5778083e+01
+   4.0750000e+01   1.3586083e+01   3.5781620e+01
+   4.0750000e+01   1.3649860e+01   3.5788785e+01
+   4.0750000e+01   1.3724041e+01   3.5795174e+01
+   4.0750000e+01   1.3795636e+01   3.5799347e+01
+   4.0750000e+01   1.3896884e+01   3.5810504e+01
+   4.0750000e+01   1.4007802e+01   3.5819636e+01
+   4.0750000e+01   1.4119207e+01   3.5823149e+01
+   4.0750000e+01   1.4275008e+01   3.5831579e+01
+   4.0750000e+01   1.4495909e+01   3.5833537e+01
+   4.0750000e+01   1.4732562e+01   3.5837397e+01
+   4.0750000e+01   1.4997446e+01   3.5833347e+01
+   4.0750000e+01   1.5706603e+01   3.5837281e+01
+   4.0750000e+01   1.6613545e+01   3.5844116e+01
+   4.0750000e+01   1.7261298e+01   3.5850289e+01
+   4.0750000e+01   1.8017446e+01   3.5853281e+01
+   4.0750000e+01   1.8879421e+01   3.5867727e+01
+   4.0750000e+01   1.9534612e+01   3.5871678e+01
+   4.0750000e+01   1.9774289e+01   3.5868719e+01
+   4.0750000e+01   1.9845992e+01   3.5868760e+01
+   4.0750000e+01   1.9857645e+01   3.5869248e+01
+   4.0750000e+01   1.9858744e+01   3.5869810e+01
+   4.0750000e+01   1.9851843e+01   3.5868702e+01
+   4.0750000e+01   1.9795959e+01   3.5873008e+01
+   4.0800000e+01   2.5103554e+00   3.4896107e+01
+   4.0800000e+01   2.5061901e+00   3.4902207e+01
+   4.0800000e+01   2.5121488e+00   3.4907306e+01
+   4.0800000e+01   2.5413554e+00   3.4914521e+01
+   4.0800000e+01   2.5794959e+00   3.4919405e+01
+   4.0800000e+01   2.6451405e+00   3.4928736e+01
+   4.0800000e+01   2.7416281e+00   3.4940488e+01
+   4.0800000e+01   2.8990331e+00   3.4952802e+01
+   4.0800000e+01   3.0880496e+00   3.4961322e+01
+   4.0800000e+01   3.3536529e+00   3.4973281e+01
+   4.0800000e+01   3.5827603e+00   3.4972736e+01
+   4.0800000e+01   3.8425455e+00   3.4984074e+01
+   4.0800000e+01   4.3142231e+00   3.5036645e+01
+   4.0800000e+01   5.2460165e+00   3.5170777e+01
+   4.0800000e+01   6.6648926e+00   3.5382711e+01
+   4.0800000e+01   8.2569008e+00   3.5621149e+01
+   4.0800000e+01   9.2870413e+00   3.5722876e+01
+   4.0800000e+01   9.5328760e+00   3.5630785e+01
+   4.0800000e+01   9.9026364e+00   3.5537066e+01
+   4.0800000e+01   1.0298083e+01   3.5480702e+01
+   4.0800000e+01   1.0770826e+01   3.5489091e+01
+   4.0800000e+01   1.1255678e+01   3.5531455e+01
+   4.0800000e+01   1.1602421e+01   3.5566000e+01
+   4.0800000e+01   1.1914041e+01   3.5601397e+01
+   4.0800000e+01   1.2147298e+01   3.5626901e+01
+   4.0800000e+01   1.2343058e+01   3.5648785e+01
+   4.0800000e+01   1.2494471e+01   3.5664835e+01
+   4.0800000e+01   1.2597438e+01   3.5676273e+01
+   4.0800000e+01   1.2688149e+01   3.5686380e+01
+   4.0800000e+01   1.2785116e+01   3.5697636e+01
+   4.0800000e+01   1.2848306e+01   3.5705074e+01
+   4.0800000e+01   1.2914322e+01   3.5711992e+01
+   4.0800000e+01   1.3001628e+01   3.5721826e+01
+   4.0800000e+01   1.3051289e+01   3.5725025e+01
+   4.0800000e+01   1.3089132e+01   3.5727711e+01
+   4.0800000e+01   1.3142140e+01   3.5735612e+01
+   4.0800000e+01   1.3179091e+01   3.5738893e+01
+   4.0800000e+01   1.3225289e+01   3.5744364e+01
+   4.0800000e+01   1.3285380e+01   3.5750000e+01
+   4.0800000e+01   1.3351380e+01   3.5760339e+01
+   4.0800000e+01   1.3413512e+01   3.5768570e+01
+   4.0800000e+01   1.3485198e+01   3.5776364e+01
+   4.0800000e+01   1.3539636e+01   3.5778083e+01
+   4.0800000e+01   1.3586083e+01   3.5781620e+01
+   4.0800000e+01   1.3649860e+01   3.5788785e+01
+   4.0800000e+01   1.3724041e+01   3.5795174e+01
+   4.0800000e+01   1.3795636e+01   3.5799347e+01
+   4.0800000e+01   1.3896884e+01   3.5810504e+01
+   4.0800000e+01   1.4007802e+01   3.5819636e+01
+   4.0800000e+01   1.4119207e+01   3.5823149e+01
+   4.0800000e+01   1.4275008e+01   3.5831579e+01
+   4.0800000e+01   1.4495909e+01   3.5833537e+01
+   4.0800000e+01   1.4732562e+01   3.5837397e+01
+   4.0800000e+01   1.4997446e+01   3.5833347e+01
+   4.0800000e+01   1.5706603e+01   3.5837281e+01
+   4.0800000e+01   1.6613545e+01   3.5844116e+01
+   4.0800000e+01   1.7261298e+01   3.5850289e+01
+   4.0800000e+01   1.8017446e+01   3.5853281e+01
+   4.0800000e+01   1.8879421e+01   3.5867727e+01
+   4.0800000e+01   1.9534612e+01   3.5871678e+01
+   4.0800000e+01   1.9774289e+01   3.5868719e+01
+   4.0800000e+01   1.9845992e+01   3.5868760e+01
+   4.0800000e+01   1.9857645e+01   3.5869248e+01
+   4.0800000e+01   1.9858744e+01   3.5869810e+01
+   4.0800000e+01   1.9851843e+01   3.5868702e+01
+   4.0800000e+01   1.9795959e+01   3.5873008e+01
+   4.0850000e+01   2.5103554e+00   3.4896107e+01
+   4.0850000e+01   2.5061901e+00   3.4902207e+01
+   4.0850000e+01   2.5121488e+00   3.4907306e+01
+   4.0850000e+01   2.5413554e+00   3.4914521e+01
+   4.0850000e+01   2.5794959e+00   3.4919405e+01
+   4.0850000e+01   2.6451405e+00   3.4928736e+01
+   4.0850000e+01   2.7416281e+00   3.4940488e+01
+   4.0850000e+01   2.8990331e+00   3.4952802e+01
+   4.0850000e+01   3.0880496e+00   3.4961322e+01
+   4.0850000e+01   3.3536529e+00   3.4973281e+01
+   4.0850000e+01   3.5827603e+00   3.4972736e+01
+   4.0850000e+01   3.8425455e+00   3.4984074e+01
+   4.0850000e+01   4.3142231e+00   3.5036645e+01
+   4.0850000e+01   5.2460165e+00   3.5170777e+01
+   4.0850000e+01   6.6648926e+00   3.5382711e+01
+   4.0850000e+01   8.2569008e+00   3.5621149e+01
+   4.0850000e+01   9.2870413e+00   3.5722876e+01
+   4.0850000e+01   9.5328760e+00   3.5630785e+01
+   4.0850000e+01   9.9026364e+00   3.5537066e+01
+   4.0850000e+01   1.0298083e+01   3.5480702e+01
+   4.0850000e+01   1.0770826e+01   3.5489091e+01
+   4.0850000e+01   1.1255678e+01   3.5531455e+01
+   4.0850000e+01   1.1602421e+01   3.5566000e+01
+   4.0850000e+01   1.1914041e+01   3.5601397e+01
+   4.0850000e+01   1.2147298e+01   3.5626901e+01
+   4.0850000e+01   1.2343058e+01   3.5648785e+01
+   4.0850000e+01   1.2494471e+01   3.5664835e+01
+   4.0850000e+01   1.2597438e+01   3.5676273e+01
+   4.0850000e+01   1.2688149e+01   3.5686380e+01
+   4.0850000e+01   1.2785116e+01   3.5697636e+01
+   4.0850000e+01   1.2848306e+01   3.5705074e+01
+   4.0850000e+01   1.2914322e+01   3.5711992e+01
+   4.0850000e+01   1.3001628e+01   3.5721826e+01
+   4.0850000e+01   1.3051289e+01   3.5725025e+01
+   4.0850000e+01   1.3089132e+01   3.5727711e+01
+   4.0850000e+01   1.3142140e+01   3.5735612e+01
+   4.0850000e+01   1.3179091e+01   3.5738893e+01
+   4.0850000e+01   1.3225289e+01   3.5744364e+01
+   4.0850000e+01   1.3285380e+01   3.5750000e+01
+   4.0850000e+01   1.3351380e+01   3.5760339e+01
+   4.0850000e+01   1.3413512e+01   3.5768570e+01
+   4.0850000e+01   1.3485198e+01   3.5776364e+01
+   4.0850000e+01   1.3539636e+01   3.5778083e+01
+   4.0850000e+01   1.3586083e+01   3.5781620e+01
+   4.0850000e+01   1.3649860e+01   3.5788785e+01
+   4.0850000e+01   1.3724041e+01   3.5795174e+01
+   4.0850000e+01   1.3795636e+01   3.5799347e+01
+   4.0850000e+01   1.3896884e+01   3.5810504e+01
+   4.0850000e+01   1.4007802e+01   3.5819636e+01
+   4.0850000e+01   1.4119207e+01   3.5823149e+01
+   4.0850000e+01   1.4275008e+01   3.5831579e+01
+   4.0850000e+01   1.4495909e+01   3.5833537e+01
+   4.0850000e+01   1.4732562e+01   3.5837397e+01
+   4.0850000e+01   1.4997446e+01   3.5833347e+01
+   4.0850000e+01   1.5706603e+01   3.5837281e+01
+   4.0850000e+01   1.6613545e+01   3.5844116e+01
+   4.0850000e+01   1.7261298e+01   3.5850289e+01
+   4.0850000e+01   1.8017446e+01   3.5853281e+01
+   4.0850000e+01   1.8879421e+01   3.5867727e+01
+   4.0850000e+01   1.9534612e+01   3.5871678e+01
+   4.0850000e+01   1.9774289e+01   3.5868719e+01
+   4.0850000e+01   1.9845992e+01   3.5868760e+01
+   4.0850000e+01   1.9857645e+01   3.5869248e+01
+   4.0850000e+01   1.9858744e+01   3.5869810e+01
+   4.0850000e+01   1.9851843e+01   3.5868702e+01
+   4.0850000e+01   1.9795959e+01   3.5873008e+01
+   4.0900000e+01   2.5103554e+00   3.4896107e+01
+   4.0900000e+01   2.5061901e+00   3.4902207e+01
+   4.0900000e+01   2.5121488e+00   3.4907306e+01
+   4.0900000e+01   2.5413554e+00   3.4914521e+01
+   4.0900000e+01   2.5794959e+00   3.4919405e+01
+   4.0900000e+01   2.6451405e+00   3.4928736e+01
+   4.0900000e+01   2.7416281e+00   3.4940488e+01
+   4.0900000e+01   2.8990331e+00   3.4952802e+01
+   4.0900000e+01   3.0880496e+00   3.4961322e+01
+   4.0900000e+01   3.3536529e+00   3.4973281e+01
+   4.0900000e+01   3.5827603e+00   3.4972736e+01
+   4.0900000e+01   3.8425455e+00   3.4984074e+01
+   4.0900000e+01   4.3142231e+00   3.5036645e+01
+   4.0900000e+01   5.2460165e+00   3.5170777e+01
+   4.0900000e+01   6.6648926e+00   3.5382711e+01
+   4.0900000e+01   8.2569008e+00   3.5621149e+01
+   4.0900000e+01   9.2870413e+00   3.5722876e+01
+   4.0900000e+01   9.5328760e+00   3.5630785e+01
+   4.0900000e+01   9.9026364e+00   3.5537066e+01
+   4.0900000e+01   1.0298083e+01   3.5480702e+01
+   4.0900000e+01   1.0770826e+01   3.5489091e+01
+   4.0900000e+01   1.1255678e+01   3.5531455e+01
+   4.0900000e+01   1.1602421e+01   3.5566000e+01
+   4.0900000e+01   1.1914041e+01   3.5601397e+01
+   4.0900000e+01   1.2147298e+01   3.5626901e+01
+   4.0900000e+01   1.2343058e+01   3.5648785e+01
+   4.0900000e+01   1.2494471e+01   3.5664835e+01
+   4.0900000e+01   1.2597438e+01   3.5676273e+01
+   4.0900000e+01   1.2688149e+01   3.5686380e+01
+   4.0900000e+01   1.2785116e+01   3.5697636e+01
+   4.0900000e+01   1.2848306e+01   3.5705074e+01
+   4.0900000e+01   1.2914322e+01   3.5711992e+01
+   4.0900000e+01   1.3001628e+01   3.5721826e+01
+   4.0900000e+01   1.3051289e+01   3.5725025e+01
+   4.0900000e+01   1.3089132e+01   3.5727711e+01
+   4.0900000e+01   1.3142140e+01   3.5735612e+01
+   4.0900000e+01   1.3179091e+01   3.5738893e+01
+   4.0900000e+01   1.3225289e+01   3.5744364e+01
+   4.0900000e+01   1.3285380e+01   3.5750000e+01
+   4.0900000e+01   1.3351380e+01   3.5760339e+01
+   4.0900000e+01   1.3413512e+01   3.5768570e+01
+   4.0900000e+01   1.3485198e+01   3.5776364e+01
+   4.0900000e+01   1.3539636e+01   3.5778083e+01
+   4.0900000e+01   1.3586083e+01   3.5781620e+01
+   4.0900000e+01   1.3649860e+01   3.5788785e+01
+   4.0900000e+01   1.3724041e+01   3.5795174e+01
+   4.0900000e+01   1.3795636e+01   3.5799347e+01
+   4.0900000e+01   1.3896884e+01   3.5810504e+01
+   4.0900000e+01   1.4007802e+01   3.5819636e+01
+   4.0900000e+01   1.4119207e+01   3.5823149e+01
+   4.0900000e+01   1.4275008e+01   3.5831579e+01
+   4.0900000e+01   1.4495909e+01   3.5833537e+01
+   4.0900000e+01   1.4732562e+01   3.5837397e+01
+   4.0900000e+01   1.4997446e+01   3.5833347e+01
+   4.0900000e+01   1.5706603e+01   3.5837281e+01
+   4.0900000e+01   1.6613545e+01   3.5844116e+01
+   4.0900000e+01   1.7261298e+01   3.5850289e+01
+   4.0900000e+01   1.8017446e+01   3.5853281e+01
+   4.0900000e+01   1.8879421e+01   3.5867727e+01
+   4.0900000e+01   1.9534612e+01   3.5871678e+01
+   4.0900000e+01   1.9774289e+01   3.5868719e+01
+   4.0900000e+01   1.9845992e+01   3.5868760e+01
+   4.0900000e+01   1.9857645e+01   3.5869248e+01
+   4.0900000e+01   1.9858744e+01   3.5869810e+01
+   4.0900000e+01   1.9851843e+01   3.5868702e+01
+   4.0900000e+01   1.9795959e+01   3.5873008e+01
+   4.0950000e+01   2.5103554e+00   3.4896107e+01
+   4.0950000e+01   2.5061901e+00   3.4902207e+01
+   4.0950000e+01   2.5121488e+00   3.4907306e+01
+   4.0950000e+01   2.5413554e+00   3.4914521e+01
+   4.0950000e+01   2.5794959e+00   3.4919405e+01
+   4.0950000e+01   2.6451405e+00   3.4928736e+01
+   4.0950000e+01   2.7416281e+00   3.4940488e+01
+   4.0950000e+01   2.8990331e+00   3.4952802e+01
+   4.0950000e+01   3.0880496e+00   3.4961322e+01
+   4.0950000e+01   3.3536529e+00   3.4973281e+01
+   4.0950000e+01   3.5827603e+00   3.4972736e+01
+   4.0950000e+01   3.8425455e+00   3.4984074e+01
+   4.0950000e+01   4.3142231e+00   3.5036645e+01
+   4.0950000e+01   5.2460165e+00   3.5170777e+01
+   4.0950000e+01   6.6648926e+00   3.5382711e+01
+   4.0950000e+01   8.2569008e+00   3.5621149e+01
+   4.0950000e+01   9.2870413e+00   3.5722876e+01
+   4.0950000e+01   9.5328760e+00   3.5630785e+01
+   4.0950000e+01   9.9026364e+00   3.5537066e+01
+   4.0950000e+01   1.0298083e+01   3.5480702e+01
+   4.0950000e+01   1.0770826e+01   3.5489091e+01
+   4.0950000e+01   1.1255678e+01   3.5531455e+01
+   4.0950000e+01   1.1602421e+01   3.5566000e+01
+   4.0950000e+01   1.1914041e+01   3.5601397e+01
+   4.0950000e+01   1.2147298e+01   3.5626901e+01
+   4.0950000e+01   1.2343058e+01   3.5648785e+01
+   4.0950000e+01   1.2494471e+01   3.5664835e+01
+   4.0950000e+01   1.2597438e+01   3.5676273e+01
+   4.0950000e+01   1.2688149e+01   3.5686380e+01
+   4.0950000e+01   1.2785116e+01   3.5697636e+01
+   4.0950000e+01   1.2848306e+01   3.5705074e+01
+   4.0950000e+01   1.2914322e+01   3.5711992e+01
+   4.0950000e+01   1.3001628e+01   3.5721826e+01
+   4.0950000e+01   1.3051289e+01   3.5725025e+01
+   4.0950000e+01   1.3089132e+01   3.5727711e+01
+   4.0950000e+01   1.3142140e+01   3.5735612e+01
+   4.0950000e+01   1.3179091e+01   3.5738893e+01
+   4.0950000e+01   1.3225289e+01   3.5744364e+01
+   4.0950000e+01   1.3285380e+01   3.5750000e+01
+   4.0950000e+01   1.3351380e+01   3.5760339e+01
+   4.0950000e+01   1.3413512e+01   3.5768570e+01
+   4.0950000e+01   1.3485198e+01   3.5776364e+01
+   4.0950000e+01   1.3539636e+01   3.5778083e+01
+   4.0950000e+01   1.3586083e+01   3.5781620e+01
+   4.0950000e+01   1.3649860e+01   3.5788785e+01
+   4.0950000e+01   1.3724041e+01   3.5795174e+01
+   4.0950000e+01   1.3795636e+01   3.5799347e+01
+   4.0950000e+01   1.3896884e+01   3.5810504e+01
+   4.0950000e+01   1.4007802e+01   3.5819636e+01
+   4.0950000e+01   1.4119207e+01   3.5823149e+01
+   4.0950000e+01   1.4275008e+01   3.5831579e+01
+   4.0950000e+01   1.4495909e+01   3.5833537e+01
+   4.0950000e+01   1.4732562e+01   3.5837397e+01
+   4.0950000e+01   1.4997446e+01   3.5833347e+01
+   4.0950000e+01   1.5706603e+01   3.5837281e+01
+   4.0950000e+01   1.6613545e+01   3.5844116e+01
+   4.0950000e+01   1.7261298e+01   3.5850289e+01
+   4.0950000e+01   1.8017446e+01   3.5853281e+01
+   4.0950000e+01   1.8879421e+01   3.5867727e+01
+   4.0950000e+01   1.9534612e+01   3.5871678e+01
+   4.0950000e+01   1.9774289e+01   3.5868719e+01
+   4.0950000e+01   1.9845992e+01   3.5868760e+01
+   4.0950000e+01   1.9857645e+01   3.5869248e+01
+   4.0950000e+01   1.9858744e+01   3.5869810e+01
+   4.0950000e+01   1.9851843e+01   3.5868702e+01
+   4.0950000e+01   1.9795959e+01   3.5873008e+01
+   4.1000000e+01   2.5103554e+00   3.4896107e+01
+   4.1000000e+01   2.5061901e+00   3.4902207e+01
+   4.1000000e+01   2.5121488e+00   3.4907306e+01
+   4.1000000e+01   2.5413554e+00   3.4914521e+01
+   4.1000000e+01   2.5794959e+00   3.4919405e+01
+   4.1000000e+01   2.6451405e+00   3.4928736e+01
+   4.1000000e+01   2.7416281e+00   3.4940488e+01
+   4.1000000e+01   2.8990331e+00   3.4952802e+01
+   4.1000000e+01   3.0880496e+00   3.4961322e+01
+   4.1000000e+01   3.3536529e+00   3.4973281e+01
+   4.1000000e+01   3.5827603e+00   3.4972736e+01
+   4.1000000e+01   3.8425455e+00   3.4984074e+01
+   4.1000000e+01   4.3142231e+00   3.5036645e+01
+   4.1000000e+01   5.2460165e+00   3.5170777e+01
+   4.1000000e+01   6.6648926e+00   3.5382711e+01
+   4.1000000e+01   8.2569008e+00   3.5621149e+01
+   4.1000000e+01   9.2870413e+00   3.5722876e+01
+   4.1000000e+01   9.5328760e+00   3.5630785e+01
+   4.1000000e+01   9.9026364e+00   3.5537066e+01
+   4.1000000e+01   1.0298083e+01   3.5480702e+01
+   4.1000000e+01   1.0770826e+01   3.5489091e+01
+   4.1000000e+01   1.1255678e+01   3.5531455e+01
+   4.1000000e+01   1.1602421e+01   3.5566000e+01
+   4.1000000e+01   1.1914041e+01   3.5601397e+01
+   4.1000000e+01   1.2147298e+01   3.5626901e+01
+   4.1000000e+01   1.2343058e+01   3.5648785e+01
+   4.1000000e+01   1.2494471e+01   3.5664835e+01
+   4.1000000e+01   1.2597438e+01   3.5676273e+01
+   4.1000000e+01   1.2688149e+01   3.5686380e+01
+   4.1000000e+01   1.2785116e+01   3.5697636e+01
+   4.1000000e+01   1.2848306e+01   3.5705074e+01
+   4.1000000e+01   1.2914322e+01   3.5711992e+01
+   4.1000000e+01   1.3001628e+01   3.5721826e+01
+   4.1000000e+01   1.3051289e+01   3.5725025e+01
+   4.1000000e+01   1.3089132e+01   3.5727711e+01
+   4.1000000e+01   1.3142140e+01   3.5735612e+01
+   4.1000000e+01   1.3179091e+01   3.5738893e+01
+   4.1000000e+01   1.3225289e+01   3.5744364e+01
+   4.1000000e+01   1.3285380e+01   3.5750000e+01
+   4.1000000e+01   1.3351380e+01   3.5760339e+01
+   4.1000000e+01   1.3413512e+01   3.5768570e+01
+   4.1000000e+01   1.3485198e+01   3.5776364e+01
+   4.1000000e+01   1.3539636e+01   3.5778083e+01
+   4.1000000e+01   1.3586083e+01   3.5781620e+01
+   4.1000000e+01   1.3649860e+01   3.5788785e+01
+   4.1000000e+01   1.3724041e+01   3.5795174e+01
+   4.1000000e+01   1.3795636e+01   3.5799347e+01
+   4.1000000e+01   1.3896884e+01   3.5810504e+01
+   4.1000000e+01   1.4007802e+01   3.5819636e+01
+   4.1000000e+01   1.4119207e+01   3.5823149e+01
+   4.1000000e+01   1.4275008e+01   3.5831579e+01
+   4.1000000e+01   1.4495909e+01   3.5833537e+01
+   4.1000000e+01   1.4732562e+01   3.5837397e+01
+   4.1000000e+01   1.4997446e+01   3.5833347e+01
+   4.1000000e+01   1.5706603e+01   3.5837281e+01
+   4.1000000e+01   1.6613545e+01   3.5844116e+01
+   4.1000000e+01   1.7261298e+01   3.5850289e+01
+   4.1000000e+01   1.8017446e+01   3.5853281e+01
+   4.1000000e+01   1.8879421e+01   3.5867727e+01
+   4.1000000e+01   1.9534612e+01   3.5871678e+01
+   4.1000000e+01   1.9774289e+01   3.5868719e+01
+   4.1000000e+01   1.9845992e+01   3.5868760e+01
+   4.1000000e+01   1.9857645e+01   3.5869248e+01
+   4.1000000e+01   1.9858744e+01   3.5869810e+01
+   4.1000000e+01   1.9851843e+01   3.5868702e+01
+   4.1000000e+01   1.9795959e+01   3.5873008e+01
+   4.1050000e+01   2.5103554e+00   3.4896107e+01
+   4.1050000e+01   2.5061901e+00   3.4902207e+01
+   4.1050000e+01   2.5121488e+00   3.4907306e+01
+   4.1050000e+01   2.5413554e+00   3.4914521e+01
+   4.1050000e+01   2.5794959e+00   3.4919405e+01
+   4.1050000e+01   2.6451405e+00   3.4928736e+01
+   4.1050000e+01   2.7416281e+00   3.4940488e+01
+   4.1050000e+01   2.8990331e+00   3.4952802e+01
+   4.1050000e+01   3.0880496e+00   3.4961322e+01
+   4.1050000e+01   3.3536529e+00   3.4973281e+01
+   4.1050000e+01   3.5827603e+00   3.4972736e+01
+   4.1050000e+01   3.8425455e+00   3.4984074e+01
+   4.1050000e+01   4.3142231e+00   3.5036645e+01
+   4.1050000e+01   5.2460165e+00   3.5170777e+01
+   4.1050000e+01   6.6648926e+00   3.5382711e+01
+   4.1050000e+01   8.2569008e+00   3.5621149e+01
+   4.1050000e+01   9.2870413e+00   3.5722876e+01
+   4.1050000e+01   9.5328760e+00   3.5630785e+01
+   4.1050000e+01   9.9026364e+00   3.5537066e+01
+   4.1050000e+01   1.0298083e+01   3.5480702e+01
+   4.1050000e+01   1.0770826e+01   3.5489091e+01
+   4.1050000e+01   1.1255678e+01   3.5531455e+01
+   4.1050000e+01   1.1602421e+01   3.5566000e+01
+   4.1050000e+01   1.1914041e+01   3.5601397e+01
+   4.1050000e+01   1.2147298e+01   3.5626901e+01
+   4.1050000e+01   1.2343058e+01   3.5648785e+01
+   4.1050000e+01   1.2494471e+01   3.5664835e+01
+   4.1050000e+01   1.2597438e+01   3.5676273e+01
+   4.1050000e+01   1.2688149e+01   3.5686380e+01
+   4.1050000e+01   1.2785116e+01   3.5697636e+01
+   4.1050000e+01   1.2848306e+01   3.5705074e+01
+   4.1050000e+01   1.2914322e+01   3.5711992e+01
+   4.1050000e+01   1.3001628e+01   3.5721826e+01
+   4.1050000e+01   1.3051289e+01   3.5725025e+01
+   4.1050000e+01   1.3089132e+01   3.5727711e+01
+   4.1050000e+01   1.3142140e+01   3.5735612e+01
+   4.1050000e+01   1.3179091e+01   3.5738893e+01
+   4.1050000e+01   1.3225289e+01   3.5744364e+01
+   4.1050000e+01   1.3285380e+01   3.5750000e+01
+   4.1050000e+01   1.3351380e+01   3.5760339e+01
+   4.1050000e+01   1.3413512e+01   3.5768570e+01
+   4.1050000e+01   1.3485198e+01   3.5776364e+01
+   4.1050000e+01   1.3539636e+01   3.5778083e+01
+   4.1050000e+01   1.3586083e+01   3.5781620e+01
+   4.1050000e+01   1.3649860e+01   3.5788785e+01
+   4.1050000e+01   1.3724041e+01   3.5795174e+01
+   4.1050000e+01   1.3795636e+01   3.5799347e+01
+   4.1050000e+01   1.3896884e+01   3.5810504e+01
+   4.1050000e+01   1.4007802e+01   3.5819636e+01
+   4.1050000e+01   1.4119207e+01   3.5823149e+01
+   4.1050000e+01   1.4275008e+01   3.5831579e+01
+   4.1050000e+01   1.4495909e+01   3.5833537e+01
+   4.1050000e+01   1.4732562e+01   3.5837397e+01
+   4.1050000e+01   1.4997446e+01   3.5833347e+01
+   4.1050000e+01   1.5706603e+01   3.5837281e+01
+   4.1050000e+01   1.6613545e+01   3.5844116e+01
+   4.1050000e+01   1.7261298e+01   3.5850289e+01
+   4.1050000e+01   1.8017446e+01   3.5853281e+01
+   4.1050000e+01   1.8879421e+01   3.5867727e+01
+   4.1050000e+01   1.9534612e+01   3.5871678e+01
+   4.1050000e+01   1.9774289e+01   3.5868719e+01
+   4.1050000e+01   1.9845992e+01   3.5868760e+01
+   4.1050000e+01   1.9857645e+01   3.5869248e+01
+   4.1050000e+01   1.9858744e+01   3.5869810e+01
+   4.1050000e+01   1.9851843e+01   3.5868702e+01
+   4.1050000e+01   1.9795959e+01   3.5873008e+01
+   4.1100000e+01   2.5103554e+00   3.4896107e+01
+   4.1100000e+01   2.5061901e+00   3.4902207e+01
+   4.1100000e+01   2.5121488e+00   3.4907306e+01
+   4.1100000e+01   2.5413554e+00   3.4914521e+01
+   4.1100000e+01   2.5794959e+00   3.4919405e+01
+   4.1100000e+01   2.6451405e+00   3.4928736e+01
+   4.1100000e+01   2.7416281e+00   3.4940488e+01
+   4.1100000e+01   2.8990331e+00   3.4952802e+01
+   4.1100000e+01   3.0880496e+00   3.4961322e+01
+   4.1100000e+01   3.3536529e+00   3.4973281e+01
+   4.1100000e+01   3.5827603e+00   3.4972736e+01
+   4.1100000e+01   3.8425455e+00   3.4984074e+01
+   4.1100000e+01   4.3142231e+00   3.5036645e+01
+   4.1100000e+01   5.2460165e+00   3.5170777e+01
+   4.1100000e+01   6.6648926e+00   3.5382711e+01
+   4.1100000e+01   8.2569008e+00   3.5621149e+01
+   4.1100000e+01   9.2870413e+00   3.5722876e+01
+   4.1100000e+01   9.5328760e+00   3.5630785e+01
+   4.1100000e+01   9.9026364e+00   3.5537066e+01
+   4.1100000e+01   1.0298083e+01   3.5480702e+01
+   4.1100000e+01   1.0770826e+01   3.5489091e+01
+   4.1100000e+01   1.1255678e+01   3.5531455e+01
+   4.1100000e+01   1.1602421e+01   3.5566000e+01
+   4.1100000e+01   1.1914041e+01   3.5601397e+01
+   4.1100000e+01   1.2147298e+01   3.5626901e+01
+   4.1100000e+01   1.2343058e+01   3.5648785e+01
+   4.1100000e+01   1.2494471e+01   3.5664835e+01
+   4.1100000e+01   1.2597438e+01   3.5676273e+01
+   4.1100000e+01   1.2688149e+01   3.5686380e+01
+   4.1100000e+01   1.2785116e+01   3.5697636e+01
+   4.1100000e+01   1.2848306e+01   3.5705074e+01
+   4.1100000e+01   1.2914322e+01   3.5711992e+01
+   4.1100000e+01   1.3001628e+01   3.5721826e+01
+   4.1100000e+01   1.3051289e+01   3.5725025e+01
+   4.1100000e+01   1.3089132e+01   3.5727711e+01
+   4.1100000e+01   1.3142140e+01   3.5735612e+01
+   4.1100000e+01   1.3179091e+01   3.5738893e+01
+   4.1100000e+01   1.3225289e+01   3.5744364e+01
+   4.1100000e+01   1.3285380e+01   3.5750000e+01
+   4.1100000e+01   1.3351380e+01   3.5760339e+01
+   4.1100000e+01   1.3413512e+01   3.5768570e+01
+   4.1100000e+01   1.3485198e+01   3.5776364e+01
+   4.1100000e+01   1.3539636e+01   3.5778083e+01
+   4.1100000e+01   1.3586083e+01   3.5781620e+01
+   4.1100000e+01   1.3649860e+01   3.5788785e+01
+   4.1100000e+01   1.3724041e+01   3.5795174e+01
+   4.1100000e+01   1.3795636e+01   3.5799347e+01
+   4.1100000e+01   1.3896884e+01   3.5810504e+01
+   4.1100000e+01   1.4007802e+01   3.5819636e+01
+   4.1100000e+01   1.4119207e+01   3.5823149e+01
+   4.1100000e+01   1.4275008e+01   3.5831579e+01
+   4.1100000e+01   1.4495909e+01   3.5833537e+01
+   4.1100000e+01   1.4732562e+01   3.5837397e+01
+   4.1100000e+01   1.4997446e+01   3.5833347e+01
+   4.1100000e+01   1.5706603e+01   3.5837281e+01
+   4.1100000e+01   1.6613545e+01   3.5844116e+01
+   4.1100000e+01   1.7261298e+01   3.5850289e+01
+   4.1100000e+01   1.8017446e+01   3.5853281e+01
+   4.1100000e+01   1.8879421e+01   3.5867727e+01
+   4.1100000e+01   1.9534612e+01   3.5871678e+01
+   4.1100000e+01   1.9774289e+01   3.5868719e+01
+   4.1100000e+01   1.9845992e+01   3.5868760e+01
+   4.1100000e+01   1.9857645e+01   3.5869248e+01
+   4.1100000e+01   1.9858744e+01   3.5869810e+01
+   4.1100000e+01   1.9851843e+01   3.5868702e+01
+   4.1100000e+01   1.9795959e+01   3.5873008e+01
+   4.1150000e+01   2.5103554e+00   3.4896107e+01
+   4.1150000e+01   2.5061901e+00   3.4902207e+01
+   4.1150000e+01   2.5121488e+00   3.4907306e+01
+   4.1150000e+01   2.5413554e+00   3.4914521e+01
+   4.1150000e+01   2.5794959e+00   3.4919405e+01
+   4.1150000e+01   2.6451405e+00   3.4928736e+01
+   4.1150000e+01   2.7416281e+00   3.4940488e+01
+   4.1150000e+01   2.8990331e+00   3.4952802e+01
+   4.1150000e+01   3.0880496e+00   3.4961322e+01
+   4.1150000e+01   3.3536529e+00   3.4973281e+01
+   4.1150000e+01   3.5827603e+00   3.4972736e+01
+   4.1150000e+01   3.8425455e+00   3.4984074e+01
+   4.1150000e+01   4.3142231e+00   3.5036645e+01
+   4.1150000e+01   5.2460165e+00   3.5170777e+01
+   4.1150000e+01   6.6648926e+00   3.5382711e+01
+   4.1150000e+01   8.2569008e+00   3.5621149e+01
+   4.1150000e+01   9.2870413e+00   3.5722876e+01
+   4.1150000e+01   9.5328760e+00   3.5630785e+01
+   4.1150000e+01   9.9026364e+00   3.5537066e+01
+   4.1150000e+01   1.0298083e+01   3.5480702e+01
+   4.1150000e+01   1.0770826e+01   3.5489091e+01
+   4.1150000e+01   1.1255678e+01   3.5531455e+01
+   4.1150000e+01   1.1602421e+01   3.5566000e+01
+   4.1150000e+01   1.1914041e+01   3.5601397e+01
+   4.1150000e+01   1.2147298e+01   3.5626901e+01
+   4.1150000e+01   1.2343058e+01   3.5648785e+01
+   4.1150000e+01   1.2494471e+01   3.5664835e+01
+   4.1150000e+01   1.2597438e+01   3.5676273e+01
+   4.1150000e+01   1.2688149e+01   3.5686380e+01
+   4.1150000e+01   1.2785116e+01   3.5697636e+01
+   4.1150000e+01   1.2848306e+01   3.5705074e+01
+   4.1150000e+01   1.2914322e+01   3.5711992e+01
+   4.1150000e+01   1.3001628e+01   3.5721826e+01
+   4.1150000e+01   1.3051289e+01   3.5725025e+01
+   4.1150000e+01   1.3089132e+01   3.5727711e+01
+   4.1150000e+01   1.3142140e+01   3.5735612e+01
+   4.1150000e+01   1.3179091e+01   3.5738893e+01
+   4.1150000e+01   1.3225289e+01   3.5744364e+01
+   4.1150000e+01   1.3285380e+01   3.5750000e+01
+   4.1150000e+01   1.3351380e+01   3.5760339e+01
+   4.1150000e+01   1.3413512e+01   3.5768570e+01
+   4.1150000e+01   1.3485198e+01   3.5776364e+01
+   4.1150000e+01   1.3539636e+01   3.5778083e+01
+   4.1150000e+01   1.3586083e+01   3.5781620e+01
+   4.1150000e+01   1.3649860e+01   3.5788785e+01
+   4.1150000e+01   1.3724041e+01   3.5795174e+01
+   4.1150000e+01   1.3795636e+01   3.5799347e+01
+   4.1150000e+01   1.3896884e+01   3.5810504e+01
+   4.1150000e+01   1.4007802e+01   3.5819636e+01
+   4.1150000e+01   1.4119207e+01   3.5823149e+01
+   4.1150000e+01   1.4275008e+01   3.5831579e+01
+   4.1150000e+01   1.4495909e+01   3.5833537e+01
+   4.1150000e+01   1.4732562e+01   3.5837397e+01
+   4.1150000e+01   1.4997446e+01   3.5833347e+01
+   4.1150000e+01   1.5706603e+01   3.5837281e+01
+   4.1150000e+01   1.6613545e+01   3.5844116e+01
+   4.1150000e+01   1.7261298e+01   3.5850289e+01
+   4.1150000e+01   1.8017446e+01   3.5853281e+01
+   4.1150000e+01   1.8879421e+01   3.5867727e+01
+   4.1150000e+01   1.9534612e+01   3.5871678e+01
+   4.1150000e+01   1.9774289e+01   3.5868719e+01
+   4.1150000e+01   1.9845992e+01   3.5868760e+01
+   4.1150000e+01   1.9857645e+01   3.5869248e+01
+   4.1150000e+01   1.9858744e+01   3.5869810e+01
+   4.1150000e+01   1.9851843e+01   3.5868702e+01
+   4.1150000e+01   1.9795959e+01   3.5873008e+01
+   4.1200000e+01   2.5103554e+00   3.4896107e+01
+   4.1200000e+01   2.5061901e+00   3.4902207e+01
+   4.1200000e+01   2.5121488e+00   3.4907306e+01
+   4.1200000e+01   2.5413554e+00   3.4914521e+01
+   4.1200000e+01   2.5794959e+00   3.4919405e+01
+   4.1200000e+01   2.6451405e+00   3.4928736e+01
+   4.1200000e+01   2.7416281e+00   3.4940488e+01
+   4.1200000e+01   2.8990331e+00   3.4952802e+01
+   4.1200000e+01   3.0880496e+00   3.4961322e+01
+   4.1200000e+01   3.3536529e+00   3.4973281e+01
+   4.1200000e+01   3.5827603e+00   3.4972736e+01
+   4.1200000e+01   3.8425455e+00   3.4984074e+01
+   4.1200000e+01   4.3142231e+00   3.5036645e+01
+   4.1200000e+01   5.2460165e+00   3.5170777e+01
+   4.1200000e+01   6.6648926e+00   3.5382711e+01
+   4.1200000e+01   8.2569008e+00   3.5621149e+01
+   4.1200000e+01   9.2870413e+00   3.5722876e+01
+   4.1200000e+01   9.5328760e+00   3.5630785e+01
+   4.1200000e+01   9.9026364e+00   3.5537066e+01
+   4.1200000e+01   1.0298083e+01   3.5480702e+01
+   4.1200000e+01   1.0770826e+01   3.5489091e+01
+   4.1200000e+01   1.1255678e+01   3.5531455e+01
+   4.1200000e+01   1.1602421e+01   3.5566000e+01
+   4.1200000e+01   1.1914041e+01   3.5601397e+01
+   4.1200000e+01   1.2147298e+01   3.5626901e+01
+   4.1200000e+01   1.2343058e+01   3.5648785e+01
+   4.1200000e+01   1.2494471e+01   3.5664835e+01
+   4.1200000e+01   1.2597438e+01   3.5676273e+01
+   4.1200000e+01   1.2688149e+01   3.5686380e+01
+   4.1200000e+01   1.2785116e+01   3.5697636e+01
+   4.1200000e+01   1.2848306e+01   3.5705074e+01
+   4.1200000e+01   1.2914322e+01   3.5711992e+01
+   4.1200000e+01   1.3001628e+01   3.5721826e+01
+   4.1200000e+01   1.3051289e+01   3.5725025e+01
+   4.1200000e+01   1.3089132e+01   3.5727711e+01
+   4.1200000e+01   1.3142140e+01   3.5735612e+01
+   4.1200000e+01   1.3179091e+01   3.5738893e+01
+   4.1200000e+01   1.3225289e+01   3.5744364e+01
+   4.1200000e+01   1.3285380e+01   3.5750000e+01
+   4.1200000e+01   1.3351380e+01   3.5760339e+01
+   4.1200000e+01   1.3413512e+01   3.5768570e+01
+   4.1200000e+01   1.3485198e+01   3.5776364e+01
+   4.1200000e+01   1.3539636e+01   3.5778083e+01
+   4.1200000e+01   1.3586083e+01   3.5781620e+01
+   4.1200000e+01   1.3649860e+01   3.5788785e+01
+   4.1200000e+01   1.3724041e+01   3.5795174e+01
+   4.1200000e+01   1.3795636e+01   3.5799347e+01
+   4.1200000e+01   1.3896884e+01   3.5810504e+01
+   4.1200000e+01   1.4007802e+01   3.5819636e+01
+   4.1200000e+01   1.4119207e+01   3.5823149e+01
+   4.1200000e+01   1.4275008e+01   3.5831579e+01
+   4.1200000e+01   1.4495909e+01   3.5833537e+01
+   4.1200000e+01   1.4732562e+01   3.5837397e+01
+   4.1200000e+01   1.4997446e+01   3.5833347e+01
+   4.1200000e+01   1.5706603e+01   3.5837281e+01
+   4.1200000e+01   1.6613545e+01   3.5844116e+01
+   4.1200000e+01   1.7261298e+01   3.5850289e+01
+   4.1200000e+01   1.8017446e+01   3.5853281e+01
+   4.1200000e+01   1.8879421e+01   3.5867727e+01
+   4.1200000e+01   1.9534612e+01   3.5871678e+01
+   4.1200000e+01   1.9774289e+01   3.5868719e+01
+   4.1200000e+01   1.9845992e+01   3.5868760e+01
+   4.1200000e+01   1.9857645e+01   3.5869248e+01
+   4.1200000e+01   1.9858744e+01   3.5869810e+01
+   4.1200000e+01   1.9851843e+01   3.5868702e+01
+   4.1200000e+01   1.9795959e+01   3.5873008e+01
+   4.1250000e+01   2.5103554e+00   3.4896107e+01
+   4.1250000e+01   2.5061901e+00   3.4902207e+01
+   4.1250000e+01   2.5121488e+00   3.4907306e+01
+   4.1250000e+01   2.5413554e+00   3.4914521e+01
+   4.1250000e+01   2.5794959e+00   3.4919405e+01
+   4.1250000e+01   2.6451405e+00   3.4928736e+01
+   4.1250000e+01   2.7416281e+00   3.4940488e+01
+   4.1250000e+01   2.8990331e+00   3.4952802e+01
+   4.1250000e+01   3.0880496e+00   3.4961322e+01
+   4.1250000e+01   3.3536529e+00   3.4973281e+01
+   4.1250000e+01   3.5827603e+00   3.4972736e+01
+   4.1250000e+01   3.8425455e+00   3.4984074e+01
+   4.1250000e+01   4.3142231e+00   3.5036645e+01
+   4.1250000e+01   5.2460165e+00   3.5170777e+01
+   4.1250000e+01   6.6648926e+00   3.5382711e+01
+   4.1250000e+01   8.2569008e+00   3.5621149e+01
+   4.1250000e+01   9.2870413e+00   3.5722876e+01
+   4.1250000e+01   9.5328760e+00   3.5630785e+01
+   4.1250000e+01   9.9026364e+00   3.5537066e+01
+   4.1250000e+01   1.0298083e+01   3.5480702e+01
+   4.1250000e+01   1.0770826e+01   3.5489091e+01
+   4.1250000e+01   1.1255678e+01   3.5531455e+01
+   4.1250000e+01   1.1602421e+01   3.5566000e+01
+   4.1250000e+01   1.1914041e+01   3.5601397e+01
+   4.1250000e+01   1.2147298e+01   3.5626901e+01
+   4.1250000e+01   1.2343058e+01   3.5648785e+01
+   4.1250000e+01   1.2494471e+01   3.5664835e+01
+   4.1250000e+01   1.2597438e+01   3.5676273e+01
+   4.1250000e+01   1.2688149e+01   3.5686380e+01
+   4.1250000e+01   1.2785116e+01   3.5697636e+01
+   4.1250000e+01   1.2848306e+01   3.5705074e+01
+   4.1250000e+01   1.2914322e+01   3.5711992e+01
+   4.1250000e+01   1.3001628e+01   3.5721826e+01
+   4.1250000e+01   1.3051289e+01   3.5725025e+01
+   4.1250000e+01   1.3089132e+01   3.5727711e+01
+   4.1250000e+01   1.3142140e+01   3.5735612e+01
+   4.1250000e+01   1.3179091e+01   3.5738893e+01
+   4.1250000e+01   1.3225289e+01   3.5744364e+01
+   4.1250000e+01   1.3285380e+01   3.5750000e+01
+   4.1250000e+01   1.3351380e+01   3.5760339e+01
+   4.1250000e+01   1.3413512e+01   3.5768570e+01
+   4.1250000e+01   1.3485198e+01   3.5776364e+01
+   4.1250000e+01   1.3539636e+01   3.5778083e+01
+   4.1250000e+01   1.3586083e+01   3.5781620e+01
+   4.1250000e+01   1.3649860e+01   3.5788785e+01
+   4.1250000e+01   1.3724041e+01   3.5795174e+01
+   4.1250000e+01   1.3795636e+01   3.5799347e+01
+   4.1250000e+01   1.3896884e+01   3.5810504e+01
+   4.1250000e+01   1.4007802e+01   3.5819636e+01
+   4.1250000e+01   1.4119207e+01   3.5823149e+01
+   4.1250000e+01   1.4275008e+01   3.5831579e+01
+   4.1250000e+01   1.4495909e+01   3.5833537e+01
+   4.1250000e+01   1.4732562e+01   3.5837397e+01
+   4.1250000e+01   1.4997446e+01   3.5833347e+01
+   4.1250000e+01   1.5706603e+01   3.5837281e+01
+   4.1250000e+01   1.6613545e+01   3.5844116e+01
+   4.1250000e+01   1.7261298e+01   3.5850289e+01
+   4.1250000e+01   1.8017446e+01   3.5853281e+01
+   4.1250000e+01   1.8879421e+01   3.5867727e+01
+   4.1250000e+01   1.9534612e+01   3.5871678e+01
+   4.1250000e+01   1.9774289e+01   3.5868719e+01
+   4.1250000e+01   1.9845992e+01   3.5868760e+01
+   4.1250000e+01   1.9857645e+01   3.5869248e+01
+   4.1250000e+01   1.9858744e+01   3.5869810e+01
+   4.1250000e+01   1.9851843e+01   3.5868702e+01
+   4.1250000e+01   1.9795959e+01   3.5873008e+01
+   4.1300000e+01   2.5103554e+00   3.4896107e+01
+   4.1300000e+01   2.5061901e+00   3.4902207e+01
+   4.1300000e+01   2.5121488e+00   3.4907306e+01
+   4.1300000e+01   2.5413554e+00   3.4914521e+01
+   4.1300000e+01   2.5794959e+00   3.4919405e+01
+   4.1300000e+01   2.6451405e+00   3.4928736e+01
+   4.1300000e+01   2.7416281e+00   3.4940488e+01
+   4.1300000e+01   2.8990331e+00   3.4952802e+01
+   4.1300000e+01   3.0880496e+00   3.4961322e+01
+   4.1300000e+01   3.3536529e+00   3.4973281e+01
+   4.1300000e+01   3.5827603e+00   3.4972736e+01
+   4.1300000e+01   3.8425455e+00   3.4984074e+01
+   4.1300000e+01   4.3142231e+00   3.5036645e+01
+   4.1300000e+01   5.2460165e+00   3.5170777e+01
+   4.1300000e+01   6.6648926e+00   3.5382711e+01
+   4.1300000e+01   8.2569008e+00   3.5621149e+01
+   4.1300000e+01   9.2870413e+00   3.5722876e+01
+   4.1300000e+01   9.5328760e+00   3.5630785e+01
+   4.1300000e+01   9.9026364e+00   3.5537066e+01
+   4.1300000e+01   1.0298083e+01   3.5480702e+01
+   4.1300000e+01   1.0770826e+01   3.5489091e+01
+   4.1300000e+01   1.1255678e+01   3.5531455e+01
+   4.1300000e+01   1.1602421e+01   3.5566000e+01
+   4.1300000e+01   1.1914041e+01   3.5601397e+01
+   4.1300000e+01   1.2147298e+01   3.5626901e+01
+   4.1300000e+01   1.2343058e+01   3.5648785e+01
+   4.1300000e+01   1.2494471e+01   3.5664835e+01
+   4.1300000e+01   1.2597438e+01   3.5676273e+01
+   4.1300000e+01   1.2688149e+01   3.5686380e+01
+   4.1300000e+01   1.2785116e+01   3.5697636e+01
+   4.1300000e+01   1.2848306e+01   3.5705074e+01
+   4.1300000e+01   1.2914322e+01   3.5711992e+01
+   4.1300000e+01   1.3001628e+01   3.5721826e+01
+   4.1300000e+01   1.3051289e+01   3.5725025e+01
+   4.1300000e+01   1.3089132e+01   3.5727711e+01
+   4.1300000e+01   1.3142140e+01   3.5735612e+01
+   4.1300000e+01   1.3179091e+01   3.5738893e+01
+   4.1300000e+01   1.3225289e+01   3.5744364e+01
+   4.1300000e+01   1.3285380e+01   3.5750000e+01
+   4.1300000e+01   1.3351380e+01   3.5760339e+01
+   4.1300000e+01   1.3413512e+01   3.5768570e+01
+   4.1300000e+01   1.3485198e+01   3.5776364e+01
+   4.1300000e+01   1.3539636e+01   3.5778083e+01
+   4.1300000e+01   1.3586083e+01   3.5781620e+01
+   4.1300000e+01   1.3649860e+01   3.5788785e+01
+   4.1300000e+01   1.3724041e+01   3.5795174e+01
+   4.1300000e+01   1.3795636e+01   3.5799347e+01
+   4.1300000e+01   1.3896884e+01   3.5810504e+01
+   4.1300000e+01   1.4007802e+01   3.5819636e+01
+   4.1300000e+01   1.4119207e+01   3.5823149e+01
+   4.1300000e+01   1.4275008e+01   3.5831579e+01
+   4.1300000e+01   1.4495909e+01   3.5833537e+01
+   4.1300000e+01   1.4732562e+01   3.5837397e+01
+   4.1300000e+01   1.4997446e+01   3.5833347e+01
+   4.1300000e+01   1.5706603e+01   3.5837281e+01
+   4.1300000e+01   1.6613545e+01   3.5844116e+01
+   4.1300000e+01   1.7261298e+01   3.5850289e+01
+   4.1300000e+01   1.8017446e+01   3.5853281e+01
+   4.1300000e+01   1.8879421e+01   3.5867727e+01
+   4.1300000e+01   1.9534612e+01   3.5871678e+01
+   4.1300000e+01   1.9774289e+01   3.5868719e+01
+   4.1300000e+01   1.9845992e+01   3.5868760e+01
+   4.1300000e+01   1.9857645e+01   3.5869248e+01
+   4.1300000e+01   1.9858744e+01   3.5869810e+01
+   4.1300000e+01   1.9851843e+01   3.5868702e+01
+   4.1300000e+01   1.9795959e+01   3.5873008e+01
+   4.1350000e+01   2.5103554e+00   3.4896107e+01
+   4.1350000e+01   2.5061901e+00   3.4902207e+01
+   4.1350000e+01   2.5121488e+00   3.4907306e+01
+   4.1350000e+01   2.5413554e+00   3.4914521e+01
+   4.1350000e+01   2.5794959e+00   3.4919405e+01
+   4.1350000e+01   2.6451405e+00   3.4928736e+01
+   4.1350000e+01   2.7416281e+00   3.4940488e+01
+   4.1350000e+01   2.8990331e+00   3.4952802e+01
+   4.1350000e+01   3.0880496e+00   3.4961322e+01
+   4.1350000e+01   3.3536529e+00   3.4973281e+01
+   4.1350000e+01   3.5827603e+00   3.4972736e+01
+   4.1350000e+01   3.8425455e+00   3.4984074e+01
+   4.1350000e+01   4.3142231e+00   3.5036645e+01
+   4.1350000e+01   5.2460165e+00   3.5170777e+01
+   4.1350000e+01   6.6648926e+00   3.5382711e+01
+   4.1350000e+01   8.2569008e+00   3.5621149e+01
+   4.1350000e+01   9.2870413e+00   3.5722876e+01
+   4.1350000e+01   9.5328760e+00   3.5630785e+01
+   4.1350000e+01   9.9026364e+00   3.5537066e+01
+   4.1350000e+01   1.0298083e+01   3.5480702e+01
+   4.1350000e+01   1.0770826e+01   3.5489091e+01
+   4.1350000e+01   1.1255678e+01   3.5531455e+01
+   4.1350000e+01   1.1602421e+01   3.5566000e+01
+   4.1350000e+01   1.1914041e+01   3.5601397e+01
+   4.1350000e+01   1.2147298e+01   3.5626901e+01
+   4.1350000e+01   1.2343058e+01   3.5648785e+01
+   4.1350000e+01   1.2494471e+01   3.5664835e+01
+   4.1350000e+01   1.2597438e+01   3.5676273e+01
+   4.1350000e+01   1.2688149e+01   3.5686380e+01
+   4.1350000e+01   1.2785116e+01   3.5697636e+01
+   4.1350000e+01   1.2848306e+01   3.5705074e+01
+   4.1350000e+01   1.2914322e+01   3.5711992e+01
+   4.1350000e+01   1.3001628e+01   3.5721826e+01
+   4.1350000e+01   1.3051289e+01   3.5725025e+01
+   4.1350000e+01   1.3089132e+01   3.5727711e+01
+   4.1350000e+01   1.3142140e+01   3.5735612e+01
+   4.1350000e+01   1.3179091e+01   3.5738893e+01
+   4.1350000e+01   1.3225289e+01   3.5744364e+01
+   4.1350000e+01   1.3285380e+01   3.5750000e+01
+   4.1350000e+01   1.3351380e+01   3.5760339e+01
+   4.1350000e+01   1.3413512e+01   3.5768570e+01
+   4.1350000e+01   1.3485198e+01   3.5776364e+01
+   4.1350000e+01   1.3539636e+01   3.5778083e+01
+   4.1350000e+01   1.3586083e+01   3.5781620e+01
+   4.1350000e+01   1.3649860e+01   3.5788785e+01
+   4.1350000e+01   1.3724041e+01   3.5795174e+01
+   4.1350000e+01   1.3795636e+01   3.5799347e+01
+   4.1350000e+01   1.3896884e+01   3.5810504e+01
+   4.1350000e+01   1.4007802e+01   3.5819636e+01
+   4.1350000e+01   1.4119207e+01   3.5823149e+01
+   4.1350000e+01   1.4275008e+01   3.5831579e+01
+   4.1350000e+01   1.4495909e+01   3.5833537e+01
+   4.1350000e+01   1.4732562e+01   3.5837397e+01
+   4.1350000e+01   1.4997446e+01   3.5833347e+01
+   4.1350000e+01   1.5706603e+01   3.5837281e+01
+   4.1350000e+01   1.6613545e+01   3.5844116e+01
+   4.1350000e+01   1.7261298e+01   3.5850289e+01
+   4.1350000e+01   1.8017446e+01   3.5853281e+01
+   4.1350000e+01   1.8879421e+01   3.5867727e+01
+   4.1350000e+01   1.9534612e+01   3.5871678e+01
+   4.1350000e+01   1.9774289e+01   3.5868719e+01
+   4.1350000e+01   1.9845992e+01   3.5868760e+01
+   4.1350000e+01   1.9857645e+01   3.5869248e+01
+   4.1350000e+01   1.9858744e+01   3.5869810e+01
+   4.1350000e+01   1.9851843e+01   3.5868702e+01
+   4.1350000e+01   1.9795959e+01   3.5873008e+01
+   4.1400000e+01   2.5103554e+00   3.4896107e+01
+   4.1400000e+01   2.5061901e+00   3.4902207e+01
+   4.1400000e+01   2.5121488e+00   3.4907306e+01
+   4.1400000e+01   2.5413554e+00   3.4914521e+01
+   4.1400000e+01   2.5794959e+00   3.4919405e+01
+   4.1400000e+01   2.6451405e+00   3.4928736e+01
+   4.1400000e+01   2.7416281e+00   3.4940488e+01
+   4.1400000e+01   2.8990331e+00   3.4952802e+01
+   4.1400000e+01   3.0880496e+00   3.4961322e+01
+   4.1400000e+01   3.3536529e+00   3.4973281e+01
+   4.1400000e+01   3.5827603e+00   3.4972736e+01
+   4.1400000e+01   3.8425455e+00   3.4984074e+01
+   4.1400000e+01   4.3142231e+00   3.5036645e+01
+   4.1400000e+01   5.2460165e+00   3.5170777e+01
+   4.1400000e+01   6.6648926e+00   3.5382711e+01
+   4.1400000e+01   8.2569008e+00   3.5621149e+01
+   4.1400000e+01   9.2870413e+00   3.5722876e+01
+   4.1400000e+01   9.5328760e+00   3.5630785e+01
+   4.1400000e+01   9.9026364e+00   3.5537066e+01
+   4.1400000e+01   1.0298083e+01   3.5480702e+01
+   4.1400000e+01   1.0770826e+01   3.5489091e+01
+   4.1400000e+01   1.1255678e+01   3.5531455e+01
+   4.1400000e+01   1.1602421e+01   3.5566000e+01
+   4.1400000e+01   1.1914041e+01   3.5601397e+01
+   4.1400000e+01   1.2147298e+01   3.5626901e+01
+   4.1400000e+01   1.2343058e+01   3.5648785e+01
+   4.1400000e+01   1.2494471e+01   3.5664835e+01
+   4.1400000e+01   1.2597438e+01   3.5676273e+01
+   4.1400000e+01   1.2688149e+01   3.5686380e+01
+   4.1400000e+01   1.2785116e+01   3.5697636e+01
+   4.1400000e+01   1.2848306e+01   3.5705074e+01
+   4.1400000e+01   1.2914322e+01   3.5711992e+01
+   4.1400000e+01   1.3001628e+01   3.5721826e+01
+   4.1400000e+01   1.3051289e+01   3.5725025e+01
+   4.1400000e+01   1.3089132e+01   3.5727711e+01
+   4.1400000e+01   1.3142140e+01   3.5735612e+01
+   4.1400000e+01   1.3179091e+01   3.5738893e+01
+   4.1400000e+01   1.3225289e+01   3.5744364e+01
+   4.1400000e+01   1.3285380e+01   3.5750000e+01
+   4.1400000e+01   1.3351380e+01   3.5760339e+01
+   4.1400000e+01   1.3413512e+01   3.5768570e+01
+   4.1400000e+01   1.3485198e+01   3.5776364e+01
+   4.1400000e+01   1.3539636e+01   3.5778083e+01
+   4.1400000e+01   1.3586083e+01   3.5781620e+01
+   4.1400000e+01   1.3649860e+01   3.5788785e+01
+   4.1400000e+01   1.3724041e+01   3.5795174e+01
+   4.1400000e+01   1.3795636e+01   3.5799347e+01
+   4.1400000e+01   1.3896884e+01   3.5810504e+01
+   4.1400000e+01   1.4007802e+01   3.5819636e+01
+   4.1400000e+01   1.4119207e+01   3.5823149e+01
+   4.1400000e+01   1.4275008e+01   3.5831579e+01
+   4.1400000e+01   1.4495909e+01   3.5833537e+01
+   4.1400000e+01   1.4732562e+01   3.5837397e+01
+   4.1400000e+01   1.4997446e+01   3.5833347e+01
+   4.1400000e+01   1.5706603e+01   3.5837281e+01
+   4.1400000e+01   1.6613545e+01   3.5844116e+01
+   4.1400000e+01   1.7261298e+01   3.5850289e+01
+   4.1400000e+01   1.8017446e+01   3.5853281e+01
+   4.1400000e+01   1.8879421e+01   3.5867727e+01
+   4.1400000e+01   1.9534612e+01   3.5871678e+01
+   4.1400000e+01   1.9774289e+01   3.5868719e+01
+   4.1400000e+01   1.9845992e+01   3.5868760e+01
+   4.1400000e+01   1.9857645e+01   3.5869248e+01
+   4.1400000e+01   1.9858744e+01   3.5869810e+01
+   4.1400000e+01   1.9851843e+01   3.5868702e+01
+   4.1400000e+01   1.9795959e+01   3.5873008e+01
+   4.1450000e+01   2.5103554e+00   3.4896107e+01
+   4.1450000e+01   2.5061901e+00   3.4902207e+01
+   4.1450000e+01   2.5121488e+00   3.4907306e+01
+   4.1450000e+01   2.5413554e+00   3.4914521e+01
+   4.1450000e+01   2.5794959e+00   3.4919405e+01
+   4.1450000e+01   2.6451405e+00   3.4928736e+01
+   4.1450000e+01   2.7416281e+00   3.4940488e+01
+   4.1450000e+01   2.8990331e+00   3.4952802e+01
+   4.1450000e+01   3.0880496e+00   3.4961322e+01
+   4.1450000e+01   3.3536529e+00   3.4973281e+01
+   4.1450000e+01   3.5827603e+00   3.4972736e+01
+   4.1450000e+01   3.8425455e+00   3.4984074e+01
+   4.1450000e+01   4.3142231e+00   3.5036645e+01
+   4.1450000e+01   5.2460165e+00   3.5170777e+01
+   4.1450000e+01   6.6648926e+00   3.5382711e+01
+   4.1450000e+01   8.2569008e+00   3.5621149e+01
+   4.1450000e+01   9.2870413e+00   3.5722876e+01
+   4.1450000e+01   9.5328760e+00   3.5630785e+01
+   4.1450000e+01   9.9026364e+00   3.5537066e+01
+   4.1450000e+01   1.0298083e+01   3.5480702e+01
+   4.1450000e+01   1.0770826e+01   3.5489091e+01
+   4.1450000e+01   1.1255678e+01   3.5531455e+01
+   4.1450000e+01   1.1602421e+01   3.5566000e+01
+   4.1450000e+01   1.1914041e+01   3.5601397e+01
+   4.1450000e+01   1.2147298e+01   3.5626901e+01
+   4.1450000e+01   1.2343058e+01   3.5648785e+01
+   4.1450000e+01   1.2494471e+01   3.5664835e+01
+   4.1450000e+01   1.2597438e+01   3.5676273e+01
+   4.1450000e+01   1.2688149e+01   3.5686380e+01
+   4.1450000e+01   1.2785116e+01   3.5697636e+01
+   4.1450000e+01   1.2848306e+01   3.5705074e+01
+   4.1450000e+01   1.2914322e+01   3.5711992e+01
+   4.1450000e+01   1.3001628e+01   3.5721826e+01
+   4.1450000e+01   1.3051289e+01   3.5725025e+01
+   4.1450000e+01   1.3089132e+01   3.5727711e+01
+   4.1450000e+01   1.3142140e+01   3.5735612e+01
+   4.1450000e+01   1.3179091e+01   3.5738893e+01
+   4.1450000e+01   1.3225289e+01   3.5744364e+01
+   4.1450000e+01   1.3285380e+01   3.5750000e+01
+   4.1450000e+01   1.3351380e+01   3.5760339e+01
+   4.1450000e+01   1.3413512e+01   3.5768570e+01
+   4.1450000e+01   1.3485198e+01   3.5776364e+01
+   4.1450000e+01   1.3539636e+01   3.5778083e+01
+   4.1450000e+01   1.3586083e+01   3.5781620e+01
+   4.1450000e+01   1.3649860e+01   3.5788785e+01
+   4.1450000e+01   1.3724041e+01   3.5795174e+01
+   4.1450000e+01   1.3795636e+01   3.5799347e+01
+   4.1450000e+01   1.3896884e+01   3.5810504e+01
+   4.1450000e+01   1.4007802e+01   3.5819636e+01
+   4.1450000e+01   1.4119207e+01   3.5823149e+01
+   4.1450000e+01   1.4275008e+01   3.5831579e+01
+   4.1450000e+01   1.4495909e+01   3.5833537e+01
+   4.1450000e+01   1.4732562e+01   3.5837397e+01
+   4.1450000e+01   1.4997446e+01   3.5833347e+01
+   4.1450000e+01   1.5706603e+01   3.5837281e+01
+   4.1450000e+01   1.6613545e+01   3.5844116e+01
+   4.1450000e+01   1.7261298e+01   3.5850289e+01
+   4.1450000e+01   1.8017446e+01   3.5853281e+01
+   4.1450000e+01   1.8879421e+01   3.5867727e+01
+   4.1450000e+01   1.9534612e+01   3.5871678e+01
+   4.1450000e+01   1.9774289e+01   3.5868719e+01
+   4.1450000e+01   1.9845992e+01   3.5868760e+01
+   4.1450000e+01   1.9857645e+01   3.5869248e+01
+   4.1450000e+01   1.9858744e+01   3.5869810e+01
+   4.1450000e+01   1.9851843e+01   3.5868702e+01
+   4.1450000e+01   1.9795959e+01   3.5873008e+01
+   4.1500000e+01   2.5103554e+00   3.4896107e+01
+   4.1500000e+01   2.5061901e+00   3.4902207e+01
+   4.1500000e+01   2.5121488e+00   3.4907306e+01
+   4.1500000e+01   2.5413554e+00   3.4914521e+01
+   4.1500000e+01   2.5794959e+00   3.4919405e+01
+   4.1500000e+01   2.6451405e+00   3.4928736e+01
+   4.1500000e+01   2.7416281e+00   3.4940488e+01
+   4.1500000e+01   2.8990331e+00   3.4952802e+01
+   4.1500000e+01   3.0880496e+00   3.4961322e+01
+   4.1500000e+01   3.3536529e+00   3.4973281e+01
+   4.1500000e+01   3.5827603e+00   3.4972736e+01
+   4.1500000e+01   3.8425455e+00   3.4984074e+01
+   4.1500000e+01   4.3142231e+00   3.5036645e+01
+   4.1500000e+01   5.2460165e+00   3.5170777e+01
+   4.1500000e+01   6.6648926e+00   3.5382711e+01
+   4.1500000e+01   8.2569008e+00   3.5621149e+01
+   4.1500000e+01   9.2870413e+00   3.5722876e+01
+   4.1500000e+01   9.5328760e+00   3.5630785e+01
+   4.1500000e+01   9.9026364e+00   3.5537066e+01
+   4.1500000e+01   1.0298083e+01   3.5480702e+01
+   4.1500000e+01   1.0770826e+01   3.5489091e+01
+   4.1500000e+01   1.1255678e+01   3.5531455e+01
+   4.1500000e+01   1.1602421e+01   3.5566000e+01
+   4.1500000e+01   1.1914041e+01   3.5601397e+01
+   4.1500000e+01   1.2147298e+01   3.5626901e+01
+   4.1500000e+01   1.2343058e+01   3.5648785e+01
+   4.1500000e+01   1.2494471e+01   3.5664835e+01
+   4.1500000e+01   1.2597438e+01   3.5676273e+01
+   4.1500000e+01   1.2688149e+01   3.5686380e+01
+   4.1500000e+01   1.2785116e+01   3.5697636e+01
+   4.1500000e+01   1.2848306e+01   3.5705074e+01
+   4.1500000e+01   1.2914322e+01   3.5711992e+01
+   4.1500000e+01   1.3001628e+01   3.5721826e+01
+   4.1500000e+01   1.3051289e+01   3.5725025e+01
+   4.1500000e+01   1.3089132e+01   3.5727711e+01
+   4.1500000e+01   1.3142140e+01   3.5735612e+01
+   4.1500000e+01   1.3179091e+01   3.5738893e+01
+   4.1500000e+01   1.3225289e+01   3.5744364e+01
+   4.1500000e+01   1.3285380e+01   3.5750000e+01
+   4.1500000e+01   1.3351380e+01   3.5760339e+01
+   4.1500000e+01   1.3413512e+01   3.5768570e+01
+   4.1500000e+01   1.3485198e+01   3.5776364e+01
+   4.1500000e+01   1.3539636e+01   3.5778083e+01
+   4.1500000e+01   1.3586083e+01   3.5781620e+01
+   4.1500000e+01   1.3649860e+01   3.5788785e+01
+   4.1500000e+01   1.3724041e+01   3.5795174e+01
+   4.1500000e+01   1.3795636e+01   3.5799347e+01
+   4.1500000e+01   1.3896884e+01   3.5810504e+01
+   4.1500000e+01   1.4007802e+01   3.5819636e+01
+   4.1500000e+01   1.4119207e+01   3.5823149e+01
+   4.1500000e+01   1.4275008e+01   3.5831579e+01
+   4.1500000e+01   1.4495909e+01   3.5833537e+01
+   4.1500000e+01   1.4732562e+01   3.5837397e+01
+   4.1500000e+01   1.4997446e+01   3.5833347e+01
+   4.1500000e+01   1.5706603e+01   3.5837281e+01
+   4.1500000e+01   1.6613545e+01   3.5844116e+01
+   4.1500000e+01   1.7261298e+01   3.5850289e+01
+   4.1500000e+01   1.8017446e+01   3.5853281e+01
+   4.1500000e+01   1.8879421e+01   3.5867727e+01
+   4.1500000e+01   1.9534612e+01   3.5871678e+01
+   4.1500000e+01   1.9774289e+01   3.5868719e+01
+   4.1500000e+01   1.9845992e+01   3.5868760e+01
+   4.1500000e+01   1.9857645e+01   3.5869248e+01
+   4.1500000e+01   1.9858744e+01   3.5869810e+01
+   4.1500000e+01   1.9851843e+01   3.5868702e+01
+   4.1500000e+01   1.9795959e+01   3.5873008e+01
+   4.1550000e+01   2.5103554e+00   3.4896107e+01
+   4.1550000e+01   2.5061901e+00   3.4902207e+01
+   4.1550000e+01   2.5121488e+00   3.4907306e+01
+   4.1550000e+01   2.5413554e+00   3.4914521e+01
+   4.1550000e+01   2.5794959e+00   3.4919405e+01
+   4.1550000e+01   2.6451405e+00   3.4928736e+01
+   4.1550000e+01   2.7416281e+00   3.4940488e+01
+   4.1550000e+01   2.8990331e+00   3.4952802e+01
+   4.1550000e+01   3.0880496e+00   3.4961322e+01
+   4.1550000e+01   3.3536529e+00   3.4973281e+01
+   4.1550000e+01   3.5827603e+00   3.4972736e+01
+   4.1550000e+01   3.8425455e+00   3.4984074e+01
+   4.1550000e+01   4.3142231e+00   3.5036645e+01
+   4.1550000e+01   5.2460165e+00   3.5170777e+01
+   4.1550000e+01   6.6648926e+00   3.5382711e+01
+   4.1550000e+01   8.2569008e+00   3.5621149e+01
+   4.1550000e+01   9.2870413e+00   3.5722876e+01
+   4.1550000e+01   9.5328760e+00   3.5630785e+01
+   4.1550000e+01   9.9026364e+00   3.5537066e+01
+   4.1550000e+01   1.0298083e+01   3.5480702e+01
+   4.1550000e+01   1.0770826e+01   3.5489091e+01
+   4.1550000e+01   1.1255678e+01   3.5531455e+01
+   4.1550000e+01   1.1602421e+01   3.5566000e+01
+   4.1550000e+01   1.1914041e+01   3.5601397e+01
+   4.1550000e+01   1.2147298e+01   3.5626901e+01
+   4.1550000e+01   1.2343058e+01   3.5648785e+01
+   4.1550000e+01   1.2494471e+01   3.5664835e+01
+   4.1550000e+01   1.2597438e+01   3.5676273e+01
+   4.1550000e+01   1.2688149e+01   3.5686380e+01
+   4.1550000e+01   1.2785116e+01   3.5697636e+01
+   4.1550000e+01   1.2848306e+01   3.5705074e+01
+   4.1550000e+01   1.2914322e+01   3.5711992e+01
+   4.1550000e+01   1.3001628e+01   3.5721826e+01
+   4.1550000e+01   1.3051289e+01   3.5725025e+01
+   4.1550000e+01   1.3089132e+01   3.5727711e+01
+   4.1550000e+01   1.3142140e+01   3.5735612e+01
+   4.1550000e+01   1.3179091e+01   3.5738893e+01
+   4.1550000e+01   1.3225289e+01   3.5744364e+01
+   4.1550000e+01   1.3285380e+01   3.5750000e+01
+   4.1550000e+01   1.3351380e+01   3.5760339e+01
+   4.1550000e+01   1.3413512e+01   3.5768570e+01
+   4.1550000e+01   1.3485198e+01   3.5776364e+01
+   4.1550000e+01   1.3539636e+01   3.5778083e+01
+   4.1550000e+01   1.3586083e+01   3.5781620e+01
+   4.1550000e+01   1.3649860e+01   3.5788785e+01
+   4.1550000e+01   1.3724041e+01   3.5795174e+01
+   4.1550000e+01   1.3795636e+01   3.5799347e+01
+   4.1550000e+01   1.3896884e+01   3.5810504e+01
+   4.1550000e+01   1.4007802e+01   3.5819636e+01
+   4.1550000e+01   1.4119207e+01   3.5823149e+01
+   4.1550000e+01   1.4275008e+01   3.5831579e+01
+   4.1550000e+01   1.4495909e+01   3.5833537e+01
+   4.1550000e+01   1.4732562e+01   3.5837397e+01
+   4.1550000e+01   1.4997446e+01   3.5833347e+01
+   4.1550000e+01   1.5706603e+01   3.5837281e+01
+   4.1550000e+01   1.6613545e+01   3.5844116e+01
+   4.1550000e+01   1.7261298e+01   3.5850289e+01
+   4.1550000e+01   1.8017446e+01   3.5853281e+01
+   4.1550000e+01   1.8879421e+01   3.5867727e+01
+   4.1550000e+01   1.9534612e+01   3.5871678e+01
+   4.1550000e+01   1.9774289e+01   3.5868719e+01
+   4.1550000e+01   1.9845992e+01   3.5868760e+01
+   4.1550000e+01   1.9857645e+01   3.5869248e+01
+   4.1550000e+01   1.9858744e+01   3.5869810e+01
+   4.1550000e+01   1.9851843e+01   3.5868702e+01
+   4.1550000e+01   1.9795959e+01   3.5873008e+01
+   4.1600000e+01   2.5103554e+00   3.4896107e+01
+   4.1600000e+01   2.5061901e+00   3.4902207e+01
+   4.1600000e+01   2.5121488e+00   3.4907306e+01
+   4.1600000e+01   2.5413554e+00   3.4914521e+01
+   4.1600000e+01   2.5794959e+00   3.4919405e+01
+   4.1600000e+01   2.6451405e+00   3.4928736e+01
+   4.1600000e+01   2.7416281e+00   3.4940488e+01
+   4.1600000e+01   2.8990331e+00   3.4952802e+01
+   4.1600000e+01   3.0880496e+00   3.4961322e+01
+   4.1600000e+01   3.3536529e+00   3.4973281e+01
+   4.1600000e+01   3.5827603e+00   3.4972736e+01
+   4.1600000e+01   3.8425455e+00   3.4984074e+01
+   4.1600000e+01   4.3142231e+00   3.5036645e+01
+   4.1600000e+01   5.2460165e+00   3.5170777e+01
+   4.1600000e+01   6.6648926e+00   3.5382711e+01
+   4.1600000e+01   8.2569008e+00   3.5621149e+01
+   4.1600000e+01   9.2870413e+00   3.5722876e+01
+   4.1600000e+01   9.5328760e+00   3.5630785e+01
+   4.1600000e+01   9.9026364e+00   3.5537066e+01
+   4.1600000e+01   1.0298083e+01   3.5480702e+01
+   4.1600000e+01   1.0770826e+01   3.5489091e+01
+   4.1600000e+01   1.1255678e+01   3.5531455e+01
+   4.1600000e+01   1.1602421e+01   3.5566000e+01
+   4.1600000e+01   1.1914041e+01   3.5601397e+01
+   4.1600000e+01   1.2147298e+01   3.5626901e+01
+   4.1600000e+01   1.2343058e+01   3.5648785e+01
+   4.1600000e+01   1.2494471e+01   3.5664835e+01
+   4.1600000e+01   1.2597438e+01   3.5676273e+01
+   4.1600000e+01   1.2688149e+01   3.5686380e+01
+   4.1600000e+01   1.2785116e+01   3.5697636e+01
+   4.1600000e+01   1.2848306e+01   3.5705074e+01
+   4.1600000e+01   1.2914322e+01   3.5711992e+01
+   4.1600000e+01   1.3001628e+01   3.5721826e+01
+   4.1600000e+01   1.3051289e+01   3.5725025e+01
+   4.1600000e+01   1.3089132e+01   3.5727711e+01
+   4.1600000e+01   1.3142140e+01   3.5735612e+01
+   4.1600000e+01   1.3179091e+01   3.5738893e+01
+   4.1600000e+01   1.3225289e+01   3.5744364e+01
+   4.1600000e+01   1.3285380e+01   3.5750000e+01
+   4.1600000e+01   1.3351380e+01   3.5760339e+01
+   4.1600000e+01   1.3413512e+01   3.5768570e+01
+   4.1600000e+01   1.3485198e+01   3.5776364e+01
+   4.1600000e+01   1.3539636e+01   3.5778083e+01
+   4.1600000e+01   1.3586083e+01   3.5781620e+01
+   4.1600000e+01   1.3649860e+01   3.5788785e+01
+   4.1600000e+01   1.3724041e+01   3.5795174e+01
+   4.1600000e+01   1.3795636e+01   3.5799347e+01
+   4.1600000e+01   1.3896884e+01   3.5810504e+01
+   4.1600000e+01   1.4007802e+01   3.5819636e+01
+   4.1600000e+01   1.4119207e+01   3.5823149e+01
+   4.1600000e+01   1.4275008e+01   3.5831579e+01
+   4.1600000e+01   1.4495909e+01   3.5833537e+01
+   4.1600000e+01   1.4732562e+01   3.5837397e+01
+   4.1600000e+01   1.4997446e+01   3.5833347e+01
+   4.1600000e+01   1.5706603e+01   3.5837281e+01
+   4.1600000e+01   1.6613545e+01   3.5844116e+01
+   4.1600000e+01   1.7261298e+01   3.5850289e+01
+   4.1600000e+01   1.8017446e+01   3.5853281e+01
+   4.1600000e+01   1.8879421e+01   3.5867727e+01
+   4.1600000e+01   1.9534612e+01   3.5871678e+01
+   4.1600000e+01   1.9774289e+01   3.5868719e+01
+   4.1600000e+01   1.9845992e+01   3.5868760e+01
+   4.1600000e+01   1.9857645e+01   3.5869248e+01
+   4.1600000e+01   1.9858744e+01   3.5869810e+01
+   4.1600000e+01   1.9851843e+01   3.5868702e+01
+   4.1600000e+01   1.9795959e+01   3.5873008e+01
+   4.1650000e+01   2.5103554e+00   3.4896107e+01
+   4.1650000e+01   2.5061901e+00   3.4902207e+01
+   4.1650000e+01   2.5121488e+00   3.4907306e+01
+   4.1650000e+01   2.5413554e+00   3.4914521e+01
+   4.1650000e+01   2.5794959e+00   3.4919405e+01
+   4.1650000e+01   2.6451405e+00   3.4928736e+01
+   4.1650000e+01   2.7416281e+00   3.4940488e+01
+   4.1650000e+01   2.8990331e+00   3.4952802e+01
+   4.1650000e+01   3.0880496e+00   3.4961322e+01
+   4.1650000e+01   3.3536529e+00   3.4973281e+01
+   4.1650000e+01   3.5827603e+00   3.4972736e+01
+   4.1650000e+01   3.8425455e+00   3.4984074e+01
+   4.1650000e+01   4.3142231e+00   3.5036645e+01
+   4.1650000e+01   5.2460165e+00   3.5170777e+01
+   4.1650000e+01   6.6648926e+00   3.5382711e+01
+   4.1650000e+01   8.2569008e+00   3.5621149e+01
+   4.1650000e+01   9.2870413e+00   3.5722876e+01
+   4.1650000e+01   9.5328760e+00   3.5630785e+01
+   4.1650000e+01   9.9026364e+00   3.5537066e+01
+   4.1650000e+01   1.0298083e+01   3.5480702e+01
+   4.1650000e+01   1.0770826e+01   3.5489091e+01
+   4.1650000e+01   1.1255678e+01   3.5531455e+01
+   4.1650000e+01   1.1602421e+01   3.5566000e+01
+   4.1650000e+01   1.1914041e+01   3.5601397e+01
+   4.1650000e+01   1.2147298e+01   3.5626901e+01
+   4.1650000e+01   1.2343058e+01   3.5648785e+01
+   4.1650000e+01   1.2494471e+01   3.5664835e+01
+   4.1650000e+01   1.2597438e+01   3.5676273e+01
+   4.1650000e+01   1.2688149e+01   3.5686380e+01
+   4.1650000e+01   1.2785116e+01   3.5697636e+01
+   4.1650000e+01   1.2848306e+01   3.5705074e+01
+   4.1650000e+01   1.2914322e+01   3.5711992e+01
+   4.1650000e+01   1.3001628e+01   3.5721826e+01
+   4.1650000e+01   1.3051289e+01   3.5725025e+01
+   4.1650000e+01   1.3089132e+01   3.5727711e+01
+   4.1650000e+01   1.3142140e+01   3.5735612e+01
+   4.1650000e+01   1.3179091e+01   3.5738893e+01
+   4.1650000e+01   1.3225289e+01   3.5744364e+01
+   4.1650000e+01   1.3285380e+01   3.5750000e+01
+   4.1650000e+01   1.3351380e+01   3.5760339e+01
+   4.1650000e+01   1.3413512e+01   3.5768570e+01
+   4.1650000e+01   1.3485198e+01   3.5776364e+01
+   4.1650000e+01   1.3539636e+01   3.5778083e+01
+   4.1650000e+01   1.3586083e+01   3.5781620e+01
+   4.1650000e+01   1.3649860e+01   3.5788785e+01
+   4.1650000e+01   1.3724041e+01   3.5795174e+01
+   4.1650000e+01   1.3795636e+01   3.5799347e+01
+   4.1650000e+01   1.3896884e+01   3.5810504e+01
+   4.1650000e+01   1.4007802e+01   3.5819636e+01
+   4.1650000e+01   1.4119207e+01   3.5823149e+01
+   4.1650000e+01   1.4275008e+01   3.5831579e+01
+   4.1650000e+01   1.4495909e+01   3.5833537e+01
+   4.1650000e+01   1.4732562e+01   3.5837397e+01
+   4.1650000e+01   1.4997446e+01   3.5833347e+01
+   4.1650000e+01   1.5706603e+01   3.5837281e+01
+   4.1650000e+01   1.6613545e+01   3.5844116e+01
+   4.1650000e+01   1.7261298e+01   3.5850289e+01
+   4.1650000e+01   1.8017446e+01   3.5853281e+01
+   4.1650000e+01   1.8879421e+01   3.5867727e+01
+   4.1650000e+01   1.9534612e+01   3.5871678e+01
+   4.1650000e+01   1.9774289e+01   3.5868719e+01
+   4.1650000e+01   1.9845992e+01   3.5868760e+01
+   4.1650000e+01   1.9857645e+01   3.5869248e+01
+   4.1650000e+01   1.9858744e+01   3.5869810e+01
+   4.1650000e+01   1.9851843e+01   3.5868702e+01
+   4.1650000e+01   1.9795959e+01   3.5873008e+01
+   4.1700000e+01   2.5103554e+00   3.4896107e+01
+   4.1700000e+01   2.5061901e+00   3.4902207e+01
+   4.1700000e+01   2.5121488e+00   3.4907306e+01
+   4.1700000e+01   2.5413554e+00   3.4914521e+01
+   4.1700000e+01   2.5794959e+00   3.4919405e+01
+   4.1700000e+01   2.6451405e+00   3.4928736e+01
+   4.1700000e+01   2.7416281e+00   3.4940488e+01
+   4.1700000e+01   2.8990331e+00   3.4952802e+01
+   4.1700000e+01   3.0880496e+00   3.4961322e+01
+   4.1700000e+01   3.3536529e+00   3.4973281e+01
+   4.1700000e+01   3.5827603e+00   3.4972736e+01
+   4.1700000e+01   3.8425455e+00   3.4984074e+01
+   4.1700000e+01   4.3142231e+00   3.5036645e+01
+   4.1700000e+01   5.2460165e+00   3.5170777e+01
+   4.1700000e+01   6.6648926e+00   3.5382711e+01
+   4.1700000e+01   8.2569008e+00   3.5621149e+01
+   4.1700000e+01   9.2870413e+00   3.5722876e+01
+   4.1700000e+01   9.5328760e+00   3.5630785e+01
+   4.1700000e+01   9.9026364e+00   3.5537066e+01
+   4.1700000e+01   1.0298083e+01   3.5480702e+01
+   4.1700000e+01   1.0770826e+01   3.5489091e+01
+   4.1700000e+01   1.1255678e+01   3.5531455e+01
+   4.1700000e+01   1.1602421e+01   3.5566000e+01
+   4.1700000e+01   1.1914041e+01   3.5601397e+01
+   4.1700000e+01   1.2147298e+01   3.5626901e+01
+   4.1700000e+01   1.2343058e+01   3.5648785e+01
+   4.1700000e+01   1.2494471e+01   3.5664835e+01
+   4.1700000e+01   1.2597438e+01   3.5676273e+01
+   4.1700000e+01   1.2688149e+01   3.5686380e+01
+   4.1700000e+01   1.2785116e+01   3.5697636e+01
+   4.1700000e+01   1.2848306e+01   3.5705074e+01
+   4.1700000e+01   1.2914322e+01   3.5711992e+01
+   4.1700000e+01   1.3001628e+01   3.5721826e+01
+   4.1700000e+01   1.3051289e+01   3.5725025e+01
+   4.1700000e+01   1.3089132e+01   3.5727711e+01
+   4.1700000e+01   1.3142140e+01   3.5735612e+01
+   4.1700000e+01   1.3179091e+01   3.5738893e+01
+   4.1700000e+01   1.3225289e+01   3.5744364e+01
+   4.1700000e+01   1.3285380e+01   3.5750000e+01
+   4.1700000e+01   1.3351380e+01   3.5760339e+01
+   4.1700000e+01   1.3413512e+01   3.5768570e+01
+   4.1700000e+01   1.3485198e+01   3.5776364e+01
+   4.1700000e+01   1.3539636e+01   3.5778083e+01
+   4.1700000e+01   1.3586083e+01   3.5781620e+01
+   4.1700000e+01   1.3649860e+01   3.5788785e+01
+   4.1700000e+01   1.3724041e+01   3.5795174e+01
+   4.1700000e+01   1.3795636e+01   3.5799347e+01
+   4.1700000e+01   1.3896884e+01   3.5810504e+01
+   4.1700000e+01   1.4007802e+01   3.5819636e+01
+   4.1700000e+01   1.4119207e+01   3.5823149e+01
+   4.1700000e+01   1.4275008e+01   3.5831579e+01
+   4.1700000e+01   1.4495909e+01   3.5833537e+01
+   4.1700000e+01   1.4732562e+01   3.5837397e+01
+   4.1700000e+01   1.4997446e+01   3.5833347e+01
+   4.1700000e+01   1.5706603e+01   3.5837281e+01
+   4.1700000e+01   1.6613545e+01   3.5844116e+01
+   4.1700000e+01   1.7261298e+01   3.5850289e+01
+   4.1700000e+01   1.8017446e+01   3.5853281e+01
+   4.1700000e+01   1.8879421e+01   3.5867727e+01
+   4.1700000e+01   1.9534612e+01   3.5871678e+01
+   4.1700000e+01   1.9774289e+01   3.5868719e+01
+   4.1700000e+01   1.9845992e+01   3.5868760e+01
+   4.1700000e+01   1.9857645e+01   3.5869248e+01
+   4.1700000e+01   1.9858744e+01   3.5869810e+01
+   4.1700000e+01   1.9851843e+01   3.5868702e+01
+   4.1700000e+01   1.9795959e+01   3.5873008e+01
+   4.1750000e+01   2.5103554e+00   3.4896107e+01
+   4.1750000e+01   2.5061901e+00   3.4902207e+01
+   4.1750000e+01   2.5121488e+00   3.4907306e+01
+   4.1750000e+01   2.5413554e+00   3.4914521e+01
+   4.1750000e+01   2.5794959e+00   3.4919405e+01
+   4.1750000e+01   2.6451405e+00   3.4928736e+01
+   4.1750000e+01   2.7416281e+00   3.4940488e+01
+   4.1750000e+01   2.8990331e+00   3.4952802e+01
+   4.1750000e+01   3.0880496e+00   3.4961322e+01
+   4.1750000e+01   3.3536529e+00   3.4973281e+01
+   4.1750000e+01   3.5827603e+00   3.4972736e+01
+   4.1750000e+01   3.8425455e+00   3.4984074e+01
+   4.1750000e+01   4.3142231e+00   3.5036645e+01
+   4.1750000e+01   5.2460165e+00   3.5170777e+01
+   4.1750000e+01   6.6648926e+00   3.5382711e+01
+   4.1750000e+01   8.2569008e+00   3.5621149e+01
+   4.1750000e+01   9.2870413e+00   3.5722876e+01
+   4.1750000e+01   9.5328760e+00   3.5630785e+01
+   4.1750000e+01   9.9026364e+00   3.5537066e+01
+   4.1750000e+01   1.0298083e+01   3.5480702e+01
+   4.1750000e+01   1.0770826e+01   3.5489091e+01
+   4.1750000e+01   1.1255678e+01   3.5531455e+01
+   4.1750000e+01   1.1602421e+01   3.5566000e+01
+   4.1750000e+01   1.1914041e+01   3.5601397e+01
+   4.1750000e+01   1.2147298e+01   3.5626901e+01
+   4.1750000e+01   1.2343058e+01   3.5648785e+01
+   4.1750000e+01   1.2494471e+01   3.5664835e+01
+   4.1750000e+01   1.2597438e+01   3.5676273e+01
+   4.1750000e+01   1.2688149e+01   3.5686380e+01
+   4.1750000e+01   1.2785116e+01   3.5697636e+01
+   4.1750000e+01   1.2848306e+01   3.5705074e+01
+   4.1750000e+01   1.2914322e+01   3.5711992e+01
+   4.1750000e+01   1.3001628e+01   3.5721826e+01
+   4.1750000e+01   1.3051289e+01   3.5725025e+01
+   4.1750000e+01   1.3089132e+01   3.5727711e+01
+   4.1750000e+01   1.3142140e+01   3.5735612e+01
+   4.1750000e+01   1.3179091e+01   3.5738893e+01
+   4.1750000e+01   1.3225289e+01   3.5744364e+01
+   4.1750000e+01   1.3285380e+01   3.5750000e+01
+   4.1750000e+01   1.3351380e+01   3.5760339e+01
+   4.1750000e+01   1.3413512e+01   3.5768570e+01
+   4.1750000e+01   1.3485198e+01   3.5776364e+01
+   4.1750000e+01   1.3539636e+01   3.5778083e+01
+   4.1750000e+01   1.3586083e+01   3.5781620e+01
+   4.1750000e+01   1.3649860e+01   3.5788785e+01
+   4.1750000e+01   1.3724041e+01   3.5795174e+01
+   4.1750000e+01   1.3795636e+01   3.5799347e+01
+   4.1750000e+01   1.3896884e+01   3.5810504e+01
+   4.1750000e+01   1.4007802e+01   3.5819636e+01
+   4.1750000e+01   1.4119207e+01   3.5823149e+01
+   4.1750000e+01   1.4275008e+01   3.5831579e+01
+   4.1750000e+01   1.4495909e+01   3.5833537e+01
+   4.1750000e+01   1.4732562e+01   3.5837397e+01
+   4.1750000e+01   1.4997446e+01   3.5833347e+01
+   4.1750000e+01   1.5706603e+01   3.5837281e+01
+   4.1750000e+01   1.6613545e+01   3.5844116e+01
+   4.1750000e+01   1.7261298e+01   3.5850289e+01
+   4.1750000e+01   1.8017446e+01   3.5853281e+01
+   4.1750000e+01   1.8879421e+01   3.5867727e+01
+   4.1750000e+01   1.9534612e+01   3.5871678e+01
+   4.1750000e+01   1.9774289e+01   3.5868719e+01
+   4.1750000e+01   1.9845992e+01   3.5868760e+01
+   4.1750000e+01   1.9857645e+01   3.5869248e+01
+   4.1750000e+01   1.9858744e+01   3.5869810e+01
+   4.1750000e+01   1.9851843e+01   3.5868702e+01
+   4.1750000e+01   1.9795959e+01   3.5873008e+01
+   4.1800000e+01   2.5103554e+00   3.4896107e+01
+   4.1800000e+01   2.5061901e+00   3.4902207e+01
+   4.1800000e+01   2.5121488e+00   3.4907306e+01
+   4.1800000e+01   2.5413554e+00   3.4914521e+01
+   4.1800000e+01   2.5794959e+00   3.4919405e+01
+   4.1800000e+01   2.6451405e+00   3.4928736e+01
+   4.1800000e+01   2.7416281e+00   3.4940488e+01
+   4.1800000e+01   2.8990331e+00   3.4952802e+01
+   4.1800000e+01   3.0880496e+00   3.4961322e+01
+   4.1800000e+01   3.3536529e+00   3.4973281e+01
+   4.1800000e+01   3.5827603e+00   3.4972736e+01
+   4.1800000e+01   3.8425455e+00   3.4984074e+01
+   4.1800000e+01   4.3142231e+00   3.5036645e+01
+   4.1800000e+01   5.2460165e+00   3.5170777e+01
+   4.1800000e+01   6.6648926e+00   3.5382711e+01
+   4.1800000e+01   8.2569008e+00   3.5621149e+01
+   4.1800000e+01   9.2870413e+00   3.5722876e+01
+   4.1800000e+01   9.5328760e+00   3.5630785e+01
+   4.1800000e+01   9.9026364e+00   3.5537066e+01
+   4.1800000e+01   1.0298083e+01   3.5480702e+01
+   4.1800000e+01   1.0770826e+01   3.5489091e+01
+   4.1800000e+01   1.1255678e+01   3.5531455e+01
+   4.1800000e+01   1.1602421e+01   3.5566000e+01
+   4.1800000e+01   1.1914041e+01   3.5601397e+01
+   4.1800000e+01   1.2147298e+01   3.5626901e+01
+   4.1800000e+01   1.2343058e+01   3.5648785e+01
+   4.1800000e+01   1.2494471e+01   3.5664835e+01
+   4.1800000e+01   1.2597438e+01   3.5676273e+01
+   4.1800000e+01   1.2688149e+01   3.5686380e+01
+   4.1800000e+01   1.2785116e+01   3.5697636e+01
+   4.1800000e+01   1.2848306e+01   3.5705074e+01
+   4.1800000e+01   1.2914322e+01   3.5711992e+01
+   4.1800000e+01   1.3001628e+01   3.5721826e+01
+   4.1800000e+01   1.3051289e+01   3.5725025e+01
+   4.1800000e+01   1.3089132e+01   3.5727711e+01
+   4.1800000e+01   1.3142140e+01   3.5735612e+01
+   4.1800000e+01   1.3179091e+01   3.5738893e+01
+   4.1800000e+01   1.3225289e+01   3.5744364e+01
+   4.1800000e+01   1.3285380e+01   3.5750000e+01
+   4.1800000e+01   1.3351380e+01   3.5760339e+01
+   4.1800000e+01   1.3413512e+01   3.5768570e+01
+   4.1800000e+01   1.3485198e+01   3.5776364e+01
+   4.1800000e+01   1.3539636e+01   3.5778083e+01
+   4.1800000e+01   1.3586083e+01   3.5781620e+01
+   4.1800000e+01   1.3649860e+01   3.5788785e+01
+   4.1800000e+01   1.3724041e+01   3.5795174e+01
+   4.1800000e+01   1.3795636e+01   3.5799347e+01
+   4.1800000e+01   1.3896884e+01   3.5810504e+01
+   4.1800000e+01   1.4007802e+01   3.5819636e+01
+   4.1800000e+01   1.4119207e+01   3.5823149e+01
+   4.1800000e+01   1.4275008e+01   3.5831579e+01
+   4.1800000e+01   1.4495909e+01   3.5833537e+01
+   4.1800000e+01   1.4732562e+01   3.5837397e+01
+   4.1800000e+01   1.4997446e+01   3.5833347e+01
+   4.1800000e+01   1.5706603e+01   3.5837281e+01
+   4.1800000e+01   1.6613545e+01   3.5844116e+01
+   4.1800000e+01   1.7261298e+01   3.5850289e+01
+   4.1800000e+01   1.8017446e+01   3.5853281e+01
+   4.1800000e+01   1.8879421e+01   3.5867727e+01
+   4.1800000e+01   1.9534612e+01   3.5871678e+01
+   4.1800000e+01   1.9774289e+01   3.5868719e+01
+   4.1800000e+01   1.9845992e+01   3.5868760e+01
+   4.1800000e+01   1.9857645e+01   3.5869248e+01
+   4.1800000e+01   1.9858744e+01   3.5869810e+01
+   4.1800000e+01   1.9851843e+01   3.5868702e+01
+   4.1800000e+01   1.9795959e+01   3.5873008e+01
+   4.1850000e+01   2.5103554e+00   3.4896107e+01
+   4.1850000e+01   2.5061901e+00   3.4902207e+01
+   4.1850000e+01   2.5121488e+00   3.4907306e+01
+   4.1850000e+01   2.5413554e+00   3.4914521e+01
+   4.1850000e+01   2.5794959e+00   3.4919405e+01
+   4.1850000e+01   2.6451405e+00   3.4928736e+01
+   4.1850000e+01   2.7416281e+00   3.4940488e+01
+   4.1850000e+01   2.8990331e+00   3.4952802e+01
+   4.1850000e+01   3.0880496e+00   3.4961322e+01
+   4.1850000e+01   3.3536529e+00   3.4973281e+01
+   4.1850000e+01   3.5827603e+00   3.4972736e+01
+   4.1850000e+01   3.8425455e+00   3.4984074e+01
+   4.1850000e+01   4.3142231e+00   3.5036645e+01
+   4.1850000e+01   5.2460165e+00   3.5170777e+01
+   4.1850000e+01   6.6648926e+00   3.5382711e+01
+   4.1850000e+01   8.2569008e+00   3.5621149e+01
+   4.1850000e+01   9.2870413e+00   3.5722876e+01
+   4.1850000e+01   9.5328760e+00   3.5630785e+01
+   4.1850000e+01   9.9026364e+00   3.5537066e+01
+   4.1850000e+01   1.0298083e+01   3.5480702e+01
+   4.1850000e+01   1.0770826e+01   3.5489091e+01
+   4.1850000e+01   1.1255678e+01   3.5531455e+01
+   4.1850000e+01   1.1602421e+01   3.5566000e+01
+   4.1850000e+01   1.1914041e+01   3.5601397e+01
+   4.1850000e+01   1.2147298e+01   3.5626901e+01
+   4.1850000e+01   1.2343058e+01   3.5648785e+01
+   4.1850000e+01   1.2494471e+01   3.5664835e+01
+   4.1850000e+01   1.2597438e+01   3.5676273e+01
+   4.1850000e+01   1.2688149e+01   3.5686380e+01
+   4.1850000e+01   1.2785116e+01   3.5697636e+01
+   4.1850000e+01   1.2848306e+01   3.5705074e+01
+   4.1850000e+01   1.2914322e+01   3.5711992e+01
+   4.1850000e+01   1.3001628e+01   3.5721826e+01
+   4.1850000e+01   1.3051289e+01   3.5725025e+01
+   4.1850000e+01   1.3089132e+01   3.5727711e+01
+   4.1850000e+01   1.3142140e+01   3.5735612e+01
+   4.1850000e+01   1.3179091e+01   3.5738893e+01
+   4.1850000e+01   1.3225289e+01   3.5744364e+01
+   4.1850000e+01   1.3285380e+01   3.5750000e+01
+   4.1850000e+01   1.3351380e+01   3.5760339e+01
+   4.1850000e+01   1.3413512e+01   3.5768570e+01
+   4.1850000e+01   1.3485198e+01   3.5776364e+01
+   4.1850000e+01   1.3539636e+01   3.5778083e+01
+   4.1850000e+01   1.3586083e+01   3.5781620e+01
+   4.1850000e+01   1.3649860e+01   3.5788785e+01
+   4.1850000e+01   1.3724041e+01   3.5795174e+01
+   4.1850000e+01   1.3795636e+01   3.5799347e+01
+   4.1850000e+01   1.3896884e+01   3.5810504e+01
+   4.1850000e+01   1.4007802e+01   3.5819636e+01
+   4.1850000e+01   1.4119207e+01   3.5823149e+01
+   4.1850000e+01   1.4275008e+01   3.5831579e+01
+   4.1850000e+01   1.4495909e+01   3.5833537e+01
+   4.1850000e+01   1.4732562e+01   3.5837397e+01
+   4.1850000e+01   1.4997446e+01   3.5833347e+01
+   4.1850000e+01   1.5706603e+01   3.5837281e+01
+   4.1850000e+01   1.6613545e+01   3.5844116e+01
+   4.1850000e+01   1.7261298e+01   3.5850289e+01
+   4.1850000e+01   1.8017446e+01   3.5853281e+01
+   4.1850000e+01   1.8879421e+01   3.5867727e+01
+   4.1850000e+01   1.9534612e+01   3.5871678e+01
+   4.1850000e+01   1.9774289e+01   3.5868719e+01
+   4.1850000e+01   1.9845992e+01   3.5868760e+01
+   4.1850000e+01   1.9857645e+01   3.5869248e+01
+   4.1850000e+01   1.9858744e+01   3.5869810e+01
+   4.1850000e+01   1.9851843e+01   3.5868702e+01
+   4.1850000e+01   1.9795959e+01   3.5873008e+01
+   4.1900000e+01   2.5103554e+00   3.4896107e+01
+   4.1900000e+01   2.5061901e+00   3.4902207e+01
+   4.1900000e+01   2.5121488e+00   3.4907306e+01
+   4.1900000e+01   2.5413554e+00   3.4914521e+01
+   4.1900000e+01   2.5794959e+00   3.4919405e+01
+   4.1900000e+01   2.6451405e+00   3.4928736e+01
+   4.1900000e+01   2.7416281e+00   3.4940488e+01
+   4.1900000e+01   2.8990331e+00   3.4952802e+01
+   4.1900000e+01   3.0880496e+00   3.4961322e+01
+   4.1900000e+01   3.3536529e+00   3.4973281e+01
+   4.1900000e+01   3.5827603e+00   3.4972736e+01
+   4.1900000e+01   3.8425455e+00   3.4984074e+01
+   4.1900000e+01   4.3142231e+00   3.5036645e+01
+   4.1900000e+01   5.2460165e+00   3.5170777e+01
+   4.1900000e+01   6.6648926e+00   3.5382711e+01
+   4.1900000e+01   8.2569008e+00   3.5621149e+01
+   4.1900000e+01   9.2870413e+00   3.5722876e+01
+   4.1900000e+01   9.5328760e+00   3.5630785e+01
+   4.1900000e+01   9.9026364e+00   3.5537066e+01
+   4.1900000e+01   1.0298083e+01   3.5480702e+01
+   4.1900000e+01   1.0770826e+01   3.5489091e+01
+   4.1900000e+01   1.1255678e+01   3.5531455e+01
+   4.1900000e+01   1.1602421e+01   3.5566000e+01
+   4.1900000e+01   1.1914041e+01   3.5601397e+01
+   4.1900000e+01   1.2147298e+01   3.5626901e+01
+   4.1900000e+01   1.2343058e+01   3.5648785e+01
+   4.1900000e+01   1.2494471e+01   3.5664835e+01
+   4.1900000e+01   1.2597438e+01   3.5676273e+01
+   4.1900000e+01   1.2688149e+01   3.5686380e+01
+   4.1900000e+01   1.2785116e+01   3.5697636e+01
+   4.1900000e+01   1.2848306e+01   3.5705074e+01
+   4.1900000e+01   1.2914322e+01   3.5711992e+01
+   4.1900000e+01   1.3001628e+01   3.5721826e+01
+   4.1900000e+01   1.3051289e+01   3.5725025e+01
+   4.1900000e+01   1.3089132e+01   3.5727711e+01
+   4.1900000e+01   1.3142140e+01   3.5735612e+01
+   4.1900000e+01   1.3179091e+01   3.5738893e+01
+   4.1900000e+01   1.3225289e+01   3.5744364e+01
+   4.1900000e+01   1.3285380e+01   3.5750000e+01
+   4.1900000e+01   1.3351380e+01   3.5760339e+01
+   4.1900000e+01   1.3413512e+01   3.5768570e+01
+   4.1900000e+01   1.3485198e+01   3.5776364e+01
+   4.1900000e+01   1.3539636e+01   3.5778083e+01
+   4.1900000e+01   1.3586083e+01   3.5781620e+01
+   4.1900000e+01   1.3649860e+01   3.5788785e+01
+   4.1900000e+01   1.3724041e+01   3.5795174e+01
+   4.1900000e+01   1.3795636e+01   3.5799347e+01
+   4.1900000e+01   1.3896884e+01   3.5810504e+01
+   4.1900000e+01   1.4007802e+01   3.5819636e+01
+   4.1900000e+01   1.4119207e+01   3.5823149e+01
+   4.1900000e+01   1.4275008e+01   3.5831579e+01
+   4.1900000e+01   1.4495909e+01   3.5833537e+01
+   4.1900000e+01   1.4732562e+01   3.5837397e+01
+   4.1900000e+01   1.4997446e+01   3.5833347e+01
+   4.1900000e+01   1.5706603e+01   3.5837281e+01
+   4.1900000e+01   1.6613545e+01   3.5844116e+01
+   4.1900000e+01   1.7261298e+01   3.5850289e+01
+   4.1900000e+01   1.8017446e+01   3.5853281e+01
+   4.1900000e+01   1.8879421e+01   3.5867727e+01
+   4.1900000e+01   1.9534612e+01   3.5871678e+01
+   4.1900000e+01   1.9774289e+01   3.5868719e+01
+   4.1900000e+01   1.9845992e+01   3.5868760e+01
+   4.1900000e+01   1.9857645e+01   3.5869248e+01
+   4.1900000e+01   1.9858744e+01   3.5869810e+01
+   4.1900000e+01   1.9851843e+01   3.5868702e+01
+   4.1900000e+01   1.9795959e+01   3.5873008e+01
+   4.1950000e+01   2.5103554e+00   3.4896107e+01
+   4.1950000e+01   2.5061901e+00   3.4902207e+01
+   4.1950000e+01   2.5121488e+00   3.4907306e+01
+   4.1950000e+01   2.5413554e+00   3.4914521e+01
+   4.1950000e+01   2.5794959e+00   3.4919405e+01
+   4.1950000e+01   2.6451405e+00   3.4928736e+01
+   4.1950000e+01   2.7416281e+00   3.4940488e+01
+   4.1950000e+01   2.8990331e+00   3.4952802e+01
+   4.1950000e+01   3.0880496e+00   3.4961322e+01
+   4.1950000e+01   3.3536529e+00   3.4973281e+01
+   4.1950000e+01   3.5827603e+00   3.4972736e+01
+   4.1950000e+01   3.8425455e+00   3.4984074e+01
+   4.1950000e+01   4.3142231e+00   3.5036645e+01
+   4.1950000e+01   5.2460165e+00   3.5170777e+01
+   4.1950000e+01   6.6648926e+00   3.5382711e+01
+   4.1950000e+01   8.2569008e+00   3.5621149e+01
+   4.1950000e+01   9.2870413e+00   3.5722876e+01
+   4.1950000e+01   9.5328760e+00   3.5630785e+01
+   4.1950000e+01   9.9026364e+00   3.5537066e+01
+   4.1950000e+01   1.0298083e+01   3.5480702e+01
+   4.1950000e+01   1.0770826e+01   3.5489091e+01
+   4.1950000e+01   1.1255678e+01   3.5531455e+01
+   4.1950000e+01   1.1602421e+01   3.5566000e+01
+   4.1950000e+01   1.1914041e+01   3.5601397e+01
+   4.1950000e+01   1.2147298e+01   3.5626901e+01
+   4.1950000e+01   1.2343058e+01   3.5648785e+01
+   4.1950000e+01   1.2494471e+01   3.5664835e+01
+   4.1950000e+01   1.2597438e+01   3.5676273e+01
+   4.1950000e+01   1.2688149e+01   3.5686380e+01
+   4.1950000e+01   1.2785116e+01   3.5697636e+01
+   4.1950000e+01   1.2848306e+01   3.5705074e+01
+   4.1950000e+01   1.2914322e+01   3.5711992e+01
+   4.1950000e+01   1.3001628e+01   3.5721826e+01
+   4.1950000e+01   1.3051289e+01   3.5725025e+01
+   4.1950000e+01   1.3089132e+01   3.5727711e+01
+   4.1950000e+01   1.3142140e+01   3.5735612e+01
+   4.1950000e+01   1.3179091e+01   3.5738893e+01
+   4.1950000e+01   1.3225289e+01   3.5744364e+01
+   4.1950000e+01   1.3285380e+01   3.5750000e+01
+   4.1950000e+01   1.3351380e+01   3.5760339e+01
+   4.1950000e+01   1.3413512e+01   3.5768570e+01
+   4.1950000e+01   1.3485198e+01   3.5776364e+01
+   4.1950000e+01   1.3539636e+01   3.5778083e+01
+   4.1950000e+01   1.3586083e+01   3.5781620e+01
+   4.1950000e+01   1.3649860e+01   3.5788785e+01
+   4.1950000e+01   1.3724041e+01   3.5795174e+01
+   4.1950000e+01   1.3795636e+01   3.5799347e+01
+   4.1950000e+01   1.3896884e+01   3.5810504e+01
+   4.1950000e+01   1.4007802e+01   3.5819636e+01
+   4.1950000e+01   1.4119207e+01   3.5823149e+01
+   4.1950000e+01   1.4275008e+01   3.5831579e+01
+   4.1950000e+01   1.4495909e+01   3.5833537e+01
+   4.1950000e+01   1.4732562e+01   3.5837397e+01
+   4.1950000e+01   1.4997446e+01   3.5833347e+01
+   4.1950000e+01   1.5706603e+01   3.5837281e+01
+   4.1950000e+01   1.6613545e+01   3.5844116e+01
+   4.1950000e+01   1.7261298e+01   3.5850289e+01
+   4.1950000e+01   1.8017446e+01   3.5853281e+01
+   4.1950000e+01   1.8879421e+01   3.5867727e+01
+   4.1950000e+01   1.9534612e+01   3.5871678e+01
+   4.1950000e+01   1.9774289e+01   3.5868719e+01
+   4.1950000e+01   1.9845992e+01   3.5868760e+01
+   4.1950000e+01   1.9857645e+01   3.5869248e+01
+   4.1950000e+01   1.9858744e+01   3.5869810e+01
+   4.1950000e+01   1.9851843e+01   3.5868702e+01
+   4.1950000e+01   1.9795959e+01   3.5873008e+01
+   4.2000000e+01   2.5103554e+00   3.4896107e+01
+   4.2000000e+01   2.5061901e+00   3.4902207e+01
+   4.2000000e+01   2.5121488e+00   3.4907306e+01
+   4.2000000e+01   2.5413554e+00   3.4914521e+01
+   4.2000000e+01   2.5794959e+00   3.4919405e+01
+   4.2000000e+01   2.6451405e+00   3.4928736e+01
+   4.2000000e+01   2.7416281e+00   3.4940488e+01
+   4.2000000e+01   2.8990331e+00   3.4952802e+01
+   4.2000000e+01   3.0880496e+00   3.4961322e+01
+   4.2000000e+01   3.3536529e+00   3.4973281e+01
+   4.2000000e+01   3.5827603e+00   3.4972736e+01
+   4.2000000e+01   3.8425455e+00   3.4984074e+01
+   4.2000000e+01   4.3142231e+00   3.5036645e+01
+   4.2000000e+01   5.2460165e+00   3.5170777e+01
+   4.2000000e+01   6.6648926e+00   3.5382711e+01
+   4.2000000e+01   8.2569008e+00   3.5621149e+01
+   4.2000000e+01   9.2870413e+00   3.5722876e+01
+   4.2000000e+01   9.5328760e+00   3.5630785e+01
+   4.2000000e+01   9.9026364e+00   3.5537066e+01
+   4.2000000e+01   1.0298083e+01   3.5480702e+01
+   4.2000000e+01   1.0770826e+01   3.5489091e+01
+   4.2000000e+01   1.1255678e+01   3.5531455e+01
+   4.2000000e+01   1.1602421e+01   3.5566000e+01
+   4.2000000e+01   1.1914041e+01   3.5601397e+01
+   4.2000000e+01   1.2147298e+01   3.5626901e+01
+   4.2000000e+01   1.2343058e+01   3.5648785e+01
+   4.2000000e+01   1.2494471e+01   3.5664835e+01
+   4.2000000e+01   1.2597438e+01   3.5676273e+01
+   4.2000000e+01   1.2688149e+01   3.5686380e+01
+   4.2000000e+01   1.2785116e+01   3.5697636e+01
+   4.2000000e+01   1.2848306e+01   3.5705074e+01
+   4.2000000e+01   1.2914322e+01   3.5711992e+01
+   4.2000000e+01   1.3001628e+01   3.5721826e+01
+   4.2000000e+01   1.3051289e+01   3.5725025e+01
+   4.2000000e+01   1.3089132e+01   3.5727711e+01
+   4.2000000e+01   1.3142140e+01   3.5735612e+01
+   4.2000000e+01   1.3179091e+01   3.5738893e+01
+   4.2000000e+01   1.3225289e+01   3.5744364e+01
+   4.2000000e+01   1.3285380e+01   3.5750000e+01
+   4.2000000e+01   1.3351380e+01   3.5760339e+01
+   4.2000000e+01   1.3413512e+01   3.5768570e+01
+   4.2000000e+01   1.3485198e+01   3.5776364e+01
+   4.2000000e+01   1.3539636e+01   3.5778083e+01
+   4.2000000e+01   1.3586083e+01   3.5781620e+01
+   4.2000000e+01   1.3649860e+01   3.5788785e+01
+   4.2000000e+01   1.3724041e+01   3.5795174e+01
+   4.2000000e+01   1.3795636e+01   3.5799347e+01
+   4.2000000e+01   1.3896884e+01   3.5810504e+01
+   4.2000000e+01   1.4007802e+01   3.5819636e+01
+   4.2000000e+01   1.4119207e+01   3.5823149e+01
+   4.2000000e+01   1.4275008e+01   3.5831579e+01
+   4.2000000e+01   1.4495909e+01   3.5833537e+01
+   4.2000000e+01   1.4732562e+01   3.5837397e+01
+   4.2000000e+01   1.4997446e+01   3.5833347e+01
+   4.2000000e+01   1.5706603e+01   3.5837281e+01
+   4.2000000e+01   1.6613545e+01   3.5844116e+01
+   4.2000000e+01   1.7261298e+01   3.5850289e+01
+   4.2000000e+01   1.8017446e+01   3.5853281e+01
+   4.2000000e+01   1.8879421e+01   3.5867727e+01
+   4.2000000e+01   1.9534612e+01   3.5871678e+01
+   4.2000000e+01   1.9774289e+01   3.5868719e+01
+   4.2000000e+01   1.9845992e+01   3.5868760e+01
+   4.2000000e+01   1.9857645e+01   3.5869248e+01
+   4.2000000e+01   1.9858744e+01   3.5869810e+01
+   4.2000000e+01   1.9851843e+01   3.5868702e+01
+   4.2000000e+01   1.9795959e+01   3.5873008e+01
+   4.2050000e+01   2.5103554e+00   3.4896107e+01
+   4.2050000e+01   2.5061901e+00   3.4902207e+01
+   4.2050000e+01   2.5121488e+00   3.4907306e+01
+   4.2050000e+01   2.5413554e+00   3.4914521e+01
+   4.2050000e+01   2.5794959e+00   3.4919405e+01
+   4.2050000e+01   2.6451405e+00   3.4928736e+01
+   4.2050000e+01   2.7416281e+00   3.4940488e+01
+   4.2050000e+01   2.8990331e+00   3.4952802e+01
+   4.2050000e+01   3.0880496e+00   3.4961322e+01
+   4.2050000e+01   3.3536529e+00   3.4973281e+01
+   4.2050000e+01   3.5827603e+00   3.4972736e+01
+   4.2050000e+01   3.8425455e+00   3.4984074e+01
+   4.2050000e+01   4.3142231e+00   3.5036645e+01
+   4.2050000e+01   5.2460165e+00   3.5170777e+01
+   4.2050000e+01   6.6648926e+00   3.5382711e+01
+   4.2050000e+01   8.2569008e+00   3.5621149e+01
+   4.2050000e+01   9.2870413e+00   3.5722876e+01
+   4.2050000e+01   9.5328760e+00   3.5630785e+01
+   4.2050000e+01   9.9026364e+00   3.5537066e+01
+   4.2050000e+01   1.0298083e+01   3.5480702e+01
+   4.2050000e+01   1.0770826e+01   3.5489091e+01
+   4.2050000e+01   1.1255678e+01   3.5531455e+01
+   4.2050000e+01   1.1602421e+01   3.5566000e+01
+   4.2050000e+01   1.1914041e+01   3.5601397e+01
+   4.2050000e+01   1.2147298e+01   3.5626901e+01
+   4.2050000e+01   1.2343058e+01   3.5648785e+01
+   4.2050000e+01   1.2494471e+01   3.5664835e+01
+   4.2050000e+01   1.2597438e+01   3.5676273e+01
+   4.2050000e+01   1.2688149e+01   3.5686380e+01
+   4.2050000e+01   1.2785116e+01   3.5697636e+01
+   4.2050000e+01   1.2848306e+01   3.5705074e+01
+   4.2050000e+01   1.2914322e+01   3.5711992e+01
+   4.2050000e+01   1.3001628e+01   3.5721826e+01
+   4.2050000e+01   1.3051289e+01   3.5725025e+01
+   4.2050000e+01   1.3089132e+01   3.5727711e+01
+   4.2050000e+01   1.3142140e+01   3.5735612e+01
+   4.2050000e+01   1.3179091e+01   3.5738893e+01
+   4.2050000e+01   1.3225289e+01   3.5744364e+01
+   4.2050000e+01   1.3285380e+01   3.5750000e+01
+   4.2050000e+01   1.3351380e+01   3.5760339e+01
+   4.2050000e+01   1.3413512e+01   3.5768570e+01
+   4.2050000e+01   1.3485198e+01   3.5776364e+01
+   4.2050000e+01   1.3539636e+01   3.5778083e+01
+   4.2050000e+01   1.3586083e+01   3.5781620e+01
+   4.2050000e+01   1.3649860e+01   3.5788785e+01
+   4.2050000e+01   1.3724041e+01   3.5795174e+01
+   4.2050000e+01   1.3795636e+01   3.5799347e+01
+   4.2050000e+01   1.3896884e+01   3.5810504e+01
+   4.2050000e+01   1.4007802e+01   3.5819636e+01
+   4.2050000e+01   1.4119207e+01   3.5823149e+01
+   4.2050000e+01   1.4275008e+01   3.5831579e+01
+   4.2050000e+01   1.4495909e+01   3.5833537e+01
+   4.2050000e+01   1.4732562e+01   3.5837397e+01
+   4.2050000e+01   1.4997446e+01   3.5833347e+01
+   4.2050000e+01   1.5706603e+01   3.5837281e+01
+   4.2050000e+01   1.6613545e+01   3.5844116e+01
+   4.2050000e+01   1.7261298e+01   3.5850289e+01
+   4.2050000e+01   1.8017446e+01   3.5853281e+01
+   4.2050000e+01   1.8879421e+01   3.5867727e+01
+   4.2050000e+01   1.9534612e+01   3.5871678e+01
+   4.2050000e+01   1.9774289e+01   3.5868719e+01
+   4.2050000e+01   1.9845992e+01   3.5868760e+01
+   4.2050000e+01   1.9857645e+01   3.5869248e+01
+   4.2050000e+01   1.9858744e+01   3.5869810e+01
+   4.2050000e+01   1.9851843e+01   3.5868702e+01
+   4.2050000e+01   1.9795959e+01   3.5873008e+01
+   4.2100000e+01   2.5103554e+00   3.4896107e+01
+   4.2100000e+01   2.5061901e+00   3.4902207e+01
+   4.2100000e+01   2.5121488e+00   3.4907306e+01
+   4.2100000e+01   2.5413554e+00   3.4914521e+01
+   4.2100000e+01   2.5794959e+00   3.4919405e+01
+   4.2100000e+01   2.6451405e+00   3.4928736e+01
+   4.2100000e+01   2.7416281e+00   3.4940488e+01
+   4.2100000e+01   2.8990331e+00   3.4952802e+01
+   4.2100000e+01   3.0880496e+00   3.4961322e+01
+   4.2100000e+01   3.3536529e+00   3.4973281e+01
+   4.2100000e+01   3.5827603e+00   3.4972736e+01
+   4.2100000e+01   3.8425455e+00   3.4984074e+01
+   4.2100000e+01   4.3142231e+00   3.5036645e+01
+   4.2100000e+01   5.2460165e+00   3.5170777e+01
+   4.2100000e+01   6.6648926e+00   3.5382711e+01
+   4.2100000e+01   8.2569008e+00   3.5621149e+01
+   4.2100000e+01   9.2870413e+00   3.5722876e+01
+   4.2100000e+01   9.5328760e+00   3.5630785e+01
+   4.2100000e+01   9.9026364e+00   3.5537066e+01
+   4.2100000e+01   1.0298083e+01   3.5480702e+01
+   4.2100000e+01   1.0770826e+01   3.5489091e+01
+   4.2100000e+01   1.1255678e+01   3.5531455e+01
+   4.2100000e+01   1.1602421e+01   3.5566000e+01
+   4.2100000e+01   1.1914041e+01   3.5601397e+01
+   4.2100000e+01   1.2147298e+01   3.5626901e+01
+   4.2100000e+01   1.2343058e+01   3.5648785e+01
+   4.2100000e+01   1.2494471e+01   3.5664835e+01
+   4.2100000e+01   1.2597438e+01   3.5676273e+01
+   4.2100000e+01   1.2688149e+01   3.5686380e+01
+   4.2100000e+01   1.2785116e+01   3.5697636e+01
+   4.2100000e+01   1.2848306e+01   3.5705074e+01
+   4.2100000e+01   1.2914322e+01   3.5711992e+01
+   4.2100000e+01   1.3001628e+01   3.5721826e+01
+   4.2100000e+01   1.3051289e+01   3.5725025e+01
+   4.2100000e+01   1.3089132e+01   3.5727711e+01
+   4.2100000e+01   1.3142140e+01   3.5735612e+01
+   4.2100000e+01   1.3179091e+01   3.5738893e+01
+   4.2100000e+01   1.3225289e+01   3.5744364e+01
+   4.2100000e+01   1.3285380e+01   3.5750000e+01
+   4.2100000e+01   1.3351380e+01   3.5760339e+01
+   4.2100000e+01   1.3413512e+01   3.5768570e+01
+   4.2100000e+01   1.3485198e+01   3.5776364e+01
+   4.2100000e+01   1.3539636e+01   3.5778083e+01
+   4.2100000e+01   1.3586083e+01   3.5781620e+01
+   4.2100000e+01   1.3649860e+01   3.5788785e+01
+   4.2100000e+01   1.3724041e+01   3.5795174e+01
+   4.2100000e+01   1.3795636e+01   3.5799347e+01
+   4.2100000e+01   1.3896884e+01   3.5810504e+01
+   4.2100000e+01   1.4007802e+01   3.5819636e+01
+   4.2100000e+01   1.4119207e+01   3.5823149e+01
+   4.2100000e+01   1.4275008e+01   3.5831579e+01
+   4.2100000e+01   1.4495909e+01   3.5833537e+01
+   4.2100000e+01   1.4732562e+01   3.5837397e+01
+   4.2100000e+01   1.4997446e+01   3.5833347e+01
+   4.2100000e+01   1.5706603e+01   3.5837281e+01
+   4.2100000e+01   1.6613545e+01   3.5844116e+01
+   4.2100000e+01   1.7261298e+01   3.5850289e+01
+   4.2100000e+01   1.8017446e+01   3.5853281e+01
+   4.2100000e+01   1.8879421e+01   3.5867727e+01
+   4.2100000e+01   1.9534612e+01   3.5871678e+01
+   4.2100000e+01   1.9774289e+01   3.5868719e+01
+   4.2100000e+01   1.9845992e+01   3.5868760e+01
+   4.2100000e+01   1.9857645e+01   3.5869248e+01
+   4.2100000e+01   1.9858744e+01   3.5869810e+01
+   4.2100000e+01   1.9851843e+01   3.5868702e+01
+   4.2100000e+01   1.9795959e+01   3.5873008e+01
+   4.2150000e+01   2.5103554e+00   3.4896107e+01
+   4.2150000e+01   2.5061901e+00   3.4902207e+01
+   4.2150000e+01   2.5121488e+00   3.4907306e+01
+   4.2150000e+01   2.5413554e+00   3.4914521e+01
+   4.2150000e+01   2.5794959e+00   3.4919405e+01
+   4.2150000e+01   2.6451405e+00   3.4928736e+01
+   4.2150000e+01   2.7416281e+00   3.4940488e+01
+   4.2150000e+01   2.8990331e+00   3.4952802e+01
+   4.2150000e+01   3.0880496e+00   3.4961322e+01
+   4.2150000e+01   3.3536529e+00   3.4973281e+01
+   4.2150000e+01   3.5827603e+00   3.4972736e+01
+   4.2150000e+01   3.8425455e+00   3.4984074e+01
+   4.2150000e+01   4.3142231e+00   3.5036645e+01
+   4.2150000e+01   5.2460165e+00   3.5170777e+01
+   4.2150000e+01   6.6648926e+00   3.5382711e+01
+   4.2150000e+01   8.2569008e+00   3.5621149e+01
+   4.2150000e+01   9.2870413e+00   3.5722876e+01
+   4.2150000e+01   9.5328760e+00   3.5630785e+01
+   4.2150000e+01   9.9026364e+00   3.5537066e+01
+   4.2150000e+01   1.0298083e+01   3.5480702e+01
+   4.2150000e+01   1.0770826e+01   3.5489091e+01
+   4.2150000e+01   1.1255678e+01   3.5531455e+01
+   4.2150000e+01   1.1602421e+01   3.5566000e+01
+   4.2150000e+01   1.1914041e+01   3.5601397e+01
+   4.2150000e+01   1.2147298e+01   3.5626901e+01
+   4.2150000e+01   1.2343058e+01   3.5648785e+01
+   4.2150000e+01   1.2494471e+01   3.5664835e+01
+   4.2150000e+01   1.2597438e+01   3.5676273e+01
+   4.2150000e+01   1.2688149e+01   3.5686380e+01
+   4.2150000e+01   1.2785116e+01   3.5697636e+01
+   4.2150000e+01   1.2848306e+01   3.5705074e+01
+   4.2150000e+01   1.2914322e+01   3.5711992e+01
+   4.2150000e+01   1.3001628e+01   3.5721826e+01
+   4.2150000e+01   1.3051289e+01   3.5725025e+01
+   4.2150000e+01   1.3089132e+01   3.5727711e+01
+   4.2150000e+01   1.3142140e+01   3.5735612e+01
+   4.2150000e+01   1.3179091e+01   3.5738893e+01
+   4.2150000e+01   1.3225289e+01   3.5744364e+01
+   4.2150000e+01   1.3285380e+01   3.5750000e+01
+   4.2150000e+01   1.3351380e+01   3.5760339e+01
+   4.2150000e+01   1.3413512e+01   3.5768570e+01
+   4.2150000e+01   1.3485198e+01   3.5776364e+01
+   4.2150000e+01   1.3539636e+01   3.5778083e+01
+   4.2150000e+01   1.3586083e+01   3.5781620e+01
+   4.2150000e+01   1.3649860e+01   3.5788785e+01
+   4.2150000e+01   1.3724041e+01   3.5795174e+01
+   4.2150000e+01   1.3795636e+01   3.5799347e+01
+   4.2150000e+01   1.3896884e+01   3.5810504e+01
+   4.2150000e+01   1.4007802e+01   3.5819636e+01
+   4.2150000e+01   1.4119207e+01   3.5823149e+01
+   4.2150000e+01   1.4275008e+01   3.5831579e+01
+   4.2150000e+01   1.4495909e+01   3.5833537e+01
+   4.2150000e+01   1.4732562e+01   3.5837397e+01
+   4.2150000e+01   1.4997446e+01   3.5833347e+01
+   4.2150000e+01   1.5706603e+01   3.5837281e+01
+   4.2150000e+01   1.6613545e+01   3.5844116e+01
+   4.2150000e+01   1.7261298e+01   3.5850289e+01
+   4.2150000e+01   1.8017446e+01   3.5853281e+01
+   4.2150000e+01   1.8879421e+01   3.5867727e+01
+   4.2150000e+01   1.9534612e+01   3.5871678e+01
+   4.2150000e+01   1.9774289e+01   3.5868719e+01
+   4.2150000e+01   1.9845992e+01   3.5868760e+01
+   4.2150000e+01   1.9857645e+01   3.5869248e+01
+   4.2150000e+01   1.9858744e+01   3.5869810e+01
+   4.2150000e+01   1.9851843e+01   3.5868702e+01
+   4.2150000e+01   1.9795959e+01   3.5873008e+01
+   4.2200000e+01   2.5103554e+00   3.4896107e+01
+   4.2200000e+01   2.5061901e+00   3.4902207e+01
+   4.2200000e+01   2.5121488e+00   3.4907306e+01
+   4.2200000e+01   2.5413554e+00   3.4914521e+01
+   4.2200000e+01   2.5794959e+00   3.4919405e+01
+   4.2200000e+01   2.6451405e+00   3.4928736e+01
+   4.2200000e+01   2.7416281e+00   3.4940488e+01
+   4.2200000e+01   2.8990331e+00   3.4952802e+01
+   4.2200000e+01   3.0880496e+00   3.4961322e+01
+   4.2200000e+01   3.3536529e+00   3.4973281e+01
+   4.2200000e+01   3.5827603e+00   3.4972736e+01
+   4.2200000e+01   3.8425455e+00   3.4984074e+01
+   4.2200000e+01   4.3142231e+00   3.5036645e+01
+   4.2200000e+01   5.2460165e+00   3.5170777e+01
+   4.2200000e+01   6.6648926e+00   3.5382711e+01
+   4.2200000e+01   8.2569008e+00   3.5621149e+01
+   4.2200000e+01   9.2870413e+00   3.5722876e+01
+   4.2200000e+01   9.5328760e+00   3.5630785e+01
+   4.2200000e+01   9.9026364e+00   3.5537066e+01
+   4.2200000e+01   1.0298083e+01   3.5480702e+01
+   4.2200000e+01   1.0770826e+01   3.5489091e+01
+   4.2200000e+01   1.1255678e+01   3.5531455e+01
+   4.2200000e+01   1.1602421e+01   3.5566000e+01
+   4.2200000e+01   1.1914041e+01   3.5601397e+01
+   4.2200000e+01   1.2147298e+01   3.5626901e+01
+   4.2200000e+01   1.2343058e+01   3.5648785e+01
+   4.2200000e+01   1.2494471e+01   3.5664835e+01
+   4.2200000e+01   1.2597438e+01   3.5676273e+01
+   4.2200000e+01   1.2688149e+01   3.5686380e+01
+   4.2200000e+01   1.2785116e+01   3.5697636e+01
+   4.2200000e+01   1.2848306e+01   3.5705074e+01
+   4.2200000e+01   1.2914322e+01   3.5711992e+01
+   4.2200000e+01   1.3001628e+01   3.5721826e+01
+   4.2200000e+01   1.3051289e+01   3.5725025e+01
+   4.2200000e+01   1.3089132e+01   3.5727711e+01
+   4.2200000e+01   1.3142140e+01   3.5735612e+01
+   4.2200000e+01   1.3179091e+01   3.5738893e+01
+   4.2200000e+01   1.3225289e+01   3.5744364e+01
+   4.2200000e+01   1.3285380e+01   3.5750000e+01
+   4.2200000e+01   1.3351380e+01   3.5760339e+01
+   4.2200000e+01   1.3413512e+01   3.5768570e+01
+   4.2200000e+01   1.3485198e+01   3.5776364e+01
+   4.2200000e+01   1.3539636e+01   3.5778083e+01
+   4.2200000e+01   1.3586083e+01   3.5781620e+01
+   4.2200000e+01   1.3649860e+01   3.5788785e+01
+   4.2200000e+01   1.3724041e+01   3.5795174e+01
+   4.2200000e+01   1.3795636e+01   3.5799347e+01
+   4.2200000e+01   1.3896884e+01   3.5810504e+01
+   4.2200000e+01   1.4007802e+01   3.5819636e+01
+   4.2200000e+01   1.4119207e+01   3.5823149e+01
+   4.2200000e+01   1.4275008e+01   3.5831579e+01
+   4.2200000e+01   1.4495909e+01   3.5833537e+01
+   4.2200000e+01   1.4732562e+01   3.5837397e+01
+   4.2200000e+01   1.4997446e+01   3.5833347e+01
+   4.2200000e+01   1.5706603e+01   3.5837281e+01
+   4.2200000e+01   1.6613545e+01   3.5844116e+01
+   4.2200000e+01   1.7261298e+01   3.5850289e+01
+   4.2200000e+01   1.8017446e+01   3.5853281e+01
+   4.2200000e+01   1.8879421e+01   3.5867727e+01
+   4.2200000e+01   1.9534612e+01   3.5871678e+01
+   4.2200000e+01   1.9774289e+01   3.5868719e+01
+   4.2200000e+01   1.9845992e+01   3.5868760e+01
+   4.2200000e+01   1.9857645e+01   3.5869248e+01
+   4.2200000e+01   1.9858744e+01   3.5869810e+01
+   4.2200000e+01   1.9851843e+01   3.5868702e+01
+   4.2200000e+01   1.9795959e+01   3.5873008e+01
+   4.2250000e+01   2.5103554e+00   3.4896107e+01
+   4.2250000e+01   2.5061901e+00   3.4902207e+01
+   4.2250000e+01   2.5121488e+00   3.4907306e+01
+   4.2250000e+01   2.5413554e+00   3.4914521e+01
+   4.2250000e+01   2.5794959e+00   3.4919405e+01
+   4.2250000e+01   2.6451405e+00   3.4928736e+01
+   4.2250000e+01   2.7416281e+00   3.4940488e+01
+   4.2250000e+01   2.8990331e+00   3.4952802e+01
+   4.2250000e+01   3.0880496e+00   3.4961322e+01
+   4.2250000e+01   3.3536529e+00   3.4973281e+01
+   4.2250000e+01   3.5827603e+00   3.4972736e+01
+   4.2250000e+01   3.8425455e+00   3.4984074e+01
+   4.2250000e+01   4.3142231e+00   3.5036645e+01
+   4.2250000e+01   5.2460165e+00   3.5170777e+01
+   4.2250000e+01   6.6648926e+00   3.5382711e+01
+   4.2250000e+01   8.2569008e+00   3.5621149e+01
+   4.2250000e+01   9.2870413e+00   3.5722876e+01
+   4.2250000e+01   9.5328760e+00   3.5630785e+01
+   4.2250000e+01   9.9026364e+00   3.5537066e+01
+   4.2250000e+01   1.0298083e+01   3.5480702e+01
+   4.2250000e+01   1.0770826e+01   3.5489091e+01
+   4.2250000e+01   1.1255678e+01   3.5531455e+01
+   4.2250000e+01   1.1602421e+01   3.5566000e+01
+   4.2250000e+01   1.1914041e+01   3.5601397e+01
+   4.2250000e+01   1.2147298e+01   3.5626901e+01
+   4.2250000e+01   1.2343058e+01   3.5648785e+01
+   4.2250000e+01   1.2494471e+01   3.5664835e+01
+   4.2250000e+01   1.2597438e+01   3.5676273e+01
+   4.2250000e+01   1.2688149e+01   3.5686380e+01
+   4.2250000e+01   1.2785116e+01   3.5697636e+01
+   4.2250000e+01   1.2848306e+01   3.5705074e+01
+   4.2250000e+01   1.2914322e+01   3.5711992e+01
+   4.2250000e+01   1.3001628e+01   3.5721826e+01
+   4.2250000e+01   1.3051289e+01   3.5725025e+01
+   4.2250000e+01   1.3089132e+01   3.5727711e+01
+   4.2250000e+01   1.3142140e+01   3.5735612e+01
+   4.2250000e+01   1.3179091e+01   3.5738893e+01
+   4.2250000e+01   1.3225289e+01   3.5744364e+01
+   4.2250000e+01   1.3285380e+01   3.5750000e+01
+   4.2250000e+01   1.3351380e+01   3.5760339e+01
+   4.2250000e+01   1.3413512e+01   3.5768570e+01
+   4.2250000e+01   1.3485198e+01   3.5776364e+01
+   4.2250000e+01   1.3539636e+01   3.5778083e+01
+   4.2250000e+01   1.3586083e+01   3.5781620e+01
+   4.2250000e+01   1.3649860e+01   3.5788785e+01
+   4.2250000e+01   1.3724041e+01   3.5795174e+01
+   4.2250000e+01   1.3795636e+01   3.5799347e+01
+   4.2250000e+01   1.3896884e+01   3.5810504e+01
+   4.2250000e+01   1.4007802e+01   3.5819636e+01
+   4.2250000e+01   1.4119207e+01   3.5823149e+01
+   4.2250000e+01   1.4275008e+01   3.5831579e+01
+   4.2250000e+01   1.4495909e+01   3.5833537e+01
+   4.2250000e+01   1.4732562e+01   3.5837397e+01
+   4.2250000e+01   1.4997446e+01   3.5833347e+01
+   4.2250000e+01   1.5706603e+01   3.5837281e+01
+   4.2250000e+01   1.6613545e+01   3.5844116e+01
+   4.2250000e+01   1.7261298e+01   3.5850289e+01
+   4.2250000e+01   1.8017446e+01   3.5853281e+01
+   4.2250000e+01   1.8879421e+01   3.5867727e+01
+   4.2250000e+01   1.9534612e+01   3.5871678e+01
+   4.2250000e+01   1.9774289e+01   3.5868719e+01
+   4.2250000e+01   1.9845992e+01   3.5868760e+01
+   4.2250000e+01   1.9857645e+01   3.5869248e+01
+   4.2250000e+01   1.9858744e+01   3.5869810e+01
+   4.2250000e+01   1.9851843e+01   3.5868702e+01
+   4.2250000e+01   1.9795959e+01   3.5873008e+01
+   4.2300000e+01   2.5103554e+00   3.4896107e+01
+   4.2300000e+01   2.5061901e+00   3.4902207e+01
+   4.2300000e+01   2.5121488e+00   3.4907306e+01
+   4.2300000e+01   2.5413554e+00   3.4914521e+01
+   4.2300000e+01   2.5794959e+00   3.4919405e+01
+   4.2300000e+01   2.6451405e+00   3.4928736e+01
+   4.2300000e+01   2.7416281e+00   3.4940488e+01
+   4.2300000e+01   2.8990331e+00   3.4952802e+01
+   4.2300000e+01   3.0880496e+00   3.4961322e+01
+   4.2300000e+01   3.3536529e+00   3.4973281e+01
+   4.2300000e+01   3.5827603e+00   3.4972736e+01
+   4.2300000e+01   3.8425455e+00   3.4984074e+01
+   4.2300000e+01   4.3142231e+00   3.5036645e+01
+   4.2300000e+01   5.2460165e+00   3.5170777e+01
+   4.2300000e+01   6.6648926e+00   3.5382711e+01
+   4.2300000e+01   8.2569008e+00   3.5621149e+01
+   4.2300000e+01   9.2870413e+00   3.5722876e+01
+   4.2300000e+01   9.5328760e+00   3.5630785e+01
+   4.2300000e+01   9.9026364e+00   3.5537066e+01
+   4.2300000e+01   1.0298083e+01   3.5480702e+01
+   4.2300000e+01   1.0770826e+01   3.5489091e+01
+   4.2300000e+01   1.1255678e+01   3.5531455e+01
+   4.2300000e+01   1.1602421e+01   3.5566000e+01
+   4.2300000e+01   1.1914041e+01   3.5601397e+01
+   4.2300000e+01   1.2147298e+01   3.5626901e+01
+   4.2300000e+01   1.2343058e+01   3.5648785e+01
+   4.2300000e+01   1.2494471e+01   3.5664835e+01
+   4.2300000e+01   1.2597438e+01   3.5676273e+01
+   4.2300000e+01   1.2688149e+01   3.5686380e+01
+   4.2300000e+01   1.2785116e+01   3.5697636e+01
+   4.2300000e+01   1.2848306e+01   3.5705074e+01
+   4.2300000e+01   1.2914322e+01   3.5711992e+01
+   4.2300000e+01   1.3001628e+01   3.5721826e+01
+   4.2300000e+01   1.3051289e+01   3.5725025e+01
+   4.2300000e+01   1.3089132e+01   3.5727711e+01
+   4.2300000e+01   1.3142140e+01   3.5735612e+01
+   4.2300000e+01   1.3179091e+01   3.5738893e+01
+   4.2300000e+01   1.3225289e+01   3.5744364e+01
+   4.2300000e+01   1.3285380e+01   3.5750000e+01
+   4.2300000e+01   1.3351380e+01   3.5760339e+01
+   4.2300000e+01   1.3413512e+01   3.5768570e+01
+   4.2300000e+01   1.3485198e+01   3.5776364e+01
+   4.2300000e+01   1.3539636e+01   3.5778083e+01
+   4.2300000e+01   1.3586083e+01   3.5781620e+01
+   4.2300000e+01   1.3649860e+01   3.5788785e+01
+   4.2300000e+01   1.3724041e+01   3.5795174e+01
+   4.2300000e+01   1.3795636e+01   3.5799347e+01
+   4.2300000e+01   1.3896884e+01   3.5810504e+01
+   4.2300000e+01   1.4007802e+01   3.5819636e+01
+   4.2300000e+01   1.4119207e+01   3.5823149e+01
+   4.2300000e+01   1.4275008e+01   3.5831579e+01
+   4.2300000e+01   1.4495909e+01   3.5833537e+01
+   4.2300000e+01   1.4732562e+01   3.5837397e+01
+   4.2300000e+01   1.4997446e+01   3.5833347e+01
+   4.2300000e+01   1.5706603e+01   3.5837281e+01
+   4.2300000e+01   1.6613545e+01   3.5844116e+01
+   4.2300000e+01   1.7261298e+01   3.5850289e+01
+   4.2300000e+01   1.8017446e+01   3.5853281e+01
+   4.2300000e+01   1.8879421e+01   3.5867727e+01
+   4.2300000e+01   1.9534612e+01   3.5871678e+01
+   4.2300000e+01   1.9774289e+01   3.5868719e+01
+   4.2300000e+01   1.9845992e+01   3.5868760e+01
+   4.2300000e+01   1.9857645e+01   3.5869248e+01
+   4.2300000e+01   1.9858744e+01   3.5869810e+01
+   4.2300000e+01   1.9851843e+01   3.5868702e+01
+   4.2300000e+01   1.9795959e+01   3.5873008e+01
+   4.2350000e+01   2.5103554e+00   3.4896107e+01
+   4.2350000e+01   2.5061901e+00   3.4902207e+01
+   4.2350000e+01   2.5121488e+00   3.4907306e+01
+   4.2350000e+01   2.5413554e+00   3.4914521e+01
+   4.2350000e+01   2.5794959e+00   3.4919405e+01
+   4.2350000e+01   2.6451405e+00   3.4928736e+01
+   4.2350000e+01   2.7416281e+00   3.4940488e+01
+   4.2350000e+01   2.8990331e+00   3.4952802e+01
+   4.2350000e+01   3.0880496e+00   3.4961322e+01
+   4.2350000e+01   3.3536529e+00   3.4973281e+01
+   4.2350000e+01   3.5827603e+00   3.4972736e+01
+   4.2350000e+01   3.8425455e+00   3.4984074e+01
+   4.2350000e+01   4.3142231e+00   3.5036645e+01
+   4.2350000e+01   5.2460165e+00   3.5170777e+01
+   4.2350000e+01   6.6648926e+00   3.5382711e+01
+   4.2350000e+01   8.2569008e+00   3.5621149e+01
+   4.2350000e+01   9.2870413e+00   3.5722876e+01
+   4.2350000e+01   9.5328760e+00   3.5630785e+01
+   4.2350000e+01   9.9026364e+00   3.5537066e+01
+   4.2350000e+01   1.0298083e+01   3.5480702e+01
+   4.2350000e+01   1.0770826e+01   3.5489091e+01
+   4.2350000e+01   1.1255678e+01   3.5531455e+01
+   4.2350000e+01   1.1602421e+01   3.5566000e+01
+   4.2350000e+01   1.1914041e+01   3.5601397e+01
+   4.2350000e+01   1.2147298e+01   3.5626901e+01
+   4.2350000e+01   1.2343058e+01   3.5648785e+01
+   4.2350000e+01   1.2494471e+01   3.5664835e+01
+   4.2350000e+01   1.2597438e+01   3.5676273e+01
+   4.2350000e+01   1.2688149e+01   3.5686380e+01
+   4.2350000e+01   1.2785116e+01   3.5697636e+01
+   4.2350000e+01   1.2848306e+01   3.5705074e+01
+   4.2350000e+01   1.2914322e+01   3.5711992e+01
+   4.2350000e+01   1.3001628e+01   3.5721826e+01
+   4.2350000e+01   1.3051289e+01   3.5725025e+01
+   4.2350000e+01   1.3089132e+01   3.5727711e+01
+   4.2350000e+01   1.3142140e+01   3.5735612e+01
+   4.2350000e+01   1.3179091e+01   3.5738893e+01
+   4.2350000e+01   1.3225289e+01   3.5744364e+01
+   4.2350000e+01   1.3285380e+01   3.5750000e+01
+   4.2350000e+01   1.3351380e+01   3.5760339e+01
+   4.2350000e+01   1.3413512e+01   3.5768570e+01
+   4.2350000e+01   1.3485198e+01   3.5776364e+01
+   4.2350000e+01   1.3539636e+01   3.5778083e+01
+   4.2350000e+01   1.3586083e+01   3.5781620e+01
+   4.2350000e+01   1.3649860e+01   3.5788785e+01
+   4.2350000e+01   1.3724041e+01   3.5795174e+01
+   4.2350000e+01   1.3795636e+01   3.5799347e+01
+   4.2350000e+01   1.3896884e+01   3.5810504e+01
+   4.2350000e+01   1.4007802e+01   3.5819636e+01
+   4.2350000e+01   1.4119207e+01   3.5823149e+01
+   4.2350000e+01   1.4275008e+01   3.5831579e+01
+   4.2350000e+01   1.4495909e+01   3.5833537e+01
+   4.2350000e+01   1.4732562e+01   3.5837397e+01
+   4.2350000e+01   1.4997446e+01   3.5833347e+01
+   4.2350000e+01   1.5706603e+01   3.5837281e+01
+   4.2350000e+01   1.6613545e+01   3.5844116e+01
+   4.2350000e+01   1.7261298e+01   3.5850289e+01
+   4.2350000e+01   1.8017446e+01   3.5853281e+01
+   4.2350000e+01   1.8879421e+01   3.5867727e+01
+   4.2350000e+01   1.9534612e+01   3.5871678e+01
+   4.2350000e+01   1.9774289e+01   3.5868719e+01
+   4.2350000e+01   1.9845992e+01   3.5868760e+01
+   4.2350000e+01   1.9857645e+01   3.5869248e+01
+   4.2350000e+01   1.9858744e+01   3.5869810e+01
+   4.2350000e+01   1.9851843e+01   3.5868702e+01
+   4.2350000e+01   1.9795959e+01   3.5873008e+01
+   4.2400000e+01   2.5103554e+00   3.4896107e+01
+   4.2400000e+01   2.5061901e+00   3.4902207e+01
+   4.2400000e+01   2.5121488e+00   3.4907306e+01
+   4.2400000e+01   2.5413554e+00   3.4914521e+01
+   4.2400000e+01   2.5794959e+00   3.4919405e+01
+   4.2400000e+01   2.6451405e+00   3.4928736e+01
+   4.2400000e+01   2.7416281e+00   3.4940488e+01
+   4.2400000e+01   2.8990331e+00   3.4952802e+01
+   4.2400000e+01   3.0880496e+00   3.4961322e+01
+   4.2400000e+01   3.3536529e+00   3.4973281e+01
+   4.2400000e+01   3.5827603e+00   3.4972736e+01
+   4.2400000e+01   3.8425455e+00   3.4984074e+01
+   4.2400000e+01   4.3142231e+00   3.5036645e+01
+   4.2400000e+01   5.2460165e+00   3.5170777e+01
+   4.2400000e+01   6.6648926e+00   3.5382711e+01
+   4.2400000e+01   8.2569008e+00   3.5621149e+01
+   4.2400000e+01   9.2870413e+00   3.5722876e+01
+   4.2400000e+01   9.5328760e+00   3.5630785e+01
+   4.2400000e+01   9.9026364e+00   3.5537066e+01
+   4.2400000e+01   1.0298083e+01   3.5480702e+01
+   4.2400000e+01   1.0770826e+01   3.5489091e+01
+   4.2400000e+01   1.1255678e+01   3.5531455e+01
+   4.2400000e+01   1.1602421e+01   3.5566000e+01
+   4.2400000e+01   1.1914041e+01   3.5601397e+01
+   4.2400000e+01   1.2147298e+01   3.5626901e+01
+   4.2400000e+01   1.2343058e+01   3.5648785e+01
+   4.2400000e+01   1.2494471e+01   3.5664835e+01
+   4.2400000e+01   1.2597438e+01   3.5676273e+01
+   4.2400000e+01   1.2688149e+01   3.5686380e+01
+   4.2400000e+01   1.2785116e+01   3.5697636e+01
+   4.2400000e+01   1.2848306e+01   3.5705074e+01
+   4.2400000e+01   1.2914322e+01   3.5711992e+01
+   4.2400000e+01   1.3001628e+01   3.5721826e+01
+   4.2400000e+01   1.3051289e+01   3.5725025e+01
+   4.2400000e+01   1.3089132e+01   3.5727711e+01
+   4.2400000e+01   1.3142140e+01   3.5735612e+01
+   4.2400000e+01   1.3179091e+01   3.5738893e+01
+   4.2400000e+01   1.3225289e+01   3.5744364e+01
+   4.2400000e+01   1.3285380e+01   3.5750000e+01
+   4.2400000e+01   1.3351380e+01   3.5760339e+01
+   4.2400000e+01   1.3413512e+01   3.5768570e+01
+   4.2400000e+01   1.3485198e+01   3.5776364e+01
+   4.2400000e+01   1.3539636e+01   3.5778083e+01
+   4.2400000e+01   1.3586083e+01   3.5781620e+01
+   4.2400000e+01   1.3649860e+01   3.5788785e+01
+   4.2400000e+01   1.3724041e+01   3.5795174e+01
+   4.2400000e+01   1.3795636e+01   3.5799347e+01
+   4.2400000e+01   1.3896884e+01   3.5810504e+01
+   4.2400000e+01   1.4007802e+01   3.5819636e+01
+   4.2400000e+01   1.4119207e+01   3.5823149e+01
+   4.2400000e+01   1.4275008e+01   3.5831579e+01
+   4.2400000e+01   1.4495909e+01   3.5833537e+01
+   4.2400000e+01   1.4732562e+01   3.5837397e+01
+   4.2400000e+01   1.4997446e+01   3.5833347e+01
+   4.2400000e+01   1.5706603e+01   3.5837281e+01
+   4.2400000e+01   1.6613545e+01   3.5844116e+01
+   4.2400000e+01   1.7261298e+01   3.5850289e+01
+   4.2400000e+01   1.8017446e+01   3.5853281e+01
+   4.2400000e+01   1.8879421e+01   3.5867727e+01
+   4.2400000e+01   1.9534612e+01   3.5871678e+01
+   4.2400000e+01   1.9774289e+01   3.5868719e+01
+   4.2400000e+01   1.9845992e+01   3.5868760e+01
+   4.2400000e+01   1.9857645e+01   3.5869248e+01
+   4.2400000e+01   1.9858744e+01   3.5869810e+01
+   4.2400000e+01   1.9851843e+01   3.5868702e+01
+   4.2400000e+01   1.9795959e+01   3.5873008e+01
+   4.2450000e+01   2.5103554e+00   3.4896107e+01
+   4.2450000e+01   2.5061901e+00   3.4902207e+01
+   4.2450000e+01   2.5121488e+00   3.4907306e+01
+   4.2450000e+01   2.5413554e+00   3.4914521e+01
+   4.2450000e+01   2.5794959e+00   3.4919405e+01
+   4.2450000e+01   2.6451405e+00   3.4928736e+01
+   4.2450000e+01   2.7416281e+00   3.4940488e+01
+   4.2450000e+01   2.8990331e+00   3.4952802e+01
+   4.2450000e+01   3.0880496e+00   3.4961322e+01
+   4.2450000e+01   3.3536529e+00   3.4973281e+01
+   4.2450000e+01   3.5827603e+00   3.4972736e+01
+   4.2450000e+01   3.8425455e+00   3.4984074e+01
+   4.2450000e+01   4.3142231e+00   3.5036645e+01
+   4.2450000e+01   5.2460165e+00   3.5170777e+01
+   4.2450000e+01   6.6648926e+00   3.5382711e+01
+   4.2450000e+01   8.2569008e+00   3.5621149e+01
+   4.2450000e+01   9.2870413e+00   3.5722876e+01
+   4.2450000e+01   9.5328760e+00   3.5630785e+01
+   4.2450000e+01   9.9026364e+00   3.5537066e+01
+   4.2450000e+01   1.0298083e+01   3.5480702e+01
+   4.2450000e+01   1.0770826e+01   3.5489091e+01
+   4.2450000e+01   1.1255678e+01   3.5531455e+01
+   4.2450000e+01   1.1602421e+01   3.5566000e+01
+   4.2450000e+01   1.1914041e+01   3.5601397e+01
+   4.2450000e+01   1.2147298e+01   3.5626901e+01
+   4.2450000e+01   1.2343058e+01   3.5648785e+01
+   4.2450000e+01   1.2494471e+01   3.5664835e+01
+   4.2450000e+01   1.2597438e+01   3.5676273e+01
+   4.2450000e+01   1.2688149e+01   3.5686380e+01
+   4.2450000e+01   1.2785116e+01   3.5697636e+01
+   4.2450000e+01   1.2848306e+01   3.5705074e+01
+   4.2450000e+01   1.2914322e+01   3.5711992e+01
+   4.2450000e+01   1.3001628e+01   3.5721826e+01
+   4.2450000e+01   1.3051289e+01   3.5725025e+01
+   4.2450000e+01   1.3089132e+01   3.5727711e+01
+   4.2450000e+01   1.3142140e+01   3.5735612e+01
+   4.2450000e+01   1.3179091e+01   3.5738893e+01
+   4.2450000e+01   1.3225289e+01   3.5744364e+01
+   4.2450000e+01   1.3285380e+01   3.5750000e+01
+   4.2450000e+01   1.3351380e+01   3.5760339e+01
+   4.2450000e+01   1.3413512e+01   3.5768570e+01
+   4.2450000e+01   1.3485198e+01   3.5776364e+01
+   4.2450000e+01   1.3539636e+01   3.5778083e+01
+   4.2450000e+01   1.3586083e+01   3.5781620e+01
+   4.2450000e+01   1.3649860e+01   3.5788785e+01
+   4.2450000e+01   1.3724041e+01   3.5795174e+01
+   4.2450000e+01   1.3795636e+01   3.5799347e+01
+   4.2450000e+01   1.3896884e+01   3.5810504e+01
+   4.2450000e+01   1.4007802e+01   3.5819636e+01
+   4.2450000e+01   1.4119207e+01   3.5823149e+01
+   4.2450000e+01   1.4275008e+01   3.5831579e+01
+   4.2450000e+01   1.4495909e+01   3.5833537e+01
+   4.2450000e+01   1.4732562e+01   3.5837397e+01
+   4.2450000e+01   1.4997446e+01   3.5833347e+01
+   4.2450000e+01   1.5706603e+01   3.5837281e+01
+   4.2450000e+01   1.6613545e+01   3.5844116e+01
+   4.2450000e+01   1.7261298e+01   3.5850289e+01
+   4.2450000e+01   1.8017446e+01   3.5853281e+01
+   4.2450000e+01   1.8879421e+01   3.5867727e+01
+   4.2450000e+01   1.9534612e+01   3.5871678e+01
+   4.2450000e+01   1.9774289e+01   3.5868719e+01
+   4.2450000e+01   1.9845992e+01   3.5868760e+01
+   4.2450000e+01   1.9857645e+01   3.5869248e+01
+   4.2450000e+01   1.9858744e+01   3.5869810e+01
+   4.2450000e+01   1.9851843e+01   3.5868702e+01
+   4.2450000e+01   1.9795959e+01   3.5873008e+01
+   4.2500000e+01   2.5103554e+00   3.4896107e+01
+   4.2500000e+01   2.5061901e+00   3.4902207e+01
+   4.2500000e+01   2.5121488e+00   3.4907306e+01
+   4.2500000e+01   2.5413554e+00   3.4914521e+01
+   4.2500000e+01   2.5794959e+00   3.4919405e+01
+   4.2500000e+01   2.6451405e+00   3.4928736e+01
+   4.2500000e+01   2.7416281e+00   3.4940488e+01
+   4.2500000e+01   2.8990331e+00   3.4952802e+01
+   4.2500000e+01   3.0880496e+00   3.4961322e+01
+   4.2500000e+01   3.3536529e+00   3.4973281e+01
+   4.2500000e+01   3.5827603e+00   3.4972736e+01
+   4.2500000e+01   3.8425455e+00   3.4984074e+01
+   4.2500000e+01   4.3142231e+00   3.5036645e+01
+   4.2500000e+01   5.2460165e+00   3.5170777e+01
+   4.2500000e+01   6.6648926e+00   3.5382711e+01
+   4.2500000e+01   8.2569008e+00   3.5621149e+01
+   4.2500000e+01   9.2870413e+00   3.5722876e+01
+   4.2500000e+01   9.5328760e+00   3.5630785e+01
+   4.2500000e+01   9.9026364e+00   3.5537066e+01
+   4.2500000e+01   1.0298083e+01   3.5480702e+01
+   4.2500000e+01   1.0770826e+01   3.5489091e+01
+   4.2500000e+01   1.1255678e+01   3.5531455e+01
+   4.2500000e+01   1.1602421e+01   3.5566000e+01
+   4.2500000e+01   1.1914041e+01   3.5601397e+01
+   4.2500000e+01   1.2147298e+01   3.5626901e+01
+   4.2500000e+01   1.2343058e+01   3.5648785e+01
+   4.2500000e+01   1.2494471e+01   3.5664835e+01
+   4.2500000e+01   1.2597438e+01   3.5676273e+01
+   4.2500000e+01   1.2688149e+01   3.5686380e+01
+   4.2500000e+01   1.2785116e+01   3.5697636e+01
+   4.2500000e+01   1.2848306e+01   3.5705074e+01
+   4.2500000e+01   1.2914322e+01   3.5711992e+01
+   4.2500000e+01   1.3001628e+01   3.5721826e+01
+   4.2500000e+01   1.3051289e+01   3.5725025e+01
+   4.2500000e+01   1.3089132e+01   3.5727711e+01
+   4.2500000e+01   1.3142140e+01   3.5735612e+01
+   4.2500000e+01   1.3179091e+01   3.5738893e+01
+   4.2500000e+01   1.3225289e+01   3.5744364e+01
+   4.2500000e+01   1.3285380e+01   3.5750000e+01
+   4.2500000e+01   1.3351380e+01   3.5760339e+01
+   4.2500000e+01   1.3413512e+01   3.5768570e+01
+   4.2500000e+01   1.3485198e+01   3.5776364e+01
+   4.2500000e+01   1.3539636e+01   3.5778083e+01
+   4.2500000e+01   1.3586083e+01   3.5781620e+01
+   4.2500000e+01   1.3649860e+01   3.5788785e+01
+   4.2500000e+01   1.3724041e+01   3.5795174e+01
+   4.2500000e+01   1.3795636e+01   3.5799347e+01
+   4.2500000e+01   1.3896884e+01   3.5810504e+01
+   4.2500000e+01   1.4007802e+01   3.5819636e+01
+   4.2500000e+01   1.4119207e+01   3.5823149e+01
+   4.2500000e+01   1.4275008e+01   3.5831579e+01
+   4.2500000e+01   1.4495909e+01   3.5833537e+01
+   4.2500000e+01   1.4732562e+01   3.5837397e+01
+   4.2500000e+01   1.4997446e+01   3.5833347e+01
+   4.2500000e+01   1.5706603e+01   3.5837281e+01
+   4.2500000e+01   1.6613545e+01   3.5844116e+01
+   4.2500000e+01   1.7261298e+01   3.5850289e+01
+   4.2500000e+01   1.8017446e+01   3.5853281e+01
+   4.2500000e+01   1.8879421e+01   3.5867727e+01
+   4.2500000e+01   1.9534612e+01   3.5871678e+01
+   4.2500000e+01   1.9774289e+01   3.5868719e+01
+   4.2500000e+01   1.9845992e+01   3.5868760e+01
+   4.2500000e+01   1.9857645e+01   3.5869248e+01
+   4.2500000e+01   1.9858744e+01   3.5869810e+01
+   4.2500000e+01   1.9851843e+01   3.5868702e+01
+   4.2500000e+01   1.9795959e+01   3.5873008e+01
+   4.2550000e+01   2.5103554e+00   3.4896107e+01
+   4.2550000e+01   2.5061901e+00   3.4902207e+01
+   4.2550000e+01   2.5121488e+00   3.4907306e+01
+   4.2550000e+01   2.5413554e+00   3.4914521e+01
+   4.2550000e+01   2.5794959e+00   3.4919405e+01
+   4.2550000e+01   2.6451405e+00   3.4928736e+01
+   4.2550000e+01   2.7416281e+00   3.4940488e+01
+   4.2550000e+01   2.8990331e+00   3.4952802e+01
+   4.2550000e+01   3.0880496e+00   3.4961322e+01
+   4.2550000e+01   3.3536529e+00   3.4973281e+01
+   4.2550000e+01   3.5827603e+00   3.4972736e+01
+   4.2550000e+01   3.8425455e+00   3.4984074e+01
+   4.2550000e+01   4.3142231e+00   3.5036645e+01
+   4.2550000e+01   5.2460165e+00   3.5170777e+01
+   4.2550000e+01   6.6648926e+00   3.5382711e+01
+   4.2550000e+01   8.2569008e+00   3.5621149e+01
+   4.2550000e+01   9.2870413e+00   3.5722876e+01
+   4.2550000e+01   9.5328760e+00   3.5630785e+01
+   4.2550000e+01   9.9026364e+00   3.5537066e+01
+   4.2550000e+01   1.0298083e+01   3.5480702e+01
+   4.2550000e+01   1.0770826e+01   3.5489091e+01
+   4.2550000e+01   1.1255678e+01   3.5531455e+01
+   4.2550000e+01   1.1602421e+01   3.5566000e+01
+   4.2550000e+01   1.1914041e+01   3.5601397e+01
+   4.2550000e+01   1.2147298e+01   3.5626901e+01
+   4.2550000e+01   1.2343058e+01   3.5648785e+01
+   4.2550000e+01   1.2494471e+01   3.5664835e+01
+   4.2550000e+01   1.2597438e+01   3.5676273e+01
+   4.2550000e+01   1.2688149e+01   3.5686380e+01
+   4.2550000e+01   1.2785116e+01   3.5697636e+01
+   4.2550000e+01   1.2848306e+01   3.5705074e+01
+   4.2550000e+01   1.2914322e+01   3.5711992e+01
+   4.2550000e+01   1.3001628e+01   3.5721826e+01
+   4.2550000e+01   1.3051289e+01   3.5725025e+01
+   4.2550000e+01   1.3089132e+01   3.5727711e+01
+   4.2550000e+01   1.3142140e+01   3.5735612e+01
+   4.2550000e+01   1.3179091e+01   3.5738893e+01
+   4.2550000e+01   1.3225289e+01   3.5744364e+01
+   4.2550000e+01   1.3285380e+01   3.5750000e+01
+   4.2550000e+01   1.3351380e+01   3.5760339e+01
+   4.2550000e+01   1.3413512e+01   3.5768570e+01
+   4.2550000e+01   1.3485198e+01   3.5776364e+01
+   4.2550000e+01   1.3539636e+01   3.5778083e+01
+   4.2550000e+01   1.3586083e+01   3.5781620e+01
+   4.2550000e+01   1.3649860e+01   3.5788785e+01
+   4.2550000e+01   1.3724041e+01   3.5795174e+01
+   4.2550000e+01   1.3795636e+01   3.5799347e+01
+   4.2550000e+01   1.3896884e+01   3.5810504e+01
+   4.2550000e+01   1.4007802e+01   3.5819636e+01
+   4.2550000e+01   1.4119207e+01   3.5823149e+01
+   4.2550000e+01   1.4275008e+01   3.5831579e+01
+   4.2550000e+01   1.4495909e+01   3.5833537e+01
+   4.2550000e+01   1.4732562e+01   3.5837397e+01
+   4.2550000e+01   1.4997446e+01   3.5833347e+01
+   4.2550000e+01   1.5706603e+01   3.5837281e+01
+   4.2550000e+01   1.6613545e+01   3.5844116e+01
+   4.2550000e+01   1.7261298e+01   3.5850289e+01
+   4.2550000e+01   1.8017446e+01   3.5853281e+01
+   4.2550000e+01   1.8879421e+01   3.5867727e+01
+   4.2550000e+01   1.9534612e+01   3.5871678e+01
+   4.2550000e+01   1.9774289e+01   3.5868719e+01
+   4.2550000e+01   1.9845992e+01   3.5868760e+01
+   4.2550000e+01   1.9857645e+01   3.5869248e+01
+   4.2550000e+01   1.9858744e+01   3.5869810e+01
+   4.2550000e+01   1.9851843e+01   3.5868702e+01
+   4.2550000e+01   1.9795959e+01   3.5873008e+01
+   4.2600000e+01   2.5103554e+00   3.4896107e+01
+   4.2600000e+01   2.5061901e+00   3.4902207e+01
+   4.2600000e+01   2.5121488e+00   3.4907306e+01
+   4.2600000e+01   2.5413554e+00   3.4914521e+01
+   4.2600000e+01   2.5794959e+00   3.4919405e+01
+   4.2600000e+01   2.6451405e+00   3.4928736e+01
+   4.2600000e+01   2.7416281e+00   3.4940488e+01
+   4.2600000e+01   2.8990331e+00   3.4952802e+01
+   4.2600000e+01   3.0880496e+00   3.4961322e+01
+   4.2600000e+01   3.3536529e+00   3.4973281e+01
+   4.2600000e+01   3.5827603e+00   3.4972736e+01
+   4.2600000e+01   3.8425455e+00   3.4984074e+01
+   4.2600000e+01   4.3142231e+00   3.5036645e+01
+   4.2600000e+01   5.2460165e+00   3.5170777e+01
+   4.2600000e+01   6.6648926e+00   3.5382711e+01
+   4.2600000e+01   8.2569008e+00   3.5621149e+01
+   4.2600000e+01   9.2870413e+00   3.5722876e+01
+   4.2600000e+01   9.5328760e+00   3.5630785e+01
+   4.2600000e+01   9.9026364e+00   3.5537066e+01
+   4.2600000e+01   1.0298083e+01   3.5480702e+01
+   4.2600000e+01   1.0770826e+01   3.5489091e+01
+   4.2600000e+01   1.1255678e+01   3.5531455e+01
+   4.2600000e+01   1.1602421e+01   3.5566000e+01
+   4.2600000e+01   1.1914041e+01   3.5601397e+01
+   4.2600000e+01   1.2147298e+01   3.5626901e+01
+   4.2600000e+01   1.2343058e+01   3.5648785e+01
+   4.2600000e+01   1.2494471e+01   3.5664835e+01
+   4.2600000e+01   1.2597438e+01   3.5676273e+01
+   4.2600000e+01   1.2688149e+01   3.5686380e+01
+   4.2600000e+01   1.2785116e+01   3.5697636e+01
+   4.2600000e+01   1.2848306e+01   3.5705074e+01
+   4.2600000e+01   1.2914322e+01   3.5711992e+01
+   4.2600000e+01   1.3001628e+01   3.5721826e+01
+   4.2600000e+01   1.3051289e+01   3.5725025e+01
+   4.2600000e+01   1.3089132e+01   3.5727711e+01
+   4.2600000e+01   1.3142140e+01   3.5735612e+01
+   4.2600000e+01   1.3179091e+01   3.5738893e+01
+   4.2600000e+01   1.3225289e+01   3.5744364e+01
+   4.2600000e+01   1.3285380e+01   3.5750000e+01
+   4.2600000e+01   1.3351380e+01   3.5760339e+01
+   4.2600000e+01   1.3413512e+01   3.5768570e+01
+   4.2600000e+01   1.3485198e+01   3.5776364e+01
+   4.2600000e+01   1.3539636e+01   3.5778083e+01
+   4.2600000e+01   1.3586083e+01   3.5781620e+01
+   4.2600000e+01   1.3649860e+01   3.5788785e+01
+   4.2600000e+01   1.3724041e+01   3.5795174e+01
+   4.2600000e+01   1.3795636e+01   3.5799347e+01
+   4.2600000e+01   1.3896884e+01   3.5810504e+01
+   4.2600000e+01   1.4007802e+01   3.5819636e+01
+   4.2600000e+01   1.4119207e+01   3.5823149e+01
+   4.2600000e+01   1.4275008e+01   3.5831579e+01
+   4.2600000e+01   1.4495909e+01   3.5833537e+01
+   4.2600000e+01   1.4732562e+01   3.5837397e+01
+   4.2600000e+01   1.4997446e+01   3.5833347e+01
+   4.2600000e+01   1.5706603e+01   3.5837281e+01
+   4.2600000e+01   1.6613545e+01   3.5844116e+01
+   4.2600000e+01   1.7261298e+01   3.5850289e+01
+   4.2600000e+01   1.8017446e+01   3.5853281e+01
+   4.2600000e+01   1.8879421e+01   3.5867727e+01
+   4.2600000e+01   1.9534612e+01   3.5871678e+01
+   4.2600000e+01   1.9774289e+01   3.5868719e+01
+   4.2600000e+01   1.9845992e+01   3.5868760e+01
+   4.2600000e+01   1.9857645e+01   3.5869248e+01
+   4.2600000e+01   1.9858744e+01   3.5869810e+01
+   4.2600000e+01   1.9851843e+01   3.5868702e+01
+   4.2600000e+01   1.9795959e+01   3.5873008e+01
+   4.2650000e+01   2.5103554e+00   3.4896107e+01
+   4.2650000e+01   2.5061901e+00   3.4902207e+01
+   4.2650000e+01   2.5121488e+00   3.4907306e+01
+   4.2650000e+01   2.5413554e+00   3.4914521e+01
+   4.2650000e+01   2.5794959e+00   3.4919405e+01
+   4.2650000e+01   2.6451405e+00   3.4928736e+01
+   4.2650000e+01   2.7416281e+00   3.4940488e+01
+   4.2650000e+01   2.8990331e+00   3.4952802e+01
+   4.2650000e+01   3.0880496e+00   3.4961322e+01
+   4.2650000e+01   3.3536529e+00   3.4973281e+01
+   4.2650000e+01   3.5827603e+00   3.4972736e+01
+   4.2650000e+01   3.8425455e+00   3.4984074e+01
+   4.2650000e+01   4.3142231e+00   3.5036645e+01
+   4.2650000e+01   5.2460165e+00   3.5170777e+01
+   4.2650000e+01   6.6648926e+00   3.5382711e+01
+   4.2650000e+01   8.2569008e+00   3.5621149e+01
+   4.2650000e+01   9.2870413e+00   3.5722876e+01
+   4.2650000e+01   9.5328760e+00   3.5630785e+01
+   4.2650000e+01   9.9026364e+00   3.5537066e+01
+   4.2650000e+01   1.0298083e+01   3.5480702e+01
+   4.2650000e+01   1.0770826e+01   3.5489091e+01
+   4.2650000e+01   1.1255678e+01   3.5531455e+01
+   4.2650000e+01   1.1602421e+01   3.5566000e+01
+   4.2650000e+01   1.1914041e+01   3.5601397e+01
+   4.2650000e+01   1.2147298e+01   3.5626901e+01
+   4.2650000e+01   1.2343058e+01   3.5648785e+01
+   4.2650000e+01   1.2494471e+01   3.5664835e+01
+   4.2650000e+01   1.2597438e+01   3.5676273e+01
+   4.2650000e+01   1.2688149e+01   3.5686380e+01
+   4.2650000e+01   1.2785116e+01   3.5697636e+01
+   4.2650000e+01   1.2848306e+01   3.5705074e+01
+   4.2650000e+01   1.2914322e+01   3.5711992e+01
+   4.2650000e+01   1.3001628e+01   3.5721826e+01
+   4.2650000e+01   1.3051289e+01   3.5725025e+01
+   4.2650000e+01   1.3089132e+01   3.5727711e+01
+   4.2650000e+01   1.3142140e+01   3.5735612e+01
+   4.2650000e+01   1.3179091e+01   3.5738893e+01
+   4.2650000e+01   1.3225289e+01   3.5744364e+01
+   4.2650000e+01   1.3285380e+01   3.5750000e+01
+   4.2650000e+01   1.3351380e+01   3.5760339e+01
+   4.2650000e+01   1.3413512e+01   3.5768570e+01
+   4.2650000e+01   1.3485198e+01   3.5776364e+01
+   4.2650000e+01   1.3539636e+01   3.5778083e+01
+   4.2650000e+01   1.3586083e+01   3.5781620e+01
+   4.2650000e+01   1.3649860e+01   3.5788785e+01
+   4.2650000e+01   1.3724041e+01   3.5795174e+01
+   4.2650000e+01   1.3795636e+01   3.5799347e+01
+   4.2650000e+01   1.3896884e+01   3.5810504e+01
+   4.2650000e+01   1.4007802e+01   3.5819636e+01
+   4.2650000e+01   1.4119207e+01   3.5823149e+01
+   4.2650000e+01   1.4275008e+01   3.5831579e+01
+   4.2650000e+01   1.4495909e+01   3.5833537e+01
+   4.2650000e+01   1.4732562e+01   3.5837397e+01
+   4.2650000e+01   1.4997446e+01   3.5833347e+01
+   4.2650000e+01   1.5706603e+01   3.5837281e+01
+   4.2650000e+01   1.6613545e+01   3.5844116e+01
+   4.2650000e+01   1.7261298e+01   3.5850289e+01
+   4.2650000e+01   1.8017446e+01   3.5853281e+01
+   4.2650000e+01   1.8879421e+01   3.5867727e+01
+   4.2650000e+01   1.9534612e+01   3.5871678e+01
+   4.2650000e+01   1.9774289e+01   3.5868719e+01
+   4.2650000e+01   1.9845992e+01   3.5868760e+01
+   4.2650000e+01   1.9857645e+01   3.5869248e+01
+   4.2650000e+01   1.9858744e+01   3.5869810e+01
+   4.2650000e+01   1.9851843e+01   3.5868702e+01
+   4.2650000e+01   1.9795959e+01   3.5873008e+01
+   4.2700000e+01   2.5103554e+00   3.4896107e+01
+   4.2700000e+01   2.5061901e+00   3.4902207e+01
+   4.2700000e+01   2.5121488e+00   3.4907306e+01
+   4.2700000e+01   2.5413554e+00   3.4914521e+01
+   4.2700000e+01   2.5794959e+00   3.4919405e+01
+   4.2700000e+01   2.6451405e+00   3.4928736e+01
+   4.2700000e+01   2.7416281e+00   3.4940488e+01
+   4.2700000e+01   2.8990331e+00   3.4952802e+01
+   4.2700000e+01   3.0880496e+00   3.4961322e+01
+   4.2700000e+01   3.3536529e+00   3.4973281e+01
+   4.2700000e+01   3.5827603e+00   3.4972736e+01
+   4.2700000e+01   3.8425455e+00   3.4984074e+01
+   4.2700000e+01   4.3142231e+00   3.5036645e+01
+   4.2700000e+01   5.2460165e+00   3.5170777e+01
+   4.2700000e+01   6.6648926e+00   3.5382711e+01
+   4.2700000e+01   8.2569008e+00   3.5621149e+01
+   4.2700000e+01   9.2870413e+00   3.5722876e+01
+   4.2700000e+01   9.5328760e+00   3.5630785e+01
+   4.2700000e+01   9.9026364e+00   3.5537066e+01
+   4.2700000e+01   1.0298083e+01   3.5480702e+01
+   4.2700000e+01   1.0770826e+01   3.5489091e+01
+   4.2700000e+01   1.1255678e+01   3.5531455e+01
+   4.2700000e+01   1.1602421e+01   3.5566000e+01
+   4.2700000e+01   1.1914041e+01   3.5601397e+01
+   4.2700000e+01   1.2147298e+01   3.5626901e+01
+   4.2700000e+01   1.2343058e+01   3.5648785e+01
+   4.2700000e+01   1.2494471e+01   3.5664835e+01
+   4.2700000e+01   1.2597438e+01   3.5676273e+01
+   4.2700000e+01   1.2688149e+01   3.5686380e+01
+   4.2700000e+01   1.2785116e+01   3.5697636e+01
+   4.2700000e+01   1.2848306e+01   3.5705074e+01
+   4.2700000e+01   1.2914322e+01   3.5711992e+01
+   4.2700000e+01   1.3001628e+01   3.5721826e+01
+   4.2700000e+01   1.3051289e+01   3.5725025e+01
+   4.2700000e+01   1.3089132e+01   3.5727711e+01
+   4.2700000e+01   1.3142140e+01   3.5735612e+01
+   4.2700000e+01   1.3179091e+01   3.5738893e+01
+   4.2700000e+01   1.3225289e+01   3.5744364e+01
+   4.2700000e+01   1.3285380e+01   3.5750000e+01
+   4.2700000e+01   1.3351380e+01   3.5760339e+01
+   4.2700000e+01   1.3413512e+01   3.5768570e+01
+   4.2700000e+01   1.3485198e+01   3.5776364e+01
+   4.2700000e+01   1.3539636e+01   3.5778083e+01
+   4.2700000e+01   1.3586083e+01   3.5781620e+01
+   4.2700000e+01   1.3649860e+01   3.5788785e+01
+   4.2700000e+01   1.3724041e+01   3.5795174e+01
+   4.2700000e+01   1.3795636e+01   3.5799347e+01
+   4.2700000e+01   1.3896884e+01   3.5810504e+01
+   4.2700000e+01   1.4007802e+01   3.5819636e+01
+   4.2700000e+01   1.4119207e+01   3.5823149e+01
+   4.2700000e+01   1.4275008e+01   3.5831579e+01
+   4.2700000e+01   1.4495909e+01   3.5833537e+01
+   4.2700000e+01   1.4732562e+01   3.5837397e+01
+   4.2700000e+01   1.4997446e+01   3.5833347e+01
+   4.2700000e+01   1.5706603e+01   3.5837281e+01
+   4.2700000e+01   1.6613545e+01   3.5844116e+01
+   4.2700000e+01   1.7261298e+01   3.5850289e+01
+   4.2700000e+01   1.8017446e+01   3.5853281e+01
+   4.2700000e+01   1.8879421e+01   3.5867727e+01
+   4.2700000e+01   1.9534612e+01   3.5871678e+01
+   4.2700000e+01   1.9774289e+01   3.5868719e+01
+   4.2700000e+01   1.9845992e+01   3.5868760e+01
+   4.2700000e+01   1.9857645e+01   3.5869248e+01
+   4.2700000e+01   1.9858744e+01   3.5869810e+01
+   4.2700000e+01   1.9851843e+01   3.5868702e+01
+   4.2700000e+01   1.9795959e+01   3.5873008e+01
+   4.2750000e+01   2.5103554e+00   3.4896107e+01
+   4.2750000e+01   2.5061901e+00   3.4902207e+01
+   4.2750000e+01   2.5121488e+00   3.4907306e+01
+   4.2750000e+01   2.5413554e+00   3.4914521e+01
+   4.2750000e+01   2.5794959e+00   3.4919405e+01
+   4.2750000e+01   2.6451405e+00   3.4928736e+01
+   4.2750000e+01   2.7416281e+00   3.4940488e+01
+   4.2750000e+01   2.8990331e+00   3.4952802e+01
+   4.2750000e+01   3.0880496e+00   3.4961322e+01
+   4.2750000e+01   3.3536529e+00   3.4973281e+01
+   4.2750000e+01   3.5827603e+00   3.4972736e+01
+   4.2750000e+01   3.8425455e+00   3.4984074e+01
+   4.2750000e+01   4.3142231e+00   3.5036645e+01
+   4.2750000e+01   5.2460165e+00   3.5170777e+01
+   4.2750000e+01   6.6648926e+00   3.5382711e+01
+   4.2750000e+01   8.2569008e+00   3.5621149e+01
+   4.2750000e+01   9.2870413e+00   3.5722876e+01
+   4.2750000e+01   9.5328760e+00   3.5630785e+01
+   4.2750000e+01   9.9026364e+00   3.5537066e+01
+   4.2750000e+01   1.0298083e+01   3.5480702e+01
+   4.2750000e+01   1.0770826e+01   3.5489091e+01
+   4.2750000e+01   1.1255678e+01   3.5531455e+01
+   4.2750000e+01   1.1602421e+01   3.5566000e+01
+   4.2750000e+01   1.1914041e+01   3.5601397e+01
+   4.2750000e+01   1.2147298e+01   3.5626901e+01
+   4.2750000e+01   1.2343058e+01   3.5648785e+01
+   4.2750000e+01   1.2494471e+01   3.5664835e+01
+   4.2750000e+01   1.2597438e+01   3.5676273e+01
+   4.2750000e+01   1.2688149e+01   3.5686380e+01
+   4.2750000e+01   1.2785116e+01   3.5697636e+01
+   4.2750000e+01   1.2848306e+01   3.5705074e+01
+   4.2750000e+01   1.2914322e+01   3.5711992e+01
+   4.2750000e+01   1.3001628e+01   3.5721826e+01
+   4.2750000e+01   1.3051289e+01   3.5725025e+01
+   4.2750000e+01   1.3089132e+01   3.5727711e+01
+   4.2750000e+01   1.3142140e+01   3.5735612e+01
+   4.2750000e+01   1.3179091e+01   3.5738893e+01
+   4.2750000e+01   1.3225289e+01   3.5744364e+01
+   4.2750000e+01   1.3285380e+01   3.5750000e+01
+   4.2750000e+01   1.3351380e+01   3.5760339e+01
+   4.2750000e+01   1.3413512e+01   3.5768570e+01
+   4.2750000e+01   1.3485198e+01   3.5776364e+01
+   4.2750000e+01   1.3539636e+01   3.5778083e+01
+   4.2750000e+01   1.3586083e+01   3.5781620e+01
+   4.2750000e+01   1.3649860e+01   3.5788785e+01
+   4.2750000e+01   1.3724041e+01   3.5795174e+01
+   4.2750000e+01   1.3795636e+01   3.5799347e+01
+   4.2750000e+01   1.3896884e+01   3.5810504e+01
+   4.2750000e+01   1.4007802e+01   3.5819636e+01
+   4.2750000e+01   1.4119207e+01   3.5823149e+01
+   4.2750000e+01   1.4275008e+01   3.5831579e+01
+   4.2750000e+01   1.4495909e+01   3.5833537e+01
+   4.2750000e+01   1.4732562e+01   3.5837397e+01
+   4.2750000e+01   1.4997446e+01   3.5833347e+01
+   4.2750000e+01   1.5706603e+01   3.5837281e+01
+   4.2750000e+01   1.6613545e+01   3.5844116e+01
+   4.2750000e+01   1.7261298e+01   3.5850289e+01
+   4.2750000e+01   1.8017446e+01   3.5853281e+01
+   4.2750000e+01   1.8879421e+01   3.5867727e+01
+   4.2750000e+01   1.9534612e+01   3.5871678e+01
+   4.2750000e+01   1.9774289e+01   3.5868719e+01
+   4.2750000e+01   1.9845992e+01   3.5868760e+01
+   4.2750000e+01   1.9857645e+01   3.5869248e+01
+   4.2750000e+01   1.9858744e+01   3.5869810e+01
+   4.2750000e+01   1.9851843e+01   3.5868702e+01
+   4.2750000e+01   1.9795959e+01   3.5873008e+01
+   4.2800000e+01   2.5103554e+00   3.4896107e+01
+   4.2800000e+01   2.5061901e+00   3.4902207e+01
+   4.2800000e+01   2.5121488e+00   3.4907306e+01
+   4.2800000e+01   2.5413554e+00   3.4914521e+01
+   4.2800000e+01   2.5794959e+00   3.4919405e+01
+   4.2800000e+01   2.6451405e+00   3.4928736e+01
+   4.2800000e+01   2.7416281e+00   3.4940488e+01
+   4.2800000e+01   2.8990331e+00   3.4952802e+01
+   4.2800000e+01   3.0880496e+00   3.4961322e+01
+   4.2800000e+01   3.3536529e+00   3.4973281e+01
+   4.2800000e+01   3.5827603e+00   3.4972736e+01
+   4.2800000e+01   3.8425455e+00   3.4984074e+01
+   4.2800000e+01   4.3142231e+00   3.5036645e+01
+   4.2800000e+01   5.2460165e+00   3.5170777e+01
+   4.2800000e+01   6.6648926e+00   3.5382711e+01
+   4.2800000e+01   8.2569008e+00   3.5621149e+01
+   4.2800000e+01   9.2870413e+00   3.5722876e+01
+   4.2800000e+01   9.5328760e+00   3.5630785e+01
+   4.2800000e+01   9.9026364e+00   3.5537066e+01
+   4.2800000e+01   1.0298083e+01   3.5480702e+01
+   4.2800000e+01   1.0770826e+01   3.5489091e+01
+   4.2800000e+01   1.1255678e+01   3.5531455e+01
+   4.2800000e+01   1.1602421e+01   3.5566000e+01
+   4.2800000e+01   1.1914041e+01   3.5601397e+01
+   4.2800000e+01   1.2147298e+01   3.5626901e+01
+   4.2800000e+01   1.2343058e+01   3.5648785e+01
+   4.2800000e+01   1.2494471e+01   3.5664835e+01
+   4.2800000e+01   1.2597438e+01   3.5676273e+01
+   4.2800000e+01   1.2688149e+01   3.5686380e+01
+   4.2800000e+01   1.2785116e+01   3.5697636e+01
+   4.2800000e+01   1.2848306e+01   3.5705074e+01
+   4.2800000e+01   1.2914322e+01   3.5711992e+01
+   4.2800000e+01   1.3001628e+01   3.5721826e+01
+   4.2800000e+01   1.3051289e+01   3.5725025e+01
+   4.2800000e+01   1.3089132e+01   3.5727711e+01
+   4.2800000e+01   1.3142140e+01   3.5735612e+01
+   4.2800000e+01   1.3179091e+01   3.5738893e+01
+   4.2800000e+01   1.3225289e+01   3.5744364e+01
+   4.2800000e+01   1.3285380e+01   3.5750000e+01
+   4.2800000e+01   1.3351380e+01   3.5760339e+01
+   4.2800000e+01   1.3413512e+01   3.5768570e+01
+   4.2800000e+01   1.3485198e+01   3.5776364e+01
+   4.2800000e+01   1.3539636e+01   3.5778083e+01
+   4.2800000e+01   1.3586083e+01   3.5781620e+01
+   4.2800000e+01   1.3649860e+01   3.5788785e+01
+   4.2800000e+01   1.3724041e+01   3.5795174e+01
+   4.2800000e+01   1.3795636e+01   3.5799347e+01
+   4.2800000e+01   1.3896884e+01   3.5810504e+01
+   4.2800000e+01   1.4007802e+01   3.5819636e+01
+   4.2800000e+01   1.4119207e+01   3.5823149e+01
+   4.2800000e+01   1.4275008e+01   3.5831579e+01
+   4.2800000e+01   1.4495909e+01   3.5833537e+01
+   4.2800000e+01   1.4732562e+01   3.5837397e+01
+   4.2800000e+01   1.4997446e+01   3.5833347e+01
+   4.2800000e+01   1.5706603e+01   3.5837281e+01
+   4.2800000e+01   1.6613545e+01   3.5844116e+01
+   4.2800000e+01   1.7261298e+01   3.5850289e+01
+   4.2800000e+01   1.8017446e+01   3.5853281e+01
+   4.2800000e+01   1.8879421e+01   3.5867727e+01
+   4.2800000e+01   1.9534612e+01   3.5871678e+01
+   4.2800000e+01   1.9774289e+01   3.5868719e+01
+   4.2800000e+01   1.9845992e+01   3.5868760e+01
+   4.2800000e+01   1.9857645e+01   3.5869248e+01
+   4.2800000e+01   1.9858744e+01   3.5869810e+01
+   4.2800000e+01   1.9851843e+01   3.5868702e+01
+   4.2800000e+01   1.9795959e+01   3.5873008e+01
+   4.2850000e+01   2.5103554e+00   3.4896107e+01
+   4.2850000e+01   2.5061901e+00   3.4902207e+01
+   4.2850000e+01   2.5121488e+00   3.4907306e+01
+   4.2850000e+01   2.5413554e+00   3.4914521e+01
+   4.2850000e+01   2.5794959e+00   3.4919405e+01
+   4.2850000e+01   2.6451405e+00   3.4928736e+01
+   4.2850000e+01   2.7416281e+00   3.4940488e+01
+   4.2850000e+01   2.8990331e+00   3.4952802e+01
+   4.2850000e+01   3.0880496e+00   3.4961322e+01
+   4.2850000e+01   3.3536529e+00   3.4973281e+01
+   4.2850000e+01   3.5827603e+00   3.4972736e+01
+   4.2850000e+01   3.8425455e+00   3.4984074e+01
+   4.2850000e+01   4.3142231e+00   3.5036645e+01
+   4.2850000e+01   5.2460165e+00   3.5170777e+01
+   4.2850000e+01   6.6648926e+00   3.5382711e+01
+   4.2850000e+01   8.2569008e+00   3.5621149e+01
+   4.2850000e+01   9.2870413e+00   3.5722876e+01
+   4.2850000e+01   9.5328760e+00   3.5630785e+01
+   4.2850000e+01   9.9026364e+00   3.5537066e+01
+   4.2850000e+01   1.0298083e+01   3.5480702e+01
+   4.2850000e+01   1.0770826e+01   3.5489091e+01
+   4.2850000e+01   1.1255678e+01   3.5531455e+01
+   4.2850000e+01   1.1602421e+01   3.5566000e+01
+   4.2850000e+01   1.1914041e+01   3.5601397e+01
+   4.2850000e+01   1.2147298e+01   3.5626901e+01
+   4.2850000e+01   1.2343058e+01   3.5648785e+01
+   4.2850000e+01   1.2494471e+01   3.5664835e+01
+   4.2850000e+01   1.2597438e+01   3.5676273e+01
+   4.2850000e+01   1.2688149e+01   3.5686380e+01
+   4.2850000e+01   1.2785116e+01   3.5697636e+01
+   4.2850000e+01   1.2848306e+01   3.5705074e+01
+   4.2850000e+01   1.2914322e+01   3.5711992e+01
+   4.2850000e+01   1.3001628e+01   3.5721826e+01
+   4.2850000e+01   1.3051289e+01   3.5725025e+01
+   4.2850000e+01   1.3089132e+01   3.5727711e+01
+   4.2850000e+01   1.3142140e+01   3.5735612e+01
+   4.2850000e+01   1.3179091e+01   3.5738893e+01
+   4.2850000e+01   1.3225289e+01   3.5744364e+01
+   4.2850000e+01   1.3285380e+01   3.5750000e+01
+   4.2850000e+01   1.3351380e+01   3.5760339e+01
+   4.2850000e+01   1.3413512e+01   3.5768570e+01
+   4.2850000e+01   1.3485198e+01   3.5776364e+01
+   4.2850000e+01   1.3539636e+01   3.5778083e+01
+   4.2850000e+01   1.3586083e+01   3.5781620e+01
+   4.2850000e+01   1.3649860e+01   3.5788785e+01
+   4.2850000e+01   1.3724041e+01   3.5795174e+01
+   4.2850000e+01   1.3795636e+01   3.5799347e+01
+   4.2850000e+01   1.3896884e+01   3.5810504e+01
+   4.2850000e+01   1.4007802e+01   3.5819636e+01
+   4.2850000e+01   1.4119207e+01   3.5823149e+01
+   4.2850000e+01   1.4275008e+01   3.5831579e+01
+   4.2850000e+01   1.4495909e+01   3.5833537e+01
+   4.2850000e+01   1.4732562e+01   3.5837397e+01
+   4.2850000e+01   1.4997446e+01   3.5833347e+01
+   4.2850000e+01   1.5706603e+01   3.5837281e+01
+   4.2850000e+01   1.6613545e+01   3.5844116e+01
+   4.2850000e+01   1.7261298e+01   3.5850289e+01
+   4.2850000e+01   1.8017446e+01   3.5853281e+01
+   4.2850000e+01   1.8879421e+01   3.5867727e+01
+   4.2850000e+01   1.9534612e+01   3.5871678e+01
+   4.2850000e+01   1.9774289e+01   3.5868719e+01
+   4.2850000e+01   1.9845992e+01   3.5868760e+01
+   4.2850000e+01   1.9857645e+01   3.5869248e+01
+   4.2850000e+01   1.9858744e+01   3.5869810e+01
+   4.2850000e+01   1.9851843e+01   3.5868702e+01
+   4.2850000e+01   1.9795959e+01   3.5873008e+01
+   4.2900000e+01   2.5103554e+00   3.4896107e+01
+   4.2900000e+01   2.5061901e+00   3.4902207e+01
+   4.2900000e+01   2.5121488e+00   3.4907306e+01
+   4.2900000e+01   2.5413554e+00   3.4914521e+01
+   4.2900000e+01   2.5794959e+00   3.4919405e+01
+   4.2900000e+01   2.6451405e+00   3.4928736e+01
+   4.2900000e+01   2.7416281e+00   3.4940488e+01
+   4.2900000e+01   2.8990331e+00   3.4952802e+01
+   4.2900000e+01   3.0880496e+00   3.4961322e+01
+   4.2900000e+01   3.3536529e+00   3.4973281e+01
+   4.2900000e+01   3.5827603e+00   3.4972736e+01
+   4.2900000e+01   3.8425455e+00   3.4984074e+01
+   4.2900000e+01   4.3142231e+00   3.5036645e+01
+   4.2900000e+01   5.2460165e+00   3.5170777e+01
+   4.2900000e+01   6.6648926e+00   3.5382711e+01
+   4.2900000e+01   8.2569008e+00   3.5621149e+01
+   4.2900000e+01   9.2870413e+00   3.5722876e+01
+   4.2900000e+01   9.5328760e+00   3.5630785e+01
+   4.2900000e+01   9.9026364e+00   3.5537066e+01
+   4.2900000e+01   1.0298083e+01   3.5480702e+01
+   4.2900000e+01   1.0770826e+01   3.5489091e+01
+   4.2900000e+01   1.1255678e+01   3.5531455e+01
+   4.2900000e+01   1.1602421e+01   3.5566000e+01
+   4.2900000e+01   1.1914041e+01   3.5601397e+01
+   4.2900000e+01   1.2147298e+01   3.5626901e+01
+   4.2900000e+01   1.2343058e+01   3.5648785e+01
+   4.2900000e+01   1.2494471e+01   3.5664835e+01
+   4.2900000e+01   1.2597438e+01   3.5676273e+01
+   4.2900000e+01   1.2688149e+01   3.5686380e+01
+   4.2900000e+01   1.2785116e+01   3.5697636e+01
+   4.2900000e+01   1.2848306e+01   3.5705074e+01
+   4.2900000e+01   1.2914322e+01   3.5711992e+01
+   4.2900000e+01   1.3001628e+01   3.5721826e+01
+   4.2900000e+01   1.3051289e+01   3.5725025e+01
+   4.2900000e+01   1.3089132e+01   3.5727711e+01
+   4.2900000e+01   1.3142140e+01   3.5735612e+01
+   4.2900000e+01   1.3179091e+01   3.5738893e+01
+   4.2900000e+01   1.3225289e+01   3.5744364e+01
+   4.2900000e+01   1.3285380e+01   3.5750000e+01
+   4.2900000e+01   1.3351380e+01   3.5760339e+01
+   4.2900000e+01   1.3413512e+01   3.5768570e+01
+   4.2900000e+01   1.3485198e+01   3.5776364e+01
+   4.2900000e+01   1.3539636e+01   3.5778083e+01
+   4.2900000e+01   1.3586083e+01   3.5781620e+01
+   4.2900000e+01   1.3649860e+01   3.5788785e+01
+   4.2900000e+01   1.3724041e+01   3.5795174e+01
+   4.2900000e+01   1.3795636e+01   3.5799347e+01
+   4.2900000e+01   1.3896884e+01   3.5810504e+01
+   4.2900000e+01   1.4007802e+01   3.5819636e+01
+   4.2900000e+01   1.4119207e+01   3.5823149e+01
+   4.2900000e+01   1.4275008e+01   3.5831579e+01
+   4.2900000e+01   1.4495909e+01   3.5833537e+01
+   4.2900000e+01   1.4732562e+01   3.5837397e+01
+   4.2900000e+01   1.4997446e+01   3.5833347e+01
+   4.2900000e+01   1.5706603e+01   3.5837281e+01
+   4.2900000e+01   1.6613545e+01   3.5844116e+01
+   4.2900000e+01   1.7261298e+01   3.5850289e+01
+   4.2900000e+01   1.8017446e+01   3.5853281e+01
+   4.2900000e+01   1.8879421e+01   3.5867727e+01
+   4.2900000e+01   1.9534612e+01   3.5871678e+01
+   4.2900000e+01   1.9774289e+01   3.5868719e+01
+   4.2900000e+01   1.9845992e+01   3.5868760e+01
+   4.2900000e+01   1.9857645e+01   3.5869248e+01
+   4.2900000e+01   1.9858744e+01   3.5869810e+01
+   4.2900000e+01   1.9851843e+01   3.5868702e+01
+   4.2900000e+01   1.9795959e+01   3.5873008e+01
+   4.2950000e+01   2.5103554e+00   3.4896107e+01
+   4.2950000e+01   2.5061901e+00   3.4902207e+01
+   4.2950000e+01   2.5121488e+00   3.4907306e+01
+   4.2950000e+01   2.5413554e+00   3.4914521e+01
+   4.2950000e+01   2.5794959e+00   3.4919405e+01
+   4.2950000e+01   2.6451405e+00   3.4928736e+01
+   4.2950000e+01   2.7416281e+00   3.4940488e+01
+   4.2950000e+01   2.8990331e+00   3.4952802e+01
+   4.2950000e+01   3.0880496e+00   3.4961322e+01
+   4.2950000e+01   3.3536529e+00   3.4973281e+01
+   4.2950000e+01   3.5827603e+00   3.4972736e+01
+   4.2950000e+01   3.8425455e+00   3.4984074e+01
+   4.2950000e+01   4.3142231e+00   3.5036645e+01
+   4.2950000e+01   5.2460165e+00   3.5170777e+01
+   4.2950000e+01   6.6648926e+00   3.5382711e+01
+   4.2950000e+01   8.2569008e+00   3.5621149e+01
+   4.2950000e+01   9.2870413e+00   3.5722876e+01
+   4.2950000e+01   9.5328760e+00   3.5630785e+01
+   4.2950000e+01   9.9026364e+00   3.5537066e+01
+   4.2950000e+01   1.0298083e+01   3.5480702e+01
+   4.2950000e+01   1.0770826e+01   3.5489091e+01
+   4.2950000e+01   1.1255678e+01   3.5531455e+01
+   4.2950000e+01   1.1602421e+01   3.5566000e+01
+   4.2950000e+01   1.1914041e+01   3.5601397e+01
+   4.2950000e+01   1.2147298e+01   3.5626901e+01
+   4.2950000e+01   1.2343058e+01   3.5648785e+01
+   4.2950000e+01   1.2494471e+01   3.5664835e+01
+   4.2950000e+01   1.2597438e+01   3.5676273e+01
+   4.2950000e+01   1.2688149e+01   3.5686380e+01
+   4.2950000e+01   1.2785116e+01   3.5697636e+01
+   4.2950000e+01   1.2848306e+01   3.5705074e+01
+   4.2950000e+01   1.2914322e+01   3.5711992e+01
+   4.2950000e+01   1.3001628e+01   3.5721826e+01
+   4.2950000e+01   1.3051289e+01   3.5725025e+01
+   4.2950000e+01   1.3089132e+01   3.5727711e+01
+   4.2950000e+01   1.3142140e+01   3.5735612e+01
+   4.2950000e+01   1.3179091e+01   3.5738893e+01
+   4.2950000e+01   1.3225289e+01   3.5744364e+01
+   4.2950000e+01   1.3285380e+01   3.5750000e+01
+   4.2950000e+01   1.3351380e+01   3.5760339e+01
+   4.2950000e+01   1.3413512e+01   3.5768570e+01
+   4.2950000e+01   1.3485198e+01   3.5776364e+01
+   4.2950000e+01   1.3539636e+01   3.5778083e+01
+   4.2950000e+01   1.3586083e+01   3.5781620e+01
+   4.2950000e+01   1.3649860e+01   3.5788785e+01
+   4.2950000e+01   1.3724041e+01   3.5795174e+01
+   4.2950000e+01   1.3795636e+01   3.5799347e+01
+   4.2950000e+01   1.3896884e+01   3.5810504e+01
+   4.2950000e+01   1.4007802e+01   3.5819636e+01
+   4.2950000e+01   1.4119207e+01   3.5823149e+01
+   4.2950000e+01   1.4275008e+01   3.5831579e+01
+   4.2950000e+01   1.4495909e+01   3.5833537e+01
+   4.2950000e+01   1.4732562e+01   3.5837397e+01
+   4.2950000e+01   1.4997446e+01   3.5833347e+01
+   4.2950000e+01   1.5706603e+01   3.5837281e+01
+   4.2950000e+01   1.6613545e+01   3.5844116e+01
+   4.2950000e+01   1.7261298e+01   3.5850289e+01
+   4.2950000e+01   1.8017446e+01   3.5853281e+01
+   4.2950000e+01   1.8879421e+01   3.5867727e+01
+   4.2950000e+01   1.9534612e+01   3.5871678e+01
+   4.2950000e+01   1.9774289e+01   3.5868719e+01
+   4.2950000e+01   1.9845992e+01   3.5868760e+01
+   4.2950000e+01   1.9857645e+01   3.5869248e+01
+   4.2950000e+01   1.9858744e+01   3.5869810e+01
+   4.2950000e+01   1.9851843e+01   3.5868702e+01
+   4.2950000e+01   1.9795959e+01   3.5873008e+01
+   4.3000000e+01   2.5103554e+00   3.4896107e+01
+   4.3000000e+01   2.5061901e+00   3.4902207e+01
+   4.3000000e+01   2.5121488e+00   3.4907306e+01
+   4.3000000e+01   2.5413554e+00   3.4914521e+01
+   4.3000000e+01   2.5794959e+00   3.4919405e+01
+   4.3000000e+01   2.6451405e+00   3.4928736e+01
+   4.3000000e+01   2.7416281e+00   3.4940488e+01
+   4.3000000e+01   2.8990331e+00   3.4952802e+01
+   4.3000000e+01   3.0880496e+00   3.4961322e+01
+   4.3000000e+01   3.3536529e+00   3.4973281e+01
+   4.3000000e+01   3.5827603e+00   3.4972736e+01
+   4.3000000e+01   3.8425455e+00   3.4984074e+01
+   4.3000000e+01   4.3142231e+00   3.5036645e+01
+   4.3000000e+01   5.2460165e+00   3.5170777e+01
+   4.3000000e+01   6.6648926e+00   3.5382711e+01
+   4.3000000e+01   8.2569008e+00   3.5621149e+01
+   4.3000000e+01   9.2870413e+00   3.5722876e+01
+   4.3000000e+01   9.5328760e+00   3.5630785e+01
+   4.3000000e+01   9.9026364e+00   3.5537066e+01
+   4.3000000e+01   1.0298083e+01   3.5480702e+01
+   4.3000000e+01   1.0770826e+01   3.5489091e+01
+   4.3000000e+01   1.1255678e+01   3.5531455e+01
+   4.3000000e+01   1.1602421e+01   3.5566000e+01
+   4.3000000e+01   1.1914041e+01   3.5601397e+01
+   4.3000000e+01   1.2147298e+01   3.5626901e+01
+   4.3000000e+01   1.2343058e+01   3.5648785e+01
+   4.3000000e+01   1.2494471e+01   3.5664835e+01
+   4.3000000e+01   1.2597438e+01   3.5676273e+01
+   4.3000000e+01   1.2688149e+01   3.5686380e+01
+   4.3000000e+01   1.2785116e+01   3.5697636e+01
+   4.3000000e+01   1.2848306e+01   3.5705074e+01
+   4.3000000e+01   1.2914322e+01   3.5711992e+01
+   4.3000000e+01   1.3001628e+01   3.5721826e+01
+   4.3000000e+01   1.3051289e+01   3.5725025e+01
+   4.3000000e+01   1.3089132e+01   3.5727711e+01
+   4.3000000e+01   1.3142140e+01   3.5735612e+01
+   4.3000000e+01   1.3179091e+01   3.5738893e+01
+   4.3000000e+01   1.3225289e+01   3.5744364e+01
+   4.3000000e+01   1.3285380e+01   3.5750000e+01
+   4.3000000e+01   1.3351380e+01   3.5760339e+01
+   4.3000000e+01   1.3413512e+01   3.5768570e+01
+   4.3000000e+01   1.3485198e+01   3.5776364e+01
+   4.3000000e+01   1.3539636e+01   3.5778083e+01
+   4.3000000e+01   1.3586083e+01   3.5781620e+01
+   4.3000000e+01   1.3649860e+01   3.5788785e+01
+   4.3000000e+01   1.3724041e+01   3.5795174e+01
+   4.3000000e+01   1.3795636e+01   3.5799347e+01
+   4.3000000e+01   1.3896884e+01   3.5810504e+01
+   4.3000000e+01   1.4007802e+01   3.5819636e+01
+   4.3000000e+01   1.4119207e+01   3.5823149e+01
+   4.3000000e+01   1.4275008e+01   3.5831579e+01
+   4.3000000e+01   1.4495909e+01   3.5833537e+01
+   4.3000000e+01   1.4732562e+01   3.5837397e+01
+   4.3000000e+01   1.4997446e+01   3.5833347e+01
+   4.3000000e+01   1.5706603e+01   3.5837281e+01
+   4.3000000e+01   1.6613545e+01   3.5844116e+01
+   4.3000000e+01   1.7261298e+01   3.5850289e+01
+   4.3000000e+01   1.8017446e+01   3.5853281e+01
+   4.3000000e+01   1.8879421e+01   3.5867727e+01
+   4.3000000e+01   1.9534612e+01   3.5871678e+01
+   4.3000000e+01   1.9774289e+01   3.5868719e+01
+   4.3000000e+01   1.9845992e+01   3.5868760e+01
+   4.3000000e+01   1.9857645e+01   3.5869248e+01
+   4.3000000e+01   1.9858744e+01   3.5869810e+01
+   4.3000000e+01   1.9851843e+01   3.5868702e+01
+   4.3000000e+01   1.9795959e+01   3.5873008e+01
+   4.3050000e+01   2.5103554e+00   3.4896107e+01
+   4.3050000e+01   2.5061901e+00   3.4902207e+01
+   4.3050000e+01   2.5121488e+00   3.4907306e+01
+   4.3050000e+01   2.5413554e+00   3.4914521e+01
+   4.3050000e+01   2.5794959e+00   3.4919405e+01
+   4.3050000e+01   2.6451405e+00   3.4928736e+01
+   4.3050000e+01   2.7416281e+00   3.4940488e+01
+   4.3050000e+01   2.8990331e+00   3.4952802e+01
+   4.3050000e+01   3.0880496e+00   3.4961322e+01
+   4.3050000e+01   3.3536529e+00   3.4973281e+01
+   4.3050000e+01   3.5827603e+00   3.4972736e+01
+   4.3050000e+01   3.8425455e+00   3.4984074e+01
+   4.3050000e+01   4.3142231e+00   3.5036645e+01
+   4.3050000e+01   5.2460165e+00   3.5170777e+01
+   4.3050000e+01   6.6648926e+00   3.5382711e+01
+   4.3050000e+01   8.2569008e+00   3.5621149e+01
+   4.3050000e+01   9.2870413e+00   3.5722876e+01
+   4.3050000e+01   9.5328760e+00   3.5630785e+01
+   4.3050000e+01   9.9026364e+00   3.5537066e+01
+   4.3050000e+01   1.0298083e+01   3.5480702e+01
+   4.3050000e+01   1.0770826e+01   3.5489091e+01
+   4.3050000e+01   1.1255678e+01   3.5531455e+01
+   4.3050000e+01   1.1602421e+01   3.5566000e+01
+   4.3050000e+01   1.1914041e+01   3.5601397e+01
+   4.3050000e+01   1.2147298e+01   3.5626901e+01
+   4.3050000e+01   1.2343058e+01   3.5648785e+01
+   4.3050000e+01   1.2494471e+01   3.5664835e+01
+   4.3050000e+01   1.2597438e+01   3.5676273e+01
+   4.3050000e+01   1.2688149e+01   3.5686380e+01
+   4.3050000e+01   1.2785116e+01   3.5697636e+01
+   4.3050000e+01   1.2848306e+01   3.5705074e+01
+   4.3050000e+01   1.2914322e+01   3.5711992e+01
+   4.3050000e+01   1.3001628e+01   3.5721826e+01
+   4.3050000e+01   1.3051289e+01   3.5725025e+01
+   4.3050000e+01   1.3089132e+01   3.5727711e+01
+   4.3050000e+01   1.3142140e+01   3.5735612e+01
+   4.3050000e+01   1.3179091e+01   3.5738893e+01
+   4.3050000e+01   1.3225289e+01   3.5744364e+01
+   4.3050000e+01   1.3285380e+01   3.5750000e+01
+   4.3050000e+01   1.3351380e+01   3.5760339e+01
+   4.3050000e+01   1.3413512e+01   3.5768570e+01
+   4.3050000e+01   1.3485198e+01   3.5776364e+01
+   4.3050000e+01   1.3539636e+01   3.5778083e+01
+   4.3050000e+01   1.3586083e+01   3.5781620e+01
+   4.3050000e+01   1.3649860e+01   3.5788785e+01
+   4.3050000e+01   1.3724041e+01   3.5795174e+01
+   4.3050000e+01   1.3795636e+01   3.5799347e+01
+   4.3050000e+01   1.3896884e+01   3.5810504e+01
+   4.3050000e+01   1.4007802e+01   3.5819636e+01
+   4.3050000e+01   1.4119207e+01   3.5823149e+01
+   4.3050000e+01   1.4275008e+01   3.5831579e+01
+   4.3050000e+01   1.4495909e+01   3.5833537e+01
+   4.3050000e+01   1.4732562e+01   3.5837397e+01
+   4.3050000e+01   1.4997446e+01   3.5833347e+01
+   4.3050000e+01   1.5706603e+01   3.5837281e+01
+   4.3050000e+01   1.6613545e+01   3.5844116e+01
+   4.3050000e+01   1.7261298e+01   3.5850289e+01
+   4.3050000e+01   1.8017446e+01   3.5853281e+01
+   4.3050000e+01   1.8879421e+01   3.5867727e+01
+   4.3050000e+01   1.9534612e+01   3.5871678e+01
+   4.3050000e+01   1.9774289e+01   3.5868719e+01
+   4.3050000e+01   1.9845992e+01   3.5868760e+01
+   4.3050000e+01   1.9857645e+01   3.5869248e+01
+   4.3050000e+01   1.9858744e+01   3.5869810e+01
+   4.3050000e+01   1.9851843e+01   3.5868702e+01
+   4.3050000e+01   1.9795959e+01   3.5873008e+01
+   4.3100000e+01   2.5103554e+00   3.4896107e+01
+   4.3100000e+01   2.5061901e+00   3.4902207e+01
+   4.3100000e+01   2.5121488e+00   3.4907306e+01
+   4.3100000e+01   2.5413554e+00   3.4914521e+01
+   4.3100000e+01   2.5794959e+00   3.4919405e+01
+   4.3100000e+01   2.6451405e+00   3.4928736e+01
+   4.3100000e+01   2.7416281e+00   3.4940488e+01
+   4.3100000e+01   2.8990331e+00   3.4952802e+01
+   4.3100000e+01   3.0880496e+00   3.4961322e+01
+   4.3100000e+01   3.3536529e+00   3.4973281e+01
+   4.3100000e+01   3.5827603e+00   3.4972736e+01
+   4.3100000e+01   3.8425455e+00   3.4984074e+01
+   4.3100000e+01   4.3142231e+00   3.5036645e+01
+   4.3100000e+01   5.2460165e+00   3.5170777e+01
+   4.3100000e+01   6.6648926e+00   3.5382711e+01
+   4.3100000e+01   8.2569008e+00   3.5621149e+01
+   4.3100000e+01   9.2870413e+00   3.5722876e+01
+   4.3100000e+01   9.5328760e+00   3.5630785e+01
+   4.3100000e+01   9.9026364e+00   3.5537066e+01
+   4.3100000e+01   1.0298083e+01   3.5480702e+01
+   4.3100000e+01   1.0770826e+01   3.5489091e+01
+   4.3100000e+01   1.1255678e+01   3.5531455e+01
+   4.3100000e+01   1.1602421e+01   3.5566000e+01
+   4.3100000e+01   1.1914041e+01   3.5601397e+01
+   4.3100000e+01   1.2147298e+01   3.5626901e+01
+   4.3100000e+01   1.2343058e+01   3.5648785e+01
+   4.3100000e+01   1.2494471e+01   3.5664835e+01
+   4.3100000e+01   1.2597438e+01   3.5676273e+01
+   4.3100000e+01   1.2688149e+01   3.5686380e+01
+   4.3100000e+01   1.2785116e+01   3.5697636e+01
+   4.3100000e+01   1.2848306e+01   3.5705074e+01
+   4.3100000e+01   1.2914322e+01   3.5711992e+01
+   4.3100000e+01   1.3001628e+01   3.5721826e+01
+   4.3100000e+01   1.3051289e+01   3.5725025e+01
+   4.3100000e+01   1.3089132e+01   3.5727711e+01
+   4.3100000e+01   1.3142140e+01   3.5735612e+01
+   4.3100000e+01   1.3179091e+01   3.5738893e+01
+   4.3100000e+01   1.3225289e+01   3.5744364e+01
+   4.3100000e+01   1.3285380e+01   3.5750000e+01
+   4.3100000e+01   1.3351380e+01   3.5760339e+01
+   4.3100000e+01   1.3413512e+01   3.5768570e+01
+   4.3100000e+01   1.3485198e+01   3.5776364e+01
+   4.3100000e+01   1.3539636e+01   3.5778083e+01
+   4.3100000e+01   1.3586083e+01   3.5781620e+01
+   4.3100000e+01   1.3649860e+01   3.5788785e+01
+   4.3100000e+01   1.3724041e+01   3.5795174e+01
+   4.3100000e+01   1.3795636e+01   3.5799347e+01
+   4.3100000e+01   1.3896884e+01   3.5810504e+01
+   4.3100000e+01   1.4007802e+01   3.5819636e+01
+   4.3100000e+01   1.4119207e+01   3.5823149e+01
+   4.3100000e+01   1.4275008e+01   3.5831579e+01
+   4.3100000e+01   1.4495909e+01   3.5833537e+01
+   4.3100000e+01   1.4732562e+01   3.5837397e+01
+   4.3100000e+01   1.4997446e+01   3.5833347e+01
+   4.3100000e+01   1.5706603e+01   3.5837281e+01
+   4.3100000e+01   1.6613545e+01   3.5844116e+01
+   4.3100000e+01   1.7261298e+01   3.5850289e+01
+   4.3100000e+01   1.8017446e+01   3.5853281e+01
+   4.3100000e+01   1.8879421e+01   3.5867727e+01
+   4.3100000e+01   1.9534612e+01   3.5871678e+01
+   4.3100000e+01   1.9774289e+01   3.5868719e+01
+   4.3100000e+01   1.9845992e+01   3.5868760e+01
+   4.3100000e+01   1.9857645e+01   3.5869248e+01
+   4.3100000e+01   1.9858744e+01   3.5869810e+01
+   4.3100000e+01   1.9851843e+01   3.5868702e+01
+   4.3100000e+01   1.9795959e+01   3.5873008e+01
+   4.3150000e+01   2.5103554e+00   3.4896107e+01
+   4.3150000e+01   2.5061901e+00   3.4902207e+01
+   4.3150000e+01   2.5121488e+00   3.4907306e+01
+   4.3150000e+01   2.5413554e+00   3.4914521e+01
+   4.3150000e+01   2.5794959e+00   3.4919405e+01
+   4.3150000e+01   2.6451405e+00   3.4928736e+01
+   4.3150000e+01   2.7416281e+00   3.4940488e+01
+   4.3150000e+01   2.8990331e+00   3.4952802e+01
+   4.3150000e+01   3.0880496e+00   3.4961322e+01
+   4.3150000e+01   3.3536529e+00   3.4973281e+01
+   4.3150000e+01   3.5827603e+00   3.4972736e+01
+   4.3150000e+01   3.8425455e+00   3.4984074e+01
+   4.3150000e+01   4.3142231e+00   3.5036645e+01
+   4.3150000e+01   5.2460165e+00   3.5170777e+01
+   4.3150000e+01   6.6648926e+00   3.5382711e+01
+   4.3150000e+01   8.2569008e+00   3.5621149e+01
+   4.3150000e+01   9.2870413e+00   3.5722876e+01
+   4.3150000e+01   9.5328760e+00   3.5630785e+01
+   4.3150000e+01   9.9026364e+00   3.5537066e+01
+   4.3150000e+01   1.0298083e+01   3.5480702e+01
+   4.3150000e+01   1.0770826e+01   3.5489091e+01
+   4.3150000e+01   1.1255678e+01   3.5531455e+01
+   4.3150000e+01   1.1602421e+01   3.5566000e+01
+   4.3150000e+01   1.1914041e+01   3.5601397e+01
+   4.3150000e+01   1.2147298e+01   3.5626901e+01
+   4.3150000e+01   1.2343058e+01   3.5648785e+01
+   4.3150000e+01   1.2494471e+01   3.5664835e+01
+   4.3150000e+01   1.2597438e+01   3.5676273e+01
+   4.3150000e+01   1.2688149e+01   3.5686380e+01
+   4.3150000e+01   1.2785116e+01   3.5697636e+01
+   4.3150000e+01   1.2848306e+01   3.5705074e+01
+   4.3150000e+01   1.2914322e+01   3.5711992e+01
+   4.3150000e+01   1.3001628e+01   3.5721826e+01
+   4.3150000e+01   1.3051289e+01   3.5725025e+01
+   4.3150000e+01   1.3089132e+01   3.5727711e+01
+   4.3150000e+01   1.3142140e+01   3.5735612e+01
+   4.3150000e+01   1.3179091e+01   3.5738893e+01
+   4.3150000e+01   1.3225289e+01   3.5744364e+01
+   4.3150000e+01   1.3285380e+01   3.5750000e+01
+   4.3150000e+01   1.3351380e+01   3.5760339e+01
+   4.3150000e+01   1.3413512e+01   3.5768570e+01
+   4.3150000e+01   1.3485198e+01   3.5776364e+01
+   4.3150000e+01   1.3539636e+01   3.5778083e+01
+   4.3150000e+01   1.3586083e+01   3.5781620e+01
+   4.3150000e+01   1.3649860e+01   3.5788785e+01
+   4.3150000e+01   1.3724041e+01   3.5795174e+01
+   4.3150000e+01   1.3795636e+01   3.5799347e+01
+   4.3150000e+01   1.3896884e+01   3.5810504e+01
+   4.3150000e+01   1.4007802e+01   3.5819636e+01
+   4.3150000e+01   1.4119207e+01   3.5823149e+01
+   4.3150000e+01   1.4275008e+01   3.5831579e+01
+   4.3150000e+01   1.4495909e+01   3.5833537e+01
+   4.3150000e+01   1.4732562e+01   3.5837397e+01
+   4.3150000e+01   1.4997446e+01   3.5833347e+01
+   4.3150000e+01   1.5706603e+01   3.5837281e+01
+   4.3150000e+01   1.6613545e+01   3.5844116e+01
+   4.3150000e+01   1.7261298e+01   3.5850289e+01
+   4.3150000e+01   1.8017446e+01   3.5853281e+01
+   4.3150000e+01   1.8879421e+01   3.5867727e+01
+   4.3150000e+01   1.9534612e+01   3.5871678e+01
+   4.3150000e+01   1.9774289e+01   3.5868719e+01
+   4.3150000e+01   1.9845992e+01   3.5868760e+01
+   4.3150000e+01   1.9857645e+01   3.5869248e+01
+   4.3150000e+01   1.9858744e+01   3.5869810e+01
+   4.3150000e+01   1.9851843e+01   3.5868702e+01
+   4.3150000e+01   1.9795959e+01   3.5873008e+01
+   4.3200000e+01   2.5103554e+00   3.4896107e+01
+   4.3200000e+01   2.5061901e+00   3.4902207e+01
+   4.3200000e+01   2.5121488e+00   3.4907306e+01
+   4.3200000e+01   2.5413554e+00   3.4914521e+01
+   4.3200000e+01   2.5794959e+00   3.4919405e+01
+   4.3200000e+01   2.6451405e+00   3.4928736e+01
+   4.3200000e+01   2.7416281e+00   3.4940488e+01
+   4.3200000e+01   2.8990331e+00   3.4952802e+01
+   4.3200000e+01   3.0880496e+00   3.4961322e+01
+   4.3200000e+01   3.3536529e+00   3.4973281e+01
+   4.3200000e+01   3.5827603e+00   3.4972736e+01
+   4.3200000e+01   3.8425455e+00   3.4984074e+01
+   4.3200000e+01   4.3142231e+00   3.5036645e+01
+   4.3200000e+01   5.2460165e+00   3.5170777e+01
+   4.3200000e+01   6.6648926e+00   3.5382711e+01
+   4.3200000e+01   8.2569008e+00   3.5621149e+01
+   4.3200000e+01   9.2870413e+00   3.5722876e+01
+   4.3200000e+01   9.5328760e+00   3.5630785e+01
+   4.3200000e+01   9.9026364e+00   3.5537066e+01
+   4.3200000e+01   1.0298083e+01   3.5480702e+01
+   4.3200000e+01   1.0770826e+01   3.5489091e+01
+   4.3200000e+01   1.1255678e+01   3.5531455e+01
+   4.3200000e+01   1.1602421e+01   3.5566000e+01
+   4.3200000e+01   1.1914041e+01   3.5601397e+01
+   4.3200000e+01   1.2147298e+01   3.5626901e+01
+   4.3200000e+01   1.2343058e+01   3.5648785e+01
+   4.3200000e+01   1.2494471e+01   3.5664835e+01
+   4.3200000e+01   1.2597438e+01   3.5676273e+01
+   4.3200000e+01   1.2688149e+01   3.5686380e+01
+   4.3200000e+01   1.2785116e+01   3.5697636e+01
+   4.3200000e+01   1.2848306e+01   3.5705074e+01
+   4.3200000e+01   1.2914322e+01   3.5711992e+01
+   4.3200000e+01   1.3001628e+01   3.5721826e+01
+   4.3200000e+01   1.3051289e+01   3.5725025e+01
+   4.3200000e+01   1.3089132e+01   3.5727711e+01
+   4.3200000e+01   1.3142140e+01   3.5735612e+01
+   4.3200000e+01   1.3179091e+01   3.5738893e+01
+   4.3200000e+01   1.3225289e+01   3.5744364e+01
+   4.3200000e+01   1.3285380e+01   3.5750000e+01
+   4.3200000e+01   1.3351380e+01   3.5760339e+01
+   4.3200000e+01   1.3413512e+01   3.5768570e+01
+   4.3200000e+01   1.3485198e+01   3.5776364e+01
+   4.3200000e+01   1.3539636e+01   3.5778083e+01
+   4.3200000e+01   1.3586083e+01   3.5781620e+01
+   4.3200000e+01   1.3649860e+01   3.5788785e+01
+   4.3200000e+01   1.3724041e+01   3.5795174e+01
+   4.3200000e+01   1.3795636e+01   3.5799347e+01
+   4.3200000e+01   1.3896884e+01   3.5810504e+01
+   4.3200000e+01   1.4007802e+01   3.5819636e+01
+   4.3200000e+01   1.4119207e+01   3.5823149e+01
+   4.3200000e+01   1.4275008e+01   3.5831579e+01
+   4.3200000e+01   1.4495909e+01   3.5833537e+01
+   4.3200000e+01   1.4732562e+01   3.5837397e+01
+   4.3200000e+01   1.4997446e+01   3.5833347e+01
+   4.3200000e+01   1.5706603e+01   3.5837281e+01
+   4.3200000e+01   1.6613545e+01   3.5844116e+01
+   4.3200000e+01   1.7261298e+01   3.5850289e+01
+   4.3200000e+01   1.8017446e+01   3.5853281e+01
+   4.3200000e+01   1.8879421e+01   3.5867727e+01
+   4.3200000e+01   1.9534612e+01   3.5871678e+01
+   4.3200000e+01   1.9774289e+01   3.5868719e+01
+   4.3200000e+01   1.9845992e+01   3.5868760e+01
+   4.3200000e+01   1.9857645e+01   3.5869248e+01
+   4.3200000e+01   1.9858744e+01   3.5869810e+01
+   4.3200000e+01   1.9851843e+01   3.5868702e+01
+   4.3200000e+01   1.9795959e+01   3.5873008e+01
+   4.3250000e+01   2.5103554e+00   3.4896107e+01
+   4.3250000e+01   2.5061901e+00   3.4902207e+01
+   4.3250000e+01   2.5121488e+00   3.4907306e+01
+   4.3250000e+01   2.5413554e+00   3.4914521e+01
+   4.3250000e+01   2.5794959e+00   3.4919405e+01
+   4.3250000e+01   2.6451405e+00   3.4928736e+01
+   4.3250000e+01   2.7416281e+00   3.4940488e+01
+   4.3250000e+01   2.8990331e+00   3.4952802e+01
+   4.3250000e+01   3.0880496e+00   3.4961322e+01
+   4.3250000e+01   3.3536529e+00   3.4973281e+01
+   4.3250000e+01   3.5827603e+00   3.4972736e+01
+   4.3250000e+01   3.8425455e+00   3.4984074e+01
+   4.3250000e+01   4.3142231e+00   3.5036645e+01
+   4.3250000e+01   5.2460165e+00   3.5170777e+01
+   4.3250000e+01   6.6648926e+00   3.5382711e+01
+   4.3250000e+01   8.2569008e+00   3.5621149e+01
+   4.3250000e+01   9.2870413e+00   3.5722876e+01
+   4.3250000e+01   9.5328760e+00   3.5630785e+01
+   4.3250000e+01   9.9026364e+00   3.5537066e+01
+   4.3250000e+01   1.0298083e+01   3.5480702e+01
+   4.3250000e+01   1.0770826e+01   3.5489091e+01
+   4.3250000e+01   1.1255678e+01   3.5531455e+01
+   4.3250000e+01   1.1602421e+01   3.5566000e+01
+   4.3250000e+01   1.1914041e+01   3.5601397e+01
+   4.3250000e+01   1.2147298e+01   3.5626901e+01
+   4.3250000e+01   1.2343058e+01   3.5648785e+01
+   4.3250000e+01   1.2494471e+01   3.5664835e+01
+   4.3250000e+01   1.2597438e+01   3.5676273e+01
+   4.3250000e+01   1.2688149e+01   3.5686380e+01
+   4.3250000e+01   1.2785116e+01   3.5697636e+01
+   4.3250000e+01   1.2848306e+01   3.5705074e+01
+   4.3250000e+01   1.2914322e+01   3.5711992e+01
+   4.3250000e+01   1.3001628e+01   3.5721826e+01
+   4.3250000e+01   1.3051289e+01   3.5725025e+01
+   4.3250000e+01   1.3089132e+01   3.5727711e+01
+   4.3250000e+01   1.3142140e+01   3.5735612e+01
+   4.3250000e+01   1.3179091e+01   3.5738893e+01
+   4.3250000e+01   1.3225289e+01   3.5744364e+01
+   4.3250000e+01   1.3285380e+01   3.5750000e+01
+   4.3250000e+01   1.3351380e+01   3.5760339e+01
+   4.3250000e+01   1.3413512e+01   3.5768570e+01
+   4.3250000e+01   1.3485198e+01   3.5776364e+01
+   4.3250000e+01   1.3539636e+01   3.5778083e+01
+   4.3250000e+01   1.3586083e+01   3.5781620e+01
+   4.3250000e+01   1.3649860e+01   3.5788785e+01
+   4.3250000e+01   1.3724041e+01   3.5795174e+01
+   4.3250000e+01   1.3795636e+01   3.5799347e+01
+   4.3250000e+01   1.3896884e+01   3.5810504e+01
+   4.3250000e+01   1.4007802e+01   3.5819636e+01
+   4.3250000e+01   1.4119207e+01   3.5823149e+01
+   4.3250000e+01   1.4275008e+01   3.5831579e+01
+   4.3250000e+01   1.4495909e+01   3.5833537e+01
+   4.3250000e+01   1.4732562e+01   3.5837397e+01
+   4.3250000e+01   1.4997446e+01   3.5833347e+01
+   4.3250000e+01   1.5706603e+01   3.5837281e+01
+   4.3250000e+01   1.6613545e+01   3.5844116e+01
+   4.3250000e+01   1.7261298e+01   3.5850289e+01
+   4.3250000e+01   1.8017446e+01   3.5853281e+01
+   4.3250000e+01   1.8879421e+01   3.5867727e+01
+   4.3250000e+01   1.9534612e+01   3.5871678e+01
+   4.3250000e+01   1.9774289e+01   3.5868719e+01
+   4.3250000e+01   1.9845992e+01   3.5868760e+01
+   4.3250000e+01   1.9857645e+01   3.5869248e+01
+   4.3250000e+01   1.9858744e+01   3.5869810e+01
+   4.3250000e+01   1.9851843e+01   3.5868702e+01
+   4.3250000e+01   1.9795959e+01   3.5873008e+01
+   4.3300000e+01   2.5103554e+00   3.4896107e+01
+   4.3300000e+01   2.5061901e+00   3.4902207e+01
+   4.3300000e+01   2.5121488e+00   3.4907306e+01
+   4.3300000e+01   2.5413554e+00   3.4914521e+01
+   4.3300000e+01   2.5794959e+00   3.4919405e+01
+   4.3300000e+01   2.6451405e+00   3.4928736e+01
+   4.3300000e+01   2.7416281e+00   3.4940488e+01
+   4.3300000e+01   2.8990331e+00   3.4952802e+01
+   4.3300000e+01   3.0880496e+00   3.4961322e+01
+   4.3300000e+01   3.3536529e+00   3.4973281e+01
+   4.3300000e+01   3.5827603e+00   3.4972736e+01
+   4.3300000e+01   3.8425455e+00   3.4984074e+01
+   4.3300000e+01   4.3142231e+00   3.5036645e+01
+   4.3300000e+01   5.2460165e+00   3.5170777e+01
+   4.3300000e+01   6.6648926e+00   3.5382711e+01
+   4.3300000e+01   8.2569008e+00   3.5621149e+01
+   4.3300000e+01   9.2870413e+00   3.5722876e+01
+   4.3300000e+01   9.5328760e+00   3.5630785e+01
+   4.3300000e+01   9.9026364e+00   3.5537066e+01
+   4.3300000e+01   1.0298083e+01   3.5480702e+01
+   4.3300000e+01   1.0770826e+01   3.5489091e+01
+   4.3300000e+01   1.1255678e+01   3.5531455e+01
+   4.3300000e+01   1.1602421e+01   3.5566000e+01
+   4.3300000e+01   1.1914041e+01   3.5601397e+01
+   4.3300000e+01   1.2147298e+01   3.5626901e+01
+   4.3300000e+01   1.2343058e+01   3.5648785e+01
+   4.3300000e+01   1.2494471e+01   3.5664835e+01
+   4.3300000e+01   1.2597438e+01   3.5676273e+01
+   4.3300000e+01   1.2688149e+01   3.5686380e+01
+   4.3300000e+01   1.2785116e+01   3.5697636e+01
+   4.3300000e+01   1.2848306e+01   3.5705074e+01
+   4.3300000e+01   1.2914322e+01   3.5711992e+01
+   4.3300000e+01   1.3001628e+01   3.5721826e+01
+   4.3300000e+01   1.3051289e+01   3.5725025e+01
+   4.3300000e+01   1.3089132e+01   3.5727711e+01
+   4.3300000e+01   1.3142140e+01   3.5735612e+01
+   4.3300000e+01   1.3179091e+01   3.5738893e+01
+   4.3300000e+01   1.3225289e+01   3.5744364e+01
+   4.3300000e+01   1.3285380e+01   3.5750000e+01
+   4.3300000e+01   1.3351380e+01   3.5760339e+01
+   4.3300000e+01   1.3413512e+01   3.5768570e+01
+   4.3300000e+01   1.3485198e+01   3.5776364e+01
+   4.3300000e+01   1.3539636e+01   3.5778083e+01
+   4.3300000e+01   1.3586083e+01   3.5781620e+01
+   4.3300000e+01   1.3649860e+01   3.5788785e+01
+   4.3300000e+01   1.3724041e+01   3.5795174e+01
+   4.3300000e+01   1.3795636e+01   3.5799347e+01
+   4.3300000e+01   1.3896884e+01   3.5810504e+01
+   4.3300000e+01   1.4007802e+01   3.5819636e+01
+   4.3300000e+01   1.4119207e+01   3.5823149e+01
+   4.3300000e+01   1.4275008e+01   3.5831579e+01
+   4.3300000e+01   1.4495909e+01   3.5833537e+01
+   4.3300000e+01   1.4732562e+01   3.5837397e+01
+   4.3300000e+01   1.4997446e+01   3.5833347e+01
+   4.3300000e+01   1.5706603e+01   3.5837281e+01
+   4.3300000e+01   1.6613545e+01   3.5844116e+01
+   4.3300000e+01   1.7261298e+01   3.5850289e+01
+   4.3300000e+01   1.8017446e+01   3.5853281e+01
+   4.3300000e+01   1.8879421e+01   3.5867727e+01
+   4.3300000e+01   1.9534612e+01   3.5871678e+01
+   4.3300000e+01   1.9774289e+01   3.5868719e+01
+   4.3300000e+01   1.9845992e+01   3.5868760e+01
+   4.3300000e+01   1.9857645e+01   3.5869248e+01
+   4.3300000e+01   1.9858744e+01   3.5869810e+01
+   4.3300000e+01   1.9851843e+01   3.5868702e+01
+   4.3300000e+01   1.9795959e+01   3.5873008e+01
+   4.3350000e+01   2.5103554e+00   3.4896107e+01
+   4.3350000e+01   2.5061901e+00   3.4902207e+01
+   4.3350000e+01   2.5121488e+00   3.4907306e+01
+   4.3350000e+01   2.5413554e+00   3.4914521e+01
+   4.3350000e+01   2.5794959e+00   3.4919405e+01
+   4.3350000e+01   2.6451405e+00   3.4928736e+01
+   4.3350000e+01   2.7416281e+00   3.4940488e+01
+   4.3350000e+01   2.8990331e+00   3.4952802e+01
+   4.3350000e+01   3.0880496e+00   3.4961322e+01
+   4.3350000e+01   3.3536529e+00   3.4973281e+01
+   4.3350000e+01   3.5827603e+00   3.4972736e+01
+   4.3350000e+01   3.8425455e+00   3.4984074e+01
+   4.3350000e+01   4.3142231e+00   3.5036645e+01
+   4.3350000e+01   5.2460165e+00   3.5170777e+01
+   4.3350000e+01   6.6648926e+00   3.5382711e+01
+   4.3350000e+01   8.2569008e+00   3.5621149e+01
+   4.3350000e+01   9.2870413e+00   3.5722876e+01
+   4.3350000e+01   9.5328760e+00   3.5630785e+01
+   4.3350000e+01   9.9026364e+00   3.5537066e+01
+   4.3350000e+01   1.0298083e+01   3.5480702e+01
+   4.3350000e+01   1.0770826e+01   3.5489091e+01
+   4.3350000e+01   1.1255678e+01   3.5531455e+01
+   4.3350000e+01   1.1602421e+01   3.5566000e+01
+   4.3350000e+01   1.1914041e+01   3.5601397e+01
+   4.3350000e+01   1.2147298e+01   3.5626901e+01
+   4.3350000e+01   1.2343058e+01   3.5648785e+01
+   4.3350000e+01   1.2494471e+01   3.5664835e+01
+   4.3350000e+01   1.2597438e+01   3.5676273e+01
+   4.3350000e+01   1.2688149e+01   3.5686380e+01
+   4.3350000e+01   1.2785116e+01   3.5697636e+01
+   4.3350000e+01   1.2848306e+01   3.5705074e+01
+   4.3350000e+01   1.2914322e+01   3.5711992e+01
+   4.3350000e+01   1.3001628e+01   3.5721826e+01
+   4.3350000e+01   1.3051289e+01   3.5725025e+01
+   4.3350000e+01   1.3089132e+01   3.5727711e+01
+   4.3350000e+01   1.3142140e+01   3.5735612e+01
+   4.3350000e+01   1.3179091e+01   3.5738893e+01
+   4.3350000e+01   1.3225289e+01   3.5744364e+01
+   4.3350000e+01   1.3285380e+01   3.5750000e+01
+   4.3350000e+01   1.3351380e+01   3.5760339e+01
+   4.3350000e+01   1.3413512e+01   3.5768570e+01
+   4.3350000e+01   1.3485198e+01   3.5776364e+01
+   4.3350000e+01   1.3539636e+01   3.5778083e+01
+   4.3350000e+01   1.3586083e+01   3.5781620e+01
+   4.3350000e+01   1.3649860e+01   3.5788785e+01
+   4.3350000e+01   1.3724041e+01   3.5795174e+01
+   4.3350000e+01   1.3795636e+01   3.5799347e+01
+   4.3350000e+01   1.3896884e+01   3.5810504e+01
+   4.3350000e+01   1.4007802e+01   3.5819636e+01
+   4.3350000e+01   1.4119207e+01   3.5823149e+01
+   4.3350000e+01   1.4275008e+01   3.5831579e+01
+   4.3350000e+01   1.4495909e+01   3.5833537e+01
+   4.3350000e+01   1.4732562e+01   3.5837397e+01
+   4.3350000e+01   1.4997446e+01   3.5833347e+01
+   4.3350000e+01   1.5706603e+01   3.5837281e+01
+   4.3350000e+01   1.6613545e+01   3.5844116e+01
+   4.3350000e+01   1.7261298e+01   3.5850289e+01
+   4.3350000e+01   1.8017446e+01   3.5853281e+01
+   4.3350000e+01   1.8879421e+01   3.5867727e+01
+   4.3350000e+01   1.9534612e+01   3.5871678e+01
+   4.3350000e+01   1.9774289e+01   3.5868719e+01
+   4.3350000e+01   1.9845992e+01   3.5868760e+01
+   4.3350000e+01   1.9857645e+01   3.5869248e+01
+   4.3350000e+01   1.9858744e+01   3.5869810e+01
+   4.3350000e+01   1.9851843e+01   3.5868702e+01
+   4.3350000e+01   1.9795959e+01   3.5873008e+01
+   4.3400000e+01   2.5103554e+00   3.4896107e+01
+   4.3400000e+01   2.5061901e+00   3.4902207e+01
+   4.3400000e+01   2.5121488e+00   3.4907306e+01
+   4.3400000e+01   2.5413554e+00   3.4914521e+01
+   4.3400000e+01   2.5794959e+00   3.4919405e+01
+   4.3400000e+01   2.6451405e+00   3.4928736e+01
+   4.3400000e+01   2.7416281e+00   3.4940488e+01
+   4.3400000e+01   2.8990331e+00   3.4952802e+01
+   4.3400000e+01   3.0880496e+00   3.4961322e+01
+   4.3400000e+01   3.3536529e+00   3.4973281e+01
+   4.3400000e+01   3.5827603e+00   3.4972736e+01
+   4.3400000e+01   3.8425455e+00   3.4984074e+01
+   4.3400000e+01   4.3142231e+00   3.5036645e+01
+   4.3400000e+01   5.2460165e+00   3.5170777e+01
+   4.3400000e+01   6.6648926e+00   3.5382711e+01
+   4.3400000e+01   8.2569008e+00   3.5621149e+01
+   4.3400000e+01   9.2870413e+00   3.5722876e+01
+   4.3400000e+01   9.5328760e+00   3.5630785e+01
+   4.3400000e+01   9.9026364e+00   3.5537066e+01
+   4.3400000e+01   1.0298083e+01   3.5480702e+01
+   4.3400000e+01   1.0770826e+01   3.5489091e+01
+   4.3400000e+01   1.1255678e+01   3.5531455e+01
+   4.3400000e+01   1.1602421e+01   3.5566000e+01
+   4.3400000e+01   1.1914041e+01   3.5601397e+01
+   4.3400000e+01   1.2147298e+01   3.5626901e+01
+   4.3400000e+01   1.2343058e+01   3.5648785e+01
+   4.3400000e+01   1.2494471e+01   3.5664835e+01
+   4.3400000e+01   1.2597438e+01   3.5676273e+01
+   4.3400000e+01   1.2688149e+01   3.5686380e+01
+   4.3400000e+01   1.2785116e+01   3.5697636e+01
+   4.3400000e+01   1.2848306e+01   3.5705074e+01
+   4.3400000e+01   1.2914322e+01   3.5711992e+01
+   4.3400000e+01   1.3001628e+01   3.5721826e+01
+   4.3400000e+01   1.3051289e+01   3.5725025e+01
+   4.3400000e+01   1.3089132e+01   3.5727711e+01
+   4.3400000e+01   1.3142140e+01   3.5735612e+01
+   4.3400000e+01   1.3179091e+01   3.5738893e+01
+   4.3400000e+01   1.3225289e+01   3.5744364e+01
+   4.3400000e+01   1.3285380e+01   3.5750000e+01
+   4.3400000e+01   1.3351380e+01   3.5760339e+01
+   4.3400000e+01   1.3413512e+01   3.5768570e+01
+   4.3400000e+01   1.3485198e+01   3.5776364e+01
+   4.3400000e+01   1.3539636e+01   3.5778083e+01
+   4.3400000e+01   1.3586083e+01   3.5781620e+01
+   4.3400000e+01   1.3649860e+01   3.5788785e+01
+   4.3400000e+01   1.3724041e+01   3.5795174e+01
+   4.3400000e+01   1.3795636e+01   3.5799347e+01
+   4.3400000e+01   1.3896884e+01   3.5810504e+01
+   4.3400000e+01   1.4007802e+01   3.5819636e+01
+   4.3400000e+01   1.4119207e+01   3.5823149e+01
+   4.3400000e+01   1.4275008e+01   3.5831579e+01
+   4.3400000e+01   1.4495909e+01   3.5833537e+01
+   4.3400000e+01   1.4732562e+01   3.5837397e+01
+   4.3400000e+01   1.4997446e+01   3.5833347e+01
+   4.3400000e+01   1.5706603e+01   3.5837281e+01
+   4.3400000e+01   1.6613545e+01   3.5844116e+01
+   4.3400000e+01   1.7261298e+01   3.5850289e+01
+   4.3400000e+01   1.8017446e+01   3.5853281e+01
+   4.3400000e+01   1.8879421e+01   3.5867727e+01
+   4.3400000e+01   1.9534612e+01   3.5871678e+01
+   4.3400000e+01   1.9774289e+01   3.5868719e+01
+   4.3400000e+01   1.9845992e+01   3.5868760e+01
+   4.3400000e+01   1.9857645e+01   3.5869248e+01
+   4.3400000e+01   1.9858744e+01   3.5869810e+01
+   4.3400000e+01   1.9851843e+01   3.5868702e+01
+   4.3400000e+01   1.9795959e+01   3.5873008e+01
+   4.3450000e+01   2.5103554e+00   3.4896107e+01
+   4.3450000e+01   2.5061901e+00   3.4902207e+01
+   4.3450000e+01   2.5121488e+00   3.4907306e+01
+   4.3450000e+01   2.5413554e+00   3.4914521e+01
+   4.3450000e+01   2.5794959e+00   3.4919405e+01
+   4.3450000e+01   2.6451405e+00   3.4928736e+01
+   4.3450000e+01   2.7416281e+00   3.4940488e+01
+   4.3450000e+01   2.8990331e+00   3.4952802e+01
+   4.3450000e+01   3.0880496e+00   3.4961322e+01
+   4.3450000e+01   3.3536529e+00   3.4973281e+01
+   4.3450000e+01   3.5827603e+00   3.4972736e+01
+   4.3450000e+01   3.8425455e+00   3.4984074e+01
+   4.3450000e+01   4.3142231e+00   3.5036645e+01
+   4.3450000e+01   5.2460165e+00   3.5170777e+01
+   4.3450000e+01   6.6648926e+00   3.5382711e+01
+   4.3450000e+01   8.2569008e+00   3.5621149e+01
+   4.3450000e+01   9.2870413e+00   3.5722876e+01
+   4.3450000e+01   9.5328760e+00   3.5630785e+01
+   4.3450000e+01   9.9026364e+00   3.5537066e+01
+   4.3450000e+01   1.0298083e+01   3.5480702e+01
+   4.3450000e+01   1.0770826e+01   3.5489091e+01
+   4.3450000e+01   1.1255678e+01   3.5531455e+01
+   4.3450000e+01   1.1602421e+01   3.5566000e+01
+   4.3450000e+01   1.1914041e+01   3.5601397e+01
+   4.3450000e+01   1.2147298e+01   3.5626901e+01
+   4.3450000e+01   1.2343058e+01   3.5648785e+01
+   4.3450000e+01   1.2494471e+01   3.5664835e+01
+   4.3450000e+01   1.2597438e+01   3.5676273e+01
+   4.3450000e+01   1.2688149e+01   3.5686380e+01
+   4.3450000e+01   1.2785116e+01   3.5697636e+01
+   4.3450000e+01   1.2848306e+01   3.5705074e+01
+   4.3450000e+01   1.2914322e+01   3.5711992e+01
+   4.3450000e+01   1.3001628e+01   3.5721826e+01
+   4.3450000e+01   1.3051289e+01   3.5725025e+01
+   4.3450000e+01   1.3089132e+01   3.5727711e+01
+   4.3450000e+01   1.3142140e+01   3.5735612e+01
+   4.3450000e+01   1.3179091e+01   3.5738893e+01
+   4.3450000e+01   1.3225289e+01   3.5744364e+01
+   4.3450000e+01   1.3285380e+01   3.5750000e+01
+   4.3450000e+01   1.3351380e+01   3.5760339e+01
+   4.3450000e+01   1.3413512e+01   3.5768570e+01
+   4.3450000e+01   1.3485198e+01   3.5776364e+01
+   4.3450000e+01   1.3539636e+01   3.5778083e+01
+   4.3450000e+01   1.3586083e+01   3.5781620e+01
+   4.3450000e+01   1.3649860e+01   3.5788785e+01
+   4.3450000e+01   1.3724041e+01   3.5795174e+01
+   4.3450000e+01   1.3795636e+01   3.5799347e+01
+   4.3450000e+01   1.3896884e+01   3.5810504e+01
+   4.3450000e+01   1.4007802e+01   3.5819636e+01
+   4.3450000e+01   1.4119207e+01   3.5823149e+01
+   4.3450000e+01   1.4275008e+01   3.5831579e+01
+   4.3450000e+01   1.4495909e+01   3.5833537e+01
+   4.3450000e+01   1.4732562e+01   3.5837397e+01
+   4.3450000e+01   1.4997446e+01   3.5833347e+01
+   4.3450000e+01   1.5706603e+01   3.5837281e+01
+   4.3450000e+01   1.6613545e+01   3.5844116e+01
+   4.3450000e+01   1.7261298e+01   3.5850289e+01
+   4.3450000e+01   1.8017446e+01   3.5853281e+01
+   4.3450000e+01   1.8879421e+01   3.5867727e+01
+   4.3450000e+01   1.9534612e+01   3.5871678e+01
+   4.3450000e+01   1.9774289e+01   3.5868719e+01
+   4.3450000e+01   1.9845992e+01   3.5868760e+01
+   4.3450000e+01   1.9857645e+01   3.5869248e+01
+   4.3450000e+01   1.9858744e+01   3.5869810e+01
+   4.3450000e+01   1.9851843e+01   3.5868702e+01
+   4.3450000e+01   1.9795959e+01   3.5873008e+01
+   4.3500000e+01   2.5103554e+00   3.4896107e+01
+   4.3500000e+01   2.5061901e+00   3.4902207e+01
+   4.3500000e+01   2.5121488e+00   3.4907306e+01
+   4.3500000e+01   2.5413554e+00   3.4914521e+01
+   4.3500000e+01   2.5794959e+00   3.4919405e+01
+   4.3500000e+01   2.6451405e+00   3.4928736e+01
+   4.3500000e+01   2.7416281e+00   3.4940488e+01
+   4.3500000e+01   2.8990331e+00   3.4952802e+01
+   4.3500000e+01   3.0880496e+00   3.4961322e+01
+   4.3500000e+01   3.3536529e+00   3.4973281e+01
+   4.3500000e+01   3.5827603e+00   3.4972736e+01
+   4.3500000e+01   3.8425455e+00   3.4984074e+01
+   4.3500000e+01   4.3142231e+00   3.5036645e+01
+   4.3500000e+01   5.2460165e+00   3.5170777e+01
+   4.3500000e+01   6.6648926e+00   3.5382711e+01
+   4.3500000e+01   8.2569008e+00   3.5621149e+01
+   4.3500000e+01   9.2870413e+00   3.5722876e+01
+   4.3500000e+01   9.5328760e+00   3.5630785e+01
+   4.3500000e+01   9.9026364e+00   3.5537066e+01
+   4.3500000e+01   1.0298083e+01   3.5480702e+01
+   4.3500000e+01   1.0770826e+01   3.5489091e+01
+   4.3500000e+01   1.1255678e+01   3.5531455e+01
+   4.3500000e+01   1.1602421e+01   3.5566000e+01
+   4.3500000e+01   1.1914041e+01   3.5601397e+01
+   4.3500000e+01   1.2147298e+01   3.5626901e+01
+   4.3500000e+01   1.2343058e+01   3.5648785e+01
+   4.3500000e+01   1.2494471e+01   3.5664835e+01
+   4.3500000e+01   1.2597438e+01   3.5676273e+01
+   4.3500000e+01   1.2688149e+01   3.5686380e+01
+   4.3500000e+01   1.2785116e+01   3.5697636e+01
+   4.3500000e+01   1.2848306e+01   3.5705074e+01
+   4.3500000e+01   1.2914322e+01   3.5711992e+01
+   4.3500000e+01   1.3001628e+01   3.5721826e+01
+   4.3500000e+01   1.3051289e+01   3.5725025e+01
+   4.3500000e+01   1.3089132e+01   3.5727711e+01
+   4.3500000e+01   1.3142140e+01   3.5735612e+01
+   4.3500000e+01   1.3179091e+01   3.5738893e+01
+   4.3500000e+01   1.3225289e+01   3.5744364e+01
+   4.3500000e+01   1.3285380e+01   3.5750000e+01
+   4.3500000e+01   1.3351380e+01   3.5760339e+01
+   4.3500000e+01   1.3413512e+01   3.5768570e+01
+   4.3500000e+01   1.3485198e+01   3.5776364e+01
+   4.3500000e+01   1.3539636e+01   3.5778083e+01
+   4.3500000e+01   1.3586083e+01   3.5781620e+01
+   4.3500000e+01   1.3649860e+01   3.5788785e+01
+   4.3500000e+01   1.3724041e+01   3.5795174e+01
+   4.3500000e+01   1.3795636e+01   3.5799347e+01
+   4.3500000e+01   1.3896884e+01   3.5810504e+01
+   4.3500000e+01   1.4007802e+01   3.5819636e+01
+   4.3500000e+01   1.4119207e+01   3.5823149e+01
+   4.3500000e+01   1.4275008e+01   3.5831579e+01
+   4.3500000e+01   1.4495909e+01   3.5833537e+01
+   4.3500000e+01   1.4732562e+01   3.5837397e+01
+   4.3500000e+01   1.4997446e+01   3.5833347e+01
+   4.3500000e+01   1.5706603e+01   3.5837281e+01
+   4.3500000e+01   1.6613545e+01   3.5844116e+01
+   4.3500000e+01   1.7261298e+01   3.5850289e+01
+   4.3500000e+01   1.8017446e+01   3.5853281e+01
+   4.3500000e+01   1.8879421e+01   3.5867727e+01
+   4.3500000e+01   1.9534612e+01   3.5871678e+01
+   4.3500000e+01   1.9774289e+01   3.5868719e+01
+   4.3500000e+01   1.9845992e+01   3.5868760e+01
+   4.3500000e+01   1.9857645e+01   3.5869248e+01
+   4.3500000e+01   1.9858744e+01   3.5869810e+01
+   4.3500000e+01   1.9851843e+01   3.5868702e+01
+   4.3500000e+01   1.9795959e+01   3.5873008e+01
+   4.3550000e+01   2.5103554e+00   3.4896107e+01
+   4.3550000e+01   2.5061901e+00   3.4902207e+01
+   4.3550000e+01   2.5121488e+00   3.4907306e+01
+   4.3550000e+01   2.5413554e+00   3.4914521e+01
+   4.3550000e+01   2.5794959e+00   3.4919405e+01
+   4.3550000e+01   2.6451405e+00   3.4928736e+01
+   4.3550000e+01   2.7416281e+00   3.4940488e+01
+   4.3550000e+01   2.8990331e+00   3.4952802e+01
+   4.3550000e+01   3.0880496e+00   3.4961322e+01
+   4.3550000e+01   3.3536529e+00   3.4973281e+01
+   4.3550000e+01   3.5827603e+00   3.4972736e+01
+   4.3550000e+01   3.8425455e+00   3.4984074e+01
+   4.3550000e+01   4.3142231e+00   3.5036645e+01
+   4.3550000e+01   5.2460165e+00   3.5170777e+01
+   4.3550000e+01   6.6648926e+00   3.5382711e+01
+   4.3550000e+01   8.2569008e+00   3.5621149e+01
+   4.3550000e+01   9.2870413e+00   3.5722876e+01
+   4.3550000e+01   9.5328760e+00   3.5630785e+01
+   4.3550000e+01   9.9026364e+00   3.5537066e+01
+   4.3550000e+01   1.0298083e+01   3.5480702e+01
+   4.3550000e+01   1.0770826e+01   3.5489091e+01
+   4.3550000e+01   1.1255678e+01   3.5531455e+01
+   4.3550000e+01   1.1602421e+01   3.5566000e+01
+   4.3550000e+01   1.1914041e+01   3.5601397e+01
+   4.3550000e+01   1.2147298e+01   3.5626901e+01
+   4.3550000e+01   1.2343058e+01   3.5648785e+01
+   4.3550000e+01   1.2494471e+01   3.5664835e+01
+   4.3550000e+01   1.2597438e+01   3.5676273e+01
+   4.3550000e+01   1.2688149e+01   3.5686380e+01
+   4.3550000e+01   1.2785116e+01   3.5697636e+01
+   4.3550000e+01   1.2848306e+01   3.5705074e+01
+   4.3550000e+01   1.2914322e+01   3.5711992e+01
+   4.3550000e+01   1.3001628e+01   3.5721826e+01
+   4.3550000e+01   1.3051289e+01   3.5725025e+01
+   4.3550000e+01   1.3089132e+01   3.5727711e+01
+   4.3550000e+01   1.3142140e+01   3.5735612e+01
+   4.3550000e+01   1.3179091e+01   3.5738893e+01
+   4.3550000e+01   1.3225289e+01   3.5744364e+01
+   4.3550000e+01   1.3285380e+01   3.5750000e+01
+   4.3550000e+01   1.3351380e+01   3.5760339e+01
+   4.3550000e+01   1.3413512e+01   3.5768570e+01
+   4.3550000e+01   1.3485198e+01   3.5776364e+01
+   4.3550000e+01   1.3539636e+01   3.5778083e+01
+   4.3550000e+01   1.3586083e+01   3.5781620e+01
+   4.3550000e+01   1.3649860e+01   3.5788785e+01
+   4.3550000e+01   1.3724041e+01   3.5795174e+01
+   4.3550000e+01   1.3795636e+01   3.5799347e+01
+   4.3550000e+01   1.3896884e+01   3.5810504e+01
+   4.3550000e+01   1.4007802e+01   3.5819636e+01
+   4.3550000e+01   1.4119207e+01   3.5823149e+01
+   4.3550000e+01   1.4275008e+01   3.5831579e+01
+   4.3550000e+01   1.4495909e+01   3.5833537e+01
+   4.3550000e+01   1.4732562e+01   3.5837397e+01
+   4.3550000e+01   1.4997446e+01   3.5833347e+01
+   4.3550000e+01   1.5706603e+01   3.5837281e+01
+   4.3550000e+01   1.6613545e+01   3.5844116e+01
+   4.3550000e+01   1.7261298e+01   3.5850289e+01
+   4.3550000e+01   1.8017446e+01   3.5853281e+01
+   4.3550000e+01   1.8879421e+01   3.5867727e+01
+   4.3550000e+01   1.9534612e+01   3.5871678e+01
+   4.3550000e+01   1.9774289e+01   3.5868719e+01
+   4.3550000e+01   1.9845992e+01   3.5868760e+01
+   4.3550000e+01   1.9857645e+01   3.5869248e+01
+   4.3550000e+01   1.9858744e+01   3.5869810e+01
+   4.3550000e+01   1.9851843e+01   3.5868702e+01
+   4.3550000e+01   1.9795959e+01   3.5873008e+01
+   4.3600000e+01   2.5103554e+00   3.4896107e+01
+   4.3600000e+01   2.5061901e+00   3.4902207e+01
+   4.3600000e+01   2.5121488e+00   3.4907306e+01
+   4.3600000e+01   2.5413554e+00   3.4914521e+01
+   4.3600000e+01   2.5794959e+00   3.4919405e+01
+   4.3600000e+01   2.6451405e+00   3.4928736e+01
+   4.3600000e+01   2.7416281e+00   3.4940488e+01
+   4.3600000e+01   2.8990331e+00   3.4952802e+01
+   4.3600000e+01   3.0880496e+00   3.4961322e+01
+   4.3600000e+01   3.3536529e+00   3.4973281e+01
+   4.3600000e+01   3.5827603e+00   3.4972736e+01
+   4.3600000e+01   3.8425455e+00   3.4984074e+01
+   4.3600000e+01   4.3142231e+00   3.5036645e+01
+   4.3600000e+01   5.2460165e+00   3.5170777e+01
+   4.3600000e+01   6.6648926e+00   3.5382711e+01
+   4.3600000e+01   8.2569008e+00   3.5621149e+01
+   4.3600000e+01   9.2870413e+00   3.5722876e+01
+   4.3600000e+01   9.5328760e+00   3.5630785e+01
+   4.3600000e+01   9.9026364e+00   3.5537066e+01
+   4.3600000e+01   1.0298083e+01   3.5480702e+01
+   4.3600000e+01   1.0770826e+01   3.5489091e+01
+   4.3600000e+01   1.1255678e+01   3.5531455e+01
+   4.3600000e+01   1.1602421e+01   3.5566000e+01
+   4.3600000e+01   1.1914041e+01   3.5601397e+01
+   4.3600000e+01   1.2147298e+01   3.5626901e+01
+   4.3600000e+01   1.2343058e+01   3.5648785e+01
+   4.3600000e+01   1.2494471e+01   3.5664835e+01
+   4.3600000e+01   1.2597438e+01   3.5676273e+01
+   4.3600000e+01   1.2688149e+01   3.5686380e+01
+   4.3600000e+01   1.2785116e+01   3.5697636e+01
+   4.3600000e+01   1.2848306e+01   3.5705074e+01
+   4.3600000e+01   1.2914322e+01   3.5711992e+01
+   4.3600000e+01   1.3001628e+01   3.5721826e+01
+   4.3600000e+01   1.3051289e+01   3.5725025e+01
+   4.3600000e+01   1.3089132e+01   3.5727711e+01
+   4.3600000e+01   1.3142140e+01   3.5735612e+01
+   4.3600000e+01   1.3179091e+01   3.5738893e+01
+   4.3600000e+01   1.3225289e+01   3.5744364e+01
+   4.3600000e+01   1.3285380e+01   3.5750000e+01
+   4.3600000e+01   1.3351380e+01   3.5760339e+01
+   4.3600000e+01   1.3413512e+01   3.5768570e+01
+   4.3600000e+01   1.3485198e+01   3.5776364e+01
+   4.3600000e+01   1.3539636e+01   3.5778083e+01
+   4.3600000e+01   1.3586083e+01   3.5781620e+01
+   4.3600000e+01   1.3649860e+01   3.5788785e+01
+   4.3600000e+01   1.3724041e+01   3.5795174e+01
+   4.3600000e+01   1.3795636e+01   3.5799347e+01
+   4.3600000e+01   1.3896884e+01   3.5810504e+01
+   4.3600000e+01   1.4007802e+01   3.5819636e+01
+   4.3600000e+01   1.4119207e+01   3.5823149e+01
+   4.3600000e+01   1.4275008e+01   3.5831579e+01
+   4.3600000e+01   1.4495909e+01   3.5833537e+01
+   4.3600000e+01   1.4732562e+01   3.5837397e+01
+   4.3600000e+01   1.4997446e+01   3.5833347e+01
+   4.3600000e+01   1.5706603e+01   3.5837281e+01
+   4.3600000e+01   1.6613545e+01   3.5844116e+01
+   4.3600000e+01   1.7261298e+01   3.5850289e+01
+   4.3600000e+01   1.8017446e+01   3.5853281e+01
+   4.3600000e+01   1.8879421e+01   3.5867727e+01
+   4.3600000e+01   1.9534612e+01   3.5871678e+01
+   4.3600000e+01   1.9774289e+01   3.5868719e+01
+   4.3600000e+01   1.9845992e+01   3.5868760e+01
+   4.3600000e+01   1.9857645e+01   3.5869248e+01
+   4.3600000e+01   1.9858744e+01   3.5869810e+01
+   4.3600000e+01   1.9851843e+01   3.5868702e+01
+   4.3600000e+01   1.9795959e+01   3.5873008e+01
+   4.3650000e+01   2.5103554e+00   3.4896107e+01
+   4.3650000e+01   2.5061901e+00   3.4902207e+01
+   4.3650000e+01   2.5121488e+00   3.4907306e+01
+   4.3650000e+01   2.5413554e+00   3.4914521e+01
+   4.3650000e+01   2.5794959e+00   3.4919405e+01
+   4.3650000e+01   2.6451405e+00   3.4928736e+01
+   4.3650000e+01   2.7416281e+00   3.4940488e+01
+   4.3650000e+01   2.8990331e+00   3.4952802e+01
+   4.3650000e+01   3.0880496e+00   3.4961322e+01
+   4.3650000e+01   3.3536529e+00   3.4973281e+01
+   4.3650000e+01   3.5827603e+00   3.4972736e+01
+   4.3650000e+01   3.8425455e+00   3.4984074e+01
+   4.3650000e+01   4.3142231e+00   3.5036645e+01
+   4.3650000e+01   5.2460165e+00   3.5170777e+01
+   4.3650000e+01   6.6648926e+00   3.5382711e+01
+   4.3650000e+01   8.2569008e+00   3.5621149e+01
+   4.3650000e+01   9.2870413e+00   3.5722876e+01
+   4.3650000e+01   9.5328760e+00   3.5630785e+01
+   4.3650000e+01   9.9026364e+00   3.5537066e+01
+   4.3650000e+01   1.0298083e+01   3.5480702e+01
+   4.3650000e+01   1.0770826e+01   3.5489091e+01
+   4.3650000e+01   1.1255678e+01   3.5531455e+01
+   4.3650000e+01   1.1602421e+01   3.5566000e+01
+   4.3650000e+01   1.1914041e+01   3.5601397e+01
+   4.3650000e+01   1.2147298e+01   3.5626901e+01
+   4.3650000e+01   1.2343058e+01   3.5648785e+01
+   4.3650000e+01   1.2494471e+01   3.5664835e+01
+   4.3650000e+01   1.2597438e+01   3.5676273e+01
+   4.3650000e+01   1.2688149e+01   3.5686380e+01
+   4.3650000e+01   1.2785116e+01   3.5697636e+01
+   4.3650000e+01   1.2848306e+01   3.5705074e+01
+   4.3650000e+01   1.2914322e+01   3.5711992e+01
+   4.3650000e+01   1.3001628e+01   3.5721826e+01
+   4.3650000e+01   1.3051289e+01   3.5725025e+01
+   4.3650000e+01   1.3089132e+01   3.5727711e+01
+   4.3650000e+01   1.3142140e+01   3.5735612e+01
+   4.3650000e+01   1.3179091e+01   3.5738893e+01
+   4.3650000e+01   1.3225289e+01   3.5744364e+01
+   4.3650000e+01   1.3285380e+01   3.5750000e+01
+   4.3650000e+01   1.3351380e+01   3.5760339e+01
+   4.3650000e+01   1.3413512e+01   3.5768570e+01
+   4.3650000e+01   1.3485198e+01   3.5776364e+01
+   4.3650000e+01   1.3539636e+01   3.5778083e+01
+   4.3650000e+01   1.3586083e+01   3.5781620e+01
+   4.3650000e+01   1.3649860e+01   3.5788785e+01
+   4.3650000e+01   1.3724041e+01   3.5795174e+01
+   4.3650000e+01   1.3795636e+01   3.5799347e+01
+   4.3650000e+01   1.3896884e+01   3.5810504e+01
+   4.3650000e+01   1.4007802e+01   3.5819636e+01
+   4.3650000e+01   1.4119207e+01   3.5823149e+01
+   4.3650000e+01   1.4275008e+01   3.5831579e+01
+   4.3650000e+01   1.4495909e+01   3.5833537e+01
+   4.3650000e+01   1.4732562e+01   3.5837397e+01
+   4.3650000e+01   1.4997446e+01   3.5833347e+01
+   4.3650000e+01   1.5706603e+01   3.5837281e+01
+   4.3650000e+01   1.6613545e+01   3.5844116e+01
+   4.3650000e+01   1.7261298e+01   3.5850289e+01
+   4.3650000e+01   1.8017446e+01   3.5853281e+01
+   4.3650000e+01   1.8879421e+01   3.5867727e+01
+   4.3650000e+01   1.9534612e+01   3.5871678e+01
+   4.3650000e+01   1.9774289e+01   3.5868719e+01
+   4.3650000e+01   1.9845992e+01   3.5868760e+01
+   4.3650000e+01   1.9857645e+01   3.5869248e+01
+   4.3650000e+01   1.9858744e+01   3.5869810e+01
+   4.3650000e+01   1.9851843e+01   3.5868702e+01
+   4.3650000e+01   1.9795959e+01   3.5873008e+01
+   4.3700000e+01   2.5103554e+00   3.4896107e+01
+   4.3700000e+01   2.5061901e+00   3.4902207e+01
+   4.3700000e+01   2.5121488e+00   3.4907306e+01
+   4.3700000e+01   2.5413554e+00   3.4914521e+01
+   4.3700000e+01   2.5794959e+00   3.4919405e+01
+   4.3700000e+01   2.6451405e+00   3.4928736e+01
+   4.3700000e+01   2.7416281e+00   3.4940488e+01
+   4.3700000e+01   2.8990331e+00   3.4952802e+01
+   4.3700000e+01   3.0880496e+00   3.4961322e+01
+   4.3700000e+01   3.3536529e+00   3.4973281e+01
+   4.3700000e+01   3.5827603e+00   3.4972736e+01
+   4.3700000e+01   3.8425455e+00   3.4984074e+01
+   4.3700000e+01   4.3142231e+00   3.5036645e+01
+   4.3700000e+01   5.2460165e+00   3.5170777e+01
+   4.3700000e+01   6.6648926e+00   3.5382711e+01
+   4.3700000e+01   8.2569008e+00   3.5621149e+01
+   4.3700000e+01   9.2870413e+00   3.5722876e+01
+   4.3700000e+01   9.5328760e+00   3.5630785e+01
+   4.3700000e+01   9.9026364e+00   3.5537066e+01
+   4.3700000e+01   1.0298083e+01   3.5480702e+01
+   4.3700000e+01   1.0770826e+01   3.5489091e+01
+   4.3700000e+01   1.1255678e+01   3.5531455e+01
+   4.3700000e+01   1.1602421e+01   3.5566000e+01
+   4.3700000e+01   1.1914041e+01   3.5601397e+01
+   4.3700000e+01   1.2147298e+01   3.5626901e+01
+   4.3700000e+01   1.2343058e+01   3.5648785e+01
+   4.3700000e+01   1.2494471e+01   3.5664835e+01
+   4.3700000e+01   1.2597438e+01   3.5676273e+01
+   4.3700000e+01   1.2688149e+01   3.5686380e+01
+   4.3700000e+01   1.2785116e+01   3.5697636e+01
+   4.3700000e+01   1.2848306e+01   3.5705074e+01
+   4.3700000e+01   1.2914322e+01   3.5711992e+01
+   4.3700000e+01   1.3001628e+01   3.5721826e+01
+   4.3700000e+01   1.3051289e+01   3.5725025e+01
+   4.3700000e+01   1.3089132e+01   3.5727711e+01
+   4.3700000e+01   1.3142140e+01   3.5735612e+01
+   4.3700000e+01   1.3179091e+01   3.5738893e+01
+   4.3700000e+01   1.3225289e+01   3.5744364e+01
+   4.3700000e+01   1.3285380e+01   3.5750000e+01
+   4.3700000e+01   1.3351380e+01   3.5760339e+01
+   4.3700000e+01   1.3413512e+01   3.5768570e+01
+   4.3700000e+01   1.3485198e+01   3.5776364e+01
+   4.3700000e+01   1.3539636e+01   3.5778083e+01
+   4.3700000e+01   1.3586083e+01   3.5781620e+01
+   4.3700000e+01   1.3649860e+01   3.5788785e+01
+   4.3700000e+01   1.3724041e+01   3.5795174e+01
+   4.3700000e+01   1.3795636e+01   3.5799347e+01
+   4.3700000e+01   1.3896884e+01   3.5810504e+01
+   4.3700000e+01   1.4007802e+01   3.5819636e+01
+   4.3700000e+01   1.4119207e+01   3.5823149e+01
+   4.3700000e+01   1.4275008e+01   3.5831579e+01
+   4.3700000e+01   1.4495909e+01   3.5833537e+01
+   4.3700000e+01   1.4732562e+01   3.5837397e+01
+   4.3700000e+01   1.4997446e+01   3.5833347e+01
+   4.3700000e+01   1.5706603e+01   3.5837281e+01
+   4.3700000e+01   1.6613545e+01   3.5844116e+01
+   4.3700000e+01   1.7261298e+01   3.5850289e+01
+   4.3700000e+01   1.8017446e+01   3.5853281e+01
+   4.3700000e+01   1.8879421e+01   3.5867727e+01
+   4.3700000e+01   1.9534612e+01   3.5871678e+01
+   4.3700000e+01   1.9774289e+01   3.5868719e+01
+   4.3700000e+01   1.9845992e+01   3.5868760e+01
+   4.3700000e+01   1.9857645e+01   3.5869248e+01
+   4.3700000e+01   1.9858744e+01   3.5869810e+01
+   4.3700000e+01   1.9851843e+01   3.5868702e+01
+   4.3700000e+01   1.9795959e+01   3.5873008e+01
+   4.3750000e+01   2.5103554e+00   3.4896107e+01
+   4.3750000e+01   2.5061901e+00   3.4902207e+01
+   4.3750000e+01   2.5121488e+00   3.4907306e+01
+   4.3750000e+01   2.5413554e+00   3.4914521e+01
+   4.3750000e+01   2.5794959e+00   3.4919405e+01
+   4.3750000e+01   2.6451405e+00   3.4928736e+01
+   4.3750000e+01   2.7416281e+00   3.4940488e+01
+   4.3750000e+01   2.8990331e+00   3.4952802e+01
+   4.3750000e+01   3.0880496e+00   3.4961322e+01
+   4.3750000e+01   3.3536529e+00   3.4973281e+01
+   4.3750000e+01   3.5827603e+00   3.4972736e+01
+   4.3750000e+01   3.8425455e+00   3.4984074e+01
+   4.3750000e+01   4.3142231e+00   3.5036645e+01
+   4.3750000e+01   5.2460165e+00   3.5170777e+01
+   4.3750000e+01   6.6648926e+00   3.5382711e+01
+   4.3750000e+01   8.2569008e+00   3.5621149e+01
+   4.3750000e+01   9.2870413e+00   3.5722876e+01
+   4.3750000e+01   9.5328760e+00   3.5630785e+01
+   4.3750000e+01   9.9026364e+00   3.5537066e+01
+   4.3750000e+01   1.0298083e+01   3.5480702e+01
+   4.3750000e+01   1.0770826e+01   3.5489091e+01
+   4.3750000e+01   1.1255678e+01   3.5531455e+01
+   4.3750000e+01   1.1602421e+01   3.5566000e+01
+   4.3750000e+01   1.1914041e+01   3.5601397e+01
+   4.3750000e+01   1.2147298e+01   3.5626901e+01
+   4.3750000e+01   1.2343058e+01   3.5648785e+01
+   4.3750000e+01   1.2494471e+01   3.5664835e+01
+   4.3750000e+01   1.2597438e+01   3.5676273e+01
+   4.3750000e+01   1.2688149e+01   3.5686380e+01
+   4.3750000e+01   1.2785116e+01   3.5697636e+01
+   4.3750000e+01   1.2848306e+01   3.5705074e+01
+   4.3750000e+01   1.2914322e+01   3.5711992e+01
+   4.3750000e+01   1.3001628e+01   3.5721826e+01
+   4.3750000e+01   1.3051289e+01   3.5725025e+01
+   4.3750000e+01   1.3089132e+01   3.5727711e+01
+   4.3750000e+01   1.3142140e+01   3.5735612e+01
+   4.3750000e+01   1.3179091e+01   3.5738893e+01
+   4.3750000e+01   1.3225289e+01   3.5744364e+01
+   4.3750000e+01   1.3285380e+01   3.5750000e+01
+   4.3750000e+01   1.3351380e+01   3.5760339e+01
+   4.3750000e+01   1.3413512e+01   3.5768570e+01
+   4.3750000e+01   1.3485198e+01   3.5776364e+01
+   4.3750000e+01   1.3539636e+01   3.5778083e+01
+   4.3750000e+01   1.3586083e+01   3.5781620e+01
+   4.3750000e+01   1.3649860e+01   3.5788785e+01
+   4.3750000e+01   1.3724041e+01   3.5795174e+01
+   4.3750000e+01   1.3795636e+01   3.5799347e+01
+   4.3750000e+01   1.3896884e+01   3.5810504e+01
+   4.3750000e+01   1.4007802e+01   3.5819636e+01
+   4.3750000e+01   1.4119207e+01   3.5823149e+01
+   4.3750000e+01   1.4275008e+01   3.5831579e+01
+   4.3750000e+01   1.4495909e+01   3.5833537e+01
+   4.3750000e+01   1.4732562e+01   3.5837397e+01
+   4.3750000e+01   1.4997446e+01   3.5833347e+01
+   4.3750000e+01   1.5706603e+01   3.5837281e+01
+   4.3750000e+01   1.6613545e+01   3.5844116e+01
+   4.3750000e+01   1.7261298e+01   3.5850289e+01
+   4.3750000e+01   1.8017446e+01   3.5853281e+01
+   4.3750000e+01   1.8879421e+01   3.5867727e+01
+   4.3750000e+01   1.9534612e+01   3.5871678e+01
+   4.3750000e+01   1.9774289e+01   3.5868719e+01
+   4.3750000e+01   1.9845992e+01   3.5868760e+01
+   4.3750000e+01   1.9857645e+01   3.5869248e+01
+   4.3750000e+01   1.9858744e+01   3.5869810e+01
+   4.3750000e+01   1.9851843e+01   3.5868702e+01
+   4.3750000e+01   1.9795959e+01   3.5873008e+01
+   4.3800000e+01   2.5103554e+00   3.4896107e+01
+   4.3800000e+01   2.5061901e+00   3.4902207e+01
+   4.3800000e+01   2.5121488e+00   3.4907306e+01
+   4.3800000e+01   2.5413554e+00   3.4914521e+01
+   4.3800000e+01   2.5794959e+00   3.4919405e+01
+   4.3800000e+01   2.6451405e+00   3.4928736e+01
+   4.3800000e+01   2.7416281e+00   3.4940488e+01
+   4.3800000e+01   2.8990331e+00   3.4952802e+01
+   4.3800000e+01   3.0880496e+00   3.4961322e+01
+   4.3800000e+01   3.3536529e+00   3.4973281e+01
+   4.3800000e+01   3.5827603e+00   3.4972736e+01
+   4.3800000e+01   3.8425455e+00   3.4984074e+01
+   4.3800000e+01   4.3142231e+00   3.5036645e+01
+   4.3800000e+01   5.2460165e+00   3.5170777e+01
+   4.3800000e+01   6.6648926e+00   3.5382711e+01
+   4.3800000e+01   8.2569008e+00   3.5621149e+01
+   4.3800000e+01   9.2870413e+00   3.5722876e+01
+   4.3800000e+01   9.5328760e+00   3.5630785e+01
+   4.3800000e+01   9.9026364e+00   3.5537066e+01
+   4.3800000e+01   1.0298083e+01   3.5480702e+01
+   4.3800000e+01   1.0770826e+01   3.5489091e+01
+   4.3800000e+01   1.1255678e+01   3.5531455e+01
+   4.3800000e+01   1.1602421e+01   3.5566000e+01
+   4.3800000e+01   1.1914041e+01   3.5601397e+01
+   4.3800000e+01   1.2147298e+01   3.5626901e+01
+   4.3800000e+01   1.2343058e+01   3.5648785e+01
+   4.3800000e+01   1.2494471e+01   3.5664835e+01
+   4.3800000e+01   1.2597438e+01   3.5676273e+01
+   4.3800000e+01   1.2688149e+01   3.5686380e+01
+   4.3800000e+01   1.2785116e+01   3.5697636e+01
+   4.3800000e+01   1.2848306e+01   3.5705074e+01
+   4.3800000e+01   1.2914322e+01   3.5711992e+01
+   4.3800000e+01   1.3001628e+01   3.5721826e+01
+   4.3800000e+01   1.3051289e+01   3.5725025e+01
+   4.3800000e+01   1.3089132e+01   3.5727711e+01
+   4.3800000e+01   1.3142140e+01   3.5735612e+01
+   4.3800000e+01   1.3179091e+01   3.5738893e+01
+   4.3800000e+01   1.3225289e+01   3.5744364e+01
+   4.3800000e+01   1.3285380e+01   3.5750000e+01
+   4.3800000e+01   1.3351380e+01   3.5760339e+01
+   4.3800000e+01   1.3413512e+01   3.5768570e+01
+   4.3800000e+01   1.3485198e+01   3.5776364e+01
+   4.3800000e+01   1.3539636e+01   3.5778083e+01
+   4.3800000e+01   1.3586083e+01   3.5781620e+01
+   4.3800000e+01   1.3649860e+01   3.5788785e+01
+   4.3800000e+01   1.3724041e+01   3.5795174e+01
+   4.3800000e+01   1.3795636e+01   3.5799347e+01
+   4.3800000e+01   1.3896884e+01   3.5810504e+01
+   4.3800000e+01   1.4007802e+01   3.5819636e+01
+   4.3800000e+01   1.4119207e+01   3.5823149e+01
+   4.3800000e+01   1.4275008e+01   3.5831579e+01
+   4.3800000e+01   1.4495909e+01   3.5833537e+01
+   4.3800000e+01   1.4732562e+01   3.5837397e+01
+   4.3800000e+01   1.4997446e+01   3.5833347e+01
+   4.3800000e+01   1.5706603e+01   3.5837281e+01
+   4.3800000e+01   1.6613545e+01   3.5844116e+01
+   4.3800000e+01   1.7261298e+01   3.5850289e+01
+   4.3800000e+01   1.8017446e+01   3.5853281e+01
+   4.3800000e+01   1.8879421e+01   3.5867727e+01
+   4.3800000e+01   1.9534612e+01   3.5871678e+01
+   4.3800000e+01   1.9774289e+01   3.5868719e+01
+   4.3800000e+01   1.9845992e+01   3.5868760e+01
+   4.3800000e+01   1.9857645e+01   3.5869248e+01
+   4.3800000e+01   1.9858744e+01   3.5869810e+01
+   4.3800000e+01   1.9851843e+01   3.5868702e+01
+   4.3800000e+01   1.9795959e+01   3.5873008e+01
+   4.3850000e+01   2.5103554e+00   3.4896107e+01
+   4.3850000e+01   2.5061901e+00   3.4902207e+01
+   4.3850000e+01   2.5121488e+00   3.4907306e+01
+   4.3850000e+01   2.5413554e+00   3.4914521e+01
+   4.3850000e+01   2.5794959e+00   3.4919405e+01
+   4.3850000e+01   2.6451405e+00   3.4928736e+01
+   4.3850000e+01   2.7416281e+00   3.4940488e+01
+   4.3850000e+01   2.8990331e+00   3.4952802e+01
+   4.3850000e+01   3.0880496e+00   3.4961322e+01
+   4.3850000e+01   3.3536529e+00   3.4973281e+01
+   4.3850000e+01   3.5827603e+00   3.4972736e+01
+   4.3850000e+01   3.8425455e+00   3.4984074e+01
+   4.3850000e+01   4.3142231e+00   3.5036645e+01
+   4.3850000e+01   5.2460165e+00   3.5170777e+01
+   4.3850000e+01   6.6648926e+00   3.5382711e+01
+   4.3850000e+01   8.2569008e+00   3.5621149e+01
+   4.3850000e+01   9.2870413e+00   3.5722876e+01
+   4.3850000e+01   9.5328760e+00   3.5630785e+01
+   4.3850000e+01   9.9026364e+00   3.5537066e+01
+   4.3850000e+01   1.0298083e+01   3.5480702e+01
+   4.3850000e+01   1.0770826e+01   3.5489091e+01
+   4.3850000e+01   1.1255678e+01   3.5531455e+01
+   4.3850000e+01   1.1602421e+01   3.5566000e+01
+   4.3850000e+01   1.1914041e+01   3.5601397e+01
+   4.3850000e+01   1.2147298e+01   3.5626901e+01
+   4.3850000e+01   1.2343058e+01   3.5648785e+01
+   4.3850000e+01   1.2494471e+01   3.5664835e+01
+   4.3850000e+01   1.2597438e+01   3.5676273e+01
+   4.3850000e+01   1.2688149e+01   3.5686380e+01
+   4.3850000e+01   1.2785116e+01   3.5697636e+01
+   4.3850000e+01   1.2848306e+01   3.5705074e+01
+   4.3850000e+01   1.2914322e+01   3.5711992e+01
+   4.3850000e+01   1.3001628e+01   3.5721826e+01
+   4.3850000e+01   1.3051289e+01   3.5725025e+01
+   4.3850000e+01   1.3089132e+01   3.5727711e+01
+   4.3850000e+01   1.3142140e+01   3.5735612e+01
+   4.3850000e+01   1.3179091e+01   3.5738893e+01
+   4.3850000e+01   1.3225289e+01   3.5744364e+01
+   4.3850000e+01   1.3285380e+01   3.5750000e+01
+   4.3850000e+01   1.3351380e+01   3.5760339e+01
+   4.3850000e+01   1.3413512e+01   3.5768570e+01
+   4.3850000e+01   1.3485198e+01   3.5776364e+01
+   4.3850000e+01   1.3539636e+01   3.5778083e+01
+   4.3850000e+01   1.3586083e+01   3.5781620e+01
+   4.3850000e+01   1.3649860e+01   3.5788785e+01
+   4.3850000e+01   1.3724041e+01   3.5795174e+01
+   4.3850000e+01   1.3795636e+01   3.5799347e+01
+   4.3850000e+01   1.3896884e+01   3.5810504e+01
+   4.3850000e+01   1.4007802e+01   3.5819636e+01
+   4.3850000e+01   1.4119207e+01   3.5823149e+01
+   4.3850000e+01   1.4275008e+01   3.5831579e+01
+   4.3850000e+01   1.4495909e+01   3.5833537e+01
+   4.3850000e+01   1.4732562e+01   3.5837397e+01
+   4.3850000e+01   1.4997446e+01   3.5833347e+01
+   4.3850000e+01   1.5706603e+01   3.5837281e+01
+   4.3850000e+01   1.6613545e+01   3.5844116e+01
+   4.3850000e+01   1.7261298e+01   3.5850289e+01
+   4.3850000e+01   1.8017446e+01   3.5853281e+01
+   4.3850000e+01   1.8879421e+01   3.5867727e+01
+   4.3850000e+01   1.9534612e+01   3.5871678e+01
+   4.3850000e+01   1.9774289e+01   3.5868719e+01
+   4.3850000e+01   1.9845992e+01   3.5868760e+01
+   4.3850000e+01   1.9857645e+01   3.5869248e+01
+   4.3850000e+01   1.9858744e+01   3.5869810e+01
+   4.3850000e+01   1.9851843e+01   3.5868702e+01
+   4.3850000e+01   1.9795959e+01   3.5873008e+01
+   4.3900000e+01   2.5103554e+00   3.4896107e+01
+   4.3900000e+01   2.5061901e+00   3.4902207e+01
+   4.3900000e+01   2.5121488e+00   3.4907306e+01
+   4.3900000e+01   2.5413554e+00   3.4914521e+01
+   4.3900000e+01   2.5794959e+00   3.4919405e+01
+   4.3900000e+01   2.6451405e+00   3.4928736e+01
+   4.3900000e+01   2.7416281e+00   3.4940488e+01
+   4.3900000e+01   2.8990331e+00   3.4952802e+01
+   4.3900000e+01   3.0880496e+00   3.4961322e+01
+   4.3900000e+01   3.3536529e+00   3.4973281e+01
+   4.3900000e+01   3.5827603e+00   3.4972736e+01
+   4.3900000e+01   3.8425455e+00   3.4984074e+01
+   4.3900000e+01   4.3142231e+00   3.5036645e+01
+   4.3900000e+01   5.2460165e+00   3.5170777e+01
+   4.3900000e+01   6.6648926e+00   3.5382711e+01
+   4.3900000e+01   8.2569008e+00   3.5621149e+01
+   4.3900000e+01   9.2870413e+00   3.5722876e+01
+   4.3900000e+01   9.5328760e+00   3.5630785e+01
+   4.3900000e+01   9.9026364e+00   3.5537066e+01
+   4.3900000e+01   1.0298083e+01   3.5480702e+01
+   4.3900000e+01   1.0770826e+01   3.5489091e+01
+   4.3900000e+01   1.1255678e+01   3.5531455e+01
+   4.3900000e+01   1.1602421e+01   3.5566000e+01
+   4.3900000e+01   1.1914041e+01   3.5601397e+01
+   4.3900000e+01   1.2147298e+01   3.5626901e+01
+   4.3900000e+01   1.2343058e+01   3.5648785e+01
+   4.3900000e+01   1.2494471e+01   3.5664835e+01
+   4.3900000e+01   1.2597438e+01   3.5676273e+01
+   4.3900000e+01   1.2688149e+01   3.5686380e+01
+   4.3900000e+01   1.2785116e+01   3.5697636e+01
+   4.3900000e+01   1.2848306e+01   3.5705074e+01
+   4.3900000e+01   1.2914322e+01   3.5711992e+01
+   4.3900000e+01   1.3001628e+01   3.5721826e+01
+   4.3900000e+01   1.3051289e+01   3.5725025e+01
+   4.3900000e+01   1.3089132e+01   3.5727711e+01
+   4.3900000e+01   1.3142140e+01   3.5735612e+01
+   4.3900000e+01   1.3179091e+01   3.5738893e+01
+   4.3900000e+01   1.3225289e+01   3.5744364e+01
+   4.3900000e+01   1.3285380e+01   3.5750000e+01
+   4.3900000e+01   1.3351380e+01   3.5760339e+01
+   4.3900000e+01   1.3413512e+01   3.5768570e+01
+   4.3900000e+01   1.3485198e+01   3.5776364e+01
+   4.3900000e+01   1.3539636e+01   3.5778083e+01
+   4.3900000e+01   1.3586083e+01   3.5781620e+01
+   4.3900000e+01   1.3649860e+01   3.5788785e+01
+   4.3900000e+01   1.3724041e+01   3.5795174e+01
+   4.3900000e+01   1.3795636e+01   3.5799347e+01
+   4.3900000e+01   1.3896884e+01   3.5810504e+01
+   4.3900000e+01   1.4007802e+01   3.5819636e+01
+   4.3900000e+01   1.4119207e+01   3.5823149e+01
+   4.3900000e+01   1.4275008e+01   3.5831579e+01
+   4.3900000e+01   1.4495909e+01   3.5833537e+01
+   4.3900000e+01   1.4732562e+01   3.5837397e+01
+   4.3900000e+01   1.4997446e+01   3.5833347e+01
+   4.3900000e+01   1.5706603e+01   3.5837281e+01
+   4.3900000e+01   1.6613545e+01   3.5844116e+01
+   4.3900000e+01   1.7261298e+01   3.5850289e+01
+   4.3900000e+01   1.8017446e+01   3.5853281e+01
+   4.3900000e+01   1.8879421e+01   3.5867727e+01
+   4.3900000e+01   1.9534612e+01   3.5871678e+01
+   4.3900000e+01   1.9774289e+01   3.5868719e+01
+   4.3900000e+01   1.9845992e+01   3.5868760e+01
+   4.3900000e+01   1.9857645e+01   3.5869248e+01
+   4.3900000e+01   1.9858744e+01   3.5869810e+01
+   4.3900000e+01   1.9851843e+01   3.5868702e+01
+   4.3900000e+01   1.9795959e+01   3.5873008e+01
+   4.3950000e+01   2.5103554e+00   3.4896107e+01
+   4.3950000e+01   2.5061901e+00   3.4902207e+01
+   4.3950000e+01   2.5121488e+00   3.4907306e+01
+   4.3950000e+01   2.5413554e+00   3.4914521e+01
+   4.3950000e+01   2.5794959e+00   3.4919405e+01
+   4.3950000e+01   2.6451405e+00   3.4928736e+01
+   4.3950000e+01   2.7416281e+00   3.4940488e+01
+   4.3950000e+01   2.8990331e+00   3.4952802e+01
+   4.3950000e+01   3.0880496e+00   3.4961322e+01
+   4.3950000e+01   3.3536529e+00   3.4973281e+01
+   4.3950000e+01   3.5827603e+00   3.4972736e+01
+   4.3950000e+01   3.8425455e+00   3.4984074e+01
+   4.3950000e+01   4.3142231e+00   3.5036645e+01
+   4.3950000e+01   5.2460165e+00   3.5170777e+01
+   4.3950000e+01   6.6648926e+00   3.5382711e+01
+   4.3950000e+01   8.2569008e+00   3.5621149e+01
+   4.3950000e+01   9.2870413e+00   3.5722876e+01
+   4.3950000e+01   9.5328760e+00   3.5630785e+01
+   4.3950000e+01   9.9026364e+00   3.5537066e+01
+   4.3950000e+01   1.0298083e+01   3.5480702e+01
+   4.3950000e+01   1.0770826e+01   3.5489091e+01
+   4.3950000e+01   1.1255678e+01   3.5531455e+01
+   4.3950000e+01   1.1602421e+01   3.5566000e+01
+   4.3950000e+01   1.1914041e+01   3.5601397e+01
+   4.3950000e+01   1.2147298e+01   3.5626901e+01
+   4.3950000e+01   1.2343058e+01   3.5648785e+01
+   4.3950000e+01   1.2494471e+01   3.5664835e+01
+   4.3950000e+01   1.2597438e+01   3.5676273e+01
+   4.3950000e+01   1.2688149e+01   3.5686380e+01
+   4.3950000e+01   1.2785116e+01   3.5697636e+01
+   4.3950000e+01   1.2848306e+01   3.5705074e+01
+   4.3950000e+01   1.2914322e+01   3.5711992e+01
+   4.3950000e+01   1.3001628e+01   3.5721826e+01
+   4.3950000e+01   1.3051289e+01   3.5725025e+01
+   4.3950000e+01   1.3089132e+01   3.5727711e+01
+   4.3950000e+01   1.3142140e+01   3.5735612e+01
+   4.3950000e+01   1.3179091e+01   3.5738893e+01
+   4.3950000e+01   1.3225289e+01   3.5744364e+01
+   4.3950000e+01   1.3285380e+01   3.5750000e+01
+   4.3950000e+01   1.3351380e+01   3.5760339e+01
+   4.3950000e+01   1.3413512e+01   3.5768570e+01
+   4.3950000e+01   1.3485198e+01   3.5776364e+01
+   4.3950000e+01   1.3539636e+01   3.5778083e+01
+   4.3950000e+01   1.3586083e+01   3.5781620e+01
+   4.3950000e+01   1.3649860e+01   3.5788785e+01
+   4.3950000e+01   1.3724041e+01   3.5795174e+01
+   4.3950000e+01   1.3795636e+01   3.5799347e+01
+   4.3950000e+01   1.3896884e+01   3.5810504e+01
+   4.3950000e+01   1.4007802e+01   3.5819636e+01
+   4.3950000e+01   1.4119207e+01   3.5823149e+01
+   4.3950000e+01   1.4275008e+01   3.5831579e+01
+   4.3950000e+01   1.4495909e+01   3.5833537e+01
+   4.3950000e+01   1.4732562e+01   3.5837397e+01
+   4.3950000e+01   1.4997446e+01   3.5833347e+01
+   4.3950000e+01   1.5706603e+01   3.5837281e+01
+   4.3950000e+01   1.6613545e+01   3.5844116e+01
+   4.3950000e+01   1.7261298e+01   3.5850289e+01
+   4.3950000e+01   1.8017446e+01   3.5853281e+01
+   4.3950000e+01   1.8879421e+01   3.5867727e+01
+   4.3950000e+01   1.9534612e+01   3.5871678e+01
+   4.3950000e+01   1.9774289e+01   3.5868719e+01
+   4.3950000e+01   1.9845992e+01   3.5868760e+01
+   4.3950000e+01   1.9857645e+01   3.5869248e+01
+   4.3950000e+01   1.9858744e+01   3.5869810e+01
+   4.3950000e+01   1.9851843e+01   3.5868702e+01
+   4.3950000e+01   1.9795959e+01   3.5873008e+01
+   4.4000000e+01   2.5103554e+00   3.4896107e+01
+   4.4000000e+01   2.5061901e+00   3.4902207e+01
+   4.4000000e+01   2.5121488e+00   3.4907306e+01
+   4.4000000e+01   2.5413554e+00   3.4914521e+01
+   4.4000000e+01   2.5794959e+00   3.4919405e+01
+   4.4000000e+01   2.6451405e+00   3.4928736e+01
+   4.4000000e+01   2.7416281e+00   3.4940488e+01
+   4.4000000e+01   2.8990331e+00   3.4952802e+01
+   4.4000000e+01   3.0880496e+00   3.4961322e+01
+   4.4000000e+01   3.3536529e+00   3.4973281e+01
+   4.4000000e+01   3.5827603e+00   3.4972736e+01
+   4.4000000e+01   3.8425455e+00   3.4984074e+01
+   4.4000000e+01   4.3142231e+00   3.5036645e+01
+   4.4000000e+01   5.2460165e+00   3.5170777e+01
+   4.4000000e+01   6.6648926e+00   3.5382711e+01
+   4.4000000e+01   8.2569008e+00   3.5621149e+01
+   4.4000000e+01   9.2870413e+00   3.5722876e+01
+   4.4000000e+01   9.5328760e+00   3.5630785e+01
+   4.4000000e+01   9.9026364e+00   3.5537066e+01
+   4.4000000e+01   1.0298083e+01   3.5480702e+01
+   4.4000000e+01   1.0770826e+01   3.5489091e+01
+   4.4000000e+01   1.1255678e+01   3.5531455e+01
+   4.4000000e+01   1.1602421e+01   3.5566000e+01
+   4.4000000e+01   1.1914041e+01   3.5601397e+01
+   4.4000000e+01   1.2147298e+01   3.5626901e+01
+   4.4000000e+01   1.2343058e+01   3.5648785e+01
+   4.4000000e+01   1.2494471e+01   3.5664835e+01
+   4.4000000e+01   1.2597438e+01   3.5676273e+01
+   4.4000000e+01   1.2688149e+01   3.5686380e+01
+   4.4000000e+01   1.2785116e+01   3.5697636e+01
+   4.4000000e+01   1.2848306e+01   3.5705074e+01
+   4.4000000e+01   1.2914322e+01   3.5711992e+01
+   4.4000000e+01   1.3001628e+01   3.5721826e+01
+   4.4000000e+01   1.3051289e+01   3.5725025e+01
+   4.4000000e+01   1.3089132e+01   3.5727711e+01
+   4.4000000e+01   1.3142140e+01   3.5735612e+01
+   4.4000000e+01   1.3179091e+01   3.5738893e+01
+   4.4000000e+01   1.3225289e+01   3.5744364e+01
+   4.4000000e+01   1.3285380e+01   3.5750000e+01
+   4.4000000e+01   1.3351380e+01   3.5760339e+01
+   4.4000000e+01   1.3413512e+01   3.5768570e+01
+   4.4000000e+01   1.3485198e+01   3.5776364e+01
+   4.4000000e+01   1.3539636e+01   3.5778083e+01
+   4.4000000e+01   1.3586083e+01   3.5781620e+01
+   4.4000000e+01   1.3649860e+01   3.5788785e+01
+   4.4000000e+01   1.3724041e+01   3.5795174e+01
+   4.4000000e+01   1.3795636e+01   3.5799347e+01
+   4.4000000e+01   1.3896884e+01   3.5810504e+01
+   4.4000000e+01   1.4007802e+01   3.5819636e+01
+   4.4000000e+01   1.4119207e+01   3.5823149e+01
+   4.4000000e+01   1.4275008e+01   3.5831579e+01
+   4.4000000e+01   1.4495909e+01   3.5833537e+01
+   4.4000000e+01   1.4732562e+01   3.5837397e+01
+   4.4000000e+01   1.4997446e+01   3.5833347e+01
+   4.4000000e+01   1.5706603e+01   3.5837281e+01
+   4.4000000e+01   1.6613545e+01   3.5844116e+01
+   4.4000000e+01   1.7261298e+01   3.5850289e+01
+   4.4000000e+01   1.8017446e+01   3.5853281e+01
+   4.4000000e+01   1.8879421e+01   3.5867727e+01
+   4.4000000e+01   1.9534612e+01   3.5871678e+01
+   4.4000000e+01   1.9774289e+01   3.5868719e+01
+   4.4000000e+01   1.9845992e+01   3.5868760e+01
+   4.4000000e+01   1.9857645e+01   3.5869248e+01
+   4.4000000e+01   1.9858744e+01   3.5869810e+01
+   4.4000000e+01   1.9851843e+01   3.5868702e+01
+   4.4000000e+01   1.9795959e+01   3.5873008e+01
+   4.4050000e+01   2.5103554e+00   3.4896107e+01
+   4.4050000e+01   2.5061901e+00   3.4902207e+01
+   4.4050000e+01   2.5121488e+00   3.4907306e+01
+   4.4050000e+01   2.5413554e+00   3.4914521e+01
+   4.4050000e+01   2.5794959e+00   3.4919405e+01
+   4.4050000e+01   2.6451405e+00   3.4928736e+01
+   4.4050000e+01   2.7416281e+00   3.4940488e+01
+   4.4050000e+01   2.8990331e+00   3.4952802e+01
+   4.4050000e+01   3.0880496e+00   3.4961322e+01
+   4.4050000e+01   3.3536529e+00   3.4973281e+01
+   4.4050000e+01   3.5827603e+00   3.4972736e+01
+   4.4050000e+01   3.8425455e+00   3.4984074e+01
+   4.4050000e+01   4.3142231e+00   3.5036645e+01
+   4.4050000e+01   5.2460165e+00   3.5170777e+01
+   4.4050000e+01   6.6648926e+00   3.5382711e+01
+   4.4050000e+01   8.2569008e+00   3.5621149e+01
+   4.4050000e+01   9.2870413e+00   3.5722876e+01
+   4.4050000e+01   9.5328760e+00   3.5630785e+01
+   4.4050000e+01   9.9026364e+00   3.5537066e+01
+   4.4050000e+01   1.0298083e+01   3.5480702e+01
+   4.4050000e+01   1.0770826e+01   3.5489091e+01
+   4.4050000e+01   1.1255678e+01   3.5531455e+01
+   4.4050000e+01   1.1602421e+01   3.5566000e+01
+   4.4050000e+01   1.1914041e+01   3.5601397e+01
+   4.4050000e+01   1.2147298e+01   3.5626901e+01
+   4.4050000e+01   1.2343058e+01   3.5648785e+01
+   4.4050000e+01   1.2494471e+01   3.5664835e+01
+   4.4050000e+01   1.2597438e+01   3.5676273e+01
+   4.4050000e+01   1.2688149e+01   3.5686380e+01
+   4.4050000e+01   1.2785116e+01   3.5697636e+01
+   4.4050000e+01   1.2848306e+01   3.5705074e+01
+   4.4050000e+01   1.2914322e+01   3.5711992e+01
+   4.4050000e+01   1.3001628e+01   3.5721826e+01
+   4.4050000e+01   1.3051289e+01   3.5725025e+01
+   4.4050000e+01   1.3089132e+01   3.5727711e+01
+   4.4050000e+01   1.3142140e+01   3.5735612e+01
+   4.4050000e+01   1.3179091e+01   3.5738893e+01
+   4.4050000e+01   1.3225289e+01   3.5744364e+01
+   4.4050000e+01   1.3285380e+01   3.5750000e+01
+   4.4050000e+01   1.3351380e+01   3.5760339e+01
+   4.4050000e+01   1.3413512e+01   3.5768570e+01
+   4.4050000e+01   1.3485198e+01   3.5776364e+01
+   4.4050000e+01   1.3539636e+01   3.5778083e+01
+   4.4050000e+01   1.3586083e+01   3.5781620e+01
+   4.4050000e+01   1.3649860e+01   3.5788785e+01
+   4.4050000e+01   1.3724041e+01   3.5795174e+01
+   4.4050000e+01   1.3795636e+01   3.5799347e+01
+   4.4050000e+01   1.3896884e+01   3.5810504e+01
+   4.4050000e+01   1.4007802e+01   3.5819636e+01
+   4.4050000e+01   1.4119207e+01   3.5823149e+01
+   4.4050000e+01   1.4275008e+01   3.5831579e+01
+   4.4050000e+01   1.4495909e+01   3.5833537e+01
+   4.4050000e+01   1.4732562e+01   3.5837397e+01
+   4.4050000e+01   1.4997446e+01   3.5833347e+01
+   4.4050000e+01   1.5706603e+01   3.5837281e+01
+   4.4050000e+01   1.6613545e+01   3.5844116e+01
+   4.4050000e+01   1.7261298e+01   3.5850289e+01
+   4.4050000e+01   1.8017446e+01   3.5853281e+01
+   4.4050000e+01   1.8879421e+01   3.5867727e+01
+   4.4050000e+01   1.9534612e+01   3.5871678e+01
+   4.4050000e+01   1.9774289e+01   3.5868719e+01
+   4.4050000e+01   1.9845992e+01   3.5868760e+01
+   4.4050000e+01   1.9857645e+01   3.5869248e+01
+   4.4050000e+01   1.9858744e+01   3.5869810e+01
+   4.4050000e+01   1.9851843e+01   3.5868702e+01
+   4.4050000e+01   1.9795959e+01   3.5873008e+01
+   4.4100000e+01   2.5103554e+00   3.4896107e+01
+   4.4100000e+01   2.5061901e+00   3.4902207e+01
+   4.4100000e+01   2.5121488e+00   3.4907306e+01
+   4.4100000e+01   2.5413554e+00   3.4914521e+01
+   4.4100000e+01   2.5794959e+00   3.4919405e+01
+   4.4100000e+01   2.6451405e+00   3.4928736e+01
+   4.4100000e+01   2.7416281e+00   3.4940488e+01
+   4.4100000e+01   2.8990331e+00   3.4952802e+01
+   4.4100000e+01   3.0880496e+00   3.4961322e+01
+   4.4100000e+01   3.3536529e+00   3.4973281e+01
+   4.4100000e+01   3.5827603e+00   3.4972736e+01
+   4.4100000e+01   3.8425455e+00   3.4984074e+01
+   4.4100000e+01   4.3142231e+00   3.5036645e+01
+   4.4100000e+01   5.2460165e+00   3.5170777e+01
+   4.4100000e+01   6.6648926e+00   3.5382711e+01
+   4.4100000e+01   8.2569008e+00   3.5621149e+01
+   4.4100000e+01   9.2870413e+00   3.5722876e+01
+   4.4100000e+01   9.5328760e+00   3.5630785e+01
+   4.4100000e+01   9.9026364e+00   3.5537066e+01
+   4.4100000e+01   1.0298083e+01   3.5480702e+01
+   4.4100000e+01   1.0770826e+01   3.5489091e+01
+   4.4100000e+01   1.1255678e+01   3.5531455e+01
+   4.4100000e+01   1.1602421e+01   3.5566000e+01
+   4.4100000e+01   1.1914041e+01   3.5601397e+01
+   4.4100000e+01   1.2147298e+01   3.5626901e+01
+   4.4100000e+01   1.2343058e+01   3.5648785e+01
+   4.4100000e+01   1.2494471e+01   3.5664835e+01
+   4.4100000e+01   1.2597438e+01   3.5676273e+01
+   4.4100000e+01   1.2688149e+01   3.5686380e+01
+   4.4100000e+01   1.2785116e+01   3.5697636e+01
+   4.4100000e+01   1.2848306e+01   3.5705074e+01
+   4.4100000e+01   1.2914322e+01   3.5711992e+01
+   4.4100000e+01   1.3001628e+01   3.5721826e+01
+   4.4100000e+01   1.3051289e+01   3.5725025e+01
+   4.4100000e+01   1.3089132e+01   3.5727711e+01
+   4.4100000e+01   1.3142140e+01   3.5735612e+01
+   4.4100000e+01   1.3179091e+01   3.5738893e+01
+   4.4100000e+01   1.3225289e+01   3.5744364e+01
+   4.4100000e+01   1.3285380e+01   3.5750000e+01
+   4.4100000e+01   1.3351380e+01   3.5760339e+01
+   4.4100000e+01   1.3413512e+01   3.5768570e+01
+   4.4100000e+01   1.3485198e+01   3.5776364e+01
+   4.4100000e+01   1.3539636e+01   3.5778083e+01
+   4.4100000e+01   1.3586083e+01   3.5781620e+01
+   4.4100000e+01   1.3649860e+01   3.5788785e+01
+   4.4100000e+01   1.3724041e+01   3.5795174e+01
+   4.4100000e+01   1.3795636e+01   3.5799347e+01
+   4.4100000e+01   1.3896884e+01   3.5810504e+01
+   4.4100000e+01   1.4007802e+01   3.5819636e+01
+   4.4100000e+01   1.4119207e+01   3.5823149e+01
+   4.4100000e+01   1.4275008e+01   3.5831579e+01
+   4.4100000e+01   1.4495909e+01   3.5833537e+01
+   4.4100000e+01   1.4732562e+01   3.5837397e+01
+   4.4100000e+01   1.4997446e+01   3.5833347e+01
+   4.4100000e+01   1.5706603e+01   3.5837281e+01
+   4.4100000e+01   1.6613545e+01   3.5844116e+01
+   4.4100000e+01   1.7261298e+01   3.5850289e+01
+   4.4100000e+01   1.8017446e+01   3.5853281e+01
+   4.4100000e+01   1.8879421e+01   3.5867727e+01
+   4.4100000e+01   1.9534612e+01   3.5871678e+01
+   4.4100000e+01   1.9774289e+01   3.5868719e+01
+   4.4100000e+01   1.9845992e+01   3.5868760e+01
+   4.4100000e+01   1.9857645e+01   3.5869248e+01
+   4.4100000e+01   1.9858744e+01   3.5869810e+01
+   4.4100000e+01   1.9851843e+01   3.5868702e+01
+   4.4100000e+01   1.9795959e+01   3.5873008e+01
+   4.4150000e+01   2.5103554e+00   3.4896107e+01
+   4.4150000e+01   2.5061901e+00   3.4902207e+01
+   4.4150000e+01   2.5121488e+00   3.4907306e+01
+   4.4150000e+01   2.5413554e+00   3.4914521e+01
+   4.4150000e+01   2.5794959e+00   3.4919405e+01
+   4.4150000e+01   2.6451405e+00   3.4928736e+01
+   4.4150000e+01   2.7416281e+00   3.4940488e+01
+   4.4150000e+01   2.8990331e+00   3.4952802e+01
+   4.4150000e+01   3.0880496e+00   3.4961322e+01
+   4.4150000e+01   3.3536529e+00   3.4973281e+01
+   4.4150000e+01   3.5827603e+00   3.4972736e+01
+   4.4150000e+01   3.8425455e+00   3.4984074e+01
+   4.4150000e+01   4.3142231e+00   3.5036645e+01
+   4.4150000e+01   5.2460165e+00   3.5170777e+01
+   4.4150000e+01   6.6648926e+00   3.5382711e+01
+   4.4150000e+01   8.2569008e+00   3.5621149e+01
+   4.4150000e+01   9.2870413e+00   3.5722876e+01
+   4.4150000e+01   9.5328760e+00   3.5630785e+01
+   4.4150000e+01   9.9026364e+00   3.5537066e+01
+   4.4150000e+01   1.0298083e+01   3.5480702e+01
+   4.4150000e+01   1.0770826e+01   3.5489091e+01
+   4.4150000e+01   1.1255678e+01   3.5531455e+01
+   4.4150000e+01   1.1602421e+01   3.5566000e+01
+   4.4150000e+01   1.1914041e+01   3.5601397e+01
+   4.4150000e+01   1.2147298e+01   3.5626901e+01
+   4.4150000e+01   1.2343058e+01   3.5648785e+01
+   4.4150000e+01   1.2494471e+01   3.5664835e+01
+   4.4150000e+01   1.2597438e+01   3.5676273e+01
+   4.4150000e+01   1.2688149e+01   3.5686380e+01
+   4.4150000e+01   1.2785116e+01   3.5697636e+01
+   4.4150000e+01   1.2848306e+01   3.5705074e+01
+   4.4150000e+01   1.2914322e+01   3.5711992e+01
+   4.4150000e+01   1.3001628e+01   3.5721826e+01
+   4.4150000e+01   1.3051289e+01   3.5725025e+01
+   4.4150000e+01   1.3089132e+01   3.5727711e+01
+   4.4150000e+01   1.3142140e+01   3.5735612e+01
+   4.4150000e+01   1.3179091e+01   3.5738893e+01
+   4.4150000e+01   1.3225289e+01   3.5744364e+01
+   4.4150000e+01   1.3285380e+01   3.5750000e+01
+   4.4150000e+01   1.3351380e+01   3.5760339e+01
+   4.4150000e+01   1.3413512e+01   3.5768570e+01
+   4.4150000e+01   1.3485198e+01   3.5776364e+01
+   4.4150000e+01   1.3539636e+01   3.5778083e+01
+   4.4150000e+01   1.3586083e+01   3.5781620e+01
+   4.4150000e+01   1.3649860e+01   3.5788785e+01
+   4.4150000e+01   1.3724041e+01   3.5795174e+01
+   4.4150000e+01   1.3795636e+01   3.5799347e+01
+   4.4150000e+01   1.3896884e+01   3.5810504e+01
+   4.4150000e+01   1.4007802e+01   3.5819636e+01
+   4.4150000e+01   1.4119207e+01   3.5823149e+01
+   4.4150000e+01   1.4275008e+01   3.5831579e+01
+   4.4150000e+01   1.4495909e+01   3.5833537e+01
+   4.4150000e+01   1.4732562e+01   3.5837397e+01
+   4.4150000e+01   1.4997446e+01   3.5833347e+01
+   4.4150000e+01   1.5706603e+01   3.5837281e+01
+   4.4150000e+01   1.6613545e+01   3.5844116e+01
+   4.4150000e+01   1.7261298e+01   3.5850289e+01
+   4.4150000e+01   1.8017446e+01   3.5853281e+01
+   4.4150000e+01   1.8879421e+01   3.5867727e+01
+   4.4150000e+01   1.9534612e+01   3.5871678e+01
+   4.4150000e+01   1.9774289e+01   3.5868719e+01
+   4.4150000e+01   1.9845992e+01   3.5868760e+01
+   4.4150000e+01   1.9857645e+01   3.5869248e+01
+   4.4150000e+01   1.9858744e+01   3.5869810e+01
+   4.4150000e+01   1.9851843e+01   3.5868702e+01
+   4.4150000e+01   1.9795959e+01   3.5873008e+01
+   4.4200000e+01   2.5103554e+00   3.4896107e+01
+   4.4200000e+01   2.5061901e+00   3.4902207e+01
+   4.4200000e+01   2.5121488e+00   3.4907306e+01
+   4.4200000e+01   2.5413554e+00   3.4914521e+01
+   4.4200000e+01   2.5794959e+00   3.4919405e+01
+   4.4200000e+01   2.6451405e+00   3.4928736e+01
+   4.4200000e+01   2.7416281e+00   3.4940488e+01
+   4.4200000e+01   2.8990331e+00   3.4952802e+01
+   4.4200000e+01   3.0880496e+00   3.4961322e+01
+   4.4200000e+01   3.3536529e+00   3.4973281e+01
+   4.4200000e+01   3.5827603e+00   3.4972736e+01
+   4.4200000e+01   3.8425455e+00   3.4984074e+01
+   4.4200000e+01   4.3142231e+00   3.5036645e+01
+   4.4200000e+01   5.2460165e+00   3.5170777e+01
+   4.4200000e+01   6.6648926e+00   3.5382711e+01
+   4.4200000e+01   8.2569008e+00   3.5621149e+01
+   4.4200000e+01   9.2870413e+00   3.5722876e+01
+   4.4200000e+01   9.5328760e+00   3.5630785e+01
+   4.4200000e+01   9.9026364e+00   3.5537066e+01
+   4.4200000e+01   1.0298083e+01   3.5480702e+01
+   4.4200000e+01   1.0770826e+01   3.5489091e+01
+   4.4200000e+01   1.1255678e+01   3.5531455e+01
+   4.4200000e+01   1.1602421e+01   3.5566000e+01
+   4.4200000e+01   1.1914041e+01   3.5601397e+01
+   4.4200000e+01   1.2147298e+01   3.5626901e+01
+   4.4200000e+01   1.2343058e+01   3.5648785e+01
+   4.4200000e+01   1.2494471e+01   3.5664835e+01
+   4.4200000e+01   1.2597438e+01   3.5676273e+01
+   4.4200000e+01   1.2688149e+01   3.5686380e+01
+   4.4200000e+01   1.2785116e+01   3.5697636e+01
+   4.4200000e+01   1.2848306e+01   3.5705074e+01
+   4.4200000e+01   1.2914322e+01   3.5711992e+01
+   4.4200000e+01   1.3001628e+01   3.5721826e+01
+   4.4200000e+01   1.3051289e+01   3.5725025e+01
+   4.4200000e+01   1.3089132e+01   3.5727711e+01
+   4.4200000e+01   1.3142140e+01   3.5735612e+01
+   4.4200000e+01   1.3179091e+01   3.5738893e+01
+   4.4200000e+01   1.3225289e+01   3.5744364e+01
+   4.4200000e+01   1.3285380e+01   3.5750000e+01
+   4.4200000e+01   1.3351380e+01   3.5760339e+01
+   4.4200000e+01   1.3413512e+01   3.5768570e+01
+   4.4200000e+01   1.3485198e+01   3.5776364e+01
+   4.4200000e+01   1.3539636e+01   3.5778083e+01
+   4.4200000e+01   1.3586083e+01   3.5781620e+01
+   4.4200000e+01   1.3649860e+01   3.5788785e+01
+   4.4200000e+01   1.3724041e+01   3.5795174e+01
+   4.4200000e+01   1.3795636e+01   3.5799347e+01
+   4.4200000e+01   1.3896884e+01   3.5810504e+01
+   4.4200000e+01   1.4007802e+01   3.5819636e+01
+   4.4200000e+01   1.4119207e+01   3.5823149e+01
+   4.4200000e+01   1.4275008e+01   3.5831579e+01
+   4.4200000e+01   1.4495909e+01   3.5833537e+01
+   4.4200000e+01   1.4732562e+01   3.5837397e+01
+   4.4200000e+01   1.4997446e+01   3.5833347e+01
+   4.4200000e+01   1.5706603e+01   3.5837281e+01
+   4.4200000e+01   1.6613545e+01   3.5844116e+01
+   4.4200000e+01   1.7261298e+01   3.5850289e+01
+   4.4200000e+01   1.8017446e+01   3.5853281e+01
+   4.4200000e+01   1.8879421e+01   3.5867727e+01
+   4.4200000e+01   1.9534612e+01   3.5871678e+01
+   4.4200000e+01   1.9774289e+01   3.5868719e+01
+   4.4200000e+01   1.9845992e+01   3.5868760e+01
+   4.4200000e+01   1.9857645e+01   3.5869248e+01
+   4.4200000e+01   1.9858744e+01   3.5869810e+01
+   4.4200000e+01   1.9851843e+01   3.5868702e+01
+   4.4200000e+01   1.9795959e+01   3.5873008e+01
+   4.4250000e+01   2.5103554e+00   3.4896107e+01
+   4.4250000e+01   2.5061901e+00   3.4902207e+01
+   4.4250000e+01   2.5121488e+00   3.4907306e+01
+   4.4250000e+01   2.5413554e+00   3.4914521e+01
+   4.4250000e+01   2.5794959e+00   3.4919405e+01
+   4.4250000e+01   2.6451405e+00   3.4928736e+01
+   4.4250000e+01   2.7416281e+00   3.4940488e+01
+   4.4250000e+01   2.8990331e+00   3.4952802e+01
+   4.4250000e+01   3.0880496e+00   3.4961322e+01
+   4.4250000e+01   3.3536529e+00   3.4973281e+01
+   4.4250000e+01   3.5827603e+00   3.4972736e+01
+   4.4250000e+01   3.8425455e+00   3.4984074e+01
+   4.4250000e+01   4.3142231e+00   3.5036645e+01
+   4.4250000e+01   5.2460165e+00   3.5170777e+01
+   4.4250000e+01   6.6648926e+00   3.5382711e+01
+   4.4250000e+01   8.2569008e+00   3.5621149e+01
+   4.4250000e+01   9.2870413e+00   3.5722876e+01
+   4.4250000e+01   9.5328760e+00   3.5630785e+01
+   4.4250000e+01   9.9026364e+00   3.5537066e+01
+   4.4250000e+01   1.0298083e+01   3.5480702e+01
+   4.4250000e+01   1.0770826e+01   3.5489091e+01
+   4.4250000e+01   1.1255678e+01   3.5531455e+01
+   4.4250000e+01   1.1602421e+01   3.5566000e+01
+   4.4250000e+01   1.1914041e+01   3.5601397e+01
+   4.4250000e+01   1.2147298e+01   3.5626901e+01
+   4.4250000e+01   1.2343058e+01   3.5648785e+01
+   4.4250000e+01   1.2494471e+01   3.5664835e+01
+   4.4250000e+01   1.2597438e+01   3.5676273e+01
+   4.4250000e+01   1.2688149e+01   3.5686380e+01
+   4.4250000e+01   1.2785116e+01   3.5697636e+01
+   4.4250000e+01   1.2848306e+01   3.5705074e+01
+   4.4250000e+01   1.2914322e+01   3.5711992e+01
+   4.4250000e+01   1.3001628e+01   3.5721826e+01
+   4.4250000e+01   1.3051289e+01   3.5725025e+01
+   4.4250000e+01   1.3089132e+01   3.5727711e+01
+   4.4250000e+01   1.3142140e+01   3.5735612e+01
+   4.4250000e+01   1.3179091e+01   3.5738893e+01
+   4.4250000e+01   1.3225289e+01   3.5744364e+01
+   4.4250000e+01   1.3285380e+01   3.5750000e+01
+   4.4250000e+01   1.3351380e+01   3.5760339e+01
+   4.4250000e+01   1.3413512e+01   3.5768570e+01
+   4.4250000e+01   1.3485198e+01   3.5776364e+01
+   4.4250000e+01   1.3539636e+01   3.5778083e+01
+   4.4250000e+01   1.3586083e+01   3.5781620e+01
+   4.4250000e+01   1.3649860e+01   3.5788785e+01
+   4.4250000e+01   1.3724041e+01   3.5795174e+01
+   4.4250000e+01   1.3795636e+01   3.5799347e+01
+   4.4250000e+01   1.3896884e+01   3.5810504e+01
+   4.4250000e+01   1.4007802e+01   3.5819636e+01
+   4.4250000e+01   1.4119207e+01   3.5823149e+01
+   4.4250000e+01   1.4275008e+01   3.5831579e+01
+   4.4250000e+01   1.4495909e+01   3.5833537e+01
+   4.4250000e+01   1.4732562e+01   3.5837397e+01
+   4.4250000e+01   1.4997446e+01   3.5833347e+01
+   4.4250000e+01   1.5706603e+01   3.5837281e+01
+   4.4250000e+01   1.6613545e+01   3.5844116e+01
+   4.4250000e+01   1.7261298e+01   3.5850289e+01
+   4.4250000e+01   1.8017446e+01   3.5853281e+01
+   4.4250000e+01   1.8879421e+01   3.5867727e+01
+   4.4250000e+01   1.9534612e+01   3.5871678e+01
+   4.4250000e+01   1.9774289e+01   3.5868719e+01
+   4.4250000e+01   1.9845992e+01   3.5868760e+01
+   4.4250000e+01   1.9857645e+01   3.5869248e+01
+   4.4250000e+01   1.9858744e+01   3.5869810e+01
+   4.4250000e+01   1.9851843e+01   3.5868702e+01
+   4.4250000e+01   1.9795959e+01   3.5873008e+01
+   4.4300000e+01   2.5103554e+00   3.4896107e+01
+   4.4300000e+01   2.5061901e+00   3.4902207e+01
+   4.4300000e+01   2.5121488e+00   3.4907306e+01
+   4.4300000e+01   2.5413554e+00   3.4914521e+01
+   4.4300000e+01   2.5794959e+00   3.4919405e+01
+   4.4300000e+01   2.6451405e+00   3.4928736e+01
+   4.4300000e+01   2.7416281e+00   3.4940488e+01
+   4.4300000e+01   2.8990331e+00   3.4952802e+01
+   4.4300000e+01   3.0880496e+00   3.4961322e+01
+   4.4300000e+01   3.3536529e+00   3.4973281e+01
+   4.4300000e+01   3.5827603e+00   3.4972736e+01
+   4.4300000e+01   3.8425455e+00   3.4984074e+01
+   4.4300000e+01   4.3142231e+00   3.5036645e+01
+   4.4300000e+01   5.2460165e+00   3.5170777e+01
+   4.4300000e+01   6.6648926e+00   3.5382711e+01
+   4.4300000e+01   8.2569008e+00   3.5621149e+01
+   4.4300000e+01   9.2870413e+00   3.5722876e+01
+   4.4300000e+01   9.5328760e+00   3.5630785e+01
+   4.4300000e+01   9.9026364e+00   3.5537066e+01
+   4.4300000e+01   1.0298083e+01   3.5480702e+01
+   4.4300000e+01   1.0770826e+01   3.5489091e+01
+   4.4300000e+01   1.1255678e+01   3.5531455e+01
+   4.4300000e+01   1.1602421e+01   3.5566000e+01
+   4.4300000e+01   1.1914041e+01   3.5601397e+01
+   4.4300000e+01   1.2147298e+01   3.5626901e+01
+   4.4300000e+01   1.2343058e+01   3.5648785e+01
+   4.4300000e+01   1.2494471e+01   3.5664835e+01
+   4.4300000e+01   1.2597438e+01   3.5676273e+01
+   4.4300000e+01   1.2688149e+01   3.5686380e+01
+   4.4300000e+01   1.2785116e+01   3.5697636e+01
+   4.4300000e+01   1.2848306e+01   3.5705074e+01
+   4.4300000e+01   1.2914322e+01   3.5711992e+01
+   4.4300000e+01   1.3001628e+01   3.5721826e+01
+   4.4300000e+01   1.3051289e+01   3.5725025e+01
+   4.4300000e+01   1.3089132e+01   3.5727711e+01
+   4.4300000e+01   1.3142140e+01   3.5735612e+01
+   4.4300000e+01   1.3179091e+01   3.5738893e+01
+   4.4300000e+01   1.3225289e+01   3.5744364e+01
+   4.4300000e+01   1.3285380e+01   3.5750000e+01
+   4.4300000e+01   1.3351380e+01   3.5760339e+01
+   4.4300000e+01   1.3413512e+01   3.5768570e+01
+   4.4300000e+01   1.3485198e+01   3.5776364e+01
+   4.4300000e+01   1.3539636e+01   3.5778083e+01
+   4.4300000e+01   1.3586083e+01   3.5781620e+01
+   4.4300000e+01   1.3649860e+01   3.5788785e+01
+   4.4300000e+01   1.3724041e+01   3.5795174e+01
+   4.4300000e+01   1.3795636e+01   3.5799347e+01
+   4.4300000e+01   1.3896884e+01   3.5810504e+01
+   4.4300000e+01   1.4007802e+01   3.5819636e+01
+   4.4300000e+01   1.4119207e+01   3.5823149e+01
+   4.4300000e+01   1.4275008e+01   3.5831579e+01
+   4.4300000e+01   1.4495909e+01   3.5833537e+01
+   4.4300000e+01   1.4732562e+01   3.5837397e+01
+   4.4300000e+01   1.4997446e+01   3.5833347e+01
+   4.4300000e+01   1.5706603e+01   3.5837281e+01
+   4.4300000e+01   1.6613545e+01   3.5844116e+01
+   4.4300000e+01   1.7261298e+01   3.5850289e+01
+   4.4300000e+01   1.8017446e+01   3.5853281e+01
+   4.4300000e+01   1.8879421e+01   3.5867727e+01
+   4.4300000e+01   1.9534612e+01   3.5871678e+01
+   4.4300000e+01   1.9774289e+01   3.5868719e+01
+   4.4300000e+01   1.9845992e+01   3.5868760e+01
+   4.4300000e+01   1.9857645e+01   3.5869248e+01
+   4.4300000e+01   1.9858744e+01   3.5869810e+01
+   4.4300000e+01   1.9851843e+01   3.5868702e+01
+   4.4300000e+01   1.9795959e+01   3.5873008e+01
+   4.4350000e+01   2.5103554e+00   3.4896107e+01
+   4.4350000e+01   2.5061901e+00   3.4902207e+01
+   4.4350000e+01   2.5121488e+00   3.4907306e+01
+   4.4350000e+01   2.5413554e+00   3.4914521e+01
+   4.4350000e+01   2.5794959e+00   3.4919405e+01
+   4.4350000e+01   2.6451405e+00   3.4928736e+01
+   4.4350000e+01   2.7416281e+00   3.4940488e+01
+   4.4350000e+01   2.8990331e+00   3.4952802e+01
+   4.4350000e+01   3.0880496e+00   3.4961322e+01
+   4.4350000e+01   3.3536529e+00   3.4973281e+01
+   4.4350000e+01   3.5827603e+00   3.4972736e+01
+   4.4350000e+01   3.8425455e+00   3.4984074e+01
+   4.4350000e+01   4.3142231e+00   3.5036645e+01
+   4.4350000e+01   5.2460165e+00   3.5170777e+01
+   4.4350000e+01   6.6648926e+00   3.5382711e+01
+   4.4350000e+01   8.2569008e+00   3.5621149e+01
+   4.4350000e+01   9.2870413e+00   3.5722876e+01
+   4.4350000e+01   9.5328760e+00   3.5630785e+01
+   4.4350000e+01   9.9026364e+00   3.5537066e+01
+   4.4350000e+01   1.0298083e+01   3.5480702e+01
+   4.4350000e+01   1.0770826e+01   3.5489091e+01
+   4.4350000e+01   1.1255678e+01   3.5531455e+01
+   4.4350000e+01   1.1602421e+01   3.5566000e+01
+   4.4350000e+01   1.1914041e+01   3.5601397e+01
+   4.4350000e+01   1.2147298e+01   3.5626901e+01
+   4.4350000e+01   1.2343058e+01   3.5648785e+01
+   4.4350000e+01   1.2494471e+01   3.5664835e+01
+   4.4350000e+01   1.2597438e+01   3.5676273e+01
+   4.4350000e+01   1.2688149e+01   3.5686380e+01
+   4.4350000e+01   1.2785116e+01   3.5697636e+01
+   4.4350000e+01   1.2848306e+01   3.5705074e+01
+   4.4350000e+01   1.2914322e+01   3.5711992e+01
+   4.4350000e+01   1.3001628e+01   3.5721826e+01
+   4.4350000e+01   1.3051289e+01   3.5725025e+01
+   4.4350000e+01   1.3089132e+01   3.5727711e+01
+   4.4350000e+01   1.3142140e+01   3.5735612e+01
+   4.4350000e+01   1.3179091e+01   3.5738893e+01
+   4.4350000e+01   1.3225289e+01   3.5744364e+01
+   4.4350000e+01   1.3285380e+01   3.5750000e+01
+   4.4350000e+01   1.3351380e+01   3.5760339e+01
+   4.4350000e+01   1.3413512e+01   3.5768570e+01
+   4.4350000e+01   1.3485198e+01   3.5776364e+01
+   4.4350000e+01   1.3539636e+01   3.5778083e+01
+   4.4350000e+01   1.3586083e+01   3.5781620e+01
+   4.4350000e+01   1.3649860e+01   3.5788785e+01
+   4.4350000e+01   1.3724041e+01   3.5795174e+01
+   4.4350000e+01   1.3795636e+01   3.5799347e+01
+   4.4350000e+01   1.3896884e+01   3.5810504e+01
+   4.4350000e+01   1.4007802e+01   3.5819636e+01
+   4.4350000e+01   1.4119207e+01   3.5823149e+01
+   4.4350000e+01   1.4275008e+01   3.5831579e+01
+   4.4350000e+01   1.4495909e+01   3.5833537e+01
+   4.4350000e+01   1.4732562e+01   3.5837397e+01
+   4.4350000e+01   1.4997446e+01   3.5833347e+01
+   4.4350000e+01   1.5706603e+01   3.5837281e+01
+   4.4350000e+01   1.6613545e+01   3.5844116e+01
+   4.4350000e+01   1.7261298e+01   3.5850289e+01
+   4.4350000e+01   1.8017446e+01   3.5853281e+01
+   4.4350000e+01   1.8879421e+01   3.5867727e+01
+   4.4350000e+01   1.9534612e+01   3.5871678e+01
+   4.4350000e+01   1.9774289e+01   3.5868719e+01
+   4.4350000e+01   1.9845992e+01   3.5868760e+01
+   4.4350000e+01   1.9857645e+01   3.5869248e+01
+   4.4350000e+01   1.9858744e+01   3.5869810e+01
+   4.4350000e+01   1.9851843e+01   3.5868702e+01
+   4.4350000e+01   1.9795959e+01   3.5873008e+01
+   4.4400000e+01   2.5103554e+00   3.4896107e+01
+   4.4400000e+01   2.5061901e+00   3.4902207e+01
+   4.4400000e+01   2.5121488e+00   3.4907306e+01
+   4.4400000e+01   2.5413554e+00   3.4914521e+01
+   4.4400000e+01   2.5794959e+00   3.4919405e+01
+   4.4400000e+01   2.6451405e+00   3.4928736e+01
+   4.4400000e+01   2.7416281e+00   3.4940488e+01
+   4.4400000e+01   2.8990331e+00   3.4952802e+01
+   4.4400000e+01   3.0880496e+00   3.4961322e+01
+   4.4400000e+01   3.3536529e+00   3.4973281e+01
+   4.4400000e+01   3.5827603e+00   3.4972736e+01
+   4.4400000e+01   3.8425455e+00   3.4984074e+01
+   4.4400000e+01   4.3142231e+00   3.5036645e+01
+   4.4400000e+01   5.2460165e+00   3.5170777e+01
+   4.4400000e+01   6.6648926e+00   3.5382711e+01
+   4.4400000e+01   8.2569008e+00   3.5621149e+01
+   4.4400000e+01   9.2870413e+00   3.5722876e+01
+   4.4400000e+01   9.5328760e+00   3.5630785e+01
+   4.4400000e+01   9.9026364e+00   3.5537066e+01
+   4.4400000e+01   1.0298083e+01   3.5480702e+01
+   4.4400000e+01   1.0770826e+01   3.5489091e+01
+   4.4400000e+01   1.1255678e+01   3.5531455e+01
+   4.4400000e+01   1.1602421e+01   3.5566000e+01
+   4.4400000e+01   1.1914041e+01   3.5601397e+01
+   4.4400000e+01   1.2147298e+01   3.5626901e+01
+   4.4400000e+01   1.2343058e+01   3.5648785e+01
+   4.4400000e+01   1.2494471e+01   3.5664835e+01
+   4.4400000e+01   1.2597438e+01   3.5676273e+01
+   4.4400000e+01   1.2688149e+01   3.5686380e+01
+   4.4400000e+01   1.2785116e+01   3.5697636e+01
+   4.4400000e+01   1.2848306e+01   3.5705074e+01
+   4.4400000e+01   1.2914322e+01   3.5711992e+01
+   4.4400000e+01   1.3001628e+01   3.5721826e+01
+   4.4400000e+01   1.3051289e+01   3.5725025e+01
+   4.4400000e+01   1.3089132e+01   3.5727711e+01
+   4.4400000e+01   1.3142140e+01   3.5735612e+01
+   4.4400000e+01   1.3179091e+01   3.5738893e+01
+   4.4400000e+01   1.3225289e+01   3.5744364e+01
+   4.4400000e+01   1.3285380e+01   3.5750000e+01
+   4.4400000e+01   1.3351380e+01   3.5760339e+01
+   4.4400000e+01   1.3413512e+01   3.5768570e+01
+   4.4400000e+01   1.3485198e+01   3.5776364e+01
+   4.4400000e+01   1.3539636e+01   3.5778083e+01
+   4.4400000e+01   1.3586083e+01   3.5781620e+01
+   4.4400000e+01   1.3649860e+01   3.5788785e+01
+   4.4400000e+01   1.3724041e+01   3.5795174e+01
+   4.4400000e+01   1.3795636e+01   3.5799347e+01
+   4.4400000e+01   1.3896884e+01   3.5810504e+01
+   4.4400000e+01   1.4007802e+01   3.5819636e+01
+   4.4400000e+01   1.4119207e+01   3.5823149e+01
+   4.4400000e+01   1.4275008e+01   3.5831579e+01
+   4.4400000e+01   1.4495909e+01   3.5833537e+01
+   4.4400000e+01   1.4732562e+01   3.5837397e+01
+   4.4400000e+01   1.4997446e+01   3.5833347e+01
+   4.4400000e+01   1.5706603e+01   3.5837281e+01
+   4.4400000e+01   1.6613545e+01   3.5844116e+01
+   4.4400000e+01   1.7261298e+01   3.5850289e+01
+   4.4400000e+01   1.8017446e+01   3.5853281e+01
+   4.4400000e+01   1.8879421e+01   3.5867727e+01
+   4.4400000e+01   1.9534612e+01   3.5871678e+01
+   4.4400000e+01   1.9774289e+01   3.5868719e+01
+   4.4400000e+01   1.9845992e+01   3.5868760e+01
+   4.4400000e+01   1.9857645e+01   3.5869248e+01
+   4.4400000e+01   1.9858744e+01   3.5869810e+01
+   4.4400000e+01   1.9851843e+01   3.5868702e+01
+   4.4400000e+01   1.9795959e+01   3.5873008e+01
+   4.4450000e+01   2.5103554e+00   3.4896107e+01
+   4.4450000e+01   2.5061901e+00   3.4902207e+01
+   4.4450000e+01   2.5121488e+00   3.4907306e+01
+   4.4450000e+01   2.5413554e+00   3.4914521e+01
+   4.4450000e+01   2.5794959e+00   3.4919405e+01
+   4.4450000e+01   2.6451405e+00   3.4928736e+01
+   4.4450000e+01   2.7416281e+00   3.4940488e+01
+   4.4450000e+01   2.8990331e+00   3.4952802e+01
+   4.4450000e+01   3.0880496e+00   3.4961322e+01
+   4.4450000e+01   3.3536529e+00   3.4973281e+01
+   4.4450000e+01   3.5827603e+00   3.4972736e+01
+   4.4450000e+01   3.8425455e+00   3.4984074e+01
+   4.4450000e+01   4.3142231e+00   3.5036645e+01
+   4.4450000e+01   5.2460165e+00   3.5170777e+01
+   4.4450000e+01   6.6648926e+00   3.5382711e+01
+   4.4450000e+01   8.2569008e+00   3.5621149e+01
+   4.4450000e+01   9.2870413e+00   3.5722876e+01
+   4.4450000e+01   9.5328760e+00   3.5630785e+01
+   4.4450000e+01   9.9026364e+00   3.5537066e+01
+   4.4450000e+01   1.0298083e+01   3.5480702e+01
+   4.4450000e+01   1.0770826e+01   3.5489091e+01
+   4.4450000e+01   1.1255678e+01   3.5531455e+01
+   4.4450000e+01   1.1602421e+01   3.5566000e+01
+   4.4450000e+01   1.1914041e+01   3.5601397e+01
+   4.4450000e+01   1.2147298e+01   3.5626901e+01
+   4.4450000e+01   1.2343058e+01   3.5648785e+01
+   4.4450000e+01   1.2494471e+01   3.5664835e+01
+   4.4450000e+01   1.2597438e+01   3.5676273e+01
+   4.4450000e+01   1.2688149e+01   3.5686380e+01
+   4.4450000e+01   1.2785116e+01   3.5697636e+01
+   4.4450000e+01   1.2848306e+01   3.5705074e+01
+   4.4450000e+01   1.2914322e+01   3.5711992e+01
+   4.4450000e+01   1.3001628e+01   3.5721826e+01
+   4.4450000e+01   1.3051289e+01   3.5725025e+01
+   4.4450000e+01   1.3089132e+01   3.5727711e+01
+   4.4450000e+01   1.3142140e+01   3.5735612e+01
+   4.4450000e+01   1.3179091e+01   3.5738893e+01
+   4.4450000e+01   1.3225289e+01   3.5744364e+01
+   4.4450000e+01   1.3285380e+01   3.5750000e+01
+   4.4450000e+01   1.3351380e+01   3.5760339e+01
+   4.4450000e+01   1.3413512e+01   3.5768570e+01
+   4.4450000e+01   1.3485198e+01   3.5776364e+01
+   4.4450000e+01   1.3539636e+01   3.5778083e+01
+   4.4450000e+01   1.3586083e+01   3.5781620e+01
+   4.4450000e+01   1.3649860e+01   3.5788785e+01
+   4.4450000e+01   1.3724041e+01   3.5795174e+01
+   4.4450000e+01   1.3795636e+01   3.5799347e+01
+   4.4450000e+01   1.3896884e+01   3.5810504e+01
+   4.4450000e+01   1.4007802e+01   3.5819636e+01
+   4.4450000e+01   1.4119207e+01   3.5823149e+01
+   4.4450000e+01   1.4275008e+01   3.5831579e+01
+   4.4450000e+01   1.4495909e+01   3.5833537e+01
+   4.4450000e+01   1.4732562e+01   3.5837397e+01
+   4.4450000e+01   1.4997446e+01   3.5833347e+01
+   4.4450000e+01   1.5706603e+01   3.5837281e+01
+   4.4450000e+01   1.6613545e+01   3.5844116e+01
+   4.4450000e+01   1.7261298e+01   3.5850289e+01
+   4.4450000e+01   1.8017446e+01   3.5853281e+01
+   4.4450000e+01   1.8879421e+01   3.5867727e+01
+   4.4450000e+01   1.9534612e+01   3.5871678e+01
+   4.4450000e+01   1.9774289e+01   3.5868719e+01
+   4.4450000e+01   1.9845992e+01   3.5868760e+01
+   4.4450000e+01   1.9857645e+01   3.5869248e+01
+   4.4450000e+01   1.9858744e+01   3.5869810e+01
+   4.4450000e+01   1.9851843e+01   3.5868702e+01
+   4.4450000e+01   1.9795959e+01   3.5873008e+01
+   4.4500000e+01   2.5103554e+00   3.4896107e+01
+   4.4500000e+01   2.5061901e+00   3.4902207e+01
+   4.4500000e+01   2.5121488e+00   3.4907306e+01
+   4.4500000e+01   2.5413554e+00   3.4914521e+01
+   4.4500000e+01   2.5794959e+00   3.4919405e+01
+   4.4500000e+01   2.6451405e+00   3.4928736e+01
+   4.4500000e+01   2.7416281e+00   3.4940488e+01
+   4.4500000e+01   2.8990331e+00   3.4952802e+01
+   4.4500000e+01   3.0880496e+00   3.4961322e+01
+   4.4500000e+01   3.3536529e+00   3.4973281e+01
+   4.4500000e+01   3.5827603e+00   3.4972736e+01
+   4.4500000e+01   3.8425455e+00   3.4984074e+01
+   4.4500000e+01   4.3142231e+00   3.5036645e+01
+   4.4500000e+01   5.2460165e+00   3.5170777e+01
+   4.4500000e+01   6.6648926e+00   3.5382711e+01
+   4.4500000e+01   8.2569008e+00   3.5621149e+01
+   4.4500000e+01   9.2870413e+00   3.5722876e+01
+   4.4500000e+01   9.5328760e+00   3.5630785e+01
+   4.4500000e+01   9.9026364e+00   3.5537066e+01
+   4.4500000e+01   1.0298083e+01   3.5480702e+01
+   4.4500000e+01   1.0770826e+01   3.5489091e+01
+   4.4500000e+01   1.1255678e+01   3.5531455e+01
+   4.4500000e+01   1.1602421e+01   3.5566000e+01
+   4.4500000e+01   1.1914041e+01   3.5601397e+01
+   4.4500000e+01   1.2147298e+01   3.5626901e+01
+   4.4500000e+01   1.2343058e+01   3.5648785e+01
+   4.4500000e+01   1.2494471e+01   3.5664835e+01
+   4.4500000e+01   1.2597438e+01   3.5676273e+01
+   4.4500000e+01   1.2688149e+01   3.5686380e+01
+   4.4500000e+01   1.2785116e+01   3.5697636e+01
+   4.4500000e+01   1.2848306e+01   3.5705074e+01
+   4.4500000e+01   1.2914322e+01   3.5711992e+01
+   4.4500000e+01   1.3001628e+01   3.5721826e+01
+   4.4500000e+01   1.3051289e+01   3.5725025e+01
+   4.4500000e+01   1.3089132e+01   3.5727711e+01
+   4.4500000e+01   1.3142140e+01   3.5735612e+01
+   4.4500000e+01   1.3179091e+01   3.5738893e+01
+   4.4500000e+01   1.3225289e+01   3.5744364e+01
+   4.4500000e+01   1.3285380e+01   3.5750000e+01
+   4.4500000e+01   1.3351380e+01   3.5760339e+01
+   4.4500000e+01   1.3413512e+01   3.5768570e+01
+   4.4500000e+01   1.3485198e+01   3.5776364e+01
+   4.4500000e+01   1.3539636e+01   3.5778083e+01
+   4.4500000e+01   1.3586083e+01   3.5781620e+01
+   4.4500000e+01   1.3649860e+01   3.5788785e+01
+   4.4500000e+01   1.3724041e+01   3.5795174e+01
+   4.4500000e+01   1.3795636e+01   3.5799347e+01
+   4.4500000e+01   1.3896884e+01   3.5810504e+01
+   4.4500000e+01   1.4007802e+01   3.5819636e+01
+   4.4500000e+01   1.4119207e+01   3.5823149e+01
+   4.4500000e+01   1.4275008e+01   3.5831579e+01
+   4.4500000e+01   1.4495909e+01   3.5833537e+01
+   4.4500000e+01   1.4732562e+01   3.5837397e+01
+   4.4500000e+01   1.4997446e+01   3.5833347e+01
+   4.4500000e+01   1.5706603e+01   3.5837281e+01
+   4.4500000e+01   1.6613545e+01   3.5844116e+01
+   4.4500000e+01   1.7261298e+01   3.5850289e+01
+   4.4500000e+01   1.8017446e+01   3.5853281e+01
+   4.4500000e+01   1.8879421e+01   3.5867727e+01
+   4.4500000e+01   1.9534612e+01   3.5871678e+01
+   4.4500000e+01   1.9774289e+01   3.5868719e+01
+   4.4500000e+01   1.9845992e+01   3.5868760e+01
+   4.4500000e+01   1.9857645e+01   3.5869248e+01
+   4.4500000e+01   1.9858744e+01   3.5869810e+01
+   4.4500000e+01   1.9851843e+01   3.5868702e+01
+   4.4500000e+01   1.9795959e+01   3.5873008e+01
+   4.4550000e+01   2.5103554e+00   3.4896107e+01
+   4.4550000e+01   2.5061901e+00   3.4902207e+01
+   4.4550000e+01   2.5121488e+00   3.4907306e+01
+   4.4550000e+01   2.5413554e+00   3.4914521e+01
+   4.4550000e+01   2.5794959e+00   3.4919405e+01
+   4.4550000e+01   2.6451405e+00   3.4928736e+01
+   4.4550000e+01   2.7416281e+00   3.4940488e+01
+   4.4550000e+01   2.8990331e+00   3.4952802e+01
+   4.4550000e+01   3.0880496e+00   3.4961322e+01
+   4.4550000e+01   3.3536529e+00   3.4973281e+01
+   4.4550000e+01   3.5827603e+00   3.4972736e+01
+   4.4550000e+01   3.8425455e+00   3.4984074e+01
+   4.4550000e+01   4.3142231e+00   3.5036645e+01
+   4.4550000e+01   5.2460165e+00   3.5170777e+01
+   4.4550000e+01   6.6648926e+00   3.5382711e+01
+   4.4550000e+01   8.2569008e+00   3.5621149e+01
+   4.4550000e+01   9.2870413e+00   3.5722876e+01
+   4.4550000e+01   9.5328760e+00   3.5630785e+01
+   4.4550000e+01   9.9026364e+00   3.5537066e+01
+   4.4550000e+01   1.0298083e+01   3.5480702e+01
+   4.4550000e+01   1.0770826e+01   3.5489091e+01
+   4.4550000e+01   1.1255678e+01   3.5531455e+01
+   4.4550000e+01   1.1602421e+01   3.5566000e+01
+   4.4550000e+01   1.1914041e+01   3.5601397e+01
+   4.4550000e+01   1.2147298e+01   3.5626901e+01
+   4.4550000e+01   1.2343058e+01   3.5648785e+01
+   4.4550000e+01   1.2494471e+01   3.5664835e+01
+   4.4550000e+01   1.2597438e+01   3.5676273e+01
+   4.4550000e+01   1.2688149e+01   3.5686380e+01
+   4.4550000e+01   1.2785116e+01   3.5697636e+01
+   4.4550000e+01   1.2848306e+01   3.5705074e+01
+   4.4550000e+01   1.2914322e+01   3.5711992e+01
+   4.4550000e+01   1.3001628e+01   3.5721826e+01
+   4.4550000e+01   1.3051289e+01   3.5725025e+01
+   4.4550000e+01   1.3089132e+01   3.5727711e+01
+   4.4550000e+01   1.3142140e+01   3.5735612e+01
+   4.4550000e+01   1.3179091e+01   3.5738893e+01
+   4.4550000e+01   1.3225289e+01   3.5744364e+01
+   4.4550000e+01   1.3285380e+01   3.5750000e+01
+   4.4550000e+01   1.3351380e+01   3.5760339e+01
+   4.4550000e+01   1.3413512e+01   3.5768570e+01
+   4.4550000e+01   1.3485198e+01   3.5776364e+01
+   4.4550000e+01   1.3539636e+01   3.5778083e+01
+   4.4550000e+01   1.3586083e+01   3.5781620e+01
+   4.4550000e+01   1.3649860e+01   3.5788785e+01
+   4.4550000e+01   1.3724041e+01   3.5795174e+01
+   4.4550000e+01   1.3795636e+01   3.5799347e+01
+   4.4550000e+01   1.3896884e+01   3.5810504e+01
+   4.4550000e+01   1.4007802e+01   3.5819636e+01
+   4.4550000e+01   1.4119207e+01   3.5823149e+01
+   4.4550000e+01   1.4275008e+01   3.5831579e+01
+   4.4550000e+01   1.4495909e+01   3.5833537e+01
+   4.4550000e+01   1.4732562e+01   3.5837397e+01
+   4.4550000e+01   1.4997446e+01   3.5833347e+01
+   4.4550000e+01   1.5706603e+01   3.5837281e+01
+   4.4550000e+01   1.6613545e+01   3.5844116e+01
+   4.4550000e+01   1.7261298e+01   3.5850289e+01
+   4.4550000e+01   1.8017446e+01   3.5853281e+01
+   4.4550000e+01   1.8879421e+01   3.5867727e+01
+   4.4550000e+01   1.9534612e+01   3.5871678e+01
+   4.4550000e+01   1.9774289e+01   3.5868719e+01
+   4.4550000e+01   1.9845992e+01   3.5868760e+01
+   4.4550000e+01   1.9857645e+01   3.5869248e+01
+   4.4550000e+01   1.9858744e+01   3.5869810e+01
+   4.4550000e+01   1.9851843e+01   3.5868702e+01
+   4.4550000e+01   1.9795959e+01   3.5873008e+01
+   4.4600000e+01   2.5103554e+00   3.4896107e+01
+   4.4600000e+01   2.5061901e+00   3.4902207e+01
+   4.4600000e+01   2.5121488e+00   3.4907306e+01
+   4.4600000e+01   2.5413554e+00   3.4914521e+01
+   4.4600000e+01   2.5794959e+00   3.4919405e+01
+   4.4600000e+01   2.6451405e+00   3.4928736e+01
+   4.4600000e+01   2.7416281e+00   3.4940488e+01
+   4.4600000e+01   2.8990331e+00   3.4952802e+01
+   4.4600000e+01   3.0880496e+00   3.4961322e+01
+   4.4600000e+01   3.3536529e+00   3.4973281e+01
+   4.4600000e+01   3.5827603e+00   3.4972736e+01
+   4.4600000e+01   3.8425455e+00   3.4984074e+01
+   4.4600000e+01   4.3142231e+00   3.5036645e+01
+   4.4600000e+01   5.2460165e+00   3.5170777e+01
+   4.4600000e+01   6.6648926e+00   3.5382711e+01
+   4.4600000e+01   8.2569008e+00   3.5621149e+01
+   4.4600000e+01   9.2870413e+00   3.5722876e+01
+   4.4600000e+01   9.5328760e+00   3.5630785e+01
+   4.4600000e+01   9.9026364e+00   3.5537066e+01
+   4.4600000e+01   1.0298083e+01   3.5480702e+01
+   4.4600000e+01   1.0770826e+01   3.5489091e+01
+   4.4600000e+01   1.1255678e+01   3.5531455e+01
+   4.4600000e+01   1.1602421e+01   3.5566000e+01
+   4.4600000e+01   1.1914041e+01   3.5601397e+01
+   4.4600000e+01   1.2147298e+01   3.5626901e+01
+   4.4600000e+01   1.2343058e+01   3.5648785e+01
+   4.4600000e+01   1.2494471e+01   3.5664835e+01
+   4.4600000e+01   1.2597438e+01   3.5676273e+01
+   4.4600000e+01   1.2688149e+01   3.5686380e+01
+   4.4600000e+01   1.2785116e+01   3.5697636e+01
+   4.4600000e+01   1.2848306e+01   3.5705074e+01
+   4.4600000e+01   1.2914322e+01   3.5711992e+01
+   4.4600000e+01   1.3001628e+01   3.5721826e+01
+   4.4600000e+01   1.3051289e+01   3.5725025e+01
+   4.4600000e+01   1.3089132e+01   3.5727711e+01
+   4.4600000e+01   1.3142140e+01   3.5735612e+01
+   4.4600000e+01   1.3179091e+01   3.5738893e+01
+   4.4600000e+01   1.3225289e+01   3.5744364e+01
+   4.4600000e+01   1.3285380e+01   3.5750000e+01
+   4.4600000e+01   1.3351380e+01   3.5760339e+01
+   4.4600000e+01   1.3413512e+01   3.5768570e+01
+   4.4600000e+01   1.3485198e+01   3.5776364e+01
+   4.4600000e+01   1.3539636e+01   3.5778083e+01
+   4.4600000e+01   1.3586083e+01   3.5781620e+01
+   4.4600000e+01   1.3649860e+01   3.5788785e+01
+   4.4600000e+01   1.3724041e+01   3.5795174e+01
+   4.4600000e+01   1.3795636e+01   3.5799347e+01
+   4.4600000e+01   1.3896884e+01   3.5810504e+01
+   4.4600000e+01   1.4007802e+01   3.5819636e+01
+   4.4600000e+01   1.4119207e+01   3.5823149e+01
+   4.4600000e+01   1.4275008e+01   3.5831579e+01
+   4.4600000e+01   1.4495909e+01   3.5833537e+01
+   4.4600000e+01   1.4732562e+01   3.5837397e+01
+   4.4600000e+01   1.4997446e+01   3.5833347e+01
+   4.4600000e+01   1.5706603e+01   3.5837281e+01
+   4.4600000e+01   1.6613545e+01   3.5844116e+01
+   4.4600000e+01   1.7261298e+01   3.5850289e+01
+   4.4600000e+01   1.8017446e+01   3.5853281e+01
+   4.4600000e+01   1.8879421e+01   3.5867727e+01
+   4.4600000e+01   1.9534612e+01   3.5871678e+01
+   4.4600000e+01   1.9774289e+01   3.5868719e+01
+   4.4600000e+01   1.9845992e+01   3.5868760e+01
+   4.4600000e+01   1.9857645e+01   3.5869248e+01
+   4.4600000e+01   1.9858744e+01   3.5869810e+01
+   4.4600000e+01   1.9851843e+01   3.5868702e+01
+   4.4600000e+01   1.9795959e+01   3.5873008e+01
+   4.4650000e+01   2.5103554e+00   3.4896107e+01
+   4.4650000e+01   2.5061901e+00   3.4902207e+01
+   4.4650000e+01   2.5121488e+00   3.4907306e+01
+   4.4650000e+01   2.5413554e+00   3.4914521e+01
+   4.4650000e+01   2.5794959e+00   3.4919405e+01
+   4.4650000e+01   2.6451405e+00   3.4928736e+01
+   4.4650000e+01   2.7416281e+00   3.4940488e+01
+   4.4650000e+01   2.8990331e+00   3.4952802e+01
+   4.4650000e+01   3.0880496e+00   3.4961322e+01
+   4.4650000e+01   3.3536529e+00   3.4973281e+01
+   4.4650000e+01   3.5827603e+00   3.4972736e+01
+   4.4650000e+01   3.8425455e+00   3.4984074e+01
+   4.4650000e+01   4.3142231e+00   3.5036645e+01
+   4.4650000e+01   5.2460165e+00   3.5170777e+01
+   4.4650000e+01   6.6648926e+00   3.5382711e+01
+   4.4650000e+01   8.2569008e+00   3.5621149e+01
+   4.4650000e+01   9.2870413e+00   3.5722876e+01
+   4.4650000e+01   9.5328760e+00   3.5630785e+01
+   4.4650000e+01   9.9026364e+00   3.5537066e+01
+   4.4650000e+01   1.0298083e+01   3.5480702e+01
+   4.4650000e+01   1.0770826e+01   3.5489091e+01
+   4.4650000e+01   1.1255678e+01   3.5531455e+01
+   4.4650000e+01   1.1602421e+01   3.5566000e+01
+   4.4650000e+01   1.1914041e+01   3.5601397e+01
+   4.4650000e+01   1.2147298e+01   3.5626901e+01
+   4.4650000e+01   1.2343058e+01   3.5648785e+01
+   4.4650000e+01   1.2494471e+01   3.5664835e+01
+   4.4650000e+01   1.2597438e+01   3.5676273e+01
+   4.4650000e+01   1.2688149e+01   3.5686380e+01
+   4.4650000e+01   1.2785116e+01   3.5697636e+01
+   4.4650000e+01   1.2848306e+01   3.5705074e+01
+   4.4650000e+01   1.2914322e+01   3.5711992e+01
+   4.4650000e+01   1.3001628e+01   3.5721826e+01
+   4.4650000e+01   1.3051289e+01   3.5725025e+01
+   4.4650000e+01   1.3089132e+01   3.5727711e+01
+   4.4650000e+01   1.3142140e+01   3.5735612e+01
+   4.4650000e+01   1.3179091e+01   3.5738893e+01
+   4.4650000e+01   1.3225289e+01   3.5744364e+01
+   4.4650000e+01   1.3285380e+01   3.5750000e+01
+   4.4650000e+01   1.3351380e+01   3.5760339e+01
+   4.4650000e+01   1.3413512e+01   3.5768570e+01
+   4.4650000e+01   1.3485198e+01   3.5776364e+01
+   4.4650000e+01   1.3539636e+01   3.5778083e+01
+   4.4650000e+01   1.3586083e+01   3.5781620e+01
+   4.4650000e+01   1.3649860e+01   3.5788785e+01
+   4.4650000e+01   1.3724041e+01   3.5795174e+01
+   4.4650000e+01   1.3795636e+01   3.5799347e+01
+   4.4650000e+01   1.3896884e+01   3.5810504e+01
+   4.4650000e+01   1.4007802e+01   3.5819636e+01
+   4.4650000e+01   1.4119207e+01   3.5823149e+01
+   4.4650000e+01   1.4275008e+01   3.5831579e+01
+   4.4650000e+01   1.4495909e+01   3.5833537e+01
+   4.4650000e+01   1.4732562e+01   3.5837397e+01
+   4.4650000e+01   1.4997446e+01   3.5833347e+01
+   4.4650000e+01   1.5706603e+01   3.5837281e+01
+   4.4650000e+01   1.6613545e+01   3.5844116e+01
+   4.4650000e+01   1.7261298e+01   3.5850289e+01
+   4.4650000e+01   1.8017446e+01   3.5853281e+01
+   4.4650000e+01   1.8879421e+01   3.5867727e+01
+   4.4650000e+01   1.9534612e+01   3.5871678e+01
+   4.4650000e+01   1.9774289e+01   3.5868719e+01
+   4.4650000e+01   1.9845992e+01   3.5868760e+01
+   4.4650000e+01   1.9857645e+01   3.5869248e+01
+   4.4650000e+01   1.9858744e+01   3.5869810e+01
+   4.4650000e+01   1.9851843e+01   3.5868702e+01
+   4.4650000e+01   1.9795959e+01   3.5873008e+01
+   4.4700000e+01   2.5103554e+00   3.4896107e+01
+   4.4700000e+01   2.5061901e+00   3.4902207e+01
+   4.4700000e+01   2.5121488e+00   3.4907306e+01
+   4.4700000e+01   2.5413554e+00   3.4914521e+01
+   4.4700000e+01   2.5794959e+00   3.4919405e+01
+   4.4700000e+01   2.6451405e+00   3.4928736e+01
+   4.4700000e+01   2.7416281e+00   3.4940488e+01
+   4.4700000e+01   2.8990331e+00   3.4952802e+01
+   4.4700000e+01   3.0880496e+00   3.4961322e+01
+   4.4700000e+01   3.3536529e+00   3.4973281e+01
+   4.4700000e+01   3.5827603e+00   3.4972736e+01
+   4.4700000e+01   3.8425455e+00   3.4984074e+01
+   4.4700000e+01   4.3142231e+00   3.5036645e+01
+   4.4700000e+01   5.2460165e+00   3.5170777e+01
+   4.4700000e+01   6.6648926e+00   3.5382711e+01
+   4.4700000e+01   8.2569008e+00   3.5621149e+01
+   4.4700000e+01   9.2870413e+00   3.5722876e+01
+   4.4700000e+01   9.5328760e+00   3.5630785e+01
+   4.4700000e+01   9.9026364e+00   3.5537066e+01
+   4.4700000e+01   1.0298083e+01   3.5480702e+01
+   4.4700000e+01   1.0770826e+01   3.5489091e+01
+   4.4700000e+01   1.1255678e+01   3.5531455e+01
+   4.4700000e+01   1.1602421e+01   3.5566000e+01
+   4.4700000e+01   1.1914041e+01   3.5601397e+01
+   4.4700000e+01   1.2147298e+01   3.5626901e+01
+   4.4700000e+01   1.2343058e+01   3.5648785e+01
+   4.4700000e+01   1.2494471e+01   3.5664835e+01
+   4.4700000e+01   1.2597438e+01   3.5676273e+01
+   4.4700000e+01   1.2688149e+01   3.5686380e+01
+   4.4700000e+01   1.2785116e+01   3.5697636e+01
+   4.4700000e+01   1.2848306e+01   3.5705074e+01
+   4.4700000e+01   1.2914322e+01   3.5711992e+01
+   4.4700000e+01   1.3001628e+01   3.5721826e+01
+   4.4700000e+01   1.3051289e+01   3.5725025e+01
+   4.4700000e+01   1.3089132e+01   3.5727711e+01
+   4.4700000e+01   1.3142140e+01   3.5735612e+01
+   4.4700000e+01   1.3179091e+01   3.5738893e+01
+   4.4700000e+01   1.3225289e+01   3.5744364e+01
+   4.4700000e+01   1.3285380e+01   3.5750000e+01
+   4.4700000e+01   1.3351380e+01   3.5760339e+01
+   4.4700000e+01   1.3413512e+01   3.5768570e+01
+   4.4700000e+01   1.3485198e+01   3.5776364e+01
+   4.4700000e+01   1.3539636e+01   3.5778083e+01
+   4.4700000e+01   1.3586083e+01   3.5781620e+01
+   4.4700000e+01   1.3649860e+01   3.5788785e+01
+   4.4700000e+01   1.3724041e+01   3.5795174e+01
+   4.4700000e+01   1.3795636e+01   3.5799347e+01
+   4.4700000e+01   1.3896884e+01   3.5810504e+01
+   4.4700000e+01   1.4007802e+01   3.5819636e+01
+   4.4700000e+01   1.4119207e+01   3.5823149e+01
+   4.4700000e+01   1.4275008e+01   3.5831579e+01
+   4.4700000e+01   1.4495909e+01   3.5833537e+01
+   4.4700000e+01   1.4732562e+01   3.5837397e+01
+   4.4700000e+01   1.4997446e+01   3.5833347e+01
+   4.4700000e+01   1.5706603e+01   3.5837281e+01
+   4.4700000e+01   1.6613545e+01   3.5844116e+01
+   4.4700000e+01   1.7261298e+01   3.5850289e+01
+   4.4700000e+01   1.8017446e+01   3.5853281e+01
+   4.4700000e+01   1.8879421e+01   3.5867727e+01
+   4.4700000e+01   1.9534612e+01   3.5871678e+01
+   4.4700000e+01   1.9774289e+01   3.5868719e+01
+   4.4700000e+01   1.9845992e+01   3.5868760e+01
+   4.4700000e+01   1.9857645e+01   3.5869248e+01
+   4.4700000e+01   1.9858744e+01   3.5869810e+01
+   4.4700000e+01   1.9851843e+01   3.5868702e+01
+   4.4700000e+01   1.9795959e+01   3.5873008e+01
+   4.4750000e+01   2.5103554e+00   3.4896107e+01
+   4.4750000e+01   2.5061901e+00   3.4902207e+01
+   4.4750000e+01   2.5121488e+00   3.4907306e+01
+   4.4750000e+01   2.5413554e+00   3.4914521e+01
+   4.4750000e+01   2.5794959e+00   3.4919405e+01
+   4.4750000e+01   2.6451405e+00   3.4928736e+01
+   4.4750000e+01   2.7416281e+00   3.4940488e+01
+   4.4750000e+01   2.8990331e+00   3.4952802e+01
+   4.4750000e+01   3.0880496e+00   3.4961322e+01
+   4.4750000e+01   3.3536529e+00   3.4973281e+01
+   4.4750000e+01   3.5827603e+00   3.4972736e+01
+   4.4750000e+01   3.8425455e+00   3.4984074e+01
+   4.4750000e+01   4.3142231e+00   3.5036645e+01
+   4.4750000e+01   5.2460165e+00   3.5170777e+01
+   4.4750000e+01   6.6648926e+00   3.5382711e+01
+   4.4750000e+01   8.2569008e+00   3.5621149e+01
+   4.4750000e+01   9.2870413e+00   3.5722876e+01
+   4.4750000e+01   9.5328760e+00   3.5630785e+01
+   4.4750000e+01   9.9026364e+00   3.5537066e+01
+   4.4750000e+01   1.0298083e+01   3.5480702e+01
+   4.4750000e+01   1.0770826e+01   3.5489091e+01
+   4.4750000e+01   1.1255678e+01   3.5531455e+01
+   4.4750000e+01   1.1602421e+01   3.5566000e+01
+   4.4750000e+01   1.1914041e+01   3.5601397e+01
+   4.4750000e+01   1.2147298e+01   3.5626901e+01
+   4.4750000e+01   1.2343058e+01   3.5648785e+01
+   4.4750000e+01   1.2494471e+01   3.5664835e+01
+   4.4750000e+01   1.2597438e+01   3.5676273e+01
+   4.4750000e+01   1.2688149e+01   3.5686380e+01
+   4.4750000e+01   1.2785116e+01   3.5697636e+01
+   4.4750000e+01   1.2848306e+01   3.5705074e+01
+   4.4750000e+01   1.2914322e+01   3.5711992e+01
+   4.4750000e+01   1.3001628e+01   3.5721826e+01
+   4.4750000e+01   1.3051289e+01   3.5725025e+01
+   4.4750000e+01   1.3089132e+01   3.5727711e+01
+   4.4750000e+01   1.3142140e+01   3.5735612e+01
+   4.4750000e+01   1.3179091e+01   3.5738893e+01
+   4.4750000e+01   1.3225289e+01   3.5744364e+01
+   4.4750000e+01   1.3285380e+01   3.5750000e+01
+   4.4750000e+01   1.3351380e+01   3.5760339e+01
+   4.4750000e+01   1.3413512e+01   3.5768570e+01
+   4.4750000e+01   1.3485198e+01   3.5776364e+01
+   4.4750000e+01   1.3539636e+01   3.5778083e+01
+   4.4750000e+01   1.3586083e+01   3.5781620e+01
+   4.4750000e+01   1.3649860e+01   3.5788785e+01
+   4.4750000e+01   1.3724041e+01   3.5795174e+01
+   4.4750000e+01   1.3795636e+01   3.5799347e+01
+   4.4750000e+01   1.3896884e+01   3.5810504e+01
+   4.4750000e+01   1.4007802e+01   3.5819636e+01
+   4.4750000e+01   1.4119207e+01   3.5823149e+01
+   4.4750000e+01   1.4275008e+01   3.5831579e+01
+   4.4750000e+01   1.4495909e+01   3.5833537e+01
+   4.4750000e+01   1.4732562e+01   3.5837397e+01
+   4.4750000e+01   1.4997446e+01   3.5833347e+01
+   4.4750000e+01   1.5706603e+01   3.5837281e+01
+   4.4750000e+01   1.6613545e+01   3.5844116e+01
+   4.4750000e+01   1.7261298e+01   3.5850289e+01
+   4.4750000e+01   1.8017446e+01   3.5853281e+01
+   4.4750000e+01   1.8879421e+01   3.5867727e+01
+   4.4750000e+01   1.9534612e+01   3.5871678e+01
+   4.4750000e+01   1.9774289e+01   3.5868719e+01
+   4.4750000e+01   1.9845992e+01   3.5868760e+01
+   4.4750000e+01   1.9857645e+01   3.5869248e+01
+   4.4750000e+01   1.9858744e+01   3.5869810e+01
+   4.4750000e+01   1.9851843e+01   3.5868702e+01
+   4.4750000e+01   1.9795959e+01   3.5873008e+01
+   4.4800000e+01   2.5103554e+00   3.4896107e+01
+   4.4800000e+01   2.5061901e+00   3.4902207e+01
+   4.4800000e+01   2.5121488e+00   3.4907306e+01
+   4.4800000e+01   2.5413554e+00   3.4914521e+01
+   4.4800000e+01   2.5794959e+00   3.4919405e+01
+   4.4800000e+01   2.6451405e+00   3.4928736e+01
+   4.4800000e+01   2.7416281e+00   3.4940488e+01
+   4.4800000e+01   2.8990331e+00   3.4952802e+01
+   4.4800000e+01   3.0880496e+00   3.4961322e+01
+   4.4800000e+01   3.3536529e+00   3.4973281e+01
+   4.4800000e+01   3.5827603e+00   3.4972736e+01
+   4.4800000e+01   3.8425455e+00   3.4984074e+01
+   4.4800000e+01   4.3142231e+00   3.5036645e+01
+   4.4800000e+01   5.2460165e+00   3.5170777e+01
+   4.4800000e+01   6.6648926e+00   3.5382711e+01
+   4.4800000e+01   8.2569008e+00   3.5621149e+01
+   4.4800000e+01   9.2870413e+00   3.5722876e+01
+   4.4800000e+01   9.5328760e+00   3.5630785e+01
+   4.4800000e+01   9.9026364e+00   3.5537066e+01
+   4.4800000e+01   1.0298083e+01   3.5480702e+01
+   4.4800000e+01   1.0770826e+01   3.5489091e+01
+   4.4800000e+01   1.1255678e+01   3.5531455e+01
+   4.4800000e+01   1.1602421e+01   3.5566000e+01
+   4.4800000e+01   1.1914041e+01   3.5601397e+01
+   4.4800000e+01   1.2147298e+01   3.5626901e+01
+   4.4800000e+01   1.2343058e+01   3.5648785e+01
+   4.4800000e+01   1.2494471e+01   3.5664835e+01
+   4.4800000e+01   1.2597438e+01   3.5676273e+01
+   4.4800000e+01   1.2688149e+01   3.5686380e+01
+   4.4800000e+01   1.2785116e+01   3.5697636e+01
+   4.4800000e+01   1.2848306e+01   3.5705074e+01
+   4.4800000e+01   1.2914322e+01   3.5711992e+01
+   4.4800000e+01   1.3001628e+01   3.5721826e+01
+   4.4800000e+01   1.3051289e+01   3.5725025e+01
+   4.4800000e+01   1.3089132e+01   3.5727711e+01
+   4.4800000e+01   1.3142140e+01   3.5735612e+01
+   4.4800000e+01   1.3179091e+01   3.5738893e+01
+   4.4800000e+01   1.3225289e+01   3.5744364e+01
+   4.4800000e+01   1.3285380e+01   3.5750000e+01
+   4.4800000e+01   1.3351380e+01   3.5760339e+01
+   4.4800000e+01   1.3413512e+01   3.5768570e+01
+   4.4800000e+01   1.3485198e+01   3.5776364e+01
+   4.4800000e+01   1.3539636e+01   3.5778083e+01
+   4.4800000e+01   1.3586083e+01   3.5781620e+01
+   4.4800000e+01   1.3649860e+01   3.5788785e+01
+   4.4800000e+01   1.3724041e+01   3.5795174e+01
+   4.4800000e+01   1.3795636e+01   3.5799347e+01
+   4.4800000e+01   1.3896884e+01   3.5810504e+01
+   4.4800000e+01   1.4007802e+01   3.5819636e+01
+   4.4800000e+01   1.4119207e+01   3.5823149e+01
+   4.4800000e+01   1.4275008e+01   3.5831579e+01
+   4.4800000e+01   1.4495909e+01   3.5833537e+01
+   4.4800000e+01   1.4732562e+01   3.5837397e+01
+   4.4800000e+01   1.4997446e+01   3.5833347e+01
+   4.4800000e+01   1.5706603e+01   3.5837281e+01
+   4.4800000e+01   1.6613545e+01   3.5844116e+01
+   4.4800000e+01   1.7261298e+01   3.5850289e+01
+   4.4800000e+01   1.8017446e+01   3.5853281e+01
+   4.4800000e+01   1.8879421e+01   3.5867727e+01
+   4.4800000e+01   1.9534612e+01   3.5871678e+01
+   4.4800000e+01   1.9774289e+01   3.5868719e+01
+   4.4800000e+01   1.9845992e+01   3.5868760e+01
+   4.4800000e+01   1.9857645e+01   3.5869248e+01
+   4.4800000e+01   1.9858744e+01   3.5869810e+01
+   4.4800000e+01   1.9851843e+01   3.5868702e+01
+   4.4800000e+01   1.9795959e+01   3.5873008e+01
+   4.4850000e+01   2.5103554e+00   3.4896107e+01
+   4.4850000e+01   2.5061901e+00   3.4902207e+01
+   4.4850000e+01   2.5121488e+00   3.4907306e+01
+   4.4850000e+01   2.5413554e+00   3.4914521e+01
+   4.4850000e+01   2.5794959e+00   3.4919405e+01
+   4.4850000e+01   2.6451405e+00   3.4928736e+01
+   4.4850000e+01   2.7416281e+00   3.4940488e+01
+   4.4850000e+01   2.8990331e+00   3.4952802e+01
+   4.4850000e+01   3.0880496e+00   3.4961322e+01
+   4.4850000e+01   3.3536529e+00   3.4973281e+01
+   4.4850000e+01   3.5827603e+00   3.4972736e+01
+   4.4850000e+01   3.8425455e+00   3.4984074e+01
+   4.4850000e+01   4.3142231e+00   3.5036645e+01
+   4.4850000e+01   5.2460165e+00   3.5170777e+01
+   4.4850000e+01   6.6648926e+00   3.5382711e+01
+   4.4850000e+01   8.2569008e+00   3.5621149e+01
+   4.4850000e+01   9.2870413e+00   3.5722876e+01
+   4.4850000e+01   9.5328760e+00   3.5630785e+01
+   4.4850000e+01   9.9026364e+00   3.5537066e+01
+   4.4850000e+01   1.0298083e+01   3.5480702e+01
+   4.4850000e+01   1.0770826e+01   3.5489091e+01
+   4.4850000e+01   1.1255678e+01   3.5531455e+01
+   4.4850000e+01   1.1602421e+01   3.5566000e+01
+   4.4850000e+01   1.1914041e+01   3.5601397e+01
+   4.4850000e+01   1.2147298e+01   3.5626901e+01
+   4.4850000e+01   1.2343058e+01   3.5648785e+01
+   4.4850000e+01   1.2494471e+01   3.5664835e+01
+   4.4850000e+01   1.2597438e+01   3.5676273e+01
+   4.4850000e+01   1.2688149e+01   3.5686380e+01
+   4.4850000e+01   1.2785116e+01   3.5697636e+01
+   4.4850000e+01   1.2848306e+01   3.5705074e+01
+   4.4850000e+01   1.2914322e+01   3.5711992e+01
+   4.4850000e+01   1.3001628e+01   3.5721826e+01
+   4.4850000e+01   1.3051289e+01   3.5725025e+01
+   4.4850000e+01   1.3089132e+01   3.5727711e+01
+   4.4850000e+01   1.3142140e+01   3.5735612e+01
+   4.4850000e+01   1.3179091e+01   3.5738893e+01
+   4.4850000e+01   1.3225289e+01   3.5744364e+01
+   4.4850000e+01   1.3285380e+01   3.5750000e+01
+   4.4850000e+01   1.3351380e+01   3.5760339e+01
+   4.4850000e+01   1.3413512e+01   3.5768570e+01
+   4.4850000e+01   1.3485198e+01   3.5776364e+01
+   4.4850000e+01   1.3539636e+01   3.5778083e+01
+   4.4850000e+01   1.3586083e+01   3.5781620e+01
+   4.4850000e+01   1.3649860e+01   3.5788785e+01
+   4.4850000e+01   1.3724041e+01   3.5795174e+01
+   4.4850000e+01   1.3795636e+01   3.5799347e+01
+   4.4850000e+01   1.3896884e+01   3.5810504e+01
+   4.4850000e+01   1.4007802e+01   3.5819636e+01
+   4.4850000e+01   1.4119207e+01   3.5823149e+01
+   4.4850000e+01   1.4275008e+01   3.5831579e+01
+   4.4850000e+01   1.4495909e+01   3.5833537e+01
+   4.4850000e+01   1.4732562e+01   3.5837397e+01
+   4.4850000e+01   1.4997446e+01   3.5833347e+01
+   4.4850000e+01   1.5706603e+01   3.5837281e+01
+   4.4850000e+01   1.6613545e+01   3.5844116e+01
+   4.4850000e+01   1.7261298e+01   3.5850289e+01
+   4.4850000e+01   1.8017446e+01   3.5853281e+01
+   4.4850000e+01   1.8879421e+01   3.5867727e+01
+   4.4850000e+01   1.9534612e+01   3.5871678e+01
+   4.4850000e+01   1.9774289e+01   3.5868719e+01
+   4.4850000e+01   1.9845992e+01   3.5868760e+01
+   4.4850000e+01   1.9857645e+01   3.5869248e+01
+   4.4850000e+01   1.9858744e+01   3.5869810e+01
+   4.4850000e+01   1.9851843e+01   3.5868702e+01
+   4.4850000e+01   1.9795959e+01   3.5873008e+01
+   4.4900000e+01   2.5103554e+00   3.4896107e+01
+   4.4900000e+01   2.5061901e+00   3.4902207e+01
+   4.4900000e+01   2.5121488e+00   3.4907306e+01
+   4.4900000e+01   2.5413554e+00   3.4914521e+01
+   4.4900000e+01   2.5794959e+00   3.4919405e+01
+   4.4900000e+01   2.6451405e+00   3.4928736e+01
+   4.4900000e+01   2.7416281e+00   3.4940488e+01
+   4.4900000e+01   2.8990331e+00   3.4952802e+01
+   4.4900000e+01   3.0880496e+00   3.4961322e+01
+   4.4900000e+01   3.3536529e+00   3.4973281e+01
+   4.4900000e+01   3.5827603e+00   3.4972736e+01
+   4.4900000e+01   3.8425455e+00   3.4984074e+01
+   4.4900000e+01   4.3142231e+00   3.5036645e+01
+   4.4900000e+01   5.2460165e+00   3.5170777e+01
+   4.4900000e+01   6.6648926e+00   3.5382711e+01
+   4.4900000e+01   8.2569008e+00   3.5621149e+01
+   4.4900000e+01   9.2870413e+00   3.5722876e+01
+   4.4900000e+01   9.5328760e+00   3.5630785e+01
+   4.4900000e+01   9.9026364e+00   3.5537066e+01
+   4.4900000e+01   1.0298083e+01   3.5480702e+01
+   4.4900000e+01   1.0770826e+01   3.5489091e+01
+   4.4900000e+01   1.1255678e+01   3.5531455e+01
+   4.4900000e+01   1.1602421e+01   3.5566000e+01
+   4.4900000e+01   1.1914041e+01   3.5601397e+01
+   4.4900000e+01   1.2147298e+01   3.5626901e+01
+   4.4900000e+01   1.2343058e+01   3.5648785e+01
+   4.4900000e+01   1.2494471e+01   3.5664835e+01
+   4.4900000e+01   1.2597438e+01   3.5676273e+01
+   4.4900000e+01   1.2688149e+01   3.5686380e+01
+   4.4900000e+01   1.2785116e+01   3.5697636e+01
+   4.4900000e+01   1.2848306e+01   3.5705074e+01
+   4.4900000e+01   1.2914322e+01   3.5711992e+01
+   4.4900000e+01   1.3001628e+01   3.5721826e+01
+   4.4900000e+01   1.3051289e+01   3.5725025e+01
+   4.4900000e+01   1.3089132e+01   3.5727711e+01
+   4.4900000e+01   1.3142140e+01   3.5735612e+01
+   4.4900000e+01   1.3179091e+01   3.5738893e+01
+   4.4900000e+01   1.3225289e+01   3.5744364e+01
+   4.4900000e+01   1.3285380e+01   3.5750000e+01
+   4.4900000e+01   1.3351380e+01   3.5760339e+01
+   4.4900000e+01   1.3413512e+01   3.5768570e+01
+   4.4900000e+01   1.3485198e+01   3.5776364e+01
+   4.4900000e+01   1.3539636e+01   3.5778083e+01
+   4.4900000e+01   1.3586083e+01   3.5781620e+01
+   4.4900000e+01   1.3649860e+01   3.5788785e+01
+   4.4900000e+01   1.3724041e+01   3.5795174e+01
+   4.4900000e+01   1.3795636e+01   3.5799347e+01
+   4.4900000e+01   1.3896884e+01   3.5810504e+01
+   4.4900000e+01   1.4007802e+01   3.5819636e+01
+   4.4900000e+01   1.4119207e+01   3.5823149e+01
+   4.4900000e+01   1.4275008e+01   3.5831579e+01
+   4.4900000e+01   1.4495909e+01   3.5833537e+01
+   4.4900000e+01   1.4732562e+01   3.5837397e+01
+   4.4900000e+01   1.4997446e+01   3.5833347e+01
+   4.4900000e+01   1.5706603e+01   3.5837281e+01
+   4.4900000e+01   1.6613545e+01   3.5844116e+01
+   4.4900000e+01   1.7261298e+01   3.5850289e+01
+   4.4900000e+01   1.8017446e+01   3.5853281e+01
+   4.4900000e+01   1.8879421e+01   3.5867727e+01
+   4.4900000e+01   1.9534612e+01   3.5871678e+01
+   4.4900000e+01   1.9774289e+01   3.5868719e+01
+   4.4900000e+01   1.9845992e+01   3.5868760e+01
+   4.4900000e+01   1.9857645e+01   3.5869248e+01
+   4.4900000e+01   1.9858744e+01   3.5869810e+01
+   4.4900000e+01   1.9851843e+01   3.5868702e+01
+   4.4900000e+01   1.9795959e+01   3.5873008e+01
+   4.4950000e+01   2.5103554e+00   3.4896107e+01
+   4.4950000e+01   2.5061901e+00   3.4902207e+01
+   4.4950000e+01   2.5121488e+00   3.4907306e+01
+   4.4950000e+01   2.5413554e+00   3.4914521e+01
+   4.4950000e+01   2.5794959e+00   3.4919405e+01
+   4.4950000e+01   2.6451405e+00   3.4928736e+01
+   4.4950000e+01   2.7416281e+00   3.4940488e+01
+   4.4950000e+01   2.8990331e+00   3.4952802e+01
+   4.4950000e+01   3.0880496e+00   3.4961322e+01
+   4.4950000e+01   3.3536529e+00   3.4973281e+01
+   4.4950000e+01   3.5827603e+00   3.4972736e+01
+   4.4950000e+01   3.8425455e+00   3.4984074e+01
+   4.4950000e+01   4.3142231e+00   3.5036645e+01
+   4.4950000e+01   5.2460165e+00   3.5170777e+01
+   4.4950000e+01   6.6648926e+00   3.5382711e+01
+   4.4950000e+01   8.2569008e+00   3.5621149e+01
+   4.4950000e+01   9.2870413e+00   3.5722876e+01
+   4.4950000e+01   9.5328760e+00   3.5630785e+01
+   4.4950000e+01   9.9026364e+00   3.5537066e+01
+   4.4950000e+01   1.0298083e+01   3.5480702e+01
+   4.4950000e+01   1.0770826e+01   3.5489091e+01
+   4.4950000e+01   1.1255678e+01   3.5531455e+01
+   4.4950000e+01   1.1602421e+01   3.5566000e+01
+   4.4950000e+01   1.1914041e+01   3.5601397e+01
+   4.4950000e+01   1.2147298e+01   3.5626901e+01
+   4.4950000e+01   1.2343058e+01   3.5648785e+01
+   4.4950000e+01   1.2494471e+01   3.5664835e+01
+   4.4950000e+01   1.2597438e+01   3.5676273e+01
+   4.4950000e+01   1.2688149e+01   3.5686380e+01
+   4.4950000e+01   1.2785116e+01   3.5697636e+01
+   4.4950000e+01   1.2848306e+01   3.5705074e+01
+   4.4950000e+01   1.2914322e+01   3.5711992e+01
+   4.4950000e+01   1.3001628e+01   3.5721826e+01
+   4.4950000e+01   1.3051289e+01   3.5725025e+01
+   4.4950000e+01   1.3089132e+01   3.5727711e+01
+   4.4950000e+01   1.3142140e+01   3.5735612e+01
+   4.4950000e+01   1.3179091e+01   3.5738893e+01
+   4.4950000e+01   1.3225289e+01   3.5744364e+01
+   4.4950000e+01   1.3285380e+01   3.5750000e+01
+   4.4950000e+01   1.3351380e+01   3.5760339e+01
+   4.4950000e+01   1.3413512e+01   3.5768570e+01
+   4.4950000e+01   1.3485198e+01   3.5776364e+01
+   4.4950000e+01   1.3539636e+01   3.5778083e+01
+   4.4950000e+01   1.3586083e+01   3.5781620e+01
+   4.4950000e+01   1.3649860e+01   3.5788785e+01
+   4.4950000e+01   1.3724041e+01   3.5795174e+01
+   4.4950000e+01   1.3795636e+01   3.5799347e+01
+   4.4950000e+01   1.3896884e+01   3.5810504e+01
+   4.4950000e+01   1.4007802e+01   3.5819636e+01
+   4.4950000e+01   1.4119207e+01   3.5823149e+01
+   4.4950000e+01   1.4275008e+01   3.5831579e+01
+   4.4950000e+01   1.4495909e+01   3.5833537e+01
+   4.4950000e+01   1.4732562e+01   3.5837397e+01
+   4.4950000e+01   1.4997446e+01   3.5833347e+01
+   4.4950000e+01   1.5706603e+01   3.5837281e+01
+   4.4950000e+01   1.6613545e+01   3.5844116e+01
+   4.4950000e+01   1.7261298e+01   3.5850289e+01
+   4.4950000e+01   1.8017446e+01   3.5853281e+01
+   4.4950000e+01   1.8879421e+01   3.5867727e+01
+   4.4950000e+01   1.9534612e+01   3.5871678e+01
+   4.4950000e+01   1.9774289e+01   3.5868719e+01
+   4.4950000e+01   1.9845992e+01   3.5868760e+01
+   4.4950000e+01   1.9857645e+01   3.5869248e+01
+   4.4950000e+01   1.9858744e+01   3.5869810e+01
+   4.4950000e+01   1.9851843e+01   3.5868702e+01
+   4.4950000e+01   1.9795959e+01   3.5873008e+01
+   4.5000000e+01   2.5103554e+00   3.4896107e+01
+   4.5000000e+01   2.5061901e+00   3.4902207e+01
+   4.5000000e+01   2.5121488e+00   3.4907306e+01
+   4.5000000e+01   2.5413554e+00   3.4914521e+01
+   4.5000000e+01   2.5794959e+00   3.4919405e+01
+   4.5000000e+01   2.6451405e+00   3.4928736e+01
+   4.5000000e+01   2.7416281e+00   3.4940488e+01
+   4.5000000e+01   2.8990331e+00   3.4952802e+01
+   4.5000000e+01   3.0880496e+00   3.4961322e+01
+   4.5000000e+01   3.3536529e+00   3.4973281e+01
+   4.5000000e+01   3.5827603e+00   3.4972736e+01
+   4.5000000e+01   3.8425455e+00   3.4984074e+01
+   4.5000000e+01   4.3142231e+00   3.5036645e+01
+   4.5000000e+01   5.2460165e+00   3.5170777e+01
+   4.5000000e+01   6.6648926e+00   3.5382711e+01
+   4.5000000e+01   8.2569008e+00   3.5621149e+01
+   4.5000000e+01   9.2870413e+00   3.5722876e+01
+   4.5000000e+01   9.5328760e+00   3.5630785e+01
+   4.5000000e+01   9.9026364e+00   3.5537066e+01
+   4.5000000e+01   1.0298083e+01   3.5480702e+01
+   4.5000000e+01   1.0770826e+01   3.5489091e+01
+   4.5000000e+01   1.1255678e+01   3.5531455e+01
+   4.5000000e+01   1.1602421e+01   3.5566000e+01
+   4.5000000e+01   1.1914041e+01   3.5601397e+01
+   4.5000000e+01   1.2147298e+01   3.5626901e+01
+   4.5000000e+01   1.2343058e+01   3.5648785e+01
+   4.5000000e+01   1.2494471e+01   3.5664835e+01
+   4.5000000e+01   1.2597438e+01   3.5676273e+01
+   4.5000000e+01   1.2688149e+01   3.5686380e+01
+   4.5000000e+01   1.2785116e+01   3.5697636e+01
+   4.5000000e+01   1.2848306e+01   3.5705074e+01
+   4.5000000e+01   1.2914322e+01   3.5711992e+01
+   4.5000000e+01   1.3001628e+01   3.5721826e+01
+   4.5000000e+01   1.3051289e+01   3.5725025e+01
+   4.5000000e+01   1.3089132e+01   3.5727711e+01
+   4.5000000e+01   1.3142140e+01   3.5735612e+01
+   4.5000000e+01   1.3179091e+01   3.5738893e+01
+   4.5000000e+01   1.3225289e+01   3.5744364e+01
+   4.5000000e+01   1.3285380e+01   3.5750000e+01
+   4.5000000e+01   1.3351380e+01   3.5760339e+01
+   4.5000000e+01   1.3413512e+01   3.5768570e+01
+   4.5000000e+01   1.3485198e+01   3.5776364e+01
+   4.5000000e+01   1.3539636e+01   3.5778083e+01
+   4.5000000e+01   1.3586083e+01   3.5781620e+01
+   4.5000000e+01   1.3649860e+01   3.5788785e+01
+   4.5000000e+01   1.3724041e+01   3.5795174e+01
+   4.5000000e+01   1.3795636e+01   3.5799347e+01
+   4.5000000e+01   1.3896884e+01   3.5810504e+01
+   4.5000000e+01   1.4007802e+01   3.5819636e+01
+   4.5000000e+01   1.4119207e+01   3.5823149e+01
+   4.5000000e+01   1.4275008e+01   3.5831579e+01
+   4.5000000e+01   1.4495909e+01   3.5833537e+01
+   4.5000000e+01   1.4732562e+01   3.5837397e+01
+   4.5000000e+01   1.4997446e+01   3.5833347e+01
+   4.5000000e+01   1.5706603e+01   3.5837281e+01
+   4.5000000e+01   1.6613545e+01   3.5844116e+01
+   4.5000000e+01   1.7261298e+01   3.5850289e+01
+   4.5000000e+01   1.8017446e+01   3.5853281e+01
+   4.5000000e+01   1.8879421e+01   3.5867727e+01
+   4.5000000e+01   1.9534612e+01   3.5871678e+01
+   4.5000000e+01   1.9774289e+01   3.5868719e+01
+   4.5000000e+01   1.9845992e+01   3.5868760e+01
+   4.5000000e+01   1.9857645e+01   3.5869248e+01
+   4.5000000e+01   1.9858744e+01   3.5869810e+01
+   4.5000000e+01   1.9851843e+01   3.5868702e+01
+   4.5000000e+01   1.9795959e+01   3.5873008e+01
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/pomme_ics_ascii
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/pomme_ics_ascii	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/pomme_ics_ascii	(revision 6)
@@ -0,0 +1,18612 @@
+ -4755.1 -4755.1 1030.0659
+ -4462.2 -4608.65 1029.934
+ -4173.05 -4317.625 1029.8033
+ -3888.35 -4030.7 1029.675
+ -3608.85 -3748.6 1029.5463
+ -3335.4 -3472.125 1029.4202
+ -3068.85 -3202.125 1029.2959
+ -2810.2 -2939.525 1029.1681
+ -2560.6 -2685.4 1029.0391
+ -2321.0 -2440.8 1028.9086
+ -2092.5 -2206.75 1028.7813
+ -1876.15 -1984.325 1028.6656
+ -1672.75 -1774.45 1028.5618
+ -1483.05 -1577.9 1028.467
+ -1307.65 -1395.35 1028.3691
+ -1146.9 -1227.275 1028.2397
+ -1000.8 -1073.85 1028.076
+ -869.15 -934.975 1027.897
+ -751.5 -810.325 1027.7148
+ -647.15 -699.325 1027.5529
+ -555.25 -601.2 1027.4297
+ -474.85 -515.05 1027.342
+ -409.75 -442.3 1027.2753
+ -361.1 -385.425 1027.2238
+ -323.7 -342.4 1027.1816
+ -294.15 -308.925 1027.1472
+ -270.2 -282.175 1027.1194
+ -250.35 -260.275 1027.0936
+ -233.55 -241.95 1027.0713
+ -219.1 -226.325 1027.0515
+ -206.5 -212.8 1027.0345
+ -195.35 -200.925 1027.0197
+ -185.35 -190.35 1027.007
+ -176.3 -180.825 1026.9946
+ -168.05 -172.175 1026.9838
+ -160.45 -164.25 1026.9733
+ -153.4 -156.925 1026.9648
+ -146.8 -150.1 1026.9551
+ -140.55 -143.675 1026.9456
+ -134.6 -137.575 1026.9364
+ -128.9 -131.75 1026.9264
+ -123.4 -126.15 1026.9169
+ -118.05 -120.725 1026.9042
+ -112.8 -115.425 1026.894
+ -107.65 -110.225 1026.8829
+ -102.55 -105.1 1026.8715
+ -97.5 -100.025 1026.8582
+ -92.5 -95.0 1026.8416
+ -87.5 -90.0 1026.8215
+ -82.5 -85.0 1026.799
+ -77.5 -80.0 1026.7728
+ -72.5 -75.0 1026.7385
+ -67.5 -70.0 1026.6893
+ -62.5 -65.0 1026.6093
+ -57.5 -60.0 1026.4727
+ -52.5 -55.0 1026.3036
+ -47.5 -50.0 1026.1324
+ -42.5 -45.0 1025.928
+ -37.5 -40.0 1025.7582
+ -32.5 -35.0 1025.6349
+ -27.5 -30.0 1025.556
+ -22.5 -25.0 1025.5374
+ -17.5 -20.0 1025.5355
+ -12.5 -15.0 1025.5371
+ -7.5 -10.0 1025.5372
+ 0.0E+0 -3.75 1025.5511
+ 31.0 2.512232 34.89261 0.0E+0
+ 31.0 2.521828 34.9032 0.0E+0
+ 31.0 2.5392024 34.909175 0.0E+0
+ 31.0 2.5577363 34.915744 0.0E+0
+ 31.0 2.594333 34.917797 0.0E+0
+ 31.0 2.6842157 34.92689 0.0E+0
+ 31.0 2.8092658 34.94042 0.0E+0
+ 31.0 2.9874832 34.94954 0.0E+0
+ 31.0 3.1930935 34.955902 0.0E+0
+ 31.0 3.3527812 34.947994 0.0E+0
+ 31.0 3.4683618 34.936477 0.0E+0
+ 31.0 3.6086015 34.92503 0.0E+0
+ 31.0 3.9438345 34.953075 0.0E+0
+ 31.0 4.6543664 35.045223 0.0E+0
+ 31.0 5.7752532 35.192523 0.0E+0
+ 31.0 7.3903765 35.414882 0.0E+0
+ 31.0 8.660998 35.549686 0.0E+0
+ 31.0 9.528665 35.58024 0.0E+0
+ 31.0 9.9458274 35.516342 0.0E+0
+ 31.0 10.32934 35.46681 0.0E+0
+ 31.0 10.763894 35.481052 0.0E+0
+ 31.0 11.195755 35.52139 0.0E+0
+ 31.0 11.501528 35.55576 0.0E+0
+ 31.0 11.729603 35.581596 0.0E+0
+ 31.0 11.892065 35.59831 0.0E+0
+ 31.0 12.054492 35.614501 0.0E+0
+ 31.0 12.174875 35.629482 0.0E+0
+ 31.0 12.272658 35.63907 0.0E+0
+ 31.0 12.376636 35.651897 0.0E+0
+ 31.0 12.456709 35.66115 0.0E+0
+ 31.0 12.527687 35.665813 0.0E+0
+ 31.0 12.576799 35.668315 0.0E+0
+ 31.0 12.620926 35.671646 0.0E+0
+ 31.0 12.694529 35.6795 0.0E+0
+ 31.0 12.728615 35.68199 0.0E+0
+ 31.0 12.774042 35.68687 0.0E+0
+ 31.0 12.81524 35.691612 0.0E+0
+ 31.0 12.869128 35.698081 0.0E+0
+ 31.0 12.907588 35.70124 0.0E+0
+ 31.0 12.935505 35.704177 0.0E+0
+ 31.0 12.964317 35.706203 0.0E+0
+ 31.0 13.005739 35.71078 0.0E+0
+ 31.0 13.082918 35.716007 0.0E+0
+ 31.0 13.144348 35.72215 0.0E+0
+ 31.0 13.19001 35.725082 0.0E+0
+ 31.0 13.224957 35.727802 0.0E+0
+ 31.0 13.271105 35.73154 0.0E+0
+ 31.0 13.334844 35.73273 0.0E+0
+ 31.0 13.413972 35.739131 0.0E+0
+ 31.0 13.509323 35.735912 0.0E+0
+ 31.0 13.581416 35.74375 0.0E+0
+ 31.0 13.71093 35.742572 0.0E+0
+ 31.0 13.910708 35.75344 0.0E+0
+ 31.0 14.215749 35.75528 0.0E+0
+ 31.0 14.835378 35.748954 0.0E+0
+ 31.0 15.71697 35.720996 0.0E+0
+ 31.0 16.512335 35.710353 0.0E+0
+ 31.0 17.223347 35.711944 0.0E+0
+ 31.0 17.529451 35.70537 0.0E+0
+ 31.0 17.68431 35.71084 0.0E+0
+ 31.0 17.789272 35.70551 0.0E+0
+ 31.0 17.841343 35.691627 0.0E+0
+ 31.0 17.864702 35.68695 0.0E+0
+ 31.0 17.852112 35.691673 0.0E+0
+ 31.0 17.854795 35.692707 0.0E+0
+ 31.0 17.845272 35.694614 0.0E+0
+ 31.05 2.512292 34.892623 0.0E+0
+ 31.05 2.521836 34.903186 7.0028013E-6
+ 31.05 2.539182 34.909172 3.1027502E-5
+ 31.05 2.5576922 34.915744 2.709222E-5
+ 31.05 2.5942966 34.9178 4.3895297E-6
+ 31.05 2.6841132 34.92689 -3.560797E-5
+ 31.05 2.809134 34.94042 -9.053674E-5
+ 31.05 2.9873435 34.94954 -1.5597168E-4
+ 31.05 3.1929593 34.955913 -2.384591E-4
+ 31.05 3.3527994 34.94803 -3.339176E-4
+ 31.05 3.4685955 34.936534 -4.1893831E-4
+ 31.05 3.6091287 34.925132 -5.054913E-4
+ 31.05 3.944874 34.953266 -6.2146456E-4
+ 31.05 4.65576 35.045463 -7.3114986E-4
+ 31.05 5.7780027 35.19305 -8.619043E-4
+ 31.05 7.394305 35.415695 -1.0277615E-3
+ 31.05 8.662481 35.550006 -1.1185437E-3
+ 31.05 9.52941 35.58043 -1.1560979E-3
+ 31.05 9.946133 35.516422 -1.1905222E-3
+ 31.05 10.329586 35.46688 -1.2140066E-3
+ 31.05 10.764168 35.481117 -1.2270103E-3
+ 31.05 11.195943 35.521434 -1.2281537E-3
+ 31.05 11.501618 35.55577 -1.2243947E-3
+ 31.05 11.72966 35.581596 -1.2170027E-3
+ 31.05 11.892239 35.59833 -1.2094276E-3
+ 31.05 12.054561 35.61452 -1.2068948E-3
+ 31.05 12.17489 35.62949 -1.2081965E-3
+ 31.05 12.272668 35.63908 -1.2099989E-3
+ 31.05 12.376614 35.651897 -1.2113205E-3
+ 31.05 12.45668 35.661144 -1.2115313E-3
+ 31.05 12.527651 35.665817 -1.2125089E-3
+ 31.05 12.576811 35.668327 -1.214194E-3
+ 31.05 12.620924 35.671657 -1.2156834E-3
+ 31.05 12.694437 35.6795 -1.2179351E-3
+ 31.05 12.728613 35.68201 -1.2204496E-3
+ 31.05 12.774072 35.686893 -1.2221774E-3
+ 31.05 12.8153 35.69163 -1.22305E-3
+ 31.05 12.869131 35.698093 -1.2236973E-3
+ 31.05 12.907601 35.701251 -1.2245191E-3
+ 31.05 12.935567 35.70419 -1.2247578E-3
+ 31.05 12.964488 35.706222 -1.2236033E-3
+ 31.05 13.005909 35.7108 -1.221669E-3
+ 31.05 13.08308 35.716037 -1.2203191E-3
+ 31.05 13.144472 35.722164 -1.2193847E-3
+ 31.05 13.190132 35.72509 -1.2180351E-3
+ 31.05 13.225095 35.727813 -1.2163192E-3
+ 31.05 13.271311 35.73155 -1.2138553E-3
+ 31.05 13.335109 35.73275 -1.2107022E-3
+ 31.05 13.414464 35.73916 -1.205755E-3
+ 31.05 13.509862 35.735965 -1.1994952E-3
+ 31.05 13.582179 35.74381 -1.1916358E-3
+ 31.05 13.711868 35.742671 -1.1817062E-3
+ 31.05 13.911655 35.75352 -1.1708887E-3
+ 31.05 14.216911 35.755363 -1.1573195E-3
+ 31.05 14.836142 35.74909 -1.1468359E-3
+ 31.05 15.717269 35.721225 -1.1486758E-3
+ 31.05 16.511679 35.710636 -1.1689604E-3
+ 31.05 17.224548 35.71223 -1.181708E-3
+ 31.05 17.53167 35.70566 -1.1652844E-3
+ 31.05 17.686857 35.711086 -1.1333979E-3
+ 31.05 17.791786 35.70578 -1.0975691E-3
+ 31.05 17.843864 35.69195 -1.0643643E-3
+ 31.05 17.867151 35.687294 -1.0341832E-3
+ 31.05 17.854502 35.691993 -1.0053013E-3
+ 31.05 17.857264 35.693046 -9.7598234E-4
+ 31.05 17.84748 35.69493 -9.346471E-4
+ 31.1 2.5124108 34.89265 0.0E+0
+ 31.1 2.5218522 34.903167 1.1530069E-5
+ 31.1 2.539141 34.909164 5.12388E-5
+ 31.1 2.5576047 34.91574 4.4707147E-5
+ 31.1 2.5942242 34.91781 7.08512E-6
+ 31.1 2.6839087 34.926895 -5.9235248E-5
+ 31.1 2.8088707 34.940422 -1.5036364E-4
+ 31.1 2.9870645 34.949546 -2.5901466E-4
+ 31.1 3.1926913 34.955936 -3.9602883E-4
+ 31.1 3.3528356 34.948093 -5.5467616E-4
+ 31.1 3.4690618 34.93664 -6.961672E-4
+ 31.1 3.61018 34.925342 -8.403103E-4
+ 31.1 3.946947 34.953647 -1.0331845E-3
+ 31.1 4.658538 35.045944 -1.2155679E-3
+ 31.1 5.7834815 35.194095 -1.4324799E-3
+ 31.1 7.402129 35.41732 -1.7068359E-3
+ 31.1 8.665439 35.55064 -1.857404E-3
+ 31.1 9.530894 35.58081 -1.9206649E-3
+ 31.1 9.94674 35.51659 -1.9787792E-3
+ 31.1 10.330074 35.46703 -2.0186493E-3
+ 31.1 10.764713 35.48125 -2.0409002E-3
+ 31.1 11.196315 35.521522 -2.0433212E-3
+ 31.1 11.501796 35.555797 -2.0374923E-3
+ 31.1 11.729771 35.581592 -2.0255462E-3
+ 31.1 11.892583 35.598384 -2.0132355E-3
+ 31.1 12.054694 35.61456 -2.0092241E-3
+ 31.1 12.174917 35.62951 -2.0115212E-3
+ 31.1 12.272685 35.639102 -2.014606E-3
+ 31.1 12.376569 35.65189 -2.0168703E-3
+ 31.1 12.456622 35.66113 -2.0172812E-3
+ 31.1 12.52758 35.665824 -2.018951E-3
+ 31.1 12.576833 35.668354 -2.021787E-3
+ 31.1 12.62092 35.671684 -2.0242955E-3
+ 31.1 12.694252 35.679504 -2.028064E-3
+ 31.1 12.728607 35.68205 -2.0322673E-3
+ 31.1 12.77413 35.686935 -2.0351663E-3
+ 31.1 12.81542 35.691673 -2.0366488E-3
+ 31.1 12.869135 35.698112 -2.0377568E-3
+ 31.1 12.907625 35.70128 -2.0391521E-3
+ 31.1 12.93569 35.704212 -2.03958E-3
+ 31.1 12.964827 35.706256 -2.0376988E-3
+ 31.1 13.006248 35.710834 -2.0345253E-3
+ 31.1 13.083401 35.7161 -2.032317E-3
+ 31.1 13.144717 35.7222 -2.030796E-3
+ 31.1 13.190373 35.725105 -2.0285875E-3
+ 31.1 13.225371 35.727832 -2.0257676E-3
+ 31.1 13.271721 35.73156 -2.0217057E-3
+ 31.1 13.335636 35.732795 -2.0164994E-3
+ 31.1 13.415444 35.73922 -2.0083186E-3
+ 31.1 13.510934 35.736076 -1.9979614E-3
+ 31.1 13.583701 35.743915 -1.984947E-3
+ 31.1 13.713738 35.742874 -1.9684967E-3
+ 31.1 13.913544 35.75368 -1.9505657E-3
+ 31.1 14.219228 35.755535 -1.9280694E-3
+ 31.1 14.837667 35.749355 -1.9106667E-3
+ 31.1 15.717868 35.721683 -1.9136652E-3
+ 31.1 16.510378 35.7112 -1.9471892E-3
+ 31.1 17.22695 35.712802 -1.968227E-3
+ 31.1 17.536095 35.706237 -1.940932E-3
+ 31.1 17.69194 35.71158 -1.8879491E-3
+ 31.1 17.796804 35.706317 -1.8284146E-3
+ 31.1 17.8489 35.6926 -1.7732484E-3
+ 31.1 17.872038 35.68798 -1.7231047E-3
+ 31.1 17.85927 35.69264 -1.6751088E-3
+ 31.1 17.86219 35.693714 -1.626381E-3
+ 31.1 17.851885 35.695564 -1.5576718E-3
+ 31.15 2.5125887 34.892692 0.0E+0
+ 31.15 2.5218765 34.90314 1.5858172E-5
+ 31.15 2.5390796 34.90915 7.079376E-5
+ 31.15 2.557474 34.915737 6.170024E-5
+ 31.15 2.5941154 34.917816 9.445252E-6
+ 31.15 2.6836028 34.9269 -8.275E-5
+ 31.15 2.8084774 34.940422 -2.0953732E-4
+ 31.15 2.9866476 34.94956 -3.6089742E-4
+ 31.15 3.1922903 34.95597 -5.518711E-4
+ 31.15 3.3528888 34.948192 -7.731807E-4
+ 31.15 3.4697585 34.936805 -9.709547E-4
+ 31.15 3.6117506 34.925655 -1.172648E-3
+ 31.15 3.9500412 34.954216 -1.4419786E-3
+ 31.15 4.6626825 35.04666 -1.6965925E-3
+ 31.15 5.791649 35.195655 -1.9983665E-3
+ 31.15 7.413783 35.419742 -2.3784276E-3
+ 31.15 8.66985 35.551586 -2.587849E-3
+ 31.15 9.533105 35.58138 -2.6778671E-3
+ 31.15 9.947642 35.516834 -2.7608177E-3
+ 31.15 10.330795 35.467254 -2.8181863E-3
+ 31.15 10.765518 35.481445 -2.8505583E-3
+ 31.15 11.196864 35.521652 -2.8550196E-3
+ 31.15 11.502056 35.555835 -2.8477597E-3
+ 31.15 11.72993 35.581592 -2.8318001E-3
+ 31.15 11.89309 35.598464 -2.8152067E-3
+ 31.15 12.054887 35.61462 -2.810023E-3
+ 31.15 12.174952 35.62953 -2.8135054E-3
+ 31.15 12.272706 35.639133 -2.8179942E-3
+ 31.15 12.3765 35.651882 -2.821293E-3
+ 31.15 12.456533 35.661102 -2.8219923E-3
+ 31.15 12.52747 35.665836 -2.8244154E-3
+ 31.15 12.576863 35.668392 -2.8284443E-3
+ 31.15 12.620913 35.67172 -2.832013E-3
+ 31.15 12.693974 35.67951 -2.8373245E-3
+ 31.15 12.728595 35.68211 -2.843238E-3
+ 31.15 12.774214 35.686996 -2.847339E-3
+ 31.15 12.815594 35.691734 -2.849474E-3
+ 31.15 12.869138 35.698146 -2.8510866E-3
+ 31.15 12.907659 35.70132 -2.8530943E-3
+ 31.15 12.93587 35.70425 -2.8537551E-3
+ 31.15 12.965331 35.70631 -2.8512096E-3
+ 31.15 13.006752 35.710884 -2.8468682E-3
+ 31.15 13.083879 35.71619 -2.8438605E-3
+ 31.15 13.145081 35.722248 -2.841805E-3
+ 31.15 13.190731 35.72513 -2.8387957E-3
+ 31.15 13.225782 35.727863 -2.8349293E-3
+ 31.15 13.272333 35.731582 -2.8293314E-3
+ 31.15 13.336424 35.732856 -2.8221388E-3
+ 31.15 13.416904 35.739303 -2.8108127E-3
+ 31.15 13.512534 35.736244 -2.7964608E-3
+ 31.15 13.58597 35.744075 -2.7784046E-3
+ 31.15 13.716527 35.74318 -2.7555665E-3
+ 31.15 13.916365 35.75392 -2.7306512E-3
+ 31.15 14.222686 35.75579 -2.699384E-3
+ 31.15 14.83995 35.749752 -2.6751507E-3
+ 31.15 15.718767 35.722366 -2.679209E-3
+ 31.15 16.508453 35.71204 -2.7255818E-3
+ 31.15 17.230537 35.713657 -2.7546205E-3
+ 31.15 17.542707 35.707096 -2.716545E-3
+ 31.15 17.699541 35.712314 -2.6426585E-3
+ 31.15 17.804304 35.70712 -2.5596325E-3
+ 31.15 17.856422 35.693565 -2.4827157E-3
+ 31.15 17.879341 35.689002 -2.412799E-3
+ 31.15 17.8664 35.693595 -2.345855E-3
+ 31.15 17.86955 35.694717 -2.2778776E-3
+ 31.15 17.858467 35.696506 -2.182005E-3
+ 31.2 2.512824 34.89275 0.0E+0
+ 31.2 2.5219087 34.903106 1.99157E-5
+ 31.2 2.538998 34.90913 8.946259E-5
+ 31.2 2.5573005 34.915733 7.78525E-5
+ 31.2 2.5939714 34.91783 1.1345777E-5
+ 31.2 2.6831974 34.926902 -1.0613105E-4
+ 31.2 2.8079555 34.940425 -2.6786516E-4
+ 31.2 2.9860935 34.94957 -4.6127507E-4
+ 31.2 3.191757 34.956012 -7.0547615E-4
+ 31.2 3.3529582 34.948326 -9.887788E-4
+ 31.2 3.470682 34.937026 -1.242627E-3
+ 31.2 3.6138327 34.926067 -1.5018636E-3
+ 31.2 3.9541375 34.954975 -1.847105E-3
+ 31.2 4.6681666 35.04761 -2.1733732E-3
+ 31.2 5.8024435 35.19772 -2.5583244E-3
+ 31.2 7.4291677 35.422935 -3.0404063E-3
+ 31.2 8.675687 35.55284 -3.3074961E-3
+ 31.2 9.536022 35.58213 -3.4257436E-3
+ 31.2 9.94883 35.517162 -3.5351281E-3
+ 31.2 10.331738 35.46755 -3.6115373E-3
+ 31.2 10.766571 35.4817 -3.6552387E-3
+ 31.2 11.19758 35.521827 -3.6627876E-3
+ 31.2 11.50239 35.555885 -3.6549693E-3
+ 31.2 11.73013 35.58159 -3.6357326E-3
+ 31.2 11.893749 35.598567 -3.6154731E-3
+ 31.2 12.055131 35.614696 -3.609534E-3
+ 31.2 12.174989 35.629562 -3.614462E-3
+ 31.2 12.272727 35.63918 -3.6205213E-3
+ 31.2 12.376401 35.651874 -3.6249803E-3
+ 31.2 12.456409 35.66107 -3.626089E-3
+ 31.2 12.52732 35.66585 -3.629348E-3
+ 31.2 12.5769 35.668445 -3.6346288E-3
+ 31.2 12.6209 35.67177 -3.6393136E-3
+ 31.2 12.693602 35.679515 -3.6462051E-3
+ 31.2 12.728573 35.68219 -3.6538587E-3
+ 31.2 12.77432 35.68708 -3.659205E-3
+ 31.2 12.815818 35.69182 -3.662051E-3
+ 31.2 12.869137 35.698184 -3.6642285E-3
+ 31.2 12.907697 35.701374 -3.6669017E-3
+ 31.2 12.936105 35.704296 -3.667856E-3
+ 31.2 12.965993 35.706382 -3.6647301E-3
+ 31.2 13.007414 35.710956 -3.6593172E-3
+ 31.2 13.084508 35.716312 -3.6555905E-3
+ 31.2 13.145558 35.722316 -3.6530713E-3
+ 31.2 13.191202 35.72516 -3.6493395E-3
+ 31.2 13.226325 35.7279 -3.644504E-3
+ 31.2 13.273141 35.731613 -3.637453E-3
+ 31.2 13.337465 35.732944 -3.6283645E-3
+ 31.2 13.418835 35.739418 -3.614011E-3
+ 31.2 13.514649 35.73646 -3.595802E-3
+ 31.2 13.58897 35.74429 -3.5728553E-3
+ 31.2 13.720216 35.74358 -3.5438053E-3
+ 31.2 13.920102 35.75424 -3.5120774E-3
+ 31.2 14.227265 35.756126 -3.472246E-3
+ 31.2 14.842982 35.75028 -3.4412974E-3
+ 31.2 15.719968 35.72327 -3.4462802E-3
+ 31.2 16.50594 35.713157 -3.5049752E-3
+ 31.2 17.235292 35.71479 -3.5416234E-3
+ 31.2 17.551477 35.708236 -3.4928848E-3
+ 31.2 17.70963 35.713287 -3.3983425E-3
+ 31.2 17.814257 35.70818 -3.2920998E-3
+ 31.2 17.866398 35.69484 -3.1937025E-3
+ 31.2 17.889029 35.690357 -3.1042555E-3
+ 31.2 17.875858 35.694862 -3.0185752E-3
+ 31.2 17.879316 35.696037 -2.93155E-3
+ 31.2 17.8672 35.697753 -2.8087783E-3
+ 31.25 2.513116 34.89282 0.0E+0
+ 31.25 2.5219488 34.90306 2.3634182E-5
+ 31.25 2.5388958 34.909107 1.0702516E-4
+ 31.25 2.557086 34.915725 9.295439E-5
+ 31.25 2.593793 34.91785 1.2668793E-5
+ 31.25 2.682695 34.92691 -1.2935585E-4
+ 31.25 2.807307 34.94043 -3.251584E-4
+ 31.25 2.9854042 34.949584 -5.5980985E-4
+ 31.25 3.1910924 34.956066 -8.563441E-4
+ 31.25 3.353042 34.94849 -1.2008282E-3
+ 31.25 3.471827 34.937297 -1.5105132E-3
+ 31.25 3.6164157 34.926582 -1.8273073E-3
+ 31.25 3.9592118 34.955913 -2.2478078E-3
+ 31.25 4.674955 35.04879 -2.6450457E-3
+ 31.25 5.8157863 35.20027 -3.1111331E-3
+ 31.25 7.4481544 35.426883 -3.69076E-3
+ 31.25 8.682908 35.5544 -4.014133E-3
+ 31.25 9.539619 35.583065 -4.162482E-3
+ 31.25 9.950286 35.51757 -4.3003195E-3
+ 31.25 10.332885 35.46791 -4.397712E-3
+ 31.25 10.767855 35.48202 -4.454262E-3
+ 31.25 11.198447 35.52204 -4.4662104E-3
+ 31.25 11.50279 35.55595 -4.458924E-3
+ 31.25 11.730361 35.58158 -4.4373283E-3
+ 31.25 11.894546 35.598693 -4.4141705E-3
+ 31.25 12.055414 35.61479 -4.4079953E-3
+ 31.25 12.175018 35.629604 -4.414692E-3
+ 31.25 12.272741 35.63923 -4.422529E-3
+ 31.25 12.376269 35.65186 -4.428305E-3
+ 31.25 12.456249 35.66103 -4.4299727E-3
+ 31.25 12.527129 35.665866 -4.4341715E-3
+ 31.25 12.576938 35.66851 -4.440777E-3
+ 31.25 12.620878 35.671825 -4.4466475E-3
+ 31.25 12.693134 35.679523 -4.4551645E-3
+ 31.25 12.728537 35.68229 -4.464596E-3
+ 31.25 12.774441 35.687187 -4.471241E-3
+ 31.25 12.816085 35.691917 -4.4748703E-3
+ 31.25 12.869126 35.69824 -4.4776876E-3
+ 31.25 12.907736 35.70144 -4.481093E-3
+ 31.25 12.936389 35.704357 -4.482416E-3
+ 31.25 12.966804 35.70647 -4.4788136E-3
+ 31.25 13.008227 35.711044 -4.4724494E-3
+ 31.25 13.08528 35.716464 -4.4681024E-3
+ 31.25 13.146142 35.7224 -4.4652074E-3
+ 31.25 13.19178 35.7252 -4.460851E-3
+ 31.25 13.226994 35.72795 -4.4551417E-3
+ 31.25 13.27414 35.73165 -4.446741E-3
+ 31.25 13.338754 35.733055 -4.4358684E-3
+ 31.25 13.421221 35.73956 -4.418634E-3
+ 31.25 13.517264 35.736732 -4.396738E-3
+ 31.25 13.592682 35.744552 -4.3690884E-3
+ 31.25 13.72478 35.744071 -4.3340446E-3
+ 31.25 13.924733 35.75463 -4.2957155E-3
+ 31.25 14.232936 35.756542 -4.247576E-3
+ 31.25 14.846754 35.750926 -4.2100534E-3
+ 31.25 15.721474 35.72439 -4.2157894E-3
+ 31.25 16.502876 35.71454 -4.28615E-3
+ 31.25 17.241192 35.71619 -4.329919E-3
+ 31.25 17.562365 35.709644 -4.2706606E-3
+ 31.25 17.72217 35.714492 -4.155766E-3
+ 31.25 17.826624 35.709495 -4.026641E-3
+ 31.25 17.878784 35.696422 -3.907093E-3
+ 31.25 17.901054 35.692035 -3.798411E-3
+ 31.25 17.887608 35.69643 -3.69425E-3
+ 31.25 17.891441 35.697677 -3.588421E-3
+ 31.25 17.87805 35.6993 -3.43907E-3
+ 31.3 2.5134625 34.892902 0.0E+0
+ 31.3 2.5219964 34.903007 2.6948743E-5
+ 31.3 2.5387735 34.909084 1.2327309E-4
+ 31.3 2.5568313 34.91572 1.0680796E-4
+ 31.3 2.59358 34.91787 1.3304076E-5
+ 31.3 2.682097 34.926914 -1.5240007E-4
+ 31.3 2.8065347 34.94043 -3.812328E-4
+ 31.3 2.9845821 34.949604 -6.5617263E-4
+ 31.3 3.1902987 34.956134 -1.0039874E-3
+ 31.3 3.3531386 34.948684 -1.4086987E-3
+ 31.3 3.4731881 34.937622 -1.7739456E-3
+ 31.3 3.6194872 34.9272 -2.1483183E-3
+ 31.3 3.9652335 34.957027 -2.6433127E-3
+ 31.3 4.683004 35.050193 -3.1107268E-3
+ 31.3 5.831578 35.203296 -3.6555926E-3
+ 31.3 7.470584 35.431556 -4.3276175E-3
+ 31.3 8.691467 35.556255 -4.7057503E-3
+ 31.3 9.543866 35.58417 -4.886444E-3
+ 31.3 9.951997 35.51806 -5.0551393E-3
+ 31.3 10.334218 35.46834 -5.175822E-3
+ 31.3 10.769348 35.482395 -5.247023E-3
+ 31.3 11.19945 35.522293 -5.264923E-3
+ 31.3 11.503243 35.556022 -5.2594542E-3
+ 31.3 11.730609 35.581573 -5.2365823E-3
+ 31.3 11.895463 35.59884 -5.2114306E-3
+ 31.3 12.055723 35.614902 -5.2056303E-3
+ 31.3 12.17503 35.629646 -5.2144755E-3
+ 31.3 12.272739 35.63929 -5.2243326E-3
+ 31.3 12.376098 35.651847 -5.2316086E-3
+ 31.3 12.456047 35.660984 -5.2340105E-3
+ 31.3 12.526891 35.66589 -5.2392696E-3
+ 31.3 12.576974 35.66859 -5.2472846E-3
+ 31.3 12.620844 35.671897 -5.254422E-3
+ 31.3 12.69257 35.679534 -5.2646165E-3
+ 31.3 12.728481 35.682403 -5.2758683E-3
+ 31.3 12.774571 35.68731 -5.2838735E-3
+ 31.3 12.816387 35.69204 -5.2883713E-3
+ 31.3 12.869101 35.6983 -5.291916E-3
+ 31.3 12.907769 35.70152 -5.2961306E-3
+ 31.3 12.936715 35.70443 -5.2979104E-3
+ 31.3 12.967753 35.706577 -5.2939546E-3
+ 31.3 13.009182 35.71115 -5.2867792E-3
+ 31.3 13.086188 35.71665 -5.2819293E-3
+ 31.3 13.146825 35.722503 -5.2787614E-3
+ 31.3 13.192457 35.72525 -5.273895E-3
+ 31.3 13.227785 35.728015 -5.267424E-3
+ 31.3 13.275321 35.7317 -5.257795E-3
+ 31.3 13.340282 35.733184 -5.2452692E-3
+ 31.3 13.424045 35.73973 -5.2253264E-3
+ 31.3 13.52036 35.737056 -5.1999446E-3
+ 31.3 13.59708 35.744865 -5.1678135E-3
+ 31.3 13.730187 35.74466 -5.1270336E-3
+ 31.3 13.930235 35.755096 -5.0823544E-3
+ 31.3 14.239665 35.75704 -5.0262082E-3
+ 31.3 14.851255 35.751697 -4.982277E-3
+ 31.3 15.723286 35.725715 -4.988562E-3
+ 31.3 16.499317 35.71618 -5.069806E-3
+ 31.3 17.248209 35.717853 -5.1201162E-3
+ 31.3 17.575321 35.71132 -5.050509E-3
+ 31.3 17.737108 35.71592 -4.9156225E-3
+ 31.3 17.841352 35.71106 -4.764011E-3
+ 31.3 17.893524 35.6983 -4.6236985E-3
+ 31.3 17.915369 35.694023 -4.4961287E-3
+ 31.3 17.901594 35.698295 -4.373787E-3
+ 31.3 17.905876 35.699615 -4.2494405E-3
+ 31.3 17.890968 35.70113 -4.073883E-3
+ 31.35 2.5138616 34.892993 0.0E+0
+ 31.35 2.5220518 34.90295 2.9798734E-5
+ 31.35 2.538631 34.909053 1.380118E-4
+ 31.35 2.5565383 34.91571 1.1922882E-4
+ 31.35 2.593334 34.917892 1.3150421E-5
+ 31.35 2.6814072 34.926925 -1.7523734E-4
+ 31.35 2.8056414 34.940433 -4.3590925E-4
+ 31.35 2.9836294 34.949626 -7.500445E-4
+ 31.35 3.1893777 34.95621 -1.1479323E-3
+ 31.35 3.3532457 34.94891 -1.6117737E-3
+ 31.35 3.4747586 34.938 -2.0322604E-3
+ 31.35 3.6230316 34.92791 -2.4642217E-3
+ 31.35 3.9721665 34.958316 -3.032824E-3
+ 31.35 4.6922616 35.051807 -3.569511E-3
+ 31.35 5.849702 35.206775 -4.1905255E-3
+ 31.35 7.496268 35.43691 -4.949266E-3
+ 31.35 8.701308 35.55839 -5.380566E-3
+ 31.35 9.548723 35.58545 -5.5961865E-3
+ 31.35 9.953939 35.518623 -5.7984865E-3
+ 31.35 10.335712 35.468837 -5.9450855E-3
+ 31.35 10.771025 35.482822 -6.0329902E-3
+ 31.35 11.200567 35.52258 -6.0586063E-3
+ 31.35 11.503734 35.556102 -6.0564125E-3
+ 31.35 11.730861 35.581562 -6.0334904E-3
+ 31.35 11.89648 35.599002 -6.0073686E-3
+ 31.35 12.056041 35.615024 -6.002634E-3
+ 31.35 12.175013 35.629695 -6.014053E-3
+ 31.35 12.272714 35.63936 -6.0262004E-3
+ 31.35 12.375882 35.65183 -6.035181E-3
+ 31.35 12.455799 35.66093 -6.038513E-3
+ 31.35 12.526604 35.665912 -6.044967E-3
+ 31.35 12.577003 35.66868 -6.054485E-3
+ 31.35 12.620794 35.67198 -6.062979E-3
+ 31.35 12.691908 35.67955 -6.074908E-3
+ 31.35 12.728398 35.68254 -6.088027E-3
+ 31.35 12.774702 35.68745 -6.0974606E-3
+ 31.35 12.816713 35.692176 -6.102921E-3
+ 31.35 12.869056 35.69837 -6.1072907E-3
+ 31.35 12.90779 35.701614 -6.1124013E-3
+ 31.35 12.937076 35.704517 -6.1147357E-3
+ 31.35 12.96883 35.7067 -6.1105643E-3
+ 31.35 13.010267 35.711277 -6.102738E-3
+ 31.35 13.087221 35.71686 -6.0975165E-3
+ 31.35 13.147599 35.722621 -6.0941916E-3
+ 31.35 13.193227 35.72531 -6.088944E-3
+ 31.35 13.228692 35.72809 -6.081838E-3
+ 31.35 13.276676 35.73176 -6.0711177E-3
+ 31.35 13.34204 35.73334 -6.057088E-3
+ 31.35 13.427287 35.739933 -6.0346326E-3
+ 31.35 13.523916 35.737426 -6.0059945E-3
+ 31.35 13.602134 35.745223 -5.9696342E-3
+ 31.35 13.736402 35.745334 -5.9234136E-3
+ 31.35 13.936576 35.755634 -5.872669E-3
+ 31.35 14.247412 35.75761 -5.808863E-3
+ 31.35 14.856471 35.752586 -5.758711E-3
+ 31.35 15.725408 35.72724 -5.7653086E-3
+ 31.35 16.495323 35.718067 -5.8565386E-3
+ 31.35 17.256308 35.71977 -5.912725E-3
+ 31.35 17.59029 35.71324 -5.8329682E-3
+ 31.35 17.754395 35.717567 -5.678509E-3
+ 31.35 17.858389 35.712856 -5.504866E-3
+ 31.35 17.910553 35.70046 -5.344233E-3
+ 31.35 17.931908 35.69631 -5.1981722E-3
+ 31.35 17.917765 35.700435 -5.057993E-3
+ 31.35 17.922558 35.701847 -4.9154567E-3
+ 31.35 17.905903 35.703235 -4.7141197E-3
+ 31.4 2.5143113 34.8931 0.0E+0
+ 31.4 2.5221142 34.90288 3.212831E-5
+ 31.4 2.5384683 34.909015 1.5106257E-4
+ 31.4 2.5562083 34.915702 1.3004804E-4
+ 31.4 2.5930554 34.91792 1.2116852E-5
+ 31.4 2.6806285 34.926933 -1.978389E-4
+ 31.4 2.8046312 34.940437 -4.890149E-4
+ 31.4 2.9825496 34.949653 -8.411176E-4
+ 31.4 3.1883311 34.956295 -1.2877206E-3
+ 31.4 3.353361 34.94917 -1.8094525E-3
+ 31.4 3.47653 34.938426 -2.2847976E-3
+ 31.4 3.6270315 34.92872 -2.774328E-3
+ 31.4 3.97997 34.95977 -3.4155203E-3
+ 31.4 4.702669 35.053634 -4.020466E-3
+ 31.4 5.870025 35.210681 -4.714775E-3
+ 31.4 7.5249915 35.442905 -5.554161E-3
+ 31.4 8.712365 35.56081 -6.0370396E-3
+ 31.4 9.55415 35.58689 -6.2904674E-3
+ 31.4 9.956093 35.519264 -6.5294117E-3
+ 31.4 10.337342 35.469394 -6.7048263E-3
+ 31.4 10.772857 35.483303 -6.8117002E-3
+ 31.4 11.201777 35.5229 -6.8469746E-3
+ 31.4 11.504249 35.556194 -6.8496563E-3
+ 31.4 11.731101 35.581546 -6.8280305E-3
+ 31.4 11.897574 35.599185 -6.8020643E-3
+ 31.4 12.056351 35.615158 -6.7991483E-3
+ 31.4 12.174953 35.629745 -6.813603E-3
+ 31.4 12.272654 35.63943 -6.8283323E-3
+ 31.4 12.375614 35.651805 -6.8392376E-3
+ 31.4 12.455501 35.66087 -6.843712E-3
+ 31.4 12.526264 35.66594 -6.8515054E-3
+ 31.4 12.577019 35.66878 -6.862627E-3
+ 31.4 12.620725 35.672077 -6.872572E-3
+ 31.4 12.691147 35.679565 -6.886295E-3
+ 31.4 12.728282 35.68269 -6.901327E-3
+ 31.4 12.774826 35.68761 -6.9122603E-3
+ 31.4 12.817054 35.692333 -6.9187856E-3
+ 31.4 12.868984 35.698451 -6.9240862E-3
+ 31.4 12.90779 35.701717 -6.930185E-3
+ 31.4 12.937464 35.704612 -6.9331806E-3
+ 31.4 12.970019 35.706844 -6.9289444E-3
+ 31.4 13.011471 35.711421 -6.9206417E-3
+ 31.4 13.088368 35.717102 -6.9151925E-3
+ 31.4 13.148453 35.72276 -6.9118374E-3
+ 31.4 13.194079 35.72538 -6.9063496E-3
+ 31.4 13.229706 35.728176 -6.8987477E-3
+ 31.4 13.278196 35.731826 -6.8870857E-3
+ 31.4 13.344017 35.73352 -6.8717156E-3
+ 31.4 13.430924 35.740158 -6.8469652E-3
+ 31.4 13.527907 35.73785 -6.815325E-3
+ 31.4 13.607811 35.74563 -6.7750173E-3
+ 31.4 13.743383 35.746093 -6.7236842E-3
+ 31.4 13.943723 35.756244 -6.667193E-3
+ 31.4 14.256132 35.75826 -6.5961126E-3
+ 31.4 14.862385 35.753585 -6.5399515E-3
+ 31.4 15.727843 35.72896 -6.5465946E-3
+ 31.4 16.490965 35.720195 -6.646805E-3
+ 31.4 17.26545 35.72192 -6.708124E-3
+ 31.4 17.6072 35.715404 -6.618448E-3
+ 31.4 17.773958 35.719417 -6.444894E-3
+ 31.4 17.877663 35.71488 -6.2497365E-3
+ 31.4 17.929794 35.702884 -6.069282E-3
+ 31.4 17.950598 35.698883 -5.9051755E-3
+ 31.4 17.93605 35.702846 -5.747544E-3
+ 31.4 17.941416 35.704353 -5.587187E-3
+ 31.4 17.92279 35.705604 -5.3605516E-3
+ 31.45 2.5148086 34.893215 0.0E+0
+ 31.45 2.5221834 34.90281 3.388697E-5
+ 31.45 2.5382857 34.908977 1.6226403E-4
+ 31.45 2.5558435 34.91569 1.391138E-4
+ 31.45 2.5927464 34.917945 1.0123712E-5
+ 31.45 2.679765 34.92694 -2.2017352E-4
+ 31.45 2.8035078 34.94044 -5.4038345E-4
+ 31.45 2.981346 34.94968 -9.290971E-4
+ 31.45 3.1871616 34.95639 -1.4229125E-3
+ 31.45 3.3534815 34.949455 -2.001152E-3
+ 31.45 3.4784932 34.938907 -2.5309016E-3
+ 31.45 3.6314668 34.92962 -3.0779296E-3
+ 31.45 3.9885971 34.961387 -3.7905524E-3
+ 31.45 4.71416 35.055656 -4.46263E-3
+ 31.45 5.8923993 35.21499 -5.227206E-3
+ 31.45 7.5565166 35.449497 -6.1409296E-3
+ 31.45 8.724567 35.563488 -6.6738757E-3
+ 31.45 9.560096 35.58849 -6.9682472E-3
+ 31.45 9.958429 35.519977 -7.2471164E-3
+ 31.45 10.339078 35.470012 -7.4544623E-3
+ 31.45 10.774815 35.483825 -7.582741E-3
+ 31.45 11.203053 35.52325 -7.6297586E-3
+ 31.45 11.504769 35.556293 -7.639028E-3
+ 31.45 11.73131 35.581527 -7.6201404E-3
+ 31.45 11.89872 35.59938 -7.595533E-3
+ 31.45 12.056633 35.615303 -7.5952387E-3
+ 31.45 12.174837 35.6298 -7.6132146E-3
+ 31.45 12.272549 35.639507 -7.63083E-3
+ 31.45 12.375287 35.65178 -7.643889E-3
+ 31.45 12.455146 35.6608 -7.6497294E-3
+ 31.45 12.525867 35.665973 -7.659013E-3
+ 31.45 12.577016 35.668895 -7.6718386E-3
+ 31.45 12.620631 35.672187 -7.683333E-3
+ 31.45 12.690286 35.679584 -7.6989075E-3
+ 31.45 12.728125 35.682853 -7.7158976E-3
+ 31.45 12.774933 35.687786 -7.728403E-3
+ 31.45 12.817397 35.692504 -7.7360984E-3
+ 31.45 12.868876 35.698543 -7.74244E-3
+ 31.45 12.907762 35.701835 -7.749623E-3
+ 31.45 12.937872 35.704723 -7.753391E-3
+ 31.45 12.971308 35.707004 -7.7492515E-3
+ 31.45 13.01278 35.711582 -7.740659E-3
+ 31.45 13.089618 35.717372 -7.735135E-3
+ 31.45 13.149376 35.722915 -7.7318833E-3
+ 31.45 13.195005 35.725463 -7.726307E-3
+ 31.45 13.230822 35.72828 -7.718356E-3
+ 31.45 13.27987 35.73191 -7.705914E-3
+ 31.45 13.3462 35.733722 -7.6893786E-3
+ 31.45 13.434929 35.740413 -7.6625687E-3
+ 31.45 13.532306 35.738315 -7.6282024E-3
+ 31.45 13.614072 35.74608 -7.584254E-3
+ 31.45 13.751084 35.74693 -7.528167E-3
+ 31.45 13.951637 35.756916 -7.4662785E-3
+ 31.45 14.265773 35.758972 -7.3883463E-3
+ 31.45 14.868981 35.75469 -7.326407E-3
+ 31.45 15.730595 35.730857 -7.3328013E-3
+ 31.45 16.48632 35.722545 -7.440888E-3
+ 31.45 17.275589 35.724296 -7.5065284E-3
+ 31.45 17.625977 35.71779 -7.407194E-3
+ 31.45 17.795727 35.72147 -7.2150835E-3
+ 31.45 17.899097 35.71712 -6.998989E-3
+ 31.45 17.951164 35.70557 -6.7992657E-3
+ 31.45 17.971357 35.70172 -6.617606E-3
+ 31.45 17.956377 35.70551 -6.4429496E-3
+ 31.45 17.962366 35.707115 -6.2651806E-3
+ 31.45 17.941566 35.708217 -6.013782E-3
+ 31.5 2.515351 34.893344 0.0E+0
+ 31.5 2.5222592 34.902736 3.5029996E-5
+ 31.5 2.5380833 34.908935 1.714738E-4
+ 31.5 2.5554463 34.915676 1.4629288E-4
+ 31.5 2.5924074 34.917976 7.103592E-6
+ 31.5 2.6788206 34.926952 -2.4220721E-4
+ 31.5 2.8022754 34.94045 -5.898561E-4
+ 31.5 2.980022 34.949714 -1.0137022E-3
+ 31.5 3.185872 34.956493 -1.5530871E-3
+ 31.5 3.3536043 34.94977 -2.1863076E-3
+ 31.5 3.4806385 34.939434 -2.769924E-3
+ 31.5 3.6363155 34.93061 -3.3743027E-3
+ 31.5 3.9979968 34.96315 -4.157043E-3
+ 31.5 4.7266607 35.057865 -4.8950095E-3
+ 31.5 5.9166612 35.219673 -5.7266992E-3
+ 31.5 7.5905823 35.45664 -6.7083695E-3
+ 31.5 8.737834 35.56642 -7.2900187E-3
+ 31.5 9.566511 35.590232 -7.6286792E-3
+ 31.5 9.960921 35.520767 -7.950932E-3
+ 31.5 10.340888 35.470684 -8.193484E-3
+ 31.5 10.776863 35.48439 -8.345728E-3
+ 31.5 11.204369 35.52363 -8.406678E-3
+ 31.5 11.505276 35.5564 -8.424325E-3
+ 31.5 11.731471 35.581504 -8.4096845E-3
+ 31.5 11.899892 35.59959 -8.387696E-3
+ 31.5 12.056868 35.61545 -8.390857E-3
+ 31.5 12.174649 35.629852 -8.412851E-3
+ 31.5 12.272387 35.63959 -8.4336604E-3
+ 31.5 12.374893 35.651752 -8.4491064E-3
+ 31.5 12.45473 35.66073 -8.456539E-3
+ 31.5 12.525409 35.666004 -8.467464E-3
+ 31.5 12.576988 35.669017 -8.482095E-3
+ 31.5 12.620508 35.672306 -8.495235E-3
+ 31.5 12.689324 35.679607 -8.512714E-3
+ 31.5 12.727919 35.683036 -8.531703E-3
+ 31.5 12.775013 35.687976 -8.5458494E-3
+ 31.5 12.817729 35.69269 -8.554822E-3
+ 31.5 12.868727 35.698642 -8.562315E-3
+ 31.5 12.907698 35.701965 -8.57068E-3
+ 31.5 12.938288 35.70485 -8.575334E-3
+ 31.5 12.972679 35.70718 -8.571458E-3
+ 31.5 13.014181 35.711765 -8.562772E-3
+ 31.5 13.090957 35.71767 -8.557332E-3
+ 31.5 13.150357 35.723087 -8.554322E-3
+ 31.5 13.195995 35.725563 -8.548813E-3
+ 31.5 13.23203 35.728397 -8.540668E-3
+ 31.5 13.281685 35.73201 -8.527613E-3
+ 31.5 13.348579 35.733947 -8.510099E-3
+ 31.5 13.439276 35.740695 -8.481478E-3
+ 31.5 13.537083 35.738826 -8.444681E-3
+ 31.5 13.620876 35.746566 -8.39742E-3
+ 31.5 13.759454 35.747844 -8.336965E-3
+ 31.5 13.960277 35.757652 -8.270053E-3
+ 31.5 14.276278 35.759754 -8.185727E-3
+ 31.5 14.876237 35.755893 -8.118257E-3
+ 31.5 15.733668 35.73292 -8.124083E-3
+ 31.5 16.481476 35.72511 -8.238855E-3
+ 31.5 17.286678 35.72689 -8.307944E-3
+ 31.5 17.646536 35.720386 -8.199246E-3
+ 31.5 17.819616 35.7237 -7.98918E-3
+ 31.5 17.92261 35.719562 -7.7527863E-3
+ 31.5 17.97457 35.708492 -7.5343996E-3
+ 31.5 17.994099 35.704814 -7.335725E-3
+ 31.5 17.97866 35.70841 -7.1445102E-3
+ 31.5 17.985327 35.71012 -6.949778E-3
+ 31.5 17.96215 35.71106 -6.674204E-3
+ 31.55 2.515935 34.89348 0.0E+0
+ 31.55 2.5223412 34.902652 3.55189E-5
+ 31.55 2.537861 34.908893 1.7856983E-4
+ 31.55 2.5550184 34.915664 1.5147193E-4
+ 31.55 2.5920403 34.91801 3.0021217E-6
+ 31.55 2.6778001 34.926963 -2.6390331E-4
+ 31.55 2.8009393 34.940452 -6.3728215E-4
+ 31.55 2.978582 34.949745 -1.0946671E-3
+ 31.55 3.1844654 34.956607 -1.6778453E-3
+ 31.55 3.3537263 34.950115 -2.3643772E-3
+ 31.55 3.4829545 34.94001 -3.0012212E-3
+ 31.55 3.6415534 34.93169 -3.662706E-3
+ 31.55 4.0081133 34.965057 -4.514085E-3
+ 31.55 4.7400927 35.06025 -5.3165764E-3
+ 31.55 5.942636 35.2247 -6.2121506E-3
+ 31.55 7.6269073 35.464267 -7.255439E-3
+ 31.55 8.75208 35.569587 -7.884638E-3
+ 31.55 9.573339 35.592117 -8.271088E-3
+ 31.55 9.963539 35.52162 -8.6403E-3
+ 31.55 10.342739 35.4714 -8.921429E-3
+ 31.55 10.778965 35.484992 -9.100274E-3
+ 31.55 11.205697 35.52403 -9.177407E-3
+ 31.55 11.505752 35.55651 -9.205265E-3
+ 31.55 11.731564 35.581474 -9.196418E-3
+ 31.55 11.901062 35.599807 -9.1783395E-3
+ 31.55 12.057033 35.615604 -9.185802E-3
+ 31.55 12.174375 35.6299 -9.212311E-3
+ 31.55 12.272158 35.639675 -9.236617E-3
+ 31.55 12.374424 35.651721 -9.254676E-3
+ 31.55 12.454247 35.66065 -9.263929E-3
+ 31.55 12.524886 35.666042 -9.2766415E-3
+ 31.55 12.576929 35.669155 -9.293173E-3
+ 31.55 12.620352 35.67244 -9.308049E-3
+ 31.55 12.688261 35.67963 -9.327481E-3
+ 31.55 12.727656 35.683227 -9.348499E-3
+ 31.55 12.775058 35.688182 -9.364353E-3
+ 31.55 12.818039 35.692893 -9.374703E-3
+ 31.55 12.868527 35.698753 -9.3834605E-3
+ 31.55 12.907589 35.702106 -9.393102E-3
+ 31.55 12.938706 35.704986 -9.398753E-3
+ 31.55 12.974116 35.70738 -9.39531E-3
+ 31.55 13.015658 35.711963 -9.3867285E-3
+ 31.55 13.092373 35.717994 -9.3815345E-3
+ 31.55 13.151385 35.723278 -9.378907E-3
+ 31.55 13.197038 35.725673 -9.373626E-3
+ 31.55 13.233324 35.72853 -9.365443E-3
+ 31.55 13.283632 35.732124 -9.351949E-3
+ 31.55 13.351138 35.7342 -9.333647E-3
+ 31.55 13.443934 35.741004 -9.303477E-3
+ 31.55 13.542206 35.73938 -9.264558E-3
+ 31.55 13.62818 35.747097 -9.214331E-3
+ 31.55 13.76844 35.74882 -9.1499164E-3
+ 31.55 13.969596 35.75845 -9.078379E-3
+ 31.55 14.287588 35.7606 -8.988143E-3
+ 31.55 14.884134 35.757186 -8.915406E-3
+ 31.55 15.737068 35.73514 -8.920325E-3
+ 31.55 16.47652 35.727874 -9.040512E-3
+ 31.55 17.298666 35.729675 -9.112127E-3
+ 31.55 17.668781 35.723182 -8.994395E-3
+ 31.55 17.845535 35.72611 -8.767039E-3
+ 31.55 17.94811 35.72219 -8.511044E-3
+ 31.55 17.99991 35.711635 -8.274648E-3
+ 31.55 18.018726 35.70814 -8.05954E-3
+ 31.55 18.002813 35.71153 -7.852272E-3
+ 31.55 18.010197 35.71335 -7.6410663E-3
+ 31.55 17.984465 35.71411 -7.3419562E-3
+ 31.6 2.5165572 34.893623 0.0E+0
+ 31.6 2.5224285 34.90257 3.5321754E-5
+ 31.6 2.537619 34.908843 1.834515E-4
+ 31.6 2.5545628 34.91565 1.5455851E-4
+ 31.6 2.591646 34.918045 -2.2214114E-6
+ 31.6 2.6767082 34.926975 -2.8522236E-4
+ 31.6 2.7995045 34.940456 -6.825197E-4
+ 31.6 2.9770305 34.949783 -1.1717426E-3
+ 31.6 3.1829447 34.95673 -1.79681E-3
+ 31.6 3.353844 34.950485 -2.5348414E-3
+ 31.6 3.4854295 34.94063 -3.22416E-3
+ 31.6 3.647154 34.93285 -3.942381E-3
+ 31.6 4.018888 34.967102 -4.8607424E-3
+ 31.6 4.7543716 35.062797 -5.72627E-3
+ 31.6 5.970136 35.23004 -6.682466E-3
+ 31.6 7.665194 35.47233 -7.781242E-3
+ 31.6 8.767216 35.572982 -8.457105E-3
+ 31.6 9.58052 35.594123 -8.894942E-3
+ 31.6 9.9662485 35.522544 -9.314736E-3
+ 31.6 10.344594 35.472167 -9.637845E-3
+ 31.6 10.781084 35.485622 -9.845954E-3
+ 31.6 11.207006 35.52445 -9.941539E-3
+ 31.6 11.506176 35.55662 -9.981446E-3
+ 31.6 11.731569 35.581436 -9.979947E-3
+ 31.6 11.902201 35.60003 -9.967075E-3
+ 31.6 12.057107 35.61576 -9.979679E-3
+ 31.6 12.173999 35.629947 -0.010011183
+ 31.6 12.271849 35.63976 -0.010039273
+ 31.6 12.373874 35.651687 -0.010060162
+ 31.6 12.453693 35.66057 -0.010071452
+ 31.6 12.524294 35.666084 -0.010086091
+ 31.6 12.576832 35.6693 -0.010104609
+ 31.6 12.620159 35.67258 -0.010121304
+ 31.6 12.687097 35.67966 -0.010142722
+ 31.6 12.727329 35.683433 -0.010165791
+ 31.6 12.775056 35.688404 -0.010183406
+ 31.6 12.818314 35.693107 -0.010195234
+ 31.6 12.86827 35.698875 -0.010205358
+ 31.6 12.907427 35.70226 -0.010216365
+ 31.6 12.939114 35.70514 -0.010223121
+ 31.6 12.975604 35.707592 -0.010220279
+ 31.6 13.017198 35.712184 -0.010212005
+ 31.6 13.093851 35.71835 -0.010207218
+ 31.6 13.152447 35.723487 -0.010205111
+ 31.6 13.198125 35.7258 -0.010200216
+ 31.6 13.234694 35.728683 -0.010192152
+ 31.6 13.285697 35.732254 -0.010178394
+ 31.6 13.353865 35.734477 -0.010159498
+ 31.6 13.448874 35.74134 -0.010128045
+ 31.6 13.547642 35.73997 -0.010087325
+ 31.6 13.635936 35.747657 -0.010034494
+ 31.6 13.777985 35.749866 -9.966546E-3
+ 31.6 13.979548 35.7593 -9.8907984E-3
+ 31.6 14.299637 35.7615 -9.795163E-3
+ 31.6 14.892648 35.758563 -9.717437E-3
+ 31.6 15.740799 35.737503 -9.721089E-3
+ 31.6 16.471552 35.73082 -9.84536E-3
+ 31.6 17.31149 35.732643 -9.918535E-3
+ 31.6 17.692614 35.72615 -9.792134E-3
+ 31.6 17.873383 35.72867 -9.548217E-3
+ 31.6 17.975498 35.72499 -9.273381E-3
+ 31.6 18.027079 35.714977 -9.01968E-3
+ 31.6 18.045135 35.711677 -8.788758E-3
+ 31.6 18.028738 35.714843 -8.565982E-3
+ 31.6 18.036877 35.716777 -8.338828E-3
+ 31.6 18.008419 35.717357 -8.016875E-3
+ 31.65 2.517214 34.89378 0.0E+0
+ 31.65 2.5225207 34.90248 3.441346E-5
+ 31.65 2.5373578 34.908794 1.8604044E-4
+ 31.65 2.5540816 34.915634 1.5548192E-4
+ 31.65 2.5912268 34.91808 -8.593626E-6
+ 31.65 2.67555 34.926986 -3.0612223E-4
+ 31.65 2.7979762 34.940464 -7.254362E-4
+ 31.65 2.975372 34.94982 -1.2446967E-3
+ 31.65 3.1813135 34.956855 -1.9096287E-3
+ 31.65 3.3539535 34.950881 -2.6972056E-3
+ 31.65 3.4880506 34.941295 -3.4381162E-3
+ 31.65 3.6530897 34.93409 -4.2125554E-3
+ 31.65 4.0302567 34.96927 -5.196051E-3
+ 31.65 4.7694087 35.0655 -6.1229923E-3
+ 31.65 5.9989666 35.235656 -7.1365544E-3
+ 31.65 7.7051315 35.480766 -8.285007E-3
+ 31.65 8.783144 35.57658 -9.006953E-3
+ 31.65 9.587991 35.596252 -9.499816E-3
+ 31.65 9.969018 35.523525 -9.973801E-3
+ 31.65 10.346417 35.472972 -0.010342249
+ 31.65 10.783181 35.486282 -0.010582261
+ 31.65 11.208267 35.524883 -0.010698537
+ 31.65 11.506528 35.55674 -0.010752299
+ 31.65 11.731467 35.581394 -0.010759677
+ 31.65 11.90328 35.60025 -0.010753289
+ 31.65 12.057069 35.615913 -0.01077185
+ 31.65 12.173507 35.629993 -0.0108088
+ 31.65 12.271449 35.639842 -0.010840935
+ 31.65 12.373235 35.65165 -0.010864851
+ 31.65 12.453061 35.66048 -0.010878382
+ 31.65 12.523629 35.666126 -0.010895073
+ 31.65 12.576693 35.669456 -0.010915648
+ 31.65 12.619925 35.672737 -0.010934231
+ 31.65 12.685834 35.67969 -0.010957657
+ 31.65 12.72693 35.683647 -0.010982783
+ 31.65 12.774999 35.688632 -0.011002202
+ 31.65 12.81854 35.693336 -0.011015596
+ 31.65 12.867949 35.699 -0.011027182
+ 31.65 12.907204 35.702423 -0.011039633
+ 31.65 12.939506 35.705303 -0.011047596
+ 31.65 12.977124 35.70782 -0.011045518
+ 31.65 13.018785 35.712425 -0.011037748
+ 31.65 13.095379 35.718727 -0.011033523
+ 31.65 13.153533 35.723712 -0.011032071
+ 31.65 13.199244 35.725944 -0.011027717
+ 31.65 13.236135 35.728855 -0.011019926
+ 31.65 13.28787 35.732402 -0.011006075
+ 31.65 13.356747 35.73478 -0.010986778
+ 31.65 13.454062 35.741703 -0.010954315
+ 31.65 13.553357 35.740604 -0.01091212
+ 31.65 13.644098 35.748252 -0.010857057
+ 31.65 13.788028 35.75096 -0.010786015
+ 31.65 13.99008 35.7602 -0.010706489
+ 31.65 14.312359 35.76246 -0.010605984
+ 31.65 14.901755 35.760013 -0.010523561
+ 31.65 15.744869 35.739994 -0.010525569
+ 31.65 16.46667 35.73393 -0.010652538
+ 31.65 17.325092 35.735774 -0.010726281
+ 31.65 17.717928 35.729282 -0.010591614
+ 31.65 17.903053 35.731376 -0.010331931
+ 31.65 18.00467 35.727947 -0.010039074
+ 31.65 18.055958 35.718505 -9.768816E-3
+ 31.65 18.073215 35.715404 -9.522741E-3
+ 31.65 18.056334 35.718345 -9.285034E-3
+ 31.65 18.065256 35.720382 -9.042495E-3
+ 31.65 18.03392 35.720775 -8.698441E-3
+ 31.7 2.5179011 34.893936 0.0E+0
+ 31.7 2.522617 34.902393 3.277597E-5
+ 31.7 2.537077 34.908737 1.8628125E-4
+ 31.7 2.553578 34.915615 1.5419377E-4
+ 31.7 2.5907835 34.918117 -1.6126773E-5
+ 31.7 2.674331 34.926994 -3.265583E-4
+ 31.7 2.7963607 34.940467 -7.659093E-4
+ 31.7 2.9736118 34.949863 -1.313316E-3
+ 31.7 3.1795756 34.956993 -2.0159753E-3
+ 31.7 3.3540513 34.951305 -2.8510026E-3
+ 31.7 3.4908041 34.942005 -3.6424791E-3
+ 31.7 3.6593306 34.935405 -4.472444E-3
+ 31.7 4.0421533 34.971546 -5.519022E-3
+ 31.7 4.7851104 35.068336 -6.505615E-3
+ 31.7 6.028923 35.24151 -7.5733247E-3
+ 31.7 7.7463965 35.48951 -8.766066E-3
+ 31.7 8.799767 35.58037 -9.533848E-3
+ 31.7 9.595688 35.598487 -0.010085353
+ 31.7 9.97181 35.52457 -0.010617039
+ 31.7 10.348169 35.473812 -0.011034087
+ 31.7 10.785216 35.486957 -0.011308556
+ 31.7 11.20945 35.525325 -0.011447693
+ 31.7 11.506789 35.556854 -0.011517044
+ 31.7 11.731239 35.581344 -0.011534774
+ 31.7 11.904271 35.600475 -0.0115361
+ 31.7 12.056899 35.616065 -0.011561386
+ 31.7 12.172884 35.630027 -0.011604191
+ 31.7 12.270948 35.639923 -0.011640599
+ 31.7 12.3725 35.651607 -0.01166771
+ 31.7 12.45235 35.660392 -0.011683664
+ 31.7 12.52289 35.666175 -0.011702512
+ 31.7 12.576505 35.669624 -0.011725198
+ 31.7 12.619648 35.672904 -0.011745722
+ 31.7 12.684473 35.67973 -0.01177116
+ 31.7 12.726453 35.683872 -0.011798331
+ 31.7 12.774878 35.688873 -0.011819583
+ 31.7 12.818706 35.693572 -0.011834614
+ 31.7 12.867557 35.69914 -0.011847746
+ 31.7 12.906913 35.7026 -0.01186171
+ 31.7 12.939872 35.705482 -0.011870966
+ 31.7 12.978661 35.708072 -0.011869809
+ 31.7 13.020404 35.712684 -0.011862732
+ 31.7 13.096944 35.71913 -0.011859219
+ 31.7 13.15463 35.72396 -0.011858546
+ 31.7 13.200387 35.726104 -0.01185488
+ 31.7 13.237638 35.729045 -0.011847508
+ 31.7 13.290137 35.732574 -0.011833731
+ 31.7 13.359768 35.73511 -0.011814224
+ 31.7 13.459467 35.742092 -0.011781021
+ 31.7 13.559317 35.74127 -0.011737681
+ 31.7 13.652614 35.74888 -0.011680763
+ 31.7 13.798509 35.75211 -0.011607078
+ 31.7 14.001142 35.76115 -0.011524214
+ 31.7 14.325682 35.763465 -0.011419384
+ 31.7 14.91143 35.761535 -0.011332562
+ 31.7 15.749282 35.742595 -0.01133254
+ 31.7 16.461977 35.737182 -0.011460784
+ 31.7 17.339409 35.73905 -0.01153408
+ 31.7 17.744604 35.73255 -0.01139159
+ 31.7 17.934435 35.734214 -0.011117002
+ 31.7 18.035515 35.731044 -0.010807002
+ 31.7 18.086433 35.7222 -0.010520978
+ 31.7 18.102856 35.719303 -0.010260446
+ 31.7 18.085493 35.722007 -0.010008421
+ 31.7 18.095224 35.724147 -9.751096E-3
+ 31.7 18.060873 35.724346 -9.385735E-3
+ 31.75 2.518615 34.894104 0.0E+0
+ 31.75 2.522717 34.902305 3.03984E-5
+ 31.75 2.5367767 34.908683 1.8414181E-4
+ 31.75 2.553054 34.9156 1.5066827E-4
+ 31.75 2.590319 34.918155 -2.4818644E-5
+ 31.75 2.6730566 34.92701 -3.4648366E-4
+ 31.75 2.794664 34.94047 -8.038273E-4
+ 31.75 2.9717552 34.94991 -1.3774068E-3
+ 31.75 3.177735 34.957134 -2.1155495E-3
+ 31.75 3.3541333 34.951747 -2.9957937E-3
+ 31.75 3.4936761 34.942756 -3.8366517E-3
+ 31.75 3.665845 34.93679 -4.721252E-3
+ 31.75 4.0545096 34.97393 -5.8286422E-3
+ 31.75 4.8013806 35.071296 -6.8729785E-3
+ 31.75 6.0597953 35.247566 -7.99168E-3
+ 31.75 7.788658 35.498497 -9.223822E-3
+ 31.75 8.816979 35.584335 -0.010037535
+ 31.75 9.603544 35.600814 -0.010651209
+ 31.75 9.974589 35.52567 -0.01124395
+ 31.75 10.349814 35.47468 -0.011712678
+ 31.75 10.787148 35.487644 -0.012024027
+ 31.75 11.210523 35.52578 -0.012188074
+ 31.75 11.506939 35.556972 -0.012274639
+ 31.75 11.730866 35.581283 -0.01230411
+ 31.75 11.905145 35.600692 -0.012314305
+ 31.75 12.056578 35.616207 -0.012347022
+ 31.75 12.172119 35.630054 -0.012396032
+ 31.75 12.270336 35.64 -0.012436895
+ 31.75 12.371665 35.65156 -0.012467337
+ 31.75 12.451555 35.660297 -0.012485868
+ 31.75 12.522074 35.66622 -0.012506955
+ 31.75 12.576264 35.6698 -0.012531784
+ 31.75 12.619323 35.673084 -0.012554279
+ 31.75 12.683017 35.67977 -0.012581713
+ 31.75 12.725892 35.684104 -0.012610896
+ 31.75 12.774684 35.689125 -0.012633989
+ 31.75 12.8188 35.693817 -0.012650716
+ 31.75 12.867088 35.699287 -0.01266546
+ 31.75 12.906547 35.70278 -0.012680989
+ 31.75 12.940204 35.70568 -0.012691613
+ 31.75 12.980199 35.70834 -0.012691517
+ 31.75 13.022043 35.712966 -0.012685313
+ 31.75 13.098533 35.719562 -0.012682647
+ 31.75 13.155729 35.724227 -0.012682867
+ 31.75 13.201546 35.726284 -0.012680026
+ 31.75 13.239198 35.729255 -0.012673209
+ 31.75 13.292489 35.732765 -0.012659663
+ 31.75 13.362916 35.73547 -0.012640128
+ 31.75 13.465056 35.742504 -0.012606454
+ 31.75 13.565485 35.741962 -0.012562295
+ 31.75 13.661433 35.74953 -0.012503902
+ 31.75 13.809365 35.7533 -0.012428027
+ 31.75 14.012678 35.76214 -0.012342274
+ 31.75 14.339535 35.76451 -0.012233677
+ 31.75 14.921646 35.76311 -0.01214276
+ 31.75 15.754045 35.745296 -0.012140312
+ 31.75 16.45758 35.740573 -0.012268381
+ 31.75 17.354368 35.74245 -0.012340209
+ 31.75 17.772524 35.735946 -0.012190377
+ 31.75 17.967403 35.737163 -0.011901814
+ 31.75 18.067917 35.73427 -0.011575607
+ 31.75 18.11838 35.72603 -0.01127465
+ 31.75 18.133936 35.723346 -0.011000388
+ 31.75 18.116106 35.725807 -0.010734689
+ 31.75 18.126661 35.728042 -0.010463213
+ 31.75 18.089174 35.728046 -0.010077384
+ 31.8 2.5193505 34.89427 0.0E+0
+ 31.8 2.5228192 34.902217 2.727712E-5
+ 31.8 2.5364573 34.908626 1.7961349E-4
+ 31.8 2.5525131 34.915576 1.4490246E-4
+ 31.8 2.5898342 34.918193 -3.4652672E-5
+ 31.8 2.671733 34.927017 -3.6584943E-4
+ 31.8 2.7928917 34.940475 -8.3908956E-4
+ 31.8 2.9698076 34.94996 -1.4367949E-3
+ 31.8 3.1757957 34.957283 -2.2080806E-3
+ 31.8 3.3541958 34.952213 -3.131171E-3
+ 31.8 3.496652 34.943546 -4.0200552E-3
+ 31.8 3.6726005 34.938243 -4.9581783E-3
+ 31.8 4.0672535 34.976402 -6.1238845E-3
+ 31.8 4.8181204 35.074367 -7.223894E-3
+ 31.8 6.091371 35.253787 -8.390511E-3
+ 31.8 7.831582 35.507663 -9.65772E-3
+ 31.8 8.83468 35.588455 -0.010517796
+ 31.8 9.611493 35.60323 -0.011197013
+ 31.8 9.97732 35.52682 -0.011853925
+ 31.8 10.351313 35.475574 -0.012377171
+ 31.8 10.788939 35.48834 -0.012727635
+ 31.8 11.211458 35.526233 -0.01291848
+ 31.8 11.506959 35.557083 -0.013023737
+ 31.8 11.730333 35.581214 -0.013066218
+ 31.8 11.905876 35.600906 -0.013086342
+ 31.8 12.056086 35.61634 -0.01312711
+ 31.8 12.1712 35.630073 -0.013182604
+ 31.8 12.269604 35.64007 -0.013228051
+ 31.8 12.370724 35.651512 -0.013261918
+ 31.8 12.450675 35.660205 -0.013283146
+ 31.8 12.521181 35.666275 -0.013306524
+ 31.8 12.575966 35.669982 -0.013333501
+ 31.8 12.618951 35.673274 -0.013357975
+ 31.8 12.681472 35.679817 -0.013387363
+ 31.8 12.725243 35.684345 -0.013418502
+ 31.8 12.77441 35.689384 -0.013443422
+ 31.8 12.818812 35.694072 -0.01346188
+ 31.8 12.866539 35.69944 -0.013478286
+ 31.8 12.906102 35.702976 -0.013495412
+ 31.8 12.940498 35.705886 -0.013507459
+ 31.8 12.981723 35.708621 -0.013508551
+ 31.8 13.023687 35.71327 -0.013503382
+ 31.8 13.100134 35.720016 -0.013501686
+ 31.8 13.15682 35.72451 -0.013502896
+ 31.8 13.202712 35.726486 -0.013501001
+ 31.8 13.240808 35.729492 -0.013494863
+ 31.8 13.294915 35.732982 -0.013481694
+ 31.8 13.366179 35.735855 -0.013462304
+ 31.8 13.470797 35.742946 -0.013428416
+ 31.8 13.571826 35.74269 -0.013383761
+ 31.8 13.670506 35.750205 -0.01332427
+ 31.8 13.820532 35.754528 -0.013246661
+ 31.8 14.024633 35.76317 -0.013158467
+ 31.8 14.353844 35.765602 -0.013046665
+ 31.8 14.932376 35.764736 -0.012951965
+ 31.8 15.759165 35.74808 -0.01294669
+ 31.8 16.453587 35.744071 -0.013073123
+ 31.8 17.369904 35.745956 -0.013142463
+ 31.8 17.801561 35.739444 -0.012985811
+ 31.8 18.001837 35.74021 -0.012684267
+ 31.8 18.101753 35.737594 -0.012342849
+ 31.8 18.151669 35.72998 -0.012027827
+ 31.8 18.166332 35.727516 -0.011740593
+ 31.8 18.148058 35.729724 -0.011461894
+ 31.8 18.159445 35.73205 -0.011176931
+ 31.8 18.11872 35.731857 -0.010771521
+ 31.85 2.5201034 34.894447 0.0E+0
+ 31.85 2.522923 34.90213 2.341572E-5
+ 31.85 2.5361187 34.908565 1.7271106E-4
+ 31.85 2.5519578 34.915557 1.3691583E-4
+ 31.85 2.5893313 34.918231 -4.5598182E-5
+ 31.85 2.6703653 34.927032 -3.8460514E-4
+ 31.85 2.7910511 34.940483 -8.716073E-4
+ 31.85 2.9677746 34.950004 -1.4913278E-3
+ 31.85 3.1737623 34.957435 -2.293327E-3
+ 31.85 3.3542344 34.9527 -3.2567586E-3
+ 31.85 3.4997155 34.94437 -4.1921306E-3
+ 31.85 3.6795628 34.939754 -5.1824226E-3
+ 31.85 4.0803127 34.978954 -6.403708E-3
+ 31.85 4.835229 35.07753 -7.557152E-3
+ 31.85 6.1234335 35.260135 -8.768695E-3
+ 31.85 7.8748302 35.51694 -0.010067219
+ 31.85 8.852759 35.592716 -0.0109744
+ 31.85 9.619466 35.605712 -0.011722311
+ 31.85 9.979962 35.52802 -0.012446206
+ 31.85 10.352629 35.476486 -0.013026496
+ 31.85 10.790549 35.489032 -0.013418072
+ 31.85 11.212226 35.526687 -0.013637396
+ 31.85 11.506833 35.557193 -0.013762641
+ 31.85 11.729623 35.581134 -0.013819254
+ 31.85 11.906438 35.601104 -0.013850241
+ 31.85 12.055409 35.616466 -0.01389958
+ 31.85 12.170119 35.63008 -0.013961754
+ 31.85 12.268746 35.640136 -0.01401185
+ 31.85 12.369676 35.65146 -0.014049188
+ 31.85 12.449709 35.66011 -0.014073192
+ 31.85 12.520212 35.66633 -0.01409888
+ 31.85 12.57561 35.670177 -0.01412798
+ 31.85 12.618531 35.673473 -0.014154411
+ 31.85 12.679841 35.67987 -0.014185684
+ 31.85 12.724503 35.68459 -0.014218698
+ 31.85 12.774052 35.689647 -0.014245405
+ 31.85 12.818732 35.694332 -0.014265607
+ 31.85 12.865906 35.699604 -0.014283699
+ 31.85 12.905573 35.703182 -0.014302434
+ 31.85 12.940748 35.706111 -0.014315941
+ 31.85 12.983218 35.708923 -0.014318325
+ 31.85 13.025326 35.713592 -0.014314336
+ 31.85 13.101737 35.72049 -0.014313711
+ 31.85 13.157895 35.724815 -0.014315992
+ 31.85 13.203879 35.72671 -0.014315148
+ 31.85 13.242464 35.72975 -0.014309795
+ 31.85 13.297405 35.733226 -0.014297133
+ 31.85 13.369545 35.73627 -0.014278046
+ 31.85 13.476658 35.743412 -0.014244193
+ 31.85 13.578307 35.743442 -0.014199353
+ 31.85 13.67978 35.7509 -0.014139134
+ 31.85 13.831948 35.755783 -0.014060241
+ 31.85 14.036952 35.76423 -0.013970054
+ 31.85 14.368533 35.766723 -0.01385561
+ 31.85 14.943592 35.766403 -0.013757441
+ 31.85 15.76465 35.75093 -0.013748938
+ 31.85 16.450102 35.74766 -0.013872273
+ 31.85 17.38594 35.749553 -0.01393812
+ 31.85 17.831581 35.743022 -0.013775212
+ 31.85 18.0376 35.74334 -0.013461749
+ 31.85 18.136906 35.741012 -0.013106168
+ 31.85 18.186169 35.73403 -0.012777983
+ 31.85 18.199923 35.731784 -0.012478561
+ 31.85 18.181232 35.73374 -0.012187562
+ 31.85 18.193447 35.73614 -0.011889809
+ 31.85 18.149405 35.735752 -0.01146575
+ 31.9 2.520869 34.894622 0.0E+0
+ 31.9 2.523027 34.902046 1.8824938E-5
+ 31.9 2.5357613 34.9085 1.6347234E-4
+ 31.9 2.5513913 34.915534 1.2675009E-4
+ 31.9 2.588812 34.91827 -5.7610854E-5
+ 31.9 2.6689603 34.92704 -4.0269913E-4
+ 31.9 2.7891485 34.940486 -9.0130383E-4
+ 31.9 2.9656624 34.950057 -1.5408742E-3
+ 31.9 3.171639 34.957595 -2.3710767E-3
+ 31.9 3.3542454 34.953205 -3.372216E-3
+ 31.9 3.5028514 34.94523 -4.3523432E-3
+ 31.9 3.6866972 34.941322 -5.3931875E-3
+ 31.9 4.093613 34.981575 -6.667067E-3
+ 31.9 4.852605 35.080772 -7.871525E-3
+ 31.9 6.155768 35.26657 -9.12509E-3
+ 31.9 7.918068 35.526264 -0.010451763
+ 31.9 8.871115 35.59709 -0.011407054
+ 31.9 9.627397 35.608253 -0.012226522
+ 31.9 9.982482 35.529254 -0.013019839
+ 31.9 10.353724 35.47741 -0.013659324
+ 31.9 10.79194 35.489723 -0.01409372
+ 31.9 11.2128 35.52713 -0.014342954
+ 31.9 11.506545 35.5573 -0.014489264
+ 31.9 11.728725 35.581047 -0.014560957
+ 31.9 11.90681 35.601295 -0.014603595
+ 31.9 12.054533 35.616573 -0.014661906
+ 31.9 12.168868 35.63008 -0.014730861
+ 31.9 12.267756 35.64019 -0.0147856
+ 31.9 12.368518 35.651405 -0.014826399
+ 31.9 12.448657 35.660015 -0.014853212
+ 31.9 12.519166 35.666385 -0.01488119
+ 31.9 12.575193 35.670375 -0.014912355
+ 31.9 12.618064 35.673686 -0.01494069
+ 31.9 12.678134 35.679927 -0.014973751
+ 31.9 12.72367 35.684833 -0.015008528
+ 31.9 12.773605 35.689914 -0.015036956
+ 31.9 12.818555 35.6946 -0.015058887
+ 31.9 12.865187 35.69977 -0.015078664
+ 31.9 12.904959 35.703392 -0.015098995
+ 31.9 12.94095 35.70635 -0.015113972
+ 31.9 12.984674 35.709243 -0.015117732
+ 31.9 13.02695 35.713932 -0.015115043
+ 31.9 13.103334 35.72099 -0.01511557
+ 31.9 13.158948 35.72514 -0.01511898
+ 31.9 13.205042 35.726955 -0.015119271
+ 31.9 13.244165 35.730033 -0.015114791
+ 31.9 13.299952 35.733493 -0.015102749
+ 31.9 13.373001 35.736713 -0.015084105
+ 31.9 13.482609 35.7439 -0.01505052
+ 31.9 13.584893 35.74422 -0.015005792
+ 31.9 13.689206 35.751613 -0.014945206
+ 31.9 13.84355 35.757057 -0.014865471
+ 31.9 14.049577 35.76532 -0.014773731
+ 31.9 14.383529 35.767875 -0.014657205
+ 31.9 14.955266 35.768096 -0.01455588
+ 31.9 15.770506 35.753833 -0.014543751
+ 31.9 16.447227 35.751327 -0.014662543
+ 31.9 17.402405 35.753215 -0.014723916
+ 31.9 17.862452 35.746665 -0.014555356
+ 31.9 18.074556 35.746536 -0.0142311
+ 31.9 18.173244 35.744503 -0.013862459
+ 31.9 18.221752 35.738155 -0.013522044
+ 31.9 18.23458 35.736125 -0.013211239
+ 31.9 18.21551 35.73783 -0.012908665
+ 31.9 18.228548 35.7403 -0.012598847
+ 31.9 18.18112 35.739715 -0.012157111
+ 31.95 2.5216424 34.8948 0.0E+0
+ 31.95 2.52313 34.901962 1.3522501E-5
+ 31.95 2.5353851 34.90844 1.5195765E-4
+ 31.95 2.550816 34.915512 1.144685E-4
+ 31.95 2.5882787 34.91831 -7.063331E-5
+ 31.95 2.6675236 34.92705 -4.2007912E-4
+ 31.95 2.787191 34.94049 -9.2811544E-4
+ 31.95 2.963477 34.95011 -1.5853258E-3
+ 31.95 3.1694304 34.957756 -2.4411503E-3
+ 31.95 3.354225 34.953727 -3.4772376E-3
+ 31.95 3.506044 34.946117 -4.5001846E-3
+ 31.95 3.6939675 34.942935 -5.5896854E-3
+ 31.95 4.10708 34.98425 -6.912917E-3
+ 31.95 4.8701467 35.084075 -8.165777E-3
+ 31.95 6.1881585 35.273056 -9.4585334E-3
+ 31.95 7.9609646 35.535564 -0.010810749
+ 31.95 8.889638 35.60157 -0.01181536
+ 31.95 9.635217 35.610843 -0.012708894
+ 31.95 9.984842 35.53053 -0.013573631
+ 31.95 10.354565 35.47834 -0.014274027
+ 31.95 10.793077 35.490402 -0.014752615
+ 31.95 11.213156 35.52757 -0.015032902
+ 31.95 11.506082 35.557395 -0.015201108
+ 31.95 11.727627 35.580947 -0.015288627
+ 31.95 11.90697 35.601467 -0.015343534
+ 31.95 12.053448 35.616664 -0.015411082
+ 31.95 12.167445 35.630062 -0.015486813
+ 31.95 12.266633 35.640235 -0.01554611
+ 31.95 12.367251 35.651344 -0.015590299
+ 31.95 12.447522 35.659923 -0.015619903
+ 31.95 12.518049 35.666446 -0.01565011
+ 31.95 12.574716 35.67058 -0.015683247
+ 31.95 12.617551 35.67391 -0.015713397
+ 31.95 12.676359 35.679992 -0.015748115
+ 31.95 12.722745 35.685085 -0.015784511
+ 31.95 12.773066 35.69019 -0.015814563
+ 31.95 12.818274 35.69487 -0.01583818
+ 31.95 12.864384 35.69995 -0.015859613
+ 31.95 12.90426 35.703613 -0.0158815
+ 31.95 12.941103 35.706604 -0.015897932
+ 31.95 12.98608 35.70958 -0.015903123
+ 31.95 13.02855 35.7143 -0.015901828
+ 31.95 13.104917 35.721508 -0.015903564
+ 31.95 13.159975 35.725486 -0.01590814
+ 31.95 13.206199 35.727226 -0.015909625
+ 31.95 13.245907 35.730346 -0.015906082
+ 31.95 13.302549 35.73379 -0.01589475
+ 31.95 13.376541 35.73719 -0.015876673
+ 31.95 13.48862 35.744415 -0.015843568
+ 31.95 13.591552 35.745018 -0.015799236
+ 31.95 13.698734 35.752342 -0.015738627
+ 31.95 13.855277 35.75835 -0.015658477
+ 31.95 14.062455 35.76643 -0.015565615
+ 31.95 14.398758 35.76905 -0.015447559
+ 31.95 14.967368 35.769817 -0.01534339
+ 31.95 15.77674 35.75677 -0.015327244
+ 31.95 16.44507 35.75505 -0.015440075
+ 31.95 17.419222 35.756923 -0.015496026
+ 31.95 17.894028 35.75035 -0.015322461
+ 31.95 18.112564 35.749786 -0.014988602
+ 31.95 18.21064 35.748046 -0.014608053
+ 31.95 18.258284 35.742336 -0.014256366
+ 31.95 18.270176 35.740524 -0.013935004
+ 31.95 18.25077 35.741977 -0.013621601
+ 31.95 18.264614 35.744495 -0.013300468
+ 31.95 18.213755 35.74372 -0.012842067
+ 32.0 2.5224184 34.894977 0.0E+0
+ 32.0 2.5232305 34.901885 7.5329126E-6
+ 32.0 2.53499 34.908374 1.3824891E-4
+ 32.0 2.550235 34.91549 1.0015496E-4
+ 32.0 2.5877332 34.918346 -8.459588E-5
+ 32.0 2.6660614 34.92706 -4.3669276E-4
+ 32.0 2.7851846 34.94049 -9.519912E-4
+ 32.0 2.9612243 34.950164 -1.6245961E-3
+ 32.0 3.1671416 34.95792 -2.5034002E-3
+ 32.0 3.354169 34.954265 -3.571556E-3
+ 32.0 3.509276 34.947036 -4.6351766E-3
+ 32.0 3.7013375 34.944595 -5.7711466E-3
+ 32.0 4.120638 34.98697 -7.1402257E-3
+ 32.0 4.887753 35.087425 -8.438671E-3
+ 32.0 6.220396 35.27955 -9.767846E-3
+ 32.0 8.003198 35.54478 -0.011143507
+ 32.0 8.908226 35.606132 -0.012198776
+ 32.0 9.642862 35.61347 -0.013168464
+ 32.0 9.987006 35.531833 -0.014106119
+ 32.0 10.355119 35.47927 -0.014868647
+ 32.0 10.793927 35.491062 -0.015392421
+ 32.0 11.213272 35.52799 -0.015704582
+ 32.0 11.505432 35.557487 -0.015895234
+ 32.0 11.726323 35.580837 -0.015999101
+ 32.0 11.906904 35.60162 -0.016066708
+ 32.0 12.052147 35.61674 -0.01614361
+ 32.0 12.165848 35.630035 -0.016225994
+ 32.0 12.265375 35.64027 -0.016289677
+ 32.0 12.365878 35.651283 -0.016337125
+ 32.0 12.446308 35.65983 -0.016369443
+ 32.0 12.516865 35.666507 -0.016401773
+ 32.0 12.574181 35.670795 -0.016436744
+ 32.0 12.616998 35.674144 -0.016468588
+ 32.0 12.674526 35.68006 -0.016504798
+ 32.0 12.721731 35.685333 -0.016542638
+ 32.0 12.772437 35.690464 -0.016574182
+ 32.0 12.817886 35.695144 -0.016599406
+ 32.0 12.863497 35.700134 -0.016622437
+ 32.0 12.903478 35.703842 -0.016645811
+ 32.0 12.941207 35.70687 -0.016663654
+ 32.0 12.987428 35.709934 -0.016670303
+ 32.0 13.03012 35.714683 -0.016670467
+ 32.0 13.106481 35.72205 -0.01667344
+ 32.0 13.160973 35.72585 -0.01667919
+ 32.0 13.207348 35.727523 -0.016681904
+ 32.0 13.247692 35.730682 -0.01667934
+ 32.0 13.30519 35.73412 -0.016668787
+ 32.0 13.380154 35.737693 -0.016651377
+ 32.0 13.494666 35.744956 -0.016618945
+ 32.0 13.598254 35.745834 -0.016575264
+ 32.0 13.708318 35.753086 -0.016514963
+ 32.0 13.867068 35.75965 -0.016434807
+ 32.0 14.075528 35.767562 -0.01634124
+ 32.0 14.414145 35.770244 -0.016222192
+ 32.0 14.97987 35.771545 -0.016115487
+ 32.0 15.783361 35.759727 -0.016094944
+ 32.0 16.443726 35.75881 -0.016200438
+ 32.0 17.436312 35.760662 -0.016250068
+ 32.0 17.92617 35.754062 -0.016072182
+ 32.0 18.151482 35.75307 -0.01572997
+ 32.0 18.24896 35.75162 -0.015338712
+ 32.0 18.29563 35.746547 -0.014976735
+ 32.0 18.306583 35.744953 -0.014645656
+ 32.0 18.286896 35.74616 -0.014322189
+ 32.0 18.301521 35.748706 -0.013990516
+ 32.0 18.247204 35.74775 -0.013516496
+ 32.05 2.523192 34.895156 0.0E+0
+ 32.05 2.5233273 34.901813 8.871651E-7
+ 32.05 2.5345764 34.90831 1.2244887E-4
+ 32.05 2.549651 34.915462 8.391298E-5
+ 32.05 2.5871772 34.918384 -9.9417506E-5
+ 32.05 2.6645798 34.92707 -4.5248813E-4
+ 32.05 2.7831368 34.940494 -9.728936E-4
+ 32.05 2.958911 34.950222 -1.6586224E-3
+ 32.05 3.1647777 34.958087 -2.5577112E-3
+ 32.05 3.354074 34.95482 -3.6549428E-3
+ 32.05 3.5125315 34.947982 -4.7568767E-3
+ 32.05 3.70877 34.94629 -5.936823E-3
+ 32.05 4.134213 34.989715 -7.3479805E-3
+ 32.05 4.905324 35.09081 -8.688978E-3
+ 32.05 6.252275 35.28601 -0.01005183
+ 32.05 8.044455 35.55385 -0.011449279
+ 32.05 8.926777 35.610755 -0.012556582
+ 32.05 9.650271 35.61611 -0.013604031
+ 32.05 9.988941 35.53316 -0.014615544
+ 32.05 10.355354 35.480197 -0.015440883
+ 32.05 10.794458 35.4917 -0.016010417
+ 32.05 11.213127 35.528392 -0.016354915
+ 32.05 11.504586 35.557567 -0.016568262
+ 32.05 11.724807 35.58072 -0.016688757
+ 32.05 11.906596 35.601753 -0.016769286
+ 32.05 12.050626 35.6168 -0.016855497
+ 32.05 12.164079 35.629993 -0.01694429
+ 32.05 12.263984 35.640293 -0.017012099
+ 32.05 12.364404 35.651214 -0.017062593
+ 32.05 12.445021 35.659736 -0.017097497
+ 32.05 12.51562 35.666572 -0.01713179
+ 32.05 12.57359 35.671012 -0.017168423
+ 32.05 12.61641 35.67439 -0.017201792
+ 32.05 12.672648 35.68014 -0.017239293
+ 32.05 12.720633 35.68558 -0.017278366
+ 32.05 12.77172 35.69074 -0.01731124
+ 32.05 12.817391 35.695415 -0.017337961
+ 32.05 12.862532 35.70033 -0.017362498
+ 32.05 12.902617 35.70408 -0.017387258
+ 32.05 12.941265 35.707157 -0.017406436
+ 32.05 12.988712 35.710304 -0.017414538
+ 32.05 13.031656 35.715087 -0.017416194
+ 32.05 13.108022 35.722606 -0.017420406
+ 32.05 13.161942 35.726234 -0.01742731
+ 32.05 13.208491 35.727848 -0.017431257
+ 32.05 13.249521 35.73105 -0.017429687
+ 32.05 13.307873 35.734477 -0.017419957
+ 32.05 13.383835 35.738227 -0.017403288
+ 32.05 13.50072 35.74552 -0.017371695
+ 32.05 13.604972 35.74667 -0.0173289
+ 32.05 13.717911 35.753833 -0.017269213
+ 32.05 13.878868 35.760955 -0.01718944
+ 32.05 14.088745 35.768707 -0.017095566
+ 32.05 14.42962 35.771453 -0.016976047
+ 32.05 14.992742 35.773277 -0.016867109
+ 32.05 15.790375 35.762687 -0.016841805
+ 32.05 16.443289 35.76258 -0.016938644
+ 32.05 17.4536 35.76441 -0.016981103
+ 32.05 17.95873 35.75778 -0.01679962
+ 32.05 18.191156 35.756374 -0.016450362
+ 32.05 18.288078 35.755222 -0.01604964
+ 32.05 18.33366 35.750774 -0.015678372
+ 32.05 18.34368 35.74939 -0.015338428
+ 32.05 18.323763 35.75035 -0.015005676
+ 32.05 18.339136 35.75291 -0.014664257
+ 32.05 18.281355 35.75178 -0.014175699
+ 32.1 2.5239582 34.895332 0.0E+0
+ 32.1 2.5234186 34.901744 -6.3776055E-6
+ 32.1 2.5341444 34.90824 1.0467963E-4
+ 32.1 2.5490665 34.915435 6.5864405E-5
+ 32.1 2.5866131 34.918422 -1.1500679E-4
+ 32.1 2.6630847 34.92708 -4.6741456E-4
+ 32.1 2.7810542 34.940494 -9.907992E-4
+ 32.1 2.9565432 34.95028 -1.6873652E-3
+ 32.1 3.1623435 34.958255 -2.6040016E-3
+ 32.1 3.3539364 34.955383 -3.7272106E-3
+ 32.1 3.5157933 34.948947 -4.8648784E-3
+ 32.1 3.716228 34.948013 -6.085999E-3
+ 32.1 4.147732 34.992477 -7.5351987E-3
+ 32.1 4.9227623 35.0942 -8.9154904E-3
+ 32.1 6.2835965 35.29241 -0.010309276
+ 32.1 8.084437 35.56271 -0.011727207
+ 32.1 8.945191 35.61542 -0.012887857
+ 32.1 9.657382 35.618762 -0.014014136
+ 32.1 9.990612 35.53451 -0.015099836
+ 32.1 10.355244 35.48111 -0.015988076
+ 32.1 10.794644 35.492305 -0.016603487
+ 32.1 11.212707 35.528774 -0.016980406
+ 32.1 11.503538 35.557636 -0.017216373
+ 32.1 11.72308 35.580593 -0.017353505
+ 32.1 11.906039 35.601867 -0.017446961
+ 32.1 12.048887 35.616832 -0.017542267
+ 32.1 12.162146 35.629936 -0.01763709
+ 32.1 12.262466 35.64031 -0.017708668
+ 32.1 12.362835 35.65115 -0.017761933
+ 32.1 12.443669 35.659652 -0.017799221
+ 32.1 12.514322 35.66664 -0.017835272
+ 32.1 12.572951 35.671237 -0.017873349
+ 32.1 12.615795 35.67464 -0.017908039
+ 32.1 12.67074 35.680225 -0.017946592
+ 32.1 12.719458 35.68583 -0.01798665
+ 32.1 12.770919 35.691013 -0.018020654
+ 32.1 12.816791 35.69569 -0.018048726
+ 32.1 12.861495 35.700523 -0.01807464
+ 32.1 12.901683 35.704322 -0.018100651
+ 32.1 12.941282 35.707454 -0.018121056
+ 32.1 12.98993 35.71069 -0.018130576
+ 32.1 13.033158 35.715515 -0.018133724
+ 32.1 13.109541 35.723182 -0.018139139
+ 32.1 13.162883 35.72664 -0.018147152
+ 32.1 13.209631 35.728202 -0.018152308
+ 32.1 13.251398 35.731445 -0.018151715
+ 32.1 13.310597 35.734867 -0.018142821
+ 32.1 13.387579 35.738792 -0.018126944
+ 32.1 13.506762 35.74611 -0.018096332
+ 32.1 13.611679 35.747516 -0.018054629
+ 32.1 13.727472 35.754592 -0.017995836
+ 32.1 13.890622 35.762256 -0.01791681
+ 32.1 14.102052 35.769863 -0.017823005
+ 32.1 14.445113 35.77267 -0.017703518
+ 32.1 15.005955 35.775005 -0.01759264
+ 32.1 15.79779 35.76564 -0.017562233
+ 32.1 16.443846 35.766353 -0.017649159
+ 32.1 17.471008 35.768146 -0.017683666
+ 32.1 17.991566 35.761482 -0.017499348
+ 32.1 18.231441 35.759685 -0.017144404
+ 32.1 18.327856 35.75882 -0.016735502
+ 32.1 18.372246 35.75499 -0.016355954
+ 32.1 18.381336 35.753814 -0.016008005
+ 32.1 18.361256 35.754535 -0.01566676
+ 32.1 18.377338 35.757087 -0.015316409
+ 32.1 18.316101 35.755794 -0.014814421
+ 32.15 2.5247116 34.895503 0.0E+0
+ 32.15 2.523503 34.901683 -1.4218519E-5
+ 32.15 2.5336937 34.908176 8.508143E-5
+ 32.15 2.5484845 34.915405 4.6147964E-5
+ 32.15 2.586043 34.918457 -1.3126314E-4
+ 32.15 2.6615822 34.927085 -4.814231E-4
+ 32.15 2.778944 34.940494 -1.0056979E-3
+ 32.15 2.9541275 34.95034 -1.710809E-3
+ 32.15 3.1598443 34.958423 -2.642224E-3
+ 32.15 3.353753 34.955955 -3.7882144E-3
+ 32.15 3.5190455 34.949932 -4.958818E-3
+ 32.15 3.7236738 34.94976 -6.2179965E-3
+ 32.15 4.1611213 34.995246 -7.700937E-3
+ 32.15 4.939974 35.097595 -9.117031E-3
+ 32.15 6.3141722 35.29871 -0.010538973
+ 32.15 8.122866 35.571304 -0.011976325
+ 32.15 8.963374 35.620117 -0.013191466
+ 32.15 9.664139 35.621414 -0.014397049
+ 32.15 9.99199 35.535865 -0.015556611
+ 32.15 10.354764 35.482002 -0.016507212
+ 32.15 10.79446 35.49288 -0.017168138
+ 32.15 11.211998 35.529132 -0.01757715
+ 32.15 11.502286 35.557697 -0.017835323
+ 32.15 11.721143 35.580455 -0.01798883
+ 32.15 11.905227 35.601955 -0.018094987
+ 32.15 12.046934 35.616847 -0.01819899
+ 32.15 12.160057 35.629867 -0.01829933
+ 32.15 12.260828 35.64031 -0.018374221
+ 32.15 12.361181 35.651077 -0.0184299
+ 32.15 12.442263 35.65957 -0.018469311
+ 32.15 12.512983 35.66671 -0.018506862
+ 32.15 12.572271 35.671466 -0.018546114
+ 32.15 12.615161 35.674903 -0.018581878
+ 32.15 12.668819 35.680316 -0.018621206
+ 32.15 12.718216 35.686073 -0.018661968
+ 32.15 12.770042 35.691287 -0.018696863
+ 32.15 12.816091 35.695964 -0.018726103
+ 32.15 12.860397 35.70073 -0.01875323
+ 32.15 12.900687 35.704574 -0.018780328
+ 32.15 12.941264 35.707767 -0.018801821
+ 32.15 12.991082 35.711093 -0.018812682
+ 32.15 13.034627 35.715965 -0.018817281
+ 32.15 13.111039 35.723777 -0.018823836
+ 32.15 13.163803 35.727062 -0.018832877
+ 32.15 13.210774 35.72858 -0.018839188
+ 32.15 13.25333 35.731872 -0.018839529
+ 32.15 13.313362 35.73529 -0.01883146
+ 32.15 13.391385 35.739387 -0.018816397
+ 32.15 13.51277 35.746723 -0.018786874
+ 32.15 13.618353 35.74838 -0.01874644
+ 32.15 13.736962 35.75536 -0.018688796
+ 32.15 13.902281 35.763545 -0.018610852
+ 32.15 14.1154 35.771022 -0.018517468
+ 32.15 14.460559 35.77389 -0.01839849
+ 32.15 15.01948 35.776721 -0.018285958
+ 32.15 15.805611 35.76857 -0.018250123
+ 32.15 16.445478 35.770103 -0.018325958
+ 32.15 17.488459 35.77186 -0.018351806
+ 32.15 18.024525 35.765155 -0.018165449
+ 32.15 18.272184 35.762985 -0.01780623
+ 32.15 18.368168 35.762405 -0.017390462
+ 32.15 18.411255 35.75918 -0.017003661
+ 32.15 18.419434 35.7582 -0.016648566
+ 32.15 18.399256 35.75869 -0.016299631
+ 32.15 18.415998 35.761215 -0.015941173
+ 32.15 18.351337 35.75977 -0.015426887
+ 32.2 2.525447 34.895675 0.0E+0
+ 32.2 2.5235784 34.90163 -2.2587405E-5
+ 32.2 2.5332252 34.908107 6.381101E-5
+ 32.2 2.547907 34.91538 2.491766E-5
+ 32.2 2.5854682 34.918487 -1.4807803E-4
+ 32.2 2.6600782 34.92709 -4.944674E-4
+ 32.2 2.7768127 34.940494 -1.0175944E-3
+ 32.2 2.9516706 34.950397 -1.7289612E-3
+ 32.2 3.1572861 34.95859 -2.672364E-3
+ 32.2 3.353521 34.956535 -3.8378518E-3
+ 32.2 3.5222713 34.95093 -5.0383787E-3
+ 32.2 3.7310712 34.951522 -6.3321855E-3
+ 32.2 4.174312 34.998004 -7.8443065E-3
+ 32.2 4.9568667 35.100975 -9.292468E-3
+ 32.2 6.343824 35.304874 -0.010739715
+ 32.2 8.159476 35.57958 -0.012195557
+ 32.2 8.9812355 35.624816 -0.013466056
+ 32.2 9.670488 35.624046 -0.014750775
+ 32.2 9.993046 35.537227 -0.015983181
+ 32.2 10.353892 35.482872 -0.01699495
+ 32.2 10.793886 35.493415 -0.017700518
+ 32.2 11.210991 35.52946 -0.018140871
+ 32.2 11.500829 35.557746 -0.018420478
+ 32.2 11.719003 35.580307 -0.018589811
+ 32.2 11.90416 35.602016 -0.018708197
+ 32.2 12.044776 35.616844 -0.018820317
+ 32.2 12.157828 35.629783 -0.018925525
+ 32.2 12.259081 35.640293 -0.019003171
+ 32.2 12.359455 35.65101 -0.019060832
+ 32.2 12.440815 35.65949 -0.019102035
+ 32.2 12.511615 35.666782 -0.019140773
+ 32.2 12.571559 35.6717 -0.019180888
+ 32.2 12.614521 35.675174 -0.019217437
+ 32.2 12.666903 35.680416 -0.019257229
+ 32.2 12.716921 35.686317 -0.01929837
+ 32.2 12.769101 35.69156 -0.019333888
+ 32.2 12.815298 35.696235 -0.019364072
+ 32.2 12.859247 35.70094 -0.019392213
+ 32.2 12.89964 35.70483 -0.019420195
+ 32.2 12.941224 35.7081 -0.019442601
+ 32.2 12.99217 35.711513 -0.019454692
+ 32.2 13.036067 35.716434 -0.01946067
+ 32.2 13.112521 35.724384 -0.019468265
+ 32.2 13.164709 35.72751 -0.01947822
+ 32.2 13.211929 35.728992 -0.019485595
+ 32.2 13.255326 35.73233 -0.019486798
+ 32.2 13.316172 35.73575 -0.019479508
+ 32.2 13.395251 35.740016 -0.01946525
+ 32.2 13.51873 35.747356 -0.019436898
+ 32.2 13.624974 35.749252 -0.01939788
+ 32.2 13.746345 35.756126 -0.019341609
+ 32.2 13.913798 35.764823 -0.019265046
+ 32.2 14.128741 35.772182 -0.01917241
+ 32.2 14.475895 35.775112 -0.019054387
+ 32.2 15.033288 35.77841 -0.01894048
+ 32.2 15.813845 35.77146 -0.018898923
+ 32.2 16.44826 35.773822 -0.018962584
+ 32.2 17.505875 35.775524 -0.018979141
+ 32.2 18.057459 35.768787 -0.018791571
+ 32.2 18.31323 35.76627 -0.018429529
+ 32.2 18.40888 35.76596 -0.018008243
+ 32.2 18.450567 35.763317 -0.017615216
+ 32.2 18.457851 35.762535 -0.017253838
+ 32.2 18.437649 35.762802 -0.016898017
+ 32.2 18.454996 35.765274 -0.01653229
+ 32.2 18.386963 35.76369 -0.016006859
+ 32.25 2.5261592 34.89584 0.0E+0
+ 32.25 2.5236432 34.90158 -3.143129E-5
+ 32.25 2.5327386 34.90804 4.1039893E-5
+ 32.25 2.5473368 34.915348 2.3410204E-6
+ 32.25 2.5848913 34.918518 -1.6533636E-4
+ 32.25 2.6585781 34.927097 -5.0650414E-4
+ 32.25 2.7746672 34.94049 -1.0265072E-3
+ 32.25 2.9491786 34.95046 -1.7418538E-3
+ 32.25 3.1546738 34.95876 -2.6944414E-3
+ 32.25 3.3532376 34.957122 -3.8760656E-3
+ 32.25 3.5254552 34.951946 -5.1032914E-3
+ 32.25 3.7383832 34.953296 -6.427989E-3
+ 32.25 4.1872353 35.000743 -7.96448E-3
+ 32.25 4.9733552 35.10432 -9.440733E-3
+ 32.25 6.372384 35.31087 -0.010910317
+ 32.25 8.194028 35.587486 -0.012383731
+ 32.25 8.998691 35.62951 -0.01371006
+ 32.25 9.676382 35.62665 -0.015073064
+ 32.25 9.993752 35.53859 -0.016376577
+ 32.25 10.352612 35.483715 -0.017447628
+ 32.25 10.792908 35.493907 -0.018196443
+ 32.25 11.209682 35.529754 -0.018666953
+ 32.25 11.499172 35.55778 -0.018966861
+ 32.25 11.716672 35.580154 -0.019151177
+ 32.25 11.902842 35.602054 -0.019281076
+ 32.25 12.042428 35.616817 -0.019400546
+ 32.25 12.155475 35.62969 -0.019509831
+ 32.25 12.257241 35.64027 -0.019589577
+ 32.25 12.357671 35.650936 -0.019648705
+ 32.25 12.439341 35.659416 -0.019691303
+ 32.25 12.510233 35.66686 -0.019730857
+ 32.25 12.570827 35.671936 -0.019771485
+ 32.25 12.613888 35.675453 -0.019808482
+ 32.25 12.665013 35.680526 -0.01984838
+ 32.25 12.715588 35.686553 -0.01988955
+ 32.25 12.768108 35.69183 -0.019925376
+ 32.25 12.814425 35.696506 -0.019956248
+ 32.25 12.858063 35.701156 -0.019985165
+ 32.25 12.898558 35.705093 -0.020013796
+ 32.25 12.941172 35.708442 -0.020036908
+ 32.25 12.993203 35.71195 -0.020050079
+ 32.25 13.037485 35.716926 -0.02005732
+ 32.25 13.113993 35.725006 -0.020065822
+ 32.25 13.165611 35.727977 -0.02007655
+ 32.25 13.213106 35.729434 -0.020084867
+ 32.25 13.257395 35.732822 -0.020086825
+ 32.25 13.319033 35.736244 -0.02008024
+ 32.25 13.399179 35.740676 -0.020066751
+ 32.25 13.524629 35.74802 -0.020039618
+ 32.25 13.631528 35.750133 -0.020002125
+ 32.25 13.75559 35.756896 -0.019947415
+ 32.25 13.925132 35.76608 -0.019872507
+ 32.25 14.14203 35.77334 -0.019780913
+ 32.25 14.491062 35.776325 -0.019664261
+ 32.25 15.047352 35.780075 -0.019549245
+ 32.25 15.822498 35.774307 -0.019501703
+ 32.25 16.452253 35.777484 -0.019552203
+ 32.25 17.523182 35.77913 -0.019558927
+ 32.25 18.090225 35.772354 -0.019370997
+ 32.25 18.354425 35.769515 -0.019007623
+ 32.25 18.44987 35.769474 -0.018582191
+ 32.25 18.490063 35.767395 -0.018183963
+ 32.25 18.496477 35.766796 -0.01781716
+ 32.25 18.476326 35.766853 -0.017455263
+ 32.25 18.494213 35.76925 -0.017083112
+ 32.25 18.422876 35.767543 -0.016547704
+ 32.3 2.5268437 34.896 0.0E+0
+ 32.3 2.5236952 34.901542 -4.0692943E-5
+ 32.3 2.5322341 34.907974 1.6952583E-5
+ 32.3 2.5467758 34.915317 -2.1402771E-5
+ 32.3 2.584314 34.91855 -1.829178E-4
+ 32.3 2.6570875 34.927097 -5.1749404E-4
+ 32.3 2.772514 34.94049 -1.032469E-3
+ 32.3 2.9466586 34.95052 -1.7495416E-3
+ 32.3 3.152013 34.958927 -2.7085104E-3
+ 32.3 3.3529007 34.957714 -3.9028436E-3
+ 32.3 3.5285811 34.95297 -5.153341E-3
+ 32.3 3.7455747 34.95507 -6.5048933E-3
+ 32.3 4.199827 35.00345 -8.060705E-3
+ 32.3 4.989358 35.107624 -9.560826E-3
+ 32.3 6.3996996 35.316673 -0.011049629
+ 32.3 8.226302 35.59498 -0.012539587
+ 32.3 9.015661 35.634174 -0.013921723
+ 32.3 9.681776 35.62922 -0.015361442
+ 32.3 9.994086 35.539936 -0.016733576
+ 32.3 10.350911 35.484523 -0.017861335
+ 32.3 10.791513 35.494354 -0.018651461
+ 32.3 11.208071 35.530017 -0.019150497
+ 32.3 11.497321 35.557804 -0.019469213
+ 32.3 11.714163 35.579994 -0.019667372
+ 32.3 11.901284 35.602066 -0.01980782
+ 32.3 12.039908 35.61677 -0.019933684
+ 32.3 12.15302 35.629585 -0.020046117
+ 32.3 12.255323 35.640232 -0.020127201
+ 32.3 12.355848 35.650867 -0.020187208
+ 32.3 12.437858 35.65935 -0.020230737
+ 32.3 12.508854 35.666942 -0.020270687
+ 32.3 12.570091 35.672176 -0.020311423
+ 32.3 12.613278 35.675743 -0.020348493
+ 32.3 12.663172 35.680644 -0.020388108
+ 32.3 12.714235 35.686786 -0.020428916
+ 32.3 12.767079 35.692092 -0.020464703
+ 32.3 12.813486 35.696773 -0.020495962
+ 32.3 12.856859 35.701377 -0.020525387
+ 32.3 12.897458 35.70536 -0.020554395
+ 32.3 12.941126 35.7088 -0.020577965
+ 32.3 12.994188 35.7124 -0.020592034
+ 32.3 13.038893 35.717437 -0.020600388
+ 32.3 13.115467 35.725646 -0.020609625
+ 32.3 13.166523 35.728462 -0.020620951
+ 32.3 13.21432 35.729907 -0.020630056
+ 32.3 13.259551 35.733345 -0.02063263
+ 32.3 13.321953 35.736774 -0.020626647
+ 32.3 13.403175 35.741367 -0.02061386
+ 32.3 13.530457 35.748703 -0.020587957
+ 32.3 13.638 35.751022 -0.020552067
+ 32.3 13.764668 35.757667 -0.020499079
+ 32.3 13.936246 35.767307 -0.020426054
+ 32.3 14.155226 35.774486 -0.020335766
+ 32.3 14.506004 35.777534 -0.02022087
+ 32.3 15.061644 35.7817 -0.020104993
+ 32.3 15.831574 35.77709 -0.02005124
+ 32.3 16.457518 35.781074 -0.020087698
+ 32.3 17.540306 35.782657 -0.020084143
+ 32.3 18.122677 35.775844 -0.019896735
+ 32.3 18.39562 35.772716 -0.019533545
+ 32.3 18.491007 35.77293 -0.019105356
+ 32.3 18.529625 35.77139 -0.018702956
+ 32.3 18.535198 35.77097 -0.018331574
+ 32.3 18.515177 35.770824 -0.017964404
+ 32.3 18.533539 35.77312 -0.017586682
+ 32.3 18.45898 35.771305 -0.017042475
+ 32.35 2.527495 34.896152 0.0E+0
+ 32.35 2.5237326 34.901512 -5.0311442E-5
+ 32.35 2.5317122 34.907905 -8.255433E-6
+ 32.35 2.5462265 34.915283 -4.6124845E-5
+ 32.35 2.5837388 34.918575 -2.0069833E-4
+ 32.35 2.6556117 34.9271 -5.2740226E-4
+ 32.35 2.77036 34.940483 -1.0355267E-3
+ 32.35 2.9441165 34.95058 -1.7521027E-3
+ 32.35 3.14931 34.95909 -2.714659E-3
+ 32.35 3.3525085 34.95831 -3.9182202E-3
+ 32.35 3.531634 34.953994 -5.1883696E-3
+ 32.35 3.752611 34.956836 -6.562456E-3
+ 32.35 4.212025 35.006107 -8.13232E-3
+ 32.35 5.004799 35.110862 -9.651842E-3
+ 32.35 6.4256324 35.32225 -0.011156556
+ 32.35 8.256107 35.60201 -0.012661802
+ 32.35 9.032074 35.638797 -0.014099124
+ 32.35 9.686632 35.631736 -0.015613242
+ 32.35 9.994028 35.541267 -0.017050754
+ 32.35 10.348779 35.48529 -0.018231941
+ 32.35 10.789696 35.494747 -0.019060906
+ 32.35 11.20616 35.530242 -0.019586392
+ 32.35 11.495287 35.55781 -0.019922059
+ 32.35 11.711495 35.579826 -0.02013263
+ 32.35 11.8995 35.60205 -0.020282414
+ 32.35 12.03724 35.616706 -0.02041353
+ 32.35 12.150491 35.62947 -0.020528045
+ 32.35 12.253351 35.640182 -0.020609615
+ 32.35 12.354006 35.6508 -0.020669837
+ 32.35 12.436385 35.659297 -0.02071376
+ 32.35 12.507496 35.667026 -0.020753631
+ 32.35 12.569367 35.67242 -0.020794032
+ 32.35 12.61271 35.67604 -0.020830756
+ 32.35 12.661407 35.680774 -0.020869661
+ 32.35 12.712884 35.687015 -0.020909682
+ 32.35 12.766036 35.692356 -0.020945052
+ 32.35 12.812499 35.697036 -0.020976363
+ 32.35 12.855658 35.701606 -0.021005983
+ 32.35 12.896362 35.705635 -0.021035068
+ 32.35 12.941103 35.70918 -0.021058818
+ 32.35 12.99514 35.712863 -0.021073561
+ 32.35 13.040305 35.717967 -0.021082835
+ 32.35 13.116956 35.726295 -0.021092609
+ 32.35 13.167461 35.728973 -0.021104323
+ 32.35 13.215588 35.730415 -0.021114027
+ 32.35 13.261808 35.733905 -0.021117052
+ 32.35 13.324943 35.73734 -0.021111537
+ 32.35 13.407244 35.74209 -0.021099351
+ 32.35 13.536209 35.749412 -0.02107466
+ 32.35 13.644383 35.75192 -0.021040412
+ 32.35 13.773559 35.75844 -0.020989263
+ 32.35 13.947109 35.768512 -0.020918315
+ 32.35 14.168291 35.775623 -0.020829566
+ 32.35 14.520673 35.77873 -0.020716771
+ 32.35 15.076136 35.783283 -0.020600278
+ 32.35 15.841077 35.779796 -0.020540122
+ 32.35 16.464094 35.784584 -0.02056178
+ 32.35 17.557178 35.786094 -0.020547591
+ 32.35 18.154669 35.77925 -0.020361608
+ 32.35 18.436663 35.775863 -0.020000141
+ 32.35 18.53217 35.776313 -0.019570597
+ 32.35 18.569141 35.775287 -0.019165037
+ 32.35 18.573912 35.775032 -0.018789912
+ 32.35 18.554102 35.774703 -0.018418275
+ 32.35 18.572859 35.77687 -0.018035827
+ 32.35 18.495186 35.774967 -0.017484007
+ 32.4 2.5281085 34.896297 0.0E+0
+ 32.4 2.5237534 34.901485 -6.0222762E-5
+ 32.4 2.5311732 34.90784 -3.4379685E-5
+ 32.4 2.54569 34.91525 -7.162867E-5
+ 32.4 2.5831668 34.9186 -2.1855162E-4
+ 32.4 2.654156 34.9271 -5.3619925E-4
+ 32.4 2.768211 34.940475 -1.0357416E-3
+ 32.4 2.9415595 34.95064 -1.7496381E-3
+ 32.4 3.1465702 34.95925 -2.7130073E-3
+ 32.4 3.3520596 34.9589 -3.9222766E-3
+ 32.4 3.5345997 34.95502 -5.2082804E-3
+ 32.4 3.7594583 34.958587 -6.600313E-3
+ 32.4 4.223772 35.00871 -8.1787575E-3
+ 32.4 5.0196084 35.114032 -9.712978E-3
+ 32.4 6.45006 35.32758 -0.011230079
+ 32.4 8.283278 35.60855 -0.012749021
+ 32.4 9.047864 35.64336 -0.014240222
+ 32.4 9.690917 35.634193 -0.015825657
+ 32.4 9.993561 35.542572 -0.017324544
+ 32.4 10.346214 35.48601 -0.018555177
+ 32.4 10.787455 35.495086 -0.019419968
+ 32.4 11.203959 35.53043 -0.01996939
+ 32.4 11.493085 35.55781 -0.020319797
+ 32.4 11.708692 35.57966 -0.020541059
+ 32.4 11.897509 35.602012 -0.02069873
+ 32.4 12.034451 35.616622 -0.020833774
+ 32.4 12.147917 35.62935 -0.020949174
+ 32.4 12.251347 35.640125 -0.021030283
+ 32.4 12.352168 35.65073 -0.02108998
+ 32.4 12.434946 35.65925 -0.021133699
+ 32.4 12.506183 35.667114 -0.02117297
+ 32.4 12.568674 35.67267 -0.021212544
+ 32.4 12.612203 35.676345 -0.021248465
+ 32.4 12.659743 35.680912 -0.021286203
+ 32.4 12.71156 35.687236 -0.021324975
+ 32.4 12.764999 35.69261 -0.021359514
+ 32.4 12.811485 35.697292 -0.02139051
+ 32.4 12.854482 35.70184 -0.021419981
+ 32.4 12.895294 35.705917 -0.021448806
+ 32.4 12.941124 35.709568 -0.021472428
+ 32.4 12.996075 35.713344 -0.021487588
+ 32.4 13.041737 35.71852 -0.021497551
+ 32.4 13.118476 35.726955 -0.021507625
+ 32.4 13.168445 35.729503 -0.021519488
+ 32.4 13.216929 35.730957 -0.02152957
+ 32.4 13.264185 35.734493 -0.021532848
+ 32.4 13.328015 35.737945 -0.021527633
+ 32.4 13.411395 35.742847 -0.021515926
+ 32.4 13.541884 35.75015 -0.021492392
+ 32.4 13.650672 35.752822 -0.021459786
+ 32.4 13.782242 35.759212 -0.021410568
+ 32.4 13.957694 35.769683 -0.021341851
+ 32.4 14.18119 35.77675 -0.021254834
+ 32.4 14.535024 35.779903 -0.021144452
+ 32.4 15.090803 35.784816 -0.021027567
+ 32.4 15.85101 35.782424 -0.020960858
+ 32.4 16.47202 35.788 -0.020967085
+ 32.4 17.573727 35.78943 -0.020942017
+ 32.4 18.186064 35.782554 -0.020758366
+ 32.4 18.477402 35.778942 -0.02040018
+ 32.4 18.573244 35.779613 -0.019970685
+ 32.4 18.608515 35.779075 -0.019562967
+ 32.4 18.612516 35.778976 -0.01918492
+ 32.4 18.592999 35.778476 -0.018809605
+ 32.4 18.61207 35.780494 -0.018423282
+ 32.4 18.531403 35.77852 -0.017865034
+ 32.45 2.5286793 34.896434 0.0E+0
+ 32.45 2.5237555 34.90147 -7.03604E-5
+ 32.45 2.530617 34.907775 -6.120884E-5
+ 32.45 2.545169 34.915214 -9.771213E-5
+ 32.45 2.5826003 34.918617 -2.363506E-4
+ 32.45 2.6527247 34.9271 -5.43861E-4
+ 32.45 2.7660732 34.940467 -1.0331884E-3
+ 32.45 2.9389934 34.950702 -1.7422711E-3
+ 32.45 3.1437995 34.959407 -2.7037092E-3
+ 32.45 3.351553 34.95949 -3.9151404E-3
+ 32.45 3.5374646 34.956043 -5.213038E-3
+ 32.45 3.7660846 34.960323 -6.6181872E-3
+ 32.45 4.235014 35.011241 -8.199566E-3
+ 32.45 5.0337243 35.11711 -9.743559E-3
+ 32.45 6.472876 35.332633 -0.011269273
+ 32.45 8.307676 35.61457 -0.012799889
+ 32.45 9.062975 35.64785 -0.014342899
+ 32.45 9.694604 35.63658 -0.015995797
+ 32.45 9.992671 35.543842 -0.017551301
+ 32.45 10.343215 35.486686 -0.018826706
+ 32.45 10.784795 35.49537 -0.019723782
+ 32.45 11.201479 35.53058 -0.020294202
+ 32.45 11.490732 35.557792 -0.0206568
+ 32.45 11.70578 35.57949 -0.02088675
+ 32.45 11.895336 35.60195 -0.02105062
+ 32.45 12.031575 35.616523 -0.0211881
+ 32.45 12.145333 35.629222 -0.021303069
+ 32.45 12.249341 35.640056 -0.021382675
+ 32.45 12.35036 35.65067 -0.02144104
+ 32.45 12.433564 35.659214 -0.021483898
+ 32.45 12.504936 35.66721 -0.021521995
+ 32.45 12.568034 35.672916 -0.021560216
+ 32.45 12.61178 35.676662 -0.021594837
+ 32.45 12.658212 35.681064 -0.021630911
+ 32.45 12.71029 35.687454 -0.021667954
+ 32.45 12.763996 35.692867 -0.021701215
+ 32.45 12.810469 35.697547 -0.02173149
+ 32.45 12.853357 35.70208 -0.021760438
+ 32.45 12.894279 35.706203 -0.021788636
+ 32.45 12.941214 35.709976 -0.021811789
+ 32.45 12.997014 35.71384 -0.021827072
+ 32.45 13.04321 35.719097 -0.021837462
+ 32.45 13.120045 35.72763 -0.021847565
+ 32.45 13.169497 35.730056 -0.021859307
+ 32.45 13.218365 35.73153 -0.021869522
+ 32.45 13.266701 35.735122 -0.021872822
+ 32.45 13.331186 35.738586 -0.021867717
+ 32.45 13.41564 35.743633 -0.021856328
+ 32.45 13.547484 35.750904 -0.021833863
+ 32.45 13.656868 35.75373 -0.02180287
+ 32.45 13.790706 35.759986 -0.021755626
+ 32.45 13.967981 35.770816 -0.021689257
+ 32.45 14.193893 35.77786 -0.021604134
+ 32.45 14.549016 35.781063 -0.021496434
+ 32.45 15.105619 35.786296 -0.02137937
+ 32.45 15.861374 35.784965 -0.021306008
+ 32.45 16.481316 35.791297 -0.021296296
+ 32.45 17.589888 35.792644 -0.02126021
+ 32.45 18.216728 35.78575 -0.021079818
+ 32.45 18.517694 35.781948 -0.020726467
+ 32.45 18.614117 35.782825 -0.020298423
+ 32.45 18.647642 35.78274 -0.019889532
+ 32.45 18.650923 35.782787 -0.019509358
+ 32.45 18.63178 35.78213 -0.019131152
+ 32.45 18.65108 35.783973 -0.01874179
+ 32.45 18.56755 35.781944 -0.018178295
+ 32.5 2.5292034 34.896564 0.0E+0
+ 32.5 2.5237367 34.901462 -8.065599E-5
+ 32.5 2.5300445 34.907707 -8.8526794E-5
+ 32.5 2.5446643 34.915176 -1.2416967E-4
+ 32.5 2.582041 34.918636 -2.539689E-4
+ 32.5 2.651323 34.9271 -5.5037E-4
+ 32.5 2.7639532 34.940456 -1.027955E-3
+ 32.5 2.936425 34.950763 -1.7301466E-3
+ 32.5 3.1410043 34.95956 -2.6869508E-3
+ 32.5 3.3509883 34.96008 -3.896987E-3
+ 32.5 3.5402154 34.95706 -5.2026752E-3
+ 32.5 3.7724604 34.96203 -6.6158934E-3
+ 32.5 4.245702 35.0137 -8.194411E-3
+ 32.5 5.047091 35.1201 -9.743043E-3
+ 32.5 6.493992 35.3374 -0.011273336
+ 32.5 8.329195 35.620037 -0.012813094
+ 32.5 9.077356 35.652252 -0.014405024
+ 32.5 9.697672 35.63889 -0.016120752
+ 32.5 9.991348 35.545074 -0.017727373
+ 32.5 10.339787 35.487304 -0.019042213
+ 32.5 10.781724 35.495594 -0.01996752
+ 32.5 11.198739 35.53069 -0.020555587
+ 32.5 11.48825 35.557765 -0.020927502
+ 32.5 11.702791 35.579322 -0.021163883
+ 32.5 11.893011 35.601863 -0.021332044
+ 32.5 12.028649 35.61641 -0.021470299
+ 32.5 12.142776 35.629096 -0.0215834
+ 32.5 12.247362 35.63998 -0.02166039
+ 32.5 12.348612 35.65061 -0.021716548
+ 32.5 12.432268 35.65919 -0.021757832
+ 32.5 12.503783 35.667312 -0.021794131
+ 32.5 12.567471 35.673171 -0.021830436
+ 32.5 12.611465 35.676982 -0.021863228
+ 32.5 12.656843 35.68123 -0.021897119
+ 32.5 12.709104 35.687667 -0.021931916
+ 32.5 12.763054 35.693115 -0.021963423
+ 32.5 12.809478 35.6978 -0.02199255
+ 32.5 12.852311 35.702327 -0.022020563
+ 32.5 12.893349 35.706497 -0.02204774
+ 32.5 12.9414 35.7104 -0.022070056
+ 32.5 12.997979 35.714355 -0.022085136
+ 32.5 13.044746 35.719692 -0.02209565
+ 32.5 13.121687 35.728313 -0.022105483
+ 32.5 13.170642 35.73063 -0.022116812
+ 32.5 13.219921 35.73214 -0.022126876
+ 32.5 13.269377 35.735786 -0.02212995
+ 32.5 13.334472 35.739265 -0.022124728
+ 32.5 13.419993 35.744453 -0.022113476
+ 32.5 13.553014 35.75169 -0.022091962
+ 32.5 13.662972 35.754646 -0.02206251
+ 32.5 13.798943 35.76076 -0.022017254
+ 32.5 13.977956 35.77192 -0.021953303
+ 32.5 14.206374 35.778945 -0.0218702
+ 32.5 14.562616 35.7822 -0.021765413
+ 32.5 15.120559 35.78772 -0.021648373
+ 32.5 15.872168 35.787406 -0.021568298
+ 32.5 16.491997 35.79448 -0.021542285
+ 32.5 17.605597 35.795734 -0.021495145
+ 32.5 18.24653 35.788825 -0.021318939
+ 32.5 18.557398 35.784873 -0.020971976
+ 32.5 18.654676 35.78593 -0.020546777
+ 32.5 18.686436 35.786273 -0.020137671
+ 32.5 18.68904 35.786457 -0.019756151
+ 32.5 18.670357 35.78566 -0.019375816
+ 32.5 18.68979 35.787296 -0.018984247
+ 32.5 18.603552 35.78524 -0.018416675
+ 32.55 2.5296764 34.896686 0.0E+0
+ 32.55 2.5236952 34.901466 -9.103995E-5
+ 32.55 2.529456 34.907642 -1.1611487E-4
+ 32.55 2.544178 34.91514 -1.5079432E-4
+ 32.55 2.5814907 34.91865 -2.7128224E-4
+ 32.55 2.649955 34.927097 -5.557155E-4
+ 32.55 2.7618563 34.940444 -1.020143E-3
+ 32.55 2.9338603 34.950824 -1.71343E-3
+ 32.55 3.1381907 34.95971 -2.6629483E-3
+ 32.55 3.3503665 34.96066 -3.868039E-3
+ 32.55 3.542841 34.95807 -5.177293E-3
+ 32.55 3.7785573 34.963695 -6.593348E-3
+ 32.55 4.2557916 35.016063 -8.163095E-3
+ 32.55 5.059661 35.122974 -9.711044E-3
+ 32.55 6.5133376 35.341857 -0.011241613
+ 32.55 8.347755 35.624935 -0.012787411
+ 32.55 9.090967 35.656555 -0.014424507
+ 32.55 9.700107 35.641113 -0.01619767
+ 32.55 9.989589 35.546253 -0.017849194
+ 32.55 10.335942 35.48787 -0.019197484
+ 32.55 10.778257 35.49576 -0.020146484
+ 32.55 11.195759 35.530757 -0.020748463
+ 32.55 11.485663 35.557727 -0.021126516
+ 32.55 11.69976 35.579154 -0.021366823
+ 32.55 11.890569 35.60176 -0.021537164
+ 32.55 12.025715 35.616287 -0.021674387
+ 32.55 12.140288 35.62897 -0.021784086
+ 32.55 12.245445 35.6399 -0.021857262
+ 32.55 12.346955 35.650562 -0.021910286
+ 32.55 12.431086 35.65918 -0.021949222
+ 32.55 12.502752 35.66742 -0.021983068
+ 32.55 12.567011 35.67343 -0.022016857
+ 32.55 12.611286 35.677314 -0.022047259
+ 32.55 12.655671 35.681404 -0.022078417
+ 32.55 12.708036 35.687877 -0.022110434
+ 32.55 12.762206 35.693363 -0.022139693
+ 32.55 12.808544 35.698047 -0.022167202
+ 32.55 12.851376 35.70258 -0.022193847
+ 32.55 12.892536 35.706794 -0.022219585
+ 32.55 12.941711 35.710834 -0.022240669
+ 32.55 12.998999 35.71488 -0.022255192
+ 32.55 13.046374 35.72031 -0.022265496
+ 32.55 13.123425 35.729007 -0.022274734
+ 32.55 13.171908 35.731227 -0.022285325
+ 32.55 13.221624 35.73278 -0.022294931
+ 32.55 13.272238 35.736484 -0.022297498
+ 32.55 13.337896 35.739982 -0.02229192
+ 32.55 13.424469 35.745304 -0.02228059
+ 32.55 13.558486 35.7525 -0.022259876
+ 32.55 13.668994 35.755565 -0.022231864
+ 32.55 13.806949 35.761535 -0.022188568
+ 32.55 13.987611 35.77298 -0.022127071
+ 32.55 14.218611 35.780014 -0.022046076
+ 32.55 14.575797 35.783313 -0.02194439
+ 32.55 15.135599 35.789077 -0.021827564
+ 32.55 15.883393 35.789745 -0.021740768
+ 32.55 16.50406 35.797527 -0.021698229
+ 32.55 17.620794 35.798694 -0.021640114
+ 32.55 18.275345 35.79178 -0.021469016
+ 32.55 18.596373 35.787712 -0.021129979
+ 32.55 18.694824 35.78893 -0.020708997
+ 32.55 18.724813 35.789665 -0.020300614
+ 32.55 18.726793 35.78997 -0.019918496
+ 32.55 18.708647 35.789054 -0.01953678
+ 32.55 18.72812 35.790462 -0.01914382
+ 32.55 18.639338 35.788394 -0.018573329
+ 32.6 2.5300946 34.896797 0.0E+0
+ 32.6 2.5236291 34.901473 -1.0144208E-4
+ 32.6 2.528852 34.907577 -1.437539E-4
+ 32.6 2.543711 34.9151 -1.7737983E-4
+ 32.6 2.5809512 34.918663 -2.8816986E-4
+ 32.6 2.648625 34.927093 -5.598939E-4
+ 32.6 2.759788 34.940433 -1.0098662E-3
+ 32.6 2.931306 34.950881 -1.6923072E-3
+ 32.6 3.1353647 34.95985 -2.6319487E-3
+ 32.6 3.3496878 34.96123 -3.8285651E-3
+ 32.6 3.5453302 34.95906 -5.1370626E-3
+ 32.6 3.7843492 34.965324 -6.550572E-3
+ 32.6 4.265245 35.018333 -8.105561E-3
+ 32.6 5.071394 35.125732 -9.647347E-3
+ 32.6 6.5308623 35.345993 -0.011173615
+ 32.6 8.36331 35.62925 -0.012721747
+ 32.6 9.103776 35.660747 -0.014399376
+ 32.6 9.7019004 35.64324 -0.016223831
+ 32.6 9.987389 35.54738 -0.017913356
+ 32.6 10.331693 35.48837 -0.019288516
+ 32.6 10.774413 35.495864 -0.020256208
+ 32.6 11.192566 35.530784 -0.020868007
+ 32.6 11.482999 35.557674 -0.021248754
+ 32.6 11.696724 35.578994 -0.021490255
+ 32.6 11.888049 35.60164 -0.021660479
+ 32.6 12.022818 35.61616 -0.021794727
+ 32.6 12.137915 35.62885 -0.021899391
+ 32.6 12.243627 35.63982 -0.021967499
+ 32.6 12.345423 35.650524 -0.022016404
+ 32.6 12.430049 35.659187 -0.022052178
+ 32.6 12.501871 35.667537 -0.022082875
+ 32.6 12.566684 35.673694 -0.022113519
+ 32.6 12.611271 35.67765 -0.02214094
+ 32.6 12.65473 35.6816 -0.0221688
+ 32.6 12.70712 35.688083 -0.022197485
+ 32.6 12.761486 35.69361 -0.02222397
+ 32.6 12.807702 35.69829 -0.022249378
+ 32.6 12.850585 35.702842 -0.022274196
+ 32.6 12.891873 35.707103 -0.022298053
+ 32.6 12.942179 35.711292 -0.022317482
+ 32.6 13.000101 35.715427 -0.022331065
+ 32.6 13.04812 35.720947 -0.022340799
+ 32.6 13.125287 35.72971 -0.02234909
+ 32.6 13.173325 35.731845 -0.022358598
+ 32.6 13.223504 35.733463 -0.022367418
+ 32.6 13.275309 35.737216 -0.022369174
+ 32.6 13.341478 35.74074 -0.022362968
+ 32.6 13.429086 35.74619 -0.022351332
+ 32.6 13.563914 35.753337 -0.022331236
+ 32.6 13.674944 35.756492 -0.022304524
+ 32.6 13.814728 35.762317 -0.022263134
+ 32.6 13.996943 35.774002 -0.02220408
+ 32.6 14.230585 35.78106 -0.022125252
+ 32.6 14.588535 35.7844 -0.022026816
+ 32.6 15.150717 35.79037 -0.021910373
+ 32.6 15.895043 35.79198 -0.021816904
+ 32.6 16.517498 35.800434 -0.02175776
+ 32.6 17.635427 35.80151 -0.021688856
+ 32.6 18.303057 35.7946 -0.021523781
+ 32.6 18.634493 35.79046 -0.021194175
+ 32.6 18.734463 35.791812 -0.020778758
+ 32.6 18.7627 35.792907 -0.020372001
+ 32.6 18.76411 35.793323 -0.01999001
+ 32.6 18.746578 35.7923 -0.019607643
+ 32.6 18.765991 35.79346 -0.019214086
+ 32.6 18.67484 35.7914 -0.018641813
+ 32.65 2.5304541 34.896896 0.0E+0
+ 32.65 2.5235362 34.90149 -1.1179223E-4
+ 32.65 2.5282328 34.907516 -1.7122633E-4
+ 32.65 2.543264 34.91506 -2.0372267E-4
+ 32.65 2.580424 34.918674 -3.0451582E-4
+ 32.65 2.647336 34.927085 -5.62909E-4
+ 32.65 2.757754 34.940414 -9.972503E-4
+ 32.65 2.928768 34.95094 -1.6669827E-3
+ 32.65 3.1325328 34.959983 -2.594228E-3
+ 32.65 3.3489537 34.961795 -3.778881E-3
+ 32.65 3.5476741 34.960037 -5.082228E-3
+ 32.65 3.7898128 34.966903 -6.4876982E-3
+ 32.65 4.274028 35.020492 -8.021903E-3
+ 32.65 5.082259 35.12836 -9.551918E-3
+ 32.65 6.546533 35.3498 -0.011069055
+ 32.65 8.375841 35.632972 -0.012615191
+ 32.65 9.115756 35.664817 -0.014327838
+ 32.65 9.703052 35.645267 -0.016196726
+ 32.65 9.984753 35.548442 -0.017916715
+ 32.65 10.32706 35.488807 -0.019311603
+ 32.65 10.770215 35.495906 -0.02029257
+ 32.65 11.18919 35.530773 -0.020909771
+ 32.65 11.480291 35.557617 -0.021289526
+ 32.65 11.693725 35.578842 -0.021529293
+ 32.65 11.885494 35.6015 -0.021696929
+ 32.65 12.020008 35.616027 -0.021826146
+ 32.65 12.135704 35.628734 -0.021924071
+ 32.65 12.241948 35.639736 -0.021985797
+ 32.65 12.344052 35.650497 -0.022029558
+ 32.65 12.429193 35.659206 -0.022061314
+ 32.65 12.501174 35.667667 -0.022088135
+ 32.65 12.566519 35.67396 -0.02211498
+ 32.65 12.611451 35.678 -0.022138812
+ 32.65 12.654057 35.68181 -0.022162788
+ 32.65 12.706395 35.68829 -0.022187566
+ 32.65 12.760931 35.693855 -0.022210741
+ 32.65 12.806988 35.698535 -0.02223354
+ 32.65 12.849975 35.703113 -0.02225605
+ 32.65 12.8914 35.707416 -0.022277562
+ 32.65 12.942837 35.71176 -0.022294903
+ 32.65 13.001321 35.71599 -0.022307135
+ 32.65 13.050019 35.721607 -0.022315908
+ 32.65 13.127303 35.73042 -0.02232288
+ 32.65 13.174926 35.732486 -0.022330943
+ 32.65 13.225591 35.734176 -0.022338623
+ 32.65 13.278617 35.737987 -0.02233925
+ 32.65 13.345244 35.741535 -0.022332126
+ 32.65 13.433866 35.747104 -0.022319928
+ 32.65 13.569314 35.754203 -0.022300242
+ 32.65 13.680839 35.757427 -0.022274662
+ 32.65 13.822286 35.7631 -0.02223508
+ 32.65 14.005956 35.77499 -0.02217843
+ 32.65 14.242285 35.78208 -0.022101784
+ 32.65 14.600815 35.785465 -0.022006713
+ 32.65 15.165891 35.7916 -0.02189082
+ 32.65 15.907113 35.7941 -0.02179077
+ 32.65 16.532284 35.803195 -0.021715088
+ 32.65 17.649445 35.804176 -0.02163569
+ 32.65 18.329556 35.79729 -0.02147754
+ 32.65 18.671629 35.793113 -0.021158835
+ 32.65 18.7735 35.79457 -0.020750295
+ 32.65 18.800026 35.795993 -0.020346034
+ 32.65 18.800924 35.79651 -0.019964859
+ 32.65 18.784084 35.795406 -0.019582544
+ 32.65 18.803333 35.796283 -0.019189168
+ 32.65 18.710007 35.794261 -0.018616226
+ 32.7 2.5307521 34.896987 0.0E+0
+ 32.7 2.523415 34.901515 -1.2202089E-4
+ 32.7 2.5275995 34.90745 -1.983183E-4
+ 32.7 2.5428383 34.91502 -2.2962391E-4
+ 32.7 2.579911 34.91868 -3.2021023E-4
+ 32.7 2.6460924 34.927082 -5.6477246E-4
+ 32.7 2.7557594 34.940395 -9.824324E-4
+ 32.7 2.9262521 34.950992 -1.637679E-3
+ 32.7 3.1297013 34.960113 -2.550089E-3
+ 32.7 3.348167 34.962345 -3.7193461E-3
+ 32.7 3.5498642 34.96099 -5.0131073E-3
+ 32.7 3.7949271 34.96843 -6.404975E-3
+ 32.7 4.2821135 35.02254 -7.912376E-3
+ 32.7 5.0922336 35.13086 -9.424921E-3
+ 32.7 6.5603365 35.353267 -0.01092786
+ 32.7 8.385363 35.6361 -0.012467063
+ 32.7 9.126895 35.66876 -0.014208353
+ 32.7 9.703566 35.647186 -0.01611413
+ 32.7 9.981688 35.549434 -0.017856458
+ 32.7 10.322069 35.48918 -0.019263439
+ 32.7 10.765695 35.49589 -0.020251878
+ 32.7 11.185663 35.530723 -0.02086978
+ 32.7 11.47757 35.55755 -0.021244645
+ 32.7 11.690808 35.5787 -0.021479586
+ 32.7 11.882952 35.601352 -0.02164203
+ 32.7 12.017337 35.6159 -0.021764059
+ 32.7 12.133706 35.628635 -0.021853475
+ 32.7 12.24045 35.639656 -0.021907467
+ 32.7 12.342879 35.650482 -0.021945022
+ 32.7 12.42855 35.65925 -0.021971866
+ 32.7 12.500694 35.667804 -0.021994062
+ 32.7 12.566549 35.674236 -0.022016436
+ 32.7 12.611857 35.678356 -0.022036046
+ 32.7 12.653691 35.682033 -0.022055538
+ 32.7 12.705901 35.688495 -0.022075834
+ 32.7 12.76058 35.694103 -0.022095148
+ 32.7 12.806443 35.698776 -0.022114811
+ 32.7 12.849583 35.703392 -0.022134515
+ 32.7 12.891154 35.707744 -0.022153208
+ 32.7 12.943723 35.712253 -0.022168009
+ 32.7 13.002693 35.716567 -0.022178464
+ 32.7 13.052103 35.722286 -0.022185864
+ 32.7 13.129505 35.73114 -0.02219112
+ 32.7 13.176745 35.733154 -0.022197358
+ 32.7 13.22792 35.734931 -0.022203531
+ 32.7 13.282191 35.738796 -0.02220269
+ 32.7 13.34922 35.74237 -0.02219434
+ 32.7 13.438829 35.748054 -0.022181306
+ 32.7 13.574709 35.755096 -0.022161799
+ 32.7 13.686698 35.758373 -0.022137152
+ 32.7 13.829636 35.76389 -0.022099255
+ 32.7 14.014659 35.775936 -0.022044921
+ 32.7 14.253701 35.78308 -0.02197045
+ 32.7 14.612627 35.7865 -0.021878812
+ 32.7 15.181099 35.79276 -0.02176362
+ 32.7 15.919597 35.796112 -0.021657145
+ 32.7 16.548384 35.805805 -0.021565136
+ 32.7 17.6628 35.80669 -0.021475649
+ 32.7 18.354738 35.799846 -0.021325294
+ 32.7 18.707663 35.79567 -0.021018911
+ 32.7 18.81186 35.797206 -0.020618523
+ 32.7 18.836735 35.79892 -0.020217588
+ 32.7 18.837181 35.799526 -0.019837886
+ 32.7 18.821104 35.798355 -0.0194563
+ 32.7 18.840086 35.79894 -0.019063858
+ 32.7 18.74478 35.79697 -0.01849133
+ 32.75 2.5309858 34.897068 0.0E+0
+ 32.75 2.5232636 34.901546 -1.3205975E-4
+ 32.75 2.526953 34.90739 -2.2482153E-4
+ 32.75 2.5424346 34.914978 -2.5489117E-4
+ 32.75 2.5794134 34.918682 -3.3515036E-4
+ 32.75 2.6448967 34.927074 -5.655038E-4
+ 32.75 2.7538092 34.940376 -9.655598E-4
+ 32.75 2.9237647 34.951045 -1.6046348E-3
+ 32.75 3.1268768 34.960235 -2.4998614E-3
+ 32.75 3.3473298 34.962882 -3.6503646E-3
+ 32.75 3.5518944 34.96192 -4.930091E-3
+ 32.75 3.7996745 34.96989 -6.3027683E-3
+ 32.75 4.2894797 35.024467 -7.7774003E-3
+ 32.75 5.101303 35.133216 -9.266729E-3
+ 32.75 6.5722784 35.356395 -0.010750202
+ 32.75 8.391918 35.638637 -0.012276956
+ 32.75 9.137184 35.672557 -0.014039699
+ 32.75 9.703453 35.64899 -0.015974194
+ 32.75 9.978204 35.550346 -0.017730206
+ 32.75 10.316747 35.489486 -0.019141197
+ 32.75 10.760884 35.495815 -0.020130977
+ 32.75 11.182024 35.530632 -0.02074464
+ 32.75 11.474875 35.557472 -0.021110559
+ 32.75 11.68802 35.57857 -0.021337437
+ 32.75 11.880473 35.601196 -0.021491962
+ 32.75 12.01486 35.615776 -0.02160457
+ 32.75 12.131974 35.62855 -0.021683665
+ 32.75 12.239177 35.639583 -0.02172854
+ 32.75 12.341946 35.650482 -0.0217588
+ 32.75 12.428159 35.65931 -0.02177982
+ 32.75 12.500466 35.667957 -0.021796618
+ 32.75 12.566808 35.67452 -0.021813834
+ 32.75 12.612525 35.678726 -0.02182858
+ 32.75 12.653669 35.68228 -0.021842984
+ 32.75 12.70568 35.6887 -0.021858208
+ 32.75 12.760476 35.69435 -0.021873102
+ 32.75 12.806109 35.699024 -0.021889096
+ 32.75 12.84945 35.703681 -0.021905482
+ 32.75 12.891179 35.70808 -0.021920867
+ 32.75 12.944875 35.71276 -0.021932662
+ 32.75 13.004256 35.717163 -0.021940894
+ 32.75 13.05441 35.722991 -0.02194649
+ 32.75 13.131927 35.731872 -0.021949627
+ 32.75 13.178819 35.733844 -0.02195365
+ 32.75 13.230525 35.73572 -0.021957928
+ 32.75 13.28606 35.739643 -0.021955267
+ 32.75 13.353433 35.74324 -0.021945374
+ 32.75 13.443999 35.74904 -0.021931214
+ 32.75 13.580122 35.75602 -0.021911629
+ 32.75 13.692543 35.759326 -0.021887694
+ 32.75 13.836796 35.764694 -0.021851324
+ 32.75 14.023067 35.776847 -0.021799194
+ 32.75 14.264829 35.784053 -0.021726854
+ 32.75 14.623966 35.78751 -0.021638682
+ 32.75 15.196322 35.79385 -0.021524332
+ 32.75 15.932484 35.798007 -0.021411635
+ 32.75 16.56575 35.808258 -0.021303663
+ 32.75 17.67545 35.80905 -0.021204593
+ 32.75 18.378515 35.802265 -0.021062875
+ 32.75 18.742487 35.798126 -0.02077018
+ 32.75 18.84946 35.799716 -0.020379158
+ 32.75 18.872774 35.80169 -0.01998234
+ 32.75 18.87283 35.802375 -0.019604733
+ 32.75 18.857584 35.801155 -0.019224526
+ 32.75 18.87619 35.80142 -0.018833743
+ 32.75 18.779114 35.799526 -0.018262677
+ 32.8 2.5311527 34.897136 0.0E+0
+ 32.8 2.5230805 34.901584 -1.418423E-4
+ 32.8 2.5262937 34.907333 -2.5053523E-4
+ 32.8 2.5420536 34.914932 -2.7934028E-4
+ 32.8 2.5789327 34.918682 -3.4924154E-4
+ 32.8 2.643752 34.927062 -5.651304E-4
+ 32.8 2.7519075 34.940353 -9.467895E-4
+ 32.8 2.9213113 34.9511 -1.5681046E-3
+ 32.8 3.124066 34.960346 -2.443898E-3
+ 32.8 3.346446 34.963405 -3.572383E-3
+ 32.8 3.5537588 34.962825 -4.8336442E-3
+ 32.8 3.8040401 34.971286 -6.1815665E-3
+ 32.8 4.2961115 35.02627 -7.6175662E-3
+ 32.8 5.1094622 35.13543 -9.077932E-3
+ 32.8 6.582384 35.35918 -0.010536516
+ 32.8 8.395578 35.64059 -0.012044786
+ 32.8 9.146626 35.67621 -0.013821037
+ 32.8 9.702735 35.650684 -0.015775502
+ 32.8 9.974318 35.551177 -0.017536083
+ 32.8 10.311129 35.489723 -0.01894263
+ 32.8 10.755822 35.495685 -0.019927341
+ 32.8 11.178313 35.53051 -0.02053163
+ 32.8 11.472244 35.557392 -0.020884417
+ 32.8 11.68541 35.578464 -0.021099892
+ 32.8 11.878113 35.60104 -0.02124369
+ 32.8 12.012636 35.61566 -0.021344593
+ 32.8 12.130562 35.62849 -0.021411525
+ 32.8 12.238176 35.639522 -0.021445882
+ 32.8 12.341293 35.6505 -0.021467743
+ 32.8 12.428057 35.659393 -0.021482004
+ 32.8 12.500527 35.668125 -0.02149262
+ 32.8 12.567334 35.67481 -0.021503985
+ 32.8 12.613488 35.679107 -0.021513218
+ 32.8 12.654031 35.68255 -0.021521922
+ 32.8 12.705775 35.688915 -0.021531489
+ 32.8 12.760661 35.694606 -0.021541402
+ 32.8 12.806031 35.699272 -0.021553181
+ 32.8 12.849618 35.703983 -0.02156573
+ 32.8 12.891516 35.708427 -0.021577317
+ 32.8 12.946331 35.713287 -0.02158563
+ 32.8 13.006051 35.717777 -0.021591187
+ 32.8 13.056979 35.723716 -0.021594532
+ 32.8 13.134606 35.732612 -0.021595132
+ 32.8 13.181187 35.734565 -0.021596534
+ 32.8 13.233443 35.73655 -0.02159853
+ 32.8 13.290257 35.74053 -0.021593688
+ 32.8 13.357914 35.744152 -0.02158192
+ 32.8 13.449401 35.750053 -0.021566333
+ 32.8 13.585582 35.756973 -0.021546397
+ 32.8 13.6984 35.760292 -0.021522924
+ 32.8 13.843788 35.765506 -0.021487895
+ 32.8 14.0312 35.777725 -0.021437818
+ 32.8 14.275669 35.785003 -0.02136754
+ 32.8 14.634834 35.788494 -0.021282833
+ 32.8 15.211541 35.794872 -0.02116946
+ 32.8 15.945763 35.799793 -0.021050803
+ 32.8 16.584326 35.81055 -0.020927371
+ 32.8 17.687359 35.811256 -0.020819321
+ 32.8 18.4008 35.80455 -0.020687051
+ 32.8 18.775997 35.80049 -0.020409329
+ 32.8 18.886238 35.802097 -0.020028833
+ 32.8 18.908104 35.804294 -0.019636882
+ 32.8 18.907831 35.80505 -0.019261956
+ 32.8 18.893476 35.803802 -0.018883748
+ 32.8 18.911604 35.803726 -0.018495318
+ 32.8 18.812975 35.801933 -0.017926725
+ 32.85 2.531251 34.897193 0.0E+0
+ 32.85 2.5228645 34.901626 -1.5130432E-4
+ 32.85 2.525623 34.907272 -2.752678E-4
+ 32.85 2.5416953 34.91489 -3.027968E-4
+ 32.85 2.5784704 34.918682 -3.6239821E-4
+ 32.85 2.6426613 34.927055 -5.636873E-4
+ 32.85 2.7500593 34.94033 -9.262872E-4
+ 32.85 2.918898 34.95115 -1.5283562E-3
+ 32.85 3.1212754 34.96045 -2.3825753E-3
+ 32.85 3.34552 34.963912 -3.4858873E-3
+ 32.85 3.5554542 34.963695 -4.724305E-3
+ 32.85 3.8080122 34.97261 -6.04198E-3
+ 32.85 4.301999 35.02794 -7.43364E-3
+ 32.85 5.1167144 35.13749 -8.859345E-3
+ 32.85 6.5906963 35.36163 -0.010287516
+ 32.85 8.396445 35.641975 -0.011770825
+ 32.85 9.155231 35.679706 -0.013551967
+ 32.85 9.701433 35.652256 -0.01551714
+ 32.85 9.97005 35.55192 -0.017272793
+ 32.85 10.305251 35.489887 -0.018666143
+ 32.85 10.750551 35.495494 -0.019639151
+ 32.85 11.174573 35.530353 -0.020228788
+ 32.85 11.469716 35.557312 -0.020564176
+ 32.85 11.683028 35.578376 -0.020764844
+ 32.85 11.875926 35.600883 -0.020895045
+ 32.85 12.010724 35.615562 -0.020981925
+ 32.85 12.129527 35.628452 -0.021034846
+ 32.85 12.237494 35.639472 -0.021057282
+ 32.85 12.340963 35.650543 -0.021069633
+ 32.85 12.428284 35.659503 -0.021076191
+ 32.85 12.500914 35.668315 -0.02107984
+ 32.85 12.568162 35.67511 -0.021084655
+ 32.85 12.614783 35.6795 -0.021087723
+ 32.85 12.65482 35.682842 -0.021090126
+ 32.85 12.706233 35.689132 -0.021093452
+ 32.85 12.761181 35.694866 -0.021097822
+ 32.85 12.806255 35.699523 -0.02110484
+ 32.85 12.850129 35.704303 -0.02111303
+ 32.85 12.892211 35.70879 -0.021120323
+ 32.85 12.948133 35.713836 -0.021124681
+ 32.85 13.008119 35.718414 -0.021127095
+ 32.85 13.059848 35.72447 -0.021127736
+ 32.85 13.137577 35.73336 -0.021125372
+ 32.85 13.183887 35.73531 -0.021123756
+ 32.85 13.236711 35.737415 -0.021123065
+ 32.85 13.294812 35.741447 -0.021115676
+ 32.85 13.362693 35.745105 -0.021101696
+ 32.85 13.455062 35.751102 -0.021084376
+ 32.85 13.591118 35.757957 -0.021063799
+ 32.85 13.7043 35.761276 -0.021040518
+ 32.85 13.850639 35.76634 -0.021006623
+ 32.85 14.039086 35.778575 -0.02095842
+ 32.85 14.286226 35.785934 -0.020890106
+ 32.85 14.645238 35.789455 -0.020808827
+ 32.85 15.226737 35.79583 -0.020696554
+ 32.85 15.959418 35.80147 -0.020572258
+ 32.85 16.604042 35.812686 -0.020434009
+ 32.85 17.698498 35.81331 -0.020317681
+ 32.85 18.421522 35.806705 -0.020195616
+ 32.85 18.808104 35.802757 -0.019934075
+ 32.85 18.922132 35.80435 -0.019565202
+ 32.85 18.942684 35.806743 -0.019178813
+ 32.85 18.942152 35.807552 -0.018807115
+ 32.85 18.928743 35.806297 -0.018431492
+ 32.85 18.946281 35.805866 -0.018046077
+ 32.85 18.846325 35.80419 -0.017480925
+ 32.9 2.531279 34.897243 0.0E+0
+ 32.9 2.5226142 34.901676 -1.6038441E-4
+ 32.9 2.524942 34.907215 -2.988385E-4
+ 32.9 2.5413601 34.914844 -3.2509761E-4
+ 32.9 2.5780282 34.918674 -3.745445E-4
+ 32.9 2.6416265 34.927043 -5.612173E-4
+ 32.9 2.7482686 34.940303 -9.042258E-4
+ 32.9 2.9165303 34.951194 -1.4856699E-3
+ 32.9 3.1185116 34.96055 -2.3162893E-3
+ 32.9 3.3445568 34.9644 -3.3914023E-3
+ 32.9 3.5569784 34.96453 -4.6026837E-3
+ 32.9 3.8115825 34.97386 -5.8847405E-3
+ 32.9 4.3071403 35.029472 -7.226563E-3
+ 32.9 5.1230726 35.1394 -8.612018E-3
+ 32.9 6.5972766 35.363742 -0.01000421
+ 32.9 8.394645 35.64281 -0.011455736
+ 32.9 9.163018 35.68305 -0.013232578
+ 32.9 9.69958 35.653705 -0.01519876
+ 32.9 9.965423 35.55257 -0.016939675
+ 32.9 10.299155 35.489986 -0.018310852
+ 32.9 10.745117 35.49526 -0.019265369
+ 32.9 11.17085 35.530166 -0.01983498
+ 32.9 11.467335 35.55723 -0.020148672
+ 32.9 11.680927 35.578311 -0.020331094
+ 32.9 11.873974 35.600734 -0.020444805
+ 32.9 12.009185 35.61549 -0.020515341
+ 32.9 12.128926 35.62845 -0.020552414
+ 32.9 12.23718 35.639442 -0.02056153
+ 32.9 12.341001 35.650608 -0.020563267
+ 32.9 12.42888 35.65964 -0.020561185
+ 32.9 12.501667 35.66852 -0.02055708
+ 32.9 12.569332 35.675422 -0.02055465
+ 32.9 12.616449 35.67991 -0.020550907
+ 32.9 12.656075 35.68316 -0.020546408
+ 32.9 12.707098 35.68936 -0.020542927
+ 32.9 12.762083 35.69514 -0.020541199
+ 32.9 12.806829 35.699787 -0.020542912
+ 32.9 12.851029 35.704635 -0.020546224
+ 32.9 12.89331 35.709167 -0.020548727
+ 32.9 12.950324 35.714405 -0.02054866
+ 32.9 13.010506 35.71907 -0.020547466
+ 32.9 13.063061 35.725242 -0.02054494
+ 32.9 13.14088 35.734123 -0.02053919
+ 32.9 13.18696 35.73608 -0.020534145
+ 32.9 13.240368 35.738323 -0.020530367
+ 32.9 13.299758 35.74241 -0.020520063
+ 32.9 13.3678 35.746093 -0.020503532
+ 32.9 13.461009 35.752185 -0.020484162
+ 32.9 13.596764 35.75898 -0.020462645
+ 32.9 13.710275 35.762275 -0.02043927
+ 32.9 13.857379 35.76719 -0.02040628
+ 32.9 14.046753 35.779396 -0.020359742
+ 32.9 14.296509 35.786842 -0.020293271
+ 32.9 14.655192 35.79039 -0.020215357
+ 32.9 15.241893 35.796722 -0.020104302
+ 32.9 15.973434 35.80304 -0.019974738
+ 32.9 16.624819 35.81466 -0.019822452
+ 32.9 17.708841 35.81521 -0.019698637
+ 32.9 18.440619 35.808734 -0.019587485
+ 32.9 18.838722 35.804935 -0.019343238
+ 32.9 18.95709 35.80648 -0.01898701
+ 32.9 18.976494 35.809032 -0.018606832
+ 32.9 18.975765 35.809894 -0.018238869
+ 32.9 18.96335 35.808643 -0.017866384
+ 32.9 18.980198 35.807846 -0.01748461
+ 32.9 18.87914 35.80631 -0.016923822
+ 32.95 2.5312361 34.89728 0.0E+0
+ 32.95 2.5223288 34.90173 -1.690244E-4
+ 32.95 2.5242516 34.907157 -3.210788E-4
+ 32.95 2.5410482 34.9148 -3.4609204E-4
+ 32.95 2.577607 34.91867 -3.8561478E-4
+ 32.95 2.6406497 34.927036 -5.577705E-4
+ 32.95 2.746539 34.940273 -8.8078476E-4
+ 32.95 2.9142134 34.95124 -1.4403363E-3
+ 32.95 3.1157817 34.960636 -2.2454548E-3
+ 32.95 3.3435616 34.964874 -3.2894886E-3
+ 32.95 3.5583312 34.965332 -4.4694594E-3
+ 32.95 3.8147466 34.97503 -5.710702E-3
+ 32.95 4.3115377 35.03087 -6.997454E-3
+ 32.95 5.1285567 35.14116 -8.337231E-3
+ 32.95 6.602203 35.36554 -9.687912E-3
+ 32.95 8.390328 35.64312 -0.0111006
+ 32.95 9.170013 35.68623 -0.012863485
+ 32.95 9.697213 35.655033 -0.014820617
+ 32.95 9.960466 35.553115 -0.016536767
+ 32.95 10.292885 35.49001 -0.017876659
+ 32.95 10.73957 35.49497 -0.018805785
+ 32.95 11.167192 35.529953 -0.01934997
+ 32.95 11.465143 35.55715 -0.01963768
+ 32.95 11.679159 35.578273 -0.019798424
+ 32.95 11.872314 35.600597 -0.019892754
+ 32.95 12.00808 35.61544 -0.019944647
+ 32.95 12.128814 35.62848 -0.019964062
+ 32.95 12.237283 35.639434 -0.019958492
+ 32.95 12.34145 35.6507 -0.019948527
+ 32.95 12.429885 35.659805 -0.019936865
+ 32.95 12.502824 35.66875 -0.019924235
+ 32.95 12.570883 35.67575 -0.019913876
+ 32.95 12.618522 35.680332 -0.019902686
+ 32.95 12.657838 35.683506 -0.019890707
+ 32.95 12.708419 35.689605 -0.01987986
+ 32.95 12.763413 35.695423 -0.019871494
+ 32.95 12.807804 35.70006 -0.01986737
+ 32.95 12.852362 35.704986 -0.019865286
+ 32.95 12.894858 35.709564 -0.019862518
+ 32.95 12.952945 35.714996 -0.019857556
+ 32.95 13.013255 35.719745 -0.01985229
+ 32.95 13.06666 35.72604 -0.01984614
+ 32.95 13.144555 35.734893 -0.019836579
+ 32.95 13.190447 35.73688 -0.019827705
+ 32.95 13.24445 35.73927 -0.019820442
+ 32.95 13.305127 35.743412 -0.01980686
+ 32.95 13.373269 35.747123 -0.019787438
+ 32.95 13.46727 35.753303 -0.019765701
+ 32.95 13.602554 35.760032 -0.019742936
+ 32.95 13.716358 35.763294 -0.01971917
+ 32.95 13.864044 35.768062 -0.019686831
+ 32.95 14.054237 35.780197 -0.019641733
+ 32.95 14.30653 35.787734 -0.019576961
+ 32.95 14.664715 35.79131 -0.019502316
+ 32.95 15.256993 35.797557 -0.019392593
+ 32.95 15.98779 35.80451 -0.019258186
+ 32.95 16.646566 35.81648 -0.019092776
+ 32.95 17.718369 35.81696 -0.01896234
+ 32.95 18.458038 35.810642 -0.018862754
+ 32.95 18.86778 35.807025 -0.01863681
+ 32.95 18.991068 35.808486 -0.01829416
+ 32.95 19.00951 35.811172 -0.017920794
+ 32.95 19.008654 35.812072 -0.017557036
+ 32.95 18.997274 35.81085 -0.01718821
+ 32.95 19.013327 35.80967 -0.016810667
+ 32.95 18.911402 35.808292 -0.016255114
+ 33.0 2.531122 34.897304 0.0E+0
+ 33.0 2.5220077 34.90179 -1.7716971E-4
+ 33.0 2.5235536 34.907104 -3.4183374E-4
+ 33.0 2.5407598 34.914752 -3.6564297E-4
+ 33.0 2.577208 34.91866 -3.9555417E-4
+ 33.0 2.6397328 34.927024 -5.534036E-4
+ 33.0 2.7448747 34.940242 -8.561485E-4
+ 33.0 2.9119532 34.951282 -1.3926552E-3
+ 33.0 3.1130926 34.960712 -2.1705022E-3
+ 33.0 3.3425412 34.965324 -3.18074E-3
+ 33.0 3.5595142 34.966094 -4.325378E-3
+ 33.0 3.8175032 34.976112 -5.5208373E-3
+ 33.0 4.3152017 35.032127 -6.7476052E-3
+ 33.0 5.133196 35.142765 -8.036502E-3
+ 33.0 6.6055703 35.367023 -9.340245E-3
+ 33.0 8.383674 35.642932 -0.010706929
+ 33.0 9.1762495 35.689247 -0.012445863
+ 33.0 9.694372 35.65624 -0.014383607
+ 33.0 9.955214 35.553562 -0.01606483
+ 33.0 10.286489 35.489967 -0.017364271
+ 33.0 10.733961 35.494636 -0.01826108
+ 33.0 11.163648 35.529716 -0.01877445
+ 33.0 11.463184 35.557075 -0.019031955
+ 33.0 11.677777 35.57827 -0.01916764
+ 33.0 11.871009 35.60048 -0.019239739
+ 33.0 12.007471 35.615425 -0.019270733
+ 33.0 12.12925 35.628555 -0.019270731
+ 33.0 12.237854 35.639453 -0.019249149
+ 33.0 12.342355 35.650825 -0.019226413
+ 33.0 12.43134 35.660003 -0.019204265
+ 33.0 12.504426 35.669002 -0.019182347
+ 33.0 12.572855 35.676097 -0.019163396
+ 33.0 12.621041 35.680774 -0.019144136
+ 33.0 12.66015 35.683883 -0.019124115
+ 33.0 12.710242 35.689865 -0.01910537
+ 33.0 12.76522 35.69573 -0.01908984
+ 33.0 12.809229 35.700347 -0.019079357
+ 33.0 12.854174 35.70536 -0.01907138
+ 33.0 12.896903 35.70998 -0.019062864
+ 33.0 12.95604 35.715614 -0.019052556
+ 33.0 13.016414 35.72045 -0.01904276
+ 33.0 13.070686 35.726867 -0.019032529
+ 33.0 13.14864 35.73568 -0.019018743
+ 33.0 13.194388 35.737712 -0.019005649
+ 33.0 13.248998 35.740257 -0.01899451
+ 33.0 13.310952 35.744453 -0.018977292
+ 33.0 13.379131 35.74819 -0.018954646
+ 33.0 13.473873 35.75446 -0.018930232
+ 33.0 13.608525 35.761127 -0.018905902
+ 33.0 13.722586 35.76434 -0.01888144
+ 33.0 13.870673 35.768966 -0.018849486
+ 33.0 14.061578 35.78098 -0.018805576
+ 33.0 14.316306 35.788612 -0.018742347
+ 33.0 14.673829 35.79221 -0.018670846
+ 33.0 15.272022 35.798336 -0.018562565
+ 33.0 16.002464 35.80588 -0.018423794
+ 33.0 16.669188 35.818141 -0.01824629
+ 33.0 17.727064 35.81857 -0.018110184
+ 33.0 18.473743 35.81244 -0.018022742
+ 33.0 18.895218 35.809032 -0.017815996
+ 33.0 19.024033 35.810375 -0.017487777
+ 33.0 19.041723 35.813163 -0.01712177
+ 33.0 19.040806 35.8141 -0.016762646
+ 33.0 19.030497 35.812915 -0.016397959
+ 33.0 19.04565 35.811344 -0.016025199
+ 33.0 18.943096 35.810142 -0.015475702
+ 33.05 2.5309367 34.897323 0.0E+0
+ 33.05 2.5216505 34.90185 -1.8476986E-4
+ 33.05 2.5228493 34.90705 -3.6096287E-4
+ 33.05 2.5404944 34.914707 -3.8362774E-4
+ 33.05 2.5768325 34.91865 -4.0431867E-4
+ 33.05 2.6388773 34.927013 -5.481798E-4
+ 33.05 2.7432792 34.940212 -8.305054E-4
+ 33.05 2.9097542 34.95132 -1.342933E-3
+ 33.05 3.110451 34.960784 -2.0918764E-3
+ 33.05 3.3415026 34.965755 -3.06578E-3
+ 33.05 3.5605306 34.966815 -4.1712513E-3
+ 33.05 3.8198552 34.97711 -5.316234E-3
+ 33.05 4.318147 35.033245 -6.4784805E-3
+ 33.05 5.1370286 35.144222 -7.7115786E-3
+ 33.05 6.6074886 35.368213 -8.963148E-3
+ 33.05 8.374875 35.64228 -0.010276684
+ 33.05 9.181769 35.692104 -0.011981458
+ 33.05 9.691107 35.657325 -0.013889291
+ 33.05 9.949699 35.5539 -0.015525385
+ 33.05 10.280018 35.489856 -0.016775245
+ 33.05 10.728346 35.494262 -0.017632842
+ 33.05 11.160269 35.52946 -0.018110085
+ 33.05 11.461503 35.55701 -0.018333273
+ 33.05 11.676833 35.5783 -0.018440595
+ 33.05 11.87012 35.600383 -0.018487688
+ 33.05 12.007418 35.61545 -0.018495599
+ 33.05 12.130287 35.628673 -0.018474491
+ 33.05 12.238942 35.639503 -0.01843562
+ 33.05 12.34376 35.65098 -0.018399091
+ 33.05 12.433287 35.660236 -0.018365568
+ 33.05 12.506513 35.66929 -0.01833363
+ 33.05 12.575289 35.676467 -0.018305443
+ 33.05 12.624046 35.68124 -0.018277522
+ 33.05 12.663051 35.684295 -0.018248918
+ 33.05 12.712615 35.690147 -0.018221768
+ 33.05 12.767553 35.696052 -0.018198578
+ 33.05 12.811154 35.700656 -0.018181233
+ 33.05 12.856511 35.705753 -0.018166875
+ 33.05 12.899491 35.710422 -0.01815216
+ 33.05 12.959651 35.716262 -0.018136065
+ 33.05 13.02003 35.72118 -0.018121297
+ 33.05 13.075185 35.727722 -0.018106539
+ 33.05 13.153176 35.73648 -0.018088125
+ 33.05 13.198825 35.73858 -0.018070433
+ 33.05 13.254049 35.741283 -0.018055039
+ 33.05 13.317263 35.745532 -0.018033838
+ 33.05 13.385419 35.749301 -0.018007644
+ 33.05 13.480848 35.755645 -0.017980248
+ 33.05 13.614716 35.762256 -0.01795404
+ 33.05 13.728998 35.76541 -0.017928567
+ 33.05 13.877306 35.769905 -0.017896723
+ 33.05 14.068819 35.78175 -0.017853733
+ 33.05 14.325857 35.78948 -0.017791871
+ 33.05 14.682563 35.7931 -0.01772337
+ 33.05 15.286965 35.799064 -0.017616639
+ 33.05 16.017431 35.807163 -0.01747403
+ 33.05 16.692577 35.819656 -0.017285584
+ 33.05 17.734924 35.82004 -0.017144816
+ 33.05 18.487707 35.81413 -0.017070029
+ 33.05 18.920984 35.810966 -0.016883254
+ 33.05 19.055956 35.812156 -0.016570223
+ 33.05 19.07313 35.81502 -0.016212061
+ 33.05 19.072216 35.81598 -0.015857963
+ 33.05 19.063004 35.814853 -0.015497863
+ 33.05 19.077164 35.812885 -0.015130394
+ 33.05 18.974213 35.81188 -0.014587719
+ 33.1 2.5306806 34.897327 0.0E+0
+ 33.1 2.521257 34.901912 -1.9177854E-4
+ 33.1 2.5221405 34.906997 -3.783414E-4
+ 33.1 2.5402522 34.91466 -3.9993887E-4
+ 33.1 2.5764818 34.918636 -4.1187537E-4
+ 33.1 2.6380844 34.927005 -5.421679E-4
+ 33.1 2.7417552 34.940177 -8.0404616E-4
+ 33.1 2.9076223 34.951354 -1.2914815E-3
+ 33.1 3.1078641 34.960845 -2.010033E-3
+ 33.1 3.3404533 34.966167 -2.945259E-3
+ 33.1 3.5613853 34.9675 -4.0079476E-3
+ 33.1 3.821809 34.97802 -5.0980895E-3
+ 33.1 4.3203973 35.03422 -6.1917067E-3
+ 33.1 5.140099 35.14553 -7.3644355E-3
+ 33.1 6.608083 35.36913 -8.558865E-3
+ 33.1 8.364151 35.641204 -9.812266E-3
+ 33.1 9.186618 35.694793 -0.011472599
+ 33.1 9.687468 35.65829 -0.0133399
+ 33.1 9.943965 35.554134 -0.014920718
+ 33.1 10.273525 35.48968 -0.016111985
+ 33.1 10.722781 35.493854 -0.016923575
+ 33.1 11.157104 35.529186 -0.017359514
+ 33.1 11.460142 35.556957 -0.01754443
+ 33.1 11.676378 35.578372 -0.017620213
+ 33.1 11.869708 35.60032 -0.017639626
+ 33.1 12.007981 35.61552 -0.017622365
+ 33.1 12.131981 35.628845 -0.017578553
+ 33.1 12.240596 35.63959 -0.017521182
+ 33.1 12.34571 35.65118 -0.017469887
+ 33.1 12.435765 35.66051 -0.017424138
+ 33.1 12.509123 35.669605 -0.017381484
+ 33.1 12.578225 35.676856 -0.017343448
+ 33.1 12.627575 35.68173 -0.017306296
+ 33.1 12.666582 35.684741 -0.017268606
+ 33.1 12.715585 35.690456 -0.017232576
+ 33.1 12.770458 35.696403 -0.017201252
+ 33.1 12.813631 35.700984 -0.01717657
+ 33.1 12.859419 35.70618 -0.01715537
+ 33.1 12.902668 35.71089 -0.01713402
+ 33.1 12.963822 35.716934 -0.017111724
+ 33.1 13.024147 35.72194 -0.017091556
+ 33.1 13.080198 35.728607 -0.01707184
+ 33.1 13.158203 35.737297 -0.017048415
+ 33.1 13.203797 35.739475 -0.017025763
+ 33.1 13.259641 35.742355 -0.017005747
+ 33.1 13.324093 35.74666 -0.016980233
+ 33.1 13.392164 35.75045 -0.016950183
+ 33.1 13.488222 35.756874 -0.016919507
+ 33.1 13.621165 35.76343 -0.016891114
+ 33.1 13.735634 35.766517 -0.016864315
+ 33.1 13.883988 35.770885 -0.016832292
+ 33.1 14.076005 35.782516 -0.016789947
+ 33.1 14.335207 35.79034 -0.016729265
+ 33.1 14.690949 35.79398 -0.0166636
+ 33.1 15.301809 35.799747 -0.016558522
+ 33.1 16.032665 35.80837 -0.01641265
+ 33.1 16.716623 35.821033 -0.016214516
+ 33.1 17.741943 35.821384 -0.016070154
+ 33.1 18.499916 35.815727 -0.016008452
+ 33.1 18.945045 35.81283 -0.01584229
+ 33.1 19.086817 35.81383 -0.015545104
+ 33.1 19.103733 35.816745 -0.015195225
+ 33.1 19.102888 35.817726 -0.0148465
+ 33.1 19.09479 35.81667 -0.014491398
+ 33.1 19.107862 35.814296 -0.014129688
+ 33.1 19.004751 35.813503 -0.013594542
+ 33.15 2.5303552 34.897327 0.0E+0
+ 33.15 2.5208272 34.901977 -1.9815403E-4
+ 33.15 2.5214288 34.906948 -3.938608E-4
+ 33.15 2.5400326 34.914615 -4.1448444E-4
+ 33.15 2.5761566 34.918624 -4.1820207E-4
+ 33.15 2.637355 34.927 -5.3544156E-4
+ 33.15 2.7403063 34.94014 -7.7696266E-4
+ 33.15 2.905562 34.95139 -1.2386161E-3
+ 33.15 3.1053388 34.9609 -1.9254365E-3
+ 33.15 3.339402 34.966556 -2.8198505E-3
+ 33.15 3.5620851 34.968132 -3.836393E-3
+ 33.15 3.8233747 34.97884 -4.867706E-3
+ 33.15 4.321979 35.03506 -5.8890683E-3
+ 33.15 5.142461 35.146697 -6.997266E-3
+ 33.15 6.6074895 35.369792 -8.12994E-3
+ 33.15 8.351733 35.63974 -9.316512E-3
+ 33.15 9.19085 35.697322 -0.010922183
+ 33.15 9.683513 35.659137 -0.012738332
+ 33.15 9.938052 35.554256 -0.014253877
+ 33.15 10.267064 35.489444 -0.01537775
+ 33.15 10.717324 35.493415 -0.0161367
+ 33.15 11.154206 35.528907 -0.016526343
+ 33.15 11.459146 35.556915 -0.016669236
+ 33.15 11.676463 35.578487 -0.01671047
+ 33.15 11.869832 35.60029 -0.01669966
+ 33.15 12.009217 35.615642 -0.016655263
+ 33.15 12.134384 35.629074 -0.016587256
+ 33.15 12.242864 35.639724 -0.01651026
+ 33.15 12.348248 35.651416 -0.016443279
+ 33.15 12.438814 35.660823 -0.016384507
+ 33.15 12.512298 35.669956 -0.016330471
+ 33.15 12.581704 35.677276 -0.01628201
+ 33.15 12.631665 35.68224 -0.016235096
+ 33.15 12.670781 35.68523 -0.016187852
+ 33.15 12.719199 35.690795 -0.016142504
+ 33.15 12.773984 35.696784 -0.01610261
+ 33.15 12.816709 35.70134 -0.016070142
+ 33.15 12.862942 35.70663 -0.016041663
+ 33.15 12.906481 35.71139 -0.016013276
+ 33.15 12.968594 35.717643 -0.015984384
+ 33.15 13.028813 35.72273 -0.015958412
+ 33.15 13.085768 35.729526 -0.01593333
+ 33.15 13.163759 35.738136 -0.015904525
+ 33.15 13.209344 35.74041 -0.015876578
+ 33.15 13.265809 35.74347 -0.015851598
+ 33.15 13.331471 35.747825 -0.01582146
+ 33.15 13.399399 35.75164 -0.015787259
+ 33.15 13.496023 35.758136 -0.015753023
+ 33.15 13.627911 35.76465 -0.015722143
+ 33.15 13.742534 35.76766 -0.015693706
+ 33.15 13.890765 35.771907 -0.015661214
+ 33.15 14.083186 35.783287 -0.015619225
+ 33.15 14.344382 35.791194 -0.015559528
+ 33.15 14.699025 35.794853 -0.01549652
+ 33.15 15.316541 35.800392 -0.015393198
+ 33.15 16.048138 35.809497 -0.015244682
+ 33.15 16.741203 35.822273 -0.01503821
+ 33.15 17.748129 35.822612 -0.014891368
+ 33.15 18.51037 35.81724 -0.014843098
+ 33.15 18.967373 35.814636 -0.014698051
+ 33.15 19.116608 35.81541 -0.014417261
+ 33.15 19.133543 35.81835 -0.014076045
+ 33.15 19.13283 35.819347 -0.013733007
+ 33.15 19.125856 35.818374 -0.013383273
+ 33.15 19.13775 35.815597 -0.013027749
+ 33.15 19.034716 35.815032 -0.012500779
+ 33.2 2.5299627 34.897315 0.0E+0
+ 33.2 2.5203623 34.902046 -2.0385924E-4
+ 33.2 2.5207161 34.906902 -4.0742923E-4
+ 33.2 2.5398354 34.91457 -4.2718843E-4
+ 33.2 2.575858 34.91861 -4.2328744E-4
+ 33.2 2.6366906 34.92699 -5.280785E-4
+ 33.2 2.7389352 34.940105 -7.494463E-4
+ 33.2 2.9035782 34.95142 -1.1846529E-3
+ 33.2 3.102882 34.96094 -1.8385573E-3
+ 33.2 3.3383572 34.966922 -2.690248E-3
+ 33.2 3.5626385 34.968723 -3.657562E-3
+ 33.2 3.8245666 34.97957 -4.626481E-3
+ 33.2 4.3229265 35.035766 -5.5724945E-3
+ 33.2 5.1441726 35.14773 -6.612466E-3
+ 33.2 6.605859 35.370223 -7.679208E-3
+ 33.2 8.337869 35.637935 -8.79268E-3
+ 33.2 9.194525 35.699695 -0.010333662
+ 33.2 9.679301 35.65987 -0.012088132
+ 33.2 9.93201 35.554267 -0.013528649
+ 33.2 10.260692 35.489147 -0.014576628
+ 33.2 10.712035 35.49295 -0.015276535
+ 33.2 11.151624 35.52862 -0.015615131
+ 33.2 11.458555 35.556892 -0.0157125
+ 33.2 11.677134 35.578643 -0.015716366
+ 33.2 11.870551 35.6003 -0.015672963
+ 33.2 12.011182 35.61582 -0.015599608
+ 33.2 12.137544 35.629367 -0.015506036
+ 33.2 12.245792 35.639904 -0.015408384
+ 33.2 12.351416 35.6517 -0.01532487
+ 33.2 12.442473 35.66118 -0.01525233
+ 33.2 12.516074 35.67035 -0.015186302
+ 33.2 12.585765 35.677722 -0.015126881
+ 33.2 12.636356 35.682785 -0.015069712
+ 33.2 12.675686 35.685764 -0.015012487
+ 33.2 12.723501 35.691165 -0.014957427
+ 33.2 12.778177 35.6972 -0.014908564
+ 33.2 12.820439 35.70173 -0.014867895
+ 33.2 12.867125 35.70712 -0.014831732
+ 33.2 12.910974 35.71192 -0.014795933
+ 33.2 12.974007 35.718383 -0.014760089
+ 33.2 13.034073 35.723552 -0.014727931
+ 33.2 13.091937 35.730476 -0.014697099
+ 33.2 13.169883 35.738994 -0.01466258
+ 33.2 13.215503 35.741382 -0.014629025
+ 33.2 13.272589 35.74463 -0.014598762
+ 33.2 13.339426 35.749034 -0.014563709
+ 33.2 13.407153 35.752872 -0.014525086
+ 33.2 13.50428 35.75944 -0.014487028
+ 33.2 13.634996 35.765907 -0.014453367
+ 33.2 13.749738 35.768844 -0.014422986
+ 33.2 13.897686 35.77298 -0.014389735
+ 33.2 14.090413 35.78407 -0.014347809
+ 33.2 14.353412 35.792057 -0.014288899
+ 33.2 14.70683 35.795734 -0.014228352
+ 33.2 15.331151 35.80101 -0.01412689
+ 33.2 16.063812 35.81057 -0.013976389
+ 33.2 16.766197 35.82339 -0.013763013
+ 33.2 17.753487 35.823734 -0.01361484
+ 33.2 18.519081 35.818687 -0.01358026
+ 33.2 18.987951 35.816394 -0.013456685
+ 33.2 19.145325 35.816905 -0.013192734
+ 33.2 19.162575 35.81985 -0.012860505
+ 33.2 19.162054 35.820854 -0.012523428
+ 33.2 19.156206 35.819984 -0.0121794
+ 33.2 19.166843 35.8168 -0.011830442
+ 33.2 19.064114 35.816474 -0.011312237
+ 33.25 2.529505 34.897296 0.0E+0
+ 33.25 2.5198624 34.90211 -2.08862E-4
+ 33.25 2.520005 34.906852 -4.1897196E-4
+ 33.25 2.5396602 34.914524 -4.3799087E-4
+ 33.25 2.5755875 34.918594 -4.2713023E-4
+ 33.25 2.636091 34.926982 -5.201595E-4
+ 33.25 2.7376441 34.940067 -7.2168663E-4
+ 33.25 2.9016757 34.951446 -1.1299074E-3
+ 33.25 3.1005008 34.96098 -1.7498693E-3
+ 33.25 3.3373284 34.96727 -2.5571596E-3
+ 33.25 3.563056 34.969272 -3.4724734E-3
+ 33.25 3.8254024 34.98021 -4.3758987E-3
+ 33.25 4.323278 35.03634 -5.24405E-3
+ 33.25 5.145302 35.148632 -6.2126256E-3
+ 33.25 6.6033496 35.37045 -7.209767E-3
+ 33.25 8.322817 35.635833 -8.244413E-3
+ 33.25 9.197703 35.70191 -9.711007E-3
+ 33.25 9.674898 35.660495 -0.011393463
+ 33.25 9.925886 35.554172 -0.012749532
+ 33.25 10.254466 35.488796 -0.013713499
+ 33.25 10.706973 35.49247 -0.014348251
+ 33.25 11.149408 35.528335 -0.014631341
+ 33.25 11.458412 35.55689 -0.014679977
+ 33.25 11.678437 35.578853 -0.014643893
+ 33.25 11.87192 35.600357 -0.01456572
+ 33.25 12.013927 35.616062 -0.014461751
+ 33.25 12.141507 35.629726 -0.01434139
+ 33.25 12.249426 35.64014 -0.01422216
+ 33.25 12.355253 35.652034 -0.014121344
+ 33.25 12.44678 35.661586 -0.014034354
+ 33.25 12.520491 35.670783 -0.013955772
+ 33.25 12.590448 35.678207 -0.013884904
+ 33.25 12.641683 35.683364 -0.013817036
+ 33.25 12.681333 35.686347 -0.013749448
+ 33.25 12.728535 35.69158 -0.013684327
+ 33.25 12.783082 35.697654 -0.01362614
+ 33.25 12.824867 35.702152 -0.013576895
+ 33.25 12.872011 35.707645 -0.013532683
+ 33.25 12.91619 35.712493 -0.013489132
+ 33.25 12.980102 35.719161 -0.013446009
+ 33.25 13.039972 35.72441 -0.013407321
+ 33.25 13.098744 35.731464 -0.013370381
+ 33.25 13.176611 35.739875 -0.01332984
+ 33.25 13.222312 35.742397 -0.013290393
+ 33.25 13.280014 35.745834 -0.013254556
+ 33.25 13.347985 35.750293 -0.013214329
+ 33.25 13.415456 35.75415 -0.013171038
+ 33.25 13.513019 35.760784 -0.013128915
+ 33.25 13.642457 35.76722 -0.013092197
+ 33.25 13.757288 35.77007 -0.013059578
+ 33.25 13.904801 35.77411 -0.013025276
+ 33.25 14.097738 35.784866 -0.01298312
+ 33.25 14.36233 35.792922 -0.012924794
+ 33.25 14.714409 35.79662 -0.012866505
+ 33.25 15.345626 35.8016 -0.012767007
+ 33.25 16.079659 35.811592 -0.012615215
+ 33.25 16.791475 35.824394 -0.012396442
+ 33.25 17.758036 35.824756 -0.012248114
+ 33.25 18.526072 35.820072 -0.012227387
+ 33.25 19.006786 35.81811 -0.01212549
+ 33.25 19.172974 35.818325 -0.011878708
+ 33.25 19.190847 35.821254 -0.011555736
+ 33.25 19.190582 35.822265 -0.011224857
+ 33.25 19.185852 35.821502 -0.010886833
+ 33.25 19.195154 35.817916 -0.010544781
+ 33.25 19.092957 35.817844 -0.010035865
+ 33.3 2.5289852 34.89727 0.0E+0
+ 33.3 2.5193293 34.902175 -2.1313495E-4
+ 33.3 2.519297 34.90681 -4.2843146E-4
+ 33.3 2.5395064 34.91448 -4.4684752E-4
+ 33.3 2.575345 34.91858 -4.297388E-4
+ 33.3 2.635557 34.92698 -5.117673E-4
+ 33.3 2.736436 34.940025 -6.9386983E-4
+ 33.3 2.8998587 34.951473 -1.0746929E-3
+ 33.3 3.0982022 34.961006 -1.6598473E-3
+ 33.3 3.3363261 34.96759 -2.4213055E-3
+ 33.3 3.5633494 34.969772 -3.282184E-3
+ 33.3 3.8259036 34.980762 -4.1175233E-3
+ 33.3 4.323079 35.03679 -4.905919E-3
+ 33.3 5.14592 35.14941 -5.8005042E-3
+ 33.3 6.6001296 35.3705 -6.7249597E-3
+ 33.3 8.306846 35.633483 -7.67571E-3
+ 33.3 9.200456 35.70397 -9.058665E-3
+ 33.3 9.670369 35.66102 -0.010659057
+ 33.3 9.919734 35.553966 -0.011921687
+ 33.3 10.248444 35.488395 -0.012793985
+ 33.3 10.702198 35.491977 -0.013357824
+ 33.3 11.147606 35.528053 -0.013581288
+ 33.3 11.458753 35.55691 -0.013578312
+ 33.3 11.680414 35.579116 -0.013499961
+ 33.3 11.873992 35.60047 -0.013385063
+ 33.3 12.0175 35.616374 -0.013249014
+ 33.3 12.146317 35.63016 -0.013100799
+ 33.3 12.253807 35.64043 -0.012959185
+ 33.3 12.3598 35.65242 -0.012840386
+ 33.3 12.45177 35.66204 -0.012738338
+ 33.3 12.525583 35.67127 -0.012646702
+ 33.3 12.595789 35.67873 -0.012563953
+ 33.3 12.647681 35.68398 -0.01248499
+ 33.3 12.687755 35.68698 -0.012406711
+ 33.3 12.734342 35.692043 -0.01233123
+ 33.3 12.788743 35.698154 -0.012263409
+ 33.3 12.830042 35.70262 -0.012205259
+ 33.3 12.87764 35.708213 -0.012152671
+ 33.3 12.922169 35.713108 -0.012101068
+ 33.3 12.986915 35.719982 -0.012050378
+ 33.3 13.04655 35.72531 -0.012004848
+ 33.3 13.106227 35.73249 -0.01196148
+ 33.3 13.183979 35.740787 -0.011914641
+ 33.3 13.229804 35.743453 -0.011869054
+ 33.3 13.288115 35.747085 -0.011827386
+ 33.3 13.357172 35.751594 -0.011781753
+ 33.3 13.424335 35.75547 -0.011733575
+ 33.3 13.522265 35.762172 -0.011687169
+ 33.3 13.650334 35.76858 -0.011647138
+ 33.3 13.765226 35.77135 -0.011611999
+ 33.3 13.912161 35.775302 -0.01157636
+ 33.3 14.105215 35.78569 -0.011533684
+ 33.3 14.371169 35.793807 -0.011475741
+ 33.3 14.721807 35.797523 -0.011419497
+ 33.3 15.359959 35.802185 -0.011322069
+ 33.3 16.095638 35.812572 -0.011169711
+ 33.3 16.816908 35.825294 -0.010947108
+ 33.3 17.7618 35.8257 -0.010799812
+ 33.3 18.531382 35.82141 -0.010793006
+ 33.3 19.023888 35.819797 -0.010712839
+ 33.3 19.199566 35.81968 -0.01048344
+ 33.3 19.218393 35.82258 -0.010169937
+ 33.3 19.218435 35.82359 -9.845461E-3
+ 33.3 19.214811 35.822944 -9.513704E-3
+ 33.3 19.222708 35.818965 -9.17885E-3
+ 33.3 19.121264 35.819156 -8.679687E-3
+ 33.35 2.5284068 34.897235 0.0E+0
+ 33.35 2.5187642 34.90224 -2.1665567E-4
+ 33.35 2.5185945 34.90677 -4.3576731E-4
+ 33.35 2.539374 34.914432 -4.5372964E-4
+ 33.35 2.575132 34.918567 -4.3113052E-4
+ 33.35 2.6350886 34.926975 -5.029858E-4
+ 33.35 2.7353127 34.939987 -6.6617713E-4
+ 33.35 2.898132 34.951496 -1.0193174E-3
+ 33.35 3.0959935 34.961025 -1.5689639E-3
+ 33.35 3.3353605 34.967895 -2.2834127E-3
+ 33.35 3.5635328 34.97023 -3.0877806E-3
+ 33.35 3.8260955 34.981227 -3.8529837E-3
+ 33.35 4.3223776 35.037117 -4.560389E-3
+ 33.35 5.146105 35.15008 -5.3790137E-3
+ 33.35 6.596374 35.370395 -6.228343E-3
+ 33.35 8.290229 35.63094 -7.090882E-3
+ 33.35 9.20285 35.70589 -8.381506E-3
+ 33.35 9.665784 35.661445 -9.890164E-3
+ 33.35 9.913608 35.553657 -0.011050875
+ 33.35 10.242684 35.487945 -0.011824391
+ 33.35 10.697767 35.49148 -0.012311965
+ 33.35 11.146262 35.527782 -0.012472067
+ 33.35 11.459615 35.556964 -0.012414971
+ 33.35 11.683102 35.579433 -0.012292328
+ 33.35 11.876816 35.600643 -0.012139001
+ 33.35 12.021945 35.61676 -0.011969613
+ 33.35 12.15201 35.63067 -0.011792649
+ 33.35 12.258974 35.640785 -0.011627975
+ 33.35 12.36509 35.652862 -0.01149061
+ 33.35 12.457477 35.662555 -0.011372973
+ 33.35 12.531387 35.671806 -0.011267847
+ 33.35 12.601827 35.6793 -0.011172841
+ 33.35 12.654386 35.684635 -0.011082446
+ 33.35 12.694984 35.68767 -0.0109932
+ 33.35 12.740964 35.692554 -0.010907115
+ 33.35 12.795201 35.698707 -0.010829403
+ 33.35 12.836008 35.703132 -0.010762064
+ 33.35 12.884053 35.708827 -0.010700816
+ 33.35 12.928952 35.71377 -0.010640906
+ 33.35 12.994481 35.720844 -0.010582404
+ 33.35 13.053849 35.726257 -0.01052976
+ 33.35 13.114422 35.73356 -0.010479679
+ 33.35 13.192019 35.74173 -0.010426307
+ 33.35 13.23801 35.744556 -0.010374368
+ 33.35 13.29692 35.74839 -0.010326644
+ 33.35 13.367011 35.75295 -0.010275408
+ 33.35 13.433816 35.756835 -0.010222155
+ 33.35 13.532041 35.763603 -0.010171276
+ 33.35 13.658665 35.769992 -0.010127695
+ 33.35 13.773589 35.772682 -0.010089771
+ 33.35 13.919816 35.77656 -0.010052521
+ 33.35 14.112899 35.786552 -0.010009037
+ 33.35 14.379965 35.794712 -9.95128E-3
+ 33.35 14.729075 35.798446 -9.896867E-3
+ 33.35 15.374139 35.802764 -9.801616E-3
+ 33.35 16.111713 35.81353 -9.649443E-3
+ 33.35 16.842361 35.826107 -9.42462E-3
+ 33.35 17.764805 35.826572 -9.279547E-3
+ 33.35 18.53506 35.822723 -9.28663E-3
+ 33.35 19.03928 35.82147 -9.228086E-3
+ 33.35 19.225124 35.820983 -9.016169E-3
+ 33.35 19.24524 35.823833 -8.712294E-3
+ 33.35 19.245647 35.82484 -8.394388E-3
+ 33.35 19.243101 35.824325 -8.069126E-3
+ 33.35 19.249533 35.81996 -7.7417204E-3
+ 33.35 19.149054 35.820426 -7.2527122E-3
+ 33.4 2.527774 34.897197 0.0E+0
+ 33.4 2.5181694 34.9023 -2.1940659E-4
+ 33.4 2.5179 34.906726 -4.4095591E-4
+ 33.4 2.539262 34.91439 -4.5862351E-4
+ 33.4 2.5749487 34.918552 -4.3133075E-4
+ 33.4 2.6346864 34.926975 -4.9389846E-4
+ 33.4 2.7342765 34.93995 -6.3878344E-4
+ 33.4 2.8964993 34.951515 -9.640826E-4
+ 33.4 3.0938813 34.96104 -1.4776867E-3
+ 33.4 3.3344423 34.968173 -2.144211E-3
+ 33.4 3.563621 34.970642 -2.8903742E-3
+ 33.4 3.8260066 34.98161 -3.5839627E-3
+ 33.4 4.321228 35.037334 -4.209834E-3
+ 33.4 5.145939 35.15065 -4.951194E-3
+ 33.4 6.592263 35.37018 -5.723656E-3
+ 33.4 8.273246 35.628246 -6.494499E-3
+ 33.4 9.204963 35.70767 -7.684765E-3
+ 33.4 9.661212 35.66178 -9.092482E-3
+ 33.4 9.907564 35.553245 -0.010143391
+ 33.4 10.237243 35.487457 -0.010811625
+ 33.4 10.693739 35.490982 -0.011218044
+ 33.4 11.145421 35.52753 -0.011311474
+ 33.4 11.461032 35.557044 -0.011198145
+ 33.4 11.686536 35.579814 -0.011029512
+ 33.4 11.880437 35.600883 -0.010836321
+ 33.4 12.0273 35.617225 -0.010632558
+ 33.4 12.15862 35.63126 -0.010426138
+ 33.4 12.264964 35.641212 -0.010237868
+ 33.4 12.371159 35.65337 -0.010081456
+ 33.4 12.463932 35.663124 -9.947784E-3
+ 33.4 12.537934 35.672397 -9.828804E-3
+ 33.4 12.608594 35.679916 -9.721229E-3
+ 33.4 12.661828 35.685337 -9.6191205E-3
+ 33.4 12.70305 35.688423 -9.518691E-3
+ 33.4 12.748435 35.693126 -9.421817E-3
+ 33.4 12.802496 35.699317 -9.33401E-3
+ 33.4 12.842805 35.7037 -9.257248E-3
+ 33.4 12.891285 35.709495 -9.187107E-3
+ 33.4 12.936573 35.714485 -9.118679E-3
+ 33.4 13.002834 35.721755 -9.052165E-3
+ 33.4 13.061906 35.72725 -8.9921765E-3
+ 33.4 13.123364 35.734672 -8.93514E-3
+ 33.4 13.200762 35.742706 -8.875038E-3
+ 33.4 13.24696 35.74571 -8.816575E-3
+ 33.4 13.306456 35.749744 -8.76261E-3
+ 33.4 13.377523 35.754352 -8.7056094E-3
+ 33.4 13.443923 35.758247 -8.647127E-3
+ 33.4 13.542371 35.765083 -8.591616E-3
+ 33.4 13.667486 35.771465 -8.544273E-3
+ 33.4 13.782419 35.77408 -8.503318E-3
+ 33.4 13.927817 35.7779 -8.464194E-3
+ 33.4 14.120844 35.787456 -8.419626E-3
+ 33.4 14.388758 35.795646 -8.361865E-3
+ 33.4 14.736262 35.799396 -8.3090635E-3
+ 33.4 15.38816 35.803352 -8.216099E-3
+ 33.4 16.127844 35.814472 -8.064882E-3
+ 33.4 16.867704 35.826843 -7.839482E-3
+ 33.4 17.767084 35.827392 -7.697814E-3
+ 33.4 18.537174 35.82402 -7.7186482E-3
+ 33.4 19.053 35.82313 -7.6814624E-3
+ 33.4 19.249674 35.82225 -7.4870074E-3
+ 33.4 19.271423 35.825035 -7.192865E-3
+ 33.4 19.272245 35.82604 -6.881665E-3
+ 33.4 19.27075 35.82566 -6.563091E-3
+ 33.4 19.275663 35.82092 -6.2433416E-3
+ 33.4 19.176353 35.821666 -5.764826E-3
+ 33.45 2.527091 34.897155 0.0E+0
+ 33.45 2.517547 34.902362 -2.2137488E-4
+ 33.45 2.5172162 34.90669 -4.4399E-4
+ 33.45 2.5391705 34.91435 -4.6152964E-4
+ 33.45 2.5747961 34.91854 -4.30372E-4
+ 33.45 2.6343502 34.92698 -4.8458762E-4
+ 33.45 2.733329 34.93991 -6.118559E-4
+ 33.45 2.8949654 34.951534 -9.092815E-4
+ 33.45 3.0918724 34.96105 -1.3864761E-3
+ 33.45 3.333583 34.968437 -2.0044276E-3
+ 33.45 3.5636308 34.971012 -2.691091E-3
+ 33.45 3.825669 34.981914 -3.312186E-3
+ 33.45 4.3196883 35.037445 -3.8566947E-3
+ 33.45 5.1455082 35.15113 -4.5201852E-3
+ 33.45 6.587982 35.36987 -5.214783E-3
+ 33.45 8.256173 35.62546 -5.8913356E-3
+ 33.45 9.206866 35.709312 -6.9739636E-3
+ 33.45 9.656725 35.662033 -8.272087E-3
+ 33.45 9.90166 35.552734 -9.205981E-3
+ 33.45 10.232177 35.48693 -9.763114E-3
+ 33.45 10.690168 35.490497 -0.010083997
+ 33.45 11.145123 35.527297 -0.010107905
+ 33.45 11.463033 35.557163 -9.936661E-3
+ 33.45 11.690744 35.580253 -9.720682E-3
+ 33.45 11.884895 35.601192 -9.486484E-3
+ 33.45 12.033598 35.61777 -9.247552E-3
+ 33.45 12.166174 35.631935 -9.011163E-3
+ 33.45 12.271809 35.641712 -8.798907E-3
+ 33.45 12.378036 35.653942 -8.623078E-3
+ 33.45 12.471164 35.663757 -8.473019E-3
+ 33.45 12.545256 35.673053 -8.339896E-3
+ 33.45 12.616124 35.680583 -8.219502E-3
+ 33.45 12.670039 35.686092 -8.105464E-3
+ 33.45 12.711978 35.68924 -7.993696E-3
+ 33.45 12.756791 35.69376 -7.885907E-3
+ 33.45 12.810662 35.699993 -7.787858E-3
+ 33.45 12.850475 35.704326 -7.7014942E-3
+ 33.45 12.899372 35.710216 -7.6222755E-3
+ 33.45 12.945067 35.715255 -7.545169E-3
+ 33.45 13.012003 35.72272 -7.4704894E-3
+ 33.45 13.070757 35.72829 -7.4029737E-3
+ 33.45 13.133081 35.735836 -7.3387837E-3
+ 33.45 13.210236 35.743717 -7.2717973E-3
+ 33.45 13.25668 35.74691 -7.2066793E-3
+ 33.45 13.316745 35.75115 -7.14633E-3
+ 33.45 13.388725 35.755805 -7.0834425E-3
+ 33.45 13.454678 35.75971 -7.019612E-3
+ 33.45 13.553274 35.76661 -6.9593386E-3
+ 33.45 13.676831 35.77299 -6.90805E-3
+ 33.45 13.791751 35.77554 -6.863843E-3
+ 33.45 13.936216 35.779315 -6.8225944E-3
+ 33.45 14.129103 35.788414 -6.7766793E-3
+ 33.45 14.397584 35.796615 -6.7187314E-3
+ 33.45 14.74342 35.80039 -6.6673257E-3
+ 33.45 15.402015 35.80396 -6.5767564E-3
+ 33.45 16.14399 35.815414 -6.4272806E-3
+ 33.45 16.892805 35.82752 -6.2029645E-3
+ 33.45 17.76868 35.828174 -6.0658613E-3
+ 33.45 18.537798 35.825313 -6.100207E-3
+ 33.45 19.065102 35.8248 -6.083953E-3
+ 33.45 19.273249 35.823486 -5.906823E-3
+ 33.45 19.296984 35.8262 -5.6224665E-3
+ 33.45 19.298267 35.8272 -5.3180786E-3
+ 33.45 19.297785 35.82696 -5.006353E-3
+ 33.45 19.301132 35.821857 -4.6944222E-3
+ 33.45 19.20319 35.822887 -4.2266766E-3
+ 33.5 2.5263633 34.89711 0.0E+0
+ 33.5 2.5168995 34.902416 -2.225523E-4
+ 33.5 2.5165455 34.906654 -4.44878E-4
+ 33.5 2.5390985 34.914306 -4.6246201E-4
+ 33.5 2.5746746 34.91853 -4.2829266E-4
+ 33.5 2.6340794 34.926986 -4.7513275E-4
+ 33.5 2.732472 34.93987 -5.855521E-4
+ 33.5 2.8935334 34.95155 -8.551964E-4
+ 33.5 3.089974 34.961051 -1.295782E-3
+ 33.5 3.332794 34.96868 -1.8647842E-3
+ 33.5 3.5635805 34.97134 -2.491065E-3
+ 33.5 3.825118 34.982143 -3.0394061E-3
+ 33.5 4.317819 35.03746 -3.5034576E-3
+ 33.5 5.1449036 35.15154 -4.089202E-3
+ 33.5 6.5837163 35.36951 -4.7057112E-3
+ 33.5 8.239288 35.62263 -5.2863135E-3
+ 33.5 9.208639 35.710834 -6.254846E-3
+ 33.5 9.652397 35.662212 -7.4353534E-3
+ 33.5 9.895955 35.552135 -8.245761E-3
+ 33.5 10.227542 35.48638 -8.686712E-3
+ 33.5 10.687109 35.490024 -8.918228E-3
+ 33.5 11.145404 35.527095 -8.870257E-3
+ 33.5 11.465646 35.55732 -8.639867E-3
+ 33.5 11.695752 35.58076 -8.375554E-3
+ 33.5 11.890225 35.601573 -8.099514E-3
+ 33.5 12.040867 35.61841 -7.824869E-3
+ 33.5 12.174696 35.632698 -7.5582056E-3
+ 33.5 12.279537 35.642295 -7.3217274E-3
+ 33.5 12.385748 35.654586 -7.126228E-3
+ 33.5 12.479199 35.66446 -6.9595235E-3
+ 33.5 12.55338 35.673774 -6.812046E-3
+ 33.5 12.624446 35.681312 -6.678655E-3
+ 33.5 12.679045 35.6869 -6.552537E-3
+ 33.5 12.721792 35.690124 -6.429339E-3
+ 33.5 12.766061 35.694465 -6.3105705E-3
+ 33.5 12.819733 35.700733 -6.2021934E-3
+ 33.5 12.859051 35.70502 -6.1061047E-3
+ 33.5 12.908343 35.711002 -6.0176774E-3
+ 33.5 12.954463 35.716087 -5.931782E-3
+ 33.5 13.022015 35.72374 -5.8488342E-3
+ 33.5 13.080433 35.72939 -5.773655E-3
+ 33.5 13.143601 35.73705 -5.70216E-3
+ 33.5 13.220465 35.744777 -5.628183E-3
+ 33.5 13.267191 35.74817 -5.556323E-3
+ 33.5 13.327807 35.752613 -5.489488E-3
+ 33.5 13.400633 35.757316 -5.4206303E-3
+ 33.5 13.466099 35.761222 -5.351371E-3
+ 33.5 13.564769 35.76819 -5.2862414E-3
+ 33.5 13.686732 35.774581 -5.2308505E-3
+ 33.5 13.801621 35.777072 -5.183195E-3
+ 33.5 13.94506 35.780822 -5.1395907E-3
+ 33.5 14.13773 35.789436 -5.0920774E-3
+ 33.5 14.406486 35.79763 -5.0337724E-3
+ 33.5 14.750604 35.801422 -4.983549E-3
+ 33.5 15.415699 35.804592 -4.895486E-3
+ 33.5 16.160105 35.816371 -4.7485437E-3
+ 33.5 16.917538 35.828147 -4.526973E-3
+ 33.5 17.769636 35.828933 -4.395561E-3
+ 33.5 18.53702 35.826622 -4.4430745E-3
+ 33.5 19.075644 35.826484 -4.4471672E-3
+ 33.5 19.295893 35.824714 -4.287108E-3
+ 33.5 19.321962 35.82734 -4.01254E-3
+ 33.5 19.323751 35.828334 -3.7150415E-3
+ 33.5 19.324236 35.828243 -3.4102902E-3
+ 33.5 19.325987 35.822795 -3.1063011E-3
+ 33.5 19.229595 35.824115 -2.649542E-3
+ 33.55 2.5255961 34.89706 0.0E+0
+ 33.55 2.5162303 34.90247 -2.2293506E-4
+ 33.55 2.5158905 34.90662 -4.4364336E-4
+ 33.55 2.5390455 34.91427 -4.6144687E-4
+ 33.55 2.574585 34.91852 -4.2513606E-4
+ 33.55 2.6338741 34.927 -4.656097E-4
+ 33.55 2.7317068 34.93983 -5.600191E-4
+ 33.55 2.8922073 34.951564 -8.0209743E-4
+ 33.55 3.088192 34.96105 -1.2060415E-3
+ 33.55 3.3320868 34.968906 -1.7259908E-3
+ 33.55 3.5634894 34.97163 -2.2914295E-3
+ 33.55 3.8243913 34.982307 -2.7673887E-3
+ 33.55 4.3156852 35.037395 -3.1526335E-3
+ 33.55 5.144217 35.151882 -3.6614995E-3
+ 33.55 6.579653 35.369132 -4.200491E-3
+ 33.55 8.222864 35.619812 -4.6844324E-3
+ 33.55 9.210358 35.712242 -5.5332914E-3
+ 33.55 9.648298 35.662326 -6.588863E-3
+ 33.55 9.89051 35.551452 -7.2701172E-3
+ 33.55 10.223392 35.485805 -7.5906002E-3
+ 33.55 10.684611 35.489574 -7.7295047E-3
+ 33.55 11.146297 35.526924 -7.6078153E-3
+ 33.55 11.468891 35.557514 -7.317519E-3
+ 33.55 11.701578 35.581333 -7.004266E-3
+ 33.55 11.896455 35.60204 -6.685871E-3
+ 33.55 12.049127 35.61914 -6.3752322E-3
+ 33.55 12.1842 35.633556 -6.078202E-3
+ 33.55 12.288172 35.64296 -5.8174254E-3
+ 33.55 12.39432 35.655303 -5.6021204E-3
+ 33.55 12.488059 35.66523 -5.418613E-3
+ 33.55 12.562331 35.67457 -5.256653E-3
+ 33.55 12.633589 35.682106 -5.1101576E-3
+ 33.55 12.688872 35.68777 -4.9718767E-3
+ 33.55 12.732513 35.691085 -4.8372214E-3
+ 33.55 12.776274 35.695247 -4.7074747E-3
+ 33.55 12.829738 35.701553 -4.5887436E-3
+ 33.55 12.868568 35.705783 -4.4828644E-3
+ 33.55 12.918228 35.711856 -4.3851537E-3
+ 33.55 12.964789 35.716987 -4.290412E-3
+ 33.55 13.032894 35.72482 -4.1991453E-3
+ 33.55 13.090962 35.73055 -4.1162166E-3
+ 33.55 13.154949 35.73832 -4.0373145E-3
+ 33.55 13.231473 35.74588 -3.9562862E-3
+ 33.55 13.278514 35.74949 -3.8776434E-3
+ 33.55 13.339658 35.75413 -3.804265E-3
+ 33.55 13.413258 35.75888 -3.7293962E-3
+ 33.55 13.478203 35.76279 -3.6546664E-3
+ 33.55 13.57687 35.76982 -3.5846217E-3
+ 33.55 13.69722 35.776237 -3.5250042E-3
+ 33.55 13.812063 35.77868 -3.473731E-3
+ 33.55 13.954399 35.78242 -3.4275571E-3
+ 33.55 14.146775 35.79053 -3.3782133E-3
+ 33.55 14.415502 35.7987 -3.3193931E-3
+ 33.55 14.757868 35.80251 -3.270144E-3
+ 33.55 15.429207 35.805267 -3.1846973E-3
+ 33.55 16.176151 35.817352 -3.041082E-3
+ 33.55 16.941772 35.828746 -2.8239048E-3
+ 33.55 17.770002 35.829685 -2.6992666E-3
+ 33.55 18.53494 35.82796 -2.7595001E-3
+ 33.55 19.084703 35.828197 -2.7831976E-3
+ 33.55 19.317648 35.82594 -2.6398391E-3
+ 33.55 19.346407 35.828475 -2.375014E-3
+ 33.55 19.34874 35.829467 -2.0844545E-3
+ 33.55 19.35014 35.829517 -1.7867738E-3
+ 33.55 19.350266 35.823745 -1.4908079E-3
+ 33.55 19.255598 35.825355 -1.045192E-3
+ 33.6 2.5247955 34.897006 0.0E+0
+ 33.6 2.5155425 34.90252 -2.2252346E-4
+ 33.6 2.5152544 34.90659 -4.4032331E-4
+ 33.6 2.5390117 34.91423 -4.585218E-4
+ 33.6 2.5745275 34.918514 -4.209491E-4
+ 33.6 2.6337337 34.92701 -4.5608903E-4
+ 33.6 2.7310347 34.939796 -5.353921E-4
+ 33.6 2.8909904 34.951576 -7.5024046E-4
+ 33.6 3.0865333 34.96104 -1.1176761E-3
+ 33.6 3.331473 34.969112 -1.588742E-3
+ 33.6 3.563378 34.971885 -2.0933088E-3
+ 33.6 3.82353 34.982406 -2.4978977E-3
+ 33.6 4.313355 35.03725 -2.8067335E-3
+ 33.6 5.1435422 35.15218 -3.2403448E-3
+ 33.6 6.5759773 35.368766 -3.703188E-3
+ 33.6 8.207165 35.61705 -4.09071E-3
+ 33.6 9.212097 35.713542 -4.8152394E-3
+ 33.6 9.644501 35.662384 -5.739326E-3
+ 33.6 9.885384 35.550693 -6.286617E-3
+ 33.6 10.219775 35.485214 -6.483181E-3
+ 33.6 10.682722 35.48915 -6.5268487E-3
+ 33.6 11.14783 35.526794 -6.3301404E-3
+ 33.6 11.472789 35.55776 -5.9796604E-3
+ 33.6 11.708237 35.581974 -5.6172553E-3
+ 33.6 11.903611 35.602592 -5.256326E-3
+ 33.6 12.058392 35.619964 -4.909683E-3
+ 33.6 12.194698 35.634506 -4.582411E-3
+ 33.6 12.297734 35.643714 -4.2974227E-3
+ 33.6 12.403769 35.656097 -4.0623024E-3
+ 33.6 12.497765 35.666072 -3.8619374E-3
+ 33.6 12.572133 35.675437 -3.6854494E-3
+ 33.6 12.643577 35.68297 -3.525816E-3
+ 33.6 12.699543 35.688705 -3.375359E-3
+ 33.6 12.744157 35.692127 -3.229287E-3
+ 33.6 12.787451 35.69611 -3.0886277E-3
+ 33.6 12.840703 35.702453 -2.959578E-3
+ 33.6 12.879053 35.706623 -2.8439036E-3
+ 33.6 12.929051 35.71278 -2.7368897E-3
+ 33.6 12.976066 35.71796 -2.6332992E-3
+ 33.6 13.044659 35.725967 -2.533715E-3
+ 33.6 13.102369 35.73177 -2.443003E-3
+ 33.6 13.167143 35.739646 -2.3566421E-3
+ 33.6 13.243276 35.747035 -2.2685506E-3
+ 33.6 13.290664 35.750865 -2.1831302E-3
+ 33.6 13.352311 35.75571 -2.1031966E-3
+ 33.6 13.426609 35.760505 -2.0223185E-3
+ 33.6 13.491004 35.764411 -1.9421164E-3
+ 33.6 13.589591 35.771507 -1.8671333E-3
+ 33.6 13.708321 35.77796 -1.8031968E-3
+ 33.6 13.823106 35.78037 -1.7481653E-3
+ 33.6 13.964278 35.78412 -1.6992309E-3
+ 33.6 14.156289 35.79171 -1.6478436E-3
+ 33.6 14.424675 35.799823 -1.5883635E-3
+ 33.6 14.765265 35.80366 -1.539888E-3
+ 33.6 15.442538 35.805992 -1.4571669E-3
+ 33.6 16.192083 35.81838 -1.3176654E-3
+ 33.6 16.96539 35.82933 -1.1065016E-3
+ 33.6 17.769836 35.830444 -9.896636E-4
+ 33.6 18.53167 35.829345 -1.0620648E-3
+ 33.6 19.092367 35.829956 -1.1044729E-3
+ 33.6 19.33857 35.827186 -9.77334E-4
+ 33.6 19.370361 35.82962 -7.221584E-4
+ 33.6 19.373274 35.830604 -4.3856244E-4
+ 33.6 19.375532 35.830802 -1.4801846E-4
+ 33.6 19.374018 35.824726 1.3988219E-4
+ 33.6 19.281237 35.82663 5.7425536E-4
+ 33.65 2.5239677 34.896953 0.0E+0
+ 33.65 2.51484 34.90256 -2.213217E-4
+ 33.65 2.51464 34.906562 -4.3496806E-4
+ 33.65 2.5389962 34.9142 -4.5373436E-4
+ 33.65 2.5745022 34.918514 -4.1578095E-4
+ 33.65 2.6336576 34.92703 -4.4663526E-4
+ 33.65 2.7304573 34.939762 -5.1179266E-4
+ 33.65 2.8898861 34.951587 -6.998655E-4
+ 33.65 3.0850038 34.961032 -1.0310898E-3
+ 33.65 3.330965 34.969306 -1.4537123E-3
+ 33.65 3.5632677 34.972103 -1.8978098E-3
+ 33.65 3.8225767 34.98245 -2.2326807E-3
+ 33.65 4.310897 35.03705 -2.4682471E-3
+ 33.65 5.142976 35.152446 -2.828982E-3
+ 33.65 6.5728726 35.368446 -3.2178387E-3
+ 33.65 8.192445 35.614402 -3.510113E-3
+ 33.65 9.213936 35.714744 -4.1066063E-3
+ 33.65 9.641074 35.6624 -4.893486E-3
+ 33.65 9.880637 35.54987 -5.3029083E-3
+ 33.65 10.216743 35.48462 -5.3729754E-3
+ 33.65 10.681485 35.488765 -5.3194235E-3
+ 33.65 11.150029 35.526706 -5.046949E-3
+ 33.65 11.477354 35.558052 -4.6364995E-3
+ 33.65 11.715735 35.582687 -4.2251325E-3
+ 33.65 11.911707 35.60323 -3.8218302E-3
+ 33.65 12.068669 35.620887 -3.4394478E-3
+ 33.65 12.206193 35.63555 -3.0822814E-3
+ 33.65 12.308238 35.64456 -2.773333E-3
+ 33.65 12.414113 35.65698 -2.5185118E-3
+ 33.65 12.508331 35.666996 -2.3013397E-3
+ 33.65 12.582804 35.676387 -2.110365E-3
+ 33.65 12.654432 35.683906 -1.9376337E-3
+ 33.65 12.711075 35.689712 -1.7750589E-3
+ 33.65 12.756737 35.693252 -1.6176768E-3
+ 33.65 12.799613 35.697063 -1.4662354E-3
+ 33.65 12.852648 35.70344 -1.3269661E-3
+ 33.65 12.890531 35.70755 -1.201551E-3
+ 33.65 12.940832 35.713783 -1.0852724E-3
+ 33.65 12.988314 35.719013 -9.7288453E-4
+ 33.65 13.057326 35.72718 -8.6503836E-4
+ 33.65 13.114674 35.733062 -7.6656113E-4
+ 33.65 13.180201 35.741035 -6.727422E-4
+ 33.65 13.25589 35.74825 -5.7762436E-4
+ 33.65 13.303651 35.752307 -4.854787E-4
+ 33.65 13.365774 35.75735 -3.9902454E-4
+ 33.65 13.440692 35.762195 -3.1218177E-4
+ 33.65 13.504511 35.766094 -2.2654553E-4
+ 33.65 13.602944 35.773254 -1.4663773E-4
+ 33.65 13.72006 35.779754 -7.832346E-5
+ 33.65 13.83478 35.782146 -1.9423422E-5
+ 33.65 13.974741 35.78592 3.2440377E-5
+ 33.65 14.166318 35.792976 8.6063504E-5
+ 33.65 14.434046 35.80102 1.4633218E-4
+ 33.65 14.77285 35.804882 1.9422713E-4
+ 33.65 15.45569 35.80678 2.7411611E-4
+ 33.65 16.207859 35.819454 4.087304E-4
+ 33.65 16.988276 35.829914 6.1230466E-4
+ 33.65 17.769197 35.831233 7.203829E-4
+ 33.65 18.527328 35.830787 6.3646706E-4
+ 33.65 19.098732 35.831764 5.763908E-4
+ 33.65 19.358713 35.82846 6.879007E-4
+ 33.65 19.393875 35.83079 9.335636E-4
+ 33.65 19.397398 35.83177 1.2101954E-3
+ 33.65 19.400454 35.832115 1.4935648E-3
+ 33.65 19.397291 35.825756 1.7733957E-3
+ 33.65 19.306545 35.827945 2.1964823E-3
+ 33.7 2.5231194 34.896903 0.0E+0
+ 33.7 2.514126 34.9026 -2.1933755E-4
+ 33.7 2.5140497 34.90654 -4.2763946E-4
+ 33.7 2.5389988 34.914165 -4.4714065E-4
+ 33.7 2.5745098 34.918514 -4.096818E-4
+ 33.7 2.6336455 34.927055 -4.3730533E-4
+ 33.7 2.7299747 34.939727 -4.8932834E-4
+ 33.7 2.8888974 34.9516 -6.5119523E-4
+ 33.7 3.0836098 34.96102 -9.466656E-4
+ 33.7 3.330574 34.969486 -1.3215521E-3
+ 33.7 3.5631806 34.972293 -1.7060131E-3
+ 33.7 3.8215773 34.982444 -1.9734525E-3
+ 33.7 4.308383 35.036792 -2.1396165E-3
+ 33.7 5.1426134 35.152694 -2.4305982E-3
+ 33.7 6.570516 35.36821 -2.7484034E-3
+ 33.7 8.178949 35.611907 -2.9474943E-3
+ 33.7 9.215946 35.715862 -3.413207E-3
+ 33.7 9.638089 35.662376 -4.0580364E-3
+ 33.7 9.87633 35.548984 -4.3266257E-3
+ 33.7 10.214338 35.484024 -4.268517E-3
+ 33.7 10.680941 35.488426 -4.116424E-3
+ 33.7 11.152912 35.52667 -3.7679967E-3
+ 33.7 11.482594 35.558395 -3.2982872E-3
+ 33.7 11.724074 35.583473 -2.838554E-3
+ 33.7 11.920754 35.603965 -2.3933835E-3
+ 33.7 12.07996 35.621913 -1.9758038E-3
+ 33.7 12.218681 35.6367 -1.5893128E-3
+ 33.7 12.319692 35.645507 -1.2568221E-3
+ 33.7 12.425361 35.65794 -9.825415E-4
+ 33.7 12.51977 35.668003 -7.4871844E-4
+ 33.7 12.594361 35.677425 -5.433839E-4
+ 33.7 12.666171 35.68493 -3.5767033E-4
+ 33.7 12.723486 35.6908 -1.83106E-4
+ 33.7 12.770262 35.69447 -1.4587935E-5
+ 33.7 12.812773 35.698116 1.4744014E-4
+ 33.7 12.865592 35.704524 2.9676812E-4
+ 33.7 12.903022 35.708564 4.3180852E-4
+ 33.7 12.953589 35.71487 5.572557E-4
+ 33.7 13.001547 35.72015 6.783344E-4
+ 33.7 13.070907 35.72847 7.9433375E-4
+ 33.7 13.127894 35.734424 9.0050505E-4
+ 33.7 13.194134 35.742492 1.001729E-3
+ 33.7 13.269325 35.749523 1.1037871E-3
+ 33.7 13.317484 35.753822 1.2025591E-3
+ 33.7 13.380053 35.759056 1.2954533E-3
+ 33.7 13.45551 35.763946 1.388173E-3
+ 33.7 13.518731 35.767837 1.4791646E-3
+ 33.7 13.616936 35.775062 1.563947E-3
+ 33.7 13.732456 35.78162 1.6366641E-3
+ 33.7 13.847107 35.784015 1.6995118E-3
+ 33.7 13.98583 35.787834 1.75445E-3
+ 33.7 14.176907 35.794345 1.8104786E-3
+ 33.7 14.443654 35.802295 1.8716488E-3
+ 33.7 14.780676 35.806186 1.9191465E-3
+ 33.7 15.468664 35.807647 1.996101E-3
+ 33.7 16.223434 35.820602 2.1250762E-3
+ 33.7 17.010323 35.83052 2.3195431E-3
+ 33.7 17.768148 35.83206 2.4179797E-3
+ 33.7 18.52205 35.832302 2.323301E-3
+ 33.7 19.103903 35.83364 2.2467405E-3
+ 33.7 19.378143 35.82978 2.343316E-3
+ 33.7 19.417 35.832 2.5796454E-3
+ 33.7 19.421158 35.832977 2.849334E-3
+ 33.7 19.424944 35.833465 3.125518E-3
+ 33.7 19.420141 35.82685 3.3973106E-3
+ 33.7 19.331562 35.829326 3.8091205E-3
+ 33.75 2.5222575 34.89685 0.0E+0
+ 33.75 2.5134057 34.90263 -2.1658198E-4
+ 33.75 2.5134866 34.906517 -4.184096E-4
+ 33.75 2.539019 34.91414 -4.3880403E-4
+ 33.75 2.5745501 34.918518 -4.027014E-4
+ 33.75 2.6336963 34.927082 -4.281477E-4
+ 33.75 2.729588 34.939697 -4.68091E-4
+ 33.75 2.8880267 34.95161 -6.044335E-4
+ 33.75 3.082357 34.96101 -8.647645E-4
+ 33.75 3.3303117 34.969657 -1.1928824E-3
+ 33.75 3.5631403 34.972454 -1.5189652E-3
+ 33.75 3.8205785 34.982402 -1.7218792E-3
+ 33.75 4.305886 35.036502 -1.823213E-3
+ 33.75 5.14255 35.152946 -2.048291E-3
+ 33.75 6.5690803 35.368083 -2.2987192E-3
+ 33.75 8.166906 35.60962 -2.4075298E-3
+ 33.75 9.2182 35.7169 -2.7406797E-3
+ 33.75 9.63561 35.66233 -3.2395364E-3
+ 33.75 9.872521 35.548057 -3.365296E-3
+ 33.75 10.212603 35.483436 -3.1782498E-3
+ 33.75 10.681125 35.488132 -2.9269647E-3
+ 33.75 11.156495 35.526687 -2.5029638E-3
+ 33.75 11.488515 35.558795 -1.975195E-3
+ 33.75 11.73325 35.58433 -1.4680962E-3
+ 33.75 11.930756 35.604793 -9.819065E-4
+ 33.75 12.092256 35.62304 -5.29948E-4
+ 33.75 12.232153 35.637943 -1.1492362E-4
+ 33.75 12.332101 35.646556 2.4052607E-4
+ 33.75 12.437522 35.658992 5.3389905E-4
+ 33.75 12.53209 35.669094 7.841114E-4
+ 33.75 12.606815 35.678554 1.0035927E-3
+ 33.75 12.67881 35.68603 1.2020984E-3
+ 33.75 12.736789 35.691963 1.3884533E-3
+ 33.75 12.784738 35.695777 1.5678675E-3
+ 33.75 12.826943 35.699264 1.7402229E-3
+ 33.75 12.879547 35.705707 1.8993868E-3
+ 33.75 12.916541 35.70968 2.043877E-3
+ 33.75 12.967333 35.71605 2.1783395E-3
+ 33.75 13.015775 35.721374 2.307948E-3
+ 33.75 13.08541 35.72984 2.431939E-3
+ 33.75 13.14204 35.735866 2.5456803E-3
+ 33.75 13.208949 35.744022 2.6542046E-3
+ 33.75 13.283589 35.750862 2.7630676E-3
+ 33.75 13.332165 35.755405 2.8683207E-3
+ 33.75 13.395148 35.760826 2.967529E-3
+ 33.75 13.471062 35.765766 3.0659954E-3
+ 33.75 13.53367 35.769645 3.162224E-3
+ 33.75 13.631572 35.77694 3.2517944E-3
+ 33.75 13.745529 35.783565 3.3289061E-3
+ 33.75 13.860111 35.78598 3.3957487E-3
+ 33.75 13.997582 35.789863 3.4538817E-3
+ 33.75 14.188096 35.795822 3.5124623E-3
+ 33.75 14.45354 35.803653 3.5746304E-3
+ 33.75 14.788796 35.807575 3.6219044E-3
+ 33.75 15.481462 35.8086 3.6958283E-3
+ 33.75 16.238771 35.821826 3.8184411E-3
+ 33.75 17.031431 35.83116 4.0023564E-3
+ 33.75 17.766764 35.83295 4.090356E-3
+ 33.75 18.515974 35.833908 3.985762E-3
+ 33.75 19.108 35.835594 3.8940352E-3
+ 33.75 19.396923 35.83116 3.9764703E-3
+ 33.75 19.439785 35.83327 4.2036846E-3
+ 33.75 19.4446 35.834243 4.466471E-3
+ 33.75 19.449047 35.83487 4.7354842E-3
+ 33.75 19.442617 35.828022 4.999304E-3
+ 33.75 19.356323 35.830776 5.399897E-3
+ 33.8 2.521389 34.896804 0.0E+0
+ 33.8 2.5126831 34.902656 -2.1306881E-4
+ 33.8 2.5129537 34.9065 -4.0735962E-4
+ 33.8 2.539057 34.914112 -4.2879357E-4
+ 33.8 2.5746235 34.918525 -3.9488796E-4
+ 33.8 2.6338093 34.927116 -4.192012E-4
+ 33.8 2.729298 34.939674 -4.4815623E-4
+ 33.8 2.887277 34.951625 -5.597638E-4
+ 33.8 3.0812504 34.961 -7.857227E-4
+ 33.8 3.3301892 34.96982 -1.0682921E-3
+ 33.8 3.5631694 34.97259 -1.3376698E-3
+ 33.8 3.8196287 34.982326 -1.479565E-3
+ 33.8 4.303478 35.036186 -1.5213133E-3
+ 33.8 5.142881 35.153213 -1.6850342E-3
+ 33.8 6.5687294 35.368103 -1.8724555E-3
+ 33.8 8.156528 35.60757 -1.8946598E-3
+ 33.8 9.220767 35.717876 -2.0944154E-3
+ 33.8 9.6337 35.66227 -2.444329E-3
+ 33.8 9.869267 35.547092 -2.4262482E-3
+ 33.8 10.211577 35.482864 -2.1104293E-3
+ 33.8 10.682066 35.487892 -1.7599785E-3
+ 33.8 11.160785 35.526763 -1.2613425E-3
+ 33.8 11.495118 35.559253 -6.77199E-4
+ 33.8 11.743253 35.585266 -1.2413399E-4
+ 33.8 11.941708 35.60572 4.0188527E-4
+ 33.8 12.105544 35.62427 8.8713114E-4
+ 33.8 12.246592 35.63929 1.3296799E-3
+ 33.8 12.345465 35.64771 1.7073428E-3
+ 33.8 12.450597 35.66014 2.0193164E-3
+ 33.8 12.545295 35.670276 2.2855515E-3
+ 33.8 12.620175 35.67978 2.5188818E-3
+ 33.8 12.69236 35.68723 2.7299167E-3
+ 33.8 12.750991 35.693222 2.9277936E-3
+ 33.8 12.800167 35.697185 3.1177995E-3
+ 33.8 12.842128 35.700527 3.3001606E-3
+ 33.8 12.894521 35.707 3.4688774E-3
+ 33.8 12.931099 35.710895 3.6225828E-3
+ 33.8 12.982074 35.717323 3.7658512E-3
+ 33.8 13.031004 35.7227 3.903775E-3
+ 33.8 13.10084 35.731292 4.0355436E-3
+ 33.8 13.15712 35.737392 4.15668E-3
+ 33.8 13.224651 35.745624 4.2723473E-3
+ 33.8 13.298685 35.752277 4.387833E-3
+ 33.8 13.347693 35.757064 4.4993767E-3
+ 33.8 13.411057 35.76267 4.604728E-3
+ 33.8 13.487342 35.767654 4.7087697E-3
+ 33.8 13.549328 35.77152 4.810079E-3
+ 33.8 13.646855 35.77888 4.9043153E-3
+ 33.8 13.75929 35.785583 4.9857795E-3
+ 33.8 13.873809 35.788047 5.056634E-3
+ 33.8 14.010032 35.792015 5.1180566E-3
+ 33.8 14.199924 35.79742 5.1793116E-3
+ 33.8 14.463745 35.805107 5.2425577E-3
+ 33.8 14.797262 35.809066 5.289771E-3
+ 33.8 15.494087 35.809654 5.360577E-3
+ 33.8 16.253828 35.82315 5.47614E-3
+ 33.8 17.051512 35.831851 5.6481463E-3
+ 33.8 17.765114 35.833915 5.7250116E-3
+ 33.8 18.509249 35.835613 5.6114397E-3
+ 33.8 19.111147 35.83764 5.5059893E-3
+ 33.8 19.415125 35.832614 5.5751707E-3
+ 33.8 19.46228 35.834613 5.7935253E-3
+ 33.8 19.467768 35.83558 6.0494695E-3
+ 33.8 19.472803 35.836338 6.3113505E-3
+ 33.8 19.464771 35.829292 6.5672956E-3
+ 33.8 19.38087 35.832317 6.9567803E-3
+ 33.85 2.5205218 34.89676 0.0E+0
+ 33.85 2.511963 34.90268 -2.0881435E-4
+ 33.85 2.5124537 34.906486 -3.9457817E-4
+ 33.85 2.5391123 34.91409 -4.171825E-4
+ 33.85 2.5747296 34.91854 -3.862866E-4
+ 33.85 2.6339836 34.92716 -4.1049427E-4
+ 33.85 2.7291047 34.93965 -4.2958254E-4
+ 33.85 2.88665 34.951637 -5.173487E-4
+ 33.85 3.0802955 34.960987 -7.0984993E-4
+ 33.85 3.3302175 34.96997 -9.483331E-4
+ 33.85 3.5632917 34.97271 -1.1630799E-3
+ 33.85 3.8187775 34.982234 -1.2480353E-3
+ 33.85 4.3012332 35.035861 -1.236076E-3
+ 33.85 5.143698 35.153514 -1.3436438E-3
+ 33.85 6.5696187 35.368297 -1.4730693E-3
+ 33.85 8.148011 35.605812 -1.4130337E-3
+ 33.85 9.223713 35.718795 -1.4794918E-3
+ 33.85 9.632421 35.662204 -1.678469E-3
+ 33.85 9.866625 35.546104 -1.5165315E-3
+ 33.85 10.211293 35.48232 -1.07303E-3
+ 33.85 10.683792 35.487716 -6.2411295E-4
+ 33.85 11.165788 35.526905 -5.2332656E-5
+ 33.85 11.502397 35.55977 5.860318E-4
+ 33.85 11.754065 35.586273 1.1832739E-3
+ 33.85 11.9536 35.606746 1.7476003E-3
+ 33.85 12.119802 35.625606 2.2647753E-3
+ 33.85 12.261975 35.640735 2.7336273E-3
+ 33.85 12.359775 35.648967 3.1325994E-3
+ 33.85 12.464583 35.661384 3.46256E-3
+ 33.85 12.559385 35.67155 3.7443495E-3
+ 33.85 12.634447 35.681102 3.991148E-3
+ 33.85 12.706827 35.688526 4.2143766E-3
+ 33.85 12.766099 35.69457 4.42344E-3
+ 33.85 12.816545 35.698696 4.623671E-3
+ 33.85 12.858328 35.7019 4.815656E-3
+ 33.85 12.910518 35.708404 4.9935844E-3
+ 33.85 12.946702 35.712223 5.1562134E-3
+ 33.85 12.997816 35.718696 5.308023E-3
+ 33.85 13.047236 35.72412 5.453996E-3
+ 33.85 13.117195 35.732837 5.593278E-3
+ 33.85 13.173135 35.739002 5.7215834E-3
+ 33.85 13.241238 35.74731 5.8441874E-3
+ 33.85 13.314612 35.753765 5.9660663E-3
+ 33.85 13.364064 35.758804 6.083667E-3
+ 33.85 13.427772 35.764583 6.1949472E-3
+ 33.85 13.504345 35.76962 6.3043534E-3
+ 33.85 13.565703 35.773464 6.4105493E-3
+ 33.85 13.662784 35.78089 6.509296E-3
+ 33.85 13.773752 35.78769 6.595038E-3
+ 33.85 13.888215 35.79022 6.6698896E-3
+ 33.85 14.023212 35.794292 6.7346724E-3
+ 33.85 14.212423 35.799144 6.7987E-3
+ 33.85 14.474305 35.806667 6.8630883E-3
+ 33.85 14.806124 35.810665 6.910394E-3
+ 33.85 15.506546 35.810817 6.9780047E-3
+ 33.85 16.26857 35.824577 7.085875E-3
+ 33.85 17.070484 35.832614 7.244717E-3
+ 33.85 17.763273 35.83497 7.309854E-3
+ 33.85 18.50203 35.837432 7.1883285E-3
+ 33.85 19.113478 35.83978 7.0707127E-3
+ 33.85 19.432817 35.834156 7.1276132E-3
+ 33.85 19.484537 35.83604 7.3373974E-3
+ 33.85 19.490707 35.837005 7.586576E-3
+ 33.85 19.49626 35.83789 7.841385E-3
+ 33.85 19.486662 35.83067 8.089584E-3
+ 33.85 19.405237 35.83396 8.468113E-3
+ 33.9 2.5196628 34.896717 0.0E+0
+ 33.9 2.51125 34.902694 -2.0383697E-4
+ 33.9 2.5119893 34.90648 -3.8015996E-4
+ 33.9 2.5391845 34.91407 -4.0404687E-4
+ 33.9 2.5748686 34.91856 -3.7693837E-4
+ 33.9 2.634218 34.927207 -4.020439E-4
+ 33.9 2.7290081 34.939632 -4.1241061E-4
+ 33.9 2.886148 34.951652 -4.7732822E-4
+ 33.9 3.0794963 34.960975 -6.3742784E-4
+ 33.9 3.3304073 34.97012 -8.3351763E-4
+ 33.9 3.5635313 34.972812 -9.960907E-4
+ 33.9 3.8180747 34.98213 -1.0287234E-3
+ 33.9 4.299225 35.03554 -9.695187E-4
+ 33.9 5.1450915 35.15387 -1.0267479E-3
+ 33.9 6.5718936 35.3687 -1.1037649E-3
+ 33.9 8.141531 35.604373 -9.66462E-4
+ 33.9 9.227098 35.71967 -9.00617E-4
+ 33.9 9.631826 35.662147 -9.476561E-4
+ 33.9 9.864646 35.54511 -6.4283784E-4
+ 33.9 10.21178 35.4818 -7.365859E-5
+ 33.9 10.686322 35.487606 4.7235967E-4
+ 33.9 11.171502 35.52711 1.1152576E-3
+ 33.9 11.510344 35.56035 1.8052385E-3
+ 33.9 11.765664 35.587356 2.4444935E-3
+ 33.9 11.966414 35.607875 3.0452825E-3
+ 33.9 12.135 35.627044 3.5927712E-3
+ 33.9 12.278271 35.642284 4.0865014E-3
+ 33.9 12.375021 35.65034 4.5057255E-3
+ 33.9 12.479474 35.662727 4.8529426E-3
+ 33.9 12.574356 35.672924 5.1497183E-3
+ 33.9 12.64963 35.68253 5.409525E-3
+ 33.9 12.722215 35.689922 5.644543E-3
+ 33.9 12.782115 35.69602 5.864392E-3
+ 33.9 12.833867 35.700317 6.0744215E-3
+ 33.9 12.875541 35.703392 6.2755923E-3
+ 33.9 12.927535 35.709922 6.4623346E-3
+ 33.9 12.96335 35.71366 6.6335406E-3
+ 33.9 13.014558 35.720176 6.793574E-3
+ 33.9 13.064467 35.72565 6.9472794E-3
+ 33.9 13.134472 35.73447 7.0937625E-3
+ 33.9 13.190085 35.740707 7.2289635E-3
+ 33.9 13.258705 35.749076 7.358249E-3
+ 33.9 13.331365 35.755332 7.4862474E-3
+ 33.9 13.381268 35.760627 7.6096295E-3
+ 33.9 13.445283 35.766574 7.726585E-3
+ 33.9 13.522058 35.77166 7.8411065E-3
+ 33.9 13.582789 35.775485 7.95196E-3
+ 33.9 13.679358 35.78298 8.05503E-3
+ 33.9 13.78892 35.789875 8.144944E-3
+ 33.9 13.903341 35.7925 8.223749E-3
+ 33.9 14.03715 35.796695 8.2919364E-3
+ 33.9 14.225625 35.801006 8.358811E-3
+ 33.9 14.48526 35.80834 8.42439E-3
+ 33.9 14.815431 35.812377 8.471931E-3
+ 33.9 15.518847 35.8121 8.536283E-3
+ 33.9 16.28296 35.826122 8.63587E-3
+ 33.9 17.08828 35.833465 8.780404E-3
+ 33.9 17.761328 35.836132 8.833333E-3
+ 33.9 18.494476 35.839374 8.704958E-3
+ 33.9 19.115135 35.842033 8.576839E-3
+ 33.9 19.45008 35.8358 8.62251E-3
+ 33.9 19.506605 35.83757 8.824045E-3
+ 33.9 19.513466 35.838535 9.06655E-3
+ 33.9 19.519457 35.83954 9.314369E-3
+ 33.9 19.508339 35.832172 9.5549775E-3
+ 33.9 19.429464 35.835716 9.922746E-3
+ 33.95 2.5188198 34.896682 0.0E+0
+ 33.95 2.510549 34.902702 -1.9815673E-4
+ 33.95 2.5115633 34.90647 -3.6420414E-4
+ 33.95 2.5392737 34.91406 -3.8946387E-4
+ 33.95 2.57504 34.918586 -3.6687892E-4
+ 33.95 2.6345114 34.92726 -3.938551E-4
+ 33.95 2.7290084 34.93962 -3.9666285E-4
+ 33.95 2.8857722 34.951667 -4.3981935E-4
+ 33.95 3.0788576 34.96097 -5.687083E-4
+ 33.95 3.3307685 34.970264 -7.2431424E-4
+ 33.95 3.5639116 34.972908 -8.375321E-4
+ 33.95 3.817571 34.982025 -8.2295614E-4
+ 33.95 4.297524 35.03524 -7.234966E-4
+ 33.95 5.147148 35.15429 -7.3675595E-4
+ 33.95 6.5756883 35.369335 -7.6745584E-4
+ 33.95 8.137241 35.60329 -5.5837264E-4
+ 33.95 9.230982 35.720512 -3.6207912E-4
+ 33.95 9.631971 35.662113 -2.5717541E-4
+ 33.95 9.863383 35.54412 1.8856642E-4
+ 33.95 10.213065 35.481327 8.8052212E-4
+ 33.95 10.689671 35.487567 1.5216273E-3
+ 33.95 11.177921 35.527393 2.2331008E-3
+ 33.95 11.518944 35.56099 2.9716677E-3
+ 33.95 11.778021 35.588512 3.6504147E-3
+ 33.95 11.980126 35.609107 4.2855143E-3
+ 33.95 12.151103 35.628585 4.861456E-3
+ 33.95 12.295445 35.64393 5.3784446E-3
+ 33.95 12.391185 35.65182 5.816719E-3
+ 33.95 12.495258 35.66417 6.1803492E-3
+ 33.95 12.5902 35.674396 6.491449E-3
+ 33.95 12.665723 35.684066 6.763726E-3
+ 33.95 12.738523 35.69143 7.0100636E-3
+ 33.95 12.799035 35.69757 7.240236E-3
+ 33.95 12.852122 35.70205 7.4595813E-3
+ 33.95 12.893758 35.70501 7.669445E-3
+ 33.95 12.945568 35.711566 7.864553E-3
+ 33.95 12.981039 35.715225 8.0439355E-3
+ 33.95 13.032295 35.721767 8.211825E-3
+ 33.95 13.082689 35.72729 8.3729E-3
+ 33.95 13.15266 35.736206 8.5262265E-3
+ 33.95 13.207962 35.742504 8.668003E-3
+ 33.95 13.277041 35.75093 8.8036675E-3
+ 33.95 13.348935 35.75699 8.937472E-3
+ 33.95 13.399292 35.762535 9.066321E-3
+ 33.95 13.463576 35.768642 9.188659E-3
+ 33.95 13.540469 35.773777 9.308012E-3
+ 33.95 13.600579 35.777584 9.423262E-3
+ 33.95 13.69657 35.78515 9.530438E-3
+ 33.95 13.804798 35.79215 9.624388E-3
+ 33.95 13.919195 35.79489 9.707073E-3
+ 33.95 14.051868 35.799236 9.778689E-3
+ 33.95 14.239555 35.803005 9.848461E-3
+ 33.95 14.496644 35.810127 9.915265E-3
+ 33.95 14.825228 35.814216 9.963176E-3
+ 33.95 15.531 35.81352 0.010024221
+ 33.95 16.296967 35.827796 0.010114991
+ 33.95 17.104843 35.834415 0.010244201
+ 33.95 17.759357 35.837413 0.01028456
+ 33.95 18.486757 35.841457 0.010150513
+ 33.95 19.116264 35.844402 0.010013647
+ 33.95 19.46699 35.837562 0.010049212
+ 33.95 19.52853 35.839214 0.010242846
+ 33.95 19.536085 35.84018 0.010478783
+ 33.95 19.542439 35.84129 0.010719714
+ 33.95 19.529856 35.833812 0.010952913
+ 33.95 19.453588 35.837593 0.011310153
+ 34.0 2.5180003 34.89665 0.0E+0
+ 34.0 2.5098655 34.902706 -1.9179501E-4
+ 34.0 2.5111784 34.906467 -3.4681305E-4
+ 34.0 2.5393798 34.914047 -3.735105E-4
+ 34.0 2.5752434 34.918613 -3.5613754E-4
+ 34.0 2.634863 34.927322 -3.8592022E-4
+ 34.0 2.7291052 34.939613 -3.823432E-4
+ 34.0 2.8855242 34.951686 -4.0491542E-4
+ 34.0 3.078383 34.96097 -5.039123E-4
+ 34.0 3.3313105 34.970413 -6.211453E-4
+ 34.0 3.5644557 34.972995 -6.88162E-4
+ 34.0 3.8173162 34.981933 -6.319419E-4
+ 34.0 4.296201 35.034973 -4.9968273E-4
+ 34.0 5.1499505 35.154792 -4.7583086E-4
+ 34.0 6.5811233 35.37023 -4.6673064E-4
+ 34.0 8.135275 35.602592 -1.9177498E-4
+ 34.0 9.2354145 35.721332 1.3229506E-4
+ 34.0 9.632903 35.66211 3.8815231E-4
+ 34.0 9.862884 35.543148 9.718999E-4
+ 34.0 10.215167 35.4809 1.7828627E-3
+ 34.0 10.693851 35.487606 2.5164124E-3
+ 34.0 11.185033 35.527744 3.293431E-3
+ 34.0 11.528179 35.5617 4.077156E-3
+ 34.0 11.791102 35.58974 4.792541E-3
+ 34.0 11.994702 35.61044 5.4595093E-3
+ 34.0 12.168069 35.63023 6.061812E-3
+ 34.0 12.313453 35.64567 6.600259E-3
+ 34.0 12.408244 35.65342 7.056244E-3
+ 34.0 12.511918 35.665718 7.4353385E-3
+ 34.0 12.606904 35.675971 7.7600106E-3
+ 34.0 12.682717 35.68572 8.044148E-3
+ 34.0 12.755747 35.693046 8.301273E-3
+ 34.0 12.816855 35.699234 8.541248E-3
+ 34.0 12.871294 35.7039 8.769374E-3
+ 34.0 12.912966 35.706756 8.9873895E-3
+ 34.0 12.964605 35.71334 9.190363E-3
+ 34.0 12.99976 35.716915 9.377475E-3
+ 34.0 13.051019 35.723476 9.552806E-3
+ 34.0 13.101889 35.72905 9.720843E-3
+ 34.0 13.171747 35.738044 9.880614E-3
+ 34.0 13.226755 35.744407 0.010028601
+ 34.0 13.296233 35.752872 0.010170302
+ 34.0 13.36731 35.758735 0.010309558
+ 34.0 13.418118 35.76453 0.010443526
+ 34.0 13.482633 35.770793 0.010570916
+ 34.0 13.559561 35.775974 0.010694787
+ 34.0 13.61906 35.779762 0.010814142
+ 34.0 13.714412 35.78739 0.010925179
+ 34.0 13.821384 35.794513 0.011023004
+ 34.0 13.935778 35.7974 0.01110947
+ 34.0 14.067388 35.80191 0.011184511
+ 34.0 14.254235 35.805156 0.011257209
+ 34.0 14.508493 35.812046 0.011325261
+ 34.0 14.835559 35.81619 0.011373668
+ 34.0 15.543018 35.81508 0.011431377
+ 34.0 16.310566 35.829612 0.011512863
+ 34.0 17.120129 35.83548 0.011625869
+ 34.0 17.757448 35.83883 0.011653421
+ 34.0 18.479044 35.843685 0.011514948
+ 34.0 19.117022 35.846904 0.011371168
+ 34.0 19.483624 35.83945 0.011397811
+ 34.0 19.550365 35.84099 0.011583919
+ 34.0 19.558607 35.84195 0.011813409
+ 34.0 19.565252 35.84316 0.01204757
+ 34.0 19.551268 35.8356 0.012273564
+ 34.0 19.477648 35.839607 0.012620545
+ 34.05 2.5172116 34.896625 0.0E+0
+ 34.05 2.5092041 34.902706 -1.847741E-4
+ 34.05 2.510837 34.90647 -3.2809053E-4
+ 34.05 2.5395026 34.91404 -3.5626222E-4
+ 34.05 2.5754785 34.91865 -3.447362E-4
+ 34.05 2.635271 34.92739 -3.7821874E-4
+ 34.05 2.7292976 34.93961 -3.6943683E-4
+ 34.05 2.8854048 34.95171 -3.726855E-4
+ 34.05 3.0780751 34.96098 -4.4322878E-4
+ 34.05 3.3320412 34.970561 -5.2438443E-4
+ 34.05 3.5651865 34.973087 -5.486609E-4
+ 34.05 3.81736 34.98186 -4.5675842E-4
+ 34.05 4.295325 35.03475 -2.9954934E-4
+ 34.05 5.153576 35.1554 -2.4586418E-4
+ 34.05 6.5883064 35.37141 -2.0382291E-4
+ 34.05 8.135741 35.602306 1.307694E-4
+ 34.05 9.240443 35.72214 5.7917257E-4
+ 34.05 9.634664 35.662143 9.840124E-4
+ 34.05 9.863193 35.542213 1.7019167E-3
+ 34.05 10.218102 35.48053 2.6272854E-3
+ 34.05 10.698864 35.48772 3.4500372E-3
+ 34.05 11.192821 35.528175 4.2891125E-3
+ 34.05 11.538026 35.562473 5.114206E-3
+ 34.05 11.804867 35.591037 5.8630653E-3
+ 34.05 12.010107 35.611873 6.5591926E-3
+ 34.05 12.185848 35.63197 7.1855522E-3
+ 34.05 12.332247 35.64751 7.743489E-3
+ 34.05 12.426169 35.655132 8.215721E-3
+ 34.05 12.529433 35.66737 8.609232E-3
+ 34.05 12.624452 35.67765 8.9466394E-3
+ 34.05 12.700601 35.68748 9.241962E-3
+ 34.05 12.773877 35.694782 9.509283E-3
+ 34.05 12.835564 35.70101 9.758487E-3
+ 34.05 12.891366 35.70587 9.994812E-3
+ 34.05 12.933146 35.708637 0.010220391
+ 34.05 12.98463 35.71525 0.010430687
+ 34.05 13.019498 35.718734 0.010625036
+ 34.05 13.070715 35.725307 0.010807348
+ 34.05 13.12205 35.730926 0.010981902
+ 34.05 13.191715 35.73999 0.011147676
+ 34.05 13.246449 35.74641 0.011301474
+ 34.05 13.316262 35.754913 0.011448827
+ 34.05 13.386473 35.76058 0.011593145
+ 34.05 13.437726 35.76662 0.011731852
+ 34.05 13.502431 35.773025 0.011863935
+ 34.05 13.579313 35.77826 0.011991977
+ 34.05 13.638218 35.782024 0.012115122
+ 34.05 13.732874 35.789722 0.012229752
+ 34.05 13.838676 35.796966 0.012331264
+ 34.05 13.953093 35.80003 0.012421386
+ 34.05 14.083723 35.804725 0.01249983
+ 34.05 14.269682 35.807464 0.012575462
+ 34.05 14.520839 35.814102 0.012644771
+ 34.05 14.846468 35.8183 0.012693793
+ 34.05 15.554916 35.816795 0.01274816
+ 34.05 16.32373 35.831577 0.012819969
+ 34.05 17.134106 35.83668 0.012916036
+ 34.05 17.755692 35.840396 0.012930675
+ 34.05 18.471508 35.84607 0.01278908
+ 34.05 19.11756 35.84954 0.012640287
+ 34.05 19.500061 35.841476 0.012659247
+ 34.05 19.572151 35.842903 0.012838227
+ 34.05 19.581076 35.843864 0.0130614
+ 34.05 19.587936 35.845157 0.013288926
+ 34.05 19.572626 35.837547 0.01350794
+ 34.05 19.501675 35.84177 0.01384496
+ 34.1 2.5164613 34.89661 0.0E+0
+ 34.1 2.50857 34.9027 -1.7711682E-4
+ 34.1 2.5105412 34.90648 -3.0814073E-4
+ 34.1 2.539642 34.91404 -3.3779162E-4
+ 34.1 2.5757443 34.918697 -3.3268873E-4
+ 34.1 2.6357343 34.927467 -3.7071676E-4
+ 34.1 2.7295854 34.939617 -3.579104E-4
+ 34.1 2.8854146 34.951732 -3.4317435E-4
+ 34.1 3.0779371 34.96099 -3.868141E-4
+ 34.1 3.332969 34.970714 -4.3435415E-4
+ 34.1 3.5661253 34.97318 -4.1962612E-4
+ 34.1 3.817751 34.981826 -2.983428E-4
+ 34.1 4.2949604 35.03459 -1.2435202E-4
+ 34.1 5.1580977 35.156124 -4.8453643E-5
+ 34.1 6.597332 35.3729 1.9413841E-5
+ 34.1 8.138728 35.60245 4.0716843E-4
+ 34.1 9.246111 35.722946 9.757381E-4
+ 34.1 9.637291 35.662235 1.526628E-3
+ 34.1 9.864351 35.541324 2.3739472E-3
+ 34.1 10.221883 35.480224 3.4083332E-3
+ 34.1 10.70471 35.487922 4.316478E-3
+ 34.1 11.201263 35.528686 5.2137002E-3
+ 34.1 11.548457 35.563316 6.076047E-3
+ 34.1 11.819271 35.592407 6.8549425E-3
+ 34.1 12.026294 35.61341 7.5772753E-3
+ 34.1 12.204386 35.63381 8.225193E-3
+ 34.1 12.351773 35.64944 8.8005E-3
+ 34.1 12.444928 35.65696 9.287399E-3
+ 34.1 12.547778 35.66913 9.694187E-3
+ 34.1 12.642822 35.67944 0.01004342
+ 34.1 12.719361 35.689365 0.010349189
+ 34.1 12.792901 35.696636 0.010626063
+ 34.1 12.855148 35.702907 0.010883875
+ 34.1 12.912314 35.707962 0.011127772
+ 34.1 12.954276 35.710655 0.011360288
+ 34.1 13.005623 35.71729 0.011577323
+ 34.1 13.040235 35.72069 0.011778374
+ 34.1 13.091366 35.727264 0.011967171
+ 34.1 13.143152 35.732933 0.012147756
+ 34.1 13.212544 35.742046 0.012319062
+ 34.1 13.267022 35.748523 0.012478232
+ 34.1 13.337106 35.757053 0.012630817
+ 34.1 13.406405 35.762523 0.012779779
+ 34.1 13.458091 35.768806 0.012922814
+ 34.1 13.522947 35.775344 0.013059201
+ 34.1 13.599703 35.780632 0.013191047
+ 34.1 13.658037 35.784374 0.013317643
+ 34.1 13.751943 35.79214 0.013435576
+ 34.1 13.856666 35.799514 0.013540566
+ 34.1 13.971135 35.80278 0.0136342
+ 34.1 14.100887 35.807682 0.013716003
+ 34.1 14.28591 35.809932 0.013794557
+ 34.1 14.533714 35.8163 0.013865124
+ 34.1 14.857993 35.82056 0.013914877
+ 34.1 15.566712 35.818672 0.013965919
+ 34.1 16.336445 35.8337 0.014027735
+ 34.1 17.146757 35.838024 0.014106286
+ 34.1 17.754173 35.84212 0.014108037
+ 34.1 18.464327 35.84862 0.013964675
+ 34.1 19.11804 35.852317 0.013812823
+ 34.1 19.516384 35.843654 0.013825381
+ 34.1 19.593937 35.84497 0.01399765
+ 34.1 19.60353 35.84593 0.014214648
+ 34.1 19.610535 35.847297 0.01443569
+ 34.1 19.59398 35.83967 0.014647969
+ 34.1 19.525705 35.84408 0.014975353
+ 34.15 2.5157566 34.896602 0.0E+0
+ 34.15 2.5079681 34.902687 -1.688463E-4
+ 34.15 2.5102934 34.906486 -2.8706656E-4
+ 34.15 2.539798 34.914043 -3.181673E-4
+ 34.15 2.5760402 34.918746 -3.2000016E-4
+ 34.15 2.6362512 34.92755 -3.6336702E-4
+ 34.15 2.7299666 34.93963 -3.4771216E-4
+ 34.15 2.8855533 34.951763 -3.1640238E-4
+ 34.15 3.0779707 34.96101 -3.347911E-4
+ 34.15 3.3341002 34.970874 -3.5132441E-4
+ 34.15 3.5672934 34.973285 -3.0156757E-4
+ 34.15 3.818536 34.98183 -1.574823E-4
+ 34.15 4.295171 35.034507 2.488448E-5
+ 34.15 5.1635823 35.15698 1.1511545E-4
+ 34.15 6.6082773 35.37471 2.0152621E-4
+ 34.15 8.144296 35.603046 6.3581432E-4
+ 34.15 9.252451 35.723762 1.3197093E-3
+ 34.15 9.640819 35.662384 2.012784E-3
+ 34.15 9.866396 35.5405 2.9839293E-3
+ 34.15 10.226513 35.479991 4.121209E-3
+ 34.15 10.711382 35.488212 5.1104086E-3
+ 34.15 11.210333 35.52928 6.061489E-3
+ 34.15 11.55944 35.564228 6.9566913E-3
+ 34.15 11.834264 35.593845 7.76194E-3
+ 34.15 12.043215 35.615043 8.507307E-3
+ 34.15 12.223621 35.63574 9.174113E-3
+ 34.15 12.371972 35.65146 9.764536E-3
+ 34.15 12.464482 35.658897 0.010264424
+ 34.15 12.566922 35.670997 0.01068327
+ 34.15 12.66199 35.681335 0.011043347
+ 34.15 12.738977 35.691371 0.01135877
+ 34.15 12.8128 35.698616 0.011644507
+ 34.15 12.87559 35.704925 0.011910259
+ 34.15 12.934112 35.710182 0.012161066
+ 34.15 12.976329 35.712814 0.012399856
+ 34.15 13.027558 35.71947 0.012623013
+ 34.15 13.061946 35.722785 0.012830196
+ 34.15 13.11295 35.729354 0.013024945
+ 34.15 13.165169 35.73507 0.013211045
+ 34.15 13.234208 35.744216 0.01338738
+ 34.15 13.288451 35.75075 0.013551453
+ 34.15 13.358739 35.759292 0.01370882
+ 34.15 13.427081 35.76457 0.013861979
+ 34.15 13.479185 35.771087 0.01400891
+ 34.15 13.544151 35.77775 0.01414919
+ 34.15 13.620708 35.783096 0.01428445
+ 34.15 13.678497 35.786815 0.014414138
+ 34.15 13.771603 35.794647 0.01453507
+ 34.15 13.875343 35.802154 0.014643311
+ 34.15 13.989897 35.805652 0.01474029
+ 34.15 14.118886 35.81078 0.014825392
+ 34.15 14.302928 35.812564 0.014906839
+ 34.15 14.547147 35.818645 0.014978659
+ 34.15 14.870172 35.822975 0.015029253
+ 34.15 15.578428 35.82072 0.015077016
+ 34.15 16.348694 35.83599 0.015128609
+ 34.15 17.158081 35.83953 0.015189228
+ 34.15 17.752987 35.84402 0.015178252
+ 34.15 18.45767 35.85134 0.015034521
+ 34.15 19.118624 35.85525 0.014881602
+ 34.15 19.532673 35.845996 0.014889075
+ 34.15 19.615759 35.8472 0.015055066
+ 34.15 19.626007 35.848155 0.015266042
+ 34.15 19.633087 35.849586 0.015480763
+ 34.15 19.615381 35.84197 0.015686566
+ 34.15 19.549774 35.84656 0.016004665
+ 34.2 2.5151038 34.896602 0.0E+0
+ 34.2 2.5074036 34.90267 -1.5998553E-4
+ 34.2 2.5100955 34.906505 -2.6496854E-4
+ 34.2 2.5399703 34.91405 -2.9745275E-4
+ 34.2 2.5763652 34.9188 -3.0666636E-4
+ 34.2 2.6368203 34.927642 -3.561091E-4
+ 34.2 2.7304406 34.939647 -3.3877234E-4
+ 34.2 2.8858208 34.951797 -2.9236567E-4
+ 34.2 3.0781774 34.96104 -2.8724927E-4
+ 34.2 3.335441 34.971046 -2.7551106E-4
+ 34.2 3.5687103 34.973403 -1.9490391E-4
+ 34.2 3.8197605 34.981895 -3.4806787E-5
+ 34.2 4.2960152 35.03451 1.4737766E-4
+ 34.2 5.1700906 35.157978 2.4388554E-4
+ 34.2 6.621206 35.376865 3.4147573E-4
+ 34.2 8.152482 35.6041 8.1559084E-4
+ 34.2 9.259496 35.724597 1.609344E-3
+ 34.2 9.645271 35.66261 2.4398413E-3
+ 34.2 9.86936 35.539752 3.5284305E-3
+ 34.2 10.231996 35.479835 4.7618024E-3
+ 34.2 10.718869 35.488586 5.827235E-3
+ 34.2 11.22 35.529953 6.8275486E-3
+ 34.2 11.570942 35.56521 7.7509712E-3
+ 34.2 11.849794 35.595344 8.578683E-3
+ 34.2 12.060812 35.616775 9.3437274E-3
+ 34.2 12.243487 35.637752 0.010026604
+ 34.2 12.392779 35.65356 0.010629779
+ 34.2 12.484788 35.660953 0.011140885
+ 34.2 12.586831 35.672973 0.0115705
+ 34.2 12.681927 35.683345 0.01194038
+ 34.2 12.759427 35.6935 0.012264616
+ 34.2 12.833555 35.700725 0.012558484
+ 34.2 12.896868 35.70707 0.012831475
+ 34.2 12.95673 35.712532 0.013088497
+ 34.2 12.999274 35.71512 0.01333287
+ 34.2 13.050407 35.721797 0.013561501
+ 34.2 13.084603 35.725025 0.013774215
+ 34.2 13.13544 35.731575 0.013974352
+ 34.2 13.18807 35.737335 0.014165424
+ 34.2 13.256678 35.746505 0.014346259
+ 34.2 13.310708 35.75309 0.014514741
+ 34.2 13.38113 35.76164 0.014676412
+ 34.2 13.448476 35.766723 0.0148333
+ 34.2 13.500978 35.77347 0.014983675
+ 34.2 13.566015 35.780246 0.015127417
+ 34.2 13.6423 35.785652 0.015265686
+ 34.2 13.699577 35.789352 0.015398095
+ 34.2 13.79184 35.797245 0.015521707
+ 34.2 13.894693 35.80489 0.015632955
+ 34.2 14.00937 35.80865 0.015733099
+ 34.2 14.137723 35.814022 0.015821425
+ 34.2 14.32074 35.815364 0.01590572
+ 34.2 14.561165 35.82115 0.015978782
+ 34.2 14.883039 35.825553 0.016030326
+ 34.2 15.590086 35.822952 0.016074887
+ 34.2 16.360472 35.838455 0.016116118
+ 34.2 17.16809 35.84121 0.016158558
+ 34.2 17.752222 35.8461 0.016135152
+ 34.2 18.451721 35.854236 0.015992487
+ 34.2 19.119473 35.858337 0.015840514
+ 34.2 19.549006 35.84851 0.01584424
+ 34.2 19.637663 35.8496 0.016004402
+ 34.2 19.648544 35.85055 0.016209517
+ 34.2 19.655638 35.85203 0.016418096
+ 34.2 19.636875 35.844455 0.016617697
+ 34.2 19.573912 35.84921 0.016926877
+ 34.25 2.51451 34.896614 0.0E+0
+ 34.25 2.506881 34.902652 -1.5055719E-4
+ 34.25 2.5099494 34.906524 -2.4194377E-4
+ 34.25 2.540159 34.914062 -2.7570556E-4
+ 34.25 2.576718 34.918865 -2.9267344E-4
+ 34.25 2.6374394 34.927745 -3.4886968E-4
+ 34.25 2.7310054 34.939674 -3.3100394E-4
+ 34.25 2.8862166 34.95184 -2.7103658E-4
+ 34.25 3.078558 34.961082 -2.4424446E-4
+ 34.25 3.3369963 34.97123 -2.0707506E-4
+ 34.25 3.5703945 34.97354 -9.9959834E-5
+ 34.25 3.8214671 34.98202 6.921691E-5
+ 34.25 4.2975482 35.03462 2.4259595E-4
+ 34.25 5.1776752 35.15914 3.3723795E-4
+ 34.25 6.6361637 35.37938 4.3864833E-4
+ 34.25 8.163303 35.60563 9.458738E-4
+ 34.25 9.267266 35.72546 1.8434391E-3
+ 34.25 9.650672 35.662914 2.8057433E-3
+ 34.25 9.873272 35.5391 4.004662E-3
+ 34.25 10.238327 35.479766 5.326713E-3
+ 34.25 10.727155 35.489055 6.463119E-3
+ 34.25 11.230229 35.530712 7.507753E-3
+ 34.25 11.582923 35.566257 8.454573E-3
+ 34.25 11.865801 35.59691 9.300692E-3
+ 34.25 12.079027 35.618595 0.010081901
+ 34.25 12.263915 35.639854 0.010777908
+ 34.25 12.414126 35.655742 0.011391374
+ 34.25 12.5058 35.66312 0.011911861
+ 34.25 12.607468 35.67506 0.012350895
+ 34.25 12.702601 35.685462 0.012729486
+ 34.25 12.780683 35.69575 0.013061653
+ 34.25 12.855139 35.702964 0.013362884
+ 34.25 12.918958 35.709342 0.013642379
+ 34.25 12.980135 35.715007 0.013904896
+ 34.25 13.023075 35.717567 0.01415414
+ 34.25 13.074136 35.72427 0.014387573
+ 34.25 13.108173 35.72741 0.014605191
+ 34.25 13.158806 35.733936 0.014810128
+ 34.25 13.211823 35.73974 0.015005609
+ 34.25 13.279923 35.74892 0.015190394
+ 34.25 13.333759 35.75555 0.01536277
+ 34.25 13.404248 35.764095 0.015528245
+ 34.25 13.47056 35.768993 0.015688377
+ 34.25 13.523435 35.775955 0.01584173
+ 34.25 13.588505 35.782833 0.015988488
+ 34.25 13.66445 35.7883 0.01612935
+ 34.25 13.721253 35.791984 0.0162641
+ 34.25 13.812633 35.79994 0.016390065
+ 34.25 13.914701 35.807723 0.016504068
+ 34.25 14.029541 35.811775 0.01660718
+ 34.25 14.157397 35.817405 0.01669864
+ 34.25 14.339347 35.81834 0.016785724
+ 34.25 14.575794 35.823814 0.016860016
+ 34.25 14.896626 35.828296 0.016912622
+ 34.25 15.601713 35.825366 0.01695409
+ 34.25 16.371778 35.8411 0.016984915
+ 34.25 17.176807 35.84307 0.017009104
+ 34.25 17.751978 35.84837 0.0169737
+ 34.25 18.446646 35.85732 0.016833557
+ 34.25 19.120749 35.861587 0.016684553
+ 34.25 19.565462 35.851203 0.01668589
+ 34.25 19.659681 35.852184 0.016840681
+ 34.25 19.671177 35.85313 0.017040107
+ 34.25 19.67822 35.854644 0.017242728
+ 34.25 19.65851 35.847137 0.01743641
+ 34.25 19.598146 35.85203 0.01773706
+ 34.3 2.5139808 34.896633 0.0E+0
+ 34.3 2.5064046 34.902626 -1.4058332E-4
+ 34.3 2.509856 34.906547 -2.1808465E-4
+ 34.3 2.540364 34.91408 -2.5297657E-4
+ 34.3 2.577098 34.918937 -2.7799798E-4
+ 34.3 2.6381072 34.927852 -3.4156284E-4
+ 34.3 2.7316591 34.939712 -3.2430342E-4
+ 34.3 2.8867394 34.951885 -2.5236423E-4
+ 34.3 3.0791122 34.961135 -2.0579921E-4
+ 34.3 3.338769 34.971424 -1.4612213E-4
+ 34.3 3.5723624 34.97371 -1.6963912E-5
+ 34.3 3.8236961 34.982223 1.5428932E-4
+ 34.3 4.299821 35.034843 3.102648E-4
+ 34.3 5.1863832 35.160476 3.949002E-4
+ 34.3 6.6531825 35.382263 4.92858E-4
+ 34.3 8.176747 35.60763 1.0265254E-3
+ 34.3 9.275782 35.72636 2.0213236E-3
+ 34.3 9.657036 35.66331 3.109015E-3
+ 34.3 9.878155 35.53856 4.4104806E-3
+ 34.3 10.245498 35.47979 5.8132563E-3
+ 34.3 10.736216 35.489616 7.014991E-3
+ 34.3 11.24098 35.53155 8.098797E-3
+ 34.3 11.595342 35.567375 9.064055E-3
+ 34.3 11.882225 35.598533 9.924396E-3
+ 34.3 12.097793 35.620506 0.010718138
+ 34.3 12.28483 35.642032 0.011424242
+ 34.3 12.435943 35.657997 0.01204547
+ 34.3 12.527466 35.665393 0.012573441
+ 34.3 12.628791 35.677253 0.013020496
+ 34.3 12.723976 35.6877 0.013406666
+ 34.3 12.802714 35.69813 0.013745848
+ 34.3 12.877525 35.705333 0.014053648
+ 34.3 12.94183 35.71175 0.014338888
+ 34.3 13.00429 35.71762 0.01460616
+ 34.3 13.047692 35.720165 0.014859543
+ 34.3 13.098707 35.726886 0.01509709
+ 34.3 13.132619 35.729942 0.015318966
+ 34.3 13.183015 35.736434 0.015528097
+ 34.3 13.236391 35.742282 0.015727403
+ 34.3 13.303908 35.751457 0.015915576
+ 34.3 13.357569 35.75813 0.016091311
+ 34.3 13.428054 35.76666 0.016260076
+ 34.3 13.493301 35.771377 0.016422953
+ 34.3 13.54652 35.778545 0.016578812
+ 34.3 13.611586 35.785514 0.016728131
+ 34.3 13.68713 35.791046 0.016871164
+ 34.3 13.743499 35.794715 0.017007867
+ 34.3 13.833963 35.802726 0.017135853
+ 34.3 13.935348 35.810653 0.01725235
+ 34.3 14.050393 35.815025 0.017358229
+ 34.3 14.177903 35.820934 0.017452722
+ 34.3 14.358747 35.82149 0.017542532
+ 34.3 14.591058 35.826644 0.017618036
+ 34.3 14.910962 35.83122 0.017671822
+ 34.3 15.61334 35.827976 0.017710345
+ 34.3 16.382616 35.843925 0.017730817
+ 34.3 17.184275 35.845123 0.017736856
+ 34.3 17.75234 35.85084 0.017690025
+ 34.3 18.442617 35.86058 0.017553875
+ 34.3 19.122612 35.865005 0.017409855
+ 34.3 19.58212 35.854087 0.017410163
+ 34.3 19.681856 35.854957 0.017560054
+ 34.3 19.693933 35.855895 0.017753964
+ 34.3 19.700874 35.857433 0.017950827
+ 34.3 19.680325 35.85002 0.018138885
+ 34.3 19.622507 35.855037 0.018431403
+ 34.35 2.5135223 34.896663 0.0E+0
+ 34.35 2.5059788 34.9026 -1.3008526E-4
+ 34.35 2.509817 34.906578 -1.9347818E-4
+ 34.35 2.540585 34.914104 -2.2930944E-4
+ 34.35 2.577503 34.919017 -2.626068E-4
+ 34.35 2.6388211 34.92797 -3.3409104E-4
+ 34.35 2.7323992 34.939754 -3.185517E-4
+ 34.35 2.8873875 34.95194 -2.3627534E-4
+ 34.35 3.0798394 34.961196 -1.7190333E-4
+ 34.35 3.340762 34.97164 -9.2702735E-5
+ 34.35 3.5746288 34.973903 5.39523E-5
+ 34.35 3.8264846 34.982513 2.2028058E-4
+ 34.35 4.3028793 35.03519 3.5036946E-4
+ 34.35 5.196253 35.161994 4.1694883E-4
+ 34.35 6.672276 35.38553 5.0434534E-4
+ 34.35 8.192781 35.610107 1.0578821E-3
+ 34.35 9.285052 35.72731 2.1428447E-3
+ 34.35 9.664372 35.66381 3.3487554E-3
+ 34.35 9.884028 35.53814 4.744391E-3
+ 34.35 10.253496 35.47991 6.2194694E-3
+ 34.35 10.746027 35.49027 7.480556E-3
+ 34.35 11.252212 35.532474 8.598205E-3
+ 34.35 11.608156 35.56856 9.576854E-3
+ 34.35 11.899002 35.60021 0.010447153
+ 34.35 12.117041 35.6225 0.011249711
+ 34.35 12.306154 35.64428 0.011962812
+ 34.35 12.458153 35.660324 0.012589225
+ 34.35 12.549731 35.667778 0.013122746
+ 34.35 12.650754 35.679553 0.013576387
+ 34.35 12.746013 35.69004 0.013968971
+ 34.35 12.825488 35.700637 0.01431423
+ 34.35 12.900679 35.707836 0.014627781
+ 34.35 12.965452 35.71429 0.014917989
+ 34.35 13.029155 35.720363 0.015189265
+ 34.35 13.073084 35.72291 0.015446047
+ 34.35 13.124079 35.729656 0.015687007
+ 34.35 13.157899 35.732624 0.01591248
+ 34.35 13.20803 35.73908 0.016125182
+ 34.35 13.261733 35.74497 0.01632772
+ 34.35 13.328594 35.75412 0.01651871
+ 34.35 13.3821 35.76083 0.016697265
+ 34.35 13.452512 35.769332 0.016868792
+ 34.35 13.516665 35.773876 0.01703391
+ 34.35 13.570196 35.78124 0.017191794
+ 34.35 13.635221 35.788295 0.017343218
+ 34.35 13.710306 35.79389 0.017487995
+ 34.35 13.766289 35.79755 0.017626267
+ 34.35 13.85581 35.805614 0.017755944
+ 34.35 13.956612 35.813682 0.01787467
+ 34.35 14.071909 35.8184 0.017983107
+ 34.35 14.199233 35.824604 0.018080525
+ 34.35 14.378932 35.82482 0.018172981
+ 34.35 14.606979 35.829647 0.018249694
+ 34.35 14.926074 35.834312 0.018304776
+ 34.35 15.625 35.830787 0.018340537
+ 34.35 16.393002 35.846942 0.018350817
+ 34.35 17.190548 35.84738 0.018338988
+ 34.35 17.753407 35.85352 0.018281432
+ 34.35 18.439798 35.864032 0.018150756
+ 34.35 19.125217 35.868587 0.018013716
+ 34.35 19.599052 35.857166 0.018014343
+ 34.35 19.704214 35.857925 0.018159807
+ 34.35 19.716848 35.858856 0.01834839
+ 34.35 19.723637 35.8604 0.018539703
+ 34.35 19.702362 35.85312 0.018722434
+ 34.35 19.647024 35.858234 0.019007225
+ 34.4 2.5131392 34.8967 0.0E+0
+ 34.4 2.5056078 34.90257 -1.1908337E-4
+ 34.4 2.509833 34.906612 -1.6820515E-4
+ 34.4 2.540822 34.91413 -2.0474014E-4
+ 34.4 2.577932 34.9191 -2.464574E-4
+ 34.4 2.639579 34.928096 -3.2634573E-4
+ 34.4 2.7332234 34.93981 -3.1361542E-4
+ 34.4 2.8881587 34.952 -2.226753E-4
+ 34.4 3.080738 34.961273 -1.4251463E-4
+ 34.4 3.3429758 34.97187 -4.6812747E-5
+ 34.4 3.5772068 34.974132 1.1275445E-4
+ 34.4 3.829866 34.982902 2.6723102E-4
+ 34.4 4.306763 35.03568 3.6315523E-4
+ 34.4 5.2073154 35.163707 4.038082E-4
+ 34.4 6.6934413 35.389175 4.7377072E-4
+ 34.4 8.211351 35.613056 1.0407378E-3
+ 34.4 9.295083 35.72831 2.208349E-3
+ 34.4 9.672685 35.664413 3.5246235E-3
+ 34.4 9.890906 35.53786 5.0055324E-3
+ 34.4 10.262303 35.480136 6.544103E-3
+ 34.4 10.756556 35.491016 7.858294E-3
+ 34.4 11.263879 35.533477 9.004327E-3
+ 34.4 11.621316 35.56981 9.991294E-3
+ 34.4 11.916067 35.601936 0.010867246
+ 34.4 12.136701 35.624572 0.011674855
+ 34.4 12.327807 35.64659 0.012391818
+ 34.4 12.480681 35.662715 0.013020816
+ 34.4 12.572538 35.670265 0.013557931
+ 34.4 12.673309 35.681957 0.0140167
+ 34.4 12.768671 35.692497 0.014414512
+ 34.4 12.848965 35.703266 0.014764891
+ 34.4 12.924565 35.710472 0.015083363
+ 34.4 12.989791 35.71697 0.01537775
+ 34.4 13.054688 35.723243 0.015652273
+ 34.4 13.099204 35.725807 0.01591171
+ 34.4 13.150206 35.73257 0.016155377
+ 34.4 13.183969 35.735454 0.01638378
+ 34.4 13.233809 35.741863 0.016599424
+ 34.4 13.287807 35.747795 0.016804596
+ 34.4 13.353941 35.756912 0.016997823
+ 34.4 13.40731 35.763656 0.017178651
+ 34.4 13.477578 35.77212 0.01735241
+ 34.4 13.540614 35.776496 0.017519264
+ 34.4 13.594423 35.784042 0.017678699
+ 34.4 13.659373 35.79117 0.017831767
+ 34.4 13.733948 35.796836 0.01797787
+ 34.4 13.789595 35.800487 0.018117327
+ 34.4 13.87815 35.8086 0.01824837
+ 34.4 13.978471 35.81681 0.018369058
+ 34.4 14.094068 35.821903 0.018479845
+ 34.4 14.221374 35.828414 0.018580077
+ 34.4 14.399892 35.828323 0.018675098
+ 34.4 14.623575 35.832824 0.018753016
+ 34.4 14.941986 35.83759 0.018809523
+ 34.4 15.636729 35.8338 0.01884275
+ 34.4 16.402952 35.85015 0.0188431
+ 34.4 17.195692 35.849853 0.018813863
+ 34.4 17.755266 35.85641 0.018746411
+ 34.4 18.438349 35.867675 0.018622685
+ 34.4 19.128721 35.872344 0.01849458
+ 34.4 19.616335 35.86045 0.01849687
+ 34.4 19.726793 35.861095 0.018638382
+ 34.4 19.739946 35.86202 0.018821832
+ 34.4 19.746538 35.863555 0.019007806
+ 34.4 19.724663 35.856422 0.019185513
+ 34.4 19.671719 35.861618 0.019462988
+ 34.45 2.5128364 34.896755 0.0E+0
+ 34.45 2.5052947 34.902534 -1.0759702E-4
+ 34.45 2.5099046 34.90665 -1.4233954E-4
+ 34.45 2.5410742 34.914165 -1.792968E-4
+ 34.45 2.5783824 34.919193 -2.2949837E-4
+ 34.45 2.6403784 34.92823 -3.1820856E-4
+ 34.45 2.7341284 34.939872 -3.0934825E-4
+ 34.45 2.8890504 34.95207 -2.1144927E-4
+ 34.45 3.081806 34.96137 -1.1756001E-4
+ 34.45 3.3454108 34.972126 -8.394308E-6
+ 34.45 3.5801072 34.974403 1.5950459E-4
+ 34.45 3.83387 34.98339 2.9534983E-4
+ 34.45 4.311509 35.03631 3.4912425E-4
+ 34.45 5.219593 35.165626 3.5624505E-4
+ 34.45 6.716661 35.393207 4.0220213E-4
+ 34.45 8.23238 35.616466 9.7632216E-4
+ 34.45 9.305874 35.729373 2.2186588E-3
+ 34.45 9.681972 35.665134 3.6368202E-3
+ 34.45 9.898796 35.53773 5.193666E-3
+ 34.45 10.271899 35.480472 6.786611E-3
+ 34.45 10.76777 35.491855 8.147443E-3
+ 34.45 11.275934 35.534557 9.316332E-3
+ 34.45 11.634777 35.571125 0.010306568
+ 34.45 11.933352 35.60371 0.011183876
+ 34.45 12.156696 35.62672 0.011992763
+ 34.45 12.349707 35.648963 0.012710449
+ 34.45 12.503448 35.66516 0.013339433
+ 34.45 12.595825 35.67285 0.01387818
+ 34.45 12.696405 35.684467 0.014340608
+ 34.45 12.791905 35.695064 0.014742454
+ 34.45 12.873107 35.706024 0.015096988
+ 34.45 12.949145 35.713245 0.015419541
+ 34.45 13.014806 35.71978 0.015717315
+ 34.45 13.080843 35.726253 0.015994327
+ 34.45 13.126002 35.72885 0.016255679
+ 34.45 13.177042 35.735633 0.01650135
+ 34.45 13.210781 35.73844 0.016732017
+ 34.45 13.26031 35.744792 0.016949967
+ 34.45 13.314566 35.750762 0.017157173
+ 34.45 13.379906 35.75983 0.017352067
+ 34.45 13.433155 35.766605 0.01753462
+ 34.45 13.503211 35.77503 0.017710077
+ 34.45 13.565112 35.77924 0.01787817
+ 34.45 13.61916 35.78695 0.018038683
+ 34.45 13.684003 35.79414 0.018192947
+ 34.45 13.758022 35.799884 0.018339962
+ 34.45 13.813388 35.80353 0.018480236
+ 34.45 13.900963 35.81169 0.018612325
+ 34.45 14.0009 35.820037 0.018734721
+ 34.45 14.116847 35.825527 0.018847644
+ 34.45 14.244311 35.83236 0.018950578
+ 34.45 14.421614 35.832004 0.019048084
+ 34.45 14.640867 35.836177 0.01912721
+ 34.45 14.958721 35.841045 0.019185282
+ 34.45 15.648566 35.837024 0.019216243
+ 34.45 16.412497 35.853553 0.019207032
+ 34.45 17.199795 35.85254 0.019161027
+ 34.45 17.758013 35.859516 0.019084634
+ 34.45 18.438423 35.871501 0.018969322
+ 34.45 19.133268 35.876274 0.018852055
+ 34.45 19.634033 35.86394 0.018857317
+ 34.45 19.749617 35.864475 0.01899536
+ 34.45 19.76326 35.865383 0.019173874
+ 34.45 19.769617 35.866905 0.019354733
+ 34.45 19.747261 35.859947 0.019527724
+ 34.45 19.696615 35.8652 0.019798294
+ 34.5 2.5126175 34.896812 0.0E+0
+ 34.5 2.5050432 34.9025 -9.564448E-5
+ 34.5 2.5100321 34.906692 -1.1594811E-4
+ 34.5 2.5413417 34.914203 -1.5299967E-4
+ 34.5 2.5788533 34.919292 -2.1167002E-4
+ 34.5 2.641217 34.92837 -3.0955244E-4
+ 34.5 2.7351112 34.939945 -3.055923E-4
+ 34.5 2.89006 34.952144 -2.0246363E-4
+ 34.5 3.0830397 34.96147 -9.6936673E-5
+ 34.5 3.348065 34.9724 2.2662673E-5
+ 34.5 3.5833382 34.974716 1.9435944E-4
+ 34.5 3.8385221 34.983993 3.0501198E-4
+ 34.5 4.317146 35.0371 3.090295E-4
+ 34.5 5.2331004 35.167755 2.753588E-4
+ 34.5 6.7419 35.397632 2.9109866E-4
+ 34.5 8.255771 35.62033 8.6627405E-4
+ 34.5 9.317415 35.730506 2.1750454E-3
+ 34.5 9.692225 35.665973 3.6860648E-3
+ 34.5 9.9077014 35.537765 5.3091533E-3
+ 34.5 10.282258 35.48092 6.9471304E-3
+ 34.5 10.779628 35.492782 8.347988E-3
+ 34.5 11.288327 35.53572 9.534193E-3
+ 34.5 11.648488 35.5725 0.010522728
+ 34.5 11.950788 35.60553 0.01139715
+ 34.5 12.176951 35.628936 0.01220357
+ 34.5 12.371771 35.651386 0.012918864
+ 34.5 12.526374 35.66766 0.013545264
+ 34.5 12.619529 35.675533 0.014083695
+ 34.5 12.719988 35.687076 0.014548316
+ 34.5 12.815666 35.697742 0.014952999
+ 34.5 12.89787 35.708904 0.015310724
+ 34.5 12.974376 35.71615 0.01563652
+ 34.5 13.040457 35.72273 0.01593689
+ 34.5 13.107573 35.729393 0.016215643
+ 34.5 13.153428 35.73204 0.01647818
+ 34.5 13.204535 35.738842 0.01672516
+ 34.5 13.238285 35.741573 0.01695742
+ 34.5 13.287487 35.747867 0.017177053
+ 34.5 13.341962 35.753875 0.017385699
+ 34.5 13.406445 35.762882 0.017581692
+ 34.5 13.459589 35.76968 0.01776543
+ 34.5 13.529364 35.778045 0.017942062
+ 34.5 13.590119 35.7821 0.018110901
+ 34.5 13.644363 35.789962 0.018272035
+ 34.5 13.70907 35.797206 0.018427057
+ 34.5 13.782495 35.80303 0.018574586
+ 34.5 13.837638 35.80668 0.01871532
+ 34.5 13.924224 35.814884 0.018848155
+ 34.5 14.023874 35.823356 0.018972006
+ 34.5 14.140221 35.829277 0.019086864
+ 34.5 14.268024 35.83644 0.019192385
+ 34.5 14.444082 35.83586 0.019292293
+ 34.5 14.658868 35.839706 0.019372646
+ 34.5 14.976296 35.844692 0.019432437
+ 34.5 15.660555 35.840454 0.019461444
+ 34.5 16.42167 35.857147 0.019443152
+ 34.5 17.20295 35.85545 0.01938119
+ 34.5 17.761732 35.862842 0.01929693
+ 34.5 18.440165 35.875522 0.01919147
+ 34.5 19.139002 35.88038 0.019086884
+ 34.5 19.652218 35.867645 0.019096395
+ 34.5 19.772715 35.868064 0.019231442
+ 34.5 19.786806 35.868957 0.019405229
+ 34.5 19.7929 35.87045 0.019581199
+ 34.5 19.77019 35.86369 0.019749777
+ 34.5 19.721733 35.86898 0.020013856
+ 34.55 2.512486 34.896884 0.0E+0
+ 34.55 2.5048553 34.902465 -8.324298E-5
+ 34.55 2.5102152 34.90674 -8.9090084E-5
+ 34.55 2.5416238 34.914245 -1.2586142E-4
+ 34.55 2.579342 34.9194 -1.9290527E-4
+ 34.55 2.6420917 34.92852 -3.0024314E-4
+ 34.55 2.736168 34.94003 -3.0217997E-4
+ 34.55 2.8911833 34.952232 -1.9556758E-4
+ 34.55 3.0844357 34.961593 -8.0513724E-5
+ 34.55 3.3509354 34.972702 4.6518642E-5
+ 34.55 3.586906 34.975074 2.1756777E-4
+ 34.55 3.843844 34.98472 2.967532E-4
+ 34.55 4.3236975 35.038055 2.4386607E-4
+ 34.55 5.2478423 35.1701 1.6256786E-4
+ 34.55 6.769109 35.40244 1.4228922E-4
+ 34.55 8.281405 35.62463 7.126137E-4
+ 34.55 9.329697 35.731712 2.0792E-3
+ 34.55 9.703432 35.666942 3.6735695E-3
+ 34.55 9.917621 35.537975 5.3529315E-3
+ 34.55 10.29335 35.481483 7.0264595E-3
+ 34.55 10.792089 35.4938 8.460637E-3
+ 34.55 11.301006 35.536952 9.658663E-3
+ 34.55 11.662399 35.573932 0.010640662
+ 34.55 11.968309 35.607383 0.011508053
+ 34.55 12.197387 35.63121 0.01230833
+ 34.55 12.393916 35.65385 0.013018175
+ 34.55 12.549379 35.6702 0.01363947
+ 34.55 12.643586 35.678302 0.01417567
+ 34.55 12.744004 35.68978 0.014641031
+ 34.55 12.839907 35.700523 0.015047366
+ 34.55 12.923208 35.711902 0.015407328
+ 34.55 13.000212 35.719184 0.015735535
+ 34.55 13.066701 35.72581 0.016037723
+ 34.55 13.134829 35.732662 0.016317481
+ 34.55 13.181426 35.735374 0.016580489
+ 34.55 13.232633 35.7422 0.016828094
+ 34.55 13.266426 35.744857 0.017061295
+ 34.55 13.315291 35.751087 0.017281989
+ 34.55 13.369947 35.75713 0.017491493
+ 34.55 13.433512 35.766063 0.017688034
+ 34.55 13.486563 35.77288 0.017872432
+ 34.55 13.555993 35.781177 0.018049723
+ 34.55 13.615595 35.785087 0.018218832
+ 34.55 13.669992 35.793083 0.01838015
+ 34.55 13.734535 35.800373 0.018535506
+ 34.55 13.807335 35.80628 0.01868317
+ 34.55 13.862316 35.809936 0.018824028
+ 34.55 13.947911 35.818176 0.01895732
+ 34.55 14.047365 35.82678 0.01908239
+ 34.55 14.164166 35.83314 0.01919899
+ 34.55 14.292492 35.840652 0.01930699
+ 34.55 14.467277 35.83989 0.019409226
+ 34.55 14.677595 35.84342 0.019490834
+ 34.55 14.994731 35.848522 0.019552507
+ 34.55 15.672742 35.844097 0.019579919
+ 34.55 16.430517 35.860935 0.019553136
+ 34.55 17.205267 35.85859 0.0194762
+ 34.55 17.766514 35.86639 0.019385258
+ 34.55 18.443708 35.879726 0.019291058
+ 34.55 19.146055 35.884654 0.019200914
+ 34.55 19.67095 35.87157 0.019215908
+ 34.55 19.796108 35.87187 0.019348431
+ 34.55 19.810614 35.872745 0.019517705
+ 34.55 19.816422 35.874195 0.019689016
+ 34.55 19.793484 35.867656 0.01985349
+ 34.55 19.747097 35.872962 0.020111479
+ 34.6 2.5124444 34.896965 0.0E+0
+ 34.6 2.504734 34.902427 -7.040869E-5
+ 34.6 2.510454 34.906787 -6.1817074E-5
+ 34.6 2.54192 34.91429 -9.788736E-5
+ 34.6 2.5798463 34.91951 -1.7313063E-4
+ 34.6 2.643 34.92868 -2.9014068E-4
+ 34.6 2.7372944 34.940124 -2.9893562E-4
+ 34.6 2.8924164 34.952323 -1.9059482E-4
+ 34.6 3.0859892 34.96173 -6.81338E-5
+ 34.6 3.3540174 34.973026 6.338215E-5
+ 34.6 3.590814 34.975486 2.294669E-4
+ 34.6 3.8498513 34.985572 2.712633E-4
+ 34.6 4.331181 35.039184 1.5485915E-4
+ 34.6 5.2638173 35.172676 1.9592453E-5
+ 34.6 6.7982215 35.407627 -4.2052604E-5
+ 34.6 8.309154 35.629344 5.177104E-4
+ 34.6 9.342698 35.732997 1.9332014E-3
+ 34.6 9.715573 35.668045 3.60101E-3
+ 34.6 9.928545 35.538372 5.3264875E-3
+ 34.6 10.305143 35.48217 7.02603E-3
+ 34.6 10.805107 35.494907 8.486793E-3
+ 34.6 11.313919 35.538257 9.691243E-3
+ 34.6 11.67646 35.575424 0.010662062
+ 34.6 11.985845 35.60927 0.01151842
+ 34.6 12.217927 35.633537 0.012308985
+ 34.6 12.416058 35.65635 0.013010411
+ 34.6 12.572385 35.672775 0.013624157
+ 34.6 12.667929 35.681156 0.014156259
+ 34.6 12.768395 35.69258 0.014620936
+ 34.6 12.864577 35.703407 0.015027761
+ 34.6 12.949072 35.71502 0.01538902
+ 34.6 13.026606 35.72235 0.015718821
+ 34.6 13.093492 35.729026 0.016022064
+ 34.6 13.16256 35.73606 0.016302112
+ 34.6 13.209941 35.73885 0.016564902
+ 34.6 13.261281 35.745693 0.01681247
+ 34.6 13.295149 35.748287 0.017045975
+ 34.6 13.343673 35.754447 0.017267123
+ 34.6 13.398466 35.76053 0.017476922
+ 34.6 13.461059 35.76937 0.017673476
+ 34.6 13.514029 35.7762 0.017858023
+ 34.6 13.58305 35.784427 0.018035479
+ 34.6 13.641498 35.788196 0.018204406
+ 34.6 13.696003 35.796306 0.018365486
+ 34.6 13.760359 35.803634 0.018520776
+ 34.6 13.832508 35.809627 0.018668221
+ 34.6 13.887393 35.8133 0.018808886
+ 34.6 13.972 35.82157 0.018942377
+ 34.6 14.071348 35.83029 0.019068444
+ 34.6 14.188655 35.83712 0.019186607
+ 34.6 14.317691 35.844985 0.019296981
+ 34.6 14.491177 35.84409 0.019401474
+ 34.6 14.697059 35.84731 0.019484388
+ 34.6 15.01404 35.852542 0.019548124
+ 34.6 15.685175 35.847953 0.01957435
+ 34.6 16.439089 35.864917 0.019539768
+ 34.6 17.206863 35.86196 0.019449007
+ 34.6 17.77244 35.87016 0.019352669
+ 34.6 18.449183 35.88411 0.019271098
+ 34.6 19.154554 35.889106 0.019197064
+ 34.6 19.690287 35.87571 0.019218719
+ 34.6 19.81982 35.87589 0.01934919
+ 34.6 19.8347 35.876747 0.019514166
+ 34.6 19.840206 35.878147 0.019681059
+ 34.6 19.817165 35.871845 0.019841721
+ 34.6 19.77272 35.877147 0.02009402
+ 34.65 2.5124943 34.897056 0.0E+0
+ 34.65 2.5046806 34.902393 -5.7156885E-5
+ 34.65 2.510747 34.90684 -3.417315E-5
+ 34.65 2.5422294 34.914344 -6.9076064E-5
+ 34.65 2.580364 34.91963 -1.5226744E-4
+ 34.65 2.6439378 34.92885 -2.7910107E-4
+ 34.65 2.7384865 34.940227 -2.9567754E-4
+ 34.65 2.8937547 34.95243 -1.8736528E-4
+ 34.65 3.0876946 34.961883 -5.9615056E-5
+ 34.65 3.3573055 34.973377 7.350712E-5
+ 34.65 3.5950632 34.97595 2.3047837E-4
+ 34.65 3.8565561 34.986557 2.2937806E-4
+ 34.65 4.3396086 35.04049 4.3449912E-5
+ 34.65 5.281014 35.175472 -1.5156648E-4
+ 34.65 6.82916 35.413185 -2.5943704E-4
+ 34.65 8.338863 35.634456 2.8424913E-4
+ 34.65 9.356398 35.734367 1.7394845E-3
+ 34.65 9.728624 35.669284 3.470495E-3
+ 34.65 9.940462 35.538963 5.231826E-3
+ 34.65 10.317601 35.482975 6.9478754E-3
+ 34.65 10.818635 35.496097 8.4285205E-3
+ 34.65 11.327013 35.53963 9.634159E-3
+ 34.65 11.690621 35.576965 0.010589391
+ 34.65 12.003329 35.611183 0.011430903
+ 34.65 12.238493 35.635913 0.012208328
+ 34.65 12.438115 35.658874 0.012898482
+ 34.65 12.595312 35.67538 0.013502336
+ 34.65 12.692491 35.68409 0.014028541
+ 34.65 12.793102 35.69547 0.014491149
+ 34.65 12.889622 35.706394 0.014897332
+ 34.65 12.975411 35.71825 0.015258975
+ 34.65 13.053509 35.725643 0.015589575
+ 34.65 13.120781 35.732376 0.01589313
+ 34.65 13.190714 35.739582 0.016172785
+ 34.65 13.238916 35.742462 0.01643469
+ 34.65 13.29042 35.74933 0.016681587
+ 34.65 13.324396 35.75186 0.01691478
+ 34.65 13.37258 35.75795 0.017135803
+ 34.65 13.427469 35.76406 0.01734535
+ 34.65 13.489038 35.772804 0.017541407
+ 34.65 13.541936 35.779644 0.017725619
+ 34.65 13.610487 35.787784 0.017902765
+ 34.65 13.667788 35.791427 0.018071078
+ 34.65 13.722353 35.799636 0.018231533
+ 34.65 13.786501 35.80699 0.018386386
+ 34.65 13.857982 35.813076 0.018533282
+ 34.65 13.912839 35.816772 0.01867347
+ 34.65 13.99647 35.82507 0.018806921
+ 34.65 14.095793 35.833896 0.018933786
+ 34.65 14.213659 35.841213 0.019053347
+ 34.65 14.343593 35.84944 0.019166006
+ 34.65 14.51576 35.848453 0.019272693
+ 34.65 14.717271 35.85138 0.019356975
+ 34.65 15.034236 35.856746 0.019422978
+ 34.65 15.697909 35.85202 0.01944847
+ 34.65 16.447441 35.869087 0.019406889
+ 34.65 17.207874 35.865566 0.019303607
+ 34.65 17.779594 35.87415 0.01920326
+ 34.65 18.456701 35.888675 0.019135635
+ 34.65 19.164618 35.893726 0.019079272
+ 34.65 19.710285 35.880073 0.01910871
+ 34.65 19.843876 35.88013 0.019237585
+ 34.65 19.859089 35.880966 0.019398494
+ 34.65 19.864283 35.88231 0.019561203
+ 34.65 19.841267 35.876262 0.019718353
+ 34.65 19.798624 35.881534 0.019965347
+ 34.7 2.5126366 34.897155 0.0E+0
+ 34.7 2.5046963 34.902355 -4.3502033E-5
+ 34.7 2.511093 34.906894 -6.1950463E-6
+ 34.7 2.5425515 34.9144 -3.9420097E-5
+ 34.7 2.5808925 34.919754 -1.3023331E-4
+ 34.7 2.6449027 34.92902 -2.669781E-4
+ 34.7 2.7397394 34.940345 -2.9221986E-4
+ 34.7 2.895193 34.952545 -1.8568736E-4
+ 34.7 3.0895454 34.962055 -5.4753243E-5
+ 34.7 3.3607921 34.973754 7.718992E-5
+ 34.7 3.599652 34.976467 2.211029E-4
+ 34.7 3.8639647 34.98768 1.7206906E-4
+ 34.7 4.3489842 35.04198 -8.872134E-5
+ 34.7 5.2994122 35.178497 -3.486512E-4
+ 34.7 6.861831 35.4191 -5.070899E-4
+ 34.7 8.370374 35.639934 1.5195877E-5
+ 34.7 9.370766 35.735832 1.5008061E-3
+ 34.7 9.7425584 35.670661 3.2845351E-3
+ 34.7 9.953353 35.539764 5.071436E-3
+ 34.7 10.330686 35.483905 6.794596E-3
+ 34.7 10.832624 35.497364 8.288514E-3
+ 34.7 11.340235 35.541065 9.490313E-3
+ 34.7 11.704831 35.578556 0.010425842
+ 34.7 12.020697 35.613117 0.011248923
+ 34.7 12.259006 35.63833 0.01200996
+ 34.7 12.460007 35.66142 0.012686138
+ 34.7 12.618085 35.678005 0.013277879
+ 34.7 12.717203 35.68709 0.01379647
+ 34.7 12.818066 35.698436 0.014255676
+ 34.7 12.914988 35.709472 0.014660129
+ 34.7 13.002175 35.721591 0.015021276
+ 34.7 13.080867 35.729053 0.015351906
+ 34.7 13.148518 35.735847 0.015655061
+ 34.7 13.219238 35.74322 0.015933668
+ 34.7 13.268292 35.74621 0.016194064
+ 34.7 13.319995 35.753093 0.016439686
+ 34.7 13.354109 35.755577 0.01667198
+ 34.7 13.401959 35.76159 0.016892316
+ 34.7 13.456902 35.76773 0.017101098
+ 34.7 13.517402 35.776367 0.017296175
+ 34.7 13.570235 35.783203 0.017479595
+ 34.7 13.638257 35.791255 0.017655985
+ 34.7 13.694423 35.794776 0.017823286
+ 34.7 13.749002 35.803066 0.017982759
+ 34.7 13.812925 35.810443 0.01813683
+ 34.7 13.883726 35.816623 0.018282883
+ 34.7 13.938625 35.82035 0.01842234
+ 34.7 14.021299 35.828666 0.018555542
+ 34.7 14.120674 35.837593 0.018683033
+ 34.7 14.239153 35.845413 0.018803846
+ 34.7 14.370171 35.85401 0.018918708
+ 34.7 14.541001 35.85298 0.019027542
+ 34.7 14.738242 35.85562 0.019113282
+ 34.7 15.05533 35.861133 0.019181771
+ 34.7 15.710997 35.856296 0.019207027
+ 34.7 16.455647 35.87344 0.01915935
+ 34.7 17.208443 35.869403 0.019045005
+ 34.7 17.788054 35.87836 0.018942116
+ 34.7 18.46637 35.893417 0.018889697
+ 34.7 19.176352 35.898517 0.018852452
+ 34.7 19.730997 35.884654 0.018890724
+ 34.7 19.868286 35.88459 0.019018453
+ 34.7 19.883793 35.885406 0.01917552
+ 34.7 19.888676 35.88668 0.019334292
+ 34.7 19.865808 35.8809 0.019488214
+ 34.7 19.82482 35.886127 0.019730274
+ 34.75 2.5128717 34.897262 0.0E+0
+ 34.75 2.5047814 34.902317 -2.9457991E-5
+ 34.75 2.5114905 34.906955 2.2087483E-5
+ 34.75 2.542885 34.914455 -8.90691E-6
+ 34.75 2.5814287 34.919883 -1.0694342E-4
+ 34.75 2.6458907 34.929203 -2.5362535E-4
+ 34.75 2.741048 34.94047 -2.8837475E-4
+ 34.75 2.8967261 34.952667 -1.8535969E-4
+ 34.75 3.0915348 34.962242 -5.332396E-5
+ 34.75 3.3644688 34.974163 7.476592E-5
+ 34.75 3.6045756 34.977043 2.019145E-4
+ 34.75 3.8720781 34.98894 1.0043277E-4
+ 34.75 4.3593072 35.04365 -2.3983415E-4
+ 34.75 5.318985 35.18175 -5.691741E-4
+ 34.75 6.8961296 35.425365 -7.8198645E-4
+ 34.75 8.403507 35.64576 -2.8623823E-4
+ 34.75 9.38577 35.737384 1.2202121E-3
+ 34.75 9.75734 35.67218 3.046009E-3
+ 34.75 9.967195 35.540775 4.8482585E-3
+ 34.75 10.344356 35.484962 6.5693235E-3
+ 34.75 10.84702 35.49871 8.070057E-3
+ 34.75 11.353534 35.54256 9.26325E-3
+ 34.75 11.719042 35.580192 0.010175296
+ 34.75 12.037885 35.615066 0.010976628
+ 34.75 12.279393 35.64077 0.011718244
+ 34.75 12.481656 35.663974 0.012377915
+ 34.75 12.640628 35.680644 0.012955467
+ 34.75 12.741998 35.690155 0.013464828
+ 34.75 12.843227 35.701484 0.013919363
+ 34.75 12.940622 35.712642 0.014321047
+ 34.75 13.029308 35.725036 0.014680859
+ 34.75 13.108627 35.732582 0.015010784
+ 34.75 13.176653 35.739444 0.015312863
+ 34.75 13.248077 35.74698 0.015589807
+ 34.75 13.298009 35.75008 0.015848108
+ 34.75 13.349944 35.75699 0.016091885
+ 34.75 13.384228 35.759422 0.016322725
+ 34.75 13.431757 35.76536 0.01654185
+ 34.75 13.486709 35.77153 0.01674938
+ 34.75 13.5461 35.78005 0.016943034
+ 34.75 13.598874 35.786884 0.017125232
+ 34.75 13.666313 35.794834 0.017300457
+ 34.75 13.721363 35.79825 0.017466385
+ 34.75 13.775907 35.806594 0.017624548
+ 34.75 13.839592 35.813987 0.017777532
+ 34.75 13.909712 35.820266 0.017922482
+ 34.75 13.964723 35.824035 0.01806099
+ 34.75 14.046465 35.832363 0.01819377
+ 34.75 14.145965 35.841377 0.018321736
+ 34.75 14.265106 35.849716 0.018443683
+ 34.75 14.397393 35.85869 0.01856068
+ 34.75 14.566874 35.85766 0.018671624
+ 34.75 14.759978 35.860042 0.018758928
+ 34.75 15.077332 35.865703 0.018830149
+ 34.75 15.724498 35.860782 0.018855715
+ 34.75 16.463776 35.877975 0.018802945
+ 34.75 17.208715 35.87347 0.018679127
+ 34.75 17.797895 35.88279 0.018575244
+ 34.75 18.478275 35.898326 0.01853922
+ 34.75 19.18985 35.903476 0.018522415
+ 34.75 19.752466 35.88946 0.018570496
+ 34.75 19.893072 35.889274 0.018697513
+ 34.75 19.908834 35.890064 0.018850978
+ 34.75 19.91341 35.891265 0.019006057
+ 34.75 19.890814 35.885772 0.019157028
+ 34.75 19.851324 35.89093 0.019394513
+ 34.8 2.5131988 34.897377 0.0E+0
+ 34.8 2.5049366 34.90228 -1.5038241E-5
+ 34.8 2.5119378 34.907016 5.0651113E-5
+ 34.8 2.5432288 34.914516 2.2480132E-5
+ 34.8 2.58197 34.92002 -8.231235E-5
+ 34.8 2.646898 34.92939 -2.3889799E-4
+ 34.8 2.7424068 34.940605 -2.8395454E-4
+ 34.8 2.8983476 34.952804 -1.8617357E-4
+ 34.8 3.0936543 34.962444 -5.5085034E-5
+ 34.8 3.3683247 34.974597 6.6605905E-5
+ 34.8 3.6098268 34.977676 1.735541E-4
+ 34.8 3.880892 34.990345 1.5677753E-5
+ 34.8 4.3705697 35.045513 -4.0790875E-4
+ 34.8 5.339696 35.18523 -8.10447E-4
+ 34.8 6.931937 35.431957 -1.0808879E-3
+ 34.8 8.43808 35.651893 -6.1663263E-4
+ 34.8 9.401373 35.739036 9.0100435E-4
+ 34.8 9.772933 35.673847 2.7581304E-3
+ 34.8 9.981959 35.542003 4.56565E-3
+ 34.8 10.358569 35.486145 6.275683E-3
+ 34.8 10.861773 35.500125 7.776981E-3
+ 34.8 11.366857 35.544105 8.957112E-3
+ 34.8 11.733208 35.581867 9.842271E-3
+ 34.8 12.054832 35.617027 0.010618843
+ 34.8 12.29958 35.643238 0.011338248
+ 34.8 12.502989 35.666526 0.011979081
+ 34.8 12.662872 35.68329 0.012540536
+ 34.8 12.766809 35.693275 0.013039163
+ 34.8 12.868526 35.704605 0.013487833
+ 34.8 12.966469 35.715896 0.01388577
+ 34.8 13.056756 35.728576 0.014243455
+ 34.8 13.136735 35.736225 0.014571981
+ 34.8 13.205132 35.74316 0.014872348
+ 34.8 13.277177 35.75084 0.015147056
+ 34.8 13.328008 35.754074 0.015402721
+ 34.8 13.38021 35.761005 0.01564413
+ 34.8 13.414692 35.7634 0.015873002
+ 34.8 13.461919 35.769264 0.016090423
+ 34.8 13.516837 35.775455 0.016296253
+ 34.8 13.575085 35.783843 0.016488072
+ 34.8 13.627803 35.790672 0.016668664
+ 34.8 13.694608 35.798515 0.016842345
+ 34.8 13.748568 35.80183 0.01700657
+ 34.8 13.803029 35.810214 0.017163146
+ 34.8 13.866467 35.817623 0.017314775
+ 34.8 13.935909 35.824005 0.0174584
+ 34.8 13.991107 35.827823 0.01759578
+ 34.8 14.071948 35.836154 0.017728
+ 34.8 14.171639 35.845245 0.01785632
+ 34.8 14.291493 35.854114 0.017979305
+ 34.8 14.425228 35.86347 0.01809839
+ 34.8 14.593353 35.862487 0.018211426
+ 34.8 14.782487 35.86463 0.018300427
+ 34.8 15.100249 35.870452 0.01837464
+ 34.8 15.738472 35.86547 0.01840111
+ 34.8 16.471912 35.88269 0.01834434
+ 34.8 17.208858 35.87777 0.018212777
+ 34.8 17.809189 35.88743 0.018109508
+ 34.8 18.4925 35.903396 0.018090995
+ 34.8 19.205196 35.908592 0.018095814
+ 34.8 19.774734 35.89449 0.018154591
+ 34.8 19.91825 35.894172 0.018281324
+ 34.8 19.934229 35.894943 0.01843143
+ 34.8 19.938509 35.896064 0.01858306
+ 34.8 19.916298 35.890865 0.018731346
+ 34.8 19.878147 35.895935 0.018964594
+ 34.85 2.5136163 34.8975 0.0E+0
+ 34.85 2.5051605 34.902244 -2.56131E-7
+ 34.85 2.5124323 34.907077 7.9478304E-5
+ 34.85 2.543582 34.914577 5.4760563E-5
+ 34.85 2.582513 34.92016 -5.6255703E-5
+ 34.85 2.6479208 34.929584 -2.2265506E-4
+ 34.85 2.7438104 34.940753 -2.787739E-4
+ 34.85 2.900051 34.95295 -1.8791493E-4
+ 34.85 3.0958957 34.962665 -5.977902E-5
+ 34.85 3.3723492 34.97506 5.3112173E-5
+ 34.85 3.6153955 34.97837 1.367225E-4
+ 34.85 3.8903968 34.991897 -8.088875E-5
+ 34.85 4.382757 35.047565 -5.908286E-4
+ 34.85 5.361501 35.188934 -1.069612E-3
+ 34.85 6.9691267 35.438858 -1.400378E-3
+ 34.85 8.473897 35.658313 -9.723934E-4
+ 34.85 9.417534 35.740787 5.467079E-4
+ 34.85 9.789294 35.675655 2.4244163E-3
+ 34.85 9.997611 35.543457 4.2273462E-3
+ 34.85 10.37328 35.487453 5.9177493E-3
+ 34.85 10.876829 35.50161 7.413624E-3
+ 34.85 11.380155 35.545696 8.576591E-3
+ 34.85 11.747281 35.58358 9.431874E-3
+ 34.85 12.071481 35.61899 0.01018101
+ 34.85 12.319496 35.645717 0.010875692
+ 34.85 12.523933 35.669075 0.01149558
+ 34.85 12.684748 35.68593 0.012039215
+ 34.85 12.79157 35.69644 0.012525732
+ 34.85 12.893902 35.70779 0.012967429
+ 34.85 12.992473 35.71923 0.013360709
+ 34.85 13.084463 35.73221 0.013715528
+ 34.85 13.165133 35.739967 0.014042004
+ 34.85 13.233903 35.746986 0.01434007
+ 34.85 13.306485 35.754806 0.014612019
+ 34.85 13.35823 35.758182 0.014864555
+ 34.85 13.410732 35.765136 0.015103119
+ 34.85 13.445441 35.7675 0.015329547
+ 34.85 13.49239 35.77329 0.015544814
+ 34.85 13.547232 35.779506 0.015748534
+ 34.85 13.604309 35.787757 0.015938153
+ 34.85 13.656972 35.794567 0.016116792
+ 34.85 13.723097 35.8023 0.016288593
+ 34.85 13.776 35.805522 0.016450835
+ 34.85 13.830331 35.81393 0.01660558
+ 34.85 13.893516 35.821346 0.01675563
+ 34.85 13.962293 35.827835 0.016897751
+ 34.85 14.017751 35.83171 0.017033864
+ 34.85 14.097732 35.84004 0.017165422
+ 34.85 14.19767 35.849197 0.017294014
+ 34.85 14.318285 35.8586 0.017417967
+ 34.85 14.453643 35.868335 0.017539106
+ 34.85 14.62041 35.867454 0.017654236
+ 34.85 14.805773 35.86939 0.017745093
+ 34.85 15.124089 35.87537 0.017822584
+ 34.85 15.752983 35.870357 0.01785059
+ 34.85 16.480146 35.887573 0.017791007
+ 34.85 17.209032 35.882293 0.017653534
+ 34.85 17.821999 35.892276 0.01755254
+ 34.85 18.509108 35.90862 0.017552575
+ 34.85 19.222464 35.913867 0.017580057
+ 34.85 19.797838 35.899734 0.017650338
+ 34.85 19.94383 35.899291 0.017777191
+ 34.85 19.959988 35.90004 0.017924186
+ 34.85 19.963991 35.901077 0.018072613
+ 34.85 19.942282 35.896183 0.018218469
+ 34.85 19.905304 35.90115 0.0184478
+ 34.9 2.5141222 34.89763 0.0E+0
+ 34.9 2.5054523 34.902206 1.4874842E-5
+ 34.9 2.5129714 34.907142 1.0855654E-4
+ 34.9 2.5439426 34.914646 8.7955544E-5
+ 34.9 2.5830554 34.920303 -2.8691966E-5
+ 34.9 2.6489546 34.929786 -2.0476138E-4
+ 34.9 2.745252 34.94091 -2.726519E-4
+ 34.9 2.9018294 34.953105 -1.903668E-4
+ 34.9 3.0982494 34.962905 -6.7135755E-5
+ 34.9 3.376529 34.97555 3.4714477E-5
+ 34.9 3.621269 34.979125 9.21729E-5
+ 34.9 3.9005777 34.99359 -1.8787538E-4
+ 34.9 4.39585 35.049804 -7.863642E-4
+ 34.9 5.384351 35.192855 -1.3436748E-3
+ 34.9 7.0075602 35.44605 -1.7369024E-3
+ 34.9 8.510758 35.664978 -1.3497884E-3
+ 34.9 9.43421 35.742637 1.610396E-4
+ 34.9 9.806379 35.677612 2.0486521E-3
+ 34.9 10.014114 35.545135 3.837425E-3
+ 34.9 10.388442 35.488883 5.50001E-3
+ 34.9 10.892134 35.503154 6.9847824E-3
+ 34.9 11.393379 35.547325 8.126874E-3
+ 34.9 11.761221 35.585323 8.949746E-3
+ 34.9 12.08778 35.620956 9.669139E-3
+ 34.9 12.339075 35.648204 0.010336885
+ 34.9 12.544424 35.671604 0.010933967
+ 34.9 12.706193 35.688556 0.011458261
+ 34.9 12.816216 35.69965 0.011931433
+ 34.9 12.919296 35.711032 0.01236514
+ 34.9 13.018579 35.722637 0.012752929
+ 34.9 13.112373 35.735923 0.013104203
+ 34.9 13.193766 35.74381 0.01342803
+ 34.9 13.262911 35.75092 0.013723253
+ 34.9 13.335944 35.758865 0.013991973
+ 34.9 13.388614 35.76239 0.014240943
+ 34.9 13.441451 35.769374 0.014476234
+ 34.9 13.476415 35.771717 0.014699792
+ 34.9 13.523115 35.77743 0.014912495
+ 34.9 13.577841 35.78367 0.015113741
+ 34.9 13.633724 35.791774 0.015300839
+ 34.9 13.686333 35.798564 0.015477223
+ 34.9 13.751736 35.806175 0.015646853
+ 34.9 13.80362 35.809322 0.015806872
+ 34.9 13.857775 35.817733 0.015959593
+ 34.9 13.920708 35.82515 0.016107881
+ 34.9 13.988838 35.831752 0.016248366
+ 34.9 14.044632 35.835693 0.016383117
+ 34.9 14.123797 35.844017 0.016513953
+ 34.9 14.224036 35.853225 0.016642762
+ 34.9 14.345456 35.863174 0.016767647
+ 34.9 14.482604 35.87329 0.01689083
+ 34.9 14.648018 35.872554 0.017008072
+ 34.9 14.82984 35.874301 0.017100962
+ 34.9 15.148856 35.88046 0.017182043
+ 34.9 15.768094 35.87544 0.017212259
+ 34.9 16.488575 35.892616 0.017151127
+ 34.9 17.209412 35.88704 0.01700969
+ 34.9 17.836388 35.897323 0.016912676
+ 34.9 18.528147 35.913993 0.016932204
+ 34.9 19.241713 35.919296 0.016983232
+ 34.9 19.821804 35.905197 0.017065726
+ 34.9 19.969828 35.90463 0.017193094
+ 34.9 19.986126 35.905353 0.017337227
+ 34.9 19.989882 35.90631 0.017482696
+ 34.9 19.968775 35.901725 0.017626368
+ 34.9 19.9328 35.906566 0.017852077
+ 34.95 2.5147132 34.89776 0.0E+0
+ 34.95 2.5058097 34.902175 3.034072E-5
+ 34.95 2.5135514 34.907207 1.3787742E-4
+ 34.95 2.5443093 34.91471 1.2208644E-4
+ 34.95 2.583593 34.920452 4.5565852E-7
+ 34.95 2.649995 34.929992 -1.8508983E-4
+ 34.95 2.7467255 34.941082 -2.6541444E-4
+ 34.95 2.9036755 34.953273 -1.9331134E-4
+ 34.95 3.1007051 34.963157 -7.6875E-5
+ 34.95 3.38085 34.97607 1.186575E-5
+ 34.95 3.627432 34.97994 4.0703023E-5
+ 34.95 3.9114141 34.99543 -3.0382192E-4
+ 34.95 4.4098215 35.052227 -9.921978E-4
+ 34.95 5.4081854 35.196987 -1.6295378E-3
+ 34.95 7.047092 35.453506 -2.0868065E-3
+ 34.95 8.548459 35.67186 -1.7449821E-3
+ 34.95 9.451353 35.744586 -2.5212351E-4
+ 34.95 9.82414 35.67971 1.6348592E-3
+ 34.95 10.031423 35.547046 3.4002703E-3
+ 34.95 10.404008 35.490436 5.02732E-3
+ 34.95 10.907634 35.504753 6.495669E-3
+ 34.95 11.406485 35.548992 7.6136062E-3
+ 34.95 11.774986 35.58709 8.402007E-3
+ 34.95 12.10368 35.62291 9.089739E-3
+ 34.95 12.358254 35.65069 9.728662E-3
+ 34.95 12.5644 35.67411 0.01030134
+ 34.95 12.727148 35.69117 0.010804988
+ 34.95 12.840683 35.70288 0.011263733
+ 34.95 12.944651 35.71432 0.011688535
+ 34.95 13.044733 35.726104 0.012070081
+ 34.95 13.140428 35.739715 0.012417196
+ 34.95 13.222575 35.747737 0.012737828
+ 34.95 13.2921 35.754947 0.013029722
+ 34.95 13.365503 35.763011 0.013294797
+ 34.95 13.419102 35.7667 0.013539821
+ 34.95 13.472308 35.773712 0.013771464
+ 34.95 13.507553 35.77604 0.013991776
+ 34.95 13.554041 35.781684 0.014201553
+ 34.95 13.608611 35.78794 0.014400005
+ 34.95 13.663286 35.7959 0.014584309
+ 34.95 13.715839 35.802658 0.014758182
+ 34.95 13.780481 35.810146 0.014925398
+ 34.95 13.831394 35.813224 0.015083006
+ 34.95 13.88533 35.821617 0.015233553
+ 34.95 13.948013 35.829032 0.015379948
+ 34.95 14.015522 35.835754 0.015518709
+ 34.95 14.071728 35.839775 0.015652047
+ 34.95 14.150129 35.84808 0.015782144
+ 34.95 14.250714 35.857326 0.015911154
+ 34.95 14.372982 35.867824 0.016036961
+ 34.95 14.512078 35.878322 0.016162196
+ 34.95 14.676149 35.877773 0.01628159
+ 34.95 14.854691 35.879367 0.016376723
+ 34.95 15.174554 35.885704 0.01646172
+ 34.95 15.783873 35.880706 0.016494863
+ 34.95 16.497297 35.897815 0.016433522
+ 34.95 17.210175 35.892002 0.016290156
+ 34.95 17.852413 35.902565 0.016198853
+ 34.95 18.549656 35.919502 0.016238723
+ 34.95 19.262989 35.924873 0.016314028
+ 34.95 19.846664 35.91087 0.016409347
+ 34.95 19.996252 35.91018 0.016537597
+ 34.95 20.012657 35.91089 0.01667913
+ 34.95 20.016195 35.911762 0.016821885
+ 34.95 19.995792 35.907493 0.0169636
+ 34.95 19.96065 35.912193 0.017185962
+ 35.0 2.5153853 34.8979 0.0E+0
+ 35.0 2.5062308 34.90214 4.6126766E-5
+ 35.0 2.5141696 34.907272 1.6743568E-4
+ 35.0 2.5446805 34.91478 1.571734E-4
+ 35.0 2.584123 34.9206 3.1257313E-5
+ 35.0 2.651038 34.930202 -1.6352325E-4
+ 35.0 2.7482244 34.941257 -2.568962E-4
+ 35.0 2.9055817 34.95345 -1.9653226E-4
+ 35.0 3.1032521 34.963424 -8.870911E-5
+ 35.0 3.3852972 34.976615 -1.4962259E-5
+ 35.0 3.633866 34.98081 -1.6853099E-5
+ 35.0 3.9228804 34.997406 -4.2721495E-4
+ 35.0 4.424639 35.054832 -1.2059491E-3
+ 35.0 5.432942 35.201324 -1.9240348E-3
+ 35.0 7.087569 35.4612 -2.4463743E-3
+ 35.0 8.586792 35.678916 -2.1540694E-3
+ 35.0 9.468915 35.74664 -6.887743E-4
+ 35.0 9.842524 35.68195 1.1872626E-3
+ 35.0 10.049493 35.549182 2.9205325E-3
+ 35.0 10.419931 35.492107 4.5048566E-3
+ 35.0 10.923276 35.5064 5.95186E-3
+ 35.0 11.419429 35.550685 7.042821E-3
+ 35.0 11.788539 35.588874 7.795191E-3
+ 35.0 12.119136 35.62485 8.44976E-3
+ 35.0 12.376974 35.65316 9.058315E-3
+ 35.0 12.583806 35.676586 9.605273E-3
+ 35.0 12.74756 35.693752 0.010087199
+ 35.0 12.864913 35.706134 0.010530593
+ 35.0 12.96991 35.717655 0.010945686
+ 35.0 13.070881 35.72963 0.011320326
+ 35.0 13.168572 35.74357 0.011662734
+ 35.0 13.251503 35.751747 0.011979683
+ 35.0 13.321418 35.759063 0.012267819
+ 35.0 13.395108 35.767234 0.012528893
+ 35.0 13.449637 35.771095 0.01276965
+ 35.0 13.503245 35.778137 0.012997328
+ 35.0 13.538796 35.78046 0.013214068
+ 35.0 13.585113 35.78604 0.013420608
+ 35.0 13.639491 35.792312 0.013615997
+ 35.0 13.692949 35.800113 0.013797283
+ 35.0 13.745443 35.806842 0.01396844
+ 35.0 13.809294 35.814197 0.014133048
+ 35.0 13.859286 35.817222 0.014288102
+ 35.0 13.912962 35.825576 0.01443638
+ 35.0 13.975403 35.83299 0.014580797
+ 35.0 14.042324 35.839836 0.014717794
+ 35.0 14.099018 35.84394 0.014849718
+ 35.0 14.176713 35.852226 0.014979094
+ 35.0 14.277683 35.861495 0.015108325
+ 35.0 14.400837 35.872543 0.01523508
+ 35.0 14.542028 35.883415 0.015362398
+ 35.0 14.704777 35.88311 0.015484006
+ 35.0 14.880327 35.884582 0.015581612
+ 35.0 15.201185 35.8911 0.01567088
+ 35.0 15.800387 35.886154 0.015707694
+ 35.0 16.506426 35.903163 0.015647555
+ 35.0 17.211496 35.897174 0.015504364
+ 35.0 17.870127 35.90799 0.015420521
+ 35.0 18.573654 35.925144 0.015481482
+ 35.0 19.286324 35.93059 0.015581626
+ 35.0 19.872433 35.91675 0.015690282
+ 35.0 20.023113 35.91594 0.01581977
+ 35.0 20.039597 35.916633 0.01595896
+ 35.0 20.042952 35.917434 0.016099244
+ 35.0 20.023346 35.913482 0.016239217
+ 35.0 19.988857 35.918022 0.016458483
+ 35.05 2.5161337 34.898036 0.0E+0
+ 35.05 2.506712 34.902107 6.221713E-5
+ 35.05 2.514822 34.907333 1.9722816E-4
+ 35.05 2.5450541 34.91485 1.9323383E-4
+ 35.05 2.5846414 34.920753 6.377461E-5
+ 35.05 2.6520781 34.93042 -1.3995665E-4
+ 35.05 2.7497415 34.94145 -2.4694265E-4
+ 35.05 2.9075393 34.95364 -1.9981693E-4
+ 35.05 3.1058793 34.96371 -1.0234563E-4
+ 35.05 3.3898546 34.97719 -4.5283406E-5
+ 35.05 3.6405506 34.981735 -7.9633486E-5
+ 35.05 3.9349455 34.999523 -5.56504E-4
+ 35.05 4.440266 35.057617 -1.4252004E-3
+ 35.05 5.458548 35.205852 -2.2239652E-3
+ 35.05 7.128832 35.469112 -2.8118665E-3
+ 35.05 8.62555 35.68612 -2.5731092E-3
+ 35.05 9.486844 35.74879 -1.1448052E-3
+ 35.05 9.861476 35.68433 7.102572E-4
+ 35.05 10.068272 35.551544 2.4030916E-3
+ 35.05 10.436163 35.493896 3.93808E-3
+ 35.05 10.939009 35.50809 5.359249E-3
+ 35.05 11.432171 35.552394 6.4208945E-3
+ 35.05 11.801846 35.590675 7.136193E-3
+ 35.05 12.134109 35.626777 7.756523E-3
+ 35.05 12.395183 35.65561 8.333526E-3
+ 35.05 12.602592 35.67902 8.853738E-3
+ 35.05 12.76738 35.696304 9.313107E-3
+ 35.05 12.888846 35.709396 9.740395E-3
+ 35.05 12.995019 35.721023 0.010145088
+ 35.05 13.096972 35.7332 0.010512249
+ 35.05 13.196749 35.747482 0.010849479
+ 35.05 13.280492 35.75583 0.011162317
+ 35.05 13.35081 35.76326 0.011446325
+ 35.05 13.424708 35.77153 0.011703102
+ 35.05 13.480162 35.775566 0.011939332
+ 35.05 13.534205 35.78264 0.012162787
+ 35.05 13.570088 35.784973 0.012375686
+ 35.05 13.616278 35.79049 0.012578728
+ 35.05 13.670431 35.796775 0.012770835
+ 35.05 13.722672 35.804412 0.012948931
+ 35.05 13.775101 35.811103 0.013117219
+ 35.05 13.838134 35.81833 0.013279075
+ 35.05 13.887266 35.82131 0.013431487
+ 35.05 13.940643 35.82961 0.013577448
+ 35.05 14.002856 35.837017 0.013719852
+ 35.05 14.069227 35.84399 0.013855094
+ 35.05 14.126484 35.84819 0.013985644
+ 35.05 14.203538 35.85645 0.014114366
+ 35.05 14.304924 35.86573 0.014243875
+ 35.05 14.428999 35.87732 0.014371634
+ 35.05 14.572421 35.88857 0.014501089
+ 35.05 14.733874 35.888542 0.014624993
+ 35.05 14.906747 35.889934 0.01472533
+ 35.05 15.22875 35.89665 0.014819239
+ 35.05 15.817704 35.89177 0.014860503
+ 35.05 16.516068 35.90865 0.014803027
+ 35.05 17.213566 35.902542 0.014662183
+ 35.05 17.889568 35.91359 0.01458755
+ 35.05 18.60015 35.93091 0.014670245
+ 35.05 19.311735 35.936443 0.014795625
+ 35.05 19.899126 35.92284 0.014918023
+ 35.05 20.05042 35.92191 0.015049079
+ 35.05 20.066952 35.922595 0.015186191
+ 35.05 20.070166 35.923324 0.015324245
+ 35.05 20.051437 35.919696 0.015462675
+ 35.05 20.017433 35.92406 0.015679073
+ 35.1 2.5169532 34.89818 0.0E+0
+ 35.1 2.5072495 34.902072 7.859451E-5
+ 35.1 2.515504 34.9074 2.272527E-4
+ 35.1 2.5454282 34.914913 2.3028086E-4
+ 35.1 2.5851452 34.92091 9.8058735E-5
+ 35.1 2.653111 34.930637 -1.1429914E-4
+ 35.1 2.7512698 34.941646 -2.3541236E-4
+ 35.1 2.9095401 34.95384 -2.0295857E-4
+ 35.1 3.1085741 34.96401 -1.1748999E-4
+ 35.1 3.3945043 34.977783 -7.8601624E-5
+ 35.1 3.6474626 34.98272 -1.4675675E-4
+ 35.1 3.947574 35.001773 -6.9011765E-4
+ 35.1 4.456659 35.060573 -1.6475233E-3
+ 35.1 5.484928 35.210567 -2.5261281E-3
+ 35.1 7.1707172 35.477207 -3.1795571E-3
+ 35.1 8.664529 35.693428 -2.998154E-3
+ 35.1 9.505088 35.751045 -1.6160378E-3
+ 35.1 9.880942 35.686847 2.083761E-4
+ 35.1 10.087705 35.554134 1.8530185E-3
+ 35.1 10.452655 35.495796 3.3326821E-3
+ 35.1 10.954782 35.509815 4.723995E-3
+ 35.1 11.444675 35.55412 5.7544875E-3
+ 35.1 11.814877 35.592483 6.4322017E-3
+ 35.1 12.148566 35.628677 7.0176557E-3
+ 35.1 12.412834 35.65803 7.5622913E-3
+ 35.1 12.620714 35.681404 8.055037E-3
+ 35.1 12.786566 35.698814 8.491256E-3
+ 35.1 12.912428 35.71266 8.901857E-3
+ 35.1 13.019924 35.724414 9.29558E-3
+ 35.1 13.122953 35.736812 9.654787E-3
+ 35.1 13.224902 35.75144 9.986439E-3
+ 35.1 13.309487 35.759963 0.0102948
+ 35.1 13.38022 35.767524 0.010574374
+ 35.1 13.454251 35.775882 0.010826619
+ 35.1 13.510624 35.7801 0.011058128
+ 35.1 13.565134 35.787212 0.011277161
+ 35.1 13.601372 35.789562 0.011486004
+ 35.1 13.647487 35.79502 0.011685342
+ 35.1 13.701383 35.80132 0.011873999
+ 35.1 13.752413 35.808795 0.012048787
+ 35.1 13.804774 35.81544 0.012214105
+ 35.1 13.866967 35.82253 0.012373117
+ 35.1 13.915304 35.825477 0.01252285
+ 35.1 13.968347 35.833702 0.012666496
+ 35.1 14.030349 35.841106 0.012806902
+ 35.1 14.096216 35.848213 0.012940446
+ 35.1 14.15411 35.85252 0.013069711
+ 35.1 14.230594 35.860744 0.013197888
+ 35.1 14.332421 35.87002 0.013327768
+ 35.1 14.457447 35.882152 0.01345662
+ 35.1 14.603223 35.89377 0.013588287
+ 35.1 14.763414 35.89407 0.013714592
+ 35.1 14.933952 35.895412 0.013817939
+ 35.1 15.25725 35.90233 0.013916877
+ 35.1 15.835893 35.897544 0.013963396
+ 35.1 16.526342 35.91426 0.013910095
+ 35.1 17.216557 35.908103 0.013773809
+ 35.1 17.910784 35.919357 0.013710129
+ 35.1 18.629133 35.936786 0.01381509
+ 35.1 19.339231 35.942424 0.013965933
+ 35.1 19.926756 35.929122 0.014102373
+ 35.1 20.078184 35.928085 0.014235306
+ 35.1 20.094734 35.928771 0.014370606
+ 35.1 20.097853 35.929435 0.014506667
+ 35.1 20.080076 35.926124 0.01464374
+ 35.1 20.04638 35.9303 0.014857466
+ 35.15 2.5178372 34.89832 0.0E+0
+ 35.15 2.5078394 34.902042 9.523981E-5
+ 35.15 2.5162117 34.907455 2.5750693E-4
+ 35.15 2.5458004 34.91498 2.6832174E-4
+ 35.15 2.585631 34.921062 1.3414862E-4
+ 35.15 2.6541311 34.930862 -8.6475745E-5
+ 35.15 2.752802 34.941852 -2.221785E-4
+ 35.15 2.9115757 34.95405 -2.057583E-4
+ 35.15 3.1113247 34.96432 -1.3384807E-4
+ 35.15 3.3992283 34.9784 -1.1441539E-4
+ 35.15 3.654577 34.983757 -2.1733057E-4
+ 35.15 3.960725 35.004146 -8.264798E-4
+ 35.15 4.4737696 35.06369 -1.8705027E-3
+ 35.15 5.512 35.21545 -2.8273563E-3
+ 35.15 7.213058 35.48546 -3.5457694E-3
+ 35.15 8.703524 35.70081 -3.425283E-3
+ 35.15 9.523593 35.7534 -2.098251E-3
+ 35.15 9.900864 35.689495 -3.1374313E-4
+ 35.15 10.107735 35.556941 1.2755352E-3
+ 35.15 10.469361 35.497802 2.6945446E-3
+ 35.15 10.970545 35.51157 4.05247E-3
+ 35.15 11.456909 35.55585 5.050487E-3
+ 35.15 11.827604 35.59429 5.6906365E-3
+ 35.15 12.162478 35.630546 6.2410226E-3
+ 35.15 12.429883 35.66042 6.7528523E-3
+ 35.15 12.638137 35.683734 7.217716E-3
+ 35.15 12.805082 35.70128 7.630447E-3
+ 35.15 12.935609 35.715915 8.023955E-3
+ 35.15 13.044575 35.72782 8.406259E-3
+ 35.15 13.148776 35.74045 8.757136E-3
+ 35.15 13.252977 35.75543 9.082886E-3
+ 35.15 13.33843 35.764152 9.3864714E-3
+ 35.15 13.409598 35.771846 9.661363E-3
+ 35.15 13.48369 35.78028 9.908907E-3
+ 35.15 13.540969 35.784694 0.010135562
+ 35.15 13.595978 35.79184 0.010350035
+ 35.15 13.632594 35.794223 0.010554668
+ 35.15 13.678688 35.79963 0.010750147
+ 35.15 13.732302 35.80594 0.010935239
+ 35.15 13.782133 35.813247 0.011106656
+ 35.15 13.83442 35.819843 0.011268954
+ 35.15 13.895759 35.82679 0.011425085
+ 35.15 13.943372 35.82972 0.011572151
+ 35.15 13.99605 35.837852 0.011713537
+ 35.15 14.057864 35.845256 0.011852009
+ 35.15 14.123277 35.852497 0.011983961
+ 35.15 14.181882 35.856922 0.012112075
+ 35.15 14.257871 35.865104 0.012239855
+ 35.15 14.360159 35.874366 0.012370235
+ 35.15 14.48616 35.887027 0.0125003
+ 35.15 14.6344 35.899005 0.012634277
+ 35.15 14.793374 35.899673 0.012763109
+ 35.15 14.961939 35.90101 0.012869766
+ 35.15 15.286683 35.90813 0.012974139
+ 35.15 15.855022 35.90347 0.013026738
+ 35.15 16.537373 35.91999 0.012979159
+ 35.15 17.220655 35.913845 0.012849671
+ 35.15 17.933802 35.92528 0.012798664
+ 35.15 18.660583 35.942764 0.01292631
+ 35.15 19.368801 35.94853 0.013102672
+ 35.15 19.955322 35.9356 0.013253345
+ 35.15 20.106407 35.93446 0.013388441
+ 35.15 20.122955 35.935153 0.013522198
+ 35.15 20.12603 35.935764 0.013656499
+ 35.15 20.109268 35.932773 0.013792382
+ 35.15 20.075706 35.936744 0.014003613
+ 35.2 2.5187795 34.89846 0.0E+0
+ 35.2 2.5084764 34.902008 1.1213185E-4
+ 35.2 2.5169403 34.907512 2.8798726E-4
+ 35.2 2.5461685 34.915046 3.0735653E-4
+ 35.2 2.5860941 34.92122 1.720692E-4
+ 35.2 2.6551337 34.931087 -5.64293E-5
+ 35.2 2.7543296 34.942066 -2.0713091E-4
+ 35.2 2.9136366 34.954265 -2.080271E-4
+ 35.2 3.1141183 34.964645 -1.5112871E-4
+ 35.2 3.404008 34.979042 -1.5222206E-4
+ 35.2 3.6618661 34.98484 -2.9046024E-4
+ 35.2 3.9743537 35.00664 -9.640253E-4
+ 35.2 4.4915456 35.066967 -2.0917628E-3
+ 35.2 5.5396785 35.22049 -3.1245467E-3
+ 35.2 7.255685 35.49383 -3.90691E-3
+ 35.2 8.742337 35.708225 -3.850629E-3
+ 35.2 9.542306 35.755847 -2.5872096E-3
+ 35.2 9.921183 35.692272 -8.513908E-4
+ 35.2 10.1283 35.559967 6.759766E-4
+ 35.2 10.486233 35.499912 2.0296904E-3
+ 35.2 10.986253 35.513347 3.351208E-3
+ 35.2 11.468842 35.55758 4.315947E-3
+ 35.2 11.840006 35.596096 4.919082E-3
+ 35.2 12.175824 35.63238 5.434651E-3
+ 35.2 12.446295 35.662757 5.913617E-3
+ 35.2 12.65483 35.686 6.3504925E-3
+ 35.2 12.822899 35.703685 6.739647E-3
+ 35.2 12.958339 35.71915 7.115837E-3
+ 35.2 13.068925 35.73123 7.486397E-3
+ 35.2 13.174393 35.744106 7.828666E-3
+ 35.2 13.28092 35.759445 8.148271E-3
+ 35.2 13.367267 35.768375 8.446842E-3
+ 35.2 13.43889 35.77622 8.716872E-3
+ 35.2 13.512978 35.784717 8.959605E-3
+ 35.2 13.571148 35.78933 9.181338E-3
+ 35.2 13.626686 35.796512 9.391174E-3
+ 35.2 13.663703 35.79894 9.5914974E-3
+ 35.2 13.709835 35.804302 9.783018E-3
+ 35.2 13.763143 35.81062 9.964485E-3
+ 35.2 13.811797 35.81776 0.010132517
+ 35.2 13.864004 35.8243 0.010291799
+ 35.2 13.924479 35.83111 0.010445063
+ 35.2 13.971446 35.834026 0.010589527
+ 35.2 14.023733 35.842056 0.010728755
+ 35.2 14.085384 35.849452 0.010865407
+ 35.2 14.150401 35.856834 0.010995918
+ 35.2 14.209788 35.861385 0.01112306
+ 35.2 14.285363 35.869522 0.011250631
+ 35.2 14.388126 35.878753 0.011381677
+ 35.2 14.515122 35.891937 0.011513107
+ 35.2 14.665919 35.90427 0.011649511
+ 35.2 14.823728 35.905345 0.011781015
+ 35.2 14.990703 35.906715 0.011891304
+ 35.2 15.317047 35.91405 0.012001529
+ 35.2 15.875161 35.909534 0.012061049
+ 35.2 16.549276 35.92583 0.012020766
+ 35.2 17.226036 35.919757 0.011900327
+ 35.2 17.95865 35.931346 0.011863676
+ 35.2 18.694462 35.948833 0.012014309
+ 35.2 19.400423 35.95475 0.012216074
+ 35.2 19.984825 35.94226 0.012381065
+ 35.2 20.135098 35.94103 0.012518586
+ 35.2 20.151627 35.941745 0.012651068
+ 35.2 20.154707 35.94231 0.012783838
+ 35.2 20.139011 35.93964 0.012918684
+ 35.2 20.105413 35.943397 0.013127569
+ 35.25 2.5197718 34.8986 0.0E+0
+ 35.25 2.5091557 34.901977 1.2924701E-4
+ 35.25 2.5176851 34.907562 3.1868746E-4
+ 35.25 2.54653 34.91511 3.473763E-4
+ 35.25 2.586532 34.92137 2.1182967E-4
+ 35.25 2.6561136 34.931312 -2.4122002E-5
+ 35.25 2.7558462 34.94229 -1.9017751E-4
+ 35.25 2.9157142 34.954494 -2.0958767E-4
+ 35.25 3.1169414 34.964984 -1.690461E-4
+ 35.25 3.408823 34.979701 -1.915222E-4
+ 35.25 3.669301 34.98597 -3.6525688E-4
+ 35.25 3.9884111 35.009246 -1.1012157E-3
+ 35.25 4.5099306 35.07039 -2.3089903E-3
+ 35.25 5.567874 35.22567 -3.4146932E-3
+ 35.25 7.298428 35.5023 -4.259501E-3
+ 35.25 8.780781 35.71565 -4.270409E-3
+ 35.25 9.561172 35.758392 -3.0786935E-3
+ 35.25 9.941838 35.695167 -1.3998187E-3
+ 35.25 10.149338 35.563194 5.9749643E-5
+ 35.25 10.503226 35.502117 1.3442361E-3
+ 35.25 11.00186 35.515136 2.6268507E-3
+ 35.25 11.480451 35.5593 3.5580284E-3
+ 35.25 11.852064 35.59789 4.1252202E-3
+ 35.25 12.188585 35.634174 4.606663E-3
+ 35.25 12.462041 35.665046 5.0530824E-3
+ 35.25 12.670769 35.688198 5.462173E-3
+ 35.25 12.839991 35.70603 5.8279125E-3
+ 35.25 12.980575 35.72236 6.186737E-3
+ 35.25 13.092928 35.73464 6.545353E-3
+ 35.25 13.19976 35.747776 6.878835E-3
+ 35.25 13.308678 35.763477 7.1921264E-3
+ 35.25 13.395943 35.77262 7.4855145E-3
+ 35.25 13.468046 35.780624 7.7505614E-3
+ 35.25 13.542069 35.78918 7.988439E-3
+ 35.25 13.601113 35.793994 8.205244E-3
+ 35.25 13.65721 35.80122 8.410425E-3
+ 35.25 13.694648 35.8037 8.606398E-3
+ 35.25 13.74088 35.80903 8.793916E-3
+ 35.25 13.793866 35.81535 8.971746E-3
+ 35.25 13.841371 35.822322 9.136434E-3
+ 35.25 13.893491 35.828804 9.292756E-3
+ 35.25 13.953099 35.835472 9.443219E-3
+ 35.25 13.999503 35.83839 9.585193E-3
+ 35.25 14.051378 35.8463 9.722415E-3
+ 35.25 14.112897 35.8537 9.857408E-3
+ 35.25 14.177578 35.86122 9.986673E-3
+ 35.25 14.237818 35.86591 0.010113063
+ 35.25 14.313065 35.873996 0.010240652
+ 35.25 14.41631 35.883182 0.01037256
+ 35.25 14.544315 35.896873 0.010505536
+ 35.25 14.697747 35.90955 0.010644504
+ 35.25 14.854455 35.91107 0.010778846
+ 35.25 15.020241 35.912513 0.010893103
+ 35.25 15.34834 35.920074 0.011009609
+ 35.25 15.896374 35.915725 0.011076899
+ 35.25 16.56218 35.931762 0.0110455
+ 35.25 17.232878 35.925827 0.010936354
+ 35.25 17.985348 35.937545 0.010915696
+ 35.25 18.730715 35.95499 0.011089501
+ 35.25 19.434063 35.961074 0.011316383
+ 35.25 20.015259 35.9491 0.01149567
+ 35.25 20.164263 35.94779 0.011635852
+ 35.25 20.180754 35.94854 0.011767328
+ 35.25 20.183897 35.94908 0.011898789
+ 35.25 20.16931 35.94672 0.012032734
+ 35.25 20.13551 35.95025 0.012239396
+ 35.3 2.5208063 34.898735 0.0E+0
+ 35.3 2.509871 34.90194 1.4655896E-4
+ 35.3 2.5184407 34.90761 3.4959783E-4
+ 35.3 2.5468823 34.91517 3.8836203E-4
+ 35.3 2.5869407 34.921527 2.5342212E-4
+ 35.3 2.6570653 34.93154 1.0463069E-5
+ 35.3 2.7573432 34.942523 -1.7124585E-4
+ 35.3 2.9177987 34.954734 -2.1027615E-4
+ 35.3 3.1197805 34.965332 -1.8732213E-4
+ 35.3 3.4136536 34.980377 -2.3182377E-4
+ 35.3 3.6768503 34.98714 -4.4084564E-4
+ 35.3 4.0028443 35.01195 -1.2365537E-3
+ 35.3 4.5288634 35.073944 -2.5199567E-3
+ 35.3 5.596493 35.230976 -3.6949135E-3
+ 35.3 7.341119 35.510833 -4.6002096E-3
+ 35.3 8.81867 35.723037 -4.680949E-3
+ 35.3 9.580137 35.761032 -3.5685242E-3
+ 35.3 9.96277 35.69818 -1.9542735E-3
+ 35.3 10.170782 35.56662 -5.6770665E-4
+ 35.3 10.520295 35.504413 6.443444E-4
+ 35.3 11.017324 35.516933 1.8860925E-3
+ 35.3 11.491715 35.561 2.7839394E-3
+ 35.3 11.863762 35.599666 3.316766E-3
+ 35.3 12.200753 35.635925 3.765199E-3
+ 35.3 12.477096 35.66728 4.179761E-3
+ 35.3 12.68594 35.690322 4.561571E-3
+ 35.3 12.856344 35.708312 4.9043023E-3
+ 35.3 13.002279 35.725524 5.2458904E-3
+ 35.3 13.116543 35.738033 5.592485E-3
+ 35.3 13.224832 35.75144 5.917102E-3
+ 35.3 13.336202 35.767505 6.2239882E-3
+ 35.3 13.424407 35.776882 6.512085E-3
+ 35.3 13.497016 35.78505 6.7720916E-3
+ 35.3 13.57092 35.79366 7.005128E-3
+ 35.3 13.630819 35.798675 7.217061E-3
+ 35.3 13.687503 35.805946 7.417627E-3
+ 35.3 13.725383 35.80849 7.609265E-3
+ 35.3 13.77178 35.813793 7.7927857E-3
+ 35.3 13.824432 35.82012 7.96702E-3
+ 35.3 13.870822 35.826927 8.128456E-3
+ 35.3 13.922851 35.833343 8.281924E-3
+ 35.3 13.981595 35.83987 8.429699E-3
+ 35.3 14.027524 35.842803 8.569347E-3
+ 35.3 14.07897 35.85057 8.704759E-3
+ 35.3 14.140393 35.85798 8.838296E-3
+ 35.3 14.204803 35.86565 8.966554E-3
+ 35.3 14.265963 35.87048 9.092453E-3
+ 35.3 14.340973 35.878517 9.220321E-3
+ 35.3 14.444703 35.887645 9.353319E-3
+ 35.3 14.573725 35.90182 9.488048E-3
+ 35.3 14.729852 35.914833 9.629736E-3
+ 35.3 14.885532 35.91684 9.767097E-3
+ 35.3 15.050545 35.9184 9.885674E-3
+ 35.3 15.380555 35.926185 0.010008894
+ 35.3 15.918728 35.92203 0.010084807
+ 35.3 16.576206 35.937782 0.010063882
+ 35.3 17.241344 35.93204 9.968252E-3
+ 35.3 18.013908 35.943862 9.965164E-3
+ 35.3 18.769278 35.961215 0.010162202
+ 35.3 19.46967 35.9675 0.010413752
+ 35.3 20.046608 35.95611 0.010607205
+ 35.3 20.193905 35.954734 0.010750258
+ 35.3 20.210348 35.955535 0.010880995
+ 35.3 20.21361 35.956066 0.011011366
+ 35.3 20.200157 35.954013 0.011144528
+ 35.3 20.165993 35.957305 0.011349067
+ 35.35 2.521875 34.898864 0.0E+0
+ 35.35 2.510616 34.901905 1.6403843E-4
+ 35.35 2.519202 34.907653 3.8070383E-4
+ 35.35 2.547223 34.915222 4.3028313E-4
+ 35.35 2.5873167 34.921676 2.9681998E-4
+ 35.35 2.6579835 34.93177 4.7320685E-5
+ 35.35 2.7588133 34.94276 -1.5028434E-4
+ 35.35 2.919881 34.95498 -2.0994365E-4
+ 35.35 3.1226224 34.96569 -2.0568856E-4
+ 35.35 3.418479 34.981063 -2.7264602E-4
+ 35.35 3.6844818 34.988342 -5.163733E-4
+ 35.35 4.0175967 35.014747 -1.3685971E-3
+ 35.35 4.54828 35.077625 -2.7225397E-3
+ 35.35 5.6254396 35.23639 -3.962477E-3
+ 35.35 7.383589 35.519393 -4.925877E-3
+ 35.35 8.855834 35.730361 -5.07871E-3
+ 35.35 9.599151 35.763755 -4.052595E-3
+ 35.35 9.98392 35.7013 -2.5100302E-3
+ 35.35 10.192566 35.570232 -1.2009621E-3
+ 35.35 10.537398 35.50679 -6.382462E-5
+ 35.35 11.032608 35.51873 1.1356265E-3
+ 35.35 11.502618 35.562675 2.0008725E-3
+ 35.35 11.875091 35.60142 2.501396E-3
+ 35.35 12.212321 35.637622 2.918349E-3
+ 35.35 12.491444 35.669437 3.3020987E-3
+ 35.35 12.700333 35.692363 3.6574273E-3
+ 35.35 12.871945 35.71052 3.977796E-3
+ 35.35 13.023413 35.72864 4.3024467E-3
+ 35.35 13.139731 35.7414 4.6370634E-3
+ 35.35 13.249571 35.755092 4.952833E-3
+ 35.35 13.363442 35.771526 5.2532972E-3
+ 35.35 13.452609 35.781143 5.536058E-3
+ 35.35 13.525752 35.78949 5.7910266E-3
+ 35.35 13.599492 35.798137 6.0192947E-3
+ 35.35 13.660223 35.803363 6.226469E-3
+ 35.35 13.717523 35.81068 6.422519E-3
+ 35.35 13.755864 35.813304 6.6098887E-3
+ 35.35 13.802494 35.81859 6.7894724E-3
+ 35.35 13.854804 35.82492 6.9602006E-3
+ 35.35 13.900122 35.83156 7.1185217E-3
+ 35.35 13.952055 35.837905 7.2692874E-3
+ 35.35 14.009943 35.844295 7.414539E-3
+ 35.35 14.05549 35.84725 7.5520672E-3
+ 35.35 14.106498 35.854873 7.685907E-3
+ 35.35 14.167864 35.862285 7.818236E-3
+ 35.35 14.232073 35.87011 7.945765E-3
+ 35.35 14.294218 35.87509 8.071467E-3
+ 35.35 14.369085 35.88307 8.199907E-3
+ 35.35 14.473298 35.89213 8.334254E-3
+ 35.35 14.60334 35.90678 8.4709664E-3
+ 35.35 14.762205 35.920112 8.615545E-3
+ 35.35 14.91694 35.922637 8.756123E-3
+ 35.35 15.081609 35.924354 8.879381E-3
+ 35.35 15.413687 35.932376 9.009753E-3
+ 35.35 15.942285 35.92844 9.095136E-3
+ 35.35 16.59148 35.94388 9.086264E-3
+ 35.35 17.2516 35.938385 9.006333E-3
+ 35.35 18.044336 35.950286 9.022319E-3
+ 35.35 18.810074 35.96751 9.242535E-3
+ 35.35 19.507181 35.97402 9.518138E-3
+ 35.35 20.078857 35.96328 9.725524E-3
+ 35.35 20.224028 35.96186 9.871632E-3
+ 35.35 20.240417 35.96273 0.010001895
+ 35.35 20.243853 35.96327 0.010131385
+ 35.35 20.231552 35.961513 0.010263868
+ 35.35 20.196869 35.964565 0.010466359
+ 35.4 2.5229678 34.898986 0.0E+0
+ 35.4 2.5113842 34.901866 1.8165293E-4
+ 35.4 2.5199637 34.90769 4.119852E-4
+ 35.4 2.5475494 34.915275 4.7309635E-4
+ 35.4 2.5876564 34.921825 3.419769E-4
+ 35.4 2.658863 34.932 8.6422383E-5
+ 35.4 2.7602481 34.943004 -1.2726324E-4
+ 35.4 2.9219512 34.955234 -2.0845771E-4
+ 35.4 3.1254532 34.966053 -2.2388893E-4
+ 35.4 3.4232783 34.981765 -3.135233E-4
+ 35.4 3.692162 34.989582 -5.9101585E-4
+ 35.4 4.032609 35.017623 -1.495973E-3
+ 35.4 4.568114 35.081417 -2.9147423E-3
+ 35.4 5.654618 35.241893 -4.2148297E-3
+ 35.4 7.425674 35.52795 -5.2335406E-3
+ 35.4 8.89211 35.73759 -5.460315E-3
+ 35.4 9.618158 35.766563 -4.5268973E-3
+ 35.4 10.005226 35.704524 -3.062428E-3
+ 35.4 10.214621 35.57402 -1.8346365E-3
+ 35.4 10.554492 35.50924 -7.741623E-4
+ 35.4 11.047674 35.520523 3.8208972E-4
+ 35.4 11.513147 35.56432 1.2159446E-3
+ 35.4 11.886044 35.603145 1.6866844E-3
+ 35.4 12.223291 35.63927 2.0740767E-3
+ 35.4 12.505074 35.671527 2.4284038E-3
+ 35.4 12.713947 35.69432 2.7583301E-3
+ 35.4 12.886791 35.71265 3.0572074E-3
+ 35.4 13.043947 35.7317 3.3653848E-3
+ 35.4 13.162456 35.744735 3.6881857E-3
+ 35.4 13.273937 35.75872 3.9952173E-3
+ 35.4 13.390353 35.77552 4.2893146E-3
+ 35.4 13.480499 35.78539 4.566754E-3
+ 35.4 13.55421 35.793922 4.816745E-3
+ 35.4 13.627746 35.802604 5.040373E-3
+ 35.4 13.689286 35.808044 5.2429572E-3
+ 35.4 13.747227 35.81541 5.4346425E-3
+ 35.4 13.786049 35.818126 5.6178653E-3
+ 35.4 13.832982 35.823402 5.7936175E-3
+ 35.4 13.884949 35.829734 5.9609753E-3
+ 35.4 13.929245 35.83621 6.1163664E-3
+ 35.4 13.981078 35.842483 6.2646283E-3
+ 35.4 14.038126 35.848735 6.407563E-3
+ 35.4 14.083388 35.851726 6.543219E-3
+ 35.4 14.133953 35.859188 6.6757663E-3
+ 35.4 14.195305 35.866615 6.807172E-3
+ 35.4 14.259386 35.87459 6.9342833E-3
+ 35.4 14.322578 35.879734 7.060118E-3
+ 35.4 14.3974 35.887657 7.1894517E-3
+ 35.4 14.502091 35.89664 7.325426E-3
+ 35.4 14.633148 35.911735 7.4643762E-3
+ 35.4 14.794776 35.925373 7.612031E-3
+ 35.4 14.948659 35.928447 7.7560334E-3
+ 35.4 15.113423 35.93037 7.884342E-3
+ 35.4 15.44773 35.938632 8.0223E-3
+ 35.4 15.967104 35.934936 8.117991E-3
+ 35.4 16.608126 35.950035 8.122729E-3
+ 35.4 17.263798 35.94485 8.060621E-3
+ 35.4 18.076632 35.956806 8.097104E-3
+ 35.4 18.853008 35.973854 8.340319E-3
+ 35.4 19.546528 35.98062 8.639207E-3
+ 35.4 20.111986 35.970603 8.860192E-3
+ 35.4 20.254635 35.969161 9.009512E-3
+ 35.4 20.270967 35.97012 9.13956E-3
+ 35.4 20.274635 35.970687 9.268372E-3
+ 35.4 20.26349 35.96923 9.400263E-3
+ 35.4 20.228134 35.972026 9.600756E-3
+ 35.45 2.5240764 34.8991 0.0E+0
+ 35.45 2.512169 34.90183 1.993666E-4
+ 35.45 2.5207202 34.907714 4.4341493E-4
+ 35.45 2.5478584 34.915317 5.167446E-4
+ 35.45 2.5879566 34.92197 3.8882577E-4
+ 35.45 2.6596984 34.93223 1.2771558E-4
+ 35.45 2.7616405 34.943256 -1.021757E-4
+ 35.45 2.9240007 34.955497 -2.0570339E-4
+ 35.45 3.128259 34.966426 -2.416806E-4
+ 35.45 3.428031 34.98247 -3.5400866E-4
+ 35.45 3.6998562 34.990844 -6.6398514E-4
+ 35.45 4.0478196 35.02057 -1.6173884E-3
+ 35.45 4.5882964 35.085308 -3.094711E-3
+ 35.45 5.6839284 35.24747 -4.4496143E-3
+ 35.45 7.467214 35.536472 -5.52046E-3
+ 35.45 8.927347 35.7447 -5.822568E-3
+ 35.45 9.637111 35.769454 -4.987552E-3
+ 35.45 10.02663 35.70784 -3.6069017E-3
+ 35.45 10.236878 35.577972 -2.4634408E-3
+ 35.45 10.571539 35.51176 -1.4806598E-3
+ 35.45 11.062489 35.522296 -3.6799212E-4
+ 35.45 11.523294 35.56592 4.361364E-4
+ 35.45 11.896619 35.604835 8.8003475E-4
+ 35.45 12.23367 35.640857 1.2401493E-3
+ 35.45 12.517983 35.673534 1.5667655E-3
+ 35.45 12.726785 35.696186 1.8726338E-3
+ 35.45 12.900883 35.714702 2.1511062E-3
+ 35.45 13.063855 35.73469 2.4434304E-3
+ 35.45 13.184686 35.748027 2.7546877E-3
+ 35.45 13.297897 35.762317 3.0531813E-3
+ 35.45 13.416888 35.77948 3.3410338E-3
+ 35.45 13.508031 35.789608 3.6132247E-3
+ 35.45 13.582346 35.79834 3.858351E-3
+ 35.45 13.655647 35.80705 4.0775192E-3
+ 35.45 13.717972 35.812702 4.2757345E-3
+ 35.45 13.77658 35.820125 4.463257E-3
+ 35.45 13.815901 35.82294 4.642501E-3
+ 35.45 13.863208 35.828216 4.814575E-3
+ 35.45 13.914837 35.834556 4.9787396E-3
+ 35.45 13.958167 35.84087 5.1314276E-3
+ 35.45 14.009897 35.847064 5.277425E-3
+ 35.45 14.066126 35.853183 5.418291E-3
+ 35.45 14.111204 35.85622 5.5523617E-3
+ 35.45 14.161327 35.863506 5.683929E-3
+ 35.45 14.222714 35.870956 5.814731E-3
+ 35.45 14.286742 35.87909 5.941769E-3
+ 35.45 14.351041 35.8844 6.068092E-3
+ 35.45 14.425919 35.892265 6.198665E-3
+ 35.45 14.531079 35.90116 6.336569E-3
+ 35.45 14.663139 35.916675 6.4780274E-3
+ 35.45 14.827536 35.930606 6.628952E-3
+ 35.45 14.980673 35.934265 6.7765982E-3
+ 35.45 15.145978 35.93643 6.910328E-3
+ 35.45 15.482673 35.944942 7.056301E-3
+ 35.45 15.993242 35.941505 7.1631167E-3
+ 35.45 16.626259 35.956245 7.182985E-3
+ 35.45 17.278084 35.951416 7.140755E-3
+ 35.45 18.110785 35.963405 7.1990597E-3
+ 35.45 18.897982 35.980243 7.464979E-3
+ 35.45 19.587622 35.9873 7.786232E-3
+ 35.45 20.145964 35.97807 8.020386E-3
+ 35.45 20.285727 35.97663 8.173046E-3
+ 35.45 20.302006 35.9777 8.303134E-3
+ 35.45 20.30596 35.978324 8.431462E-3
+ 35.45 20.295963 35.97715 8.562831E-3
+ 35.45 20.259792 35.979686 8.761355E-3
+ 35.5 2.525191 34.899204 0.0E+0
+ 35.5 2.5129623 34.901782 2.1714004E-4
+ 35.5 2.521466 34.90773 4.7495841E-4
+ 35.5 2.5481474 34.91536 5.6115625E-4
+ 35.5 2.5882136 34.922107 4.3727777E-4
+ 35.5 2.6604847 34.932456 1.7112293E-4
+ 35.5 2.7629826 34.943511 -7.503819E-5
+ 35.5 2.9260194 34.95577 -2.0158438E-4
+ 35.5 3.1310265 34.966804 -2.5883625E-4
+ 35.5 3.432716 34.983184 -3.9367694E-4
+ 35.5 3.7075293 34.992126 -7.345357E-4
+ 35.5 4.063165 35.02357 -1.7316424E-3
+ 35.5 4.608756 35.089282 -3.2607514E-3
+ 35.5 5.713273 35.2531 -4.6646893E-3
+ 35.5 7.5080533 35.54493 -5.7841367E-3
+ 35.5 8.961409 35.75166 -6.162482E-3
+ 35.5 9.655959 35.77242 -5.4308334E-3
+ 35.5 10.048074 35.71124 -4.139019E-3
+ 35.5 10.259267 35.582073 -3.0822183E-3
+ 35.5 10.588502 35.51434 -2.177457E-3
+ 35.5 11.077025 35.524055 -1.1082588E-3
+ 35.5 11.533056 35.567481 -3.3176911E-4
+ 35.5 11.906816 35.606487 8.8614266E-5
+ 35.5 12.243468 35.642383 4.2406705E-4
+ 35.5 12.530171 35.67546 7.2498264E-4
+ 35.5 12.738858 35.69796 1.008383E-3
+ 35.5 12.91423 35.716667 1.267735E-3
+ 35.5 13.083114 35.73761 1.5449718E-3
+ 35.5 13.206394 35.751266 1.8450638E-3
+ 35.5 13.321418 35.765865 2.1353012E-3
+ 35.5 13.443008 35.78339 2.4170952E-3
+ 35.5 13.535163 35.793785 2.6841631E-3
+ 35.5 13.610117 35.802726 2.9245892E-3
+ 35.5 13.683162 35.811454 3.1395261E-3
+ 35.5 13.746248 35.817325 3.3336405E-3
+ 35.5 13.805545 35.824802 3.517246E-3
+ 35.5 13.845384 35.82774 3.6927254E-3
+ 35.5 13.893138 35.833026 3.8613162E-3
+ 35.5 13.94444 35.839363 4.022506E-3
+ 35.5 13.986866 35.84552 4.1727554E-3
+ 35.5 14.038493 35.85164 4.3167644E-3
+ 35.5 14.093929 35.857624 4.455847E-3
+ 35.5 14.138929 35.860717 4.588652E-3
+ 35.5 14.188618 35.86783 4.719584E-3
+ 35.5 14.25009 35.8753 4.8501305E-3
+ 35.5 14.314143 35.88359 4.977465E-3
+ 35.5 14.379604 35.88908 5.1046563E-3
+ 35.5 14.454642 35.89689 5.2368333E-3
+ 35.5 14.560259 35.905685 5.376985E-3
+ 35.5 14.693305 35.921592 5.521237E-3
+ 35.5 14.860459 35.935802 5.6756334E-3
+ 35.5 15.012964 35.940067 5.8271475E-3
+ 35.5 15.179259 35.942527 5.966668E-3
+ 35.5 15.518506 35.951286 6.121073E-3
+ 35.5 16.020748 35.948135 6.239804E-3
+ 35.5 16.645994 35.962493 6.276276E-3
+ 35.5 17.294588 35.958072 6.255887E-3
+ 35.5 18.146778 35.97007 6.3372356E-3
+ 35.5 18.944876 35.98667 6.625445E-3
+ 35.5 19.630367 35.99405 6.9680023E-3
+ 35.5 20.180761 35.985671 7.2148023E-3
+ 35.5 20.317305 35.98426 7.3709017E-3
+ 35.5 20.333534 35.98547 7.501278E-3
+ 35.5 20.337833 35.98617 7.6293046E-3
+ 35.5 20.328962 35.985275 7.7602076E-3
+ 35.5 20.29184 35.98755 7.95677E-3
+ 35.55 2.5263016 34.8993 0.0E+0
+ 35.55 2.5137574 34.901733 2.3493021E-4
+ 35.55 2.5221958 34.90774 5.0657265E-4
+ 35.55 2.5484137 34.91539 6.0624396E-4
+ 35.55 2.588425 34.92224 4.872219E-4
+ 35.55 2.661217 34.93268 2.165419E-4
+ 35.55 2.7642667 34.94377 -4.5891018E-5
+ 35.55 2.9279983 34.956047 -1.9602389E-4
+ 35.55 3.1337416 34.967182 -2.751455E-4
+ 35.55 3.437312 34.983901 -4.3212805E-4
+ 35.55 3.715145 34.99342 -8.0197013E-4
+ 35.55 4.0785794 35.026615 -1.8376355E-3
+ 35.55 4.6294207 35.093326 -3.4113412E-3
+ 35.55 5.7425527 35.258762 -4.858149E-3
+ 35.55 7.5480437 35.553283 -6.022328E-3
+ 35.55 8.994171 35.758441 -6.477293E-3
+ 35.55 9.674657 35.775455 -5.853201E-3
+ 35.55 10.0695 35.714714 -4.6545146E-3
+ 35.55 10.281718 35.586307 -3.685986E-3
+ 35.55 10.605345 35.516967 -2.85889E-3
+ 35.55 11.091255 35.52578 -1.8325692E-3
+ 35.55 11.542434 35.568984 -1.0812443E-3
+ 35.55 11.916642 35.60809 -6.807097E-4
+ 35.55 12.252704 35.643844 -3.6700454E-4
+ 35.55 12.541646 35.67729 -8.950847E-5
+ 35.55 12.750186 35.699634 1.7323717E-4
+ 35.55 12.926847 35.71854 4.1493363E-4
+ 35.55 13.101706 35.740436 6.779826E-4
+ 35.55 13.227554 35.754444 9.673843E-4
+ 35.55 13.344472 35.76936 1.249725E-3
+ 35.55 13.468672 35.787242 1.5257052E-3
+ 35.55 13.561852 35.79791 1.7878246E-3
+ 35.55 13.637486 35.807067 2.0237606E-3
+ 35.55 13.71026 35.81581 2.2347366E-3
+ 35.55 13.774084 35.8219 2.425061E-3
+ 35.55 13.834092 35.82944 2.6050393E-3
+ 35.55 13.874466 35.832504 2.7770074E-3
+ 35.55 13.92274 35.837814 2.9423481E-3
+ 35.55 13.973731 35.844154 3.1008166E-3
+ 35.55 14.015324 35.85016 3.248925E-3
+ 35.55 14.066849 35.85619 3.3912544E-3
+ 35.55 14.121525 35.86205 3.528871E-3
+ 35.55 14.166554 35.86521 3.6607591E-3
+ 35.55 14.215824 35.87213 3.791425E-3
+ 35.55 14.277435 35.87964 3.9220904E-3
+ 35.55 14.341592 35.888092 4.050113E-3
+ 35.55 14.408268 35.89376 4.17857E-3
+ 35.55 14.483572 35.901512 4.31273E-3
+ 35.55 14.589631 35.910205 4.4554593E-3
+ 35.55 14.723639 35.926475 4.6027987E-3
+ 35.55 14.893518 35.94095 4.7608735E-3
+ 35.55 15.045517 35.945846 4.9164826E-3
+ 35.55 15.213254 35.94864 5.062156E-3
+ 35.55 15.555216 35.95766 5.225393E-3
+ 35.55 16.049673 35.95481 5.356796E-3
+ 35.55 16.667444 35.96877 5.411282E-3
+ 35.55 17.313437 35.9648 5.414593E-3
+ 35.55 18.18459 35.976787 5.520093E-3
+ 35.55 18.993565 35.993122 5.8300653E-3
+ 35.55 19.67466 36.00086 6.192732E-3
+ 35.55 20.216343 35.993396 6.4515667E-3
+ 35.55 20.349367 35.99205 6.611179E-3
+ 35.55 20.36556 35.99342 6.7420806E-3
+ 35.55 20.370255 35.99423 6.8699796E-3
+ 35.55 20.362474 35.993602 7.000457E-3
+ 35.55 20.324274 35.99561 7.1950475E-3
+ 35.6 2.5273985 34.89938 0.0E+0
+ 35.6 2.5145468 34.901676 2.5269036E-4
+ 35.6 2.522904 34.90774 5.382055E-4
+ 35.6 2.5486543 34.915412 6.5190473E-4
+ 35.6 2.588587 34.92237 5.385246E-4
+ 35.6 2.66189 34.9329 2.638447E-4
+ 35.6 2.7654857 34.944034 -1.4798491E-5
+ 35.6 2.9299287 34.95633 -1.8896515E-4
+ 35.6 3.136392 34.967567 -2.904161E-4
+ 35.6 3.4417994 34.984615 -4.6898933E-4
+ 35.6 3.7226684 34.99472 -8.656448E-4
+ 35.6 4.093997 35.029685 -1.9343783E-3
+ 35.6 4.6502175 35.097423 -3.5451422E-3
+ 35.6 5.7716703 35.26444 -5.0283325E-3
+ 35.6 7.587043 35.561511 -6.2330653E-3
+ 35.6 9.025526 35.76503 -6.7644855E-3
+ 35.6 9.69316 35.778556 -6.251325E-3
+ 35.6 10.090855 35.718254 -5.1493202E-3
+ 35.6 10.304163 35.590656 -4.2699733E-3
+ 35.6 10.622037 35.519638 -3.5195373E-3
+ 35.6 11.105157 35.527473 -2.5350528E-3
+ 35.6 11.55143 35.57043 -1.806074E-3
+ 35.6 11.926105 35.609642 -1.4214312E-3
+ 35.6 12.261399 35.64524 -1.1263004E-3
+ 35.6 12.552422 35.67903 -8.697029E-4
+ 35.6 12.760789 35.70121 -6.256003E-4
+ 35.6 12.938751 35.72032 -3.9993453E-4
+ 35.6 13.119618 35.743175 -1.5005391E-4
+ 35.6 13.248144 35.757545 1.2922172E-4
+ 35.6 13.367031 35.772785 4.0409385E-4
+ 35.6 13.493843 35.79102 6.745573E-4
+ 35.6 13.588061 35.801967 9.3194685E-4
+ 35.6 13.664414 35.81135 1.1636442E-3
+ 35.6 13.736914 35.82011 1.370968E-3
+ 35.6 13.801453 35.826416 1.5578496E-3
+ 35.6 13.862192 35.83402 1.7345253E-3
+ 35.6 13.90312 35.837223 1.9032721E-3
+ 35.6 13.951985 35.842567 2.0656296E-3
+ 35.6 14.00269 35.848907 2.2216602E-3
+ 35.6 14.043525 35.854766 2.3679544E-3
+ 35.6 14.094949 35.860713 2.5089408E-3
+ 35.6 14.148905 35.86645 2.6454364E-3
+ 35.6 14.194072 35.86969 2.7767797E-3
+ 35.6 14.242945 35.876415 2.9075692E-3
+ 35.6 14.304752 35.883964 3.038746E-3
+ 35.6 14.369093 35.89258 3.1678632E-3
+ 35.6 14.437032 35.898437 3.297997E-3
+ 35.6 14.51271 35.90613 3.434528E-3
+ 35.6 14.619196 35.91472 3.580172E-3
+ 35.6 14.754134 35.93132 3.7308977E-3
+ 35.6 14.926688 35.94604 3.892857E-3
+ 35.6 15.078317 35.95159 4.0527856E-3
+ 35.6 15.247947 35.954753 4.2049642E-3
+ 35.6 15.592789 35.96404 4.377411E-3
+ 35.6 16.080057 35.96152 4.5221997E-3
+ 35.6 16.690714 35.975063 4.596037E-3
+ 35.6 17.334736 35.971591 4.624787E-3
+ 35.6 18.224188 35.983547 4.7554196E-3
+ 35.6 19.043917 35.99959 5.086517E-3
+ 35.6 19.720383 36.007717 5.4679773E-3
+ 35.6 20.252665 36.001235 5.7381535E-3
+ 35.6 20.381914 35.999984 5.9013222E-3
+ 35.6 20.398085 36.00155 6.0329777E-3
+ 35.6 20.403225 36.002494 6.1609107E-3
+ 35.6 20.39649 36.002132 6.2909885E-3
+ 35.6 20.35709 36.00387 6.483576E-3
+ 35.65 2.5284717 34.89945 0.0E+0
+ 35.65 2.5153224 34.901615 2.703701E-4
+ 35.65 2.523585 34.907726 5.697954E-4
+ 35.65 2.5488667 34.91543 6.98019E-4
+ 35.65 2.5886974 34.922492 5.910296E-4
+ 35.65 2.6624991 34.933116 3.1287834E-4
+ 35.65 2.7666327 34.944297 1.8151159E-5
+ 35.65 2.9318015 34.956615 -1.8037188E-4
+ 35.65 3.1389641 34.967952 -3.0447513E-4
+ 35.65 3.4461576 34.985324 -5.0391815E-4
+ 35.65 3.7300634 34.996025 -9.2497415E-4
+ 35.65 4.109351 35.032772 -2.0209986E-3
+ 35.65 4.671073 35.10156 -3.6610094E-3
+ 35.65 5.80053 35.270107 -5.1738373E-3
+ 35.65 7.6249175 35.569583 -6.414665E-3
+ 35.65 9.055376 35.771396 -7.0218066E-3
+ 35.65 9.711427 35.78172 -6.6221137E-3
+ 35.65 10.112084 35.721855 -5.619603E-3
+ 35.65 10.326532 35.59511 -4.829663E-3
+ 35.65 10.638546 35.522342 -4.1542663E-3
+ 35.65 11.11871 35.529125 -3.2101608E-3
+ 35.65 11.560054 35.57181 -2.5004111E-3
+ 35.65 11.935217 35.611133 -2.1274641E-3
+ 35.65 12.26958 35.64656 -1.8475174E-3
+ 35.65 12.562518 35.680667 -1.609092E-3
+ 35.65 12.770698 35.702682 -1.3814497E-3
+ 35.65 12.949967 35.72201 -1.1700521E-3
+ 35.65 13.136842 35.74581 -9.322152E-4
+ 35.65 13.268148 35.760566 -6.6242285E-4
+ 35.65 13.389074 35.776134 -3.945298E-4
+ 35.65 13.51849 35.794712 -1.2923988E-4
+ 35.65 13.613753 35.805946 1.2367731E-4
+ 35.65 13.690869 35.815563 3.5142281E-4
+ 35.65 13.7631 35.824333 5.554343E-4
+ 35.65 13.82833 35.830856 7.392516E-4
+ 35.65 13.889821 35.838527 9.129801E-4
+ 35.65 13.931318 35.841884 1.0788258E-3
+ 35.65 13.980847 35.84727 1.2384959E-3
+ 35.65 14.031296 35.853614 1.3923985E-3
+ 35.65 14.071453 35.85933 1.5372279E-3
+ 35.65 14.122783 35.865192 1.6772302E-3
+ 35.65 14.176061 35.870815 1.8129715E-3
+ 35.65 14.221479 35.87414 1.94416E-3
+ 35.65 14.269982 35.880672 2.0754777E-3
+ 35.65 14.332046 35.88827 2.2075714E-3
+ 35.65 14.396652 35.897045 2.3382005E-3
+ 35.65 14.465899 35.903095 2.470428E-3
+ 35.65 14.542058 35.91074 2.6097206E-3
+ 35.65 14.648954 35.919212 2.7586184E-3
+ 35.65 14.784784 35.93611 2.91303E-3
+ 35.65 14.959944 35.95106 3.0790758E-3
+ 35.65 15.11135 35.957286 3.2435443E-3
+ 35.65 15.283318 35.96086 3.402562E-3
+ 35.65 15.631207 35.970413 3.5845697E-3
+ 35.65 16.111935 35.968246 3.7434063E-3
+ 35.65 16.715893 35.98136 3.8378443E-3
+ 35.65 17.358582 35.978424 3.8936377E-3
+ 35.65 18.265533 35.99033 4.0502543E-3
+ 35.65 19.09579 36.006065 4.4017303E-3
+ 35.65 19.767414 36.014625 4.8005566E-3
+ 35.65 20.289686 36.009181 5.081307E-3
+ 35.65 20.414938 36.008064 5.2480464E-3
+ 35.65 20.431107 36.009853 5.3806705E-3
+ 35.65 20.436739 36.010967 5.508787E-3
+ 35.65 20.43099 36.010856 5.638477E-3
+ 35.65 20.390282 36.01232 5.829014E-3
+ 35.7 2.5295116 34.8995 0.0E+0
+ 35.7 2.516077 34.901546 2.8791531E-4
+ 35.7 2.524234 34.907703 6.012707E-4
+ 35.7 2.5490481 34.915435 7.4445083E-4
+ 35.7 2.5887534 34.922607 6.445581E-4
+ 35.7 2.66304 34.93333 3.6346496E-4
+ 35.7 2.767701 34.944564 5.284606E-5
+ 35.7 2.9336082 34.956905 -1.702286E-4
+ 35.7 3.141446 34.968334 -3.1716984E-4
+ 35.7 3.4503684 34.986022 -5.3660396E-4
+ 35.7 3.7372951 34.99732 -9.79435E-4
+ 35.7 4.124575 35.03586 -2.0967482E-3
+ 35.7 4.6919145 35.10572 -3.7579988E-3
+ 35.7 5.829038 35.27575 -5.293526E-3
+ 35.7 7.661543 35.57747 -6.5657375E-3
+ 35.7 9.083643 35.77753 -7.247286E-3
+ 35.7 9.729418 35.78494 -6.9627384E-3
+ 35.7 10.133137 35.725502 -6.0617947E-3
+ 35.7 10.348759 35.599647 -5.360827E-3
+ 35.7 10.654846 35.52507 -4.7582746E-3
+ 35.7 11.131899 35.530735 -3.8527122E-3
+ 35.7 11.568316 35.573116 -3.1588263E-3
+ 35.7 11.943992 35.612567 -2.7931972E-3
+ 35.7 12.277275 35.64781 -2.5248727E-3
+ 35.7 12.571957 35.6822 -2.3017234E-3
+ 35.7 12.779946 35.704055 -2.0882175E-3
+ 35.7 12.960525 35.723602 -1.8892111E-3
+ 35.7 13.153372 35.748336 -1.6622045E-3
+ 35.7 13.28755 35.763496 -1.4011847E-3
+ 35.7 13.41058 35.779392 -1.1397289E-3
+ 35.7 13.542579 35.79831 -8.7923044E-4
+ 35.7 13.638895 35.80983 -6.3049525E-4
+ 35.7 13.716819 35.819694 -4.0638534E-4
+ 35.7 13.788794 35.82847 -2.0532013E-4
+ 35.7 13.854696 35.83521 -2.4164136E-5
+ 35.7 13.916954 35.84295 1.4699719E-4
+ 35.7 13.959038 35.846477 3.1028676E-4
+ 35.7 14.009302 35.851917 4.6758886E-4
+ 35.7 14.059531 35.85826 6.1969313E-4
+ 35.7 14.099096 35.863845 7.63425E-4
+ 35.7 14.150341 35.869617 9.028184E-4
+ 35.7 14.202989 35.875133 1.0381878E-3
+ 35.7 14.248771 35.87855 1.1696238E-3
+ 35.7 14.296938 35.884883 1.3018823E-3
+ 35.7 14.359322 35.89254 1.4353062E-3
+ 35.7 14.424273 35.90148 1.5678673E-3
+ 35.7 14.494868 35.907726 1.7026059E-3
+ 35.7 14.571618 35.91532 1.8450497E-3
+ 35.7 14.678906 35.92368 1.9975358E-3
+ 35.7 14.815585 35.94084 2.1559274E-3
+ 35.7 14.993264 35.956 2.3262535E-3
+ 35.7 15.144603 35.962917 2.4954718E-3
+ 35.7 15.319348 35.966945 2.661642E-3
+ 35.7 15.670452 35.976772 2.853528E-3
+ 35.7 16.145334 35.97497 3.0270165E-3
+ 35.7 16.743073 35.987655 3.1432064E-3
+ 35.7 17.385054 35.985282 3.2274995E-3
+ 35.7 18.308578 35.997127 3.4108085E-3
+ 35.7 19.14903 36.012546 3.781817E-3
+ 35.7 19.815622 36.02157 4.196482E-3
+ 35.7 20.327358 36.01722 4.4869706E-3
+ 35.7 20.448435 36.016277 4.657266E-3
+ 35.7 20.464624 36.018325 4.7910595E-3
+ 35.7 20.470793 36.01964 4.919495E-3
+ 35.7 20.46596 36.019775 5.0487956E-3
+ 35.7 20.423843 36.020965 5.2372203E-3
+ 35.75 2.5305085 34.899536 0.0E+0
+ 35.75 2.5168027 34.90147 3.052683E-4
+ 35.75 2.5248458 34.90767 6.3254963E-4
+ 35.75 2.549196 34.915431 7.9104775E-4
+ 35.75 2.588753 34.922714 6.9890916E-4
+ 35.75 2.6635081 34.93354 4.1540243E-4
+ 35.75 2.7686841 34.94483 8.915122E-5
+ 35.75 2.9353413 34.957202 -1.5854051E-4
+ 35.75 3.1438255 34.968715 -3.2836836E-4
+ 35.75 3.4544122 34.986713 -5.667698E-4
+ 35.75 3.7443292 34.998603 -1.0285696E-3
+ 35.75 4.1396026 35.03893 -2.1610055E-3
+ 35.75 4.71267 35.109886 -3.8353707E-3
+ 35.75 5.857104 35.281345 -5.3865327E-3
+ 35.75 7.6968045 35.58514 -6.6851945E-3
+ 35.75 9.110261 35.783412 -7.439246E-3
+ 35.75 9.747097 35.788204 -7.2706593E-3
+ 35.75 10.153967 35.729187 -6.4726197E-3
+ 35.75 10.370778 35.60425 -5.8595635E-3
+ 35.75 10.67091 35.527812 -5.3271325E-3
+ 35.75 11.144712 35.532287 -4.4579403E-3
+ 35.75 11.57623 35.57435 -3.7763575E-3
+ 35.75 11.95245 35.61393 -3.4135445E-3
+ 35.75 12.284519 35.648986 -3.1531553E-3
+ 35.75 12.580767 35.68363 -2.942256E-3
+ 35.75 12.78857 35.70532 -2.7404516E-3
+ 35.75 12.970457 35.725093 -2.5518711E-3
+ 35.75 13.169207 35.750747 -2.3344098E-3
+ 35.75 13.306341 35.76633 -2.0813951E-3
+ 35.75 13.431532 35.78256 -1.8257922E-3
+ 35.75 13.566085 35.8018 -1.5696716E-3
+ 35.75 13.663459 35.81361 -1.3248014E-3
+ 35.75 13.742235 35.823726 -1.1039875E-3
+ 35.75 13.813979 35.832508 -9.0548343E-4
+ 35.75 13.880532 35.839466 -7.2656775E-4
+ 35.75 13.943574 35.84728 -5.5757543E-4
+ 35.75 13.986261 35.850986 -3.9647793E-4
+ 35.75 14.037329 35.85649 -2.4120658E-4
+ 35.75 14.087381 35.86284 -9.0556015E-5
+ 35.75 14.126445 35.868293 5.2457213E-5
+ 35.75 14.177615 35.87398 1.9162724E-4
+ 35.75 14.229686 35.87939 3.2701715E-4
+ 35.75 14.275947 35.882915 4.591082E-4
+ 35.75 14.323818 35.889045 5.9272244E-4
+ 35.75 14.386585 35.89677 7.278903E-4
+ 35.75 14.451962 35.905872 8.6280156E-4
+ 35.75 14.523941 35.91232 1.0004633E-3
+ 35.75 14.601392 35.919872 1.146438E-3
+ 35.75 14.709053 35.928115 1.3028382E-3
+ 35.75 14.846532 35.945503 1.4654935E-3
+ 35.75 15.026625 35.960857 1.640282E-3
+ 35.75 15.178061 35.968475 1.8144457E-3
+ 35.75 15.356014 35.97299 1.9880537E-3
+ 35.75 15.7105 35.983097 2.1900965E-3
+ 35.75 16.180279 35.981685 2.3787743E-3
+ 35.75 16.772331 35.99393 2.5177567E-3
+ 35.75 17.414217 35.992156 2.6318442E-3
+ 35.75 18.353273 36.003925 2.842408E-3
+ 35.75 19.203485 36.019016 3.2320045E-3
+ 35.75 19.864874 36.02854 3.6608944E-3
+ 35.75 20.36563 36.025337 3.960225E-3
+ 35.75 20.482395 36.024616 4.1340342E-3
+ 35.75 20.498636 36.026962 4.2691812E-3
+ 35.75 20.50538 36.02851 4.398057E-3
+ 35.75 20.501377 36.028884 4.526953E-3
+ 35.75 20.457764 36.0298 4.7131902E-3
+ 35.8 2.531453 34.899555 0.0E+0
+ 35.8 2.5174927 34.901386 3.22368E-4
+ 35.8 2.5254156 34.90762 6.635401E-4
+ 35.8 2.549308 34.91542 8.376412E-4
+ 35.8 2.5886936 34.922813 7.538605E-4
+ 35.8 2.6639 34.933742 4.6846547E-4
+ 35.8 2.7695765 34.945102 1.2690929E-4
+ 35.8 2.936993 34.9575 -1.4533348E-4
+ 35.8 3.1460916 34.969093 -3.3796016E-4
+ 35.8 3.4582724 34.98739 -5.941738E-4
+ 35.8 3.7511322 34.999866 -1.0719884E-3
+ 35.8 4.15437 35.041973 -2.2132813E-3
+ 35.8 4.733268 35.114048 -3.8925947E-3
+ 35.8 5.8846397 35.286872 -5.4522636E-3
+ 35.8 7.7305974 35.59257 -6.772253E-3
+ 35.8 9.13518 35.789031 -7.5963186E-3
+ 35.8 9.764432 35.79151 -7.543645E-3
+ 35.8 10.174526 35.732902 -6.8491287E-3
+ 35.8 10.392527 35.608905 -6.322329E-3
+ 35.8 10.686718 35.53056 -5.8568185E-3
+ 35.8 11.157139 35.533786 -5.021532E-3
+ 35.8 11.583814 35.5755 -4.3485523E-3
+ 35.8 11.960608 35.615226 -3.9839902E-3
+ 35.8 12.291348 35.650085 -3.7277743E-3
+ 35.8 12.588981 35.684955 -3.526008E-3
+ 35.8 12.796613 35.70648 -3.3333934E-3
+ 35.8 12.979801 35.72649 -3.1532102E-3
+ 35.8 13.18435 35.753036 -2.9439553E-3
+ 35.8 13.324511 35.769054 -2.6981343E-3
+ 35.8 13.451915 35.785614 -2.447767E-3
+ 35.8 13.588982 35.805171 -2.195587E-3
+ 35.8 13.687416 35.817272 -1.9542446E-3
+ 35.8 13.76709 35.82765 -1.7363699E-3
+ 35.8 13.838635 35.836437 -1.5400296E-3
+ 35.8 13.905824 35.84361 -1.3629225E-3
+ 35.8 13.969663 35.8515 -1.1956894E-3
+ 35.8 14.01297 35.855396 -1.0364071E-3
+ 35.8 14.064909 35.86098 -8.828171E-4
+ 35.8 14.114832 35.86733 -7.3326675E-4
+ 35.8 14.15349 35.87267 -5.905879E-4
+ 35.8 14.204598 35.878265 -4.5125154E-4
+ 35.8 14.25615 35.88358 -3.1544527E-4
+ 35.8 14.303004 35.88722 -1.8229191E-4
+ 35.8 14.350627 35.89315 -4.6911482E-5
+ 35.8 14.413844 35.900955 9.040873E-5
+ 35.8 14.479724 35.910217 2.2807872E-4
+ 35.8 14.553119 35.916862 3.690635E-4
+ 35.8 14.631378 35.92438 5.189342E-4
+ 35.8 14.739397 35.93251 6.795594E-4
+ 35.8 14.877618 35.95009 8.467465E-4
+ 35.8 15.060004 35.96562 1.0261624E-3
+ 35.8 15.211713 35.97395 1.2054485E-3
+ 35.8 15.393291 35.978984 1.3867476E-3
+ 35.8 15.751327 35.989376 1.5991812E-3
+ 35.8 16.21678 35.988372 1.8035116E-3
+ 35.8 16.803734 36.000183 1.966205E-3
+ 35.8 17.446117 35.999027 2.1112081E-3
+ 35.8 18.399553 36.010707 2.3494344E-3
+ 35.8 19.258991 36.02547 2.756586E-3
+ 35.8 19.915024 36.035537 3.198014E-3
+ 35.8 20.404444 36.033527 3.505236E-3
+ 35.8 20.516811 36.033073 3.6824874E-3
+ 35.8 20.533134 36.035755 3.819154E-3
+ 35.8 20.540487 36.037574 3.9485762E-3
+ 35.8 20.537224 36.038177 4.077042E-3
+ 35.8 20.49203 36.038822 4.2610033E-3
+ 35.85 2.5323362 34.89956 0.0E+0
+ 35.85 2.5181396 34.90129 3.3915013E-4
+ 35.85 2.5259387 34.90756 6.9413974E-4
+ 35.85 2.5493817 34.915393 8.840468E-4
+ 35.85 2.588574 34.922904 8.09169E-4
+ 35.85 2.664212 34.933937 5.224064E-4
+ 35.85 2.7703726 34.94537 1.6594153E-4
+ 35.85 2.9385557 34.957798 -1.3065348E-4
+ 35.85 3.148234 34.969463 -3.458564E-4
+ 35.85 3.4619321 34.988044 -6.186101E-4
+ 35.85 3.7576725 35.001102 -1.1093714E-3
+ 35.85 4.1688127 35.044975 -2.2532183E-3
+ 35.85 4.7536396 35.118183 -3.929349E-3
+ 35.85 5.911564 35.292316 -5.490399E-3
+ 35.85 7.762828 35.599746 -6.8264375E-3
+ 35.85 9.158365 35.794376 -7.717454E-3
+ 35.85 9.781392 35.794857 -7.7797956E-3
+ 35.85 10.194771 35.736633 -7.188719E-3
+ 35.85 10.413944 35.61359 -6.745968E-3
+ 35.85 10.702247 35.533306 -6.3437544E-3
+ 35.85 11.169173 35.53522 -5.5396654E-3
+ 35.85 11.591087 35.576564 -4.8715076E-3
+ 35.85 11.968489 35.616447 -4.5006303E-3
+ 35.85 12.297802 35.651107 -4.2447992E-3
+ 35.85 12.596634 35.686164 -4.0490003E-3
+ 35.85 12.804119 35.707534 -3.8630184E-3
+ 35.85 12.988595 35.727783 -3.6891684E-3
+ 35.85 13.198808 35.7552 -3.4867462E-3
+ 35.85 13.342057 35.771667 -3.2472754E-3
+ 35.85 13.471719 35.788555 -3.0015036E-3
+ 35.85 13.611247 35.80842 -2.7528114E-3
+ 35.85 13.710742 35.82081 -2.514647E-3
+ 35.85 13.791363 35.831447 -2.2993446E-3
+ 35.85 13.86275 35.84025 -2.1047652E-3
+ 35.85 13.930559 35.847633 -1.9290304E-3
+ 35.85 13.995207 35.85561 -1.763142E-3
+ 35.85 14.03915 35.859703 -1.6052917E-3
+ 35.85 14.092026 35.865375 -1.4530275E-3
+ 35.85 14.141874 35.871726 -1.304221E-3
+ 35.85 14.180225 35.876956 -1.1614931E-3
+ 35.85 14.231287 35.88246 -1.0216028E-3
+ 35.85 14.282381 35.88769 -8.849873E-4
+ 35.85 14.329943 35.891452 -7.503716E-4
+ 35.85 14.377369 35.897186 -6.128253E-4
+ 35.85 14.441102 35.90508 -4.7295654E-4
+ 35.85 14.507563 35.914505 -3.321347E-4
+ 35.85 14.582403 35.921352 -1.8744545E-4
+ 35.85 14.661577 35.92884 -3.3334192E-5
+ 35.85 14.769937 35.93686 1.3180592E-4
+ 35.85 14.908838 35.954586 3.0377166E-4
+ 35.85 15.09338 35.970272 4.8795907E-4
+ 35.85 15.245542 35.979324 6.725214E-4
+ 35.85 15.431149 35.984912 8.61727E-4
+ 35.85 15.792904 35.995594 1.0847356E-3
+ 35.85 16.254843 35.99502 1.3051002E-3
+ 35.85 16.837336 36.006393 1.4922898E-3
+ 35.85 17.48079 36.005882 1.6691457E-3
+ 35.85 18.447353 36.017463 1.9352838E-3
+ 35.85 19.315386 36.031902 2.358873E-3
+ 35.85 19.965925 36.042545 2.8110935E-3
+ 35.85 20.443745 36.04178 3.1252121E-3
+ 35.85 20.55167 36.041645 3.3058053E-3
+ 35.85 20.568111 36.044704 3.444138E-3
+ 35.85 20.5761 36.046825 3.5741957E-3
+ 35.85 20.573471 36.04765 3.702193E-3
+ 35.85 20.526628 36.04803 3.8837816E-3
+ 35.9 2.5331497 34.899543 0.0E+0
+ 35.9 2.5187363 34.901187 3.5554738E-4
+ 35.9 2.5264108 34.90748 7.2423624E-4
+ 35.9 2.549415 34.91536 9.3006523E-4
+ 35.9 2.5883922 34.922985 8.645725E-4
+ 35.9 2.6644408 34.934123 5.76957E-4
+ 35.9 2.7710673 34.945636 2.06049E-4
+ 35.9 2.9400234 34.9581 -1.1456624E-4
+ 35.9 3.1502423 34.96983 -3.519899E-4
+ 35.9 3.4653766 34.98868 -6.3990976E-4
+ 35.9 3.7639198 35.002307 -1.1404703E-3
+ 35.9 4.1828713 35.047924 -2.2805931E-3
+ 35.9 4.7737193 35.122283 -3.9455196E-3
+ 35.9 5.9377965 35.297657 -5.500888E-3
+ 35.9 7.7934136 35.606636 -6.8475785E-3
+ 35.9 9.179793 35.79944 -7.801928E-3
+ 35.9 9.797951 35.798236 -7.97756E-3
+ 35.9 10.214664 35.740375 -7.4891624E-3
+ 35.9 10.434972 35.61829 -7.1277422E-3
+ 35.9 10.717481 35.53604 -6.7848362E-3
+ 35.9 11.180812 35.536594 -6.009042E-3
+ 35.9 11.59807 35.577537 -5.3419023E-3
+ 35.9 11.976117 35.617588 -4.960203E-3
+ 35.9 12.30392 35.652053 -4.7009936E-3
+ 35.9 12.603765 35.687267 -4.5079896E-3
+ 35.9 12.811136 35.70849 -4.326073E-3
+ 35.9 12.996881 35.728977 -4.1564833E-3
+ 35.9 13.21259 35.757232 -3.9595034E-3
+ 35.9 13.358977 35.77416 -3.7255208E-3
+ 35.9 13.490935 35.791374 -3.483693E-3
+ 35.9 13.632863 35.811527 -3.238029E-3
+ 35.9 13.733418 35.824203 -3.0026857E-3
+ 35.9 13.815031 35.835113 -2.7895853E-3
+ 35.9 13.88631 35.84393 -2.5963648E-3
+ 35.9 13.954727 35.85153 -2.42157E-3
+ 35.9 14.020196 35.859584 -2.256613E-3
+ 35.9 14.064791 35.86389 -2.0998117E-3
+ 35.9 14.118664 35.86966 -1.9485179E-3
+ 35.9 14.168497 35.87602 -1.8001021E-3
+ 35.9 14.206643 35.88115 -1.6569487E-3
+ 35.9 14.257678 35.886566 -1.5161257E-3
+ 35.9 14.30838 35.89172 -1.3783174E-3
+ 35.9 14.356761 35.895606 -1.2418528E-3
+ 35.9 14.404049 35.901145 -1.1017582E-3
+ 35.9 14.468368 35.909133 -9.589634E-4
+ 35.9 14.535484 35.918724 -8.146187E-4
+ 35.9 14.61179 35.925773 -6.6586834E-4
+ 35.9 14.691986 35.933242 -5.0719914E-4
+ 35.9 14.800671 35.94116 -3.3728056E-4
+ 35.9 14.940185 35.95899 -1.6031558E-4
+ 35.9 15.126731 35.974815 2.876205E-5
+ 35.9 15.279536 35.984596 2.1872675E-4
+ 35.9 15.469559 35.990764 4.1601122E-4
+ 35.9 15.835199 36.00174 6.497239E-4
+ 35.9 16.294462 36.001613 8.864156E-4
+ 35.9 16.873177 36.01256 1.0987445E-3
+ 35.9 17.518242 36.012706 1.3081947E-3
+ 35.9 18.496595 36.02418 1.6023308E-3
+ 35.9 19.372498 36.038303 2.0411631E-3
+ 35.9 20.017431 36.04956 2.502386E-3
+ 35.9 20.483469 36.05008 2.8223705E-3
+ 35.9 20.586956 36.050315 3.006177E-3
+ 35.9 20.603554 36.05379 3.1462996E-3
+ 35.9 20.612204 36.05626 3.2770654E-3
+ 35.9 20.610094 36.0573 3.4045453E-3
+ 35.9 20.561543 36.05741 3.5836547E-3
+ 35.95 2.5338852 34.899505 0.0E+0
+ 35.95 2.5192766 34.90107 3.7148976E-4
+ 35.95 2.5268282 34.907386 7.537076E-4
+ 35.95 2.5494065 34.915313 9.7548303E-4
+ 35.95 2.5881478 34.923053 9.1979053E-4
+ 35.95 2.6645841 34.934307 6.3182954E-4
+ 35.95 2.771657 34.9459 2.4701395E-4
+ 35.95 2.9413897 34.9584 -9.715628E-5
+ 35.95 3.1521084 34.970184 -3.5631522E-4
+ 35.95 3.4685916 34.989292 -6.5794063E-4
+ 35.95 3.7698457 35.00347 -1.1651082E-3
+ 35.95 4.196488 35.0508 -2.295315E-3
+ 35.95 4.793442 35.12633 -3.941197E-3
+ 35.95 5.963266 35.302875 -5.4839467E-3
+ 35.95 7.8222832 35.61322 -6.835811E-3
+ 35.95 9.199459 35.80421 -7.849351E-3
+ 35.95 9.814084 35.801635 -8.135749E-3
+ 35.95 10.234166 35.744117 -7.74862E-3
+ 35.95 10.455556 35.622982 -7.465351E-3
+ 35.95 10.732403 35.538757 -7.1774562E-3
+ 35.95 11.192053 35.537895 -6.426913E-3
+ 35.95 11.604786 35.57842 -5.757023E-3
+ 35.95 11.983516 35.61865 -5.360119E-3
+ 35.95 12.309745 35.65292 -5.093844E-3
+ 35.95 12.610414 35.688255 -4.9004964E-3
+ 35.95 12.817712 35.70934 -4.7201006E-3
+ 35.95 13.004705 35.730075 -4.552717E-3
+ 35.95 13.22571 35.759124 -4.359792E-3
+ 35.95 13.375272 35.776523 -4.130429E-3
+ 35.95 13.509556 35.79406 -3.8918927E-3
+ 35.95 13.653813 35.814487 -3.6487982E-3
+ 35.95 13.755425 35.827453 -3.4159198E-3
+ 35.95 13.838077 35.83864 -3.204655E-3
+ 35.95 13.909305 35.84747 -3.0124E-3
+ 35.95 13.978322 35.855278 -2.8381221E-3
+ 35.95 14.044619 35.863422 -2.6736932E-3
+ 35.95 14.089882 35.867954 -2.5175642E-3
+ 35.95 14.14481 35.87383 -2.3668911E-3
+ 35.95 14.194694 35.880195 -2.218522E-3
+ 35.95 14.232739 35.885234 -2.07458E-3
+ 35.95 14.28377 35.89056 -1.9324606E-3
+ 35.95 14.334146 35.895645 -1.7930918E-3
+ 35.95 14.383458 35.89967 -1.6544117E-3
+ 35.95 14.430672 35.90502 -1.51141E-3
+ 35.95 14.495644 35.913116 -1.3653369E-3
+ 35.95 14.563487 35.922866 -1.2171265E-3
+ 35.95 14.641278 35.930114 -1.0639897E-3
+ 35.95 14.722599 35.937576 -9.004778E-4
+ 35.95 14.831597 35.945392 -7.2554923E-4
+ 35.95 14.971652 35.96329 -5.433962E-4
+ 35.95 15.160036 35.97924 -3.4933912E-4
+ 35.95 15.313678 35.989746 -1.5387805E-4
+ 35.95 15.508486 35.99653 5.1610117E-5
+ 35.95 15.878177 36.007797 2.9609553E-4
+ 35.95 16.33563 36.00814 5.4931215E-4
+ 35.95 16.911287 36.01867 7.8727066E-4
+ 35.95 17.558472 36.01948 1.0298541E-3
+ 35.95 18.547201 36.03085 1.351907E-3
+ 35.95 19.430157 36.044666 1.8047197E-3
+ 35.95 20.069391 36.056571 2.2731237E-3
+ 35.95 20.523558 36.05842 2.597915E-3
+ 35.95 20.62265 36.05908 2.7847792E-3
+ 35.95 20.639448 36.06302 2.9267922E-3
+ 35.95 20.648775 36.065864 3.0583203E-3
+ 35.95 20.647066 36.067115 3.1852233E-3
+ 35.95 20.596754 36.066967 3.3617413E-3
+ 36.0 2.5345356 34.89945 0.0E+0
+ 36.0 2.5197546 34.900943 3.86905E-4
+ 36.0 2.5271875 34.907283 7.824229E-4
+ 36.0 2.549354 34.915252 1.0200739E-3
+ 36.0 2.5878396 34.923114 9.7452645E-4
+ 36.0 2.6646392 34.93448 6.8671914E-4
+ 36.0 2.7721374 34.94616 2.886014E-4
+ 36.0 2.94265 34.9587 -7.852616E-5
+ 36.0 3.153824 34.97053 -3.5880826E-4
+ 36.0 3.471565 34.98988 -6.726078E-4
+ 36.0 3.7754242 35.004592 -1.1831799E-3
+ 36.0 4.209607 35.053592 -2.2974242E-3
+ 36.0 4.812747 35.13031 -3.91667E-3
+ 36.0 5.987903 35.30796 -5.4400484E-3
+ 36.0 7.8493776 35.61949 -6.7915674E-3
+ 36.0 9.217367 35.808692 -7.859668E-3
+ 36.0 9.829772 35.805057 -8.253548E-3
+ 36.0 10.253244 35.74785 -7.965662E-3
+ 36.0 10.475645 35.62765 -7.756949E-3
+ 36.0 10.747002 35.541442 -7.519527E-3
+ 36.0 11.202898 35.539123 -6.7911003E-3
+ 36.0 11.61126 35.579204 -6.1147883E-3
+ 36.0 11.99071 35.619625 -5.6984792E-3
+ 36.0 12.31532 35.653705 -5.421575E-3
+ 36.0 12.616624 35.689132 -5.224822E-3
+ 36.0 12.8239 35.710086 -5.0434595E-3
+ 36.0 13.012111 35.73107 -4.876272E-3
+ 36.0 13.238182 35.760883 -4.686036E-3
+ 36.0 13.390946 35.77876 -4.4604325E-3
+ 36.0 13.527578 35.796607 -4.2245443E-3
+ 36.0 13.674085 35.8173 -3.9835702E-3
+ 36.0 13.776748 35.830543 -3.752808E-3
+ 36.0 13.860485 35.84201 -3.5430223E-3
+ 36.0 13.931728 35.85086 -3.3513545E-3
+ 36.0 14.001338 35.85888 -3.1771888E-3
+ 36.0 14.068471 35.867115 -3.0128995E-3
+ 36.0 14.114416 35.871875 -2.857079E-3
+ 36.0 14.170455 35.87787 -2.7066892E-3
+ 36.0 14.220458 35.884243 -2.5580374E-3
+ 36.0 14.258509 35.889202 -2.412964E-3
+ 36.0 14.309559 35.894443 -2.2692054E-3
+ 36.0 14.359682 35.899467 -2.127931E-3
+ 36.0 14.410034 35.903636 -1.9866947E-3
+ 36.0 14.457241 35.908802 -1.8404574E-3
+ 36.0 14.522934 35.91702 -1.6907848E-3
+ 36.0 14.591574 35.926925 -1.5384007E-3
+ 36.0 14.670864 35.934375 -1.3805887E-3
+ 36.0 14.75341 35.941833 -1.2119884E-3
+ 36.0 14.862709 35.94956 -1.0318556E-3
+ 36.0 15.003229 35.967487 -8.443625E-4
+ 36.0 15.193272 35.98354 -6.4527045E-4
+ 36.0 15.347953 35.994773 -4.4425515E-4
+ 36.0 15.547893 36.00219 -2.3049107E-4
+ 36.0 15.921798 36.013755 2.4770661E-5
+ 36.0 16.37832 36.014583 2.9460887E-4
+ 36.0 16.951681 36.024715 5.585272E-4
+ 36.0 17.601458 36.0262 8.345707E-4
+ 36.0 18.599077 36.037456 1.18429E-3
+ 36.0 19.488195 36.050987 1.6497588E-3
+ 36.0 20.121653 36.063575 2.123508E-3
+ 36.0 20.56394 36.06678 2.452028E-3
+ 36.0 20.658731 36.06793 2.6417663E-3
+ 36.0 20.675774 36.072372 2.7857446E-3
+ 36.0 20.68579 36.075634 2.9180701E-3
+ 36.0 20.684353 36.07709 3.0443274E-3
+ 36.0 20.632242 36.076686 3.2181362E-3
+ 36.05 2.535094 34.899372 0.0E+0
+ 36.05 2.5201647 34.900802 4.0171886E-4
+ 36.05 2.5274851 34.90716 8.1024254E-4
+ 36.05 2.5492563 34.915184 1.0635997E-3
+ 36.05 2.5874671 34.923164 1.0284692E-3
+ 36.05 2.664605 34.934642 7.413056E-4
+ 36.05 2.772506 34.94642 3.305609E-4
+ 36.05 2.943799 34.959 -5.8795347E-5
+ 36.05 3.1553823 34.970863 -3.5946571E-4
+ 36.05 3.474286 34.990432 -6.838528E-4
+ 36.05 3.7806315 35.00566 -1.1946504E-3
+ 36.05 4.222179 35.056293 -2.2870881E-3
+ 36.05 4.8315782 35.134204 -3.8724222E-3
+ 36.05 6.0116467 35.31289 -5.3699146E-3
+ 36.05 7.87465 35.625423 -6.7155715E-3
+ 36.05 9.233536 35.81288 -7.8331595E-3
+ 36.05 9.844996 35.808486 -8.330526E-3
+ 36.05 10.271866 35.751556 -8.139278E-3
+ 36.05 10.495191 35.63228 -8.0011645E-3
+ 36.05 10.761264 35.54409 -7.8094913E-3
+ 36.05 11.213352 35.540275 -7.1000126E-3
+ 36.05 11.617517 35.57989 -6.4137587E-3
+ 36.05 11.997726 35.620517 -5.9740873E-3
+ 36.05 12.320687 35.654415 -5.6831636E-3
+ 36.05 12.622439 35.6899 -5.4800603E-3
+ 36.05 12.829749 35.71074 -5.2953325E-3
+ 36.05 13.019145 35.731975 -5.1264027E-3
+ 36.05 13.250026 35.762496 -4.93753E-3
+ 36.05 13.406006 35.780853 -4.714845E-3
+ 36.05 13.545002 35.79901 -4.4809817E-3
+ 36.05 13.693668 35.819946 -4.2416965E-3
+ 36.05 13.797375 35.83347 -4.0127164E-3
+ 36.05 13.882243 35.84522 -3.8040701E-3
+ 36.05 13.953573 35.854095 -3.6126333E-3
+ 36.05 14.023772 35.862323 -3.4381984E-3
+ 36.05 14.091746 35.87065 -3.273683E-3
+ 36.05 14.138389 35.875652 -3.1178263E-3
+ 36.05 14.195588 35.88177 -2.9674002E-3
+ 36.05 14.245784 35.88816 -2.818158E-3
+ 36.05 14.283949 35.893043 -2.6716347E-3
+ 36.05 14.335046 35.8982 -2.5259223E-3
+ 36.05 14.384987 35.903175 -2.382425E-3
+ 36.05 14.436486 35.907493 -2.2383246E-3
+ 36.05 14.483759 35.912483 -2.0885586E-3
+ 36.05 14.550241 35.92083 -1.9350027E-3
+ 36.05 14.619742 35.93089 -1.7781772E-3
+ 36.05 14.700541 35.938537 -1.6154448E-3
+ 36.05 14.78441 35.94601 -1.4415538E-3
+ 36.05 14.894001 35.953655 -1.2560652E-3
+ 36.05 15.034905 35.97157 -1.0631215E-3
+ 36.05 15.226418 35.987705 -8.589766E-4
+ 36.05 15.38234 35.99967 -6.523895E-4
+ 36.05 15.58774 36.00774 -4.3033412E-4
+ 36.05 15.966018 36.019607 -1.6436187E-4
+ 36.05 16.4225 36.02094 1.2208779E-4
+ 36.05 16.994356 36.030685 4.1212802E-4
+ 36.05 17.647158 36.03285 7.217405E-4
+ 36.05 18.652134 36.043987 1.0987052E-3
+ 36.05 19.54644 36.05726 1.5754524E-3
+ 36.05 20.174065 36.07056 2.05271E-3
+ 36.05 20.604555 36.075157 2.3838698E-3
+ 36.05 20.695175 36.076847 2.5762727E-3
+ 36.05 20.71251 36.081844 2.722264E-3
+ 36.05 20.72322 36.08556 2.855402E-3
+ 36.05 20.721918 36.087223 2.980936E-3
+ 36.05 20.667978 36.086563 3.1519145E-3
+ 36.1 2.5355546 34.899272 0.0E+0
+ 36.1 2.5205018 34.900646 4.1585555E-4
+ 36.1 2.527719 34.907024 8.370196E-4
+ 36.1 2.5491125 34.9151 1.1058123E-3
+ 36.1 2.587031 34.923202 1.0812952E-3
+ 36.1 2.6644794 34.9348 7.9525564E-4
+ 36.1 2.77276 34.94667 3.7262847E-4
+ 36.1 2.944833 34.959293 -3.809896E-5
+ 36.1 3.1567776 34.971187 -3.583046E-4
+ 36.1 3.4767456 34.990955 -6.9165334E-4
+ 36.1 3.7854464 35.006675 -1.1995542E-3
+ 36.1 4.234156 35.058887 -2.264598E-3
+ 36.1 4.8498816 35.13801 -3.8091198E-3
+ 36.1 6.034442 35.317653 -5.274505E-3
+ 36.1 7.8980655 35.631011 -6.6088275E-3
+ 36.1 9.247995 35.816776 -7.7704396E-3
+ 36.1 9.859742 35.811923 -8.366635E-3
+ 36.1 10.290006 35.75524 -8.2688825E-3
+ 36.1 10.514151 35.636852 -8.197104E-3
+ 36.1 10.775182 35.5467 -8.046337E-3
+ 36.1 11.223421 35.541347 -7.3526524E-3
+ 36.1 11.623582 35.580482 -6.653146E-3
+ 36.1 12.00459 35.621322 -6.1864526E-3
+ 36.1 12.325889 35.65505 -5.878339E-3
+ 36.1 12.627904 35.690555 -5.666095E-3
+ 36.1 12.835311 35.711292 -5.4757245E-3
+ 36.1 13.025854 35.732784 -5.3032115E-3
+ 36.1 13.261259 35.763965 -5.114434E-3
+ 36.1 13.420459 35.78281 -4.89386E-3
+ 36.1 13.561826 35.80126 -4.661427E-3
+ 36.1 13.712555 35.82243 -4.423425E-3
+ 36.1 13.817296 35.83622 -4.1959136E-3
+ 36.1 13.903341 35.84826 -3.988091E-3
+ 36.1 13.974835 35.85717 -3.7965571E-3
+ 36.1 14.045624 35.8656 -3.621503E-3
+ 36.1 14.114441 35.874027 -3.4564228E-3
+ 36.1 14.161797 35.879276 -3.300211E-3
+ 36.1 14.220203 35.88553 -3.149453E-3
+ 36.1 14.270669 35.89193 -2.9993387E-3
+ 36.1 14.309055 35.89675 -2.8510792E-3
+ 36.1 14.36023 35.901824 -2.7031311E-3
+ 36.1 14.410063 35.90676 -2.5571275E-3
+ 36.1 14.462811 35.911235 -2.4098933E-3
+ 36.1 14.510225 35.91606 -2.2563475E-3
+ 36.1 14.577564 35.924545 -2.0986676E-3
+ 36.1 14.647988 35.934757 -1.937179E-3
+ 36.1 14.730301 35.9426 -1.7693288E-3
+ 36.1 14.815586 35.950096 -1.5899945E-3
+ 36.1 14.925462 35.95767 -1.3990456E-3
+ 36.1 15.066668 35.97553 -1.2005871E-3
+ 36.1 15.25945 35.991733 -9.914126E-4
+ 36.1 15.416821 36.004417 -7.792799E-4
+ 36.1 15.627982 36.013164 -5.489788E-4
+ 36.1 16.010792 36.025333 -2.7243516E-4
+ 36.1 16.468128 36.027187 3.0504316E-5
+ 36.1 17.039295 36.03657 3.4665406E-4
+ 36.1 17.695509 36.03941 6.897211E-4
+ 36.1 18.706266 36.050437 1.0933384E-3
+ 36.1 19.604729 36.063472 1.579942E-3
+ 36.1 20.226475 36.07752 2.0588841E-3
+ 36.1 20.64533 36.083538 2.3915932E-3
+ 36.1 20.731955 36.08583 2.5864248E-3
+ 36.1 20.749628 36.091426 2.7344487E-3
+ 36.1 20.761036 36.09563 2.868394E-3
+ 36.1 20.759726 36.097492 2.993119E-3
+ 36.1 20.70394 36.09659 3.161143E-3
+ 36.15 2.535912 34.899154 0.0E+0
+ 36.15 2.5207617 34.90048 4.2923822E-4
+ 36.15 2.5278863 34.90687 8.6260034E-4
+ 36.15 2.5489215 34.915004 1.146455E-3
+ 36.15 2.5865311 34.923233 1.1326709E-3
+ 36.15 2.6642625 34.934947 8.482254E-4
+ 36.15 2.7728981 34.94692 4.1452865E-4
+ 36.15 2.945749 34.959587 -1.6586424E-5
+ 36.15 3.158005 34.971496 -3.5536126E-4
+ 36.15 3.478936 34.991443 -6.9602206E-4
+ 36.15 3.7898507 35.00763 -1.1979922E-3
+ 36.15 4.2454967 35.061363 -2.230362E-3
+ 36.15 4.8676085 35.14171 -3.7276037E-3
+ 36.15 6.0562396 35.32223 -5.1550013E-3
+ 36.15 7.919601 35.636241 -6.472608E-3
+ 36.15 9.260786 35.820384 -7.672451E-3
+ 36.15 9.873999 35.81536 -8.362217E-3
+ 36.15 10.307639 35.75889 -8.354322E-3
+ 36.15 10.532484 35.641353 -8.344356E-3
+ 36.15 10.788748 35.54925 -8.229596E-3
+ 36.15 11.233111 35.542343 -7.5486176E-3
+ 36.15 11.62948 35.58097 -6.83281E-3
+ 36.15 12.011325 35.62204 -6.3357884E-3
+ 36.15 12.330967 35.65561 -6.0075763E-3
+ 36.15 12.633063 35.691104 -5.7835946E-3
+ 36.15 12.840637 35.711757 -5.5854544E-3
+ 36.15 13.032282 35.733497 -5.4076365E-3
+ 36.15 13.271906 35.765293 -5.2177612E-3
+ 36.15 13.434315 35.784622 -4.998534E-3
+ 36.15 13.578055 35.803363 -4.7669792E-3
+ 36.15 13.730741 35.824737 -4.5298882E-3
+ 36.15 13.836506 35.838794 -4.3035596E-3
+ 36.15 13.923769 35.85112 -4.096274E-3
+ 36.15 13.995511 35.860073 -3.9043494E-3
+ 36.15 14.066892 35.86871 -3.7283618E-3
+ 36.15 14.136555 35.87723 -3.562414E-3
+ 36.15 14.184638 35.88274 -3.4055584E-3
+ 36.15 14.244292 35.889133 -3.2542021E-3
+ 36.15 14.295107 35.895553 -3.102966E-3
+ 36.15 14.333823 35.90032 -2.9527205E-3
+ 36.15 14.385108 35.905315 -2.8022932E-3
+ 36.15 14.434909 35.910217 -2.6535408E-3
+ 36.15 14.489005 35.914852 -2.5029457E-3
+ 36.15 14.53664 35.919525 -2.3454155E-3
+ 36.15 14.6049 35.928153 -2.1834196E-3
+ 36.15 14.676304 35.93852 -2.0170973E-3
+ 36.15 14.760132 35.94655 -1.843985E-3
+ 36.15 14.846922 35.954086 -1.6591084E-3
+ 36.15 14.95708 35.961597 -1.4626468E-3
+ 36.15 15.0985 35.979366 -1.2586595E-3
+ 36.15 15.292344 35.99562 -1.0445231E-3
+ 36.15 15.451373 36.009017 -8.269186E-4
+ 36.15 15.668572 36.018455 -5.884816E-4
+ 36.15 16.056065 36.030933 -3.0158256E-4
+ 36.15 16.51515 36.03332 1.7609473E-5
+ 36.15 17.086464 36.04237 3.5967651E-4
+ 36.15 17.746437 36.04587 7.358564E-4
+ 36.15 18.761368 36.056793 1.1653625E-3
+ 36.15 19.662891 36.069625 1.6603637E-3
+ 36.15 20.278736 36.084445 2.139195E-3
+ 36.15 20.686195 36.091907 2.4723692E-3
+ 36.15 20.769037 36.094867 2.6693684E-3
+ 36.15 20.787102 36.101104 2.819414E-3
+ 36.15 20.799198 36.10584 2.9541403E-3
+ 36.15 20.797735 36.1079 3.0779622E-3
+ 36.15 20.74009 36.106754 3.242908E-3
+ 36.2 2.536162 34.899013 0.0E+0
+ 36.2 2.5209407 34.900295 4.4178948E-4
+ 36.2 2.527986 34.906703 8.8682567E-4
+ 36.2 2.548683 34.914897 1.1852644E-3
+ 36.2 2.5859682 34.92325 1.182255E-3
+ 36.2 2.663954 34.935085 8.998629E-4
+ 36.2 2.7729194 34.947162 4.5597666E-4
+ 36.2 2.9465446 34.959877 5.580058E-6
+ 36.2 3.1590611 34.971794 -3.5069062E-4
+ 36.2 3.480852 34.991897 -6.970051E-4
+ 36.2 3.793829 35.00852 -1.19013E-3
+ 36.2 4.2561635 35.063716 -2.1849006E-3
+ 36.2 4.8847146 35.14529 -3.628878E-3
+ 36.2 6.076998 35.326622 -5.0127953E-3
+ 36.2 7.939245 35.641105 -6.308441E-3
+ 36.2 9.271959 35.823707 -7.540453E-3
+ 36.2 9.887756 35.81879 -8.317992E-3
+ 36.2 10.324743 35.762485 -8.395869E-3
+ 36.2 10.550158 35.645763 -8.442994E-3
+ 36.2 10.801956 35.55175 -8.359339E-3
+ 36.2 11.242431 35.543254 -7.688099E-3
+ 36.2 11.635236 35.581363 -6.953255E-3
+ 36.2 12.017955 35.62267 -6.4229983E-3
+ 36.2 12.33596 35.656093 -6.0720825E-3
+ 36.2 12.63796 35.691547 -5.8339927E-3
+ 36.2 12.845774 35.71213 -5.6261345E-3
+ 36.2 13.038474 35.734127 -5.441434E-3
+ 36.2 13.281988 35.76647 -5.2493587E-3
+ 36.2 13.447588 35.78629 -5.030771E-3
+ 36.2 13.593691 35.8053 -4.7995895E-3
+ 36.2 13.748225 35.826873 -4.5630773E-3
+ 36.2 13.855 35.841186 -4.337678E-3
+ 36.2 13.943523 35.8538 -4.1306787E-3
+ 36.2 14.015601 35.8628 -3.9381096E-3
+ 36.2 14.087578 35.87164 -3.7609182E-3
+ 36.2 14.158088 35.880264 -3.5938397E-3
+ 36.2 14.206912 35.886035 -3.4360878E-3
+ 36.2 14.267849 35.89258 -3.2839011E-3
+ 36.2 14.319097 35.899017 -3.1313295E-3
+ 36.2 14.35825 35.90374 -2.97889E-3
+ 36.2 14.409679 35.908657 -2.8257842E-3
+ 36.2 14.459523 35.913543 -2.6740846E-3
+ 36.2 14.515062 35.918342 -2.5199502E-3
+ 36.2 14.562998 35.922874 -2.3582833E-3
+ 36.2 14.632243 35.93166 -2.1918318E-3
+ 36.2 14.70468 35.94217 -2.020561E-3
+ 36.2 14.79002 35.950382 -1.8421006E-3
+ 36.2 14.8784 35.95797 -1.6516411E-3
+ 36.2 14.988839 35.96544 -1.4496698E-3
+ 36.2 15.130385 35.98307 -1.2401938E-3
+ 36.2 15.325077 35.99936 -1.0212107E-3
+ 36.2 15.485971 36.013462 -7.982584E-4
+ 36.2 15.709459 36.0236 -5.5186293E-4
+ 36.2 16.101782 36.03639 -2.5490418E-4
+ 36.2 16.563505 36.03933 8.018428E-5
+ 36.2 17.13581 36.048065 4.4779235E-4
+ 36.2 17.799845 36.052227 8.5651373E-4
+ 36.2 18.817327 36.063045 1.310975E-3
+ 36.2 19.720766 36.075706 1.8128877E-3
+ 36.2 20.330706 36.09133 2.2898537E-3
+ 36.2 20.727077 36.100254 2.6224227E-3
+ 36.2 20.806387 36.103942 2.8213043E-3
+ 36.2 20.824894 36.11087 2.97333E-3
+ 36.2 20.83767 36.116165 3.108789E-3
+ 36.2 20.835901 36.118423 3.231607E-3
+ 36.2 20.776398 36.117046 3.3933504E-3
+ 36.25 2.5363013 34.89885 0.0E+0
+ 36.25 2.5210356 34.9001 4.534319E-4
+ 36.25 2.5280168 34.90652 9.0953224E-4
+ 36.25 2.5483968 34.914775 1.2219727E-3
+ 36.25 2.5853438 34.923255 1.2297012E-3
+ 36.25 2.6635544 34.93521 9.498109E-4
+ 36.25 2.772824 34.9474 4.966809E-4
+ 36.25 2.9472184 34.960163 2.8227108E-5
+ 36.25 3.1599438 34.972072 -3.4436484E-4
+ 36.25 3.4824895 34.992313 -6.946808E-4
+ 36.25 3.7973687 35.00934 -1.1761932E-3
+ 36.25 4.2661247 35.065933 -2.128838E-3
+ 36.25 4.9011607 35.148742 -3.5140968E-3
+ 36.25 6.0966825 35.33081 -4.849471E-3
+ 36.25 7.9569993 35.6456 -6.1180917E-3
+ 36.25 9.281574 35.82675 -7.376011E-3
+ 36.25 9.90101 35.822204 -8.235056E-3
+ 36.25 10.341301 35.766033 -8.394216E-3
+ 36.25 10.567139 35.650074 -8.493562E-3
+ 36.25 10.814802 35.55418 -8.436175E-3
+ 36.25 11.251393 35.544086 -7.7718663E-3
+ 36.25 11.640875 35.581653 -7.0156063E-3
+ 36.25 12.024505 35.62321 -6.4496556E-3
+ 36.25 12.340907 35.6565 -6.073772E-3
+ 36.25 12.642638 35.69189 -5.8194627E-3
+ 36.25 12.850771 35.71242 -5.6001422E-3
+ 36.25 13.044474 35.734664 -5.407144E-3
+ 36.25 13.29153 35.76751 -5.2118715E-3
+ 36.25 13.460289 35.787807 -4.9932827E-3
+ 36.25 13.608742 35.807083 -4.7620274E-3
+ 36.25 13.765005 35.82883 -4.525809E-3
+ 36.25 13.872777 35.843387 -4.301126E-3
+ 36.25 13.962598 35.856292 -4.0942016E-3
+ 36.25 14.035105 35.865352 -3.90078E-3
+ 36.25 14.107686 35.87439 -3.7221617E-3
+ 36.25 14.179041 35.883117 -3.553734E-3
+ 36.25 14.228618 35.88916 -3.3948756E-3
+ 36.25 14.290871 35.89586 -3.2416644E-3
+ 36.25 14.342635 35.902317 -3.0875857E-3
+ 36.25 14.382331 35.907005 -2.93279E-3
+ 36.25 14.433939 35.911853 -2.776855E-3
+ 36.25 14.483903 35.916725 -2.6220593E-3
+ 36.25 14.540975 35.921695 -2.46426E-3
+ 36.25 14.589295 35.926097 -2.2983595E-3
+ 36.25 14.659587 35.935047 -2.1273712E-3
+ 36.25 14.733104 35.945697 -1.9510969E-3
+ 36.25 14.819948 35.95409 -1.767264E-3
+ 36.25 14.909997 35.961742 -1.5712423E-3
+ 36.25 15.020718 35.969184 -1.3638239E-3
+ 36.25 15.1623 35.986644 -1.1489567E-3
+ 36.25 15.357622 36.002952 -9.252921E-4
+ 36.25 15.520588 36.01775 -6.9716904E-4
+ 36.25 15.750589 36.0286 -4.4306242E-4
+ 36.25 16.14788 36.041694 -1.3642161E-4
+ 36.25 16.613115 36.0452 2.1408575E-4
+ 36.25 17.18727 36.05366 6.0667155E-4
+ 36.25 17.855616 36.05846 1.0471321E-3
+ 36.25 18.874025 36.069187 1.5254484E-3
+ 36.25 19.7782 36.08172 2.0327661E-3
+ 36.25 20.382238 36.09817 2.5061664E-3
+ 36.25 20.767908 36.108566 2.8370828E-3
+ 36.25 20.843964 36.113044 3.0375383E-3
+ 36.25 20.862967 36.120712 3.1914701E-3
+ 36.25 20.876402 36.126605 3.3275913E-3
+ 36.25 20.874182 36.129055 3.4492982E-3
+ 36.25 20.812822 36.127452 3.607717E-3
+ 36.3 2.5363276 34.89867 0.0E+0
+ 36.3 2.5210444 34.89989 4.6408857E-4
+ 36.3 2.5279777 34.906326 9.3055376E-4
+ 36.3 2.5480632 34.914646 1.2563098E-3
+ 36.3 2.5846595 34.923252 1.2746609E-3
+ 36.3 2.6630647 34.935333 9.977096E-4
+ 36.3 2.7726123 34.947628 5.363451E-4
+ 36.3 2.9477694 34.96044 5.1171922E-5
+ 36.3 3.1606514 34.97234 -3.364722E-4
+ 36.3 3.483847 34.992687 -6.891578E-4
+ 36.3 3.8004615 35.010086 -1.1564646E-3
+ 36.3 4.2753534 35.068004 -2.062894E-3
+ 36.3 4.916912 35.15206 -3.3845505E-3
+ 36.3 6.1152653 35.33478 -4.6667852E-3
+ 36.3 7.972875 35.64972 -5.903546E-3
+ 36.3 9.289699 35.82952 -7.18098E-3
+ 36.3 9.913754 35.8256 -8.11486E-3
+ 36.3 10.357297 35.76952 -8.350465E-3
+ 36.3 10.583404 35.654266 -8.497067E-3
+ 36.3 10.827283 35.556545 -8.461224E-3
+ 36.3 11.260006 35.544837 -7.801249E-3
+ 36.3 11.64642 35.581844 -7.021596E-3
+ 36.3 12.030995 35.62366 -6.4179752E-3
+ 36.3 12.345842 35.656845 -6.0152336E-3
+ 36.3 12.647137 35.69213 -5.74288E-3
+ 36.3 12.855671 35.712627 -5.510581E-3
+ 36.3 13.05032 35.735122 -5.308051E-3
+ 36.3 13.300556 35.768402 -5.108705E-3
+ 36.3 13.472435 35.789176 -4.8895496E-3
+ 36.3 13.623215 35.8087 -4.6578394E-3
+ 36.3 13.781085 35.83061 -4.421683E-3
+ 36.3 13.889837 35.8454 -4.197546E-3
+ 36.3 13.980994 35.858596 -3.990531E-3
+ 36.3 14.054024 35.86772 -3.796099E-3
+ 36.3 14.127219 35.876956 -3.615883E-3
+ 36.3 14.199415 35.885787 -3.4459377E-3
+ 36.3 14.249757 35.89211 -3.2858075E-3
+ 36.3 14.313352 35.89897 -3.131422E-3
+ 36.3 14.365718 35.905452 -2.9757088E-3
+ 36.3 14.40606 35.910114 -2.8184452E-3
+ 36.3 14.457886 35.91489 -2.6595818E-3
+ 36.3 14.508044 35.919765 -2.5015952E-3
+ 36.3 14.566733 35.92491 -2.340062E-3
+ 36.3 14.615522 35.92919 -2.1698914E-3
+ 36.3 14.686918 35.938316 -1.9943458E-3
+ 36.3 14.761558 35.949104 -1.8130769E-3
+ 36.3 14.849896 35.957672 -1.6239118E-3
+ 36.3 14.941687 35.9654 -1.4224143E-3
+ 36.3 15.052694 35.972827 -1.2096731E-3
+ 36.3 15.194223 35.99008 -9.895724E-4
+ 36.3 15.389952 36.006393 -7.614436E-4
+ 36.3 15.555194 36.021865 -5.283819E-4
+ 36.3 15.791904 36.03344 -2.668834E-4
+ 36.3 16.194298 36.04684 4.897819E-5
+ 36.3 16.663898 36.05093 4.1430405E-4
+ 36.3 17.240757 36.059146 8.311156E-4
+ 36.3 17.913622 36.064567 1.3022827E-3
+ 36.3 18.931341 36.075206 1.8031897E-3
+ 36.3 19.835037 36.08765 2.3143952E-3
+ 36.3 20.433203 36.104953 2.782596E-3
+ 36.3 20.80861 36.116836 3.1108416E-3
+ 36.3 20.881725 36.122165 3.3125402E-3
+ 36.3 20.901276 36.13061 3.4682715E-3
+ 36.3 20.915348 36.13714 3.6049624E-3
+ 36.3 20.912523 36.139781 3.7254441E-3
+ 36.3 20.849327 36.137962 3.8804186E-3
+ 36.35 2.5362391 34.898464 0.0E+0
+ 36.35 2.520966 34.89967 4.7368372E-4
+ 36.35 2.5278692 34.906112 9.497223E-4
+ 36.35 2.5476827 34.9145 1.2880048E-3
+ 36.35 2.5839173 34.923236 1.3167859E-3
+ 36.35 2.6624867 34.93544 1.0431996E-3
+ 36.35 2.7722861 34.94785 5.74671E-4
+ 36.35 2.9481978 34.960716 7.422407E-5
+ 36.35 3.1611843 34.972587 -3.2711564E-4
+ 36.35 3.4849245 34.993022 -6.8057264E-4
+ 36.35 3.8031013 35.01076 -1.1312792E-3
+ 36.35 4.283829 35.06993 -1.987875E-3
+ 36.35 4.9319396 35.155235 -3.2416514E-3
+ 36.35 6.132726 35.33854 -4.46665E-3
+ 36.35 7.986896 35.65346 -5.666988E-3
+ 36.35 9.296406 35.832035 -6.9574862E-3
+ 36.35 9.925989 35.82897 -7.9592E-3
+ 36.35 10.372719 35.772937 -8.266109E-3
+ 36.35 10.598929 35.658332 -8.454956E-3
+ 36.35 10.839398 35.558834 -8.436103E-3
+ 36.35 11.268284 35.545505 -7.7781123E-3
+ 36.35 11.651891 35.58194 -6.9735255E-3
+ 36.35 12.037444 35.624027 -6.3307792E-3
+ 36.35 12.350797 35.65712 -5.899691E-3
+ 36.35 12.651496 35.692276 -5.6077805E-3
+ 36.35 12.860516 35.712757 -5.3612343E-3
+ 36.35 13.056052 35.7355 -5.148138E-3
+ 36.35 13.309094 35.769153 -4.94397E-3
+ 36.35 13.484039 35.7904 -4.723769E-3
+ 36.35 13.637119 35.810157 -4.4912947E-3
+ 36.35 13.79647 35.832202 -4.2550265E-3
+ 36.35 13.906184 35.847225 -4.031313E-3
+ 36.35 13.998711 35.860706 -3.8240926E-3
+ 36.35 14.072359 35.869907 -3.6285456E-3
+ 36.35 14.146181 35.879337 -3.446618E-3
+ 36.35 14.219213 35.888275 -3.2750407E-3
+ 36.35 14.270333 35.89488 -3.1135233E-3
+ 36.35 14.335291 35.90191 -2.957859E-3
+ 36.35 14.388342 35.908416 -2.8004334E-3
+ 36.35 14.429432 35.91306 -2.6406438E-3
+ 36.35 14.481514 35.917774 -2.4788097E-3
+ 36.35 14.53194 35.92266 -2.3175941E-3
+ 36.35 14.592324 35.92798 -2.152318E-3
+ 36.35 14.641665 35.932155 -1.9779033E-3
+ 36.35 14.714222 35.941463 -1.7978444E-3
+ 36.35 14.790023 35.952384 -1.6116557E-3
+ 36.35 14.879839 35.961116 -1.417267E-3
+ 36.35 14.973441 35.96894 -1.2104468E-3
+ 36.35 15.084739 35.97637 -9.925723E-4
+ 36.35 15.226124 35.993377 -7.6745776E-4
+ 36.35 15.422038 36.009677 -5.351359E-4
+ 36.35 15.589756 36.025817 -2.974244E-4
+ 36.35 15.833342 36.038112 -2.8926623E-5
+ 36.35 16.240961 36.051822 2.9560996E-4
+ 36.35 16.715757 36.056503 6.7503046E-4
+ 36.35 17.29617 36.06451 1.1151267E-3
+ 36.35 17.973713 36.070533 1.6157392E-3
+ 36.35 18.989147 36.0811 2.1378137E-3
+ 36.35 19.891138 36.093494 2.651387E-3
+ 36.35 20.483465 36.111667 3.1128313E-3
+ 36.35 20.849113 36.125045 3.4374243E-3
+ 36.35 20.919624 36.131286 3.6400146E-3
+ 36.35 20.939772 36.14056 3.797405E-3
+ 36.35 20.954454 36.147747 3.93455E-3
+ 36.35 20.950872 36.150585 4.0536876E-3
+ 36.35 20.885864 36.14856 4.2051007E-3
+ 36.4 2.5360357 34.898246 0.0E+0
+ 36.4 2.520799 34.89943 4.821433E-4
+ 36.4 2.5276916 34.905887 9.668701E-4
+ 36.4 2.5472562 34.91435 1.3167891E-3
+ 36.4 2.5831193 34.923213 1.3557316E-3
+ 36.4 2.6618232 34.93554 1.085925E-3
+ 36.4 2.7718477 34.948066 6.11361E-4
+ 36.4 2.948505 34.960983 9.718742E-5
+ 36.4 3.1615438 34.972816 -3.1641134E-4
+ 36.4 3.485724 34.993316 -6.690878E-4
+ 36.4 3.8052861 35.01136 -1.1010194E-3
+ 36.4 4.291537 35.071704 -1.9046641E-3
+ 36.4 4.9462194 35.158256 -3.086917E-3
+ 36.4 6.149052 35.342067 -4.2511103E-3
+ 36.4 7.9990963 35.656833 -5.41078E-3
+ 36.4 9.301777 35.834293 -6.7079043E-3
+ 36.4 9.937716 35.83231 -7.770189E-3
+ 36.4 10.387559 35.776283 -8.143007E-3
+ 36.4 10.6137 35.66226 -8.369098E-3
+ 36.4 10.851146 35.561042 -8.362898E-3
+ 36.4 11.276238 35.546096 -7.704825E-3
+ 36.4 11.657308 35.58194 -6.8742306E-3
+ 36.4 12.043869 35.62431 -6.191452E-3
+ 36.4 12.355801 35.657325 -5.730954E-3
+ 36.4 12.655753 35.69233 -5.418308E-3
+ 36.4 12.865342 35.71282 -5.15651E-3
+ 36.4 13.061704 35.735805 -4.9320226E-3
+ 36.4 13.317167 35.769767 -4.722429E-3
+ 36.4 13.495119 35.791477 -4.500794E-3
+ 36.4 13.650463 35.811454 -4.2673246E-3
+ 36.4 13.811166 35.83362 -4.030834E-3
+ 36.4 13.921824 35.848854 -3.8074743E-3
+ 36.4 14.01575 35.86262 -3.599986E-3
+ 36.4 14.090114 35.871906 -3.403277E-3
+ 36.4 14.164576 35.881534 -3.2195842E-3
+ 36.4 14.238438 35.89058 -3.046317E-3
+ 36.4 14.290345 35.897464 -2.8833493E-3
+ 36.4 14.356683 35.904666 -2.7263525E-3
+ 36.4 14.410504 35.911205 -2.5671876E-3
+ 36.4 14.452439 35.915843 -2.4048706E-3
+ 36.4 14.504817 35.920494 -2.2400815E-3
+ 36.4 14.555582 35.9254 -2.0756586E-3
+ 36.4 14.617733 35.9309 -1.9066933E-3
+ 36.4 14.667711 35.934986 -1.7281258E-3
+ 36.4 14.74148 35.94448 -1.5436644E-3
+ 36.4 14.818474 35.955535 -1.3526999E-3
+ 36.4 14.90975 35.96442 -1.1532659E-3
+ 36.4 15.005223 35.972354 -9.4134546E-4
+ 36.4 15.116823 35.979804 -7.1859295E-4
+ 36.4 15.257973 35.996536 -4.887486E-4
+ 36.4 15.45385 36.01281 -2.5255954E-4
+ 36.4 15.624237 36.0296 -1.0544806E-5
+ 36.4 15.874837 36.04261 2.644858E-4
+ 36.4 16.287798 36.056632 5.970668E-4
+ 36.4 16.76859 36.06192 9.897349E-4
+ 36.4 17.35339 36.069755 1.451987E-3
+ 36.4 18.035725 36.076354 1.980559E-3
+ 36.4 19.047312 36.086856 2.5222245E-3
+ 36.4 19.94636 36.099254 3.0366491E-3
+ 36.4 20.532904 36.118312 3.4898684E-3
+ 36.4 20.889343 36.133182 3.80987E-3
+ 36.4 20.957607 36.140396 4.01298E-3
+ 36.4 20.978403 36.15054 4.1718557E-3
+ 36.4 20.993668 36.158416 4.309317E-3
+ 36.4 20.98918 36.161453 4.426986E-3
+ 36.4 20.922386 36.159225 4.574726E-3
+ 36.45 2.5357182 34.898002 0.0E+0
+ 36.45 2.5205438 34.899177 4.893955E-4
+ 36.45 2.5274457 34.905647 9.818309E-4
+ 36.45 2.546785 34.914184 1.3423987E-3
+ 36.45 2.582269 34.92318 1.3911597E-3
+ 36.45 2.6610765 34.93563 1.1255362E-3
+ 36.45 2.7713 34.948272 6.461203E-4
+ 36.45 2.9486923 34.961242 1.1986205E-4
+ 36.45 3.1617326 34.97303 -3.04487E-4
+ 36.45 3.4862494 34.99357 -6.5488874E-4
+ 36.45 3.807017 35.011882 -1.0661099E-3
+ 36.45 4.2984666 35.073322 -1.814211E-3
+ 36.45 4.9597325 35.16112 -2.9219533E-3
+ 36.45 6.164237 35.345367 -4.0223244E-3
+ 36.45 8.00952 35.659835 -5.1374365E-3
+ 36.45 9.305895 35.836315 -6.4348313E-3
+ 36.45 9.9489355 35.835613 -7.5502344E-3
+ 36.45 10.40181 35.77955 -7.983364E-3
+ 36.45 10.627703 35.666034 -8.241748E-3
+ 36.45 10.862527 35.563167 -8.244122E-3
+ 36.45 11.283881 35.546604 -7.5842202E-3
+ 36.45 11.662689 35.581851 -6.727039E-3
+ 36.45 12.050284 35.624507 -6.003889E-3
+ 36.45 12.360879 35.657474 -5.513364E-3
+ 36.45 12.659939 35.6923 -5.179154E-3
+ 36.45 12.870185 35.71281 -4.901379E-3
+ 36.45 13.067308 35.736034 -4.6648993E-3
+ 36.45 13.324803 35.770244 -4.4494234E-3
+ 36.45 13.50569 35.792407 -4.2260657E-3
+ 36.45 13.663257 35.812587 -3.991453E-3
+ 36.45 13.825182 35.834854 -3.754696E-3
+ 36.45 13.936762 35.850296 -3.531675E-3
+ 36.45 14.032116 35.864345 -3.3239123E-3
+ 36.45 14.107293 35.873725 -3.1260545E-3
+ 36.45 14.18241 35.88354 -2.9406053E-3
+ 36.45 14.257094 35.8927 -2.7656506E-3
+ 36.45 14.309797 35.89987 -2.6012256E-3
+ 36.45 14.377525 35.90725 -2.4428945E-3
+ 36.45 14.432199 35.91382 -2.282017E-3
+ 36.45 14.475072 35.91846 -2.1172296E-3
+ 36.45 14.527786 35.923053 -1.9495622E-3
+ 36.45 14.578961 35.92799 -1.7820162E-3
+ 36.45 14.642944 35.93367 -1.6094797E-3
+ 36.45 14.69364 35.93768 -1.426918E-3
+ 36.45 14.768669 35.947372 -1.2382333E-3
+ 36.45 14.846884 35.95855 -1.0427068E-3
+ 36.45 14.939597 35.967586 -8.3847704E-4
+ 36.45 15.036996 35.975643 -6.217494E-4
+ 36.45 15.148908 35.983127 -3.9444162E-4
+ 36.45 15.289736 35.99955 -1.6021602E-4
+ 36.45 15.485355 36.015785 7.9459E-5
+ 36.45 15.658598 36.033203 3.2537212E-4
+ 36.45 15.916321 36.04694 6.063952E-4
+ 36.45 16.334724 36.061267 9.4630586E-4
+ 36.45 16.822277 36.06717 1.3512529E-3
+ 36.45 17.412283 36.074867 1.8343464E-3
+ 36.45 18.09948 36.08202 2.389172E-3
+ 36.45 19.1057 36.09247 2.948705E-3
+ 36.45 20.000572 36.104915 3.4624778E-3
+ 36.45 20.581402 36.124877 3.9060995E-3
+ 36.45 20.929226 36.14124 4.220619E-3
+ 36.45 20.995619 36.149482 4.423859E-3
+ 36.45 21.017115 36.160533 4.584012E-3
+ 36.45 21.03292 36.169132 4.7216285E-3
+ 36.45 21.02738 36.172367 4.8377E-3
+ 36.45 20.958841 36.169944 4.9816584E-3
+ 36.5 2.5352876 34.897743 0.0E+0
+ 36.5 2.5202016 34.898914 4.953715E-4
+ 36.5 2.5271334 34.905395 9.944418E-4
+ 36.5 2.5462708 34.91401 1.3645765E-3
+ 36.5 2.5813691 34.923133 1.4227414E-3
+ 36.5 2.6602504 34.93571 1.1616932E-3
+ 36.5 2.770647 34.94847 6.7865994E-4
+ 36.5 2.9487626 34.961494 1.4204631E-4
+ 36.5 3.1617541 34.97323 -2.9148033E-4
+ 36.5 3.4865067 34.99378 -6.381814E-4
+ 36.5 3.8082988 35.012325 -1.0270114E-3
+ 36.5 4.304617 35.07478 -1.7175202E-3
+ 36.5 4.9724664 35.163825 -2.748438E-3
+ 36.5 6.1782822 35.34844 -3.782538E-3
+ 36.5 8.01822 35.662475 -4.8495996E-3
+ 36.5 9.308849 35.83811 -6.1410595E-3
+ 36.5 9.959654 35.83887 -7.3020043E-3
+ 36.5 10.415467 35.782722 -7.789696E-3
+ 36.5 10.640932 35.669654 -8.075518E-3
+ 36.5 10.873543 35.565204 -8.08269E-3
+ 36.5 11.291224 35.547035 -7.419553E-3
+ 36.5 11.668048 35.581672 -6.5357172E-3
+ 36.5 12.056702 35.624622 -5.7724425E-3
+ 36.5 12.366051 35.657562 -5.251732E-3
+ 36.5 12.664086 35.69218 -4.8954924E-3
+ 36.5 12.875072 35.71274 -4.6013034E-3
+ 36.5 13.07289 35.7362 -4.352462E-3
+ 36.5 13.332025 35.770595 -4.1308035E-3
+ 36.5 13.515771 35.793197 -3.9055368E-3
+ 36.5 13.675513 35.81356 -3.6697206E-3
+ 36.5 13.838527 35.835914 -3.4327222E-3
+ 36.5 13.951009 35.851547 -3.2100826E-3
+ 36.5 14.047813 35.865875 -3.002098E-3
+ 36.5 14.123898 35.875362 -2.8031661E-3
+ 36.5 14.199688 35.88537 -2.6160343E-3
+ 36.5 14.275184 35.894634 -2.4394553E-3
+ 36.5 14.328691 35.9021 -2.273623E-3
+ 36.5 14.397814 35.909652 -2.1140093E-3
+ 36.5 14.453422 35.91626 -1.9515016E-3
+ 36.5 14.49732 35.92091 -1.7843612E-3
+ 36.5 14.55041 35.92545 -1.6139547E-3
+ 36.5 14.602063 35.930423 -1.4434333E-3
+ 36.5 14.667936 35.936286 -1.2675093E-3
+ 36.5 14.719431 35.940235 -1.08118E-3
+ 36.5 14.795764 35.95013 -8.885207E-4
+ 36.5 14.87522 35.961425 -6.88717E-4
+ 36.5 14.969345 35.970603 -4.8001276E-4
+ 36.5 15.068718 35.978797 -2.5884143E-4
+ 36.5 15.180955 35.98634 -2.7368895E-5
+ 36.5 15.321375 36.00242 2.108243E-4
+ 36.5 15.51652 36.018604 4.5354873E-4
+ 36.5 15.692795 36.036632 7.028972E-4
+ 36.5 15.957722 36.051082 9.892993E-4
+ 36.5 16.38166 36.06572 1.335742E-3
+ 36.5 16.876698 36.072246 1.75188E-3
+ 36.5 17.472696 36.07985 2.2543191E-3
+ 36.5 18.164783 36.087524 2.8334797E-3
+ 36.5 19.164173 36.097934 3.409017E-3
+ 36.5 20.053658 36.110473 3.920654E-3
+ 36.5 20.628847 36.13135 4.3534105E-3
+ 36.5 20.968685 36.1492 4.66161E-3
+ 36.5 21.0336 36.158527 4.864573E-3
+ 36.5 21.05584 36.170524 5.0257625E-3
+ 36.5 21.07215 36.17987 5.163351E-3
+ 36.5 21.065416 36.183303 5.277692E-3
+ 36.5 20.995173 36.1807 5.4177665E-3
+ 36.55 2.5347471 34.89747 0.0E+0
+ 36.55 2.5197741 34.898635 5.00006E-4
+ 36.55 2.526757 34.905132 1.0045446E-3
+ 36.55 2.5457158 34.913822 1.3830748E-3
+ 36.55 2.5804233 34.923076 1.4501603E-3
+ 36.55 2.6593492 34.93578 1.1940685E-3
+ 36.55 2.7698934 34.948657 7.086994E-4
+ 36.55 2.9487192 34.96174 1.6353883E-4
+ 36.55 3.1616137 34.973403 -2.7753697E-4
+ 36.55 3.4865036 34.99395 -6.191892E-4
+ 36.55 3.8091394 35.012687 -9.842152E-4
+ 36.55 4.3099894 35.076076 -1.6156397E-3
+ 36.55 4.9844126 35.166366 -2.5681012E-3
+ 36.55 6.1911964 35.351272 -3.534063E-3
+ 36.55 8.025259 35.66476 -4.5500122E-3
+ 36.55 9.310729 35.839687 -5.829544E-3
+ 36.55 9.969877 35.84208 -7.028398E-3
+ 36.55 10.42853 35.78581 -7.564794E-3
+ 36.55 10.653383 35.67311 -7.873334E-3
+ 36.55 10.884194 35.567153 -7.881862E-3
+ 36.55 11.298281 35.547393 -7.2144507E-3
+ 36.55 11.673398 35.58141 -6.304419E-3
+ 36.55 12.063132 35.624664 -5.5018584E-3
+ 36.55 12.371334 35.657592 -4.95127E-3
+ 36.55 12.668219 35.69199 -4.5729065E-3
+ 36.55 12.88003 35.712612 -4.262164E-3
+ 36.55 13.078474 35.7363 -4.0008262E-3
+ 36.55 13.338857 35.770816 -3.7728461E-3
+ 36.55 13.525377 35.793846 -3.5455916E-3
+ 36.55 13.687243 35.81438 -3.3086005E-3
+ 36.55 13.851214 35.8368 -3.0714576E-3
+ 36.55 13.964574 35.85261 -2.8493015E-3
+ 36.55 14.062849 35.867218 -2.6412063E-3
+ 36.55 14.139936 35.876815 -2.441339E-3
+ 36.55 14.216414 35.887012 -2.2526634E-3
+ 36.55 14.292711 35.896392 -2.0745866E-3
+ 36.55 14.347029 35.904144 -1.9074555E-3
+ 36.55 14.417547 35.91188 -1.7466667E-3
+ 36.55 14.474167 35.918525 -1.5826672E-3
+ 36.55 14.519174 35.923187 -1.413352E-3
+ 36.55 14.572678 35.927684 -1.2404085E-3
+ 36.55 14.624873 35.932704 -1.0671234E-3
+ 36.55 14.692686 35.93875 -8.880618E-4
+ 36.55 14.745057 35.942653 -6.9825985E-4
+ 36.55 14.822733 35.952754 -5.019442E-4
+ 36.55 14.903447 35.964164 -2.9821903E-4
+ 36.55 14.998956 35.973476 -8.543328E-5
+ 36.55 15.100343 35.98182 1.3974775E-4
+ 36.55 15.212918 35.989437 3.7492741E-4
+ 36.55 15.352847 36.005146 6.1660993E-4
+ 36.55 15.547309 36.02127 8.6189253E-4
+ 36.55 15.726783 36.039886 1.1141557E-3
+ 36.55 15.998965 36.055046 1.4052514E-3
+ 36.55 16.428516 36.069984 1.757348E-3
+ 36.55 16.931715 36.07715 2.1834736E-3
+ 36.55 17.534464 36.084697 2.7035863E-3
+ 36.55 18.231426 36.092857 3.3049588E-3
+ 36.55 19.222593 36.10325 3.8945067E-3
+ 36.55 20.105497 36.11593 4.4025485E-3
+ 36.55 20.675142 36.13773 4.8232832E-3
+ 36.55 21.007654 36.15705 5.124383E-3
+ 36.55 21.071484 36.16752 5.3266463E-3
+ 36.55 21.094517 36.180492 5.488599E-3
+ 36.55 21.111288 36.19061 5.625955E-3
+ 36.55 21.103224 36.19425 5.738428E-3
+ 36.55 21.031326 36.191467 5.874521E-3
+ 36.6 2.5341002 34.89718 0.0E+0
+ 36.6 2.5192637 34.89835 5.0323794E-4
+ 36.6 2.5263187 34.90486 1.0119879E-3
+ 36.6 2.5451221 34.913627 1.3976577E-3
+ 36.6 2.5794358 34.923015 1.4731156E-3
+ 36.6 2.6583771 34.93584 1.22235E-3
+ 36.6 2.7690446 34.94884 7.3596893E-4
+ 36.6 2.9485666 34.961975 1.8414058E-4
+ 36.6 3.161317 34.973564 -2.62809E-4
+ 36.6 3.4862494 34.99408 -5.9814983E-4
+ 36.6 3.8095502 35.012977 -9.3823636E-4
+ 36.6 4.314594 35.077213 -1.5096489E-3
+ 36.6 4.9955682 35.168743 -2.3827087E-3
+ 36.6 6.202994 35.353878 -3.2792531E-3
+ 36.6 8.03071 35.666702 -4.2414865E-3
+ 36.6 9.311628 35.841064 -5.5033694E-3
+ 36.6 9.979613 35.845233 -6.7325057E-3
+ 36.6 10.441 35.7888 -7.311688E-3
+ 36.6 10.665058 35.676395 -7.6384004E-3
+ 36.6 10.894482 35.56901 -7.6452037E-3
+ 36.6 11.305063 35.547676 -6.9728605E-3
+ 36.6 11.678748 35.58107 -6.037622E-3
+ 36.6 12.069579 35.62463 -5.1972083E-3
+ 36.6 12.37674 35.657573 -4.61752E-3
+ 36.6 12.67236 35.691726 -4.2173145E-3
+ 36.6 12.885076 35.712432 -3.890177E-3
+ 36.6 13.08408 35.736343 -3.6164491E-3
+ 36.6 13.345325 35.77092 -3.38217E-3
+ 36.6 13.534527 35.794364 -3.1529583E-3
+ 36.6 13.698458 35.81505 -2.9149123E-3
+ 36.6 13.863255 35.837516 -2.6777943E-3
+ 36.6 13.97747 35.8535 -2.456283E-3
+ 36.6 14.07723 35.868373 -2.2482497E-3
+ 36.6 14.155409 35.878097 -2.0476481E-3
+ 36.6 14.232593 35.888477 -1.857634E-3
+ 36.6 14.309678 35.89797 -1.6782491E-3
+ 36.6 14.364812 35.906013 -1.5099866E-3
+ 36.6 14.436721 35.91393 -1.3481858E-3
+ 36.6 14.494426 35.920612 -1.1828894E-3
+ 36.6 14.540618 35.925304 -1.0116384E-3
+ 36.6 14.594576 35.929756 -8.36423E-4
+ 36.6 14.647372 35.93483 -6.606502E-4
+ 36.6 14.717168 35.941062 -4.7876691E-4
+ 36.6 14.77049 35.944934 -2.8585502E-4
+ 36.6 14.849542 35.955245 -8.62704E-5
+ 36.6 14.931524 35.966762 1.2095054E-4
+ 36.6 15.028387 35.976196 3.3735431E-4
+ 36.6 15.13182 35.984706 5.6604185E-4
+ 36.6 15.24475 35.992412 8.0440484E-4
+ 36.6 15.384107 36.00773 1.0490349E-3
+ 36.6 15.577684 36.023784 1.296331E-3
+ 36.6 15.760512 36.04297 1.5509321E-3
+ 36.6 16.03997 36.058826 1.8459671E-3
+ 36.6 16.4752 36.074066 2.2027611E-3
+ 36.6 16.987186 36.081867 2.6375595E-3
+ 36.6 17.597404 36.0894 3.1735051E-3
+ 36.6 18.299192 36.09802 3.7947711E-3
+ 36.6 19.280815 36.108402 4.3962146E-3
+ 36.6 20.155993 36.12127 4.899236E-3
+ 36.6 20.720194 36.144 5.3069074E-3
+ 36.6 21.046059 36.164783 5.6001883E-3
+ 36.6 21.109205 36.176433 5.801317E-3
+ 36.6 21.13307 36.190425 5.9637255E-3
+ 36.6 21.15026 36.201332 6.1006224E-3
+ 36.6 21.140736 36.205173 6.211087E-3
+ 36.6 21.067236 36.20223 6.343107E-3
+ 36.65 2.533352 34.896873 0.0E+0
+ 36.65 2.518674 34.89805 5.0501106E-4
+ 36.65 2.5258224 34.904575 1.0166285E-3
+ 36.65 2.5444924 34.913425 1.4081036E-3
+ 36.65 2.5784108 34.922943 1.4913247E-3
+ 36.65 2.6573402 34.935894 1.246244E-3
+ 36.65 2.7681066 34.949012 7.602121E-4
+ 36.65 2.9483096 34.962203 2.0365692E-4
+ 36.65 3.1608717 34.97371 -2.4745272E-4
+ 36.65 3.4857556 34.994167 -5.7531235E-4
+ 36.65 3.809546 35.013187 -8.8960764E-4
+ 36.65 4.318444 35.07819 -1.4006463E-3
+ 36.65 5.0059366 35.17095 -2.1940402E-3
+ 36.65 6.2136964 35.35625 -3.0204784E-3
+ 36.65 8.03465 35.66831 -3.9268783E-3
+ 36.65 9.311637 35.842254 -5.165717E-3
+ 36.65 9.98887 35.848327 -6.4175706E-3
+ 36.65 10.452879 35.79169 -7.0336037E-3
+ 36.65 10.675964 35.67951 -7.3741474E-3
+ 36.65 10.90441 35.570774 -7.3765316E-3
+ 36.65 11.311581 35.54789 -6.6989907E-3
+ 36.65 11.684105 35.580654 -5.7400655E-3
+ 36.65 12.076046 35.624523 -4.8638214E-3
+ 36.65 12.382275 35.657505 -4.2562773E-3
+ 36.65 12.676527 35.691394 -3.8348853E-3
+ 36.65 12.890227 35.712207 -3.4918116E-3
+ 36.65 13.089721 35.736331 -3.2060376E-3
+ 36.65 13.351449 35.77091 -2.9656463E-3
+ 36.65 13.543235 35.794754 -2.7346175E-3
+ 36.65 13.70917 35.81557 -2.495728E-3
+ 36.65 13.874665 35.838073 -2.2588763E-3
+ 36.65 13.989709 35.85421 -2.038232E-3
+ 36.65 14.090966 35.869346 -1.8304931E-3
+ 36.65 14.170322 35.879207 -1.6294225E-3
+ 36.65 14.248229 35.889766 -1.4383402E-3
+ 36.65 14.326089 35.899372 -1.2578991E-3
+ 36.65 14.382041 35.907707 -1.0887316E-3
+ 36.65 14.455332 35.915805 -9.261369E-4
+ 36.65 14.514191 35.92253 -7.597948E-4
+ 36.65 14.561638 35.927253 -5.869074E-4
+ 36.65 14.616087 35.93167 -4.097472E-4
+ 36.65 14.66954 35.936805 -2.3182612E-4
+ 36.65 14.741354 35.943222 -4.750163E-5
+ 36.65 14.795696 35.947074 1.48091E-4
+ 36.65 14.876154 35.957603 3.5048957E-4
+ 36.65 14.95941 35.969223 5.60712E-4
+ 36.65 15.057591 35.97877 7.8020145E-4
+ 36.65 15.163095 35.987457 1.011825E-3
+ 36.65 15.276396 35.995273 1.2527832E-3
+ 36.65 15.415106 36.010173 1.4997574E-3
+ 36.65 15.607605 36.02615 1.7484704E-3
+ 36.65 15.793929 36.045875 2.0047787E-3
+ 36.65 16.08066 36.062416 2.3029316E-3
+ 36.65 16.521614 36.077957 2.6633932E-3
+ 36.65 17.042961 36.086402 3.105444E-3
+ 36.65 17.66132 36.09396 3.6552208E-3
+ 36.65 18.367846 36.103 4.2938794E-3
+ 36.65 19.338697 36.11339 4.9049924E-3
+ 36.65 20.205042 36.1265 5.4016043E-3
+ 36.65 20.763914 36.15016 5.795292E-3
+ 36.65 21.083824 36.172386 6.080099E-3
+ 36.65 21.146692 36.18526 6.279643E-3
+ 36.65 21.171429 36.2003 6.442172E-3
+ 36.65 21.18899 36.21201 6.5783634E-3
+ 36.65 21.177883 36.21606 6.6866762E-3
+ 36.65 21.10284 36.21296 6.814538E-3
+ 36.7 2.5325071 34.896556 0.0E+0
+ 36.7 2.5180087 34.89774 5.0527433E-4
+ 36.7 2.5252714 34.904285 1.0183332E-3
+ 36.7 2.5438303 34.91322 1.4142075E-3
+ 36.7 2.5773527 34.922863 1.5045267E-3
+ 36.7 2.6562438 34.935935 1.2654783E-3
+ 36.7 2.767086 34.949172 7.811884E-4
+ 36.7 2.9479541 34.96242 2.2189962E-4
+ 36.7 3.160286 34.97383 -2.31627E-4
+ 36.7 3.485035 34.99422 -5.509337E-4
+ 36.7 3.8091444 35.013324 -8.3887245E-4
+ 36.7 4.321561 35.079013 -1.289737E-3
+ 36.7 5.015525 35.172992 -2.003873E-3
+ 36.7 6.223332 35.3584 -2.7601004E-3
+ 36.7 8.037165 35.6696 -3.6090537E-3
+ 36.7 9.31085 35.84327 -4.8198234E-3
+ 36.7 9.997658 35.85136 -6.086946E-3
+ 36.7 10.464172 35.79448 -6.733919E-3
+ 36.7 10.686109 35.68244 -7.084186E-3
+ 36.7 10.913979 35.57244 -7.079858E-3
+ 36.7 11.317845 35.54804 -6.3972515E-3
+ 36.7 11.689471 35.580165 -5.4166843E-3
+ 36.7 12.082532 35.624355 -4.5072073E-3
+ 36.7 12.387942 35.657394 -3.8735095E-3
+ 36.7 12.680735 35.691005 -3.431957E-3
+ 36.7 12.89549 35.711936 -3.0737007E-3
+ 36.7 13.095407 35.736274 -2.776461E-3
+ 36.7 13.357251 35.77079 -2.5303054E-3
+ 36.7 13.55152 35.79502 -2.2977092E-3
+ 36.7 13.719392 35.815952 -2.0582783E-3
+ 36.7 13.885459 35.838474 -1.8220065E-3
+ 36.7 14.001306 35.85475 -1.6025102E-3
+ 36.7 14.104066 35.870147 -1.3953574E-3
+ 36.7 14.18468 35.88015 -1.1941441E-3
+ 36.7 14.263327 35.89089 -1.0023286E-3
+ 36.7 14.341945 35.900604 -8.211448E-4
+ 36.7 14.398717 35.90923 -6.513565E-4
+ 36.7 14.473375 35.91751 -4.8824053E-4
+ 36.7 14.533452 35.924285 -3.2115861E-4
+ 36.7 14.582217 35.929042 -1.4699282E-4
+ 36.7 14.637192 35.933425 3.1724131E-5
+ 36.7 14.691355 35.93863 2.1139233E-4
+ 36.7 14.765212 35.94523 3.9771464E-4
+ 36.7 14.820638 35.94908 5.9549434E-4
+ 36.7 14.902525 35.959827 8.001864E-4
+ 36.7 14.987055 35.971542 1.0128499E-3
+ 36.7 15.086519 35.981197 1.2348264E-3
+ 36.7 15.194112 35.99007 1.468751E-3
+ 36.7 15.3078 35.998012 1.7116542E-3
+ 36.7 15.445792 36.012474 1.9603101E-3
+ 36.7 15.637032 36.028362 2.2097944E-3
+ 36.7 15.826977 36.048614 2.4671272E-3
+ 36.7 16.120947 36.065822 2.7675142E-3
+ 36.7 16.567661 36.081657 3.1305435E-3
+ 36.7 17.09888 36.09075 3.5783275E-3
+ 36.7 17.726004 36.09837 4.139784E-3
+ 36.7 18.437151 36.1078 4.7931633E-3
+ 36.7 19.39609 36.118217 5.4116202E-3
+ 36.7 20.252563 36.131603 5.9004775E-3
+ 36.7 20.806232 36.156196 6.279382E-3
+ 36.7 21.120886 36.179843 6.555125E-3
+ 36.7 21.183868 36.193984 6.752627E-3
+ 36.7 21.209513 36.21009 6.914909E-3
+ 36.7 21.227396 36.222625 7.050129E-3
+ 36.7 21.214598 36.226886 7.156144E-3
+ 36.7 21.13807 36.223636 7.279768E-3
+ 36.75 2.5315728 34.89623 0.0E+0
+ 36.75 2.5172731 34.89742 5.0398294E-4
+ 36.75 2.5246701 34.903984 1.0169804E-3
+ 36.75 2.5431387 34.913002 1.4157838E-3
+ 36.75 2.576267 34.92278 1.512484E-3
+ 36.75 2.6550943 34.93597 1.2798045E-3
+ 36.75 2.7659904 34.94933 7.9867575E-4
+ 36.75 2.9475061 34.96263 2.3868892E-4
+ 36.75 3.1595687 34.97394 -2.154911E-4
+ 36.75 3.484102 34.994232 -5.252754E-4
+ 36.75 3.808366 35.01339 -7.865783E-4
+ 36.75 4.3239693 35.079685 -1.17802E-3
+ 36.75 5.0243453 35.17487 -1.8139606E-3
+ 36.75 6.231933 35.360324 -2.5004481E-3
+ 36.75 8.038346 35.67059 -3.2908581E-3
+ 36.75 9.309358 35.844127 -4.4689434E-3
+ 36.75 10.005986 35.854316 -5.7440535E-3
+ 36.75 10.474887 35.79716 -6.416117E-3
+ 36.75 10.695509 35.685192 -6.7722573E-3
+ 36.75 10.923192 35.574016 -6.759336E-3
+ 36.75 11.323864 35.548122 -6.072193E-3
+ 36.75 11.694849 35.579616 -5.0725373E-3
+ 36.75 12.089034 35.624122 -4.1329814E-3
+ 36.75 12.393739 35.65724 -3.4752776E-3
+ 36.75 12.684993 35.690563 -3.01495E-3
+ 36.75 12.900871 35.71163 -2.6425526E-3
+ 36.75 13.101145 35.736167 -2.334657E-3
+ 36.75 13.36275 35.770576 -2.0832438E-3
+ 36.75 13.559395 35.79517 -1.8494362E-3
+ 36.75 13.729136 35.816204 -1.6098547E-3
+ 36.75 13.895652 35.838726 -1.3745459E-3
+ 36.75 14.012276 35.855133 -1.1565366E-3
+ 36.75 14.116541 35.87078 -9.5031945E-4
+ 36.75 14.198486 35.88093 -7.493501E-4
+ 36.75 14.277888 35.89185 -5.571981E-4
+ 36.75 14.357248 35.901676 -3.7564465E-4
+ 36.75 14.41484 35.910587 -2.055755E-4
+ 36.75 14.490845 35.91905 -4.2263745E-5
+ 36.75 14.552198 35.925872 1.2519895E-4
+ 36.75 14.602337 35.93067 3.002284E-4
+ 36.75 14.657871 35.935028 4.8005592E-4
+ 36.75 14.712789 35.940307 6.610106E-4
+ 36.75 14.788708 35.94709 8.48827E-4
+ 36.75 14.845278 35.95095 1.0482386E-3
+ 36.75 14.928611 35.961917 1.254641E-3
+ 36.75 15.01441 35.973724 1.4691221E-3
+ 36.75 15.115117 35.983474 1.6929241E-3
+ 36.75 15.224808 35.99255 1.9284534E-3
+ 36.75 15.3389 36.00063 2.1725934E-3
+ 36.75 15.47611 36.014636 2.4222123E-3
+ 36.75 15.665921 36.03043 2.671776E-3
+ 36.75 15.859597 36.05118 2.9294027E-3
+ 36.75 16.160746 36.069042 3.2310807E-3
+ 36.75 16.613237 36.08517 3.5955137E-3
+ 36.75 17.154781 36.09491 4.0474212E-3
+ 36.75 17.791233 36.102626 4.618265E-3
+ 36.75 18.506853 36.11241 5.283539E-3
+ 36.75 19.452848 36.122867 5.9069264E-3
+ 36.75 20.29848 36.136577 6.386731E-3
+ 36.75 20.847078 36.1621 6.7501752E-3
+ 36.75 21.157171 36.18714 7.016332E-3
+ 36.75 21.220655 36.202587 7.211325E-3
+ 36.75 21.247238 36.21978 7.372966E-3
+ 36.75 21.265396 36.233146 7.506931E-3
+ 36.75 21.250803 36.237625 7.6105E-3
+ 36.75 21.172857 36.234233 7.7298115E-3
+ 36.8 2.5305562 34.89589 0.0E+0
+ 36.8 2.516473 34.897094 5.010984E-4
+ 36.8 2.5240228 34.90368 1.0124618E-3
+ 36.8 2.5424213 34.912784 1.4126677E-3
+ 36.8 2.575158 34.922683 1.5149863E-3
+ 36.8 2.6538984 34.935997 1.289001E-3
+ 36.8 2.7648282 34.94947 8.1247225E-4
+ 36.8 2.946973 34.962833 2.5385536E-4
+ 36.8 3.1587305 34.974033 -1.9920291E-4
+ 36.8 3.4829726 34.99421 -4.986003E-4
+ 36.8 3.8072347 35.01339 -7.3326984E-4
+ 36.8 4.3257007 35.08021 -1.0665756E-3
+ 36.8 5.0324144 35.176582 -1.6260154E-3
+ 36.8 6.2395396 35.362037 -2.2437914E-3
+ 36.8 8.038292 35.67129 -2.975086E-3
+ 36.8 9.307249 35.844833 -4.1163135E-3
+ 36.8 10.013868 35.857204 -5.3923367E-3
+ 36.8 10.485032 35.799736 -6.0837394E-3
+ 36.8 10.70418 35.687767 -6.4421775E-3
+ 36.8 10.932051 35.575496 -6.4192004E-3
+ 36.8 11.329647 35.54815 -5.728439E-3
+ 36.8 11.700234 35.579013 -4.7127385E-3
+ 36.8 12.095545 35.623832 -3.7467894E-3
+ 36.8 12.399659 35.65705 -3.0676515E-3
+ 36.8 12.689305 35.69007 -2.5902802E-3
+ 36.8 12.906369 35.711296 -2.2050593E-3
+ 36.8 13.106933 35.736026 -1.8875395E-3
+ 36.8 13.367965 35.770267 -1.6315273E-3
+ 36.8 13.566876 35.79521 -1.3969686E-3
+ 36.8 13.738412 35.816326 -1.1577128E-3
+ 36.8 13.905261 35.83884 -9.238169E-4
+ 36.8 14.022635 35.855365 -7.0768926E-4
+ 36.8 14.128401 35.871257 -5.028127E-4
+ 36.8 14.211745 35.881565 -3.025308E-4
+ 36.8 14.291916 35.89266 -1.1049809E-4
+ 36.8 14.372 35.90259 7.099505E-5
+ 36.8 14.430407 35.91179 2.4095146E-4
+ 36.8 14.507737 35.92043 4.0408322E-4
+ 36.8 14.570418 35.927303 5.7151715E-4
+ 36.8 14.621978 35.932147 7.469418E-4
+ 36.8 14.678101 35.93648 9.2737824E-4
+ 36.8 14.733816 35.94184 1.1091025E-3
+ 36.8 14.811806 35.948806 1.2978523E-3
+ 36.8 14.869571 35.95269 1.4982825E-3
+ 36.8 14.954363 35.96388 1.7057533E-3
+ 36.8 15.041419 35.97577 1.9213696E-3
+ 36.8 15.14333 35.985607 2.1462764E-3
+ 36.8 15.255119 35.994892 2.382657E-3
+ 36.8 15.369633 36.003128 2.627271E-3
+ 36.8 15.506 36.016666 2.877083E-3
+ 36.8 15.694228 36.032356 3.1259914E-3
+ 36.8 15.891727 36.05358 3.383136E-3
+ 36.8 16.199968 36.07208 3.685109E-3
+ 36.8 16.658236 36.088493 4.0497235E-3
+ 36.8 17.210491 36.09888 4.504062E-3
+ 36.8 17.856775 36.10673 5.081875E-3
+ 36.8 18.5767 36.116836 5.7560773E-3
+ 36.8 19.508827 36.12735 6.3819065E-3
+ 36.8 20.342724 36.141422 6.8514114E-3
+ 36.8 20.886395 36.167865 7.1988413E-3
+ 36.8 21.192617 36.194274 7.454956E-3
+ 36.8 21.256973 36.21105 7.646967E-3
+ 36.8 21.28452 36.229347 7.8075476E-3
+ 36.8 21.302908 36.243556 7.939956E-3
+ 36.8 21.286427 36.24825 8.040929E-3
+ 36.8 21.207127 36.244724 8.155861E-3
+ 36.85 2.5294654 34.895542 0.0E+0
+ 36.85 2.5156142 34.896762 4.9658934E-4
+ 36.85 2.523335 34.90337 1.0046836E-3
+ 36.85 2.5416822 34.91256 1.4047179E-3
+ 36.85 2.574032 34.922584 1.5118517E-3
+ 36.85 2.6526634 34.93602 1.2928749E-3
+ 36.85 2.763607 34.949607 8.223988E-4
+ 36.85 2.9463624 34.963024 2.672418E-4
+ 36.85 3.157782 34.97411 -1.8291698E-4
+ 36.85 3.4816641 34.994155 -4.711693E-4
+ 36.85 3.8057763 35.01332 -6.7948253E-4
+ 36.85 4.326791 35.0806 -9.5645285E-4
+ 36.85 5.039754 35.17814 -1.4416885E-3
+ 36.85 6.246194 35.36354 -1.9923183E-3
+ 36.85 8.037104 35.671733 -2.6644475E-3
+ 36.85 9.304611 35.84541 -3.7651075E-3
+ 36.85 10.021313 35.86001 -5.035217E-3
+ 36.85 10.494616 35.8022 -5.740338E-3
+ 36.85 10.712143 35.690162 -6.0977884E-3
+ 36.85 10.940557 35.576885 -6.063707E-3
+ 36.85 11.335201 35.548122 -5.370625E-3
+ 36.85 11.705622 35.578357 -4.342387E-3
+ 36.85 12.102055 35.623493 -3.3542274E-3
+ 36.85 12.405691 35.65683 -2.6566288E-3
+ 36.85 12.693672 35.68954 -2.164273E-3
+ 36.85 12.911976 35.71093 -1.7678093E-3
+ 36.85 13.112769 35.735847 -1.4419063E-3
+ 36.85 13.372913 35.76988 -1.1820992E-3
+ 36.85 13.573977 35.79515 -9.473479E-4
+ 36.85 13.747234 35.816333 -7.089749E-4
+ 36.85 13.914304 35.83882 -4.7700564E-4
+ 36.85 14.032399 35.855453 -2.632066E-4
+ 36.85 14.139659 35.87158 -6.012752E-5
+ 36.85 14.22446 35.882053 1.3896952E-4
+ 36.85 14.305411 35.893314 3.3037163E-4
+ 36.85 14.386199 35.903362 5.113213E-4
+ 36.85 14.445418 35.912834 6.80721E-4
+ 36.85 14.524044 35.921653 8.432495E-4
+ 36.85 14.588098 35.928577 1.0101977E-3
+ 36.85 14.641117 35.933475 1.1854987E-3
+ 36.85 14.697856 35.93779 1.365991E-3
+ 36.85 14.754404 35.943237 1.5479152E-3
+ 36.85 14.834466 35.95038 1.7369846E-3
+ 36.85 14.893472 35.9543 1.9377666E-3
+ 36.85 14.979727 35.965705 2.1456093E-3
+ 36.85 15.068027 35.97768 2.3616238E-3
+ 36.85 15.171099 35.987594 2.586861E-3
+ 36.85 15.284979 35.9971 2.8232866E-3
+ 36.85 15.399929 36.005504 3.067562E-3
+ 36.85 15.535402 36.01856 3.3167493E-3
+ 36.85 15.721905 36.034145 3.5642292E-3
+ 36.85 15.923302 36.055824 3.820076E-3
+ 36.85 16.238527 36.074932 4.1213E-3
+ 36.85 16.702549 36.09163 4.484822E-3
+ 36.85 17.265833 36.102657 4.9398257E-3
+ 36.85 17.922388 36.110683 5.522078E-3
+ 36.85 18.646427 36.12107 6.20212E-3
+ 36.85 19.563877 36.13165 6.827842E-3
+ 36.85 20.385239 36.146125 7.2858557E-3
+ 36.85 20.924131 36.17348 7.6168365E-3
+ 36.85 21.227154 36.20122 7.862519E-3
+ 36.85 21.292736 36.219352 8.05107E-3
+ 36.85 21.321272 36.23877 8.210149E-3
+ 36.85 21.339836 36.253822 8.340685E-3
+ 36.85 21.321392 36.25873 8.43891E-3
+ 36.85 21.240807 36.25509 8.5494E-3
+ 36.9 2.5283093 34.89519 0.0E+0
+ 36.9 2.5147035 34.896427 4.90432E-4
+ 36.9 2.5226116 34.903057 9.935681E-4
+ 36.9 2.5409257 34.91233 1.3918182E-3
+ 36.9 2.5728943 34.92248 1.5029302E-3
+ 36.9 2.6513967 34.93603 1.2912645E-3
+ 36.9 2.7623364 34.949733 8.283009E-4
+ 36.9 2.9456822 34.963203 2.78705E-4
+ 36.9 3.1567351 34.974174 -1.6678259E-4
+ 36.9 3.4801948 34.994071 -4.4323797E-4
+ 36.9 3.8040194 35.013195 -6.257357E-4
+ 36.9 4.327279 35.080852 -8.486578E-4
+ 36.9 5.0463876 35.179542 -1.2625524E-3
+ 36.9 6.2519454 35.36485 -1.7481092E-3
+ 36.9 8.034885 35.671924 -2.36154E-3
+ 36.9 9.301529 35.845867 -3.4184018E-3
+ 36.9 10.028335 35.86273 -4.6760477E-3
+ 36.9 10.503652 35.80455 -5.389425E-3
+ 36.9 10.719422 35.692382 -5.7429024E-3
+ 36.9 10.948712 35.57818 -5.697078E-3
+ 36.9 11.340531 35.54805 -5.0033335E-3
+ 36.9 11.711003 35.577655 -3.966494E-3
+ 36.9 12.108551 35.62311 -2.960768E-3
+ 36.9 12.411818 35.65658 -2.248054E-3
+ 36.9 12.698092 35.688972 -1.7430787E-3
+ 36.9 12.917682 35.710544 -1.3371976E-3
+ 36.9 13.118645 35.73564 -1.0043484E-3
+ 36.9 13.377606 35.76941 -7.416862E-4
+ 36.9 13.58071 35.794994 -5.0739356E-4
+ 36.9 13.755611 35.816234 -2.705363E-4
+ 36.9 13.922798 35.838684 -4.1066195E-5
+ 36.9 14.041585 35.855407 1.6990856E-4
+ 36.9 14.150325 35.87176 3.706848E-4
+ 36.9 14.236634 35.88241 5.6805036E-4
+ 36.9 14.318375 35.893836 7.5825944E-4
+ 36.9 14.399847 35.90399 9.3813316E-4
+ 36.9 14.459869 35.91374 1.1064856E-3
+ 36.9 14.539761 35.922733 1.2679436E-3
+ 36.9 14.605223 35.92971 1.4339054E-3
+ 36.9 14.659732 35.93466 1.6085183E-3
+ 36.9 14.717111 35.93896 1.7884657E-3
+ 36.9 14.774521 35.9445 1.9699723E-3
+ 36.9 14.856646 35.951816 2.158699E-3
+ 36.9 14.916931 35.955783 2.3591173E-3
+ 36.9 15.00465 35.96741 2.566586E-3
+ 36.9 15.094173 35.97946 2.782212E-3
+ 36.9 15.198362 35.98944 3.006956E-3
+ 36.9 15.314318 35.999176 3.2425748E-3
+ 36.9 15.429718 36.007762 3.485654E-3
+ 36.9 15.56425 36.02033 3.733357E-3
+ 36.9 15.748906 36.0358 3.978601E-3
+ 36.9 15.954255 36.057907 4.232299E-3
+ 36.9 16.276327 36.07761 4.531688E-3
+ 36.9 16.746067 36.094577 4.8928E-3
+ 36.9 17.320627 36.106246 5.346641E-3
+ 36.9 17.987823 36.11447 5.930704E-3
+ 36.9 18.715767 36.12511 6.6133947E-3
+ 36.9 19.617855 36.135772 7.2364122E-3
+ 36.9 20.425974 36.15069 7.6818E-3
+ 36.9 20.960249 36.17894 7.996014E-3
+ 36.9 21.26072 36.20798 8.23094E-3
+ 36.9 21.327862 36.227478 8.415554E-3
+ 36.9 21.3574 36.248023 8.572665E-3
+ 36.9 21.376099 36.263923 8.700999E-3
+ 36.9 21.355623 36.26905 8.796327E-3
+ 36.9 21.27382 36.26529 8.902315E-3
+ 36.95 2.5270974 34.894832 0.0E+0
+ 36.95 2.5137486 34.896087 4.8261057E-4
+ 36.95 2.5218586 34.90274 9.790555E-4
+ 36.95 2.5401561 34.9121 1.3738797E-3
+ 36.95 2.5717506 34.922374 1.4881046E-3
+ 36.95 2.6501061 34.936035 1.2840418E-3
+ 36.95 2.7610256 34.949851 8.300502E-4
+ 36.95 2.9449412 34.963375 2.8811744E-4
+ 36.95 3.1556026 34.97422 -1.50942E-4
+ 36.95 3.4785838 34.993957 -4.1505353E-4
+ 36.95 3.8019948 35.013011 -5.725265E-4
+ 36.95 4.327209 35.080982 -7.4414123E-4
+ 36.95 5.052345 35.180797 -1.0900829E-3
+ 36.95 6.256845 35.365966 -1.513116E-3
+ 36.95 8.031747 35.67189 -2.0688145E-3
+ 36.95 9.298082 35.84622 -3.0791338E-3
+ 36.95 10.034946 35.865356 -4.3180724E-3
+ 36.95 10.51215 35.80679 -5.0344276E-3
+ 36.95 10.726045 35.694427 -5.381251E-3
+ 36.95 10.956518 35.579383 -5.323439E-3
+ 36.95 11.345644 35.547927 -4.6310303E-3
+ 36.95 11.716366 35.57692 -3.5899197E-3
+ 36.95 12.115017 35.622684 -2.5716857E-3
+ 36.95 12.418021 35.656307 -1.8475397E-3
+ 36.95 12.702556 35.688377 -1.3325899E-3
+ 36.95 12.923472 35.710144 -9.1934145E-4
+ 36.95 13.124546 35.735404 -5.8116286E-4
+ 36.95 13.38206 35.76888 -3.1671026E-4
+ 36.95 13.587089 35.794757 -8.361277E-5
+ 36.95 13.763554 35.816032 1.5102654E-4
+ 36.95 13.930761 35.838436 3.7737126E-4
+ 36.95 14.050211 35.855243 5.8498163E-4
+ 36.95 14.160412 35.87182 7.82906E-4
+ 36.95 14.24827 35.882637 9.779487E-4
+ 36.95 14.330807 35.89423 1.1663563E-3
+ 36.95 14.412941 35.904487 1.3445771E-3
+ 36.95 14.473756 35.91451 1.5113496E-3
+ 36.95 14.554878 35.92367 1.6712304E-3
+ 36.95 14.621778 35.930702 1.835666E-3
+ 36.95 14.677797 35.935714 2.0089843E-3
+ 36.95 14.735836 35.940002 2.187744E-3
+ 36.95 14.794131 35.945636 2.3681721E-3
+ 36.95 14.878303 35.95312 2.5558518E-3
+ 36.95 14.939898 35.957145 2.7551471E-3
+ 36.95 15.029072 35.968994 2.9614523E-3
+ 36.95 15.119795 35.981113 3.1758605E-3
+ 36.95 15.225055 35.991153 3.3992452E-3
+ 36.95 15.343063 36.001117 3.6331634E-3
+ 36.95 15.458926 36.0099 3.8741508E-3
+ 36.95 15.59248 36.02197 4.1194725E-3
+ 36.95 15.775182 36.037326 4.361646E-3
+ 36.95 15.984518 36.059837 4.612312E-3
+ 36.95 16.31328 36.08011 4.9087465E-3
+ 36.95 16.788677 36.097347 5.266094E-3
+ 36.95 17.374691 36.109645 5.7168933E-3
+ 36.95 18.052822 36.118103 6.300059E-3
+ 36.95 18.784447 36.12896 6.982123E-3
+ 36.95 19.670616 36.139717 7.5998064E-3
+ 36.95 20.46489 36.155097 8.031493E-3
+ 36.95 20.994713 36.18423 8.328735E-3
+ 36.95 21.293253 36.21453 8.552644E-3
+ 36.95 21.362259 36.23541 8.7328394E-3
+ 36.95 21.39281 36.257083 8.887503E-3
+ 36.95 21.411598 36.273826 9.013295E-3
+ 36.95 21.38904 36.279174 9.1055724E-3
+ 36.95 21.306091 36.275306 9.207008E-3
+ 37.0 2.5258398 34.894477 0.0E+0
+ 37.0 2.512757 34.895744 4.7311754E-4
+ 37.0 2.5210824 34.902427 9.611041E-4
+ 37.0 2.539378 34.911872 1.3508417E-3
+ 37.0 2.570607 34.922264 1.4672932E-3
+ 37.0 2.6488001 34.93604 1.271113E-3
+ 37.0 2.7596843 34.949962 8.275466E-4
+ 37.0 2.9441483 34.96354 2.9536877E-4
+ 37.0 3.154397 34.974254 -1.3552874E-4
+ 37.0 3.4768517 34.99382 -3.8685183E-4
+ 37.0 3.7997343 35.01278 -5.2032363E-4
+ 37.0 4.326629 35.081 -6.4378796E-4
+ 37.0 5.057657 35.18191 -9.256429E-4
+ 37.0 6.260949 35.366912 -1.2891382E-3
+ 37.0 8.027798 35.671657 -1.7885502E-3
+ 37.0 9.294348 35.846477 -2.7500654E-3
+ 37.0 10.041157 35.867897 -3.96438E-3
+ 37.0 10.520123 35.808914 -4.6786414E-3
+ 37.0 10.732039 35.696304 -5.0164354E-3
+ 37.0 10.963974 35.580497 -4.9467682E-3
+ 37.0 11.350541 35.547767 -4.2580044E-3
+ 37.0 11.721698 35.576152 -3.217302E-3
+ 37.0 12.121434 35.622226 -2.191986E-3
+ 37.0 12.424276 35.656013 -1.4603928E-3
+ 37.0 12.707052 35.68776 -9.383638E-4
+ 37.0 12.929324 35.70973 -5.199995E-4
+ 37.0 13.130458 35.73515 -1.7826955E-4
+ 37.0 13.386284 35.768287 8.6796164E-5
+ 37.0 13.593123 35.79444 3.1788527E-4
+ 37.0 13.771073 35.815746 5.495424E-4
+ 37.0 13.93821 35.838092 7.7208783E-4
+ 37.0 14.058294 35.85497 9.757545E-4
+ 37.0 14.169932 35.871753 1.1702392E-3
+ 37.0 14.25937 35.88275 1.3623283E-3
+ 37.0 14.342707 35.894504 1.5482855E-3
+ 37.0 14.425479 35.904865 1.7242373E-3
+ 37.0 14.487076 35.915145 1.8888599E-3
+ 37.0 14.569389 35.924476 2.0466216E-3
+ 37.0 14.637745 35.93156 2.2089565E-3
+ 37.0 14.695287 35.936634 2.3803382E-3
+ 37.0 14.754002 35.940914 2.5572306E-3
+ 37.0 14.813199 35.946647 2.735882E-3
+ 37.0 14.899392 35.954303 2.9217721E-3
+ 37.0 14.962319 35.958393 3.119149E-3
+ 37.0 15.052935 35.970455 3.3234634E-3
+ 37.0 15.144828 35.98264 3.535787E-3
+ 37.0 15.251114 35.992733 3.7569103E-3
+ 37.0 15.371142 36.002933 3.9882003E-3
+ 37.0 15.487479 36.011917 4.2261676E-3
+ 37.0 15.620023 36.023487 4.4681825E-3
+ 37.0 15.800682 36.038734 4.706425E-3
+ 37.0 16.014017 36.06162 4.9531552E-3
+ 37.0 16.349295 36.08244 5.2454867E-3
+ 37.0 16.830267 36.099937 5.597688E-3
+ 37.0 17.42784 36.112857 6.043527E-3
+ 37.0 18.117125 36.12157 6.623024E-3
+ 37.0 18.852198 36.13261 7.3011233E-3
+ 37.0 19.72202 36.14348 7.910826E-3
+ 37.0 20.501955 36.15935 8.327798E-3
+ 37.0 21.027498 36.18935 8.607966E-3
+ 37.0 21.324692 36.220867 8.820659E-3
+ 37.0 21.39584 36.24313 8.995959E-3
+ 37.0 21.427414 36.26593 9.147679E-3
+ 37.0 21.446245 36.28351 9.27058E-3
+ 37.0 21.421564 36.289077 9.359655E-3
+ 37.0 21.33754 36.285106 9.456491E-3
+ 37.05 2.5245468 34.89412 0.0E+0
+ 37.05 2.511737 34.895404 4.6195424E-4
+ 37.05 2.5202884 34.902114 9.3969213E-4
+ 37.05 2.538596 34.911643 1.3226736E-3
+ 37.05 2.5694692 34.922153 1.4404508E-3
+ 37.05 2.6474864 34.93603 1.2524212E-3
+ 37.05 2.7583227 34.95006 8.20719E-4
+ 37.05 2.9433124 34.96369 3.0036724E-4
+ 37.05 3.153132 34.974277 -1.2066596E-4
+ 37.05 3.4750196 34.993656 -3.5885453E-4
+ 37.05 3.7972722 35.012504 -4.69562E-4
+ 37.05 4.325589 35.080913 -5.484062E-4
+ 37.05 5.0623583 35.182895 -7.7046663E-4
+ 37.05 6.2643156 35.367687 -1.0778042E-3
+ 37.05 8.0231494 35.67124 -1.5228237E-3
+ 37.05 9.290398 35.84665 -2.4337496E-3
+ 37.05 10.046981 35.87034 -3.617865E-3
+ 37.05 10.527586 35.810924 -4.3251863E-3
+ 37.05 10.737437 35.698013 -4.6518766E-3
+ 37.05 10.971082 35.581527 -4.5708403E-3
+ 37.05 11.355226 35.547576 -3.888312E-3
+ 37.05 11.726981 35.57536 -2.852999E-3
+ 37.05 12.127782 35.62174 -1.8263397E-3
+ 37.05 12.430555 35.655704 -1.0915429E-3
+ 37.05 12.711567 35.687126 -5.655486E-4
+ 37.05 12.935215 35.709304 -1.4449586E-4
+ 37.05 13.13636 35.73488 1.9886647E-4
+ 37.05 13.390289 35.76765 4.6326935E-4
+ 37.05 13.598823 35.794063 6.914694E-4
+ 37.05 13.778177 35.815376 9.193262E-4
+ 37.05 13.945164 35.837657 1.1373574E-3
+ 37.05 14.065851 35.8546 1.3364673E-3
+ 37.05 14.178897 35.871582 1.5268912E-3
+ 37.05 14.269936 35.882762 1.7153631E-3
+ 37.05 14.354072 35.89467 1.8981864E-3
+ 37.05 14.437459 35.905132 2.0712201E-3
+ 37.05 14.499821 35.91567 2.233091E-3
+ 37.05 14.583284 35.92516 2.3881616E-3
+ 37.05 14.653107 35.9323 2.5477923E-3
+ 37.05 14.712174 35.937435 2.7165655E-3
+ 37.05 14.771576 35.941715 2.8908797E-3
+ 37.05 14.831686 35.947544 3.0670252E-3
+ 37.05 14.919866 35.95536 3.250353E-3
+ 37.05 14.984137 35.959526 3.4449845E-3
+ 37.05 15.076176 35.9718 3.6464508E-3
+ 37.05 15.169206 35.984046 3.8557935E-3
+ 37.05 15.27647 35.994182 4.073724E-3
+ 37.05 15.398479 36.004627 4.3014315E-3
+ 37.05 15.515298 36.01382 4.535426E-3
+ 37.05 15.64681 36.02489 4.7731832E-3
+ 37.05 15.825358 36.04002 5.006618E-3
+ 37.05 16.042685 36.063262 5.248488E-3
+ 37.05 16.384274 36.084602 5.5355494E-3
+ 37.05 16.870726 36.102352 5.881204E-3
+ 37.05 17.479881 36.115882 6.3201375E-3
+ 37.05 18.180466 36.124874 6.8931505E-3
+ 37.05 18.918747 36.136074 7.5639062E-3
+ 37.05 19.771923 36.147056 8.162978E-3
+ 37.05 20.537146 36.163444 8.564283E-3
+ 37.05 21.058588 36.194286 8.827378E-3
+ 37.05 21.354979 36.22698 9.028711E-3
+ 37.05 21.428513 36.250617 9.198642E-3
+ 37.05 21.461107 36.274532 9.346915E-3
+ 37.05 21.479946 36.29294 9.466566E-3
+ 37.05 21.453121 36.298725 9.55229E-3
+ 37.05 21.368088 36.294662 9.644482E-3
+ 37.1 2.5232295 34.893764 0.0E+0
+ 37.1 2.5106973 34.89507 4.4913095E-4
+ 37.1 2.5194833 34.901805 9.1481825E-4
+ 37.1 2.537815 34.911415 1.2893758E-3
+ 37.1 2.5683438 34.922042 1.4075699E-3
+ 37.1 2.646174 34.936023 1.2279468E-3
+ 37.1 2.7569506 34.950153 8.09527E-4
+ 37.1 2.9424433 34.963832 3.0304084E-4
+ 37.1 3.1518211 34.97429 -1.06465E-4
+ 37.1 3.4731087 34.993476 -3.3126634E-4
+ 37.1 3.7946438 35.01219 -4.2063728E-4
+ 37.1 4.324142 35.080734 -4.5871795E-4
+ 37.1 5.0664854 35.18375 -6.256454E-4
+ 37.1 6.2670054 35.368316 -8.805512E-4
+ 37.1 8.017916 35.670665 -1.2734861E-3
+ 37.1 9.2863 35.846752 -2.1324944E-3
+ 37.1 10.05243 35.872676 -3.28119E-3
+ 37.1 10.534553 35.81282 -3.9769653E-3
+ 37.1 10.74227 35.69957 -4.290771E-3
+ 37.1 10.977841 35.582473 -4.1991774E-3
+ 37.1 11.359699 35.54735 -3.5257211E-3
+ 37.1 11.732196 35.574554 -2.5010288E-3
+ 37.1 12.134038 35.62123 -1.4790209E-3
+ 37.1 12.436829 35.65538 -7.4547884E-4
+ 37.1 12.716082 35.68648 -2.188166E-4
+ 37.1 12.941118 35.70888 2.0234908E-4
+ 37.1 13.142229 35.734596 5.45306E-4
+ 37.1 13.394082 35.766975 8.0768653E-4
+ 37.1 13.604198 35.793624 1.0320598E-3
+ 37.1 13.784875 35.81494 1.2552529E-3
+ 37.1 13.95164 35.83715 1.4680212E-3
+ 37.1 14.0729 35.85414 1.6619334E-3
+ 37.1 14.187319 35.87132 1.8476489E-3
+ 37.1 14.279968 35.882682 2.0318124E-3
+ 37.1 14.3649 35.894737 2.210791E-3
+ 37.1 14.448876 35.9053 2.3802302E-3
+ 37.1 14.511986 35.91608 2.5387217E-3
+ 37.1 14.596554 35.925727 2.6905057E-3
+ 37.1 14.667846 35.932926 2.8468051E-3
+ 37.1 14.728431 35.938125 3.012273E-3
+ 37.1 14.788526 35.9424 3.1832745E-3
+ 37.1 14.849554 35.948333 3.3561591E-3
+ 37.1 14.939677 35.95631 3.5361282E-3
+ 37.1 15.005298 35.960556 3.7271648E-3
+ 37.1 15.098732 35.97304 3.924902E-3
+ 37.1 15.192863 35.985336 4.1303443E-3
+ 37.1 15.301056 35.99551 4.34413E-3
+ 37.1 15.424998 36.0062 4.5672804E-3
+ 37.1 15.542304 36.015605 4.79633E-3
+ 37.1 15.672771 36.02618 5.0288643E-3
+ 37.1 15.849157 36.041194 5.2566034E-3
+ 37.1 16.070444 36.06477 5.4926783E-3
+ 37.1 16.418127 36.0866 5.77329E-3
+ 37.1 16.909937 36.104595 6.1109876E-3
+ 37.1 17.530636 36.118724 6.5410584E-3
+ 37.1 18.242575 36.128013 7.1047456E-3
+ 37.1 18.983822 36.13934 7.764761E-3
+ 37.1 19.82019 36.150447 8.350567E-3
+ 37.1 20.570448 36.167373 8.735315E-3
+ 37.1 21.08797 36.199028 8.981425E-3
+ 37.1 21.384062 36.23285 9.171312E-3
+ 37.1 21.46019 36.257854 9.335409E-3
+ 37.1 21.4938 36.282875 9.479719E-3
+ 37.1 21.512608 36.30209 9.595759E-3
+ 37.1 21.483627 36.308097 9.677983E-3
+ 37.1 21.397655 36.303947 9.765493E-3
+ 37.15 2.5218992 34.893413 0.0E+0
+ 37.15 2.5096466 34.894737 4.346672E-4
+ 37.15 2.518674 34.9015 8.8650244E-4
+ 37.15 2.5370402 34.911193 1.2509807E-3
+ 37.15 2.5672364 34.92193 1.3686815E-3
+ 37.15 2.6448712 34.93601 1.1977089E-3
+ 37.15 2.7555785 34.950237 7.9396145E-4
+ 37.15 2.9415504 34.963966 3.0333836E-4
+ 37.15 3.1504786 34.974292 -9.302399E-5
+ 37.15 3.4711408 34.993282 -3.0427292E-4
+ 37.15 3.791885 35.011844 -3.7390133E-4
+ 37.15 4.322343 35.08047 -3.753507E-4
+ 37.15 5.0700764 35.184486 -4.921153E-4
+ 37.15 6.26908 35.3688 -6.9860945E-4
+ 37.15 8.012205 35.669956 -1.0421389E-3
+ 37.15 9.282116 35.846794 -1.8483368E-3
+ 37.15 10.057514 35.874912 -2.9567512E-3
+ 37.15 10.541037 35.814605 -3.636628E-3
+ 37.15 10.746574 35.700973 -3.9360504E-3
+ 37.15 10.984251 35.58334 -3.8350056E-3
+ 37.15 11.363961 35.547103 -3.1736637E-3
+ 37.15 11.737325 35.573745 -2.1650192E-3
+ 37.15 12.140176 35.62071 -1.1538516E-3
+ 37.15 12.443064 35.655052 -4.2618982E-4
+ 37.15 12.720575 35.685832 9.7696734E-5
+ 37.15 12.947 35.708454 5.162811E-4
+ 37.15 13.148038 35.734302 8.566994E-4
+ 37.15 13.39767 35.766273 1.1156306E-3
+ 37.15 13.609256 35.79314 1.335193E-3
+ 37.15 13.791175 35.81445 1.5528237E-3
+ 37.15 13.957654 35.836582 1.7595541E-3
+ 37.15 14.079458 35.853614 1.9476068E-3
+ 37.15 14.195211 35.87097 2.1279451E-3
+ 37.15 14.289468 35.88252 2.3070897E-3
+ 37.15 14.375187 35.894721 2.4814915E-3
+ 37.15 14.459727 35.905376 2.6466397E-3
+ 37.15 14.523564 35.916397 2.801105E-3
+ 37.15 14.609189 35.926193 2.9489872E-3
+ 37.15 14.681941 35.933444 3.1013113E-3
+ 37.15 14.744029 35.938713 3.2627601E-3
+ 37.15 14.804818 35.94299 3.4296964E-3
+ 37.15 14.866761 35.94902 3.5985487E-3
+ 37.15 14.958777 35.95715 3.774345E-3
+ 37.15 15.025742 35.961483 3.960921E-3
+ 37.15 15.12054 35.97417 4.154032E-3
+ 37.15 15.215731 35.98652 4.354641E-3
+ 37.15 15.324804 35.996723 4.5633153E-3
+ 37.15 15.450624 36.00765 4.780923E-3
+ 37.15 15.56842 36.017276 5.004046E-3
+ 37.15 15.697835 36.027366 5.2303816E-3
+ 37.15 15.872029 36.042263 5.451533E-3
+ 37.15 16.097225 36.066146 5.6808725E-3
+ 37.15 16.450764 36.088447 5.953853E-3
+ 37.15 16.947788 36.106678 6.2821842E-3
+ 37.15 17.579912 36.121387 6.7014326E-3
+ 37.15 18.303185 36.13099 7.252948E-3
+ 37.15 19.04716 36.142414 7.89883E-3
+ 37.15 19.866688 36.15366 8.468763E-3
+ 37.15 20.601847 36.171123 8.836129E-3
+ 37.15 21.115643 36.20357 9.065428E-3
+ 37.15 21.411882 36.238471 9.243826E-3
+ 37.15 21.490778 36.264823 9.4016324E-3
+ 37.15 21.525393 36.290927 9.541464E-3
+ 37.15 21.544138 36.31094 9.65353E-3
+ 37.15 21.513008 36.317157 9.732107E-3
+ 37.15 21.426165 36.312927 9.8148984E-3
+ 37.2 2.520567 34.89307 0.0E+0
+ 37.2 2.5085937 34.89441 4.185918E-4
+ 37.2 2.5178663 34.901203 8.547863E-4
+ 37.2 2.5362763 34.910972 1.2075526E-3
+ 37.2 2.5661535 34.921813 1.3238568E-3
+ 37.2 2.6435863 34.935993 1.1617655E-3
+ 37.2 2.7542166 34.950317 7.740451E-4
+ 37.2 2.9406437 34.96409 3.012302E-4
+ 37.2 3.1491181 34.974285 -8.042675E-5
+ 37.2 3.4691383 34.993072 -2.780385E-4
+ 37.2 3.789032 35.01147 -3.296581E-4
+ 37.2 4.3202486 35.08014 -2.9882957E-4
+ 37.2 5.0731725 35.185115 -3.706459E-4
+ 37.2 6.270603 35.369163 -5.329877E-4
+ 37.2 8.006131 35.669136 -8.3011423E-4
+ 37.2 9.277906 35.84679 -1.5830134E-3
+ 37.2 10.062247 35.877037 -2.6466487E-3
+ 37.2 10.547054 35.81628 -3.3065355E-3
+ 37.2 10.750383 35.702236 -3.5903432E-3
+ 37.2 10.990312 35.58413 -3.4812113E-3
+ 37.2 11.368011 35.546836 -2.8351931E-3
+ 37.2 11.742343 35.57293 -1.8481605E-3
+ 37.2 12.146172 35.620174 -8.541533E-4
+ 37.2 12.449224 35.65472 -1.3711526E-4
+ 37.2 12.725023 35.68519 3.8044483E-4
+ 37.2 12.952828 35.70803 7.936661E-4
+ 37.2 13.153759 35.734 1.1293421E-3
+ 37.2 13.401057 35.76555 1.3833462E-3
+ 37.2 13.614004 35.79262 1.5970794E-3
+ 37.2 13.797084 35.81391 1.8082231E-3
+ 37.2 13.963225 35.83596 2.0081226E-3
+ 37.2 14.08554 35.85303 2.1896394E-3
+ 37.2 14.202583 35.87056 2.3639185E-3
+ 37.2 14.298436 35.882286 2.53732E-3
+ 37.2 14.38493 35.894626 2.7064E-3
+ 37.2 14.470006 35.905372 2.866547E-3
+ 37.2 14.534547 35.916622 3.0163256E-3
+ 37.2 14.621179 35.926563 3.1596804E-3
+ 37.2 14.695374 35.933872 3.3073732E-3
+ 37.2 14.758938 35.9392 3.4640785E-3
+ 37.2 14.820419 35.943485 3.6261866E-3
+ 37.2 14.883267 35.949615 3.7902237E-3
+ 37.2 14.977116 35.95789 3.9610243E-3
+ 37.2 15.045412 35.96232 4.142266E-3
+ 37.2 15.141533 35.9752 4.3298462E-3
+ 37.2 15.237742 35.987594 4.5246812E-3
+ 37.2 15.347645 35.99782 4.727273E-3
+ 37.2 15.47528 36.008987 4.938348E-3
+ 37.2 15.593565 36.018836 5.154561E-3
+ 37.2 15.721932 36.028446 5.3737214E-3
+ 37.2 15.893924 36.04323 5.587395E-3
+ 37.2 16.122953 36.0674 5.8090616E-3
+ 37.2 16.482096 36.090145 6.073234E-3
+ 37.2 16.984173 36.108596 6.3907993E-3
+ 37.2 17.62753 36.12387 6.7972806E-3
+ 37.2 18.362034 36.133796 7.3337927E-3
+ 37.2 19.108492 36.1453 7.962178E-3
+ 37.2 19.911287 36.15668 8.513675E-3
+ 37.2 20.631342 36.1747 8.862894E-3
+ 37.2 21.141602 36.207904 9.075627E-3
+ 37.2 21.438395 36.243835 9.242544E-3
+ 37.2 21.520191 36.271507 9.393613E-3
+ 37.2 21.55579 36.29867 9.528448E-3
+ 37.2 21.574444 36.31945 9.636178E-3
+ 37.2 21.541187 36.325881 9.710964E-3
+ 37.2 21.453539 36.321582 9.789007E-3
+ 37.25 2.5192441 34.892734 0.0E+0
+ 37.25 2.507548 34.89409 4.0094312E-4
+ 37.25 2.5170674 34.900913 8.1973365E-4
+ 37.25 2.5355284 34.910762 1.1591893E-3
+ 37.25 2.565101 34.921703 1.2732056E-3
+ 37.25 2.6423285 34.935974 1.120214E-3
+ 37.25 2.7528753 34.950386 7.4983306E-4
+ 37.25 2.9397327 34.964202 2.9670898E-4
+ 37.25 3.1477544 34.97427 -6.874177E-5
+ 37.25 3.467123 34.99286 -2.527043E-4
+ 37.25 3.786122 35.011077 -2.8816025E-4
+ 37.25 4.3179154 35.07975 -2.2957151E-4
+ 37.25 5.0758132 35.185642 -2.618315E-4
+ 37.25 6.271638 35.369415 -3.8446104E-4
+ 37.25 7.999801 35.66823 -6.3845794E-4
+ 37.25 9.273723 35.84674 -1.3379399E-3
+ 37.25 10.066637 35.87905 -2.3526586E-3
+ 37.25 10.552618 35.81784 -2.9887331E-3
+ 37.25 10.753733 35.70336 -3.2559444E-3
+ 37.25 10.996021 35.584846 -3.1403095E-3
+ 37.25 11.371846 35.546554 -2.5129462E-3
+ 37.25 11.747227 35.572124 -1.5531676E-3
+ 37.25 12.151996 35.619636 -5.827063E-4
+ 37.25 12.455274 35.654384 1.1889816E-4
+ 37.25 12.729401 35.684547 6.265142E-4
+ 37.25 12.958566 35.707614 1.031535E-3
+ 37.25 13.159361 35.733703 1.3602197E-3
+ 37.25 13.404247 35.764816 1.6077862E-3
+ 37.25 13.618447 35.792072 1.8146494E-3
+ 37.25 13.802609 35.81334 2.018366E-3
+ 37.25 13.968369 35.8353 2.2106321E-3
+ 37.25 14.091165 35.8524 2.3849292E-3
+ 37.25 14.209447 35.870086 2.55246E-3
+ 37.25 14.306871 35.881996 2.7193888E-3
+ 37.25 14.394123 35.89447 2.8823958E-3
+ 37.25 14.479708 35.905303 3.0368263E-3
+ 37.25 14.544927 35.91677 3.1812516E-3
+ 37.25 14.632514 35.92685 3.319446E-3
+ 37.25 14.708123 35.93421 3.461848E-3
+ 37.25 14.773129 35.939605 3.6130815E-3
+ 37.25 14.835293 35.943897 3.7695951E-3
+ 37.25 14.89903 35.950126 3.928032E-3
+ 37.25 14.994646 35.95854 4.093012E-3
+ 37.25 15.064249 35.963062 4.2680455E-3
+ 37.25 15.161649 35.97613 4.44919E-3
+ 37.25 15.258828 35.988567 4.637312E-3
+ 37.25 15.369512 35.998813 4.8328526E-3
+ 37.25 15.498891 36.01022 5.0364113E-3
+ 37.25 15.617661 36.020286 5.2447346E-3
+ 37.25 15.74499 36.02943 5.455751E-3
+ 37.25 15.91479 36.0441 5.6610642E-3
+ 37.25 16.147556 36.06854 5.874131E-3
+ 37.25 16.512033 36.091697 6.1283325E-3
+ 37.25 17.01898 36.110363 6.433753E-3
+ 37.25 17.673306 36.12618 6.82555E-3
+ 37.25 18.418856 36.136436 7.3442636E-3
+ 37.25 19.167564 36.148 7.95184E-3
+ 37.25 19.953865 36.15952 8.4824E-3
+ 37.25 20.658936 36.178092 8.812768E-3
+ 37.25 21.165855 36.212024 9.009242E-3
+ 37.25 21.463547 36.248928 9.164723E-3
+ 37.25 21.548338 36.27789 9.308623E-3
+ 37.25 21.5849 36.30608 9.437949E-3
+ 37.25 21.603436 36.327606 9.5409834E-3
+ 37.25 21.568089 36.334243 9.611841E-3
+ 37.25 21.4797 36.329875 9.685107E-3
+ 37.3 2.5179421 34.892406 0.0E+0
+ 37.3 2.5065183 34.89378 3.8176888E-4
+ 37.3 2.5162835 34.900634 7.8143045E-4
+ 37.3 2.5348014 34.910552 1.1060208E-3
+ 37.3 2.5640842 34.921592 1.216878E-3
+ 37.3 2.6411054 34.93595 1.073191E-3
+ 37.3 2.7515647 34.95045 7.214127E-4
+ 37.3 2.9388272 34.96431 2.897899E-4
+ 37.3 3.1464011 34.97425 -5.8021487E-5
+ 37.3 3.4651165 34.992633 -2.2838714E-4
+ 37.3 3.7831921 35.010673 -2.4960638E-4
+ 37.3 4.3154015 35.07931 -1.6788024E-4
+ 37.3 5.0780405 35.18608 -1.6608425E-4
+ 37.3 6.2722487 35.369567 -2.5356205E-4
+ 37.3 7.9933214 35.66725 -4.6791628E-4
+ 37.3 9.269614 35.846656 -1.1141927E-3
+ 37.3 10.070696 35.88095 -2.0762141E-3
+ 37.3 10.557744 35.81929 -2.684926E-3
+ 37.3 10.75666 35.704364 -2.9347883E-3
+ 37.3 11.001378 35.58549 -2.8144137E-3
+ 37.3 11.375465 35.54627 -2.209114E-3
+ 37.3 11.751954 35.57133 -1.2822475E-3
+ 37.3 12.15762 35.619102 -3.417167E-4
+ 37.3 12.461173 35.654056 3.3963E-4
+ 37.3 12.73368 35.683925 8.3365896E-4
+ 37.3 12.964177 35.707214 1.2276192E-3
+ 37.3 13.164811 35.733406 1.547045E-3
+ 37.3 13.407241 35.76408 1.786648E-3
+ 37.3 13.622591 35.791507 1.9855902E-3
+ 37.3 13.807755 35.81274 2.1809351E-3
+ 37.3 13.973101 35.834617 2.3647644E-3
+ 37.3 14.096347 35.851734 2.5311575E-3
+ 37.3 14.215814 35.869575 2.6912516E-3
+ 37.3 14.314773 35.881656 2.8509797E-3
+ 37.3 14.402762 35.89426 3.0071644E-3
+ 37.3 14.488827 35.905174 3.1551634E-3
+ 37.3 14.554695 35.91685 3.29357E-3
+ 37.3 14.643183 35.92706 3.4259725E-3
+ 37.3 14.72017 35.93447 3.5624252E-3
+ 37.3 14.786573 35.93993 3.7074626E-3
+ 37.3 14.849406 35.944232 3.85762E-3
+ 37.3 14.914011 35.950557 4.009675E-3
+ 37.3 15.011318 35.959106 4.168016E-3
+ 37.3 15.082195 35.963722 4.335975E-3
+ 37.3 15.180824 35.976974 4.509788E-3
+ 37.3 15.278922 35.989444 4.690268E-3
+ 37.3 15.390336 35.999706 4.8778005E-3
+ 37.3 15.521383 36.01134 5.072871E-3
+ 37.3 15.64063 36.02163 5.272341E-3
+ 37.3 15.766941 36.030323 5.4742572E-3
+ 37.3 15.934579 36.044883 5.670345E-3
+ 37.3 16.170961 36.06957 5.8739003E-3
+ 37.3 16.54049 36.09311 6.116993E-3
+ 37.3 17.052105 36.11198 6.4089186E-3
+ 37.3 17.717064 36.12831 6.7841564E-3
+ 37.3 18.473392 36.13891 7.2823325E-3
+ 37.3 19.224127 36.150505 7.865862E-3
+ 37.3 19.994299 36.16217 8.373061E-3
+ 37.3 20.684631 36.181293 8.683937E-3
+ 37.3 21.188416 36.215915 8.86451E-3
+ 37.3 21.487293 36.253742 9.008633E-3
+ 37.3 21.575134 36.283946 9.144949E-3
+ 37.3 21.612629 36.31313 9.268262E-3
+ 37.3 21.631025 36.335376 9.366249E-3
+ 37.3 21.59364 36.342212 9.433042E-3
+ 37.3 21.504574 36.337783 9.501505E-3
+ 37.35 2.5166726 34.892093 0.0E+0
+ 37.35 2.5055134 34.893482 3.6112611E-4
+ 37.35 2.5155212 34.900363 7.399846E-4
+ 37.35 2.5341 34.910354 1.0482098E-3
+ 37.35 2.5631096 34.921485 1.1550623E-3
+ 37.35 2.6399257 34.93593 1.0208715E-3
+ 37.35 2.7502946 34.95051 6.8890355E-4
+ 37.35 2.9379365 34.96441 2.8051083E-4
+ 37.35 3.145072 34.974224 -4.8301706E-5
+ 37.35 3.4631404 34.99241 -2.0517813E-4
+ 37.35 3.7802784 35.01026 -2.1413917E-4
+ 37.35 4.3127636 35.078842 -1.1394295E-4
+ 37.35 5.079896 35.18644 -8.3629325E-5
+ 37.35 6.272497 35.369636 -1.4057462E-4
+ 37.35 7.986794 35.666233 -3.1892658E-4
+ 37.35 9.265626 35.846553 -9.1249606E-4
+ 37.35 10.074432 35.882732 -1.8183879E-3
+ 37.35 10.562446 35.82063 -2.3964603E-3
+ 37.35 10.7592 35.705242 -2.628428E-3
+ 37.35 11.00638 35.586074 -2.5052146E-3
+ 37.35 11.378863 35.545974 -1.9254173E-3
+ 37.35 11.756497 35.57056 -1.0370766E-3
+ 37.35 12.163017 35.618572 -1.3279244E-4
+ 37.35 12.466884 35.653732 5.235106E-4
+ 37.35 12.737833 35.68332 1.0003258E-3
+ 37.35 12.969621 35.70682 1.380376E-3
+ 37.35 13.170077 35.733116 1.6882824E-3
+ 37.35 13.41004 35.76335 1.9183994E-3
+ 37.35 13.626439 35.79093 2.1083722E-3
+ 37.35 13.812528 35.81213 2.2944065E-3
+ 37.35 13.977437 35.83392 2.469003E-3
+ 37.35 14.101101 35.85105 2.6268153E-3
+ 37.35 14.221694 35.869033 2.778792E-3
+ 37.35 14.322141 35.881282 2.9306006E-3
+ 37.35 14.410841 35.89401 3.079223E-3
+ 37.35 14.497356 35.905002 3.2200848E-3
+ 37.35 14.563842 35.916873 3.3518138E-3
+ 37.35 14.653175 35.927204 3.4778004E-3
+ 37.35 14.731492 35.93467 3.607655E-3
+ 37.35 14.79924 35.94019 3.745782E-3
+ 37.35 14.862724 35.9445 3.888833E-3
+ 37.35 14.928167 35.95092 4.033737E-3
+ 37.35 15.027084 35.959594 4.1846344E-3
+ 37.35 15.099193 35.964305 4.3446673E-3
+ 37.35 15.198993 35.97773 4.51027E-3
+ 37.35 15.297959 35.990234 4.682198E-3
+ 37.35 15.410052 36.000507 4.8607862E-3
+ 37.35 15.542683 36.012363 5.046418E-3
+ 37.35 15.662396 36.02287 5.236091E-3
+ 37.35 15.787717 36.031127 5.427976E-3
+ 37.35 15.953243 36.045585 5.613995E-3
+ 37.35 16.193102 36.07049 5.807152E-3
+ 37.35 16.567385 36.09439 6.0380273E-3
+ 37.35 17.08344 36.113456 6.3151502E-3
+ 37.35 17.758633 36.130283 6.672009E-3
+ 37.35 18.525398 36.14121 7.1469866E-3
+ 37.35 19.277939 36.15283 7.703332E-3
+ 37.35 20.032473 36.16464 8.184835E-3
+ 37.35 20.708445 36.1843 8.475633E-3
+ 37.35 21.209293 36.219577 8.6407074E-3
+ 37.35 21.509594 36.258266 8.773581E-3
+ 37.35 21.600494 36.28967 8.901915E-3
+ 37.35 21.638885 36.3198 9.018725E-3
+ 37.35 21.65713 36.34273 9.111319E-3
+ 37.35 21.617771 36.34976 9.173918E-3
+ 37.35 21.528086 36.345275 9.237556E-3
+ 37.4 2.5154461 34.891796 0.0E+0
+ 37.4 2.5045423 34.8932 3.3908107E-4
+ 37.4 2.5147867 34.90011 6.955261E-4
+ 37.4 2.5334291 34.910167 9.859507E-4
+ 37.4 2.5621821 34.921382 1.087986E-3
+ 37.4 2.6387972 34.9359 9.63469E-4
+ 37.4 2.7490751 34.950557 6.524566E-4
+ 37.4 2.93707 34.964496 2.689324E-4
+ 37.4 3.1437802 34.974193 -3.9601283E-5
+ 37.4 3.461216 34.992183 -1.831423E-4
+ 37.4 3.7774162 35.00985 -1.8184417E-4
+ 37.4 4.310058 35.07835 -6.7828514E-5
+ 37.4 5.0814204 35.186725 -1.4502798E-5
+ 37.4 6.272445 35.369636 -4.5530865E-5
+ 37.4 7.9803175 35.665195 -1.9161175E-4
+ 37.4 9.261795 35.846427 -7.332134E-4
+ 37.4 10.077856 35.88439 -1.5798819E-3
+ 37.4 10.566737 35.82186 -2.1243114E-3
+ 37.4 10.761387 35.706016 -2.3380222E-3
+ 37.4 11.011025 35.586593 -2.213964E-3
+ 37.4 11.382036 35.545677 -1.6630933E-3
+ 37.4 11.760832 35.569816 -8.187845E-4
+ 37.4 12.168156 35.61806 4.3071482E-5
+ 37.4 12.472367 35.65342 6.696358E-4
+ 37.4 12.74183 35.682735 1.1256685E-3
+ 37.4 12.974861 35.70645 1.489003E-3
+ 37.4 13.175124 35.732833 1.7831633E-3
+ 37.4 13.412645 35.762638 2.002293E-3
+ 37.4 13.629996 35.790355 2.1822631E-3
+ 37.4 13.816932 35.81152 2.3580642E-3
+ 37.4 13.98139 35.833217 2.5226483E-3
+ 37.4 14.105442 35.85036 2.6712173E-3
+ 37.4 14.227097 35.868473 2.8144104E-3
+ 37.4 14.328973 35.88089 2.9575976E-3
+ 37.4 14.418355 35.893726 3.0979348E-3
+ 37.4 14.505289 35.904796 3.2309696E-3
+ 37.4 14.572359 35.91685 3.3553775E-3
+ 37.4 14.662479 35.927295 3.4743377E-3
+ 37.4 14.742072 35.934806 3.5969603E-3
+ 37.4 14.811102 35.940387 3.727481E-3
+ 37.4 14.875213 35.94471 3.8626946E-3
+ 37.4 14.94146 35.951217 3.9996975E-3
+ 37.4 15.041896 35.96001 4.142368E-3
+ 37.4 15.115188 35.96482 4.2936494E-3
+ 37.4 15.216097 35.97841 4.4501866E-3
+ 37.4 15.315875 35.99094 4.612679E-3
+ 37.4 15.428596 36.001216 4.781414E-3
+ 37.4 15.562721 36.01329 4.956687E-3
+ 37.4 15.682885 36.024002 5.135651E-3
+ 37.4 15.807252 36.03185 5.3166025E-3
+ 37.4 15.970734 36.046207 5.491739E-3
+ 37.4 16.213905 36.07132 5.6736422E-3
+ 37.4 16.592636 36.09555 5.891234E-3
+ 37.4 17.112892 36.11479 6.152296E-3
+ 37.4 17.79785 36.132087 6.489025E-3
+ 37.4 18.574629 36.143344 6.9382404E-3
+ 37.4 19.328768 36.15497 7.4643865E-3
+ 37.4 20.068281 36.166923 7.917965E-3
+ 37.4 20.730385 36.187107 8.188159E-3
+ 37.4 21.22851 36.223 8.338164E-3
+ 37.4 21.530407 36.262493 8.459921E-3
+ 37.4 21.624338 36.295036 8.579893E-3
+ 37.4 21.663586 36.326076 8.689725E-3
+ 37.4 21.681664 36.34965 8.776595E-3
+ 37.4 21.640413 36.356864 8.834876E-3
+ 37.4 21.550169 36.35233 8.89367E-3
+ 37.45 2.5142734 34.891513 0.0E+0
+ 37.45 2.5036137 34.892932 3.157089E-4
+ 37.45 2.5140862 34.899868 6.482058E-4
+ 37.45 2.5327932 34.90999 9.1946905E-4
+ 37.45 2.561308 34.921287 1.0159133E-3
+ 37.45 2.637728 34.93588 9.0123346E-4
+ 37.45 2.747915 34.950603 6.122537E-4
+ 37.45 2.9362361 34.964576 2.5513727E-4
+ 37.45 3.142539 34.974163 -3.1922056E-5
+ 37.45 3.4593625 34.991962 -1.6231804E-4
+ 37.45 3.77464 35.009445 -1.5274943E-4
+ 37.45 4.307339 35.077846 -2.9487222E-5
+ 37.45 5.0826535 35.186946 4.144826E-5
+ 37.45 6.272152 35.36958 3.178854E-5
+ 37.45 7.973987 35.66415 -8.5779203E-5
+ 37.45 9.25816 35.84629 -5.7634495E-4
+ 37.45 10.080975 35.88593 -1.3610234E-3
+ 37.45 10.570632 35.82299 -1.8690776E-3
+ 37.45 10.763256 35.706687 -2.0643272E-3
+ 37.45 11.015311 35.587055 -1.9414684E-3
+ 37.45 11.38498 35.54539 -1.4228862E-3
+ 37.45 11.764932 35.569107 -6.2794814E-4
+ 37.45 12.173009 35.617565 1.8549865E-4
+ 37.45 12.477582 35.65312 7.777715E-4
+ 37.45 12.745642 35.682182 1.209552E-3
+ 37.45 12.979855 35.7061 1.5534409E-3
+ 37.45 13.17992 35.732563 1.8316891E-3
+ 37.45 13.415055 35.76195 2.0383696E-3
+ 37.45 13.633264 35.78979 2.207331E-3
+ 37.45 13.820972 35.810913 2.3720033E-3
+ 37.45 13.984975 35.832523 2.5258196E-3
+ 37.45 14.109383 35.849678 2.6645048E-3
+ 37.45 14.232032 35.86791 2.7982702E-3
+ 37.45 14.335268 35.880477 2.9321576E-3
+ 37.45 14.425296 35.893424 3.063512E-3
+ 37.45 14.512619 35.90456 3.188053E-3
+ 37.45 14.580236 35.916786 3.3045175E-3
+ 37.45 14.671085 35.927337 3.4158613E-3
+ 37.45 14.751888 35.934894 3.5306396E-3
+ 37.45 14.822132 35.940532 3.6528827E-3
+ 37.45 14.88684 35.944866 3.7795545E-3
+ 37.45 14.953851 35.95146 3.9079342E-3
+ 37.45 15.055711 35.960365 4.0416242E-3
+ 37.45 15.130126 35.965267 4.1833575E-3
+ 37.45 15.232076 35.979007 4.3300087E-3
+ 37.45 15.332609 35.99157 4.482216E-3
+ 37.45 15.445908 36.001846 4.6402253E-3
+ 37.45 15.58143 36.014125 4.8042582E-3
+ 37.45 15.702025 36.025035 4.971639E-3
+ 37.45 15.825483 36.032493 5.1407935E-3
+ 37.45 15.987009 36.046756 5.304271E-3
+ 37.45 16.23331 36.072052 5.4741026E-3
+ 37.45 16.616169 36.09659 5.677393E-3
+ 37.45 17.140366 36.115997 5.921195E-3
+ 37.45 17.834555 36.133728 6.236126E-3
+ 37.45 18.62085 36.14531 6.657134E-3
+ 37.45 19.376396 36.156925 7.1502095E-3
+ 37.45 20.101622 36.16902 7.573756E-3
+ 37.45 20.750471 36.189712 7.822874E-3
+ 37.45 21.246078 36.226177 7.958259E-3
+ 37.45 21.549694 36.266414 8.069048E-3
+ 37.45 21.646585 36.300037 8.1803034E-3
+ 37.45 21.686646 36.33193 8.282703E-3
+ 37.45 21.70455 36.356113 8.363532E-3
+ 37.45 21.661503 36.363502 8.417379E-3
+ 37.45 21.570753 36.358924 8.47131E-3
+ 37.5 2.513165 34.89125 0.0E+0
+ 37.5 2.5027351 34.892677 2.9109325E-4
+ 37.5 2.513425 34.899642 5.9819524E-4
+ 37.5 2.5321967 34.90982 8.4902E-4
+ 37.5 2.560491 34.921195 9.391439E-4
+ 37.5 2.6367247 34.935852 8.3445024E-4
+ 37.5 2.7468235 34.950645 5.6850595E-4
+ 37.5 2.9354436 34.96465 2.3922986E-4
+ 37.5 3.1413605 34.97413 -2.5249003E-5
+ 37.5 3.4576 34.991752 -1.4271746E-4
+ 37.5 3.7719831 35.009052 -1.2682615E-4
+ 37.5 4.3046603 35.077346 1.247812E-6
+ 37.5 5.083634 35.18712 8.456309E-5
+ 37.5 6.271674 35.369476 9.1850844E-5
+ 37.5 7.9678902 35.66313 -9.2426046E-7
+ 37.5 9.254748 35.84615 -4.4153002E-4
+ 37.5 10.083798 35.887344 -1.1617654E-3
+ 37.5 10.574142 35.824012 -1.6309788E-3
+ 37.5 10.764841 35.707267 -1.8076964E-3
+ 37.5 11.019236 35.587463 -1.6880877E-3
+ 37.5 11.387691 35.545112 -1.2050483E-3
+ 37.5 11.768774 35.568435 -4.6459343E-4
+ 37.5 12.177549 35.617095 2.947273E-4
+ 37.5 12.482492 35.652835 8.483488E-4
+ 37.5 12.749239 35.68166 1.2525467E-3
+ 37.5 12.984567 35.70577 1.5743684E-3
+ 37.5 13.184429 35.732307 1.8346235E-3
+ 37.5 13.417267 35.761295 2.027449E-3
+ 37.5 13.636245 35.789245 2.1844345E-3
+ 37.5 13.824651 35.81032 2.3371207E-3
+ 37.5 13.988204 35.831851 2.4794472E-3
+ 37.5 14.112937 35.84901 2.6076356E-3
+ 37.5 14.236508 35.867347 2.7313588E-3
+ 37.5 14.341025 35.880065 2.8552995E-3
+ 37.5 14.431659 35.89311 2.9770047E-3
+ 37.5 14.519339 35.90431 3.0924153E-3
+ 37.5 14.587465 35.916694 3.2003424E-3
+ 37.5 14.678982 35.927345 3.3035061E-3
+ 37.5 14.760922 35.934944 3.409857E-3
+ 37.5 14.832302 35.940635 3.5231823E-3
+ 37.5 14.897574 35.94498 3.6406407E-3
+ 37.5 14.965302 35.951656 3.75971E-3
+ 37.5 15.068484 35.960662 3.8837015E-3
+ 37.5 15.143955 35.965652 4.0151313E-3
+ 37.5 15.246873 35.979534 4.151115E-3
+ 37.5 15.348102 35.992122 4.2922315E-3
+ 37.5 15.461928 36.0024 4.4386885E-3
+ 37.5 15.598746 36.01487 4.5906445E-3
+ 37.5 15.71975 36.02597 4.7456133E-3
+ 37.5 15.842349 36.033065 4.9021532E-3
+ 37.5 16.002024 36.04724 5.053237E-3
+ 37.5 16.251257 36.0727 5.2102245E-3
+ 37.5 16.637913 36.09751 5.398254E-3
+ 37.5 17.16577 36.117076 5.623665E-3
+ 37.5 17.868603 36.135215 5.915227E-3
+ 37.5 18.663847 36.147102 6.305719E-3
+ 37.5 19.420616 36.158706 6.763018E-3
+ 37.5 20.132397 36.170932 7.1545573E-3
+ 37.5 20.76872 36.192104 7.382181E-3
+ 37.5 21.262024 36.2291 7.5034047E-3
+ 37.5 21.567423 36.270023 7.603386E-3
+ 37.5 21.667168 36.304653 7.7055953E-3
+ 37.5 21.707985 36.337337 7.800132E-3
+ 37.5 21.725714 36.362094 7.87462E-3
+ 37.5 21.680977 36.369644 7.923923E-3
+ 37.5 21.589779 36.365024 7.972978E-3
+ 37.55 2.5121302 34.891006 0.0E+0
+ 37.55 2.501915 34.89245 2.6532594E-4
+ 37.55 2.5128092 34.899433 5.456855E-4
+ 37.55 2.5316436 34.909667 7.7488715E-4
+ 37.55 2.559737 34.92111 8.5801136E-4
+ 37.55 2.6357948 34.93583 7.6343823E-4
+ 37.55 2.7458088 34.95068 5.214528E-4
+ 37.55 2.9347007 34.964717 2.2133537E-4
+ 37.55 3.1402564 34.974094 -1.9550644E-5
+ 37.55 3.4559462 34.99155 -1.2432675E-4
+ 37.55 3.7694766 35.00868 -1.0398988E-4
+ 37.55 4.3020706 35.076854 2.4657596E-5
+ 37.55 5.0843982 35.187244 1.1536208E-4
+ 37.55 6.271066 35.369346 1.353643E-4
+ 37.55 7.9621105 35.662143 6.3762236E-5
+ 37.55 9.25159 35.84601 -3.28055E-4
+ 37.55 10.08633 35.888626 -9.816939E-4
+ 37.55 10.577279 35.824932 -1.4098635E-3
+ 37.55 10.766171 35.707763 -1.5680854E-3
+ 37.55 11.022797 35.58782 -1.4537417E-3
+ 37.55 11.390163 35.54485 -1.009349E-3
+ 37.55 11.772332 35.56781 -3.2820593E-4
+ 37.55 12.181748 35.616657 3.715969E-4
+ 37.55 12.48706 35.65257 8.824479E-4
+ 37.55 12.752594 35.681175 1.2559103E-3
+ 37.55 12.988959 35.705463 1.553182E-3
+ 37.55 13.188621 35.732067 1.7934724E-3
+ 37.55 13.41928 35.760677 1.971111E-3
+ 37.55 13.63894 35.788726 2.1152051E-3
+ 37.55 13.827973 35.80976 2.2550935E-3
+ 37.55 13.991089 35.83121 2.38525E-3
+ 37.55 14.116117 35.84837 2.502364E-3
+ 37.55 14.240533 35.866806 2.6154655E-3
+ 37.55 14.346241 35.87966 2.7288503E-3
+ 37.55 14.437438 35.892795 2.8402793E-3
+ 37.55 14.525443 35.904052 2.9459604E-3
+ 37.55 14.594036 35.91658 3.0447894E-3
+ 37.55 14.686161 35.927322 3.1392427E-3
+ 37.55 14.769156 35.934963 3.2366164E-3
+ 37.55 14.841587 35.9407 3.340423E-3
+ 37.55 14.907385 35.94506 3.4480371E-3
+ 37.55 14.975778 35.951812 3.5571483E-3
+ 37.55 15.080175 35.96091 3.6707678E-3
+ 37.55 15.156627 35.96599 3.791185E-3
+ 37.55 15.260435 35.98 3.9157685E-3
+ 37.55 15.362299 35.992603 4.045038E-3
+ 37.55 15.476601 36.00288 4.1791675E-3
+ 37.55 15.614608 36.01553 4.318264E-3
+ 37.55 15.735994 36.02681 4.460046E-3
+ 37.55 15.857793 36.033565 4.6032066E-3
+ 37.55 16.015738 36.04766 4.7412114E-3
+ 37.55 16.26768 36.073272 4.8846337E-3
+ 37.55 16.657799 36.09833 5.056506E-3
+ 37.55 17.189022 36.118034 5.2624754E-3
+ 37.55 17.899853 36.13655 5.529203E-3
+ 37.55 18.70341 36.148723 5.8870255E-3
+ 37.55 19.461237 36.16031 6.3060303E-3
+ 37.55 20.160517 36.17266 6.6637336E-3
+ 37.55 20.785154 36.194286 6.8694963E-3
+ 37.55 21.276365 36.231761 6.9770142E-3
+ 37.55 21.583557 36.27331 7.066356E-3
+ 37.55 21.68601 36.308872 7.159213E-3
+ 37.55 21.72753 36.342292 7.245486E-3
+ 37.55 21.745087 36.367572 7.313352E-3
+ 37.55 21.698778 36.375274 7.3580113E-3
+ 37.55 21.607182 36.37062 7.402178E-3
+ 37.6 2.5111784 34.890785 0.0E+0
+ 37.6 2.50116 34.892234 2.3850646E-4
+ 37.6 2.5122435 34.899246 4.90886E-4
+ 37.6 2.5311377 34.909526 6.973805E-4
+ 37.6 2.5590498 34.921031 7.7288114E-4
+ 37.6 2.6349444 34.935806 6.885477E-4
+ 37.6 2.7448787 34.95071 4.7136007E-4
+ 37.6 2.9340145 34.96477 2.015986E-4
+ 37.6 3.1392374 34.974063 -1.4779697E-5
+ 37.6 3.4544181 34.99136 -1.0710716E-4
+ 37.6 3.7671496 35.008327 -8.410274E-5
+ 37.6 4.2996182 35.076385 4.1132585E-5
+ 37.6 5.084982 35.187332 1.3453899E-4
+ 37.6 6.2703776 35.369194 1.6326789E-4
+ 37.6 7.9567246 35.661212 1.0938174E-4
+ 37.6 9.248706 35.845867 -2.3486637E-4
+ 37.6 10.088579 35.889781 -8.2004035E-4
+ 37.6 10.580055 35.82575 -1.2052202E-3
+ 37.6 10.767276 35.708183 -1.3450654E-3
+ 37.6 11.025992 35.588127 -1.2379254E-3
+ 37.6 11.392391 35.5446 -8.3509E-4
+ 37.6 11.775585 35.567237 -2.1775029E-4
+ 37.6 12.18558 35.61625 4.1752561E-4
+ 37.6 12.491251 35.652324 8.817736E-4
+ 37.6 12.755677 35.680732 1.2215615E-3
+ 37.6 12.992994 35.705184 1.491968E-3
+ 37.6 13.192465 35.73185 1.7104556E-3
+ 37.6 13.421092 35.760105 1.8716644E-3
+ 37.6 13.641351 35.788242 2.0020131E-3
+ 37.6 13.830939 35.80923 2.1283493E-3
+ 37.6 13.993641 35.830612 2.245703E-3
+ 37.6 14.118931 35.847766 2.3512071E-3
+ 37.6 14.244114 35.86629 2.4531492E-3
+ 37.6 14.350914 35.87927 2.5554134E-3
+ 37.6 14.442628 35.892486 2.6559846E-3
+ 37.6 14.530924 35.903797 2.7513806E-3
+ 37.6 14.599942 35.91646 2.840592E-3
+ 37.6 14.692612 35.927276 2.9258418E-3
+ 37.6 14.776572 35.934955 3.0137298E-3
+ 37.6 14.849964 35.940742 3.10746E-3
+ 37.6 14.916244 35.94511 3.204645E-3
+ 37.6 14.985247 35.95193 3.3031997E-3
+ 37.6 15.090745 35.961112 3.4058233E-3
+ 37.6 15.168096 35.96627 3.5145713E-3
+ 37.6 15.272713 35.9804 3.6270776E-3
+ 37.6 15.375149 35.993022 3.7438017E-3
+ 37.6 15.489876 36.003295 3.864888E-3
+ 37.6 15.62896 36.01611 3.9904024E-3
+ 37.6 15.750698 36.027553 4.118283E-3
+ 37.6 15.871763 36.034004 4.2473594E-3
+ 37.6 16.028116 36.048027 4.3716542E-3
+ 37.6 16.282532 36.073764 4.5008487E-3
+ 37.6 16.675766 36.099044 4.65574E-3
+ 37.6 17.210045 36.118877 4.8413015E-3
+ 37.6 17.928175 36.13773 5.081849E-3
+ 37.6 18.73935 36.150177 5.4050222E-3
+ 37.6 19.49808 36.161735 5.78342E-3
+ 37.6 20.185902 36.174205 6.105617E-3
+ 37.6 20.79979 36.196247 6.2892003E-3
+ 37.6 21.289127 36.23416 6.3834567E-3
+ 37.6 21.598072 36.276268 6.4623286E-3
+ 37.6 21.703053 36.312683 6.545556E-3
+ 37.6 21.745213 36.346775 6.6231954E-3
+ 37.6 21.762602 36.372528 6.684182E-3
+ 37.6 21.714855 36.380367 6.724105E-3
+ 37.6 21.62291 36.375682 6.763373E-3
+ 37.65 2.5103178 34.890586 0.0E+0
+ 37.65 2.5004773 34.892044 2.1074129E-4
+ 37.65 2.5117328 34.899074 4.3402297E-4
+ 37.65 2.5306828 34.9094 6.1683455E-4
+ 37.65 2.5584335 34.920963 6.841475E-4
+ 37.65 2.6341795 34.935783 6.101576E-4
+ 37.65 2.7440404 34.950736 4.1851785E-4
+ 37.65 2.933392 34.964824 1.8018269E-4
+ 37.65 3.1383137 34.97403 -1.0873953E-5
+ 37.65 3.4530313 34.991188 -9.0996385E-5
+ 37.65 3.7650296 35.008003 -6.6976404E-5
+ 37.65 4.2973456 35.07595 5.1166443E-5
+ 37.65 5.0854163 35.18739 1.4295088E-4
+ 37.65 6.2696547 35.369033 1.7671783E-4
+ 37.65 7.951802 35.660354 1.3731157E-4
+ 37.65 9.246119 35.845737 -1.6058936E-4
+ 37.65 10.09055 35.890804 -6.7570083E-4
+ 37.65 10.58248 35.82647 -1.0161953E-3
+ 37.65 10.768184 35.708534 -1.1378417E-3
+ 37.65 11.028817 35.588394 -1.0397295E-3
+ 37.65 11.394371 35.544372 -6.811298E-4
+ 37.65 11.77851 35.56672 -1.3169773E-4
+ 37.65 12.189023 35.61588 4.344788E-4
+ 37.65 12.495032 35.652103 8.486204E-4
+ 37.65 12.758465 35.680332 1.1520428E-3
+ 37.65 12.996641 35.704936 1.3934637E-3
+ 37.65 13.19593 35.73165 1.5884642E-3
+ 37.65 13.422698 35.759586 1.7321049E-3
+ 37.65 13.643477 35.787796 1.8479266E-3
+ 37.65 13.833551 35.808746 1.9600212E-3
+ 37.65 13.995869 35.83006 2.0639952E-3
+ 37.65 14.121391 35.84721 2.157401E-3
+ 37.65 14.247259 35.865814 2.2476934E-3
+ 37.65 14.355044 35.878906 2.3383228E-3
+ 37.65 14.447221 35.892196 2.4275062E-3
+ 37.65 14.535777 35.903556 2.5121103E-3
+ 37.65 14.605174 35.91633 2.5912306E-3
+ 37.65 14.698326 35.92722 2.6668284E-3
+ 37.65 14.783156 35.934932 2.7447661E-3
+ 37.65 14.85741 35.940757 2.8279128E-3
+ 37.65 14.924126 35.945137 2.9141372E-3
+ 37.65 14.993678 35.952022 3.0015897E-3
+ 37.65 15.100159 35.961277 3.0926505E-3
+ 37.65 15.178319 35.96651 3.1891332E-3
+ 37.65 15.28366 35.980743 3.2889468E-3
+ 37.65 15.386604 35.99338 3.392491E-3
+ 37.65 15.501706 36.00365 3.4998843E-3
+ 37.65 15.641751 36.016613 3.6111616E-3
+ 37.65 15.763807 36.028205 3.7244921E-3
+ 37.65 15.88421 36.03438 3.8388464E-3
+ 37.65 16.039122 36.048336 3.94886E-3
+ 37.65 16.295757 36.07419 4.0632262E-3
+ 37.65 16.691757 36.099666 4.2003933E-3
+ 37.65 17.228767 36.119613 4.3646735E-3
+ 37.65 17.953453 36.138767 4.5778267E-3
+ 37.65 18.77149 36.151462 4.8645595E-3
+ 37.65 19.53098 36.16299 5.20026E-3
+ 37.65 20.208479 36.17557 5.4854494E-3
+ 37.65 20.812649 36.197986 5.6465826E-3
+ 37.65 21.30033 36.236293 5.7279993E-3
+ 37.65 21.610943 36.278896 5.7965675E-3
+ 37.65 21.718233 36.316074 5.8699175E-3
+ 37.65 21.76097 36.350765 5.9385886E-3
+ 37.65 21.7782 36.37694 5.992463E-3
+ 37.65 21.72916 36.38491 6.027567E-3
+ 37.65 21.63691 36.380195 6.0619292E-3
+ 37.7 2.5095558 34.890407 0.0E+0
+ 37.7 2.4998726 34.891876 1.8214333E-4
+ 37.7 2.5112812 34.898925 3.7533833E-4
+ 37.7 2.5302815 34.90929 5.336059E-4
+ 37.7 2.5578918 34.9209 5.922315E-4
+ 37.7 2.6335053 34.935764 5.286735E-4
+ 37.7 2.7433001 34.95076 3.6323847E-4
+ 37.7 2.9328396 34.964866 1.5726755E-4
+ 37.7 3.137494 34.974002 -7.757384E-6
+ 37.7 3.4517996 34.99103 -7.591014E-5
+ 37.7 3.7631404 35.007713 -5.2375773E-5
+ 37.7 4.2952923 35.075553 5.534827E-5
+ 37.7 5.0857305 35.187427 1.4160566E-4
+ 37.7 6.26894 35.368873 1.7707102E-4
+ 37.7 7.947406 35.659576 1.4918439E-4
+ 37.7 9.243845 35.845615 -1.0355119E-4
+ 37.7 10.092249 35.891693 -5.4725923E-4
+ 37.7 10.584562 35.827087 -8.4161694E-4
+ 37.7 10.768919 35.708824 -9.4527885E-4
+ 37.7 11.031271 35.588615 -8.578679E-4
+ 37.7 11.396097 35.54417 -5.4591445E-4
+ 37.7 11.781087 35.56626 -6.806126E-5
+ 37.7 12.192053 35.61555 4.2492893E-4
+ 37.7 12.498374 35.65191 7.858286E-4
+ 37.7 12.760932 35.679977 1.0504739E-3
+ 37.7 12.999867 35.704715 1.2610082E-3
+ 37.7 13.198991 35.731475 1.431012E-3
+ 37.7 13.424098 35.759124 1.5560636E-3
+ 37.7 13.64532 35.787395 1.6566581E-3
+ 37.7 13.835812 35.80831 1.7538941E-3
+ 37.7 13.997782 35.829563 1.8439741E-3
+ 37.7 14.123505 35.84671 1.9248457E-3
+ 37.7 14.249972 35.86538 2.0030518E-3
+ 37.7 14.358627 35.878574 2.0815874E-3
+ 37.7 14.451214 35.89193 2.1589112E-3
+ 37.7 14.539995 35.903327 2.2322717E-3
+ 37.7 14.609724 35.916202 2.3008775E-3
+ 37.7 14.703296 35.92716 2.366423E-3
+ 37.7 14.788893 35.9349 2.433997E-3
+ 37.7 14.863905 35.94076 2.506108E-3
+ 37.7 14.931007 35.945152 2.5808976E-3
+ 37.7 15.001044 35.952087 2.6567627E-3
+ 37.7 15.108386 35.96141 2.7357551E-3
+ 37.7 15.18726 35.966705 2.8194417E-3
+ 37.7 15.293235 35.981033 2.9060146E-3
+ 37.7 15.396622 35.993686 2.9958151E-3
+ 37.7 15.512048 36.00395 3.088938E-3
+ 37.7 15.652934 36.01704 3.1853963E-3
+ 37.7 15.775273 36.028766 3.2836012E-3
+ 37.7 15.895089 36.034702 3.382666E-3
+ 37.7 16.048725 36.048595 3.477893E-3
+ 37.7 16.307316 36.074546 3.5768987E-3
+ 37.7 16.705725 36.100193 3.6956826E-3
+ 37.7 17.245127 36.120235 3.83791E-3
+ 37.7 17.975582 36.13966 4.0225917E-3
+ 37.7 18.799677 36.152572 4.271297E-3
+ 37.7 19.559795 36.164073 4.562451E-3
+ 37.7 20.22818 36.17675 4.809309E-3
+ 37.7 20.82375 36.199504 4.947767E-3
+ 37.7 21.309992 36.238147 5.016736E-3
+ 37.7 21.622143 36.28118 5.0751594E-3
+ 37.7 21.7315 36.319034 5.1384153E-3
+ 37.7 21.774746 36.35425 5.197821E-3
+ 37.7 21.79183 36.380802 5.244376E-3
+ 37.7 21.741648 36.388877 5.2745905E-3
+ 37.7 21.64914 36.384143 5.304041E-3
+ 37.75 2.5088992 34.89026 0.0E+0
+ 37.75 2.4993517 34.89173 1.5283111E-4
+ 37.75 2.5108926 34.8988 3.1508755E-4
+ 37.75 2.5299372 34.909194 4.4807113E-4
+ 37.75 2.557428 34.920845 4.9757736E-4
+ 37.75 2.6329267 34.93575 4.4452396E-4
+ 37.75 2.742664 34.950775 3.0585395E-4
+ 37.75 2.9323625 34.9649 1.3304812E-4
+ 37.75 3.1367866 34.973976 -5.3414573E-6
+ 37.75 3.450736 34.9909 -6.174428E-5
+ 37.75 3.7615041 35.007465 -4.0023463E-5
+ 37.75 4.2934932 35.075202 5.4353437E-5
+ 37.75 5.085951 35.187446 1.3164735E-4
+ 37.75 6.2682704 35.36872 1.6586552E-4
+ 37.75 7.94359 35.658897 1.4686387E-4
+ 37.75 9.241899 35.845512 -6.180909E-5
+ 37.75 10.093679 35.89245 -4.3301616E-4
+ 37.75 10.58631 35.82761 -6.800239E-4
+ 37.75 10.769502 35.70906 -7.659312E-4
+ 37.75 11.033352 35.588802 -6.907128E-4
+ 37.75 11.397565 35.543994 -4.2751565E-4
+ 37.75 11.7833 35.565864 -2.443838E-5
+ 37.75 12.194652 35.61527 3.9180787E-4
+ 37.75 12.501248 35.651737 6.967331E-4
+ 37.75 12.763058 35.679676 9.204964E-4
+ 37.75 13.002646 35.70453 1.0984848E-3
+ 37.75 13.201624 35.731323 1.242174E-3
+ 37.75 13.425287 35.758728 1.3477456E-3
+ 37.75 13.64688 35.78705 1.4325023E-3
+ 37.75 13.837724 35.80793 1.5143437E-3
+ 37.75 13.999388 35.829132 1.5900823E-3
+ 37.75 14.125281 35.84627 1.6580417E-3
+ 37.75 14.252258 35.865 1.7237825E-3
+ 37.75 14.361662 35.87828 1.7898265E-3
+ 37.75 14.454601 35.89169 1.8548801E-3
+ 37.75 14.543573 35.903125 1.9166047E-3
+ 37.75 14.613586 35.916084 1.9743295E-3
+ 37.75 14.707514 35.927093 2.0294743E-3
+ 37.75 14.79377 35.934856 2.0863262E-3
+ 37.75 14.869432 35.94075 2.1470093E-3
+ 37.75 14.936867 35.945152 2.2099532E-3
+ 37.75 15.007319 35.952136 2.273809E-3
+ 37.75 15.115396 35.961513 2.3402951E-3
+ 37.75 15.194884 35.966865 2.4107256E-3
+ 37.75 15.301401 35.981273 2.4835835E-3
+ 37.75 15.405164 35.993934 2.5591512E-3
+ 37.75 15.520865 36.004192 2.637504E-3
+ 37.75 15.662467 36.0174 2.7186395E-3
+ 37.75 15.785051 36.02924 2.8012213E-3
+ 37.75 15.904363 36.034965 2.8845067E-3
+ 37.75 16.0569 36.048812 2.9645108E-3
+ 37.75 16.317163 36.074844 3.0476972E-3
+ 37.75 16.717619 36.10063 3.147529E-3
+ 37.75 17.259066 36.120758 3.2670386E-3
+ 37.75 17.994469 36.140407 3.4223215E-3
+ 37.75 18.823767 36.153514 3.6316271E-3
+ 37.75 19.584398 36.164985 3.8766392E-3
+ 37.75 20.24495 36.177745 4.0840297E-3
+ 37.75 20.833109 36.20079 4.19963E-3
+ 37.75 21.318132 36.239723 4.2565073E-3
+ 37.75 21.631653 36.283126 4.3049314E-3
+ 37.75 21.742807 36.321552 4.3579083E-3
+ 37.75 21.786488 36.357223 4.407793E-3
+ 37.75 21.803444 36.384094 4.446851E-3
+ 37.75 21.75228 36.392265 4.4721136E-3
+ 37.75 21.659557 36.38751 4.4966503E-3
+ 37.8 2.5083541 34.890132 0.0E+0
+ 37.8 2.498919 34.89161 1.229281E-4
+ 37.8 2.51057 34.898693 2.5353801E-4
+ 37.8 2.529652 34.90912 3.606235E-4
+ 37.8 2.5570445 34.9208 4.0064955E-4
+ 37.8 2.6324477 34.935733 3.581575E-4
+ 37.8 2.7421367 34.95079 2.4671325E-4
+ 37.8 2.9319655 34.96493 1.0773234E-4
+ 37.8 3.1361985 34.973953 -3.5266366E-6
+ 37.8 3.4498507 34.990783 -4.8377092E-5
+ 37.8 3.760139 35.00725 -2.960484E-5
+ 37.8 4.2919793 35.07491 4.893313E-5
+ 37.8 5.0861 35.187458 1.1433953E-4
+ 37.8 6.267678 35.368587 1.4479842E-4
+ 37.8 7.9404034 35.65833 1.324167E-4
+ 37.8 9.240291 35.84542 -3.318262E-5
+ 37.8 10.094844 35.893066 -3.3102254E-4
+ 37.8 10.587731 35.828033 -5.29699E-4
+ 37.8 10.769953 35.709247 -5.9807894E-4
+ 37.8 11.035057 35.588947 -5.3633376E-4
+ 37.8 11.398773 35.543846 -3.236742E-4
+ 37.8 11.785132 35.56554 1.939812E-6
+ 37.8 12.196802 35.615032 3.3845193E-4
+ 37.8 12.503634 35.6516 5.851032E-4
+ 37.8 12.764824 35.679424 7.6621095E-4
+ 37.8 13.004954 35.704372 9.1025506E-4
+ 37.8 13.203808 35.731197 1.0265188E-3
+ 37.8 13.426264 35.758396 1.1118603E-3
+ 37.8 13.648157 35.78676 1.1802661E-3
+ 37.8 13.839286 35.807613 1.2462625E-3
+ 37.8 14.000693 35.82877 1.3072855E-3
+ 37.8 14.126725 35.84591 1.3620167E-3
+ 37.8 14.254124 35.86468 1.4149747E-3
+ 37.8 14.364147 35.878032 1.4681943E-3
+ 37.8 14.457378 35.891487 1.5206345E-3
+ 37.8 14.546507 35.90295 1.5703947E-3
+ 37.8 14.616754 35.91598 1.6169308E-3
+ 37.8 14.710973 35.927032 1.6613839E-3
+ 37.8 14.797775 35.93482 1.7072132E-3
+ 37.8 14.873976 35.94074 1.7561399E-3
+ 37.8 14.941686 35.945144 1.8068938E-3
+ 37.8 15.012483 35.95217 1.8583874E-3
+ 37.8 15.121165 35.961593 1.912001E-3
+ 37.8 15.201162 35.966995 1.968791E-3
+ 37.8 15.308127 35.981464 2.0275365E-3
+ 37.8 15.412199 35.994136 2.088463E-3
+ 37.8 15.528124 36.004386 2.1516275E-3
+ 37.8 15.670317 36.01769 2.2170206E-3
+ 37.8 15.793104 36.029624 2.2835636E-3
+ 37.8 15.911996 36.03518 2.350661E-3
+ 37.8 16.06362 36.048984 2.4150786E-3
+ 37.8 16.32527 36.075084 2.4820643E-3
+ 37.8 16.727404 36.100982 2.5624705E-3
+ 37.8 17.270536 36.12118 2.6587091E-3
+ 37.8 18.01003 36.141017 2.783821E-3
+ 37.8 18.843641 36.15428 2.9525842E-3
+ 37.8 19.60468 36.16573 3.1501245E-3
+ 37.8 20.258738 36.178562 3.3171058E-3
+ 37.8 20.840744 36.201847 3.4097088E-3
+ 37.8 21.324768 36.24102 3.4548032E-3
+ 37.8 21.639458 36.28472 3.4933602E-3
+ 37.8 21.752115 36.323627 3.5359065E-3
+ 37.8 21.796156 36.35967 3.5760567E-3
+ 37.8 21.813004 36.386802 3.6074698E-3
+ 37.8 21.761024 36.395053 3.6277316E-3
+ 37.8 21.668127 36.39028 3.6473528E-3
+ 37.85 2.507925 34.890033 0.0E+0
+ 37.85 2.4985783 34.891517 9.256179E-5
+ 37.85 2.5103163 34.89861 1.9096698E-4
+ 37.85 2.5294282 34.909053 2.7167046E-4
+ 37.85 2.556744 34.920764 3.019293E-4
+ 37.85 2.6320717 34.935722 2.7003936E-4
+ 37.85 2.7417223 34.9508 1.8617953E-4
+ 37.85 2.9316527 34.964954 8.15391E-5
+ 37.85 3.1357347 34.973934 -2.2040594E-6
+ 37.85 3.4491527 34.990695 -3.5671957E-5
+ 37.85 3.759061 35.007087 -2.0773687E-5
+ 37.85 4.2907752 35.074672 3.9902763E-5
+ 37.85 5.086196 35.187458 9.104696E-5
+ 37.85 6.267189 35.368476 1.1570142E-4
+ 37.85 7.9378843 35.657875 1.0808176E-4
+ 37.85 9.239031 35.84535 -1.5289515E-5
+ 37.85 10.095747 35.89355 -2.3911682E-4
+ 37.85 10.58883 35.828365 -3.8870712E-4
+ 37.85 10.770288 35.709384 -4.3976862E-4
+ 37.85 11.036385 35.58906 -3.925425E-4
+ 37.85 11.399715 35.543727 -2.318495E-4
+ 37.85 11.786571 35.56528 1.4153631E-5
+ 37.85 12.19849 35.61485 2.685408E-4
+ 37.85 12.505509 35.65149 4.55077E-4
+ 37.85 12.766215 35.679225 5.9210736E-4
+ 37.85 13.00677 35.70425 7.0108595E-4
+ 37.85 13.205525 35.7311 7.8903406E-4
+ 37.85 13.427027 35.758132 8.5354433E-4
+ 37.85 13.64915 35.786525 9.051892E-4
+ 37.85 13.8405 35.807357 9.54982E-4
+ 37.85 14.001703 35.828483 1.000992E-3
+ 37.85 14.127843 35.845615 1.0422439E-3
+ 37.85 14.25557 35.86443 1.0821675E-3
+ 37.85 14.366082 35.877834 1.1222982E-3
+ 37.85 14.459542 35.891323 1.1618522E-3
+ 37.85 14.548793 35.90281 1.1993865E-3
+ 37.85 14.619223 35.915897 1.2344895E-3
+ 37.85 14.71367 35.926982 1.2680193E-3
+ 37.85 14.800901 35.934783 1.3025871E-3
+ 37.85 14.877524 35.940723 1.3394963E-3
+ 37.85 14.94545 35.945137 1.3777867E-3
+ 37.85 15.016518 35.952194 1.4166377E-3
+ 37.85 15.125674 35.961654 1.4570873E-3
+ 37.85 15.206071 35.96709 1.4999307E-3
+ 37.85 15.313385 35.981613 1.5442487E-3
+ 37.85 15.417699 35.99429 1.5902097E-3
+ 37.85 15.533798 36.00454 1.6378544E-3
+ 37.85 15.676453 36.01791 1.6871714E-3
+ 37.85 15.7994 36.029922 1.7373468E-3
+ 37.85 15.917963 36.035343 1.7879326E-3
+ 37.85 16.068867 36.049114 1.8364772E-3
+ 37.85 16.331604 36.075263 1.8869598E-3
+ 37.85 16.735046 36.101257 1.947567E-3
+ 37.85 17.2795 36.12151 2.0200982E-3
+ 37.85 18.022203 36.14149 2.1144277E-3
+ 37.85 18.859205 36.15488 2.2417423E-3
+ 37.85 19.620546 36.16631 2.3907581E-3
+ 37.85 20.269503 36.179195 2.5165891E-3
+ 37.85 20.846668 36.20267 2.5860946E-3
+ 37.85 21.329914 36.24203 2.6196667E-3
+ 37.85 21.64554 36.285964 2.6484692E-3
+ 37.85 21.75939 36.325244 2.6804674E-3
+ 37.85 21.80371 36.36158 2.710715E-3
+ 37.85 21.820473 36.38892 2.7343668E-3
+ 37.85 21.767855 36.397232 2.7495895E-3
+ 37.85 21.674826 36.39245 2.7642971E-3
+ 37.9 2.5076158 34.889965 0.0E+0
+ 37.9 2.4983327 34.89145 6.186285E-5
+ 37.9 2.5101335 34.89855 1.276594E-4
+ 37.9 2.5292673 34.90901 1.8163049E-4
+ 37.9 2.556528 34.920742 2.0191092E-4
+ 37.9 2.6318011 34.935714 1.806478E-4
+ 37.9 2.741424 34.95081 1.2462708E-4
+ 37.9 2.931427 34.96497 5.4696021E-5
+ 37.9 3.1354005 34.973922 -1.2573416E-6
+ 37.9 3.4486494 34.99063 -2.348018E-5
+ 37.9 3.7582821 35.006965 -1.3158303E-5
+ 37.9 4.289901 35.0745 2.8129425E-5
+ 37.9 5.086254 35.187458 6.321565E-5
+ 37.9 6.2668247 35.368396 8.05143E-5
+ 37.9 7.9360623 35.657546 7.623637E-5
+ 37.9 9.238126 35.8453 -5.584881E-6
+ 37.9 10.09639 35.893894 -1.5496579E-4
+ 37.9 10.589612 35.828598 -2.5493672E-4
+ 37.9 10.770518 35.70948 -2.8885726E-4
+ 37.9 11.037334 35.58914 -2.569422E-4
+ 37.9 11.40039 35.543643 -1.492731E-4
+ 37.9 11.787606 35.565097 1.5534966E-5
+ 37.9 12.199704 35.614715 1.8603109E-4
+ 37.9 12.50686 35.65141 3.1108988E-4
+ 37.9 12.767217 35.679084 4.0298872E-4
+ 37.9 13.008079 35.704162 4.7607076E-4
+ 37.9 13.206761 35.73103 5.350435E-4
+ 37.9 13.427573 35.757942 5.7827815E-4
+ 37.9 13.649859 35.78636 6.1286013E-4
+ 37.9 13.841367 35.80718 6.4618635E-4
+ 37.9 14.002421 35.828277 6.769661E-4
+ 37.9 14.128638 35.845405 7.045561E-4
+ 37.9 14.256602 35.864242 7.312615E-4
+ 37.9 14.367464 35.87769 7.581102E-4
+ 37.9 14.46109 35.891204 7.8457815E-4
+ 37.9 14.550428 35.902706 8.096958E-4
+ 37.9 14.62099 35.915832 8.331864E-4
+ 37.9 14.715599 35.92694 8.556234E-4
+ 37.9 14.803138 35.934757 8.7875494E-4
+ 37.9 14.880065 35.940711 9.034559E-4
+ 37.9 14.948148 35.94513 9.290822E-4
+ 37.9 15.01941 35.95221 9.5508503E-4
+ 37.9 15.128907 35.961692 9.821574E-4
+ 37.9 15.209591 35.967155 1.0108307E-3
+ 37.9 15.317156 35.981716 1.0404903E-3
+ 37.9 15.421643 35.994396 1.0712486E-3
+ 37.9 15.537866 36.004642 1.1031314E-3
+ 37.9 15.680852 36.01807 1.1361291E-3
+ 37.9 15.803915 36.030132 1.1696968E-3
+ 37.9 15.922241 36.03546 1.2035357E-3
+ 37.9 16.072626 36.049205 1.235999E-3
+ 37.9 16.336145 36.075393 1.2697598E-3
+ 37.9 16.740524 36.101448 1.3102964E-3
+ 37.9 17.285925 36.12174 1.3588032E-3
+ 37.9 18.030937 36.141826 1.4219066E-3
+ 37.9 18.870377 36.15531 1.5071104E-3
+ 37.9 19.631931 36.16672 1.6068339E-3
+ 37.9 20.277216 36.17965 1.6909785E-3
+ 37.9 20.850891 36.203262 1.7373257E-3
+ 37.9 21.333582 36.242752 1.7595804E-3
+ 37.9 21.649895 36.286857 1.7787206E-3
+ 37.9 21.764605 36.326404 1.8000883E-3
+ 37.9 21.80913 36.362953 1.8203114E-3
+ 37.9 21.825827 36.390438 1.8361182E-3
+ 37.9 21.772749 36.398792 1.8462762E-3
+ 37.9 21.679625 36.394004 1.8560743E-3
+ 37.95 2.5074291 34.889923 0.0E+0
+ 37.95 2.4981844 34.89141 3.096417E-5
+ 37.95 2.5100233 34.898513 6.39058E-5
+ 37.95 2.5291702 34.908985 9.092999E-5
+ 37.95 2.556398 34.920726 1.0109809E-4
+ 37.95 2.631638 34.93571 9.047032E-5
+ 37.95 2.741244 34.950813 6.24382E-5
+ 37.95 2.9312908 34.96498 2.7437038E-5
+ 37.95 3.1351985 34.973915 -5.645065E-7
+ 37.95 3.4483451 34.99059 -1.1644043E-5
+ 37.95 3.7578113 35.006893 -6.3680204E-6
+ 37.95 4.2893705 35.074398 1.4518546E-5
+ 37.95 5.0862846 35.187458 3.235184E-5
+ 37.95 6.2666 35.368343 4.1256917E-5
+ 37.95 7.934961 35.65735 3.936061E-5
+ 37.95 9.237581 35.845264 -1.4028248E-6
+ 37.95 10.096775 35.894104 -7.6108153E-5
+ 37.95 10.590079 35.82874 -1.261441E-4
+ 37.95 10.770652 35.709537 -1.4306004E-4
+ 37.95 11.037904 35.589187 -1.2697959E-4
+ 37.95 11.400796 35.54359 -7.300629E-5
+ 37.95 11.78823 35.564983 9.603493E-6
+ 37.95 12.200435 35.614635 9.508566E-5
+ 37.95 12.507676 35.65136 1.5779816E-4
+ 37.95 12.767822 35.678997 2.0389116E-4
+ 37.95 13.008869 35.70411 2.4054518E-4
+ 37.95 13.207507 35.730983 2.701209E-4
+ 37.95 13.427901 35.757827 2.9179712E-4
+ 37.95 13.650285 35.78626 3.0912621E-4
+ 37.95 13.841887 35.807067 3.2582128E-4
+ 37.95 14.002851 35.82815 3.4123635E-4
+ 37.95 14.129114 35.84528 3.550519E-4
+ 37.95 14.25722 35.864131 3.6842562E-4
+ 37.95 14.368294 35.8776 3.8187252E-4
+ 37.95 14.462019 35.891132 3.951303E-4
+ 37.95 14.55141 35.902645 4.0771198E-4
+ 37.95 14.622051 35.915794 4.1947871E-4
+ 37.95 14.716757 35.926918 4.3071745E-4
+ 37.95 14.804483 35.93474 4.4230403E-4
+ 37.95 14.881593 35.940704 4.546775E-4
+ 37.95 14.94977 35.945125 4.6751485E-4
+ 37.95 15.021149 35.952217 4.805412E-4
+ 37.95 15.13085 35.961715 4.9410323E-4
+ 37.95 15.211708 35.967197 5.084668E-4
+ 37.95 15.319425 35.981777 5.233245E-4
+ 37.95 15.424015 35.99446 5.38732E-4
+ 37.95 15.540313 36.004703 5.5470236E-4
+ 37.95 15.683499 36.01816 5.712298E-4
+ 37.95 15.806631 36.030261 5.880415E-4
+ 37.95 15.924814 36.03553 6.0498795E-4
+ 37.95 16.074886 36.049263 6.212425E-4
+ 37.95 16.338877 36.07547 6.381472E-4
+ 37.95 16.743818 36.101562 6.5844593E-4
+ 37.95 17.289787 36.121875 6.8273453E-4
+ 37.95 18.036192 36.14203 7.143373E-4
+ 37.95 18.877102 36.155567 7.570186E-4
+ 37.95 19.638783 36.16697 8.0697215E-4
+ 37.95 20.281853 36.17992 8.491029E-4
+ 37.95 20.85342 36.203617 8.7226915E-4
+ 37.95 21.33578 36.243186 8.8335346E-4
+ 37.95 21.652512 36.28739 8.929007E-4
+ 37.95 21.76774 36.327102 9.035904E-4
+ 37.95 21.812387 36.363777 9.137149E-4
+ 37.95 21.829046 36.39135 9.216265E-4
+ 37.95 21.775692 36.399734 9.2670606E-4
+ 37.95 21.68251 36.39494 9.316008E-4
+ 38.0 2.5073666 34.889907 0.0E+0
+ 38.0 2.4981348 34.891395 0.0E+0
+ 38.0 2.5099864 34.898502 0.0E+0
+ 38.0 2.5291376 34.908977 0.0E+0
+ 38.0 2.5563545 34.92072 0.0E+0
+ 38.0 2.6315834 34.935707 0.0E+0
+ 38.0 2.741184 34.950817 0.0E+0
+ 38.0 2.931245 34.964984 0.0E+0
+ 38.0 3.135131 34.97391 0.0E+0
+ 38.0 3.4482433 34.990577 0.0E+0
+ 38.0 3.757654 35.006866 0.0E+0
+ 38.0 4.2891926 35.074363 0.0E+0
+ 38.0 5.0862936 35.187454 0.0E+0
+ 38.0 6.2665243 35.36833 0.0E+0
+ 38.0 7.934592 35.657283 0.0E+0
+ 38.0 9.237399 35.845252 0.0E+0
+ 38.0 10.096904 35.894172 0.0E+0
+ 38.0 10.590235 35.828784 0.0E+0
+ 38.0 10.770696 35.709556 0.0E+0
+ 38.0 11.038094 35.589202 0.0E+0
+ 38.0 11.400931 35.543575 0.0E+0
+ 38.0 11.788438 35.564945 0.0E+0
+ 38.0 12.200679 35.61461 0.0E+0
+ 38.0 12.507948 35.651344 0.0E+0
+ 38.0 12.768024 35.67897 0.0E+0
+ 38.0 13.009133 35.704093 0.0E+0
+ 38.0 13.207757 35.73097 0.0E+0
+ 38.0 13.42801 35.75779 0.0E+0
+ 38.0 13.650426 35.786224 0.0E+0
+ 38.0 13.84206 35.80703 0.0E+0
+ 38.0 14.002994 35.82811 0.0E+0
+ 38.0 14.129272 35.845237 0.0E+0
+ 38.0 14.257426 35.864093 0.0E+0
+ 38.0 14.368571 35.877574 0.0E+0
+ 38.0 14.462329 35.89111 0.0E+0
+ 38.0 14.551738 35.902622 0.0E+0
+ 38.0 14.622405 35.915782 0.0E+0
+ 38.0 14.717144 35.92691 0.0E+0
+ 38.0 14.804931 35.934734 0.0E+0
+ 38.0 14.882102 35.9407 0.0E+0
+ 38.0 14.950311 35.94512 0.0E+0
+ 38.0 15.021729 35.952217 0.0E+0
+ 38.0 15.131499 35.961723 0.0E+0
+ 38.0 15.212415 35.96721 0.0E+0
+ 38.0 15.320182 35.981796 0.0E+0
+ 38.0 15.424807 35.99448 0.0E+0
+ 38.0 15.54113 36.004726 0.0E+0
+ 38.0 15.684382 36.018192 0.0E+0
+ 38.0 15.807537 36.030303 0.0E+0
+ 38.0 15.925672 36.035552 0.0E+0
+ 38.0 16.075642 36.04928 0.0E+0
+ 38.0 16.339788 36.075496 0.0E+0
+ 38.0 16.744917 36.1016 0.0E+0
+ 38.0 17.291079 36.12192 0.0E+0
+ 38.0 18.037945 36.142093 0.0E+0
+ 38.0 18.879349 36.15565 0.0E+0
+ 38.0 19.641071 36.16705 0.0E+0
+ 38.0 20.2834 36.18001 0.0E+0
+ 38.0 20.854263 36.203735 0.0E+0
+ 38.0 21.336512 36.243331 0.0E+0
+ 38.0 21.653383 36.28757 0.0E+0
+ 38.0 21.768787 36.327335 0.0E+0
+ 38.0 21.813475 36.36405 0.0E+0
+ 38.0 21.83012 36.391654 0.0E+0
+ 38.0 21.776674 36.400047 0.0E+0
+ 38.0 21.683474 36.395252 0.0E+0
+ 38.05 2.5074291 34.889923 0.0E+0
+ 38.05 2.4981844 34.89141 -3.0895076E-5
+ 38.05 2.5100233 34.898513 -6.37632E-5
+ 38.05 2.5291702 34.908985 -9.0727095E-5
+ 38.05 2.556398 34.920726 -1.0087249E-4
+ 38.05 2.631638 34.93571 -9.026844E-5
+ 38.05 2.741244 34.950813 -6.2298873E-5
+ 38.05 2.9312908 34.96498 -2.7375814E-5
+ 38.05 3.1351985 34.973915 5.6324682E-7
+ 38.05 3.4483451 34.99059 1.161806E-5
+ 38.05 3.7578113 35.006893 6.3538104E-6
+ 38.05 4.2893705 35.074398 -1.4486149E-5
+ 38.05 5.0862846 35.187458 -3.227965E-5
+ 38.05 6.2666 35.368343 -4.1164854E-5
+ 38.05 7.934961 35.65735 -3.927278E-5
+ 38.05 9.237581 35.845264 1.3996945E-6
+ 38.05 10.096775 35.894104 7.5938325E-5
+ 38.05 10.590079 35.82874 1.2586261E-4
+ 38.05 10.770652 35.709537 1.4274081E-4
+ 38.05 11.037904 35.589187 1.2669624E-4
+ 38.05 11.400796 35.54359 7.284338E-5
+ 38.05 11.78823 35.564983 -9.582063E-6
+ 38.05 12.200435 35.614635 -9.487349E-5
+ 38.05 12.507676 35.65136 -1.5744603E-4
+ 38.05 12.767822 35.678997 -2.034362E-4
+ 38.05 13.008869 35.70411 -2.4000842E-4
+ 38.05 13.207507 35.730983 -2.6951811E-4
+ 38.05 13.427901 35.757827 -2.9114601E-4
+ 38.05 13.650285 35.78626 -3.0843642E-4
+ 38.05 13.841887 35.807067 -3.2509423E-4
+ 38.05 14.002851 35.82815 -3.404749E-4
+ 38.05 14.129114 35.84528 -3.5425962E-4
+ 38.05 14.25722 35.864131 -3.676035E-4
+ 38.05 14.368294 35.8776 -3.810204E-4
+ 38.05 14.462019 35.891132 -3.942486E-4
+ 38.05 14.55141 35.902645 -4.0680222E-4
+ 38.05 14.622051 35.915794 -4.1854268E-4
+ 38.05 14.716757 35.926918 -4.2975632E-4
+ 38.05 14.804483 35.93474 -4.4131706E-4
+ 38.05 14.881593 35.940704 -4.536629E-4
+ 38.05 14.94977 35.945125 -4.6647162E-4
+ 38.05 15.021149 35.952217 -4.794689E-4
+ 38.05 15.13085 35.961715 -4.9300066E-4
+ 38.05 15.211708 35.967197 -5.073322E-4
+ 38.05 15.319425 35.981777 -5.221567E-4
+ 38.05 15.424015 35.99446 -5.375299E-4
+ 38.05 15.540313 36.004703 -5.534646E-4
+ 38.05 15.683499 36.01816 -5.6995515E-4
+ 38.05 15.806631 36.030261 -5.867293E-4
+ 38.05 15.924814 36.03553 -6.0363794E-4
+ 38.05 16.074886 36.049263 -6.1985623E-4
+ 38.05 16.338877 36.07547 -6.367232E-4
+ 38.05 16.743818 36.101562 -6.5697665E-4
+ 38.05 17.289787 36.121875 -6.8121106E-4
+ 38.05 18.036192 36.14203 -7.127433E-4
+ 38.05 18.877102 36.155567 -7.553294E-4
+ 38.05 19.638783 36.16697 -8.0517143E-4
+ 38.05 20.281853 36.17992 -8.472082E-4
+ 38.05 20.85342 36.203617 -8.7032275E-4
+ 38.05 21.33578 36.243186 -8.813823E-4
+ 38.05 21.652512 36.28739 -8.9090823E-4
+ 38.05 21.76774 36.327102 -9.015741E-4
+ 38.05 21.812387 36.363777 -9.11676E-4
+ 38.05 21.829046 36.39135 -9.1957E-4
+ 38.05 21.775692 36.399734 -9.246382E-4
+ 38.05 21.68251 36.39494 -9.2952203E-4
+ 38.1 2.5076158 34.889965 0.0E+0
+ 38.1 2.4983327 34.89145 -6.158707E-5
+ 38.1 2.5101335 34.89855 -1.2709032E-4
+ 38.1 2.5292673 34.90901 -1.808208E-4
+ 38.1 2.556528 34.920742 -2.0101083E-4
+ 38.1 2.6318011 34.935714 -1.798425E-4
+ 38.1 2.741424 34.95081 -1.240715E-4
+ 38.1 2.931427 34.96497 -5.4452193E-5
+ 38.1 3.1354005 34.973922 1.2517365E-6
+ 38.1 3.4486494 34.99063 2.3375507E-5
+ 38.1 3.7582821 35.006965 1.3099644E-5
+ 38.1 4.289901 35.0745 -2.8004028E-5
+ 38.1 5.086254 35.187458 -6.293385E-5
+ 38.1 6.2668247 35.368396 -8.0155376E-5
+ 38.1 7.9360623 35.657546 -7.589652E-5
+ 38.1 9.238126 35.8453 5.559984E-6
+ 38.1 10.09639 35.893894 1.5427498E-4
+ 38.1 10.589612 35.828598 2.5380024E-4
+ 38.1 10.770518 35.70948 2.8756956E-4
+ 38.1 11.037334 35.58914 2.557968E-4
+ 38.1 11.40039 35.543643 1.4860767E-4
+ 38.1 11.787606 35.565097 -1.5465714E-5
+ 38.1 12.199704 35.614715 -1.8520179E-4
+ 38.1 12.50686 35.65141 -3.0970305E-4
+ 38.1 12.767217 35.679084 -4.0119222E-4
+ 38.1 13.008079 35.704162 -4.739485E-4
+ 38.1 13.206761 35.73103 -5.326583E-4
+ 38.1 13.427573 35.757942 -5.7570025E-4
+ 38.1 13.649859 35.78636 -6.1012804E-4
+ 38.1 13.841367 35.80718 -6.433057E-4
+ 38.1 14.002421 35.828277 -6.7394826E-4
+ 38.1 14.128638 35.845405 -7.014153E-4
+ 38.1 14.256602 35.864242 -7.280016E-4
+ 38.1 14.367464 35.87769 -7.547306E-4
+ 38.1 14.46109 35.891204 -7.810806E-4
+ 38.1 14.550428 35.902706 -8.060863E-4
+ 38.1 14.62099 35.915832 -8.2947214E-4
+ 38.1 14.715599 35.92694 -8.5180916E-4
+ 38.1 14.803138 35.934757 -8.7483756E-4
+ 38.1 14.880065 35.940711 -8.994284E-4
+ 38.1 14.948148 35.94513 -9.2494045E-4
+ 38.1 15.01941 35.95221 -9.508274E-4
+ 38.1 15.128907 35.961692 -9.777792E-4
+ 38.1 15.209591 35.967155 -1.0063245E-3
+ 38.1 15.317156 35.981716 -1.035852E-3
+ 38.1 15.421643 35.994396 -1.066473E-3
+ 38.1 15.537866 36.004642 -1.0982138E-3
+ 38.1 15.680852 36.01807 -1.1310644E-3
+ 38.1 15.803915 36.030132 -1.1644824E-3
+ 38.1 15.922241 36.03546 -1.1981705E-3
+ 38.1 16.072626 36.049205 -1.2304891E-3
+ 38.1 16.336145 36.075393 -1.2640994E-3
+ 38.1 16.740524 36.101448 -1.3044551E-3
+ 38.1 17.285925 36.12174 -1.3527459E-3
+ 38.1 18.030937 36.141826 -1.4155679E-3
+ 38.1 18.870377 36.15531 -1.5003919E-3
+ 38.1 19.631931 36.16672 -1.5996708E-3
+ 38.1 20.277216 36.17965 -1.6834403E-3
+ 38.1 20.850891 36.203262 -1.7295809E-3
+ 38.1 21.333582 36.242752 -1.7517365E-3
+ 38.1 21.649895 36.286857 -1.7707912E-3
+ 38.1 21.764605 36.326404 -1.7920637E-3
+ 38.1 21.80913 36.362953 -1.8121966E-3
+ 38.1 21.825827 36.390438 -1.827933E-3
+ 38.1 21.772749 36.398792 -1.8380457E-3
+ 38.1 21.679625 36.394004 -1.8478002E-3
+ 38.15 2.507925 34.890033 0.0E+0
+ 38.15 2.4985783 34.891517 -9.194354E-5
+ 38.15 2.5103163 34.89861 -1.8969143E-4
+ 38.15 2.5294282 34.909053 -2.6985586E-4
+ 38.15 2.556744 34.920764 -2.9991261E-4
+ 38.15 2.6320717 34.935722 -2.682357E-4
+ 38.15 2.7417223 34.9508 -1.8493597E-4
+ 38.15 2.9316527 34.964954 -8.099447E-5
+ 38.15 3.1357347 34.973934 2.1893376E-6
+ 38.15 3.4491527 34.990695 3.543369E-5
+ 38.15 3.759061 35.007087 2.0634932E-5
+ 38.15 4.2907752 35.074672 -3.9636237E-5
+ 38.15 5.086196 35.187458 -9.043882E-5
+ 38.15 6.267189 35.368476 -1.1492861E-4
+ 38.15 7.9378843 35.657875 -1.0735984E-4
+ 38.15 9.239031 35.84535 1.5187392E-5
+ 38.15 10.095747 35.89355 2.3751966E-4
+ 38.15 10.58883 35.828365 3.861108E-4
+ 38.15 10.770288 35.709384 4.3683123E-4
+ 38.15 11.036385 35.58906 3.8992057E-4
+ 38.15 11.399715 35.543727 2.3030088E-4
+ 38.15 11.786571 35.56528 -1.4059094E-5
+ 38.15 12.19849 35.61485 -2.6674714E-4
+ 38.15 12.505509 35.65149 -4.5203737E-4
+ 38.15 12.766215 35.679225 -5.8815244E-4
+ 38.15 13.00677 35.70425 -6.9640314E-4
+ 38.15 13.205525 35.7311 -7.837638E-4
+ 38.15 13.427027 35.758132 -8.4784324E-4
+ 38.15 13.64915 35.786525 -8.9914305E-4
+ 38.15 13.8405 35.807357 -9.486033E-4
+ 38.15 14.001703 35.828483 -9.94306E-4
+ 38.15 14.127843 35.845615 -1.0352824E-3
+ 38.15 14.25557 35.86443 -1.0749393E-3
+ 38.15 14.366082 35.877834 -1.114802E-3
+ 38.15 14.459542 35.891323 -1.1540917E-3
+ 38.15 14.548793 35.90281 -1.1913755E-3
+ 38.15 14.619223 35.915897 -1.2262439E-3
+ 38.15 14.71367 35.926982 -1.2595497E-3
+ 38.15 14.800901 35.934783 -1.2938866E-3
+ 38.15 14.877524 35.940723 -1.3305494E-3
+ 38.15 14.94545 35.945137 -1.3685839E-3
+ 38.15 15.016518 35.952194 -1.4071754E-3
+ 38.15 15.125674 35.961654 -1.4473549E-3
+ 38.15 15.206071 35.96709 -1.489912E-3
+ 38.15 15.313385 35.981613 -1.5339341E-3
+ 38.15 15.417699 35.99429 -1.579588E-3
+ 38.15 15.533798 36.00454 -1.6269146E-3
+ 38.15 15.676453 36.01791 -1.675902E-3
+ 38.15 15.7994 36.029922 -1.7257422E-3
+ 38.15 15.917963 36.035343 -1.7759904E-3
+ 38.15 16.068867 36.049114 -1.8242107E-3
+ 38.15 16.331604 36.075263 -1.8743561E-3
+ 38.15 16.735046 36.101257 -1.9345585E-3
+ 38.15 17.2795 36.12151 -2.0066052E-3
+ 38.15 18.022203 36.14149 -2.1003047E-3
+ 38.15 18.859205 36.15488 -2.2267687E-3
+ 38.15 19.620546 36.16631 -2.3747894E-3
+ 38.15 20.269503 36.179195 -2.49978E-3
+ 38.15 20.846668 36.20267 -2.5688211E-3
+ 38.15 21.329914 36.24203 -2.602169E-3
+ 38.15 21.64554 36.285964 -2.630779E-3
+ 38.15 21.75939 36.325244 -2.6625636E-3
+ 38.15 21.80371 36.36158 -2.692609E-3
+ 38.15 21.820473 36.38892 -2.7161028E-3
+ 38.15 21.767855 36.397232 -2.731224E-3
+ 38.15 21.674826 36.39245 -2.7458337E-3
+ 38.2 2.5083541 34.890132 0.0E+0
+ 38.2 2.498919 34.89161 -1.2183454E-4
+ 38.2 2.51057 34.898693 -2.5128255E-4
+ 38.2 2.529652 34.90912 -3.574154E-4
+ 38.2 2.5570445 34.9208 -3.9708541E-4
+ 38.2 2.6324477 34.935733 -3.5497135E-4
+ 38.2 2.7421367 34.95079 -2.445185E-4
+ 38.2 2.9319655 34.96493 -1.0677396E-4
+ 38.2 3.1361985 34.973953 3.495264E-6
+ 38.2 3.4498507 34.990783 4.7946734E-5
+ 38.2 3.760139 35.00725 2.934148E-5
+ 38.2 4.2919793 35.07491 -4.8497822E-5
+ 38.2 5.0861 35.187458 -1.1332237E-4
+ 38.2 6.267678 35.368587 -1.4351032E-4
+ 38.2 7.9404034 35.65833 -1.3123873E-4
+ 38.2 9.240291 35.84542 3.288743E-5
+ 38.2 10.094844 35.893066 3.280778E-4
+ 38.2 10.587731 35.828033 5.249868E-4
+ 38.2 10.769953 35.709247 5.927585E-4
+ 38.2 11.035057 35.588947 5.315626E-4
+ 38.2 11.398773 35.543846 3.2079481E-4
+ 38.2 11.785132 35.56554 -1.9225553E-6
+ 38.2 12.196802 35.615032 -3.354411E-4
+ 38.2 12.503634 35.6516 -5.7989812E-4
+ 38.2 12.764824 35.679424 -7.5939483E-4
+ 38.2 13.004954 35.704372 -9.0215745E-4
+ 38.2 13.203808 35.731197 -1.017387E-3
+ 38.2 13.426264 35.758396 -1.1019692E-3
+ 38.2 13.648157 35.78676 -1.1697665E-3
+ 38.2 13.839286 35.807613 -1.2351758E-3
+ 38.2 14.000693 35.82877 -1.295656E-3
+ 38.2 14.126725 35.84591 -1.3499001E-3
+ 38.2 14.254124 35.86468 -1.4023872E-3
+ 38.2 14.364147 35.878032 -1.4551334E-3
+ 38.2 14.457378 35.891487 -1.507107E-3
+ 38.2 14.546507 35.90295 -1.5564247E-3
+ 38.2 14.616754 35.91598 -1.6025467E-3
+ 38.2 14.710973 35.927032 -1.6466044E-3
+ 38.2 14.797775 35.93482 -1.692026E-3
+ 38.2 14.873976 35.94074 -1.7405174E-3
+ 38.2 14.941686 35.945144 -1.7908198E-3
+ 38.2 15.012483 35.95217 -1.8418553E-3
+ 38.2 15.121165 35.961593 -1.8949921E-3
+ 38.2 15.201162 35.966995 -1.9512767E-3
+ 38.2 15.308127 35.981464 -2.0094995E-3
+ 38.2 15.412199 35.994136 -2.0698842E-3
+ 38.2 15.528124 36.004386 -2.1324867E-3
+ 38.2 15.670317 36.01769 -2.197298E-3
+ 38.2 15.793104 36.029624 -2.2632491E-3
+ 38.2 15.911996 36.03518 -2.3297495E-3
+ 38.2 16.06362 36.048984 -2.3935942E-3
+ 38.2 16.32527 36.075084 -2.4599838E-3
+ 38.2 16.727404 36.100982 -2.539675E-3
+ 38.2 17.270536 36.12118 -2.6350575E-3
+ 38.2 18.01003 36.141017 -2.7590563E-3
+ 38.2 18.843641 36.15428 -2.9263182E-3
+ 38.2 19.60468 36.16573 -3.1221013E-3
+ 38.2 20.258738 36.178562 -3.287597E-3
+ 38.2 20.840744 36.201847 -3.3793763E-3
+ 38.2 21.324768 36.24102 -3.4240696E-3
+ 38.2 21.639458 36.28472 -3.4622836E-3
+ 38.2 21.752115 36.323627 -3.5044513E-3
+ 38.2 21.796156 36.35967 -3.5442442E-3
+ 38.2 21.813004 36.386802 -3.575378E-3
+ 38.2 21.761024 36.395053 -3.5954595E-3
+ 38.2 21.668127 36.39028 -3.6149062E-3
+ 38.25 2.5088992 34.89026 0.0E+0
+ 38.25 2.4993517 34.89173 -1.5113353E-4
+ 38.25 2.5108926 34.8988 -3.115877E-4
+ 38.25 2.5299372 34.909194 -4.4309417E-4
+ 38.25 2.557428 34.920845 -4.920505E-4
+ 38.25 2.6329267 34.93575 -4.3958637E-4
+ 38.25 2.742664 34.950775 -3.0245666E-4
+ 38.25 2.9323625 34.9649 -1.3157028E-4
+ 38.25 3.1367866 34.973976 5.282127E-6
+ 38.25 3.450736 34.9909 6.1058453E-5
+ 38.25 3.7615041 35.007465 3.95789E-5
+ 38.25 4.2934932 35.075202 -5.37497E-5
+ 38.25 5.085951 35.187446 -1.3018506E-4
+ 38.25 6.2682704 35.36872 -1.6402316E-4
+ 38.25 7.94359 35.658897 -1.4523257E-4
+ 38.25 9.241899 35.845512 6.112255E-5
+ 38.25 10.093679 35.89245 4.282064E-4
+ 38.25 10.58631 35.82761 6.724705E-4
+ 38.25 10.769502 35.70906 7.574236E-4
+ 38.25 11.033352 35.588802 6.830407E-4
+ 38.25 11.397565 35.543994 4.22767E-4
+ 38.25 11.7833 35.565864 2.4166928E-5
+ 38.25 12.194652 35.61527 -3.8745583E-4
+ 38.25 12.501248 35.651737 -6.8899407E-4
+ 38.25 12.763058 35.679676 -9.1027194E-4
+ 38.25 13.002646 35.70453 -1.0862832E-3
+ 38.25 13.201624 35.731323 -1.2283763E-3
+ 38.25 13.425287 35.758728 -1.3327755E-3
+ 38.25 13.64688 35.78705 -1.4165906E-3
+ 38.25 13.837724 35.80793 -1.497523E-3
+ 38.25 13.999388 35.829132 -1.5724204E-3
+ 38.25 14.125281 35.84627 -1.6396249E-3
+ 38.25 14.252258 35.865 -1.7046354E-3
+ 38.25 14.361662 35.87828 -1.769946E-3
+ 38.25 14.454601 35.89169 -1.834277E-3
+ 38.25 14.543573 35.903125 -1.895316E-3
+ 38.25 14.613586 35.916084 -1.9523996E-3
+ 38.25 14.707514 35.927093 -2.0069316E-3
+ 38.25 14.79377 35.934856 -2.0631523E-3
+ 38.25 14.869432 35.94075 -2.1231612E-3
+ 38.25 14.936867 35.945152 -2.185406E-3
+ 38.25 15.007319 35.952136 -2.2485523E-3
+ 38.25 15.115396 35.961513 -2.3143002E-3
+ 38.25 15.194884 35.966865 -2.3839485E-3
+ 38.25 15.301401 35.981273 -2.455997E-3
+ 38.25 15.405164 35.993934 -2.5307254E-3
+ 38.25 15.520865 36.004192 -2.6082075E-3
+ 38.25 15.662467 36.0174 -2.6884421E-3
+ 38.25 15.785051 36.02924 -2.7701065E-3
+ 38.25 15.904363 36.034965 -2.852467E-3
+ 38.25 16.0569 36.048812 -2.9315822E-3
+ 38.25 16.317163 36.074844 -3.0138448E-3
+ 38.25 16.717619 36.10063 -3.1125675E-3
+ 38.25 17.259066 36.120758 -3.2307498E-3
+ 38.25 17.994469 36.140407 -3.384308E-3
+ 38.25 18.823767 36.153514 -3.5912888E-3
+ 38.25 19.584398 36.164985 -3.8335791E-3
+ 38.25 20.24495 36.177745 -4.0386663E-3
+ 38.25 20.833109 36.20079 -4.1529824E-3
+ 38.25 21.318132 36.239723 -4.209228E-3
+ 38.25 21.631653 36.283126 -4.257114E-3
+ 38.25 21.742807 36.321552 -4.309503E-3
+ 38.25 21.786488 36.357223 -4.358833E-3
+ 38.25 21.803444 36.384094 -4.3974574E-3
+ 38.25 21.75228 36.392265 -4.4224397E-3
+ 38.25 21.659557 36.38751 -4.4467034E-3
+ 38.3 2.5095558 34.890407 0.0E+0
+ 38.3 2.4998726 34.891876 -1.797182E-4
+ 38.3 2.5112812 34.898925 -3.7034097E-4
+ 38.3 2.5302815 34.90929 -5.2650133E-4
+ 38.3 2.5578918 34.9209 -5.8434635E-4
+ 38.3 2.6335053 34.935764 -5.216346E-4
+ 38.3 2.7433001 34.95076 -3.5840223E-4
+ 38.3 2.9328396 34.964866 -1.5517365E-4
+ 38.3 3.137494 34.974002 7.6541E-6
+ 38.3 3.4517996 34.99103 7.489945E-5
+ 38.3 3.7631404 35.007713 5.1678427E-5
+ 38.3 4.2952923 35.075553 -5.4611347E-5
+ 38.3 5.0857305 35.187427 -1.3972029E-4
+ 38.3 6.26894 35.368873 -1.7471345E-4
+ 38.3 7.947406 35.659576 -1.4719811E-4
+ 38.3 9.243845 35.845615 1.0217248E-4
+ 38.3 10.092249 35.891693 5.3997285E-4
+ 38.3 10.584562 35.827087 8.3041144E-4
+ 38.3 10.768919 35.708824 9.3269313E-4
+ 38.3 11.031271 35.588615 8.46446E-4
+ 38.3 11.396097 35.54417 5.38646E-4
+ 38.3 11.781087 35.56626 6.715507E-5
+ 38.3 12.192053 35.61555 -4.192713E-4
+ 38.3 12.498374 35.65191 -7.753659E-4
+ 38.3 12.760932 35.679977 -1.0364876E-3
+ 38.3 12.999867 35.704715 -1.2442188E-3
+ 38.3 13.198991 35.731475 -1.4119591E-3
+ 38.3 13.424098 35.759124 -1.5353457E-3
+ 38.3 13.64532 35.787395 -1.6346009E-3
+ 38.3 13.835812 35.80831 -1.7305424E-3
+ 38.3 13.997782 35.829563 -1.8194229E-3
+ 38.3 14.123505 35.84671 -1.8992177E-3
+ 38.3 14.249972 35.86538 -1.9763826E-3
+ 38.3 14.358627 35.878574 -2.0538726E-3
+ 38.3 14.451214 35.89193 -2.1301666E-3
+ 38.3 14.539995 35.903327 -2.2025504E-3
+ 38.3 14.609724 35.916202 -2.270243E-3
+ 38.3 14.703296 35.92716 -2.3349155E-3
+ 38.3 14.788893 35.9349 -2.40159E-3
+ 38.3 14.863905 35.94076 -2.4727408E-3
+ 38.3 14.931007 35.945152 -2.5465348E-3
+ 38.3 15.001044 35.952087 -2.6213896E-3
+ 38.3 15.108386 35.96141 -2.6993304E-3
+ 38.3 15.18726 35.966705 -2.781903E-3
+ 38.3 15.293235 35.981033 -2.867323E-3
+ 38.3 15.396622 35.993686 -2.955928E-3
+ 38.3 15.512048 36.00395 -3.047811E-3
+ 38.3 15.652934 36.01704 -3.142985E-3
+ 38.3 15.775273 36.028766 -3.2398824E-3
+ 38.3 15.895089 36.034702 -3.3376282E-3
+ 38.3 16.048725 36.048595 -3.4315874E-3
+ 38.3 16.307316 36.074546 -3.529275E-3
+ 38.3 16.705725 36.100193 -3.6464771E-3
+ 38.3 17.245127 36.120235 -3.7868111E-3
+ 38.3 17.975582 36.13966 -3.969034E-3
+ 38.3 18.799677 36.152572 -4.2144274E-3
+ 38.3 19.559795 36.164073 -4.501705E-3
+ 38.3 20.22818 36.17675 -4.7452766E-3
+ 38.3 20.82375 36.199504 -4.881891E-3
+ 38.3 21.309992 36.238147 -4.949942E-3
+ 38.3 21.622143 36.28118 -5.0075873E-3
+ 38.3 21.7315 36.319034 -5.070001E-3
+ 38.3 21.774746 36.35425 -5.1286155E-3
+ 38.3 21.79183 36.380802 -5.174551E-3
+ 38.3 21.741648 36.388877 -5.204363E-3
+ 38.3 21.64914 36.384143 -5.2334214E-3
+ 38.35 2.5103178 34.890586 0.0E+0
+ 38.35 2.5004773 34.892044 -2.074714E-4
+ 38.35 2.5117328 34.899074 -4.2728864E-4
+ 38.35 2.5306828 34.9094 -6.0726364E-4
+ 38.35 2.5584335 34.920963 -6.735322E-4
+ 38.35 2.6341795 34.935783 -6.006903E-4
+ 38.35 2.7440404 34.950736 -4.120241E-4
+ 38.35 2.933392 34.964824 -1.7738694E-4
+ 38.35 3.1383137 34.97403 1.0705232E-5
+ 38.35 3.4530313 34.991188 8.958447E-5
+ 38.35 3.7650296 35.008003 6.593719E-5
+ 38.35 4.2973456 35.07595 -5.037254E-5
+ 38.35 5.0854163 35.18739 -1.4073285E-4
+ 38.35 6.2696547 35.369033 -1.7397586E-4
+ 38.35 7.951802 35.660354 -1.3518104E-4
+ 38.35 9.246119 35.845737 1.5809764E-4
+ 38.35 10.09055 35.890804 6.652166E-4
+ 38.35 10.58248 35.82647 1.0004279E-3
+ 38.35 10.768184 35.708534 1.1201868E-3
+ 38.35 11.028817 35.588394 1.0235969E-3
+ 38.35 11.394371 35.544372 6.705613E-4
+ 38.35 11.77851 35.56672 1.2965429E-4
+ 38.35 12.189023 35.61588 -4.2773736E-4
+ 38.35 12.495032 35.652103 -8.3545304E-4
+ 38.35 12.758465 35.680332 -1.1341677E-3
+ 38.35 12.996641 35.704936 -1.3718426E-3
+ 38.35 13.19593 35.73165 -1.5638175E-3
+ 38.35 13.422698 35.759586 -1.7052293E-3
+ 38.35 13.643477 35.787796 -1.8192541E-3
+ 38.35 13.833551 35.808746 -1.9296092E-3
+ 38.35 13.995869 35.83006 -2.03197E-3
+ 38.35 14.121391 35.84721 -2.1239265E-3
+ 38.35 14.247259 35.865814 -2.212818E-3
+ 38.35 14.355044 35.878906 -2.302041E-3
+ 38.35 14.447221 35.892196 -2.3898407E-3
+ 38.35 14.535777 35.903556 -2.4731322E-3
+ 38.35 14.605174 35.91633 -2.5510247E-3
+ 38.35 14.698326 35.92722 -2.6254495E-3
+ 38.35 14.783156 35.934932 -2.702178E-3
+ 38.35 14.85741 35.940757 -2.7840344E-3
+ 38.35 14.924126 35.945137 -2.868921E-3
+ 38.35 14.993678 35.952022 -2.955017E-3
+ 38.35 15.100159 35.961277 -3.0446643E-3
+ 38.35 15.178319 35.96651 -3.1396502E-3
+ 38.35 15.28366 35.980743 -3.237915E-3
+ 38.35 15.386604 35.99338 -3.339853E-3
+ 38.35 15.501706 36.00365 -3.44558E-3
+ 38.35 15.641751 36.016613 -3.5551304E-3
+ 38.35 15.763807 36.028205 -3.6667024E-3
+ 38.35 15.88421 36.03438 -3.7792823E-3
+ 38.35 16.039122 36.048336 -3.887589E-3
+ 38.35 16.295757 36.07419 -4.0001804E-3
+ 38.35 16.691757 36.099666 -4.13522E-3
+ 38.35 17.228767 36.119613 -4.296951E-3
+ 38.35 17.953453 36.138767 -4.5067965E-3
+ 38.35 18.77149 36.151462 -4.7890804E-3
+ 38.35 19.53098 36.16299 -5.1195723E-3
+ 38.35 20.208479 36.17557 -5.4003363E-3
+ 38.35 20.812649 36.197986 -5.5589694E-3
+ 38.35 21.30033 36.236293 -5.639123E-3
+ 38.35 21.610943 36.278896 -5.7066273E-3
+ 38.35 21.718233 36.316074 -5.7788393E-3
+ 38.35 21.76097 36.350765 -5.846445E-3
+ 38.35 21.7782 36.37694 -5.8994833E-3
+ 38.35 21.72916 36.38491 -5.934043E-3
+ 38.35 21.63691 36.380195 -5.9678717E-3
+ 38.4 2.5111784 34.890785 0.0E+0
+ 38.4 2.50116 34.892234 -2.3428178E-4
+ 38.4 2.5122435 34.899246 -4.821909E-4
+ 38.4 2.5311377 34.909526 -6.8502774E-4
+ 38.4 2.5590498 34.921031 -7.59191E-4
+ 38.4 2.6349444 34.935806 -6.7635136E-4
+ 38.4 2.7448787 34.95071 -4.6301083E-4
+ 38.4 2.9340145 34.96477 -1.9802766E-4
+ 38.4 3.1392374 34.974063 1.4517903E-5
+ 38.4 3.4544181 34.99136 1.0520996E-4
+ 38.4 3.7671496 35.008327 8.261303E-5
+ 38.4 4.2996182 35.076385 -4.0404003E-5
+ 38.4 5.084982 35.187332 -1.321559E-4
+ 38.4 6.2703776 35.369194 -1.6037592E-4
+ 38.4 7.9567246 35.661212 -1.0744425E-4
+ 38.4 9.248706 35.845867 2.3070617E-4
+ 38.4 10.088579 35.889781 8.055149E-4
+ 38.4 10.580055 35.82575 1.183872E-3
+ 38.4 10.767276 35.708183 1.3212401E-3
+ 38.4 11.025992 35.588127 1.215998E-3
+ 38.4 11.392391 35.5446 8.20298E-4
+ 38.4 11.775585 35.567237 2.1389328E-4
+ 38.4 12.18558 35.61625 -4.1012995E-4
+ 38.4 12.491251 35.652324 -8.661547E-4
+ 38.4 12.755677 35.680732 -1.1999239E-3
+ 38.4 12.992994 35.705184 -1.4655407E-3
+ 38.4 13.192465 35.73185 -1.6801582E-3
+ 38.4 13.421092 35.760105 -1.8385114E-3
+ 38.4 13.641351 35.788242 -1.9665514E-3
+ 38.4 13.830939 35.80923 -2.09065E-3
+ 38.4 13.993641 35.830612 -2.2059248E-3
+ 38.4 14.118931 35.847766 -2.30956E-3
+ 38.4 14.244114 35.86629 -2.4096963E-3
+ 38.4 14.350914 35.87927 -2.510149E-3
+ 38.4 14.442628 35.892486 -2.6089388E-3
+ 38.4 14.530924 35.903797 -2.7026452E-3
+ 38.4 14.599942 35.91646 -2.7902761E-3
+ 38.4 14.692612 35.927276 -2.8740162E-3
+ 38.4 14.776572 35.934955 -2.960347E-3
+ 38.4 14.849964 35.940742 -3.0524171E-3
+ 38.4 14.916244 35.94511 -3.147881E-3
+ 38.4 14.985247 35.95193 -3.24469E-3
+ 38.4 15.090745 35.961112 -3.3454957E-3
+ 38.4 15.168096 35.96627 -3.4523175E-3
+ 38.4 15.272713 35.9804 -3.5628308E-3
+ 38.4 15.375149 35.993022 -3.6774876E-3
+ 38.4 15.489876 36.003295 -3.796429E-3
+ 38.4 15.62896 36.01611 -3.91972E-3
+ 38.4 15.750698 36.027553 -4.045335E-3
+ 38.4 15.871763 36.034004 -4.172126E-3
+ 38.4 16.028116 36.048027 -4.2942184E-3
+ 38.4 16.282532 36.073764 -4.4211247E-3
+ 38.4 16.675766 36.099044 -4.573273E-3
+ 38.4 17.210045 36.118877 -4.755547E-3
+ 38.4 17.928175 36.13773 -4.991834E-3
+ 38.4 18.73935 36.150177 -5.309283E-3
+ 38.4 19.49808 36.161735 -5.680978E-3
+ 38.4 20.185902 36.174205 -5.9974682E-3
+ 38.4 20.79979 36.196247 -6.1777993E-3
+ 38.4 21.289127 36.23416 -6.270386E-3
+ 38.4 21.598072 36.276268 -6.3478606E-3
+ 38.4 21.703053 36.312683 -6.429614E-3
+ 38.4 21.745213 36.346775 -6.505878E-3
+ 38.4 21.762602 36.372528 -6.565785E-3
+ 38.4 21.714855 36.380367 -6.6050007E-3
+ 38.4 21.62291 36.375682 -6.643573E-3
+ 38.45 2.5121302 34.891006 0.0E+0
+ 38.45 2.501915 34.89245 -2.600446E-4
+ 38.45 2.5128092 34.899433 -5.348236E-4
+ 38.45 2.5316436 34.909667 -7.594629E-4
+ 38.45 2.559737 34.92111 -8.4093253E-4
+ 38.45 2.6357948 34.93583 -7.482419E-4
+ 38.45 2.7458088 34.95068 -5.110732E-4
+ 38.45 2.9347007 34.964717 -2.1692965E-4
+ 38.45 3.1402564 34.974094 1.9161484E-5
+ 38.45 3.4559462 34.99155 1.2185199E-4
+ 38.45 3.7694766 35.00868 1.0191995E-4
+ 38.45 4.3020706 35.076854 -2.4166782E-5
+ 38.45 5.0843982 35.187244 -1.1306578E-4
+ 38.45 6.271066 35.369346 -1.3266985E-4
+ 38.45 7.9621105 35.662143 -6.249304E-5
+ 38.45 9.25159 35.84601 3.21525E-4
+ 38.45 10.08633 35.888626 9.62153E-4
+ 38.45 10.577279 35.824932 1.3818E-3
+ 38.45 10.766171 35.707763 1.5368724E-3
+ 38.45 11.022797 35.58782 1.4248047E-3
+ 38.45 11.390163 35.54485 9.892577E-4
+ 38.45 11.772332 35.56781 3.216729E-4
+ 38.45 12.181748 35.616657 -3.6420018E-4
+ 38.45 12.48706 35.65257 -8.648826E-4
+ 38.45 12.752594 35.681175 -1.2309111E-3
+ 38.45 12.988959 35.705463 -1.5222656E-3
+ 38.45 13.188621 35.732067 -1.7577731E-3
+ 38.45 13.41928 35.760677 -1.9318757E-3
+ 38.45 13.63894 35.788726 -2.0731016E-3
+ 38.45 13.827973 35.80976 -2.2102056E-3
+ 38.45 13.991089 35.83121 -2.3377712E-3
+ 38.45 14.116117 35.84837 -2.4525541E-3
+ 38.45 14.240533 35.866806 -2.5634041E-3
+ 38.45 14.346241 35.87966 -2.674532E-3
+ 38.45 14.437438 35.892795 -2.783743E-3
+ 38.45 14.525443 35.904052 -2.8873207E-3
+ 38.45 14.594036 35.91658 -2.9841824E-3
+ 38.45 14.686161 35.927322 -3.0767554E-3
+ 38.45 14.769156 35.934963 -3.172191E-3
+ 38.45 14.841587 35.9407 -3.2739313E-3
+ 38.45 14.907385 35.94506 -3.3794033E-3
+ 38.45 14.975778 35.951812 -3.486343E-3
+ 38.45 15.080175 35.96091 -3.5977007E-3
+ 38.45 15.156627 35.96599 -3.7157207E-3
+ 38.45 15.260435 35.98 -3.8378243E-3
+ 38.45 15.362299 35.992603 -3.964521E-3
+ 38.45 15.476601 36.00288 -4.0959804E-3
+ 38.45 15.614608 36.01553 -4.232308E-3
+ 38.45 15.735994 36.02681 -4.3712677E-3
+ 38.45 15.857793 36.033565 -4.511579E-3
+ 38.45 16.015738 36.04766 -4.646837E-3
+ 38.45 16.26768 36.073272 -4.7874045E-3
+ 38.45 16.657799 36.09833 -4.9558556E-3
+ 38.45 17.189022 36.118034 -5.157725E-3
+ 38.45 17.899853 36.13655 -5.419143E-3
+ 38.45 18.70341 36.148723 -5.769843E-3
+ 38.45 19.461237 36.16031 -6.1805075E-3
+ 38.45 20.160517 36.17266 -6.531091E-3
+ 38.45 20.785154 36.194286 -6.7327576E-3
+ 38.45 21.276365 36.231761 -6.8381354E-3
+ 38.45 21.583557 36.27331 -6.9256993E-3
+ 38.45 21.68601 36.308872 -7.0167076E-3
+ 38.45 21.72753 36.342292 -7.1012633E-3
+ 38.45 21.745087 36.367572 -7.167779E-3
+ 38.45 21.698778 36.375274 -7.2115487E-3
+ 38.45 21.607182 36.37062 -7.254836E-3
+ 38.5 2.513165 34.89125 0.0E+0
+ 38.5 2.5027351 34.892677 -2.8466226E-4
+ 38.5 2.513425 34.899642 -5.849797E-4
+ 38.5 2.5321967 34.90982 -8.3026313E-4
+ 38.5 2.560491 34.921195 -9.1839593E-4
+ 38.5 2.6367247 34.935852 -8.1601523E-4
+ 38.5 2.7468235 34.950645 -5.5594625E-4
+ 38.5 2.9354436 34.96465 -2.339447E-4
+ 38.5 3.1413605 34.97413 2.469119E-5
+ 38.5 3.4576 34.991752 1.3956448E-4
+ 38.5 3.7719831 35.009052 1.2402426E-4
+ 38.5 4.3046603 35.077346 -1.2202448E-6
+ 38.5 5.083634 35.18712 -8.269489E-5
+ 38.5 6.271674 35.369476 -8.982164E-5
+ 38.5 7.9678902 35.66313 9.038413E-7
+ 38.5 9.254748 35.84615 4.3177555E-4
+ 38.5 10.083798 35.887344 1.1360992E-3
+ 38.5 10.574142 35.824012 1.5949465E-3
+ 38.5 10.764841 35.707267 1.76776E-3
+ 38.5 11.019236 35.587463 1.6507937E-3
+ 38.5 11.387691 35.545112 1.1784259E-3
+ 38.5 11.768774 35.568435 4.5432941E-4
+ 38.5 12.177549 35.617095 -2.8821604E-4
+ 38.5 12.482492 35.652835 -8.2960666E-4
+ 38.5 12.749239 35.68166 -1.2248749E-3
+ 38.5 12.984567 35.70577 -1.5395868E-3
+ 38.5 13.184429 35.732307 -1.7940922E-3
+ 38.5 13.417267 35.761295 -1.9826577E-3
+ 38.5 13.636245 35.789245 -2.136175E-3
+ 38.5 13.824651 35.81032 -2.285488E-3
+ 38.5 13.988204 35.831851 -2.4246703E-3
+ 38.5 14.112937 35.84901 -2.5500266E-3
+ 38.5 14.236508 35.867347 -2.6710163E-3
+ 38.5 14.341025 35.880065 -2.792219E-3
+ 38.5 14.431659 35.89311 -2.9112354E-3
+ 38.5 14.519339 35.90431 -3.0240963E-3
+ 38.5 14.587465 35.916694 -3.129639E-3
+ 38.5 14.678982 35.927345 -3.2305235E-3
+ 38.5 14.760922 35.934944 -3.3345248E-3
+ 38.5 14.832302 35.940635 -3.4453468E-3
+ 38.5 14.897574 35.94498 -3.56021E-3
+ 38.5 14.965302 35.951656 -3.6766487E-3
+ 38.5 15.068484 35.960662 -3.797901E-3
+ 38.5 15.143955 35.965652 -3.9264275E-3
+ 38.5 15.246873 35.979534 -4.059407E-3
+ 38.5 15.348102 35.992122 -4.1974056E-3
+ 38.5 15.461928 36.0024 -4.340627E-3
+ 38.5 15.598746 36.01487 -4.489226E-3
+ 38.5 15.71975 36.02597 -4.640771E-3
+ 38.5 15.842349 36.033065 -4.7938525E-3
+ 38.5 16.002024 36.04724 -4.941599E-3
+ 38.5 16.251257 36.0727 -5.095118E-3
+ 38.5 16.637913 36.09751 -5.2789933E-3
+ 38.5 17.16577 36.117076 -5.499425E-3
+ 38.5 17.868603 36.135215 -5.7845455E-3
+ 38.5 18.663847 36.147102 -6.1664097E-3
+ 38.5 19.420616 36.158706 -6.6136065E-3
+ 38.5 20.132397 36.170932 -6.9964956E-3
+ 38.5 20.76872 36.192104 -7.2190905E-3
+ 38.5 21.262024 36.2291 -7.3376363E-3
+ 38.5 21.567423 36.270023 -7.435409E-3
+ 38.5 21.667168 36.304653 -7.53536E-3
+ 38.5 21.707985 36.337337 -7.627808E-3
+ 38.5 21.725714 36.362094 -7.70065E-3
+ 38.5 21.680977 36.369644 -7.7488645E-3
+ 38.5 21.589779 36.365024 -7.7968356E-3
+ 38.55 2.5142734 34.891513 0.0E+0
+ 38.55 2.5036137 34.892932 -3.080451E-4
+ 38.55 2.5140862 34.899868 -6.324707E-4
+ 38.55 2.5327932 34.90999 -8.9714903E-4
+ 38.55 2.561308 34.921287 -9.912521E-4
+ 38.55 2.637728 34.93588 -8.793562E-4
+ 38.55 2.747915 34.950603 -5.973913E-4
+ 38.55 2.9362361 34.964576 -2.4894383E-4
+ 38.55 3.142539 34.974163 3.1147152E-5
+ 38.55 3.4593625 34.991962 1.583778E-4
+ 38.55 3.77464 35.009445 1.4904146E-4
+ 38.55 4.307339 35.077846 2.8771425E-5
+ 38.55 5.0826535 35.186946 -4.0442108E-5
+ 38.55 6.272152 35.36958 -3.1016876E-5
+ 38.55 7.973987 35.66415 8.369693E-5
+ 38.55 9.25816 35.84629 5.623542E-4
+ 38.55 10.080975 35.88593 1.3279848E-3
+ 38.55 10.570632 35.82299 1.823706E-3
+ 38.55 10.763256 35.706687 2.014216E-3
+ 38.55 11.015311 35.587055 1.8943396E-3
+ 38.55 11.38498 35.54539 1.3883457E-3
+ 38.55 11.764932 35.569107 6.127048E-4
+ 38.55 12.173009 35.617565 -1.809957E-4
+ 38.55 12.477582 35.65312 -7.588912E-4
+ 38.55 12.745642 35.682182 -1.1801904E-3
+ 38.55 12.979855 35.7061 -1.5157314E-3
+ 38.55 13.17992 35.732563 -1.7872252E-3
+ 38.55 13.415055 35.76195 -1.9888884E-3
+ 38.55 13.633264 35.78979 -2.1537481E-3
+ 38.55 13.820972 35.810913 -2.3144234E-3
+ 38.55 13.984975 35.832523 -2.4645058E-3
+ 38.55 14.109383 35.849678 -2.5998242E-3
+ 38.55 14.232032 35.86791 -2.7303427E-3
+ 38.55 14.335268 35.880477 -2.86098E-3
+ 38.55 14.425296 35.893424 -2.9891456E-3
+ 38.55 14.512619 35.90456 -3.1106634E-3
+ 38.55 14.580236 35.916786 -3.224301E-3
+ 38.55 14.671085 35.927337 -3.3329417E-3
+ 38.55 14.751888 35.934894 -3.444934E-3
+ 38.55 14.822132 35.940532 -3.5642094E-3
+ 38.55 14.88684 35.944866 -3.6878061E-3
+ 38.55 14.953851 35.95146 -3.81307E-3
+ 38.55 15.055711 35.960365 -3.9435145E-3
+ 38.55 15.130126 35.965267 -4.0818075E-3
+ 38.55 15.232076 35.979007 -4.2248982E-3
+ 38.55 15.332609 35.99157 -4.3734107E-3
+ 38.55 15.445908 36.001846 -4.5275846E-3
+ 38.55 15.58143 36.014125 -4.6876356E-3
+ 38.55 15.702025 36.025035 -4.8509533E-3
+ 38.55 15.825483 36.032493 -5.0160014E-3
+ 38.55 15.987009 36.046756 -5.1755104E-3
+ 38.55 16.23331 36.072052 -5.3412192E-3
+ 38.55 16.616169 36.09659 -5.5395755E-3
+ 38.55 17.140366 36.115997 -5.7774586E-3
+ 38.55 17.834555 36.133728 -6.0847452E-3
+ 38.55 18.62085 36.14531 -6.495533E-3
+ 38.55 19.376396 36.156925 -6.976639E-3
+ 38.55 20.101622 36.16902 -7.389904E-3
+ 38.55 20.750471 36.189712 -7.6329745E-3
+ 38.55 21.246078 36.226177 -7.7650733E-3
+ 38.55 21.549694 36.266414 -7.873173E-3
+ 38.55 21.646585 36.300037 -7.981728E-3
+ 38.55 21.686646 36.33193 -8.081642E-3
+ 38.55 21.70455 36.356113 -8.160508E-3
+ 38.55 21.661503 36.363502 -8.213048E-3
+ 38.55 21.570753 36.358924 -8.26567E-3
+ 38.6 2.5154461 34.891796 0.0E+0
+ 38.6 2.5045423 34.8932 -3.3011153E-4
+ 38.6 2.5147867 34.90011 -6.771277E-4
+ 38.6 2.5334291 34.910167 -9.598698E-4
+ 38.6 2.5621821 34.921382 -1.0592062E-3
+ 38.6 2.6387972 34.9359 -9.379828E-4
+ 38.6 2.7490751 34.950557 -6.351975E-4
+ 38.6 2.93707 34.964496 -2.6181846E-4
+ 38.6 3.1437802 34.974193 3.855373E-5
+ 38.6 3.461216 34.992183 1.7829773E-4
+ 38.6 3.7774162 35.00985 1.7703393E-4
+ 38.6 4.310058 35.07835 6.6034284E-5
+ 38.6 5.0814204 35.186725 1.4119163E-5
+ 38.6 6.272445 35.369636 4.432646E-5
+ 38.6 7.9803175 35.665195 1.8654313E-4
+ 38.6 9.261795 35.846427 7.1381806E-4
+ 38.6 10.077856 35.88439 1.5380901E-3
+ 38.6 10.566737 35.82186 2.0681181E-3
+ 38.6 10.761387 35.706016 2.276176E-3
+ 38.6 11.011025 35.586593 2.1553994E-3
+ 38.6 11.382036 35.545677 1.6191003E-3
+ 38.6 11.760832 35.569816 7.971256E-4
+ 38.6 12.168156 35.61806 -4.1932136E-5
+ 38.6 12.472367 35.65342 -6.5192225E-4
+ 38.6 12.74183 35.682735 -1.0958917E-3
+ 38.6 12.974861 35.70645 -1.4496151E-3
+ 38.6 13.175124 35.732833 -1.7359942E-3
+ 38.6 13.412645 35.762638 -1.9493275E-3
+ 38.6 13.629996 35.790355 -2.124537E-3
+ 38.6 13.816932 35.81152 -2.2956877E-3
+ 38.6 13.98139 35.833217 -2.455918E-3
+ 38.6 14.105442 35.85036 -2.6005571E-3
+ 38.6 14.227097 35.868473 -2.7399621E-3
+ 38.6 14.328973 35.88089 -2.8793616E-3
+ 38.6 14.418355 35.893726 -3.0159868E-3
+ 38.6 14.505289 35.904796 -3.1455024E-3
+ 38.6 14.572359 35.91685 -3.2666195E-3
+ 38.6 14.662479 35.927295 -3.382433E-3
+ 38.6 14.742072 35.934806 -3.5018117E-3
+ 38.6 14.811102 35.940387 -3.6288797E-3
+ 38.6 14.875213 35.94471 -3.7605168E-3
+ 38.6 14.94146 35.951217 -3.8938957E-3
+ 38.6 15.041896 35.96001 -4.0327925E-3
+ 38.6 15.115188 35.96482 -4.1800714E-3
+ 38.6 15.216097 35.97841 -4.3324683E-3
+ 38.6 15.315875 35.99094 -4.4906623E-3
+ 38.6 15.428596 36.001216 -4.654933E-3
+ 38.6 15.562721 36.01329 -4.8255706E-3
+ 38.6 15.682885 36.024002 -4.9998005E-3
+ 38.6 15.807252 36.03185 -5.175965E-3
+ 38.6 15.970734 36.046207 -5.346469E-3
+ 38.6 16.213905 36.07132 -5.5235605E-3
+ 38.6 16.592636 36.09555 -5.7353964E-3
+ 38.6 17.112892 36.11479 -5.9895524E-3
+ 38.6 17.79785 36.132087 -6.3173742E-3
+ 38.6 18.574629 36.143344 -6.7547066E-3
+ 38.6 19.328768 36.15497 -7.266935E-3
+ 38.6 20.068281 36.166923 -7.7085155E-3
+ 38.6 20.730385 36.187107 -7.9715615E-3
+ 38.6 21.22851 36.223 -8.1175984E-3
+ 38.6 21.530407 36.262493 -8.236134E-3
+ 38.6 21.624338 36.295036 -8.352933E-3
+ 38.6 21.663586 36.326076 -8.45986E-3
+ 38.6 21.681664 36.34965 -8.544432E-3
+ 38.6 21.640413 36.356864 -8.601172E-3
+ 38.6 21.550169 36.35233 -8.65841E-3
+ 38.65 2.5166726 34.892093 0.0E+0
+ 38.65 2.5055134 34.893482 -3.507888E-4
+ 38.65 2.5155212 34.900363 -7.188024E-4
+ 38.65 2.5341 34.910354 -1.0182044E-3
+ 38.65 2.5631096 34.921485 -1.1219983E-3
+ 38.65 2.6399257 34.93593 -9.916488E-4
+ 38.65 2.7502946 34.95051 -6.6918344E-4
+ 38.65 2.9379365 34.96441 -2.7248114E-4
+ 38.65 3.145072 34.974224 4.6919056E-5
+ 38.65 3.4631404 34.99241 1.9930486E-4
+ 38.65 3.7802784 35.01026 2.0800938E-4
+ 38.65 4.3127636 35.078842 1.1068129E-4
+ 38.65 5.079896 35.18644 8.123541E-5
+ 38.65 6.272497 35.369636 1.3655062E-4
+ 38.65 7.986794 35.666233 3.097972E-4
+ 38.65 9.265626 35.846553 8.863756E-4
+ 38.65 10.074432 35.882732 1.766336E-3
+ 38.65 10.562446 35.82063 2.3278607E-3
+ 38.65 10.7592 35.705242 2.5531884E-3
+ 38.65 11.00638 35.586074 2.433502E-3
+ 38.65 11.378863 35.545974 1.8703017E-3
+ 38.65 11.756497 35.57056 1.0073899E-3
+ 38.65 12.163017 35.618572 1.289912E-4
+ 38.65 12.466884 35.653732 -5.0852494E-4
+ 38.65 12.737833 35.68332 -9.7169115E-4
+ 38.65 12.969621 35.70682 -1.3408624E-3
+ 38.65 13.170077 35.733116 -1.6399547E-3
+ 38.65 13.41004 35.76335 -1.8634847E-3
+ 38.65 13.626439 35.79093 -2.0480195E-3
+ 38.65 13.812528 35.81213 -2.2287284E-3
+ 38.65 13.977437 35.83392 -2.398327E-3
+ 38.65 14.101101 35.85105 -2.551622E-3
+ 38.65 14.221694 35.869033 -2.6992482E-3
+ 38.65 14.322141 35.881282 -2.8467113E-3
+ 38.65 14.410841 35.89401 -2.9910793E-3
+ 38.65 14.497356 35.905002 -3.127909E-3
+ 38.65 14.563842 35.916873 -3.2558671E-3
+ 38.65 14.653175 35.927204 -3.3782473E-3
+ 38.65 14.731492 35.93467 -3.5043847E-3
+ 38.65 14.79924 35.94019 -3.6385578E-3
+ 38.65 14.862724 35.9445 -3.7775142E-3
+ 38.65 14.928167 35.95092 -3.9182696E-3
+ 38.65 15.027084 35.959594 -4.064848E-3
+ 38.65 15.099193 35.964305 -4.2203E-3
+ 38.65 15.198993 35.97773 -4.381162E-3
+ 38.65 15.297959 35.990234 -4.548169E-3
+ 38.65 15.410052 36.000507 -4.721645E-3
+ 38.65 15.542683 36.012363 -4.901963E-3
+ 38.65 15.662396 36.02287 -5.0862063E-3
+ 38.65 15.787717 36.031127 -5.2725984E-3
+ 38.65 15.953243 36.045585 -5.4532927E-3
+ 38.65 16.193102 36.07049 -5.6409207E-3
+ 38.65 16.567385 36.09439 -5.865187E-3
+ 38.65 17.08344 36.113456 -6.1343773E-3
+ 38.65 17.758633 36.130283 -6.4810207E-3
+ 38.65 18.525398 36.14121 -6.942402E-3
+ 38.65 19.277939 36.15283 -7.482822E-3
+ 38.65 20.032473 36.16464 -7.950542E-3
+ 38.65 20.708445 36.1843 -8.233015E-3
+ 38.65 21.209293 36.219577 -8.393364E-3
+ 38.65 21.509594 36.258266 -8.522435E-3
+ 38.65 21.600494 36.28967 -8.6470944E-3
+ 38.65 21.638885 36.3198 -8.760561E-3
+ 38.65 21.65713 36.34273 -8.850505E-3
+ 38.65 21.617771 36.34976 -8.911312E-3
+ 38.65 21.528086 36.345275 -8.973127E-3
+ 38.7 2.5179421 34.892406 0.0E+0
+ 38.7 2.5065183 34.89378 -3.7001294E-4
+ 38.7 2.5162835 34.900634 -7.573676E-4
+ 38.7 2.5348014 34.910552 -1.0719626E-3
+ 38.7 2.5640842 34.921592 -1.1794062E-3
+ 38.7 2.6411054 34.93595 -1.0401437E-3
+ 38.7 2.7515647 34.95045 -6.99198E-4
+ 38.7 2.9388272 34.96431 -2.8086628E-4
+ 38.7 3.1464011 34.97425 5.6234814E-5
+ 38.7 3.4651165 34.992633 2.2135433E-4
+ 38.7 3.7831921 35.010673 2.4192016E-4
+ 38.7 4.3154015 35.07931 1.6271064E-4
+ 38.7 5.0780405 35.18608 1.6096995E-4
+ 38.7 6.2722487 35.369567 2.4575402E-4
+ 38.7 7.9933214 35.66725 4.5350755E-4
+ 38.7 9.269614 35.846656 1.079883E-3
+ 38.7 10.070696 35.88095 2.0122807E-3
+ 38.7 10.557744 35.81929 2.602248E-3
+ 38.7 10.75666 35.704364 2.8444163E-3
+ 38.7 11.001378 35.58549 2.7277485E-3
+ 38.7 11.375465 35.54627 2.141088E-3
+ 38.7 11.751954 35.57133 1.2427628E-3
+ 38.7 12.15762 35.619102 3.3119408E-4
+ 38.7 12.461173 35.654056 -3.2917165E-4
+ 38.7 12.73368 35.683925 -8.079878E-4
+ 38.7 12.964177 35.707214 -1.1898167E-3
+ 38.7 13.164811 35.733406 -1.4994062E-3
+ 38.7 13.407241 35.76408 -1.7316311E-3
+ 38.7 13.622591 35.791507 -1.9244472E-3
+ 38.7 13.807755 35.81274 -2.1137767E-3
+ 38.7 13.973101 35.834617 -2.2919455E-3
+ 38.7 14.096347 35.851734 -2.4532147E-3
+ 38.7 14.215814 35.869575 -2.608379E-3
+ 38.7 14.314773 35.881656 -2.7631886E-3
+ 38.7 14.402762 35.89426 -2.9145637E-3
+ 38.7 14.488827 35.905174 -3.0580055E-3
+ 38.7 14.554695 35.91685 -3.1921498E-3
+ 38.7 14.643183 35.92706 -3.3204753E-3
+ 38.7 14.72017 35.93447 -3.4527264E-3
+ 38.7 14.786573 35.93993 -3.5932974E-3
+ 38.7 14.849406 35.944232 -3.738831E-3
+ 38.7 14.914011 35.950557 -3.8862035E-3
+ 38.7 15.011318 35.959106 -4.039669E-3
+ 38.7 15.082195 35.963722 -4.2024552E-3
+ 38.7 15.180824 35.976974 -4.3709166E-3
+ 38.7 15.278922 35.989444 -4.545839E-3
+ 38.7 15.390336 35.999706 -4.727597E-3
+ 38.7 15.521383 36.01134 -4.9166604E-3
+ 38.7 15.64063 36.02163 -5.1099876E-3
+ 38.7 15.766941 36.030323 -5.305687E-3
+ 38.7 15.934579 36.044883 -5.495736E-3
+ 38.7 16.170961 36.06957 -5.693023E-3
+ 38.7 16.54049 36.09311 -5.92863E-3
+ 38.7 17.052105 36.11198 -6.2115662E-3
+ 38.7 17.717064 36.12831 -6.5752496E-3
+ 38.7 18.473392 36.13891 -7.0580854E-3
+ 38.7 19.224127 36.150505 -7.623646E-3
+ 38.7 19.994299 36.16217 -8.115226E-3
+ 38.7 20.684631 36.181293 -8.416529E-3
+ 38.7 21.188416 36.215915 -8.591542E-3
+ 38.7 21.487293 36.253742 -8.731227E-3
+ 38.7 21.575134 36.283946 -8.863345E-3
+ 38.7 21.612629 36.31313 -8.982862E-3
+ 38.7 21.631025 36.335376 -9.077831E-3
+ 38.7 21.59364 36.342212 -9.1425664E-3
+ 38.7 21.504574 36.337783 -9.208921E-3
+ 38.75 2.5192441 34.892734 0.0E+0
+ 38.75 2.507548 34.89409 -3.877294E-4
+ 38.75 2.5170674 34.900913 -7.92718E-4
+ 38.75 2.5355284 34.910762 -1.1209863E-3
+ 38.75 2.565101 34.921703 -1.2312451E-3
+ 38.75 2.6423285 34.935974 -1.0832954E-3
+ 38.75 2.7528753 34.950386 -7.2512106E-4
+ 38.75 2.9397327 34.964202 -2.8693044E-4
+ 38.75 3.1477544 34.97427 6.647628E-5
+ 38.75 3.467123 34.99286 2.4437604E-4
+ 38.75 3.786122 35.011077 2.7866347E-4
+ 38.75 4.3179154 35.07975 2.220056E-4
+ 38.75 5.0758132 35.185642 2.5320242E-4
+ 38.75 6.271638 35.369415 3.7179052E-4
+ 38.75 7.999801 35.66823 6.174165E-4
+ 38.75 9.273723 35.84674 1.2938459E-3
+ 38.75 10.066637 35.87905 2.275123E-3
+ 38.75 10.552618 35.81784 2.8902348E-3
+ 38.75 10.753733 35.70336 3.1486395E-3
+ 38.75 10.996021 35.584846 3.0368154E-3
+ 38.75 11.371846 35.546554 2.4301281E-3
+ 38.75 11.747227 35.572124 1.5019803E-3
+ 38.75 12.151996 35.619636 5.6350225E-4
+ 38.75 12.455274 35.654384 -1.1497968E-4
+ 38.75 12.729401 35.684547 -6.058664E-4
+ 38.75 12.958566 35.707614 -9.975391E-4
+ 38.75 13.159361 35.733703 -1.3153914E-3
+ 38.75 13.404247 35.764816 -1.554799E-3
+ 38.75 13.618447 35.792072 -1.7548447E-3
+ 38.75 13.802609 35.81334 -1.9518475E-3
+ 38.75 13.968369 35.8353 -2.1377773E-3
+ 38.75 14.091165 35.8524 -2.3063297E-3
+ 38.75 14.209447 35.870086 -2.4683396E-3
+ 38.75 14.306871 35.881996 -2.629767E-3
+ 38.75 14.394123 35.89447 -2.7874016E-3
+ 38.75 14.479708 35.905303 -2.9367427E-3
+ 38.75 14.544927 35.91677 -3.0764082E-3
+ 38.75 14.632514 35.92685 -3.2100484E-3
+ 38.75 14.708123 35.93421 -3.347757E-3
+ 38.75 14.773129 35.939605 -3.4940065E-3
+ 38.75 14.835293 35.943897 -3.645362E-3
+ 38.75 14.89903 35.950126 -3.798577E-3
+ 38.75 14.994646 35.95854 -3.95812E-3
+ 38.75 15.064249 35.963062 -4.127385E-3
+ 38.75 15.161649 35.97613 -4.30256E-3
+ 38.75 15.258828 35.988567 -4.484482E-3
+ 38.75 15.369512 35.998813 -4.6735783E-3
+ 38.75 15.498891 36.01022 -4.8704282E-3
+ 38.75 15.617661 36.020286 -5.071886E-3
+ 38.75 15.74499 36.02943 -5.275948E-3
+ 38.75 15.91479 36.0441 -5.474495E-3
+ 38.75 16.147556 36.06854 -5.680539E-3
+ 38.75 16.512033 36.091697 -5.9263636E-3
+ 38.75 17.01898 36.110363 -6.221718E-3
+ 38.75 17.673306 36.12618 -6.600603E-3
+ 38.75 18.418856 36.136436 -7.1022217E-3
+ 38.75 19.167564 36.148 -7.6897735E-3
+ 38.75 19.953865 36.15952 -8.202849E-3
+ 38.75 20.658936 36.178092 -8.52233E-3
+ 38.75 21.165855 36.212024 -8.712328E-3
+ 38.75 21.463547 36.248928 -8.8626844E-3
+ 38.75 21.548338 36.27789 -9.001842E-3
+ 38.75 21.5849 36.30608 -9.126906E-3
+ 38.75 21.603436 36.327606 -9.226545E-3
+ 38.75 21.568089 36.334243 -9.295067E-3
+ 38.75 21.4797 36.329875 -9.365918E-3
+ 38.8 2.520567 34.89307 0.0E+0
+ 38.8 2.5085937 34.89441 -4.038929E-4
+ 38.8 2.5178663 34.901203 -8.2477036E-4
+ 38.8 2.5362763 34.910972 -1.1651492E-3
+ 38.8 2.5661535 34.921813 -1.2773693E-3
+ 38.8 2.6435863 34.935993 -1.1209699E-3
+ 38.8 2.7542166 34.950317 -7.468644E-4
+ 38.8 2.9406437 34.96409 -2.9065244E-4
+ 38.8 3.1491181 34.974285 7.760255E-5
+ 38.8 3.4691383 34.993072 2.6827512E-4
+ 38.8 3.789032 35.01147 3.180821E-4
+ 38.8 4.3202486 35.08014 2.8833613E-4
+ 38.8 5.0731725 35.185115 3.576306E-4
+ 38.8 6.270603 35.369163 5.142718E-4
+ 38.8 8.006131 35.669136 8.0096465E-4
+ 38.8 9.277906 35.84679 1.5274256E-3
+ 38.8 10.062247 35.877037 2.5537111E-3
+ 38.8 10.547054 35.81628 3.190426E-3
+ 38.8 10.750383 35.702236 3.4642678E-3
+ 38.8 10.990312 35.58413 3.358968E-3
+ 38.8 11.368011 35.546836 2.7356348E-3
+ 38.8 11.742343 35.57293 1.7832621E-3
+ 38.8 12.146172 35.620174 8.2415953E-4
+ 38.8 12.449224 35.65472 1.3230044E-4
+ 38.8 12.725023 35.68519 -3.6708544E-4
+ 38.8 12.952828 35.70803 -7.657964E-4
+ 38.8 13.153759 35.734 -1.089685E-3
+ 38.8 13.401057 35.76555 -1.3347698E-3
+ 38.8 13.614004 35.79262 -1.5409978E-3
+ 38.8 13.797084 35.81391 -1.744727E-3
+ 38.8 13.963225 35.83596 -1.9376072E-3
+ 38.8 14.08554 35.85303 -2.1127497E-3
+ 38.8 14.202583 35.87056 -2.280909E-3
+ 38.8 14.298436 35.882286 -2.4482216E-3
+ 38.8 14.38493 35.894626 -2.6113642E-3
+ 38.8 14.470006 35.905372 -2.765888E-3
+ 38.8 14.534547 35.916622 -2.910407E-3
+ 38.8 14.621179 35.926563 -3.0487277E-3
+ 38.8 14.695374 35.933872 -3.1912343E-3
+ 38.8 14.758938 35.9392 -3.3424368E-3
+ 38.8 14.820419 35.943485 -3.4988524E-3
+ 38.8 14.883267 35.949615 -3.6571295E-3
+ 38.8 14.977116 35.95789 -3.8219324E-3
+ 38.8 15.045412 35.96232 -3.99681E-3
+ 38.8 15.141533 35.9752 -4.177803E-3
+ 38.8 15.237742 35.987594 -4.365796E-3
+ 38.8 15.347645 35.99782 -4.561274E-3
+ 38.8 15.47528 36.008987 -4.7649373E-3
+ 38.8 15.593565 36.018836 -4.973558E-3
+ 38.8 15.721932 36.028446 -5.1850224E-3
+ 38.8 15.893924 36.04323 -5.3911926E-3
+ 38.8 16.122953 36.0674 -5.6050755E-3
+ 38.8 16.482096 36.090145 -5.8599715E-3
+ 38.8 16.984173 36.108596 -6.1663854E-3
+ 38.8 17.62753 36.12387 -6.558593E-3
+ 38.8 18.362034 36.133796 -7.0762657E-3
+ 38.8 19.108492 36.1453 -7.6825846E-3
+ 38.8 19.911287 36.15668 -8.214716E-3
+ 38.8 20.631342 36.1747 -8.551672E-3
+ 38.8 21.141602 36.207904 -8.756935E-3
+ 38.8 21.438395 36.243835 -8.91799E-3
+ 38.8 21.520191 36.271507 -9.063754E-3
+ 38.8 21.55579 36.29867 -9.193854E-3
+ 38.8 21.574444 36.31945 -9.297802E-3
+ 38.8 21.541187 36.325881 -9.369962E-3
+ 38.8 21.453539 36.321582 -9.445265E-3
+ 38.85 2.5218992 34.893413 0.0E+0
+ 38.85 2.5096466 34.894737 -4.184676E-4
+ 38.85 2.518674 34.9015 -8.534634E-4
+ 38.85 2.5370402 34.911193 -1.204358E-3
+ 38.85 2.5672364 34.92193 -1.3176722E-3
+ 38.85 2.6448712 34.93601 -1.1530715E-3
+ 38.85 2.7555785 34.950237 -7.6437136E-4
+ 38.85 2.9415504 34.963966 -2.9203324E-4
+ 38.85 3.1504786 34.974292 8.9557084E-5
+ 38.85 3.4711408 34.993282 2.92933E-4
+ 38.85 3.791885 35.011844 3.5996641E-4
+ 38.85 4.322343 35.08047 3.6136177E-4
+ 38.85 5.0700764 35.184486 4.7377464E-4
+ 38.85 6.26908 35.3688 6.7257304E-4
+ 38.85 8.012205 35.669956 1.0032995E-3
+ 38.85 9.282116 35.846794 1.7794511E-3
+ 38.85 10.057514 35.874912 2.8465562E-3
+ 38.85 10.541037 35.814605 3.5010946E-3
+ 38.85 10.746574 35.700973 3.7893578E-3
+ 38.85 10.984251 35.58334 3.6920788E-3
+ 38.85 11.363961 35.547103 3.0553846E-3
+ 38.85 11.737325 35.573745 2.0843311E-3
+ 38.85 12.140176 35.62071 1.1108487E-3
+ 38.85 12.443064 35.655052 4.1030618E-4
+ 38.85 12.720575 35.685832 -9.405568E-5
+ 38.85 12.947 35.708454 -4.970399E-4
+ 38.85 13.148038 35.734302 -8.247712E-4
+ 38.85 13.39767 35.766273 -1.0740522E-3
+ 38.85 13.609256 35.79314 -1.2854318E-3
+ 38.85 13.791175 35.81445 -1.4949515E-3
+ 38.85 13.957654 35.836582 -1.6939774E-3
+ 38.85 14.079458 35.853614 -1.8750215E-3
+ 38.85 14.195211 35.87097 -2.0486388E-3
+ 38.85 14.289468 35.88252 -2.2211067E-3
+ 38.85 14.375187 35.894721 -2.3890088E-3
+ 38.85 14.459727 35.905376 -2.5480021E-3
+ 38.85 14.523564 35.916397 -2.6967106E-3
+ 38.85 14.609189 35.926193 -2.8390816E-3
+ 38.85 14.681941 35.933444 -2.985729E-3
+ 38.85 14.744029 35.938713 -3.1411605E-3
+ 38.85 14.804818 35.94299 -3.3018752E-3
+ 38.85 14.866761 35.94902 -3.4644345E-3
+ 38.85 14.958777 35.95715 -3.633679E-3
+ 38.85 15.025742 35.961483 -3.8133016E-3
+ 38.85 15.12054 35.97417 -3.9992155E-3
+ 38.85 15.215731 35.98652 -4.192348E-3
+ 38.85 15.324804 35.996723 -4.393245E-3
+ 38.85 15.450624 36.00765 -4.602743E-3
+ 38.85 15.56842 36.017276 -4.8175505E-3
+ 38.85 15.697835 36.027366 -5.0354506E-3
+ 38.85 15.872029 36.042263 -5.24836E-3
+ 38.85 16.097225 36.066146 -5.4691527E-3
+ 38.85 16.450764 36.088447 -5.7319593E-3
+ 38.85 16.947788 36.106678 -6.048054E-3
+ 38.85 17.579912 36.121387 -6.451677E-3
+ 38.85 18.303185 36.13099 -6.9826385E-3
+ 38.85 19.04716 36.142414 -7.604449E-3
+ 38.85 19.866688 36.15366 -8.153141E-3
+ 38.85 20.601847 36.171123 -8.506816E-3
+ 38.85 21.115643 36.20357 -8.727569E-3
+ 38.85 21.411882 36.238471 -8.899319E-3
+ 38.85 21.490778 36.264823 -9.051244E-3
+ 38.85 21.525393 36.290927 -9.185864E-3
+ 38.85 21.544138 36.31094 -9.293753E-3
+ 38.85 21.513008 36.317157 -9.369401E-3
+ 38.85 21.426165 36.312927 -9.449108E-3
+ 38.9 2.5232295 34.893764 0.0E+0
+ 38.9 2.5106973 34.89507 -4.314271E-4
+ 38.9 2.5194833 34.901805 -8.787579E-4
+ 38.9 2.537815 34.911415 -1.2385512E-3
+ 38.9 2.5683438 34.922042 -1.3520862E-3
+ 38.9 2.646174 34.936023 -1.1795436E-3
+ 38.9 2.7569506 34.950153 -7.7761703E-4
+ 38.9 2.9424433 34.963832 -2.9109555E-4
+ 38.9 3.1518211 34.97429 1.0226836E-4
+ 38.9 3.4731087 34.993476 3.1820847E-4
+ 38.9 3.7946438 35.01219 4.040566E-4
+ 38.9 4.324142 35.080734 4.406362E-4
+ 38.9 5.0664854 35.18375 6.009837E-4
+ 38.9 6.2670054 35.368316 8.4584153E-4
+ 38.9 8.017916 35.670665 1.2232878E-3
+ 38.9 9.2863 35.846752 2.0484358E-3
+ 38.9 10.05243 35.872676 3.151852E-3
+ 38.9 10.534553 35.81282 3.8202013E-3
+ 38.9 10.74227 35.69957 4.1216374E-3
+ 38.9 10.977841 35.582473 4.033654E-3
+ 38.9 11.359699 35.54735 3.386744E-3
+ 38.9 11.732196 35.574554 2.4024432E-3
+ 38.9 12.134038 35.62123 1.4207208E-3
+ 38.9 12.436829 35.65538 7.160935E-4
+ 38.9 12.716082 35.68648 2.1019127E-4
+ 38.9 12.941118 35.70888 -1.9437287E-4
+ 38.9 13.142229 35.734596 -5.238111E-4
+ 38.9 13.394082 35.766975 -7.758491E-4
+ 38.9 13.604198 35.793624 -9.91378E-4
+ 38.9 13.784875 35.81494 -1.2057733E-3
+ 38.9 13.95164 35.83715 -1.4101546E-3
+ 38.9 14.0729 35.85414 -1.5964233E-3
+ 38.9 14.187319 35.87132 -1.7748182E-3
+ 38.9 14.279968 35.882682 -1.9517224E-3
+ 38.9 14.3649 35.894737 -2.123646E-3
+ 38.9 14.448876 35.9053 -2.2864062E-3
+ 38.9 14.511986 35.91608 -2.4386502E-3
+ 38.9 14.596554 35.925727 -2.584451E-3
+ 38.9 14.667846 35.932926 -2.7345896E-3
+ 38.9 14.728431 35.938125 -2.8935351E-3
+ 38.9 14.788526 35.9424 -3.057796E-3
+ 38.9 14.849554 35.948333 -3.223866E-3
+ 38.9 14.939677 35.95631 -3.3967408E-3
+ 38.9 15.005298 35.960556 -3.5802472E-3
+ 38.9 15.098732 35.97304 -3.77019E-3
+ 38.9 15.192863 35.985336 -3.9675342E-3
+ 38.9 15.301056 35.99551 -4.172893E-3
+ 38.9 15.424998 36.0062 -4.3872473E-3
+ 38.9 15.542304 36.015605 -4.607268E-3
+ 38.9 15.672771 36.02618 -4.830636E-3
+ 38.9 15.849157 36.041194 -5.0493986E-3
+ 38.9 16.070444 36.06477 -5.2761677E-3
+ 38.9 16.418127 36.0866 -5.5457185E-3
+ 38.9 16.909937 36.104595 -5.870105E-3
+ 38.9 17.530636 36.118724 -6.2832226E-3
+ 38.9 18.242575 36.128013 -6.8246903E-3
+ 38.9 18.983822 36.13934 -7.458689E-3
+ 38.9 19.82019 36.150447 -8.021404E-3
+ 38.9 20.570448 36.167373 -8.390986E-3
+ 38.9 21.08797 36.199028 -8.627395E-3
+ 38.9 21.384062 36.23285 -8.809797E-3
+ 38.9 21.46019 36.257854 -8.967426E-3
+ 38.9 21.4938 36.282875 -9.106047E-3
+ 38.9 21.512608 36.30209 -9.217513E-3
+ 38.9 21.483627 36.308097 -9.2964954E-3
+ 38.9 21.397655 36.303947 -9.380556E-3
+ 38.95 2.5245468 34.89412 0.0E+0
+ 38.95 2.511737 34.895404 -4.427543E-4
+ 38.95 2.5202884 34.902114 -9.0063625E-4
+ 38.95 2.538596 34.911643 -1.2677001E-3
+ 38.95 2.5694692 34.922153 -1.3805822E-3
+ 38.95 2.6474864 34.93603 -1.2003675E-3
+ 38.95 2.7583227 34.95006 -7.8660796E-4
+ 38.95 2.9433124 34.96369 -2.8788324E-4
+ 38.95 3.153132 34.974277 1.1565079E-4
+ 38.95 3.4750196 34.993656 3.4393966E-4
+ 38.95 3.7972722 35.012504 4.5004585E-4
+ 38.95 4.325589 35.080913 5.256131E-4
+ 38.95 5.0623583 35.182895 7.3844415E-4
+ 38.95 6.2643156 35.367687 1.033008E-3
+ 38.95 8.0231494 35.67124 1.4595315E-3
+ 38.95 9.290398 35.84665 2.3325968E-3
+ 38.95 10.046981 35.87034 3.4674976E-3
+ 38.95 10.527586 35.810924 4.145421E-3
+ 38.95 10.737437 35.698013 4.458533E-3
+ 38.95 10.971082 35.581527 4.380865E-3
+ 38.95 11.355226 35.547576 3.7267045E-3
+ 38.95 11.726981 35.57536 2.7344212E-3
+ 38.95 12.127782 35.62174 1.7504326E-3
+ 38.95 12.430555 35.655704 1.0461758E-3
+ 38.95 12.711567 35.687126 5.4204306E-4
+ 38.95 12.935215 35.709304 1.3849026E-4
+ 38.95 13.13636 35.73488 -1.906011E-4
+ 38.95 13.390289 35.76765 -4.4401476E-4
+ 38.95 13.598823 35.794063 -6.627303E-4
+ 38.95 13.778177 35.815376 -8.811168E-4
+ 38.95 13.945164 35.837657 -1.0900861E-3
+ 38.95 14.065851 35.8546 -1.2809203E-3
+ 38.95 14.178897 35.871582 -1.46343E-3
+ 38.95 14.269936 35.882762 -1.6440684E-3
+ 38.95 14.354072 35.89467 -1.8192932E-3
+ 38.95 14.437459 35.905132 -1.9851352E-3
+ 38.95 14.499821 35.91567 -2.1402782E-3
+ 38.95 14.583284 35.92516 -2.288904E-3
+ 38.95 14.653107 35.9323 -2.4419E-3
+ 38.95 14.712174 35.937435 -2.6036584E-3
+ 38.95 14.771576 35.941715 -2.7707277E-3
+ 38.95 14.831686 35.947544 -2.939552E-3
+ 38.95 14.919866 35.95536 -3.1152605E-3
+ 38.95 14.984137 35.959526 -3.3018025E-3
+ 38.95 15.076176 35.9718 -3.4948955E-3
+ 38.95 15.169206 35.984046 -3.6955373E-3
+ 38.95 15.27647 35.994182 -3.9044101E-3
+ 38.95 15.398479 36.004627 -4.1226535E-3
+ 38.95 15.515298 36.01382 -4.3469225E-3
+ 38.95 15.64681 36.02489 -4.5747985E-3
+ 38.95 15.825358 36.04002 -4.7985306E-3
+ 38.95 16.042685 36.063262 -5.0303484E-3
+ 38.95 16.384274 36.084602 -5.3054783E-3
+ 38.95 16.870726 36.102352 -5.6367665E-3
+ 38.95 17.479881 36.115882 -6.0574575E-3
+ 38.95 18.180466 36.124874 -6.6066547E-3
+ 38.95 18.918747 36.136074 -7.249532E-3
+ 38.95 19.771923 36.147056 -7.823706E-3
+ 38.95 20.537146 36.163444 -8.208331E-3
+ 38.95 21.058588 36.194286 -8.46049E-3
+ 38.95 21.354979 36.22698 -8.653456E-3
+ 38.95 21.428513 36.250617 -8.816325E-3
+ 38.95 21.461107 36.274532 -8.958435E-3
+ 38.95 21.479946 36.29294 -9.073112E-3
+ 38.95 21.453121 36.298725 -9.155273E-3
+ 38.95 21.368088 36.294662 -9.243634E-3
+ 39.0 2.5258398 34.894477 0.0E+0
+ 39.0 2.512757 34.895744 -4.524413E-4
+ 39.0 2.5210824 34.902427 -9.191018E-4
+ 39.0 2.539378 34.911872 -1.291807E-3
+ 39.0 2.570607 34.922264 -1.4031695E-3
+ 39.0 2.6488001 34.93604 -1.2155627E-3
+ 39.0 2.7596843 34.949962 -7.9138105E-4
+ 39.0 2.9441483 34.96354 -2.8246053E-4
+ 39.0 3.154397 34.974254 1.2960585E-4
+ 39.0 3.4768517 34.99382 3.699456E-4
+ 39.0 3.7997343 35.01278 4.9758434E-4
+ 39.0 4.326629 35.081 6.1565305E-4
+ 39.0 5.057657 35.18191 8.851904E-4
+ 39.0 6.260949 35.366912 1.2328002E-3
+ 39.0 8.027798 35.671657 1.7103868E-3
+ 39.0 9.294348 35.846477 2.6298817E-3
+ 39.0 10.041157 35.867897 3.7911282E-3
+ 39.0 10.520123 35.808914 4.4741746E-3
+ 39.0 10.732039 35.696304 4.7972067E-3
+ 39.0 10.963974 35.580497 4.730584E-3
+ 39.0 11.350541 35.547767 4.0719206E-3
+ 39.0 11.721698 35.576152 3.076699E-3
+ 39.0 12.121434 35.622226 2.0961915E-3
+ 39.0 12.424276 35.656013 1.3965705E-3
+ 39.0 12.707052 35.68776 8.9735526E-4
+ 39.0 12.929324 35.70973 4.972744E-4
+ 39.0 13.130458 35.73515 1.7047879E-4
+ 39.0 13.386284 35.768287 -8.300299E-5
+ 39.0 13.593123 35.79444 -3.0399303E-4
+ 39.0 13.771073 35.815746 -5.2552623E-4
+ 39.0 13.93821 35.838092 -7.3834595E-4
+ 39.0 14.058294 35.85497 -9.33112E-4
+ 39.0 14.169932 35.871753 -1.1190972E-3
+ 39.0 14.25937 35.88275 -1.3027916E-3
+ 39.0 14.342707 35.894504 -1.4806221E-3
+ 39.0 14.425479 35.904865 -1.6488846E-3
+ 39.0 14.487076 35.915145 -1.8063127E-3
+ 39.0 14.569389 35.924476 -1.95718E-3
+ 39.0 14.637745 35.93156 -2.1124205E-3
+ 39.0 14.695287 35.936634 -2.2763125E-3
+ 39.0 14.754002 35.940914 -2.4454742E-3
+ 39.0 14.813199 35.946647 -2.6163181E-3
+ 39.0 14.899392 35.954303 -2.7940846E-3
+ 39.0 14.962319 35.958393 -2.9828355E-3
+ 39.0 15.052935 35.970455 -3.1782211E-3
+ 39.0 15.144828 35.98264 -3.3812657E-3
+ 39.0 15.251114 35.992733 -3.5927253E-3
+ 39.0 15.371142 36.002933 -3.8139075E-3
+ 39.0 15.487479 36.011917 -4.0414752E-3
+ 39.0 15.620023 36.023487 -4.2729135E-3
+ 39.0 15.800682 36.038734 -4.500744E-3
+ 39.0 16.014017 36.06162 -4.7366917E-3
+ 39.0 16.349295 36.08244 -5.0162477E-3
+ 39.0 16.830267 36.099937 -5.3530572E-3
+ 39.0 17.42784 36.112857 -5.779412E-3
+ 39.0 18.117125 36.12157 -6.333584E-3
+ 39.0 18.852198 36.13261 -6.9820485E-3
+ 39.0 19.72202 36.14348 -7.5651062E-3
+ 39.0 20.501955 36.15935 -7.963856E-3
+ 39.0 21.027498 36.18935 -8.23178E-3
+ 39.0 21.324692 36.220867 -8.435178E-3
+ 39.0 21.39584 36.24313 -8.602816E-3
+ 39.0 21.427414 36.26593 -8.747906E-3
+ 39.0 21.446245 36.28351 -8.865436E-3
+ 39.0 21.421564 36.289077 -8.950618E-3
+ 39.0 21.33754 36.285106 -9.043222E-3
+ 39.05 2.5270974 34.894832 0.0E+0
+ 39.05 2.5137486 34.896087 -4.6048907E-4
+ 39.05 2.5218586 34.90274 -9.341784E-4
+ 39.05 2.5401561 34.9121 -1.3109049E-3
+ 39.05 2.5717506 34.922374 -1.4198942E-3
+ 39.05 2.6501061 34.936035 -1.225185E-3
+ 39.05 2.7610256 34.949851 -7.9200306E-4
+ 39.05 2.9449412 34.963375 -2.7491094E-4
+ 39.05 3.1556026 34.97422 1.4402324E-4
+ 39.05 3.4785838 34.993957 3.9602865E-4
+ 39.05 3.8019948 35.013011 5.462835E-4
+ 39.05 4.327209 35.080982 7.1003194E-4
+ 39.05 5.052345 35.180797 1.0401167E-3
+ 39.05 6.256845 35.365966 1.443759E-3
+ 39.05 8.031747 35.67189 1.9739861E-3
+ 39.05 9.298082 35.84622 2.937995E-3
+ 39.05 10.034946 35.865356 4.1201445E-3
+ 39.05 10.51215 35.80679 4.8036635E-3
+ 39.05 10.726045 35.694427 5.13459E-3
+ 39.05 10.956518 35.579383 5.0794277E-3
+ 39.05 11.345644 35.547927 4.418757E-3
+ 39.05 11.716366 35.57692 3.425368E-3
+ 39.05 12.115017 35.622684 2.4538068E-3
+ 39.05 12.418021 35.656307 1.7628538E-3
+ 39.05 12.702556 35.688377 1.2715078E-3
+ 39.05 12.923472 35.710144 8.7720144E-4
+ 39.05 13.124546 35.735404 5.54524E-4
+ 39.05 13.38206 35.76888 3.0219316E-4
+ 39.05 13.587089 35.794757 7.9780205E-5
+ 39.05 13.763554 35.816032 -1.4410392E-4
+ 39.05 13.930761 35.838436 -3.6007366E-4
+ 39.05 14.050211 35.855243 -5.5816775E-4
+ 39.05 14.160412 35.87182 -7.4701983E-4
+ 39.05 14.24827 35.882637 -9.331223E-4
+ 39.05 14.330807 35.89423 -1.1128938E-3
+ 39.05 14.412941 35.904487 -1.2829456E-3
+ 39.05 14.473756 35.91451 -1.4420736E-3
+ 39.05 14.554878 35.92367 -1.594626E-3
+ 39.05 14.621778 35.930702 -1.7515243E-3
+ 39.05 14.677797 35.935714 -1.9168982E-3
+ 39.05 14.735836 35.940002 -2.087464E-3
+ 39.05 14.794131 35.945636 -2.2596218E-3
+ 39.05 14.878303 35.95312 -2.438699E-3
+ 39.05 14.939898 35.957145 -2.628859E-3
+ 39.05 15.029072 35.968994 -2.825708E-3
+ 39.05 15.119795 35.981113 -3.030288E-3
+ 39.05 15.225055 35.991153 -3.2434333E-3
+ 39.05 15.343063 36.001117 -3.4666294E-3
+ 39.05 15.458926 36.0099 -3.6965706E-3
+ 39.05 15.59248 36.02197 -3.930648E-3
+ 39.05 15.775182 36.037326 -4.16172E-3
+ 39.05 15.984518 36.059837 -4.4008973E-3
+ 39.05 16.31328 36.08011 -4.6837436E-3
+ 39.05 16.788677 36.097347 -5.0247116E-3
+ 39.05 17.374691 36.109645 -5.454847E-3
+ 39.05 18.052822 36.118103 -6.0112825E-3
+ 39.05 18.784447 36.12896 -6.6620823E-3
+ 39.05 19.670616 36.139717 -7.251453E-3
+ 39.05 20.46489 36.155097 -7.663353E-3
+ 39.05 20.994713 36.18423 -7.946969E-3
+ 39.05 21.293253 36.21453 -8.160615E-3
+ 39.05 21.362259 36.23541 -8.3325505E-3
+ 39.05 21.39281 36.257083 -8.480125E-3
+ 39.05 21.411598 36.273826 -8.600151E-3
+ 39.05 21.38904 36.279174 -8.688199E-3
+ 39.05 21.306091 36.275306 -8.784985E-3
+ 39.1 2.5283093 34.89519 0.0E+0
+ 39.1 2.5147035 34.896427 -4.6690722E-4
+ 39.1 2.5226116 34.903057 -9.459091E-4
+ 39.1 2.5409257 34.91233 -1.3250561E-3
+ 39.1 2.5728943 34.92248 -1.4308382E-3
+ 39.1 2.6513967 34.93603 -1.2293258E-3
+ 39.1 2.7623364 34.949733 -7.8856933E-4
+ 39.1 2.9456822 34.963203 -2.6533621E-4
+ 39.1 3.1567351 34.974174 1.5878244E-4
+ 39.1 3.4801948 34.994071 4.2197693E-4
+ 39.1 3.8040194 35.013195 5.957207E-4
+ 39.1 4.327279 35.080852 8.079498E-4
+ 39.1 5.0463876 35.179542 1.2019909E-3
+ 39.1 6.2519454 35.36485 1.6642567E-3
+ 39.1 8.034885 35.671924 2.2482627E-3
+ 39.1 9.301529 35.845867 3.2544296E-3
+ 39.1 10.028335 35.86273 4.4517493E-3
+ 39.1 10.503652 35.80455 5.1309075E-3
+ 39.1 10.719422 35.692382 5.4674292E-3
+ 39.1 10.948712 35.57818 5.4238033E-3
+ 39.1 11.340531 35.54805 4.763336E-3
+ 39.1 11.711003 35.577655 3.7762313E-3
+ 39.1 12.108551 35.62311 2.8187471E-3
+ 39.1 12.411818 35.65658 2.1402202E-3
+ 39.1 12.698092 35.688972 1.6594675E-3
+ 39.1 12.917682 35.710544 1.2730554E-3
+ 39.1 13.118645 35.73564 9.561723E-4
+ 39.1 13.377606 35.76941 7.0610933E-4
+ 39.1 13.58071 35.794994 4.8305516E-4
+ 39.1 13.755611 35.816234 2.5755935E-4
+ 39.1 13.922798 35.838684 3.909635E-5
+ 39.1 14.041585 35.855407 -1.6175846E-4
+ 39.1 14.150325 35.87176 -3.5290396E-4
+ 39.1 14.236634 35.88241 -5.408024E-4
+ 39.1 14.318375 35.893836 -7.218876E-4
+ 39.1 14.399847 35.90399 -8.931332E-4
+ 39.1 14.459869 35.91374 -1.0534102E-3
+ 39.1 14.539761 35.922733 -1.2071236E-3
+ 39.1 14.605223 35.92971 -1.3651247E-3
+ 39.1 14.659732 35.93466 -1.5313616E-3
+ 39.1 14.717111 35.93896 -1.7026773E-3
+ 39.1 14.774521 35.9445 -1.8754776E-3
+ 39.1 14.856646 35.951816 -2.0551518E-3
+ 39.1 14.916931 35.955783 -2.2459563E-3
+ 39.1 15.00465 35.96741 -2.4434733E-3
+ 39.1 15.094173 35.97946 -2.6487563E-3
+ 39.1 15.198362 35.98944 -2.8627198E-3
+ 39.1 15.314318 35.999176 -3.0870365E-3
+ 39.1 15.429718 36.007762 -3.318456E-3
+ 39.1 15.56425 36.02033 -3.5542771E-3
+ 39.1 15.748906 36.0358 -3.7877578E-3
+ 39.1 15.954255 36.057907 -4.029286E-3
+ 39.1 16.276327 36.07761 -4.3143145E-3
+ 39.1 16.746067 36.094577 -4.658105E-3
+ 39.1 17.320627 36.106246 -5.090176E-3
+ 39.1 17.987823 36.11447 -5.646223E-3
+ 39.1 18.715767 36.12511 -6.2961666E-3
+ 39.1 19.617855 36.135772 -6.8892994E-3
+ 39.1 20.425974 36.15069 -7.313323E-3
+ 39.1 20.960249 36.17894 -7.612465E-3
+ 39.1 21.26072 36.20798 -7.836123E-3
+ 39.1 21.327862 36.227478 -8.01188E-3
+ 39.1 21.3574 36.248023 -8.161455E-3
+ 39.1 21.376099 36.263923 -8.283634E-3
+ 39.1 21.355623 36.26905 -8.374389E-3
+ 39.1 21.27382 36.26529 -8.475293E-3
+ 39.15 2.5294654 34.895542 0.0E+0
+ 39.15 2.5156142 34.896762 -4.7171357E-4
+ 39.15 2.523335 34.90337 -9.5435563E-4
+ 39.15 2.5416822 34.91256 -1.334351E-3
+ 39.15 2.574032 34.922584 -1.4361181E-3
+ 39.15 2.6526634 34.93602 -1.2281106E-3
+ 39.15 2.763607 34.949607 -7.812022E-4
+ 39.15 2.9463624 34.963024 -2.5385478E-4
+ 39.15 3.157782 34.97411 1.7375407E-4
+ 39.15 3.4816641 34.994155 4.475669E-4
+ 39.15 3.8057763 35.01332 6.45445E-4
+ 39.15 4.326791 35.0806 9.08541E-4
+ 39.15 5.039754 35.17814 1.3694696E-3
+ 39.15 6.246194 35.36354 1.8925165E-3
+ 39.15 8.037104 35.671733 2.530977E-3
+ 39.15 9.304611 35.84541 3.5765012E-3
+ 39.15 10.021313 35.86001 4.7829863E-3
+ 39.15 10.494616 35.8022 5.4527856E-3
+ 39.15 10.712143 35.690162 5.79233E-3
+ 39.15 10.940557 35.576885 5.759957E-3
+ 39.15 11.335201 35.548122 5.101593E-3
+ 39.15 11.705622 35.578357 4.1248626E-3
+ 39.15 12.102055 35.623493 3.1862033E-3
+ 39.15 12.405691 35.65683 2.5235495E-3
+ 39.15 12.693672 35.68954 2.0558575E-3
+ 39.15 12.911976 35.71093 1.679254E-3
+ 39.15 13.112769 35.735847 1.3696765E-3
+ 39.15 13.372913 35.76988 1.122884E-3
+ 39.15 13.573977 35.79515 8.998922E-4
+ 39.15 13.747234 35.816333 6.734601E-4
+ 39.15 13.914304 35.83882 4.5311087E-4
+ 39.15 14.032399 35.855453 2.5002172E-4
+ 39.15 14.139659 35.87158 5.711554E-5
+ 39.15 14.22446 35.882053 -1.320081E-4
+ 39.15 14.305411 35.893314 -3.1382226E-4
+ 39.15 14.386199 35.903362 -4.8570754E-4
+ 39.15 14.445418 35.912834 -6.4662145E-4
+ 39.15 14.524044 35.921653 -8.0100836E-4
+ 39.15 14.588098 35.928577 -9.595936E-4
+ 39.15 14.641117 35.933475 -1.1261133E-3
+ 39.15 14.697856 35.93779 -1.297564E-3
+ 39.15 14.754404 35.943237 -1.4703751E-3
+ 39.15 14.834466 35.95038 -1.6499734E-3
+ 39.15 14.893472 35.9543 -1.8406976E-3
+ 39.15 14.979727 35.965705 -2.038129E-3
+ 39.15 15.068027 35.97768 -2.2433223E-3
+ 39.15 15.171099 35.987594 -2.4572764E-3
+ 39.15 15.284979 35.9971 -2.681859E-3
+ 39.15 15.399929 36.005504 -2.9138978E-3
+ 39.15 15.535402 36.01856 -3.1506025E-3
+ 39.15 15.721905 36.034145 -3.3856853E-3
+ 39.15 15.923302 36.055824 -3.628716E-3
+ 39.15 16.238527 36.074932 -3.9148507E-3
+ 39.15 16.702549 36.09163 -4.260163E-3
+ 39.15 17.265833 36.102657 -4.692374E-3
+ 39.15 17.922388 36.110683 -5.245459E-3
+ 39.15 18.646427 36.12107 -5.8914353E-3
+ 39.15 19.563877 36.13165 -6.485813E-3
+ 39.15 20.385239 36.146125 -6.9208834E-3
+ 39.15 20.924131 36.17348 -7.2352844E-3
+ 39.15 21.227154 36.20122 -7.46866E-3
+ 39.15 21.292736 36.219352 -7.6477667E-3
+ 39.15 21.321272 36.23877 -7.798875E-3
+ 39.15 21.339836 36.253822 -7.922873E-3
+ 39.15 21.321392 36.25873 -8.016178E-3
+ 39.15 21.240807 36.25509 -8.121132E-3
+ 39.2 2.5305562 34.89589 0.0E+0
+ 39.2 2.516473 34.897094 -4.7493385E-4
+ 39.2 2.5240228 34.90368 -9.595967E-4
+ 39.2 2.5424213 34.912784 -1.3389062E-3
+ 39.2 2.575158 34.922683 -1.4358822E-3
+ 39.2 2.6538984 34.935997 -1.2216966E-3
+ 39.2 2.7648282 34.94947 -7.700495E-4
+ 39.2 2.946973 34.962833 -2.406005E-4
+ 39.2 3.1587305 34.974033 1.8880167E-4
+ 39.2 3.4829726 34.99421 4.7256622E-4
+ 39.2 3.8072347 35.01339 6.9498264E-4
+ 39.2 4.3257007 35.08021 1.010885E-3
+ 39.2 5.0324144 35.176582 1.541114E-3
+ 39.2 6.2395396 35.362037 2.1266331E-3
+ 39.2 8.038292 35.67129 2.8197437E-3
+ 39.2 9.307249 35.844833 3.9013826E-3
+ 39.2 10.013868 35.857204 5.1107793E-3
+ 39.2 10.485032 35.799736 5.766081E-3
+ 39.2 10.70418 35.687767 6.1058034E-3
+ 39.2 10.932051 35.575496 6.084026E-3
+ 39.2 11.329647 35.54815 5.429332E-3
+ 39.2 11.700234 35.579013 4.466666E-3
+ 39.2 12.095545 35.623832 3.5511532E-3
+ 39.2 12.399659 35.65705 2.9074761E-3
+ 39.2 12.689305 35.69007 2.4550303E-3
+ 39.2 12.906369 35.711296 2.0899237E-3
+ 39.2 13.106933 35.736026 1.7889828E-3
+ 39.2 13.367965 35.770267 1.5463382E-3
+ 39.2 13.566876 35.79521 1.3240268E-3
+ 39.2 13.738412 35.816326 1.0972635E-3
+ 39.2 13.905261 35.83884 8.7558035E-4
+ 39.2 14.022635 35.855365 6.707377E-4
+ 39.2 14.128401 35.871257 4.765586E-4
+ 39.2 14.211745 35.881565 2.8673437E-4
+ 39.2 14.291916 35.89266 1.047285E-4
+ 39.2 14.372 35.90259 -6.7288085E-5
+ 39.2 14.430407 35.91179 -2.2837034E-4
+ 39.2 14.507737 35.92043 -3.829843E-4
+ 39.2 14.570418 35.927303 -5.416758E-4
+ 39.2 14.621978 35.932147 -7.0794066E-4
+ 39.2 14.678101 35.93648 -8.789558E-4
+ 39.2 14.733816 35.94184 -1.0511914E-3
+ 39.2 14.811806 35.948806 -1.2300857E-3
+ 39.2 14.869571 35.95269 -1.4200507E-3
+ 39.2 14.954363 35.96388 -1.6166884E-3
+ 39.2 15.041419 35.97577 -1.8210465E-3
+ 39.2 15.14333 35.985607 -2.03421E-3
+ 39.2 15.255119 35.994892 -2.2582481E-3
+ 39.2 15.369633 36.003128 -2.4900897E-3
+ 39.2 15.506 36.016666 -2.726858E-3
+ 39.2 15.694228 36.032356 -2.9627697E-3
+ 39.2 15.891727 36.05358 -3.2064877E-3
+ 39.2 16.199968 36.07208 -3.4926934E-3
+ 39.2 16.658236 36.088493 -3.8382697E-3
+ 39.2 17.210491 36.09888 -4.268885E-3
+ 39.2 17.856775 36.10673 -4.816528E-3
+ 39.2 18.5767 36.116836 -5.4555274E-3
+ 39.2 19.508827 36.12735 -6.0486793E-3
+ 39.2 20.342724 36.141422 -6.4936694E-3
+ 39.2 20.886395 36.167865 -6.8229585E-3
+ 39.2 21.192617 36.194274 -7.0657003E-3
+ 39.2 21.256973 36.21105 -7.2476854E-3
+ 39.2 21.28452 36.229347 -7.3998817E-3
+ 39.2 21.302908 36.243556 -7.5253765E-3
+ 39.2 21.286427 36.24825 -7.621077E-3
+ 39.2 21.207127 36.244724 -7.7300076E-3
+ 39.25 2.5315728 34.89623 0.0E+0
+ 39.25 2.5172731 34.89742 -4.766011E-4
+ 39.25 2.5246701 34.903984 -9.61727E-4
+ 39.25 2.5431387 34.913002 -1.338863E-3
+ 39.25 2.576267 34.92278 -1.4303095E-3
+ 39.25 2.6550943 34.93597 -1.2102717E-3
+ 39.25 2.7659904 34.94933 -7.55283E-4
+ 39.25 2.9475061 34.96263 -2.2572075E-4
+ 39.25 3.1595687 34.97394 2.0378327E-4
+ 39.25 3.484102 34.994232 4.967367E-4
+ 39.25 3.808366 35.01339 7.438428E-4
+ 39.25 4.3239693 35.079685 1.1140172E-3
+ 39.25 5.0243453 35.17487 1.7154065E-3
+ 39.25 6.231933 35.360324 2.3645965E-3
+ 39.25 8.038346 35.67059 3.112063E-3
+ 39.25 9.309358 35.844127 4.226142E-3
+ 39.25 10.005986 35.854316 5.4319743E-3
+ 39.25 10.474887 35.79716 6.0675237E-3
+ 39.25 10.695509 35.685192 6.4043146E-3
+ 39.25 10.923192 35.574016 6.3920957E-3
+ 39.25 11.323864 35.548122 5.7422854E-3
+ 39.25 11.694849 35.579616 4.796942E-3
+ 39.25 12.089034 35.624122 3.908433E-3
+ 39.25 12.393739 35.65724 3.286463E-3
+ 39.25 12.684993 35.690563 2.851145E-3
+ 39.25 12.900871 35.71163 2.4989803E-3
+ 39.25 13.101145 35.736167 2.207813E-3
+ 39.25 13.36275 35.770576 1.9700592E-3
+ 39.25 13.559395 35.79517 1.7489546E-3
+ 39.25 13.729136 35.816204 1.52239E-3
+ 39.25 13.895652 35.838726 1.2998655E-3
+ 39.25 14.012276 35.855133 1.093701E-3
+ 39.25 14.116541 35.87078 8.986878E-4
+ 39.25 14.198486 35.88093 7.086373E-4
+ 39.25 14.277888 35.89185 5.26925E-4
+ 39.25 14.357248 35.901676 3.5523556E-4
+ 39.25 14.41484 35.910587 1.9440641E-4
+ 39.25 14.490845 35.91905 3.9967522E-5
+ 39.25 14.552198 35.925872 -1.1839679E-4
+ 39.25 14.602337 35.93067 -2.839167E-4
+ 39.25 14.657871 35.935028 -4.5397406E-4
+ 39.25 14.712789 35.940307 -6.2509736E-4
+ 39.25 14.788708 35.94709 -8.0270954E-4
+ 39.25 14.845278 35.95095 -9.91287E-4
+ 39.25 14.928611 35.961917 -1.1864753E-3
+ 39.25 15.01441 35.973724 -1.3893035E-3
+ 39.25 15.115117 35.983474 -1.6009461E-3
+ 39.25 15.224808 35.99255 -1.8236788E-3
+ 39.25 15.3389 36.00063 -2.0545546E-3
+ 39.25 15.47611 36.014636 -2.2906116E-3
+ 39.25 15.665921 36.03043 -2.5266162E-3
+ 39.25 15.859597 36.05118 -2.7702457E-3
+ 39.25 16.160746 36.069042 -3.0555333E-3
+ 39.25 16.613237 36.08517 -3.4001665E-3
+ 39.25 17.154781 36.09491 -3.8275215E-3
+ 39.25 17.791233 36.102626 -4.3673506E-3
+ 39.25 18.506853 36.11241 -4.99648E-3
+ 39.25 19.452848 36.122867 -5.585998E-3
+ 39.25 20.29848 36.136577 -6.039734E-3
+ 39.25 20.847078 36.1621 -6.383432E-3
+ 39.25 21.157171 36.18714 -6.6351285E-3
+ 39.25 21.220655 36.202587 -6.8195275E-3
+ 39.25 21.247238 36.21978 -6.9723865E-3
+ 39.25 21.265396 36.233146 -7.099073E-3
+ 39.25 21.250803 36.237625 -7.1970145E-3
+ 39.25 21.172857 36.234233 -7.3098442E-3
+ 39.3 2.5325071 34.896556 0.0E+0
+ 39.3 2.5180087 34.89774 -4.767553E-4
+ 39.3 2.5252714 34.904285 -9.608557E-4
+ 39.3 2.5438303 34.91322 -1.3343858E-3
+ 39.3 2.5773527 34.922863 -1.4196071E-3
+ 39.3 2.6562438 34.935935 -1.1940512E-3
+ 39.3 2.767086 34.949172 -7.37096E-4
+ 39.3 2.9479541 34.96242 -2.09375E-4
+ 39.3 3.160286 34.97383 2.1855332E-4
+ 39.3 3.485035 34.99422 5.198375E-4
+ 39.3 3.8091444 35.013324 7.915242E-4
+ 39.3 4.321561 35.079013 1.2169407E-3
+ 39.3 5.015525 35.172992 1.8907688E-3
+ 39.3 6.223332 35.3584 2.604313E-3
+ 39.3 8.037165 35.6696 3.4053486E-3
+ 39.3 9.31085 35.84327 4.547779E-3
+ 39.3 9.997658 35.85136 5.743382E-3
+ 39.3 10.464172 35.79448 6.353838E-3
+ 39.3 10.686109 35.68244 6.6843354E-3
+ 39.3 10.913979 35.57244 6.680251E-3
+ 39.3 11.317845 35.54804 6.036173E-3
+ 39.3 11.689471 35.580165 5.110952E-3
+ 39.3 12.082532 35.624355 4.252808E-3
+ 39.3 12.387942 35.657394 3.654878E-3
+ 39.3 12.680735 35.691005 3.238248E-3
+ 39.3 12.89549 35.711936 2.9002127E-3
+ 39.3 13.095407 35.736274 2.6197498E-3
+ 39.3 13.357251 35.77079 2.387488E-3
+ 39.3 13.55152 35.79502 2.16802E-3
+ 39.3 13.719392 35.815952 1.9421034E-3
+ 39.3 13.885459 35.838474 1.7191675E-3
+ 39.3 14.001306 35.85475 1.5120601E-3
+ 39.3 14.104066 35.870147 1.3165995E-3
+ 39.3 14.18468 35.88015 1.1267433E-3
+ 39.3 14.263327 35.89089 9.4575446E-4
+ 39.3 14.341945 35.900604 7.747971E-4
+ 39.3 14.398717 35.90923 6.145921E-4
+ 39.3 14.473375 35.91751 4.606829E-4
+ 39.3 14.533452 35.924285 3.0303155E-4
+ 39.3 14.582217 35.929042 1.3869615E-4
+ 39.3 14.637192 35.933425 -2.9933535E-5
+ 39.3 14.691355 35.93863 -1.9946077E-4
+ 39.3 14.765212 35.94523 -3.7526653E-4
+ 39.3 14.820638 35.94908 -5.6188303E-4
+ 39.3 14.902525 35.959827 -7.5502163E-4
+ 39.3 14.987055 35.971542 -9.5568184E-4
+ 39.3 15.086519 35.981197 -1.1651294E-3
+ 39.3 15.194112 35.99007 -1.3858507E-3
+ 39.3 15.3078 35.998012 -1.6150438E-3
+ 39.3 15.445792 36.012474 -1.8496648E-3
+ 39.3 15.637032 36.028362 -2.0850675E-3
+ 39.3 15.826977 36.048614 -2.327876E-3
+ 39.3 16.120947 36.065822 -2.611308E-3
+ 39.3 16.567661 36.081657 -2.953847E-3
+ 39.3 17.09888 36.09075 -3.376357E-3
+ 39.3 17.726004 36.09837 -3.9061228E-3
+ 39.3 18.437151 36.1078 -4.522624E-3
+ 39.3 19.39609 36.118217 -5.1061734E-3
+ 39.3 20.252563 36.131603 -5.567438E-3
+ 39.3 20.806232 36.156196 -5.924956E-3
+ 39.3 21.120886 36.179843 -6.185136E-3
+ 39.3 21.183868 36.193984 -6.37149E-3
+ 39.3 21.209513 36.21009 -6.5246126E-3
+ 39.3 21.227396 36.222625 -6.6522005E-3
+ 39.3 21.214598 36.226886 -6.7522316E-3
+ 39.3 21.13807 36.223636 -6.868878E-3
+ 39.35 2.533352 34.896873 0.0E+0
+ 39.35 2.518674 34.89805 -4.7544261E-4
+ 39.35 2.5258224 34.904575 -9.5710484E-4
+ 39.35 2.5444924 34.913425 -1.325659E-3
+ 39.35 2.5784108 34.922943 -1.4040075E-3
+ 39.35 2.6573402 34.935894 -1.1732763E-3
+ 39.35 2.7681066 34.949012 -7.157016E-4
+ 39.35 2.9483096 34.962203 -1.9173279E-4
+ 39.35 3.1608717 34.97371 2.3296435E-4
+ 39.35 3.4857556 34.994167 5.4162775E-4
+ 39.35 3.809546 35.013187 8.3752104E-4
+ 39.35 4.318444 35.07819 1.3186384E-3
+ 39.35 5.0059366 35.17095 2.065579E-3
+ 39.35 6.2136964 35.35625 2.843629E-3
+ 39.35 8.03465 35.66831 3.6969594E-3
+ 39.35 9.311637 35.842254 4.863264E-3
+ 39.35 9.98887 35.848327 6.041821E-3
+ 39.35 10.452879 35.79169 6.6217854E-3
+ 39.35 10.675964 35.67951 6.9423904E-3
+ 39.35 10.90441 35.570774 6.944635E-3
+ 39.35 11.311581 35.54789 6.306764E-3
+ 39.35 11.684105 35.580654 5.4039843E-3
+ 39.35 12.076046 35.624523 4.5790444E-3
+ 39.35 12.382275 35.657505 4.0070717E-3
+ 39.35 12.676527 35.691394 3.6103522E-3
+ 39.35 12.890227 35.712207 3.287366E-3
+ 39.35 13.089721 35.736331 3.0183237E-3
+ 39.35 13.351449 35.77091 2.7920075E-3
+ 39.35 13.543235 35.794754 2.5745055E-3
+ 39.35 13.70917 35.81557 2.349603E-3
+ 39.35 13.874665 35.838073 2.126619E-3
+ 39.35 13.989709 35.85421 1.9188934E-3
+ 39.35 14.090966 35.869346 1.7233175E-3
+ 39.35 14.170322 35.879207 1.5340196E-3
+ 39.35 14.248229 35.889766 1.3541253E-3
+ 39.35 14.326089 35.899372 1.184249E-3
+ 39.35 14.382041 35.907707 1.0249863E-3
+ 39.35 14.455332 35.915805 8.719115E-4
+ 39.35 14.514191 35.92253 7.1530876E-4
+ 39.35 14.561638 35.927253 5.525439E-4
+ 39.35 14.616087 35.93167 3.857565E-4
+ 39.35 14.66954 35.936805 2.182527E-4
+ 39.35 14.741354 35.943222 4.4720407E-5
+ 39.35 14.795696 35.947074 -1.3942026E-4
+ 39.35 14.876154 35.957603 -3.299684E-4
+ 39.35 14.95941 35.969223 -5.2788225E-4
+ 39.35 15.057591 35.97877 -7.345206E-4
+ 39.35 15.163095 35.987457 -9.5258263E-4
+ 39.35 15.276396 35.995273 -1.1794326E-3
+ 39.35 15.415106 36.010173 -1.4119464E-3
+ 39.35 15.607605 36.02615 -1.6460973E-3
+ 39.35 15.793929 36.045875 -1.8873988E-3
+ 39.35 16.08066 36.062416 -2.1680947E-3
+ 39.35 16.521614 36.077957 -2.5074512E-3
+ 39.35 17.042961 36.086402 -2.92362E-3
+ 39.35 17.66132 36.09396 -3.4412073E-3
+ 39.35 18.367846 36.103 -4.042472E-3
+ 39.35 19.338697 36.11339 -4.6178046E-3
+ 39.35 20.205042 36.1265 -5.08534E-3
+ 39.35 20.763914 36.15016 -5.4559772E-3
+ 39.35 21.083824 36.172386 -5.724109E-3
+ 39.35 21.146692 36.18526 -5.9119695E-3
+ 39.35 21.171429 36.2003 -6.064982E-3
+ 39.35 21.18899 36.21201 -6.1931996E-3
+ 39.35 21.177883 36.21606 -6.2951706E-3
+ 39.35 21.10284 36.21296 -6.4155464E-3
+ 39.4 2.5341002 34.89718 0.0E+0
+ 39.4 2.5192637 34.89835 -4.7271515E-4
+ 39.4 2.5263187 34.90486 -9.5060793E-4
+ 39.4 2.5451221 34.913627 -1.3128858E-3
+ 39.4 2.5794358 34.923015 -1.383767E-3
+ 39.4 2.6583771 34.93584 -1.148211E-3
+ 39.4 2.7690446 34.94884 -6.913303E-4
+ 39.4 2.9485666 34.961975 -1.7297194E-4
+ 39.4 3.161317 34.973564 2.4686887E-4
+ 39.4 3.4862494 34.99408 5.6187034E-4
+ 39.4 3.8095502 35.012977 8.813297E-4
+ 39.4 4.314594 35.077213 1.4180844E-3
+ 39.4 4.9955682 35.168743 2.2381905E-3
+ 39.4 6.202994 35.353878 3.080357E-3
+ 39.4 8.03071 35.666702 3.9842282E-3
+ 39.4 9.311628 35.841064 5.1695746E-3
+ 39.4 9.979613 35.845233 6.3241603E-3
+ 39.4 10.441 35.7888 6.8682134E-3
+ 39.4 10.665058 35.676395 7.1751093E-3
+ 39.4 10.894482 35.56901 7.1815E-3
+ 39.4 11.305063 35.547676 6.5499367E-3
+ 39.4 11.678748 35.58107 5.671423E-3
+ 39.4 12.069579 35.62463 4.881983E-3
+ 39.4 12.37674 35.657573 4.337454E-3
+ 39.4 12.67236 35.691726 3.961522E-3
+ 39.4 12.885076 35.712432 3.654227E-3
+ 39.4 13.08408 35.736343 3.3971013E-3
+ 39.4 13.345325 35.77092 3.1770318E-3
+ 39.4 13.534527 35.794364 2.9617224E-3
+ 39.4 13.698458 35.81505 2.7381144E-3
+ 39.4 13.863255 35.837516 2.5153784E-3
+ 39.4 13.97747 35.8535 2.3073023E-3
+ 39.4 14.07723 35.868373 2.111887E-3
+ 39.4 14.155409 35.878097 1.9234526E-3
+ 39.4 14.232593 35.888477 1.7449633E-3
+ 39.4 14.309678 35.89797 1.5764586E-3
+ 39.4 14.364812 35.906013 1.4184016E-3
+ 39.4 14.436721 35.91393 1.2664145E-3
+ 39.4 14.494426 35.920612 1.1111439E-3
+ 39.4 14.540618 35.925304 9.502797E-4
+ 39.4 14.594576 35.929756 7.8569154E-4
+ 39.4 14.647372 35.93483 6.2057987E-4
+ 39.4 14.717168 35.941062 4.4972836E-4
+ 39.4 14.77049 35.944934 2.685171E-4
+ 39.4 14.849542 35.955245 8.1037855E-5
+ 39.4 14.931524 35.966762 -1.1361455E-4
+ 39.4 15.028387 35.976196 -3.168928E-4
+ 39.4 15.13182 35.984706 -5.317098E-4
+ 39.4 15.24475 35.992412 -7.556154E-4
+ 39.4 15.384107 36.00773 -9.85408E-4
+ 39.4 15.577684 36.023784 -1.2177048E-3
+ 39.4 15.760512 36.04297 -1.4568637E-3
+ 39.4 16.03997 36.058826 -1.734004E-3
+ 39.4 16.4752 36.074066 -2.0691575E-3
+ 39.4 16.987186 36.081867 -2.477584E-3
+ 39.4 17.597404 36.0894 -2.981023E-3
+ 39.4 18.299192 36.09802 -3.5646075E-3
+ 39.4 19.280815 36.108402 -4.129572E-3
+ 39.4 20.155993 36.12127 -4.602083E-3
+ 39.4 20.720194 36.144 -4.9850284E-3
+ 39.4 21.046059 36.164783 -5.260521E-3
+ 39.4 21.109205 36.176433 -5.44945E-3
+ 39.4 21.13307 36.190425 -5.6020086E-3
+ 39.4 21.15026 36.201332 -5.7306024E-3
+ 39.4 21.140736 36.205173 -5.834367E-3
+ 39.4 21.067236 36.20223 -5.95838E-3
+ 39.45 2.5347471 34.89747 0.0E+0
+ 39.45 2.5197741 34.898635 -4.686301E-4
+ 39.45 2.526757 34.905132 -9.4150833E-4
+ 39.45 2.5457158 34.913822 -1.2962854E-3
+ 39.45 2.5804233 34.923076 -1.3591612E-3
+ 39.45 2.6593492 34.93578 -1.1191395E-3
+ 39.45 2.7698934 34.948657 -6.642278E-4
+ 39.45 2.9487192 34.96174 -1.532766E-4
+ 39.45 3.1616137 34.973403 2.6012124E-4
+ 39.45 3.4865036 34.99395 5.803344E-4
+ 39.45 3.8091394 35.012687 9.2245463E-4
+ 39.45 4.3099894 35.076076 1.5142566E-3
+ 39.45 4.9844126 35.166366 2.4069503E-3
+ 39.45 6.1911964 35.351272 3.3122966E-3
+ 39.45 8.025259 35.66476 4.264494E-3
+ 39.45 9.310729 35.839687 5.463734E-3
+ 39.45 9.969877 35.84208 6.587359E-3
+ 39.45 10.42853 35.78581 7.0900954E-3
+ 39.45 10.653383 35.67311 7.379274E-3
+ 39.45 10.884194 35.567153 7.387267E-3
+ 39.45 11.298281 35.547393 6.7617367E-3
+ 39.45 11.673398 35.58141 5.90881E-3
+ 39.45 12.063132 35.624664 5.156611E-3
+ 39.45 12.371334 35.657592 4.6405727E-3
+ 39.45 12.668219 35.69199 4.285952E-3
+ 39.45 12.88003 35.712612 3.9947084E-3
+ 39.45 13.078474 35.7363 3.7497703E-3
+ 39.45 13.338857 35.770816 3.536096E-3
+ 39.45 13.525377 35.793846 3.3231021E-3
+ 39.45 13.687243 35.81438 3.1009824E-3
+ 39.45 13.851214 35.8368 2.8787204E-3
+ 39.45 13.964574 35.85261 2.6705048E-3
+ 39.45 14.062849 35.867218 2.475468E-3
+ 39.45 14.139936 35.876815 2.2881424E-3
+ 39.45 14.216414 35.887012 2.1113064E-3
+ 39.45 14.292711 35.896392 1.9444042E-3
+ 39.45 14.347029 35.904144 1.7877606E-3
+ 39.45 14.417547 35.91188 1.6370616E-3
+ 39.45 14.474167 35.918525 1.4833532E-3
+ 39.45 14.519174 35.923187 1.3246627E-3
+ 39.45 14.572678 35.927684 1.1625716E-3
+ 39.45 14.624873 35.932704 1.0001604E-3
+ 39.45 14.692686 35.93875 8.3233503E-4
+ 39.45 14.745057 35.942653 6.5444334E-4
+ 39.45 14.822733 35.952754 4.704467E-4
+ 39.45 14.903447 35.964164 2.7950547E-4
+ 39.45 14.998956 35.973476 8.0072255E-5
+ 39.45 15.100343 35.98182 -1.3097841E-4
+ 39.45 15.212918 35.989437 -3.5140031E-4
+ 39.45 15.352847 36.005146 -5.7791703E-4
+ 39.45 15.547309 36.02127 -8.078079E-4
+ 39.45 15.726783 36.039886 -1.0442412E-3
+ 39.45 15.998965 36.055046 -1.3170704E-3
+ 39.45 16.428516 36.069984 -1.6470726E-3
+ 39.45 16.931715 36.07715 -2.0464581E-3
+ 39.45 17.534464 36.084697 -2.5339336E-3
+ 39.45 18.231426 36.092857 -3.097569E-3
+ 39.45 19.222593 36.10325 -3.6501223E-3
+ 39.45 20.105497 36.11593 -4.1262842E-3
+ 39.45 20.675142 36.13773 -4.5206174E-3
+ 39.45 21.007654 36.15705 -4.8028226E-3
+ 39.45 21.071484 36.16752 -4.992394E-3
+ 39.45 21.094517 36.180492 -5.144184E-3
+ 39.45 21.111288 36.19061 -5.2729202E-3
+ 39.45 21.103224 36.19425 -5.3783357E-3
+ 39.45 21.031326 36.191467 -5.5058887E-3
+ 39.5 2.5352876 34.897743 0.0E+0
+ 39.5 2.5202016 34.898914 -4.6324927E-4
+ 39.5 2.5271334 34.905395 -9.299575E-4
+ 39.5 2.5462708 34.91401 -1.276091E-3
+ 39.5 2.5813691 34.923133 -1.330484E-3
+ 39.5 2.6602504 34.93571 -1.0863636E-3
+ 39.5 2.770647 34.94847 -6.3465244E-4
+ 39.5 2.9487626 34.961494 -1.3283535E-4
+ 39.5 3.1617541 34.97323 2.7257937E-4
+ 39.5 3.4865067 34.99378 5.967987E-4
+ 39.5 3.8082988 35.012325 9.604152E-4
+ 39.5 4.304617 35.07478 1.6061481E-3
+ 39.5 4.9724664 35.163825 2.5702163E-3
+ 39.5 6.1782822 35.34844 3.5372602E-3
+ 39.5 8.01822 35.662475 4.535129E-3
+ 39.5 9.308849 35.83811 5.742844E-3
+ 39.5 9.959654 35.83887 6.828508E-3
+ 39.5 10.415467 35.782722 7.2845756E-3
+ 39.5 10.640932 35.669654 7.551863E-3
+ 39.5 10.873543 35.565204 7.55857E-3
+ 39.5 11.291224 35.547035 6.938434E-3
+ 39.5 11.668048 35.581672 6.1119105E-3
+ 39.5 12.056702 35.624622 5.39813E-3
+ 39.5 12.366051 35.657562 4.911185E-3
+ 39.5 12.664086 35.69218 4.5780455E-3
+ 39.5 12.875072 35.71274 4.302933E-3
+ 39.5 13.07289 35.7362 4.0702275E-3
+ 39.5 13.332025 35.770595 3.8629428E-3
+ 39.5 13.515771 35.793197 3.6522832E-3
+ 39.5 13.675513 35.81356 3.4317586E-3
+ 39.5 13.838527 35.835914 3.2101282E-3
+ 39.5 13.951009 35.851547 3.0019257E-3
+ 39.5 14.047813 35.865875 2.807428E-3
+ 39.5 14.123898 35.875362 2.6213957E-3
+ 39.5 14.199688 35.88537 2.4463983E-3
+ 39.5 14.275184 35.894634 2.2812695E-3
+ 39.5 14.328691 35.9021 2.1261905E-3
+ 39.5 14.397814 35.909652 1.976927E-3
+ 39.5 14.453422 35.91626 1.824957E-3
+ 39.5 14.49732 35.92091 1.6686548E-3
+ 39.5 14.55041 35.92545 1.5092983E-3
+ 39.5 14.602063 35.930423 1.3498343E-3
+ 39.5 14.667936 35.936286 1.185318E-3
+ 39.5 14.719431 35.940235 1.0110711E-3
+ 39.5 14.795764 35.95013 8.309048E-4
+ 39.5 14.87522 35.961425 6.4405734E-4
+ 39.5 14.969345 35.970603 4.4888647E-4
+ 39.5 15.068718 35.978797 2.4205694E-4
+ 39.5 15.180955 35.98634 2.5594167E-5
+ 39.5 15.321375 36.00242 -1.9715347E-4
+ 39.5 15.51652 36.018604 -4.241385E-4
+ 39.5 15.692795 36.036632 -6.57318E-4
+ 39.5 15.957722 36.051082 -9.251484E-4
+ 39.5 16.38166 36.06572 -1.2491262E-3
+ 39.5 16.876698 36.072246 -1.6382799E-3
+ 39.5 17.472696 36.07985 -2.1081382E-3
+ 39.5 18.164783 36.087524 -2.6497435E-3
+ 39.5 19.164173 36.097934 -3.1879604E-3
+ 39.5 20.053658 36.110473 -3.66642E-3
+ 39.5 20.628847 36.13135 -4.0711145E-3
+ 39.5 20.968685 36.1492 -4.359329E-3
+ 39.5 21.0336 36.158527 -4.549131E-3
+ 39.5 21.05584 36.170524 -4.6998686E-3
+ 39.5 21.07215 36.17987 -4.8285354E-3
+ 39.5 21.065416 36.183303 -4.9354615E-3
+ 39.5 20.995173 36.1807 -5.066453E-3
+ 39.55 2.5357182 34.898002 0.0E+0
+ 39.55 2.5205438 34.899177 -4.5663837E-4
+ 39.55 2.5274457 34.905647 -9.1611314E-4
+ 39.55 2.546785 34.914184 -1.2525468E-3
+ 39.55 2.582269 34.92318 -1.298044E-3
+ 39.55 2.6610765 34.93563 -1.0501997E-3
+ 39.55 2.7713 34.948272 -6.028729E-4
+ 39.55 2.9486923 34.961242 -1.1183922E-4
+ 39.55 3.1617326 34.97303 2.8410652E-4
+ 39.55 3.4862494 34.99357 6.110545E-4
+ 39.55 3.807017 35.011882 9.94751E-4
+ 39.55 4.2984666 35.073322 1.6927789E-3
+ 39.55 4.9597325 35.16112 2.7263755E-3
+ 39.55 6.164237 35.345367 3.7530947E-3
+ 39.55 8.00952 35.659835 4.793568E-3
+ 39.55 9.305895 35.836315 6.0041234E-3
+ 39.55 9.9489355 35.835613 7.044868E-3
+ 39.55 10.40181 35.77955 7.449007E-3
+ 39.55 10.627703 35.666034 7.690096E-3
+ 39.55 10.862527 35.563167 7.6923114E-3
+ 39.55 11.283881 35.546604 7.076579E-3
+ 39.55 11.662689 35.581851 6.2767723E-3
+ 39.55 12.050284 35.624507 5.6020254E-3
+ 39.55 12.360879 35.657474 5.1443334E-3
+ 39.55 12.659939 35.6923 4.8324936E-3
+ 39.55 12.870185 35.71281 4.5733107E-3
+ 39.55 13.067308 35.736034 4.35266E-3
+ 39.55 13.324803 35.770244 4.1516064E-3
+ 39.55 13.50569 35.792407 3.943199E-3
+ 39.55 13.663257 35.812587 3.7242895E-3
+ 39.55 13.825182 35.834854 3.5033796E-3
+ 39.55 13.936762 35.850296 3.2952863E-3
+ 39.55 14.032116 35.864345 3.1014301E-3
+ 39.55 14.107293 35.873725 2.9168156E-3
+ 39.55 14.18241 35.88354 2.7437794E-3
+ 39.55 14.257094 35.8927 2.580535E-3
+ 39.55 14.309797 35.89987 2.4271155E-3
+ 39.55 14.377525 35.90725 2.279382E-3
+ 39.55 14.432199 35.91382 2.1292727E-3
+ 39.55 14.475072 35.91846 1.9755151E-3
+ 39.55 14.527786 35.923053 1.8190705E-3
+ 39.55 14.578961 35.92799 1.6627391E-3
+ 39.55 14.642944 35.93367 1.501751E-3
+ 39.55 14.69364 35.93768 1.3314089E-3
+ 39.55 14.768669 35.947372 1.1553536E-3
+ 39.55 14.846884 35.95855 9.729144E-4
+ 39.55 14.939597 35.967586 7.823545E-4
+ 39.55 15.036996 35.975643 5.801333E-4
+ 39.55 15.148908 35.983127 3.6804014E-4
+ 39.55 15.289736 35.99955 1.4949215E-4
+ 39.55 15.485355 36.015785 -7.41405E-5
+ 39.55 15.658598 36.033203 -3.035937E-4
+ 39.55 15.916321 36.04694 -5.658068E-4
+ 39.55 16.334724 36.061267 -8.82966E-4
+ 39.55 16.822277 36.06717 -1.2608083E-3
+ 39.55 17.412283 36.074867 -1.7115665E-3
+ 39.55 18.09948 36.08202 -2.2292556E-3
+ 39.55 19.1057 36.09247 -2.751337E-3
+ 39.55 20.000572 36.104915 -3.2307207E-3
+ 39.55 20.581402 36.124877 -3.6446494E-3
+ 39.55 20.929226 36.14124 -3.9381165E-3
+ 39.55 20.995619 36.149482 -4.127753E-3
+ 39.55 21.017115 36.160533 -4.2771864E-3
+ 39.55 21.03292 36.169132 -4.4055916E-3
+ 39.55 21.02738 36.172367 -4.513894E-3
+ 39.55 20.958841 36.169944 -4.648217E-3
+ 39.6 2.5360357 34.898246 0.0E+0
+ 39.6 2.520799 34.89943 -4.4886648E-4
+ 39.6 2.5276916 34.905887 -9.0013816E-4
+ 39.6 2.5472562 34.91435 -1.2259062E-3
+ 39.6 2.5831193 34.923213 -1.262161E-3
+ 39.6 2.6618232 34.93554 -1.0109761E-3
+ 39.6 2.7718477 34.948066 -5.6916574E-4
+ 39.6 2.948505 34.960983 -9.047969E-5
+ 39.6 3.1615438 34.972816 2.945731E-4
+ 39.6 3.485724 34.993316 6.2290835E-4
+ 39.6 3.8052861 35.01136 1.0250286E-3
+ 39.6 4.291537 35.071704 1.773207E-3
+ 39.6 4.9462194 35.158256 2.8738623E-3
+ 39.6 6.149052 35.342067 3.957705E-3
+ 39.6 7.9990963 35.656833 5.037336E-3
+ 39.6 9.301777 35.834293 6.2449346E-3
+ 39.6 9.937716 35.83231 7.2339023E-3
+ 39.6 10.387559 35.776283 7.5809885E-3
+ 39.6 10.6137 35.66226 7.7914753E-3
+ 39.6 10.851146 35.561042 7.7857025E-3
+ 39.6 11.276238 35.546096 7.1730492E-3
+ 39.6 11.657308 35.58194 6.399782E-3
+ 39.6 12.043869 35.62431 5.7641272E-3
+ 39.6 12.355801 35.657325 5.335412E-3
+ 39.6 12.655753 35.69233 5.044345E-3
+ 39.6 12.865342 35.71282 4.8006153E-3
+ 39.6 13.061704 35.735805 4.591622E-3
+ 39.6 13.317167 35.769767 4.396494E-3
+ 39.6 13.495119 35.791477 4.190156E-3
+ 39.6 13.650463 35.811454 3.9728E-3
+ 39.6 13.811166 35.83362 3.7526318E-3
+ 39.6 13.921824 35.848854 3.544688E-3
+ 39.6 14.01575 35.86262 3.3515202E-3
+ 39.6 14.090114 35.871906 3.1683878E-3
+ 39.6 14.164576 35.881534 2.9973732E-3
+ 39.6 14.238438 35.89058 2.836065E-3
+ 39.6 14.290345 35.897464 2.684345E-3
+ 39.6 14.356683 35.904666 2.5381837E-3
+ 39.6 14.410504 35.911205 2.3900042E-3
+ 39.6 14.452439 35.915843 2.23889E-3
+ 39.6 14.504817 35.920494 2.0854743E-3
+ 39.6 14.555582 35.9254 1.9323998E-3
+ 39.6 14.617733 35.9309 1.7750962E-3
+ 39.6 14.667711 35.934986 1.6088532E-3
+ 39.6 14.74148 35.94448 1.437123E-3
+ 39.6 14.818474 35.955535 1.2593385E-3
+ 39.6 14.90975 35.96442 1.0736692E-3
+ 39.6 15.005223 35.972354 8.763752E-4
+ 39.6 15.116823 35.979804 6.689967E-4
+ 39.6 15.257973 35.996536 4.550159E-4
+ 39.6 15.45385 36.01281 2.3512827E-4
+ 39.6 15.624237 36.0296 9.817019E-6
+ 39.6 15.874837 36.04261 -2.462314E-4
+ 39.6 16.287798 36.056632 -5.5585813E-4
+ 39.6 16.76859 36.06192 -9.214249E-4
+ 39.6 17.35339 36.069755 -1.351773E-3
+ 39.6 18.035725 36.076354 -1.8438637E-3
+ 39.6 19.047312 36.086856 -2.3481443E-3
+ 39.6 19.94636 36.099254 -2.8270641E-3
+ 39.6 20.532904 36.118312 -3.249003E-3
+ 39.6 20.889343 36.133182 -3.5469185E-3
+ 39.6 20.957607 36.140396 -3.7360102E-3
+ 39.6 20.978403 36.15054 -3.8839203E-3
+ 39.6 20.993668 36.158416 -4.011894E-3
+ 39.6 20.98918 36.161453 -4.121442E-3
+ 39.6 20.922386 36.159225 -4.2589846E-3
+ 39.65 2.5362391 34.898464 0.0E+0
+ 39.65 2.520966 34.89967 -4.4000544E-4
+ 39.65 2.5278692 34.906112 -8.8219833E-4
+ 39.65 2.5476827 34.9145 -1.1964292E-3
+ 39.65 2.5839173 34.923236 -1.2231641E-3
+ 39.65 2.6624867 34.93544 -9.690295E-4
+ 39.65 2.7722861 34.94785 -5.338127E-4
+ 39.65 2.9481978 34.960716 -6.894684E-5
+ 39.65 3.1611843 34.972587 3.0385816E-4
+ 39.65 3.4849245 34.993022 6.3218484E-4
+ 39.65 3.8031013 35.01076 1.0508467E-3
+ 39.65 4.283829 35.06993 1.8465396E-3
+ 39.65 4.9319396 35.155235 3.0111744E-3
+ 39.65 6.132726 35.33854 4.149077E-3
+ 39.65 7.986896 35.65346 5.2640726E-3
+ 39.65 9.296406 35.832035 6.4628184E-3
+ 39.65 9.925989 35.82897 7.3933117E-3
+ 39.65 10.372719 35.772937 7.6783993E-3
+ 39.65 10.598929 35.658332 7.85382E-3
+ 39.65 10.839398 35.558834 7.836308E-3
+ 39.65 11.268284 35.545505 7.225099E-3
+ 39.65 11.651891 35.58194 6.4777173E-3
+ 39.65 12.037444 35.624027 5.8806696E-3
+ 39.65 12.350797 35.65712 5.480231E-3
+ 39.65 12.651496 35.692276 5.209075E-3
+ 39.65 12.860516 35.712757 4.9800574E-3
+ 39.65 13.056052 35.7355 4.782112E-3
+ 39.65 13.309094 35.769153 4.5924605E-3
+ 39.65 13.484039 35.7904 4.3879156E-3
+ 39.65 13.637119 35.810157 4.1719693E-3
+ 39.65 13.79647 35.832202 3.9525E-3
+ 39.65 13.906184 35.847225 3.744692E-3
+ 39.65 13.998711 35.860706 3.5522046E-3
+ 39.65 14.072359 35.869907 3.370561E-3
+ 39.65 14.146181 35.879337 3.2015682E-3
+ 39.65 14.219213 35.888275 3.0421898E-3
+ 39.65 14.270333 35.89488 2.892156E-3
+ 39.65 14.335291 35.90191 2.7475592E-3
+ 39.65 14.388342 35.908416 2.6013264E-3
+ 39.65 14.429432 35.91306 2.4528976E-3
+ 39.65 14.481514 35.917774 2.3025698E-3
+ 39.65 14.53194 35.92266 2.1528163E-3
+ 39.65 14.592324 35.92798 1.9992911E-3
+ 39.65 14.641665 35.932155 1.837277E-3
+ 39.65 14.714222 35.941463 1.67002E-3
+ 39.65 14.790023 35.952384 1.4970693E-3
+ 39.65 14.879839 35.961116 1.3165012E-3
+ 39.65 14.973441 35.96894 1.1243856E-3
+ 39.65 15.084739 35.97637 9.2200166E-4
+ 39.65 15.226124 35.993377 7.128925E-4
+ 39.65 15.422038 36.009677 4.970885E-4
+ 39.65 15.589756 36.025817 2.7627791E-4
+ 39.65 15.833342 36.038112 2.6869979E-5
+ 39.65 16.240961 36.051822 -2.745925E-4
+ 39.65 16.715757 36.056503 -6.270367E-4
+ 39.65 17.29617 36.06451 -1.0358427E-3
+ 39.65 17.973713 36.070533 -1.5008623E-3
+ 39.65 18.989147 36.0811 -1.9858181E-3
+ 39.65 19.891138 36.093494 -2.4628767E-3
+ 39.65 20.483465 36.111667 -2.8915132E-3
+ 39.65 20.849113 36.125045 -3.193028E-3
+ 39.65 20.919624 36.131286 -3.3812145E-3
+ 39.65 20.939772 36.14056 -3.5274145E-3
+ 39.65 20.954454 36.147747 -3.6548087E-3
+ 39.65 20.950872 36.150585 -3.7654757E-3
+ 39.65 20.885864 36.14856 -3.9061238E-3
+ 39.7 2.5363276 34.89867 0.0E+0
+ 39.7 2.5210444 34.89989 -4.301292E-4
+ 39.7 2.5279777 34.906326 -8.624611E-4
+ 39.7 2.5480632 34.914646 -1.1643802E-3
+ 39.7 2.5846595 34.923252 -1.1813884E-3
+ 39.7 2.6630647 34.935333 -9.2470285E-4
+ 39.7 2.7726123 34.947628 -4.9709843E-4
+ 39.7 2.9477694 34.96044 -4.742745E-5
+ 39.7 3.1606514 34.97234 3.1185106E-4
+ 39.7 3.483847 34.992687 6.3872913E-4
+ 39.7 3.8004615 35.010086 1.071841E-3
+ 39.7 4.2753534 35.068004 1.911943E-3
+ 39.7 4.916912 35.15206 3.1368883E-3
+ 39.7 6.1152653 35.33478 4.3252962E-3
+ 39.7 7.972875 35.64972 5.471558E-3
+ 39.7 9.289699 35.82952 6.6555165E-3
+ 39.7 9.913754 35.8256 7.5210602E-3
+ 39.7 10.357297 35.76952 7.7394256E-3
+ 39.7 10.583404 35.654266 7.875299E-3
+ 39.7 10.827283 35.556545 7.84208E-3
+ 39.7 11.260006 35.544837 7.230398E-3
+ 39.7 11.64642 35.581844 6.507796E-3
+ 39.7 12.030995 35.62366 5.9483442E-3
+ 39.7 12.345842 35.656845 5.575073E-3
+ 39.7 12.647137 35.69213 5.322648E-3
+ 39.7 12.855671 35.712627 5.107348E-3
+ 39.7 13.05032 35.735122 4.919638E-3
+ 39.7 13.300556 35.768402 4.7348784E-3
+ 39.7 13.472435 35.789176 4.53176E-3
+ 39.7 13.623215 35.8087 4.317005E-3
+ 39.7 13.781085 35.83061 4.098129E-3
+ 39.7 13.889837 35.8454 3.8903933E-3
+ 39.7 13.980994 35.858596 3.6985264E-3
+ 39.7 14.054024 35.86772 3.518322E-3
+ 39.7 14.127219 35.876956 3.351293E-3
+ 39.7 14.199415 35.885787 3.1937835E-3
+ 39.7 14.249757 35.89211 3.0453708E-3
+ 39.7 14.313352 35.89897 2.9022821E-3
+ 39.7 14.365718 35.905452 2.7579632E-3
+ 39.7 14.40606 35.910114 2.6122073E-3
+ 39.7 14.457886 35.91489 2.4649687E-3
+ 39.7 14.508044 35.919765 2.3185426E-3
+ 39.7 14.566733 35.92491 2.1688295E-3
+ 39.7 14.615522 35.92919 2.011111E-3
+ 39.7 14.686918 35.938316 1.848411E-3
+ 39.7 14.761558 35.949104 1.680406E-3
+ 39.7 14.849896 35.957672 1.505083E-3
+ 39.7 14.941687 35.9654 1.31833E-3
+ 39.7 15.052694 35.972827 1.1211561E-3
+ 39.7 15.194223 35.99008 9.1716105E-4
+ 39.7 15.389952 36.006393 7.0572545E-4
+ 39.7 15.555194 36.021865 4.8971793E-4
+ 39.7 15.791904 36.03344 2.473544E-4
+ 39.7 16.194298 36.04684 -4.539424E-5
+ 39.7 16.663898 36.05093 -3.8398761E-4
+ 39.7 17.240757 36.059146 -7.7029922E-4
+ 39.7 17.913622 36.064567 -1.206989E-3
+ 39.7 18.931341 36.075206 -1.6712425E-3
+ 39.7 19.835037 36.08765 -2.145041E-3
+ 39.7 20.433203 36.104953 -2.5789814E-3
+ 39.7 20.80861 36.116836 -2.8832077E-3
+ 39.7 20.881725 36.122165 -3.0701474E-3
+ 39.7 20.901276 36.13061 -3.214483E-3
+ 39.7 20.915348 36.13714 -3.3411716E-3
+ 39.7 20.912523 36.139781 -3.4528372E-3
+ 39.7 20.849327 36.137962 -3.5964713E-3
+ 39.75 2.5363013 34.89885 0.0E+0
+ 39.75 2.5210356 34.9001 -4.1931314E-4
+ 39.75 2.5280168 34.90652 -8.41094E-4
+ 39.75 2.5483968 34.914775 -1.1300248E-3
+ 39.75 2.5853438 34.923255 -1.1371718E-3
+ 39.75 2.6635544 34.93521 -8.7834184E-4
+ 39.75 2.772824 34.9474 -4.5930786E-4
+ 39.75 2.9472184 34.960163 -2.6103144E-5
+ 39.75 3.1599438 34.972072 3.1845291E-4
+ 39.75 3.4824895 34.992313 6.4240914E-4
+ 39.75 3.7973687 35.00934 1.0876899E-3
+ 39.75 4.2661247 35.065933 1.9686524E-3
+ 39.75 4.9011607 35.148742 3.2496766E-3
+ 39.75 6.0966825 35.33081 4.48457E-3
+ 39.75 7.9569993 35.6456 5.6577324E-3
+ 39.75 9.281574 35.82675 6.8209986E-3
+ 39.75 9.90101 35.822204 7.615404E-3
+ 39.75 10.341301 35.766033 7.762589E-3
+ 39.75 10.567139 35.650074 7.854459E-3
+ 39.75 10.814802 35.55418 7.8013902E-3
+ 39.75 11.251393 35.544086 7.187068E-3
+ 39.75 11.640875 35.581653 6.487713E-3
+ 39.75 12.024505 35.62321 5.9643476E-3
+ 39.75 12.340907 35.6565 5.616748E-3
+ 39.75 12.642638 35.69189 5.381574E-3
+ 39.75 12.850771 35.71242 5.1787565E-3
+ 39.75 13.044474 35.734664 5.00028E-3
+ 39.75 13.29153 35.76751 4.8197014E-3
+ 39.75 13.460289 35.787807 4.61756E-3
+ 39.75 13.608742 35.807083 4.4037057E-3
+ 39.75 13.765005 35.82883 4.185262E-3
+ 39.75 13.872777 35.843387 3.9774854E-3
+ 39.75 13.962598 35.856292 3.786131E-3
+ 39.75 14.035105 35.865352 3.6072637E-3
+ 39.75 14.107686 35.87439 3.4420855E-3
+ 39.75 14.179041 35.883117 3.2863311E-3
+ 39.75 14.228618 35.88916 3.1394262E-3
+ 39.75 14.290871 35.89586 2.9977436E-3
+ 39.75 14.342635 35.902317 2.8552585E-3
+ 39.75 14.382331 35.907005 2.7121105E-3
+ 39.75 14.433939 35.911853 2.5679087E-3
+ 39.75 14.483903 35.916725 2.424761E-3
+ 39.75 14.540975 35.921695 2.2788352E-3
+ 39.75 14.589295 35.926097 2.1254182E-3
+ 39.75 14.659587 35.935047 1.967296E-3
+ 39.75 14.733104 35.945697 1.8042854E-3
+ 39.75 14.819948 35.95409 1.6342852E-3
+ 39.75 14.909997 35.961742 1.4530134E-3
+ 39.75 15.020718 35.969184 1.2612021E-3
+ 39.75 15.1623 35.986644 1.0625029E-3
+ 39.75 15.357622 36.002952 8.556679E-4
+ 39.75 15.520588 36.01775 6.447102E-4
+ 39.75 15.750589 36.0286 4.0972392E-4
+ 39.75 16.14788 36.041694 1.2615649E-4
+ 39.75 16.613115 36.0452 -1.9797674E-4
+ 39.75 17.18727 36.05366 -5.610222E-4
+ 39.75 17.855616 36.05846 -9.6834E-4
+ 39.75 18.874025 36.069187 -1.4106651E-3
+ 39.75 19.7782 36.08172 -1.8798095E-3
+ 39.75 20.382238 36.09817 -2.3175885E-3
+ 39.75 20.767908 36.108566 -2.6236048E-3
+ 39.75 20.843964 36.113044 -2.8089771E-3
+ 39.75 20.862967 36.120712 -2.9513263E-3
+ 39.75 20.876402 36.126605 -3.0772048E-3
+ 39.75 20.874182 36.129055 -3.1897537E-3
+ 39.75 20.812822 36.127452 -3.3362524E-3
+ 39.8 2.536162 34.899013 0.0E+0
+ 39.8 2.5209407 34.900295 -4.076337E-4
+ 39.8 2.527986 34.906703 -8.182631E-4
+ 39.8 2.548683 34.914897 -1.0936289E-3
+ 39.8 2.5859682 34.92325 -1.0908521E-3
+ 39.8 2.663954 34.935085 -8.302924E-4
+ 39.8 2.7729194 34.947162 -4.2072407E-4
+ 39.8 2.9465446 34.959877 -5.1486504E-6
+ 39.8 3.1590611 34.971794 3.2357792E-4
+ 39.8 3.480852 34.991897 6.43118E-4
+ 39.8 3.793829 35.00852 1.0981183E-3
+ 39.8 4.2561635 35.063716 2.015981E-3
+ 39.8 4.8847146 35.14529 3.348321E-3
+ 39.8 6.076998 35.326622 4.6252445E-3
+ 39.8 7.939245 35.641105 5.820721E-3
+ 39.8 9.271959 35.823707 6.957483E-3
+ 39.8 9.887756 35.81879 7.6749087E-3
+ 39.8 10.324743 35.762485 7.746765E-3
+ 39.8 10.550158 35.645763 7.7902465E-3
+ 39.8 10.801956 35.55175 7.7130594E-3
+ 39.8 11.242431 35.543254 7.0937145E-3
+ 39.8 11.635236 35.581363 6.4156823E-3
+ 39.8 12.017955 35.62267 5.9264213E-3
+ 39.8 12.33596 35.656093 5.602636E-3
+ 39.8 12.63796 35.691547 5.382953E-3
+ 39.8 12.845774 35.71213 5.191165E-3
+ 39.8 13.038474 35.734127 5.020744E-3
+ 39.8 13.281988 35.76647 4.843518E-3
+ 39.8 13.447588 35.78629 4.6418304E-3
+ 39.8 13.593691 35.8053 4.4285217E-3
+ 39.8 13.748225 35.826873 4.210295E-3
+ 39.8 13.855 35.841186 4.0023224E-3
+ 39.8 13.943523 35.8538 3.811326E-3
+ 39.8 14.015601 35.8628 3.6336451E-3
+ 39.8 14.087578 35.87164 3.4701528E-3
+ 39.8 14.158088 35.880264 3.3159914E-3
+ 39.8 14.206912 35.886035 3.170436E-3
+ 39.8 14.267849 35.89258 3.0300151E-3
+ 39.8 14.319097 35.899017 2.889239E-3
+ 39.8 14.35825 35.90374 2.748585E-3
+ 39.8 14.409679 35.908657 2.6073162E-3
+ 39.8 14.459523 35.913543 2.467345E-3
+ 39.8 14.515062 35.918342 2.325127E-3
+ 39.8 14.562998 35.922874 2.1759588E-3
+ 39.8 14.632243 35.93166 2.0223762E-3
+ 39.8 14.70468 35.94217 1.8643467E-3
+ 39.8 14.79002 35.950382 1.6996835E-3
+ 39.8 14.8784 35.95797 1.5239489E-3
+ 39.8 14.988839 35.96544 1.3375925E-3
+ 39.8 15.130385 35.98307 1.1443115E-3
+ 39.8 15.325077 35.99936 9.4225845E-4
+ 39.8 15.485971 36.013462 7.365432E-4
+ 39.8 15.709459 36.0236 5.091971E-4
+ 39.8 16.101782 36.03639 2.3519693E-4
+ 39.8 16.563505 36.03933 -7.398505E-5
+ 39.8 17.13581 36.048065 -4.1317247E-4
+ 39.8 17.799845 36.052227 -7.9029466E-4
+ 39.8 18.817327 36.063045 -1.2096206E-3
+ 39.8 19.720766 36.075706 -1.6727291E-3
+ 39.8 20.330706 36.09133 -2.1128198E-3
+ 39.8 20.727077 36.100254 -2.419677E-3
+ 39.8 20.806387 36.103942 -2.6031828E-3
+ 39.8 20.824894 36.11087 -2.7434548E-3
+ 39.8 20.83767 36.116165 -2.8684411E-3
+ 39.8 20.835901 36.118423 -2.9817637E-3
+ 39.8 20.776398 36.117046 -3.1310026E-3
+ 39.85 2.535912 34.899154 0.0E+0
+ 39.85 2.5207617 34.90048 -3.9516756E-4
+ 39.85 2.5278863 34.90687 -7.941317E-4
+ 39.85 2.5489215 34.915004 -1.0554555E-3
+ 39.85 2.5865311 34.923233 -1.0427654E-3
+ 39.85 2.6642625 34.934947 -7.808978E-4
+ 39.85 2.7728981 34.94692 -3.8162557E-4
+ 39.85 2.945749 34.959587 1.5269881E-5
+ 39.85 3.158005 34.971496 3.271546E-4
+ 39.85 3.478936 34.991443 6.4077554E-4
+ 39.85 3.7898507 35.00763 1.1029021E-3
+ 39.85 4.2454967 35.061363 2.0533278E-3
+ 39.85 4.8676085 35.14171 3.4317264E-3
+ 39.85 6.0562396 35.32223 4.7458247E-3
+ 39.85 7.919601 35.636241 5.958847E-3
+ 39.85 9.260786 35.820384 7.063453E-3
+ 39.85 9.873999 35.81536 7.6984683E-3
+ 39.85 10.307639 35.75889 7.6912003E-3
+ 39.85 10.532484 35.641353 7.682026E-3
+ 39.85 10.788748 35.54925 7.576374E-3
+ 39.85 11.233111 35.542343 6.9494484E-3
+ 39.85 11.62948 35.58097 6.290458E-3
+ 39.85 12.011325 35.62204 5.8328877E-3
+ 39.85 12.330967 35.65561 5.530727E-3
+ 39.85 12.633063 35.691104 5.324524E-3
+ 39.85 12.840637 35.711757 5.142111E-3
+ 39.85 13.032282 35.733497 4.978407E-3
+ 39.85 13.271906 35.765293 4.803603E-3
+ 39.85 13.434315 35.784622 4.601777E-3
+ 39.85 13.578055 35.803363 4.388602E-3
+ 39.85 13.730741 35.824737 4.17033E-3
+ 39.85 13.836506 35.838794 3.961966E-3
+ 39.85 13.923769 35.85112 3.7711334E-3
+ 39.85 13.995511 35.860073 3.5944427E-3
+ 39.85 14.066892 35.86871 3.4324245E-3
+ 39.85 14.136555 35.87723 3.2796487E-3
+ 39.85 14.184638 35.88274 3.1352431E-3
+ 39.85 14.244292 35.889133 2.995901E-3
+ 39.85 14.295107 35.895553 2.856669E-3
+ 39.85 14.333823 35.90032 2.7183492E-3
+ 39.85 14.385108 35.905315 2.5798622E-3
+ 39.85 14.434909 35.910217 2.4429168E-3
+ 39.85 14.489005 35.914852 2.3042752E-3
+ 39.85 14.53664 35.919525 2.159249E-3
+ 39.85 14.6049 35.928153 2.0101114E-3
+ 39.85 14.676304 35.93852 1.8569907E-3
+ 39.85 14.760132 35.94655 1.6976193E-3
+ 39.85 14.846922 35.954086 1.5274173E-3
+ 39.85 14.95708 35.961597 1.3465497E-3
+ 39.85 15.0985 35.979366 1.1587538E-3
+ 39.85 15.292344 35.99562 9.6161436E-4
+ 39.85 15.451373 36.009017 7.6128216E-4
+ 39.85 15.668572 36.018455 5.4177106E-4
+ 39.85 16.056065 36.030933 2.7764454E-4
+ 39.85 16.51515 36.03332 -1.6211727E-5
+ 39.85 17.086464 36.04237 -3.3112731E-4
+ 39.85 17.746437 36.04587 -6.7744805E-4
+ 39.85 18.761368 36.056793 -1.0728622E-3
+ 39.85 19.662891 36.069625 -1.528573E-3
+ 39.85 20.278736 36.084445 -1.9693973E-3
+ 39.85 20.686195 36.091907 -2.2761255E-3
+ 39.85 20.769037 36.094867 -2.457488E-3
+ 39.85 20.787102 36.101104 -2.595624E-3
+ 39.85 20.799198 36.10584 -2.7196563E-3
+ 39.85 20.797735 36.1079 -2.83365E-3
+ 39.85 20.74009 36.106754 -2.9855032E-3
+ 39.9 2.5355546 34.899272 0.0E+0
+ 39.9 2.5205018 34.900646 -3.8199135E-4
+ 39.9 2.527719 34.907024 -7.688589E-4
+ 39.9 2.5491125 34.9151 -1.0157631E-3
+ 39.9 2.587031 34.923202 -9.932425E-4
+ 39.9 2.6644794 34.9348 -7.304959E-4
+ 39.9 2.77276 34.94667 -3.422844E-4
+ 39.9 2.944833 34.959293 3.499646E-5
+ 39.9 3.1567776 34.971187 3.2912692E-4
+ 39.9 3.4767456 34.990955 6.353303E-4
+ 39.9 3.7854464 35.006675 1.1018714E-3
+ 39.9 4.234156 35.058887 2.0801858E-3
+ 39.9 4.8498816 35.13801 3.4989332E-3
+ 39.9 6.034442 35.317653 4.844988E-3
+ 39.9 7.8980655 35.631011 6.0706534E-3
+ 39.9 9.247995 35.816776 7.137673E-3
+ 39.9 9.859742 35.811923 7.685318E-3
+ 39.9 10.290006 35.75524 7.595526E-3
+ 39.9 10.514151 35.636852 7.529592E-3
+ 39.9 10.775182 35.5467 7.391103E-3
+ 39.9 11.223421 35.541347 6.7539066E-3
+ 39.9 11.623582 35.580482 6.111363E-3
+ 39.9 12.00459 35.621322 5.682674E-3
+ 39.9 12.325889 35.65505 5.3996504E-3
+ 39.9 12.627904 35.690555 5.20469E-3
+ 39.9 12.835311 35.711292 5.0298222E-3
+ 39.9 13.025854 35.732784 4.871357E-3
+ 39.9 13.261259 35.763965 4.6979524E-3
+ 39.9 13.420459 35.78281 4.49534E-3
+ 39.9 13.561826 35.80126 4.281835E-3
+ 39.9 13.712555 35.82243 4.063214E-3
+ 39.9 13.817296 35.83622 3.8542298E-3
+ 39.9 13.903341 35.84826 3.6633305E-3
+ 39.9 13.974835 35.85717 3.4873937E-3
+ 39.9 14.045624 35.8656 3.3265945E-3
+ 39.9 14.114441 35.874027 3.1749573E-3
+ 39.9 14.161797 35.879276 3.0314661E-3
+ 39.9 14.220203 35.88553 2.892985E-3
+ 39.9 14.270669 35.89193 2.7550947E-3
+ 39.9 14.309055 35.89675 2.6189086E-3
+ 39.9 14.36023 35.901824 2.4830081E-3
+ 39.9 14.410063 35.90676 2.348894E-3
+ 39.9 14.462811 35.911235 2.2136494E-3
+ 39.9 14.510225 35.91606 2.0726073E-3
+ 39.9 14.577564 35.924545 1.9277678E-3
+ 39.9 14.647988 35.934757 1.7794296E-3
+ 39.9 14.730301 35.9426 1.6252478E-3
+ 39.9 14.815586 35.950096 1.460517E-3
+ 39.9 14.925462 35.95767 1.2851177E-3
+ 39.9 15.066668 35.97553 1.1028202E-3
+ 39.9 15.25945 35.991733 9.106793E-4
+ 39.9 15.416821 36.004417 7.158211E-4
+ 39.9 15.627982 36.013164 5.0427403E-4
+ 39.9 16.010792 36.025333 2.5025007E-4
+ 39.9 16.468128 36.027187 -2.8020271E-5
+ 39.9 17.039295 36.03657 -3.1842512E-4
+ 39.9 17.695509 36.03941 -6.335553E-4
+ 39.9 18.706266 36.050437 -1.004305E-3
+ 39.9 19.604729 36.063472 -1.4512832E-3
+ 39.9 20.226475 36.07752 -1.891224E-3
+ 39.9 20.64533 36.083538 -2.1968397E-3
+ 39.9 20.731955 36.08583 -2.3758055E-3
+ 39.9 20.749628 36.091426 -2.5117755E-3
+ 39.9 20.761036 36.09563 -2.6348133E-3
+ 39.9 20.759726 36.097492 -2.7493815E-3
+ 39.9 20.70394 36.09659 -2.9037231E-3
+ 39.95 2.535094 34.899372 0.0E+0
+ 39.95 2.5201647 34.900802 -3.6818091E-4
+ 39.95 2.5274851 34.90716 -7.4259855E-4
+ 39.95 2.5492563 34.915184 -9.7480393E-4
+ 39.95 2.5874671 34.923164 -9.426063E-4
+ 39.95 2.664605 34.934642 -6.794169E-4
+ 39.95 2.772506 34.94642 -3.0296365E-4
+ 39.95 2.943799 34.959 5.3886753E-5
+ 39.95 3.1553823 34.970863 3.2945533E-4
+ 39.95 3.474286 34.990432 6.267606E-4
+ 39.95 3.7806315 35.00566 1.0949137E-3
+ 39.95 4.222179 35.056293 2.0961482E-3
+ 39.95 4.8315782 35.134204 3.5491287E-3
+ 39.95 6.0116467 35.31289 4.9216016E-3
+ 39.95 7.87465 35.625423 6.1549143E-3
+ 39.95 9.233536 35.81288 7.1791992E-3
+ 39.95 9.844996 35.808486 7.6350425E-3
+ 39.95 10.271866 35.751556 7.459761E-3
+ 39.95 10.495191 35.63228 7.3331785E-3
+ 39.95 10.761264 35.54409 7.1575073E-3
+ 39.95 11.213352 35.540275 6.5072607E-3
+ 39.95 11.617517 35.57989 5.878299E-3
+ 39.95 11.997726 35.620517 5.475334E-3
+ 39.95 12.320687 35.654415 5.2086985E-3
+ 39.95 12.622439 35.6899 5.0225513E-3
+ 39.95 12.829749 35.71074 4.853246E-3
+ 39.95 13.019145 35.731975 4.6984194E-3
+ 39.95 13.250026 35.762496 4.525315E-3
+ 39.95 13.406006 35.780853 4.3212212E-3
+ 39.95 13.545002 35.79901 4.106882E-3
+ 39.95 13.693668 35.819946 3.8875737E-3
+ 39.95 13.797375 35.83347 3.6777101E-3
+ 39.95 13.882243 35.84522 3.4864831E-3
+ 39.95 13.953573 35.854095 3.3110287E-3
+ 39.95 14.023772 35.862323 3.1511567E-3
+ 39.95 14.091746 35.87065 3.0003758E-3
+ 39.95 14.138389 35.875652 2.8575311E-3
+ 39.95 14.195588 35.88177 2.7196635E-3
+ 39.95 14.245784 35.88816 2.582881E-3
+ 39.95 14.283949 35.893043 2.4485904E-3
+ 39.95 14.335046 35.8982 2.315043E-3
+ 39.95 14.384987 35.903175 2.1835253E-3
+ 39.95 14.436486 35.907493 2.0514556E-3
+ 39.95 14.483759 35.912483 1.9141932E-3
+ 39.95 14.550241 35.92083 1.7734569E-3
+ 39.95 14.619742 35.93089 1.6297242E-3
+ 39.95 14.700541 35.938537 1.4805776E-3
+ 39.95 14.78441 35.94601 1.3212042E-3
+ 39.95 14.894001 35.953655 1.1512012E-3
+ 39.95 15.034905 35.97157 9.743657E-4
+ 39.95 15.226418 35.987705 7.87264E-4
+ 39.95 15.38234 35.99967 5.97924E-4
+ 39.95 15.58774 36.00774 3.9440722E-4
+ 39.95 15.966018 36.019607 1.5063994E-4
+ 39.95 16.4225 36.02094 -1.1189516E-4
+ 39.95 16.994356 36.030685 -3.7772106E-4
+ 39.95 17.647158 36.03285 -6.614852E-4
+ 39.95 18.652134 36.043987 -1.0069786E-3
+ 39.95 19.54644 36.05726 -1.4439241E-3
+ 39.95 20.174065 36.07056 -1.8813371E-3
+ 39.95 20.604555 36.075157 -2.1848496E-3
+ 39.95 20.695175 36.076847 -2.3611895E-3
+ 39.95 20.71251 36.081844 -2.494993E-3
+ 39.95 20.72322 36.08556 -2.6170157E-3
+ 39.95 20.721918 36.087223 -2.7320694E-3
+ 39.95 20.667978 36.086563 -2.8887735E-3
+ 40.0 2.5345356 34.89945 0.0E+0
+ 40.0 2.5197546 34.900943 -3.5381101E-4
+ 40.0 2.5271875 34.907283 -7.154982E-4
+ 40.0 2.549354 34.915252 -9.3282165E-4
+ 40.0 2.5878396 34.923114 -8.911701E-4
+ 40.0 2.6646392 34.93448 -6.2798045E-4
+ 40.0 2.7721374 34.94616 -2.6391583E-4
+ 40.0 2.94265 34.9587 7.180941E-5
+ 40.0 3.153824 34.97053 3.2811751E-4
+ 40.0 3.471565 34.98988 6.150761E-4
+ 40.0 3.7754242 35.004592 1.0819763E-3
+ 40.0 4.209607 35.053592 2.1009135E-3
+ 40.0 4.812747 35.13031 3.5816568E-3
+ 40.0 5.987903 35.30796 4.9747326E-3
+ 40.0 7.8493776 35.61949 6.2106493E-3
+ 40.0 9.217367 35.808692 7.1873893E-3
+ 40.0 9.829772 35.805057 7.5475792E-3
+ 40.0 10.253244 35.74785 7.2843176E-3
+ 40.0 10.475645 35.62765 7.0934565E-3
+ 40.0 10.747002 35.541442 6.8763424E-3
+ 40.0 11.202898 35.539123 6.2102223E-3
+ 40.0 11.61126 35.579204 5.5917585E-3
+ 40.0 11.99071 35.619625 5.2110585E-3
+ 40.0 12.31532 35.653705 4.9578393E-3
+ 40.0 12.616624 35.689132 4.7779162E-3
+ 40.0 12.8239 35.710086 4.6120663E-3
+ 40.0 13.012111 35.73107 4.459179E-3
+ 40.0 13.238182 35.760883 4.285215E-3
+ 40.0 13.390946 35.77876 4.078909E-3
+ 40.0 13.527578 35.796607 3.863197E-3
+ 40.0 13.674085 35.8173 3.6428347E-3
+ 40.0 13.776748 35.830543 3.4318107E-3
+ 40.0 13.860485 35.84201 3.239969E-3
+ 40.0 13.931728 35.85086 3.0646957E-3
+ 40.0 14.001338 35.85888 2.9054272E-3
+ 40.0 14.068471 35.867115 2.7551907E-3
+ 40.0 14.114416 35.871875 2.6126983E-3
+ 40.0 14.170455 35.87787 2.475172E-3
+ 40.0 14.220458 35.884243 2.3392352E-3
+ 40.0 14.258509 35.889202 2.2065704E-3
+ 40.0 14.309559 35.894443 2.0751086E-3
+ 40.0 14.359682 35.899467 1.9459178E-3
+ 40.0 14.410034 35.903636 1.8167625E-3
+ 40.0 14.457241 35.908802 1.6830335E-3
+ 40.0 14.522934 35.91702 1.5461631E-3
+ 40.0 14.591574 35.926925 1.4068133E-3
+ 40.0 14.670864 35.934375 1.2625E-3
+ 40.0 14.75341 35.941833 1.1083207E-3
+ 40.0 14.862709 35.94956 9.4359565E-4
+ 40.0 15.003229 35.967487 7.7213975E-4
+ 40.0 15.193272 35.98354 5.9007713E-4
+ 40.0 15.347953 35.994773 4.0625568E-4
+ 40.0 15.547893 36.00219 2.1077598E-4
+ 40.0 15.921798 36.013755 -2.2651899E-5
+ 40.0 16.37832 36.014583 -2.6940944E-4
+ 40.0 16.951681 36.024715 -5.107534E-4
+ 40.0 17.601458 36.0262 -7.631855E-4
+ 40.0 18.599077 36.037456 -1.0829916E-3
+ 40.0 19.488195 36.050987 -1.5086463E-3
+ 40.0 20.121653 36.063575 -1.9418733E-3
+ 40.0 20.56394 36.06678 -2.2422932E-3
+ 40.0 20.658731 36.06793 -2.4158023E-3
+ 40.0 20.675774 36.072372 -2.5474654E-3
+ 40.0 20.68579 36.075634 -2.6684722E-3
+ 40.0 20.684353 36.07709 -2.7839303E-3
+ 40.0 20.632242 36.076686 -2.9428722E-3
+ 40.05 2.5338852 34.899505 0.0E+0
+ 40.05 2.5192766 34.90107 -3.389547E-4
+ 40.05 2.5268282 34.907386 -6.8769796E-4
+ 40.05 2.5494065 34.915313 -8.9005025E-4
+ 40.05 2.5881478 34.923053 -8.392353E-4
+ 40.05 2.6645841 34.934307 -5.764939E-4
+ 40.05 2.771657 34.9459 -2.2538048E-4
+ 40.05 2.9413897 34.9584 8.8647335E-5
+ 40.05 3.1521084 34.970184 3.2510916E-4
+ 40.05 3.4685916 34.989292 6.0031824E-4
+ 40.05 3.7698457 35.00347 1.063068E-3
+ 40.05 4.196488 35.0508 2.0942916E-3
+ 40.05 4.793442 35.12633 3.596027E-3
+ 40.05 5.963266 35.302875 5.003663E-3
+ 40.05 7.8222832 35.61322 6.237131E-3
+ 40.05 9.199459 35.80421 7.1619055E-3
+ 40.05 9.814084 35.801635 7.4232206E-3
+ 40.05 10.234166 35.744117 7.069996E-3
+ 40.05 10.455556 35.622982 6.811536E-3
+ 40.05 10.732403 35.538757 6.5488554E-3
+ 40.05 11.192053 35.537895 5.864044E-3
+ 40.05 11.604786 35.57842 5.2528236E-3
+ 40.05 11.983516 35.61865 4.8906803E-3
+ 40.05 12.309745 35.65292 4.6477252E-3
+ 40.05 12.610414 35.688255 4.4713113E-3
+ 40.05 12.817712 35.70934 4.3067145E-3
+ 40.05 13.004705 35.730075 4.15399E-3
+ 40.05 13.22571 35.759124 3.9779613E-3
+ 40.05 13.375272 35.776523 3.7686862E-3
+ 40.05 13.509556 35.79406 3.551041E-3
+ 40.05 13.653813 35.814487 3.3292367E-3
+ 40.05 13.755425 35.827453 3.1167536E-3
+ 40.05 13.838077 35.83864 2.9239912E-3
+ 40.05 13.909305 35.84747 2.748574E-3
+ 40.05 13.978322 35.855278 2.5895594E-3
+ 40.05 14.044619 35.863422 2.4395314E-3
+ 40.05 14.089882 35.867954 2.2970761E-3
+ 40.05 14.14481 35.87383 2.159599E-3
+ 40.05 14.194694 35.880195 2.0242237E-3
+ 40.05 14.232739 35.885234 1.8928884E-3
+ 40.05 14.28377 35.89056 1.7632157E-3
+ 40.05 14.334146 35.895645 1.6360528E-3
+ 40.05 14.383458 35.89967 1.5095184E-3
+ 40.05 14.430672 35.90502 1.3790408E-3
+ 40.05 14.495644 35.913116 1.2457607E-3
+ 40.05 14.563487 35.922866 1.1105307E-3
+ 40.05 14.641278 35.930114 9.708055E-4
+ 40.05 14.722599 35.937576 8.21614E-4
+ 40.05 14.831597 35.945392 6.620057E-4
+ 40.05 14.971652 35.96329 4.9580563E-4
+ 40.05 15.160036 35.97924 3.1874404E-4
+ 40.05 15.313678 35.989746 1.4040142E-4
+ 40.05 15.508486 35.99653 -4.7090106E-5
+ 40.05 15.878177 36.007797 -2.701635E-4
+ 40.05 16.33563 36.00814 -5.0120346E-4
+ 40.05 16.911287 36.01867 -7.1832153E-4
+ 40.05 17.558472 36.01948 -9.396595E-4
+ 40.05 18.547201 36.03085 -1.2335071E-3
+ 40.05 19.430157 36.044666 -1.6466624E-3
+ 40.05 20.069391 36.056571 -2.0740437E-3
+ 40.05 20.523558 36.05842 -2.3703898E-3
+ 40.05 20.62265 36.05908 -2.5408884E-3
+ 40.05 20.639448 36.06302 -2.6704638E-3
+ 40.05 20.648775 36.065864 -2.7904727E-3
+ 40.05 20.647066 36.067115 -2.9062617E-3
+ 40.05 20.596754 36.066967 -3.0673202E-3
+ 40.1 2.5331497 34.899543 0.0E+0
+ 40.1 2.5187363 34.901187 -3.236831E-4
+ 40.1 2.5264108 34.90748 -6.5932993E-4
+ 40.1 2.549415 34.91536 -8.4671244E-4
+ 40.1 2.5883922 34.922985 -7.8708922E-4
+ 40.1 2.6644408 34.934123 -5.252499E-4
+ 40.1 2.7710673 34.945636 -1.8758282E-4
+ 40.1 2.9400234 34.9581 1.0429877E-4
+ 40.1 3.1502423 34.96983 3.2044446E-4
+ 40.1 3.4653766 34.98868 5.8256083E-4
+ 40.1 3.7639198 35.002307 1.038261E-3
+ 40.1 4.1828713 35.047924 2.0762055E-3
+ 40.1 4.7737193 35.122283 3.591921E-3
+ 40.1 5.9377965 35.297657 5.0078965E-3
+ 40.1 7.7934136 35.606636 6.233896E-3
+ 40.1 9.179793 35.79944 7.1027167E-3
+ 40.1 9.797951 35.798236 7.2626085E-3
+ 40.1 10.214664 35.740375 6.817981E-3
+ 40.1 10.434972 35.61829 6.488952E-3
+ 40.1 10.717481 35.53604 6.176777E-3
+ 40.1 11.180812 35.536594 5.4705096E-3
+ 40.1 11.59807 35.577537 4.8631592E-3
+ 40.1 11.976117 35.617588 4.515668E-3
+ 40.1 12.30392 35.652053 4.2796893E-3
+ 40.1 12.603765 35.687267 4.1039823E-3
+ 40.1 12.811136 35.70849 3.938369E-3
+ 40.1 12.996881 35.728977 3.783978E-3
+ 40.1 13.21259 35.757232 3.6046514E-3
+ 40.1 13.358977 35.77416 3.3916383E-3
+ 40.1 13.490935 35.791374 3.1714835E-3
+ 40.1 13.632863 35.811527 2.947836E-3
+ 40.1 13.733418 35.824203 2.733584E-3
+ 40.1 13.815031 35.835113 2.5395818E-3
+ 40.1 13.88631 35.84393 2.3636778E-3
+ 40.1 13.954727 35.85153 2.204548E-3
+ 40.1 14.020196 35.859584 2.0543746E-3
+ 40.1 14.064791 35.86389 1.9116261E-3
+ 40.1 14.118664 35.86966 1.7738912E-3
+ 40.1 14.168497 35.87602 1.6387763E-3
+ 40.1 14.206643 35.88115 1.5084523E-3
+ 40.1 14.257678 35.886566 1.3802501E-3
+ 40.1 14.30838 35.89172 1.2547922E-3
+ 40.1 14.356761 35.895606 1.1305575E-3
+ 40.1 14.404049 35.901145 1.0030182E-3
+ 40.1 14.468368 35.909133 8.730208E-4
+ 40.1 14.535484 35.918724 7.416123E-4
+ 40.1 14.61179 35.925773 6.0619303E-4
+ 40.1 14.691986 35.933242 4.6174376E-4
+ 40.1 14.800671 35.94116 3.070534E-4
+ 40.1 14.940185 35.95899 1.4594806E-4
+ 40.1 15.126731 35.974815 -2.6184385E-5
+ 40.1 15.279536 35.984596 -1.9912439E-4
+ 40.1 15.469559 35.990764 -3.7872817E-4
+ 40.1 15.835199 36.00174 -5.914955E-4
+ 40.1 16.294462 36.001613 -8.069748E-4
+ 40.1 16.873177 36.01256 -1.0002746E-3
+ 40.1 17.518242 36.012706 -1.1909539E-3
+ 40.1 18.496595 36.02418 -1.4587294E-3
+ 40.1 19.372498 36.038303 -1.8582335E-3
+ 40.1 20.017431 36.04956 -2.2781211E-3
+ 40.1 20.483469 36.05008 -2.5694286E-3
+ 40.1 20.586956 36.050315 -2.7367623E-3
+ 40.1 20.603554 36.05379 -2.8643272E-3
+ 40.1 20.612204 36.05626 -2.9833738E-3
+ 40.1 20.610094 36.0573 -3.099429E-3
+ 40.1 20.561543 36.05741 -3.2624865E-3
+ 40.15 2.5323362 34.89956 0.0E+0
+ 40.15 2.5181396 34.90129 -3.0806486E-4
+ 40.15 2.5259387 34.90756 -6.305174E-4
+ 40.15 2.5493817 34.915393 -8.030183E-4
+ 40.15 2.588574 34.922904 -7.3500355E-4
+ 40.15 2.664212 34.933937 -4.7452456E-4
+ 40.15 2.7703726 34.94537 -1.5073192E-4
+ 40.15 2.9385557 34.957798 1.1867827E-4
+ 40.15 3.148234 34.969463 3.1415646E-4
+ 40.15 3.4619321 34.988044 5.6191056E-4
+ 40.15 3.7576725 35.001102 1.0076904E-3
+ 40.15 4.1688127 35.044975 2.0466966E-3
+ 40.15 4.7536396 35.118183 3.5691994E-3
+ 40.15 5.911564 35.292316 4.987169E-3
+ 40.15 7.762828 35.599746 6.2007512E-3
+ 40.15 9.158365 35.794376 7.0101E-3
+ 40.15 9.781392 35.794857 7.066728E-3
+ 40.15 10.194771 35.736633 6.5298276E-3
+ 40.15 10.413944 35.61359 6.1276573E-3
+ 40.15 10.702247 35.533306 5.7623093E-3
+ 40.15 11.169173 35.53522 5.03192E-3
+ 40.15 11.591087 35.576564 4.425003E-3
+ 40.15 11.968489 35.616447 4.0881186E-3
+ 40.15 12.297802 35.651107 3.8557362E-3
+ 40.15 12.596634 35.686164 3.6778836E-3
+ 40.15 12.804119 35.707534 3.5089482E-3
+ 40.15 12.988595 35.727783 3.3510327E-3
+ 40.15 13.198808 35.7552 3.1671638E-3
+ 40.15 13.342057 35.771667 2.949642E-3
+ 40.15 13.471719 35.788555 2.7263967E-3
+ 40.15 13.611247 35.80842 2.500499E-3
+ 40.15 13.710742 35.82081 2.2841638E-3
+ 40.15 13.791363 35.831447 2.0885951E-3
+ 40.15 13.86275 35.84025 1.9118501E-3
+ 40.15 13.930559 35.847633 1.7522225E-3
+ 40.15 13.995207 35.85561 1.6015387E-3
+ 40.15 14.03915 35.859703 1.4581565E-3
+ 40.15 14.092026 35.865375 1.3198483E-3
+ 40.15 14.141874 35.871726 1.1846808E-3
+ 40.15 14.180225 35.876956 1.0550349E-3
+ 40.15 14.231287 35.88246 9.2796643E-4
+ 40.15 14.282381 35.88769 8.038726E-4
+ 40.15 14.329943 35.891452 6.8159523E-4
+ 40.15 14.377369 35.897186 5.566559E-4
+ 40.15 14.441102 35.90508 4.2960705E-4
+ 40.15 14.507563 35.914505 3.0169246E-4
+ 40.15 14.582403 35.921352 1.7026487E-4
+ 40.15 14.661577 35.92884 3.0278903E-5
+ 40.15 14.769937 35.93686 -1.1972507E-4
+ 40.15 14.908838 35.954586 -2.7592908E-4
+ 40.15 15.09338 35.970272 -4.4323451E-4
+ 40.15 15.245542 35.979324 -6.1088055E-4
+ 40.15 15.431149 35.984912 -7.827442E-4
+ 40.15 15.792904 35.995594 -9.853127E-4
+ 40.15 16.254843 35.99502 -1.1854795E-3
+ 40.15 16.837336 36.006393 -1.355512E-3
+ 40.15 17.48079 36.005882 -1.5161578E-3
+ 40.15 18.447353 36.017463 -1.7579027E-3
+ 40.15 19.315386 36.031902 -2.1426673E-3
+ 40.15 19.965925 36.042545 -2.553439E-3
+ 40.15 20.443745 36.04178 -2.8387666E-3
+ 40.15 20.55167 36.041645 -3.0028072E-3
+ 40.15 20.568111 36.044704 -3.1284608E-3
+ 40.15 20.5761 36.046825 -3.246598E-3
+ 40.15 20.573471 36.04765 -3.3628635E-3
+ 40.15 20.526628 36.04803 -3.5278082E-3
+ 40.2 2.531453 34.899555 0.0E+0
+ 40.2 2.5174927 34.901386 -2.92166E-4
+ 40.2 2.5254156 34.90762 -6.013743E-4
+ 40.2 2.549308 34.91542 -7.591642E-4
+ 40.2 2.5886936 34.922813 -6.832328E-4
+ 40.2 2.6639 34.933742 -4.2457584E-4
+ 40.2 2.7695765 34.945102 -1.150194E-4
+ 40.2 2.936993 34.9575 1.3171748E-4
+ 40.2 3.1460916 34.969093 3.0629735E-4
+ 40.2 3.4582724 34.98739 5.385068E-4
+ 40.2 3.7511322 34.999866 9.715559E-4
+ 40.2 4.15437 35.041973 2.0059233E-3
+ 40.2 4.733268 35.114048 3.527905E-3
+ 40.2 5.8846397 35.286872 4.941452E-3
+ 40.2 7.7305974 35.59257 6.137774E-3
+ 40.2 9.13518 35.789031 6.8846344E-3
+ 40.2 9.764432 35.79151 6.8368953E-3
+ 40.2 10.174526 35.732902 6.207447E-3
+ 40.2 10.392527 35.608905 5.730002E-3
+ 40.2 10.686718 35.53056 5.3081046E-3
+ 40.2 11.157139 35.533786 4.5510744E-3
+ 40.2 11.583814 35.5755 3.941145E-3
+ 40.2 11.960608 35.615226 3.610738E-3
+ 40.2 12.291348 35.650085 3.3785263E-3
+ 40.2 12.588981 35.684955 3.1956632E-3
+ 40.2 12.796613 35.70648 3.0210942E-3
+ 40.2 12.979801 35.72649 2.8577921E-3
+ 40.2 13.18435 35.753036 2.6681418E-3
+ 40.2 13.324511 35.769054 2.4453513E-3
+ 40.2 13.451915 35.785614 2.2184404E-3
+ 40.2 13.588982 35.805171 1.9898866E-3
+ 40.2 13.687416 35.817272 1.7711553E-3
+ 40.2 13.76709 35.82765 1.5736928E-3
+ 40.2 13.838635 35.836437 1.3957473E-3
+ 40.2 13.905824 35.84361 1.2352329E-3
+ 40.2 13.969663 35.8515 1.0836676E-3
+ 40.2 14.01297 35.855396 9.3930814E-4
+ 40.2 14.064909 35.86098 8.0010766E-4
+ 40.2 14.114832 35.86733 6.6456844E-4
+ 40.2 14.15349 35.87267 5.352569E-4
+ 40.2 14.204598 35.878265 4.0897465E-4
+ 40.2 14.25615 35.88358 2.8589181E-4
+ 40.2 14.303004 35.88722 1.6521335E-4
+ 40.2 14.350627 35.89315 4.2516436E-5
+ 40.2 14.413844 35.900955 -8.193851E-5
+ 40.2 14.479724 35.910217 -2.0671047E-4
+ 40.2 14.553119 35.916862 -3.3448665E-4
+ 40.2 14.631378 35.92438 -4.703163E-4
+ 40.2 14.739397 35.93251 -6.158929E-4
+ 40.2 14.877618 35.95009 -7.674165E-4
+ 40.2 15.060004 35.96562 -9.300232E-4
+ 40.2 15.211713 35.97395 -1.0925124E-3
+ 40.2 15.393291 35.978984 -1.256826E-3
+ 40.2 15.751327 35.989376 -1.4493571E-3
+ 40.2 16.21678 35.988372 -1.6345441E-3
+ 40.2 16.803734 36.000183 -1.781995E-3
+ 40.2 17.446117 35.999027 -1.9134132E-3
+ 40.2 18.399553 36.010707 -2.1293205E-3
+ 40.2 19.258991 36.02547 -2.4983268E-3
+ 40.2 19.915024 36.035537 -2.8983985E-3
+ 40.2 20.404444 36.033527 -3.1768372E-3
+ 40.2 20.516811 36.033073 -3.3374824E-3
+ 40.2 20.533134 36.035755 -3.461345E-3
+ 40.2 20.540487 36.037574 -3.5786416E-3
+ 40.2 20.537224 36.038177 -3.695072E-3
+ 40.2 20.49203 36.038822 -3.8617984E-3
+ 40.25 2.5305085 34.899536 0.0E+0
+ 40.25 2.5168027 34.90147 -2.7604942E-4
+ 40.25 2.5248458 34.90767 -5.720049E-4
+ 40.25 2.549196 34.915431 -7.153323E-4
+ 40.25 2.588753 34.922714 -6.320128E-4
+ 40.25 2.6635081 34.93354 -3.7564203E-4
+ 40.25 2.7686841 34.94483 -8.0618076E-5
+ 40.25 2.9353413 34.957202 1.4336575E-4
+ 40.25 3.1438255 34.968715 2.9693846E-4
+ 40.25 3.4544122 34.986713 5.125212E-4
+ 40.25 3.7443292 34.998603 9.301197E-4
+ 40.25 4.1396026 35.03893 1.954164E-3
+ 40.25 4.71267 35.109886 3.4682666E-3
+ 40.25 5.857104 35.281345 4.8709586E-3
+ 40.25 7.6968045 35.58514 6.045318E-3
+ 40.25 9.110261 35.783412 6.7271953E-3
+ 40.25 9.747097 35.788204 6.574745E-3
+ 40.25 10.153967 35.729187 5.8530904E-3
+ 40.25 10.370778 35.60425 5.2987127E-3
+ 40.25 10.67091 35.527812 4.8172436E-3
+ 40.25 11.144712 35.532287 4.0312465E-3
+ 40.25 11.57623 35.57435 3.414902E-3
+ 40.25 11.95245 35.61393 3.0868155E-3
+ 40.25 12.284519 35.648986 2.8513497E-3
+ 40.25 12.580767 35.68363 2.6606365E-3
+ 40.25 12.78857 35.70532 2.478148E-3
+ 40.25 12.970457 35.725093 2.3076178E-3
+ 40.25 13.169207 35.750747 2.110971E-3
+ 40.25 13.306341 35.76633 1.8821736E-3
+ 40.25 13.431532 35.78256 1.6510359E-3
+ 40.25 13.566085 35.8018 1.4194298E-3
+ 40.25 13.663459 35.81361 1.1979975E-3
+ 40.25 13.742235 35.823726 9.983188E-4
+ 40.25 13.813979 35.832508 8.188147E-4
+ 40.25 13.880532 35.839466 6.5702403E-4
+ 40.25 13.943574 35.84728 5.0420686E-4
+ 40.25 13.986261 35.850986 3.585289E-4
+ 40.25 14.037329 35.85649 2.1811938E-4
+ 40.25 14.087381 35.86284 8.188841E-5
+ 40.25 14.126445 35.868293 -4.743625E-5
+ 40.25 14.177615 35.87398 -1.7328556E-4
+ 40.25 14.229686 35.87939 -2.9571657E-4
+ 40.25 14.275947 35.882915 -4.1516448E-4
+ 40.25 14.323818 35.889045 -5.3598976E-4
+ 40.25 14.386585 35.89677 -6.5822E-4
+ 40.25 14.451962 35.905872 -7.8021816E-4
+ 40.25 14.523941 35.91232 -9.047035E-4
+ 40.25 14.601392 35.919872 -1.0367061E-3
+ 40.25 14.709053 35.928115 -1.1781364E-3
+ 40.25 14.846532 35.945503 -1.3252232E-3
+ 40.25 15.026625 35.960857 -1.4832817E-3
+ 40.25 15.178061 35.968475 -1.6407754E-3
+ 40.25 15.356014 35.97299 -1.7977664E-3
+ 40.25 15.7105 35.983097 -1.9804704E-3
+ 40.25 16.180279 35.981685 -2.1510887E-3
+ 40.25 16.772331 35.99393 -2.2767686E-3
+ 40.25 17.414217 35.992156 -2.3799361E-3
+ 40.25 18.353273 36.003925 -2.5703455E-3
+ 40.25 19.203485 36.019016 -2.922652E-3
+ 40.25 19.864874 36.02854 -3.3104903E-3
+ 40.25 20.36563 36.025337 -3.5811702E-3
+ 40.25 20.482395 36.024616 -3.7383434E-3
+ 40.25 20.498636 36.026962 -3.8605546E-3
+ 40.25 20.50538 36.02851 -3.977095E-3
+ 40.25 20.501377 36.028884 -4.093654E-3
+ 40.25 20.457764 36.0298 -4.262065E-3
+ 40.3 2.5295116 34.8995 0.0E+0
+ 40.3 2.516077 34.901546 -2.597749E-4
+ 40.3 2.524234 34.907703 -5.4250343E-4
+ 40.3 2.5490481 34.915435 -6.7168934E-4
+ 40.3 2.5887534 34.922607 -5.8155995E-4
+ 40.3 2.66304 34.93333 -3.2794041E-4
+ 40.3 2.767701 34.944564 -4.7680965E-5
+ 40.3 2.9336082 34.956905 1.535907E-4
+ 40.3 3.141446 34.968334 2.8617013E-4
+ 40.3 3.4503684 34.986022 4.8415712E-4
+ 40.3 3.7372951 34.99732 8.8370655E-4
+ 40.3 4.124575 35.03586 1.8918152E-3
+ 40.3 4.6919145 35.10572 3.3906975E-3
+ 40.3 5.829038 35.27575 4.7761453E-3
+ 40.3 7.661543 35.57747 5.9240125E-3
+ 40.3 9.083643 35.77753 6.538947E-3
+ 40.3 9.729418 35.78494 6.2822112E-3
+ 40.3 10.133137 35.725502 5.469324E-3
+ 40.3 10.348759 35.599647 4.836868E-3
+ 40.3 10.654846 35.52507 4.293208E-3
+ 40.3 11.131899 35.530735 3.476154E-3
+ 40.3 11.568316 35.573116 2.8500873E-3
+ 40.3 11.943992 35.612567 2.5201945E-3
+ 40.3 12.277275 35.64781 2.2780955E-3
+ 40.3 12.571957 35.6822 2.0767564E-3
+ 40.3 12.779946 35.704055 1.8841183E-3
+ 40.3 12.960525 35.723602 1.7045625E-3
+ 40.3 13.153372 35.748336 1.4997432E-3
+ 40.3 13.28755 35.763496 1.264235E-3
+ 40.3 13.41058 35.779392 1.0283336E-3
+ 40.3 13.542579 35.79831 7.932958E-4
+ 40.3 13.638895 35.80983 5.6887156E-4
+ 40.3 13.716819 35.819694 3.6666585E-4
+ 40.3 13.788794 35.82847 1.8525246E-4
+ 40.3 13.854696 35.83521 2.1802369E-5
+ 40.3 13.916954 35.84295 -1.3262991E-4
+ 40.3 13.959038 35.846477 -2.7995981E-4
+ 40.3 14.009302 35.851917 -4.2188743E-4
+ 40.3 14.059531 35.85826 -5.5912527E-4
+ 40.3 14.099096 35.863845 -6.88809E-4
+ 40.3 14.150341 35.869617 -8.145783E-4
+ 40.3 14.202989 35.875133 -9.367169E-4
+ 40.3 14.248771 35.87855 -1.0553065E-3
+ 40.3 14.296938 35.884883 -1.1746383E-3
+ 40.3 14.359322 35.89254 -1.2950215E-3
+ 40.3 14.424273 35.90148 -1.4146264E-3
+ 40.3 14.494868 35.907726 -1.5361957E-3
+ 40.3 14.571618 35.91532 -1.6647174E-3
+ 40.3 14.678906 35.92368 -1.8022997E-3
+ 40.3 14.815585 35.94084 -1.9452104E-3
+ 40.3 14.993264 35.956 -2.098889E-3
+ 40.3 15.144603 35.962917 -2.2515682E-3
+ 40.3 15.319348 35.966945 -2.4014972E-3
+ 40.3 15.670452 35.976772 -2.5746284E-3
+ 40.3 16.145334 35.97497 -2.7311604E-3
+ 40.3 16.743073 35.987655 -2.8359941E-3
+ 40.3 17.385054 35.985282 -2.9120487E-3
+ 40.3 18.308578 35.997127 -3.0774413E-3
+ 40.3 19.14903 36.012546 -3.4121877E-3
+ 40.3 19.815622 36.02157 -3.7863238E-3
+ 40.3 20.327358 36.01722 -4.0484205E-3
+ 40.3 20.448435 36.016277 -4.2020725E-3
+ 40.3 20.464624 36.018325 -4.3227886E-3
+ 40.3 20.470793 36.01964 -4.438671E-3
+ 40.3 20.46596 36.019775 -4.555334E-3
+ 40.3 20.423843 36.020965 -4.725342E-3
+ 40.35 2.5284717 34.89945 0.0E+0
+ 40.35 2.5153224 34.901615 -2.4339872E-4
+ 40.35 2.523585 34.907726 -5.129542E-4
+ 40.35 2.5488667 34.91543 -6.2838656E-4
+ 40.35 2.5886974 34.922492 -5.320701E-4
+ 40.35 2.6624991 34.933116 -2.8166646E-4
+ 40.35 2.7666327 34.944297 -1.634045E-5
+ 40.35 2.9318015 34.956615 1.6237846E-4
+ 40.35 3.1389641 34.967952 2.7410153E-4
+ 40.35 3.4461576 34.985324 4.5364868E-4
+ 40.35 3.7300634 34.996025 8.327013E-4
+ 40.35 4.109351 35.032772 1.8193894E-3
+ 40.35 4.671073 35.10156 3.2957971E-3
+ 40.35 5.80053 35.270107 4.6577095E-3
+ 40.35 7.6249175 35.569583 5.7747554E-3
+ 40.35 9.055376 35.771396 6.3213305E-3
+ 40.35 9.711427 35.78172 5.96151E-3
+ 40.35 10.112084 35.721855 5.059007E-3
+ 40.35 10.326532 35.59511 4.3478687E-3
+ 40.35 10.638546 35.522342 3.739848E-3
+ 40.35 11.11871 35.529125 2.889924E-3
+ 40.35 11.560054 35.57181 2.2509768E-3
+ 40.35 11.935217 35.611133 1.9152343E-3
+ 40.35 12.26958 35.64656 1.6632142E-3
+ 40.35 12.562518 35.680667 1.4485734E-3
+ 40.35 12.770698 35.702682 1.2436402E-3
+ 40.35 12.949967 35.72201 1.053331E-3
+ 40.35 13.136842 35.74581 8.3921995E-4
+ 40.35 13.268148 35.760566 5.963414E-4
+ 40.35 13.389074 35.776134 3.551726E-4
+ 40.35 13.51849 35.794712 1.1634727E-4
+ 40.35 13.613753 35.805946 -1.113396E-4
+ 40.35 13.690869 35.815563 -3.1636585E-4
+ 40.35 13.7631 35.824333 -5.0002575E-4
+ 40.35 13.82833 35.830856 -6.6550594E-4
+ 40.35 13.889821 35.838527 -8.2190375E-4
+ 40.35 13.931318 35.841884 -9.712051E-4
+ 40.35 13.980847 35.84727 -1.114947E-3
+ 40.35 14.031296 35.853614 -1.2534967E-3
+ 40.35 14.071453 35.85933 -1.3838783E-3
+ 40.35 14.122783 35.865192 -1.5099143E-3
+ 40.35 14.176061 35.870815 -1.6321144E-3
+ 40.35 14.221479 35.87414 -1.750216E-3
+ 40.35 14.269982 35.880672 -1.8684337E-3
+ 40.35 14.332046 35.88827 -1.9873501E-3
+ 40.35 14.396652 35.897045 -2.104948E-3
+ 40.35 14.465899 35.903095 -2.2239848E-3
+ 40.35 14.542058 35.91074 -2.3493822E-3
+ 40.35 14.648954 35.919212 -2.4834261E-3
+ 40.35 14.784784 35.93611 -2.6224341E-3
+ 40.35 14.959944 35.95106 -2.7719156E-3
+ 40.35 15.11135 35.957286 -2.9199772E-3
+ 40.35 15.283318 35.96086 -3.063132E-3
+ 40.35 15.631207 35.970413 -3.2269831E-3
+ 40.35 16.111935 35.968246 -3.3699744E-3
+ 40.35 16.715893 35.98136 -3.4549916E-3
+ 40.35 17.358582 35.978424 -3.5052192E-3
+ 40.35 18.265533 35.99033 -3.646212E-3
+ 40.35 19.09579 36.006065 -3.9626257E-3
+ 40.35 19.767414 36.014625 -4.321666E-3
+ 40.35 20.289686 36.009181 -4.5744096E-3
+ 40.35 20.414938 36.008064 -4.7245156E-3
+ 40.35 20.431107 36.009853 -4.8439097E-3
+ 40.35 20.436739 36.010967 -4.959245E-3
+ 40.35 20.43099 36.010856 -5.0759976E-3
+ 40.35 20.390282 36.01232 -5.2475272E-3
+ 40.4 2.5273985 34.89938 0.0E+0
+ 40.4 2.5145468 34.901676 -2.2697364E-4
+ 40.4 2.522904 34.90774 -4.834314E-4
+ 40.4 2.5486543 34.915412 -5.8555923E-4
+ 40.4 2.588587 34.92237 -4.83718E-4
+ 40.4 2.66189 34.9329 -2.3699278E-4
+ 40.4 2.7654857 34.944034 1.3292422E-5
+ 40.4 2.9299287 34.95633 1.6973383E-4
+ 40.4 3.136392 34.967567 2.6085993E-4
+ 40.4 3.4417994 34.984615 4.2125946E-4
+ 40.4 3.7226684 34.99472 7.775466E-4
+ 40.4 4.093997 35.029685 1.7375132E-3
+ 40.4 4.6502175 35.097423 3.184347E-3
+ 40.4 5.7716703 35.26444 4.5165903E-3
+ 40.4 7.587043 35.561511 5.5987155E-3
+ 40.4 9.025526 35.76503 6.076052E-3
+ 40.4 9.69316 35.778556 5.615117E-3
+ 40.4 10.090855 35.718254 4.625265E-3
+ 40.4 10.304163 35.590656 3.8354105E-3
+ 40.4 10.622037 35.519638 3.161348E-3
+ 40.4 11.105157 35.527473 2.2770562E-3
+ 40.4 11.55143 35.57043 1.6222668E-3
+ 40.4 11.926105 35.609642 1.2767697E-3
+ 40.4 12.261399 35.64524 1.0116748E-3
+ 40.4 12.552422 35.67903 7.8119174E-4
+ 40.4 12.760789 35.70121 5.6193186E-4
+ 40.4 12.938751 35.72032 3.592325E-4
+ 40.4 13.119618 35.743175 1.3478266E-4
+ 40.4 13.248144 35.757545 -1.160706E-4
+ 40.4 13.367031 35.772785 -3.629685E-4
+ 40.4 13.493843 35.79102 -6.059064E-4
+ 40.4 13.588061 35.801967 -8.3710096E-4
+ 40.4 13.664414 35.81135 -1.0452182E-3
+ 40.4 13.736914 35.82011 -1.2314422E-3
+ 40.4 13.801453 35.826416 -1.3993045E-3
+ 40.4 13.862192 35.83402 -1.5579996E-3
+ 40.4 13.90312 35.837223 -1.7095729E-3
+ 40.4 13.951985 35.842567 -1.8554068E-3
+ 40.4 14.00269 35.848907 -1.9955581E-3
+ 40.4 14.043525 35.854766 -2.1269635E-3
+ 40.4 14.094949 35.860713 -2.2536015E-3
+ 40.4 14.148905 35.86645 -2.376206E-3
+ 40.4 14.194072 35.86969 -2.4941822E-3
+ 40.4 14.242945 35.876415 -2.6116608E-3
+ 40.4 14.304752 35.883964 -2.7294876E-3
+ 40.4 14.369093 35.89258 -2.8454642E-3
+ 40.4 14.437032 35.898437 -2.962354E-3
+ 40.4 14.51271 35.90613 -3.08499E-3
+ 40.4 14.619196 35.91472 -3.2158116E-3
+ 40.4 14.754134 35.93132 -3.3511978E-3
+ 40.4 14.926688 35.94604 -3.4966743E-3
+ 40.4 15.078317 35.95159 -3.640327E-3
+ 40.4 15.247947 35.954753 -3.7770178E-3
+ 40.4 15.592789 35.96404 -3.9319144E-3
+ 40.4 16.080057 35.96152 -4.0619676E-3
+ 40.4 16.690714 35.975063 -4.1282903E-3
+ 40.4 17.334736 35.971591 -4.1541145E-3
+ 40.4 18.224188 35.983547 -4.2714523E-3
+ 40.4 19.043917 35.99959 -4.5688534E-3
+ 40.4 19.720383 36.007717 -4.9114916E-3
+ 40.4 20.252665 36.001235 -5.1541714E-3
+ 40.4 20.381914 35.999984 -5.300734E-3
+ 40.4 20.398085 36.00155 -5.418991E-3
+ 40.4 20.403225 36.002494 -5.533904E-3
+ 40.4 20.39649 36.002132 -5.6507433E-3
+ 40.4 20.35709 36.00387 -5.823731E-3
+ 40.45 2.5263016 34.8993 0.0E+0
+ 40.45 2.5137574 34.901733 -2.105487E-4
+ 40.45 2.5221958 34.90774 -4.5399952E-4
+ 40.45 2.5484137 34.91539 -5.433268E-4
+ 40.45 2.588425 34.92224 -4.3665705E-4
+ 40.45 2.661217 34.93268 -1.9406877E-4
+ 40.45 2.7642667 34.94377 4.1128358E-5
+ 40.45 2.9279983 34.956047 1.7568015E-4
+ 40.45 3.1337416 34.967182 2.4659035E-4
+ 40.45 3.437312 34.983901 3.8728094E-4
+ 40.45 3.715145 34.99342 7.187401E-4
+ 40.45 4.0785794 35.026615 1.6469221E-3
+ 40.45 4.6294207 35.093326 3.0573057E-3
+ 40.45 5.7425527 35.258762 4.353961E-3
+ 40.45 7.5480437 35.553283 5.397319E-3
+ 40.45 8.994171 35.758441 5.805067E-3
+ 40.45 9.674657 35.775455 5.2457442E-3
+ 40.45 10.0695 35.714714 4.17146E-3
+ 40.45 10.281718 35.586307 3.303447E-3
+ 40.45 10.605345 35.516967 2.5621887E-3
+ 40.45 11.091255 35.52578 1.6423817E-3
+ 40.45 11.542434 35.568984 9.690306E-4
+ 40.45 11.916642 35.60809 6.100643E-4
+ 40.45 12.252704 35.643844 3.2891606E-4
+ 40.45 12.541646 35.67729 8.02191E-5
+ 40.45 12.750186 35.699634 -1.5525828E-4
+ 40.45 12.926847 35.71854 -3.71871E-4
+ 40.45 13.101706 35.740436 -6.076202E-4
+ 40.45 13.227554 35.754444 -8.669873E-4
+ 40.45 13.344472 35.76936 -1.1200261E-3
+ 40.45 13.468672 35.787242 -1.3673645E-3
+ 40.45 13.561852 35.79791 -1.6022806E-3
+ 40.45 13.637486 35.807067 -1.8137308E-3
+ 40.45 13.71026 35.81581 -2.0028112E-3
+ 40.45 13.774084 35.8219 -2.1733834E-3
+ 40.45 13.834092 35.82944 -2.3346832E-3
+ 40.45 13.874466 35.832504 -2.4888042E-3
+ 40.45 13.92274 35.837814 -2.6369853E-3
+ 40.45 13.973731 35.844154 -2.7790076E-3
+ 40.45 14.015324 35.85016 -2.911745E-3
+ 40.45 14.066849 35.85619 -3.0393034E-3
+ 40.45 14.121525 35.86205 -3.1626378E-3
+ 40.45 14.166554 35.86521 -3.2808382E-3
+ 40.45 14.215824 35.87213 -3.3979432E-3
+ 40.45 14.277435 35.87964 -3.5150481E-3
+ 40.45 14.341592 35.888092 -3.629784E-3
+ 40.45 14.408268 35.89376 -3.7449097E-3
+ 40.45 14.483572 35.901512 -3.8651463E-3
+ 40.45 14.589631 35.910205 -3.993063E-3
+ 40.45 14.723639 35.926475 -4.1251112E-3
+ 40.45 14.893518 35.94095 -4.266781E-3
+ 40.45 15.045517 35.945846 -4.4062403E-3
+ 40.45 15.213254 35.94864 -4.5367954E-3
+ 40.45 15.555216 35.95766 -4.6830913E-3
+ 40.45 16.049673 35.95481 -4.800857E-3
+ 40.45 16.667444 35.96877 -4.8496886E-3
+ 40.45 17.313437 35.9648 -4.8526562E-3
+ 40.45 18.18459 35.976787 -4.9472064E-3
+ 40.45 18.993565 35.993122 -5.2250097E-3
+ 40.45 19.67466 36.00086 -5.550038E-3
+ 40.45 20.216343 35.993396 -5.78201E-3
+ 40.45 20.349367 35.99205 -5.925058E-3
+ 40.45 20.36556 35.99342 -6.0423742E-3
+ 40.45 20.370255 35.99423 -6.1569996E-3
+ 40.45 20.362474 35.993602 -6.273936E-3
+ 40.45 20.324274 35.99561 -6.4483312E-3
+ 40.5 2.525191 34.899204 0.0E+0
+ 40.5 2.5129623 34.901782 -1.9416925E-4
+ 40.5 2.521466 34.90773 -4.2471353E-4
+ 40.5 2.5481474 34.91536 -5.017927E-4
+ 40.5 2.5882136 34.922107 -3.9101907E-4
+ 40.5 2.6604847 34.932456 -1.5302018E-4
+ 40.5 2.7629826 34.943511 6.710005E-5
+ 40.5 2.9260194 34.95577 1.8025919E-4
+ 40.5 3.1310265 34.966804 2.314545E-4
+ 40.5 3.432716 34.983184 3.5203067E-4
+ 40.5 3.7075293 34.992126 6.5683067E-4
+ 40.5 4.063165 35.02357 1.5484554E-3
+ 40.5 4.608756 35.089282 2.9158033E-3
+ 40.5 5.713273 35.2531 4.1712215E-3
+ 40.5 7.5080533 35.54493 5.1722447E-3
+ 40.5 8.961409 35.75166 5.510566E-3
+ 40.5 9.655959 35.77242 4.8563163E-3
+ 40.5 10.048074 35.71124 3.701161E-3
+ 40.5 10.259267 35.582073 2.756157E-3
+ 40.5 10.588502 35.51434 1.9471084E-3
+ 40.5 11.077025 35.524055 9.910185E-4
+ 40.5 11.533056 35.567481 2.9667196E-4
+ 40.5 11.906816 35.606487 -7.923995E-5
+ 40.5 12.243468 35.642383 -3.7920585E-4
+ 40.5 12.530171 35.67546 -6.4828823E-4
+ 40.5 12.738858 35.69796 -9.017082E-4
+ 40.5 12.91423 35.716667 -1.1336239E-3
+ 40.5 13.083114 35.73761 -1.3815324E-3
+ 40.5 13.206394 35.751266 -1.6498782E-3
+ 40.5 13.321418 35.765865 -1.9094122E-3
+ 40.5 13.443008 35.78339 -2.1613957E-3
+ 40.5 13.535163 35.793785 -2.400211E-3
+ 40.5 13.610117 35.802726 -2.615203E-3
+ 40.5 13.683162 35.811454 -2.807402E-3
+ 40.5 13.746248 35.817325 -2.9809814E-3
+ 40.5 13.805545 35.824802 -3.145164E-3
+ 40.5 13.845384 35.82774 -3.3020796E-3
+ 40.5 13.893138 35.833026 -3.4528356E-3
+ 40.5 13.94444 35.839363 -3.5969736E-3
+ 40.5 13.986866 35.84552 -3.7313282E-3
+ 40.5 14.038493 35.85164 -3.860103E-3
+ 40.5 14.093929 35.857624 -3.9844722E-3
+ 40.5 14.138929 35.860717 -4.103228E-3
+ 40.5 14.188618 35.86783 -4.2203087E-3
+ 40.5 14.25009 35.8753 -4.3370453E-3
+ 40.5 14.314143 35.88359 -4.4509093E-3
+ 40.5 14.379604 35.88908 -4.5646452E-3
+ 40.5 14.454642 35.89689 -4.6828393E-3
+ 40.5 14.560259 35.905685 -4.8081646E-3
+ 40.5 14.693305 35.921592 -4.9371565E-3
+ 40.5 14.860459 35.935802 -5.07522E-3
+ 40.5 15.012964 35.940067 -5.2107055E-3
+ 40.5 15.179259 35.942527 -5.3354664E-3
+ 40.5 15.518506 35.951286 -5.473537E-3
+ 40.5 16.020748 35.948135 -5.579708E-3
+ 40.5 16.645994 35.962493 -5.6123216E-3
+ 40.5 17.294588 35.958072 -5.5940896E-3
+ 40.5 18.146778 35.97007 -5.6668324E-3
+ 40.5 18.944876 35.98667 -5.924553E-3
+ 40.5 19.630367 35.99405 -6.2308716E-3
+ 40.5 20.180761 35.985671 -6.451563E-3
+ 40.5 20.317305 35.98426 -6.5911496E-3
+ 40.5 20.333534 35.98547 -6.707733E-3
+ 40.5 20.337833 35.98617 -6.8222163E-3
+ 40.5 20.328962 35.985275 -6.939271E-3
+ 40.5 20.29184 35.98755 -7.1150404E-3
+ 40.55 2.5240764 34.8991 0.0E+0
+ 40.55 2.512169 34.90183 -1.7787694E-4
+ 40.55 2.5207202 34.907714 -3.956194E-4
+ 40.55 2.5478584 34.915317 -4.6104492E-4
+ 40.55 2.5879566 34.92197 -3.4691437E-4
+ 40.55 2.6596984 34.93223 -1.1394916E-4
+ 40.55 2.7616405 34.943256 9.116221E-5
+ 40.55 2.9240007 34.955497 1.8353068E-4
+ 40.55 3.128259 34.966426 2.1562992E-4
+ 40.55 3.428031 34.98247 3.158502E-4
+ 40.55 3.6998562 34.990844 5.924144E-4
+ 40.55 4.0478196 35.02057 1.4430507E-3
+ 40.55 4.5882964 35.085308 2.7611332E-3
+ 40.55 5.6839284 35.24747 3.9699915E-3
+ 40.55 7.467214 35.536472 4.925412E-3
+ 40.55 8.927347 35.7447 5.1949555E-3
+ 40.55 9.637111 35.769454 4.4499454E-3
+ 40.55 10.02663 35.70784 3.218115E-3
+ 40.55 10.236878 35.577972 2.1979073E-3
+ 40.55 10.571539 35.51176 1.32106E-3
+ 40.55 11.062489 35.522296 3.283264E-4
+ 40.55 11.523294 35.56592 -3.891254E-4
+ 40.55 11.896619 35.604835 -7.851761E-4
+ 40.55 12.23367 35.640857 -1.106474E-3
+ 40.55 12.517983 35.673534 -1.3978844E-3
+ 40.55 12.726785 35.696186 -1.6707831E-3
+ 40.55 12.900883 35.714702 -1.9192392E-3
+ 40.55 13.063855 35.73469 -2.1800538E-3
+ 40.55 13.184686 35.748027 -2.457761E-3
+ 40.55 13.297897 35.762317 -2.72408E-3
+ 40.55 13.416888 35.77948 -2.980905E-3
+ 40.55 13.508031 35.789608 -3.2237565E-3
+ 40.55 13.582346 35.79834 -3.4424606E-3
+ 40.55 13.655647 35.80705 -3.638005E-3
+ 40.55 13.717972 35.812702 -3.8148546E-3
+ 40.55 13.77658 35.820125 -3.9821635E-3
+ 40.55 13.815901 35.82294 -4.1420874E-3
+ 40.55 13.863208 35.828216 -4.2956136E-3
+ 40.55 13.914837 35.834556 -4.442083E-3
+ 40.55 13.958167 35.84087 -4.578313E-3
+ 40.55 14.009897 35.847064 -4.708573E-3
+ 40.55 14.066126 35.853183 -4.834255E-3
+ 40.55 14.111204 35.85622 -4.9538742E-3
+ 40.55 14.161327 35.863506 -5.0712605E-3
+ 40.55 14.222714 35.870956 -5.187963E-3
+ 40.55 14.286742 35.87909 -5.3013074E-3
+ 40.55 14.351041 35.8844 -5.414014E-3
+ 40.55 14.425919 35.892265 -5.530513E-3
+ 40.55 14.531079 35.90116 -5.6535522E-3
+ 40.55 14.663139 35.916675 -5.779763E-3
+ 40.55 14.827536 35.930606 -5.9144194E-3
+ 40.55 14.980673 35.934265 -6.046151E-3
+ 40.55 15.145978 35.93643 -6.165466E-3
+ 40.55 15.482673 35.944942 -6.2957047E-3
+ 40.55 15.993242 35.941505 -6.3910065E-3
+ 40.55 16.626259 35.956245 -6.408734E-3
+ 40.55 17.278084 35.951416 -6.3710557E-3
+ 40.55 18.110785 35.963405 -6.4230756E-3
+ 40.55 18.897982 35.980243 -6.6603315E-3
+ 40.55 19.587622 35.9873 -6.9469567E-3
+ 40.55 20.145964 35.97807 -7.1558714E-3
+ 40.55 20.285727 35.97663 -7.292076E-3
+ 40.55 20.302006 35.9777 -7.408142E-3
+ 40.55 20.30596 35.978324 -7.5226374E-3
+ 40.55 20.295963 35.97715 -7.6398462E-3
+ 40.55 20.259792 35.979686 -7.816971E-3
+ 40.6 2.5229678 34.898986 0.0E+0
+ 40.6 2.5113842 34.901866 -1.6170977E-4
+ 40.6 2.5199637 34.90769 -3.667545E-4
+ 40.6 2.5475494 34.915275 -4.2115646E-4
+ 40.6 2.5876564 34.921825 -3.0443223E-4
+ 40.6 2.658863 34.932 -7.693432E-5
+ 40.6 2.7602481 34.943004 1.1329137E-4
+ 40.6 2.9219512 34.955234 1.8557171E-4
+ 40.6 3.1254532 34.966053 1.993088E-4
+ 40.6 3.4232783 34.981765 2.7910247E-4
+ 40.6 3.692162 34.989582 5.261299E-4
+ 40.6 4.032609 35.017623 1.3317344E-3
+ 40.6 4.568114 35.081417 2.594741E-3
+ 40.6 5.654618 35.241893 3.7520956E-3
+ 40.6 7.425674 35.52795 4.658965E-3
+ 40.6 8.89211 35.73759 4.860842E-3
+ 40.6 9.618158 35.766563 4.029902E-3
+ 40.6 10.005226 35.704524 2.7262126E-3
+ 40.6 10.214621 35.57402 1.633217E-3
+ 40.6 10.554492 35.50924 6.891692E-4
+ 40.6 11.047674 35.520523 -3.4014118E-4
+ 40.6 11.513147 35.56432 -1.0824496E-3
+ 40.6 11.886044 35.603145 -1.501508E-3
+ 40.6 12.223291 35.63927 -1.8463697E-3
+ 40.6 12.505074 35.671527 -2.1617962E-3
+ 40.6 12.713947 35.69432 -2.455501E-3
+ 40.6 12.886791 35.71265 -2.7215653E-3
+ 40.6 13.043947 35.7317 -2.9959087E-3
+ 40.6 13.162456 35.744735 -3.2832704E-3
+ 40.6 13.273937 35.75872 -3.556594E-3
+ 40.6 13.390353 35.77552 -3.818403E-3
+ 40.6 13.480499 35.78539 -4.065383E-3
+ 40.6 13.55421 35.793922 -4.287928E-3
+ 40.6 13.627746 35.802604 -4.4870045E-3
+ 40.6 13.689286 35.808044 -4.6673477E-3
+ 40.6 13.747227 35.81541 -4.8379884E-3
+ 40.6 13.786049 35.818126 -5.0010955E-3
+ 40.6 13.832982 35.823402 -5.1575526E-3
+ 40.6 13.884949 35.829734 -5.3065363E-3
+ 40.6 13.929245 35.83621 -5.444868E-3
+ 40.6 13.981078 35.842483 -5.5768527E-3
+ 40.6 14.038126 35.848735 -5.7040946E-3
+ 40.6 14.083388 35.851726 -5.824858E-3
+ 40.6 14.133953 35.859188 -5.942853E-3
+ 40.6 14.195305 35.866615 -6.059832E-3
+ 40.6 14.259386 35.87459 -6.172988E-3
+ 40.6 14.322578 35.879734 -6.2850075E-3
+ 40.6 14.3974 35.887657 -6.4001423E-3
+ 40.6 14.502091 35.89664 -6.521188E-3
+ 40.6 14.633148 35.911735 -6.6448836E-3
+ 40.6 14.794776 35.925373 -6.7763272E-3
+ 40.6 14.948659 35.928447 -6.9045205E-3
+ 40.6 15.113423 35.93037 -7.018742E-3
+ 40.6 15.44773 35.938632 -7.1415547E-3
+ 40.6 15.967104 35.934936 -7.2267395E-3
+ 40.6 16.608126 35.950035 -7.2309575E-3
+ 40.6 17.263798 35.94485 -7.1756686E-3
+ 40.6 18.076632 35.956806 -7.2081456E-3
+ 40.6 18.853008 35.973854 -7.424659E-3
+ 40.6 19.546528 35.98062 -7.6907332E-3
+ 40.6 20.111986 35.970603 -7.8874574E-3
+ 40.6 20.254635 35.969161 -8.020383E-3
+ 40.6 20.270967 35.97012 -8.136154E-3
+ 40.6 20.274635 35.970687 -8.250824E-3
+ 40.6 20.26349 35.96923 -8.368235E-3
+ 40.6 20.228134 35.972026 -8.546716E-3
+ 40.65 2.521875 34.898864 0.0E+0
+ 40.65 2.510616 34.901905 -1.4570214E-4
+ 40.65 2.519202 34.907653 -3.3814855E-4
+ 40.65 2.547223 34.915222 -3.821859E-4
+ 40.65 2.5873167 34.921676 -2.636413E-4
+ 40.65 2.6579835 34.93177 -4.203116E-5
+ 40.65 2.7588133 34.94276 1.3348548E-4
+ 40.65 2.919881 34.95498 1.8647606E-4
+ 40.65 3.1226224 34.96569 1.8269659E-4
+ 40.65 3.418479 34.981063 2.4216952E-4
+ 40.65 3.6844818 34.988342 4.5865288E-4
+ 40.65 4.0175967 35.014747 1.2156148E-3
+ 40.65 4.54828 35.077625 2.4182128E-3
+ 40.65 5.6254396 35.23639 3.5195497E-3
+ 40.65 7.383589 35.519393 4.37526E-3
+ 40.65 8.855834 35.730361 4.5110094E-3
+ 40.65 9.599151 35.763755 3.599594E-3
+ 40.65 9.98392 35.7013 2.229458E-3
+ 40.65 10.192566 35.570232 1.066718E-3
+ 40.65 10.537398 35.50679 5.6690278E-5
+ 40.65 11.032608 35.51873 -1.0086857E-3
+ 40.65 11.502618 35.562675 -1.777214E-3
+ 40.65 11.875091 35.60142 -2.2217887E-3
+ 40.65 12.212321 35.637622 -2.5921347E-3
+ 40.65 12.491444 35.669437 -2.9329888E-3
+ 40.65 12.700333 35.692363 -3.2485984E-3
+ 40.65 12.871945 35.71052 -3.533156E-3
+ 40.65 13.023413 35.72864 -3.821517E-3
+ 40.65 13.139731 35.7414 -4.118731E-3
+ 40.65 13.249571 35.755092 -4.399203E-3
+ 40.65 13.363442 35.771526 -4.6660816E-3
+ 40.65 13.452609 35.781143 -4.917235E-3
+ 40.65 13.525752 35.78949 -5.143703E-3
+ 40.65 13.599492 35.798137 -5.346455E-3
+ 40.65 13.660223 35.803363 -5.530471E-3
+ 40.65 13.717523 35.81068 -5.704607E-3
+ 40.65 13.755864 35.813304 -5.8710323E-3
+ 40.65 13.802494 35.81859 -6.030542E-3
+ 40.65 13.854804 35.82492 -6.1821863E-3
+ 40.65 13.900122 35.83156 -6.32281E-3
+ 40.65 13.952055 35.837905 -6.4567234E-3
+ 40.65 14.009943 35.844295 -6.5857386E-3
+ 40.65 14.05549 35.84725 -6.7078936E-3
+ 40.65 14.106498 35.854873 -6.8267732E-3
+ 40.65 14.167864 35.862285 -6.9443103E-3
+ 40.65 14.232073 35.87011 -7.0575834E-3
+ 40.65 14.294218 35.87509 -7.1692345E-3
+ 40.65 14.369085 35.88307 -7.283318E-3
+ 40.65 14.473298 35.89213 -7.402647E-3
+ 40.65 14.60334 35.90678 -7.524078E-3
+ 40.65 14.762205 35.920112 -7.6524955E-3
+ 40.65 14.91694 35.922637 -7.7773593E-3
+ 40.65 15.081609 35.924354 -7.88684E-3
+ 40.65 15.413687 35.932376 -8.002639E-3
+ 40.65 15.942285 35.92844 -8.078477E-3
+ 40.65 16.59148 35.94388 -8.070597E-3
+ 40.65 17.2516 35.938385 -7.999601E-3
+ 40.65 18.044336 35.950286 -8.0138E-3
+ 40.65 18.810074 35.96751 -8.2094E-3
+ 40.65 19.507181 35.97402 -8.454196E-3
+ 40.65 20.078857 35.96328 -8.638401E-3
+ 40.65 20.224028 35.96186 -8.768177E-3
+ 40.65 20.240417 35.96273 -8.883879E-3
+ 40.65 20.243853 35.96327 -8.998895E-3
+ 40.65 20.231552 35.961513 -9.116569E-3
+ 40.65 20.196869 35.964565 -9.296424E-3
+ 40.7 2.5208063 34.898735 0.0E+0
+ 40.7 2.509871 34.90194 -1.2988503E-4
+ 40.7 2.5184407 34.90761 -3.0982421E-4
+ 40.7 2.5468823 34.91517 -3.4417826E-4
+ 40.7 2.5869407 34.921527 -2.245904E-4
+ 40.7 2.6570653 34.93154 -9.27269E-6
+ 40.7 2.7573432 34.942523 1.5176329E-4
+ 40.7 2.9177987 34.954734 1.8635312E-4
+ 40.7 3.1197805 34.965332 1.6601058E-4
+ 40.7 3.4136536 34.980377 2.054493E-4
+ 40.7 3.6768503 34.98714 3.9069083E-4
+ 40.7 4.0028443 35.01195 1.0958716E-3
+ 40.7 4.5288634 35.073944 2.2332624E-3
+ 40.7 5.596493 35.230976 3.2745448E-3
+ 40.7 7.341119 35.510833 4.076846E-3
+ 40.7 8.81867 35.723037 4.1483994E-3
+ 40.7 9.580137 35.761032 3.162535E-3
+ 40.7 9.96277 35.69818 1.7319366E-3
+ 40.7 10.170782 35.56662 5.031189E-4
+ 40.7 10.520295 35.504413 -5.7103764E-4
+ 40.7 11.017324 35.516933 -1.6715126E-3
+ 40.7 11.491715 35.561 -2.4672118E-3
+ 40.7 11.863762 35.599666 -2.939419E-3
+ 40.7 12.200753 35.635925 -3.336834E-3
+ 40.7 12.477096 35.66728 -3.704231E-3
+ 40.7 12.68594 35.690322 -4.042603E-3
+ 40.7 12.856344 35.708312 -4.3463422E-3
+ 40.7 13.002279 35.725524 -4.6490677E-3
+ 40.7 13.116543 35.738033 -4.9562305E-3
+ 40.7 13.224832 35.75144 -5.243916E-3
+ 40.7 13.336202 35.767505 -5.515888E-3
+ 40.7 13.424407 35.776882 -5.771208E-3
+ 40.7 13.497016 35.78505 -6.0016335E-3
+ 40.7 13.57092 35.79366 -6.2081576E-3
+ 40.7 13.630819 35.798675 -6.3959793E-3
+ 40.7 13.687503 35.805946 -6.5737273E-3
+ 40.7 13.725383 35.80849 -6.743562E-3
+ 40.7 13.77178 35.813793 -6.906204E-3
+ 40.7 13.824432 35.82012 -7.0606162E-3
+ 40.7 13.870822 35.826927 -7.203685E-3
+ 40.7 13.922851 35.833343 -7.3396926E-3
+ 40.7 13.981595 35.83987 -7.4706557E-3
+ 40.7 14.027524 35.842803 -7.5944163E-3
+ 40.7 14.07897 35.85057 -7.7144224E-3
+ 40.7 14.140393 35.85798 -7.832767E-3
+ 40.7 14.204803 35.86565 -7.9464334E-3
+ 40.7 14.265963 35.87048 -8.058009E-3
+ 40.7 14.340973 35.878517 -8.171328E-3
+ 40.7 14.444703 35.887645 -8.2891965E-3
+ 40.7 14.573725 35.90182 -8.408597E-3
+ 40.7 14.729852 35.914833 -8.534165E-3
+ 40.7 14.885532 35.91684 -8.655899E-3
+ 40.7 15.050545 35.9184 -8.760985E-3
+ 40.7 15.380555 35.926185 -8.870187E-3
+ 40.7 15.918728 35.92203 -8.937463E-3
+ 40.7 16.576206 35.937782 -8.918919E-3
+ 40.7 17.241344 35.93204 -8.834168E-3
+ 40.7 18.013908 35.943862 -8.831432E-3
+ 40.7 18.769278 35.961215 -9.006053E-3
+ 40.7 19.46967 35.9675 -9.228984E-3
+ 40.7 20.046608 35.95611 -9.400427E-3
+ 40.7 20.193905 35.954734 -9.5272054E-3
+ 40.7 20.210348 35.955535 -9.643069E-3
+ 40.7 20.21361 35.956066 -9.7586074E-3
+ 40.7 20.200157 35.954013 -9.87662E-3
+ 40.7 20.165993 35.957305 -0.010057889
+ 40.75 2.5197718 34.8986 0.0E+0
+ 40.75 2.5091557 34.901977 -1.1428609E-4
+ 40.75 2.5176851 34.907562 -2.8179798E-4
+ 40.75 2.54653 34.91511 -3.0716593E-4
+ 40.75 2.586532 34.92137 -1.8730944E-4
+ 40.75 2.6561136 34.931312 2.1329772E-5
+ 40.75 2.7558462 34.94229 1.6816362E-4
+ 40.75 2.9157142 34.954494 1.8532696E-4
+ 40.75 3.1169414 34.964984 1.4947826E-4
+ 40.75 3.408823 34.979701 1.6935264E-4
+ 40.75 3.669301 34.98597 3.229768E-4
+ 40.75 3.9884111 35.009246 9.737451E-4
+ 40.75 4.5099306 35.07039 2.0417144E-3
+ 40.75 5.567874 35.22567 3.0194271E-3
+ 40.75 7.298428 35.5023 3.7664447E-3
+ 40.75 8.780781 35.71565 3.77609E-3
+ 40.75 9.561172 35.758392 2.722321E-3
+ 40.75 9.941838 35.695167 1.2377835E-3
+ 40.75 10.149338 35.563194 -5.2833354E-5
+ 40.75 10.503226 35.502117 -1.1886348E-3
+ 40.75 11.00186 35.515136 -2.3227811E-3
+ 40.75 11.480451 35.5593 -3.146171E-3
+ 40.75 11.852064 35.59789 -3.6477076E-3
+ 40.75 12.188585 35.634174 -4.073421E-3
+ 40.75 12.462041 35.665046 -4.468166E-3
+ 40.75 12.670769 35.688198 -4.829902E-3
+ 40.75 12.839991 35.70603 -5.153306E-3
+ 40.75 12.980575 35.72236 -5.470595E-3
+ 40.75 13.092928 35.73464 -5.787699E-3
+ 40.75 13.19976 35.747776 -6.0825794E-3
+ 40.75 13.308678 35.763477 -6.359606E-3
+ 40.75 13.395943 35.77262 -6.619033E-3
+ 40.75 13.468046 35.780624 -6.8533993E-3
+ 40.75 13.542069 35.78918 -7.0637413E-3
+ 40.75 13.601113 35.793994 -7.255451E-3
+ 40.75 13.65721 35.80122 -7.4368803E-3
+ 40.75 13.694648 35.8037 -7.610169E-3
+ 40.75 13.74088 35.80903 -7.7759805E-3
+ 40.75 13.793866 35.81535 -7.933226E-3
+ 40.75 13.841371 35.822322 -8.078851E-3
+ 40.75 13.893491 35.828804 -8.217079E-3
+ 40.75 13.953099 35.835472 -8.350124E-3
+ 40.75 13.999503 35.83839 -8.475665E-3
+ 40.75 14.051378 35.8463 -8.597002E-3
+ 40.75 14.112897 35.8537 -8.716369E-3
+ 40.75 14.177578 35.86122 -8.830671E-3
+ 40.75 14.237818 35.86591 -8.942431E-3
+ 40.75 14.313065 35.873996 -9.055251E-3
+ 40.75 14.41631 35.883182 -9.17189E-3
+ 40.75 14.544315 35.896873 -9.289473E-3
+ 40.75 14.697747 35.90955 -9.412355E-3
+ 40.75 14.854455 35.91107 -9.531147E-3
+ 40.75 15.020241 35.912513 -9.632178E-3
+ 40.75 15.34834 35.920074 -9.735198E-3
+ 40.75 15.896374 35.915725 -9.794698E-3
+ 40.75 16.56218 35.931762 -9.766934E-3
+ 40.75 17.232878 35.925827 -9.670422E-3
+ 40.75 17.985348 35.937545 -9.652155E-3
+ 40.75 18.730715 35.95499 -9.805841E-3
+ 40.75 19.434063 35.961074 -0.010006461
+ 40.75 20.015259 35.9491 -0.010164995
+ 40.75 20.164263 35.94779 -0.01028895
+ 40.75 20.180754 35.94854 -0.010405207
+ 40.75 20.183897 35.94908 -0.010521452
+ 40.75 20.16931 35.94672 -0.010639891
+ 40.75 20.13551 35.95025 -0.010822632
+ 40.8 2.5187795 34.89846 0.0E+0
+ 40.8 2.5084764 34.902008 -9.892999E-5
+ 40.8 2.5169403 34.907512 -2.54081E-4
+ 40.8 2.5461685 34.915046 -2.7116984E-4
+ 40.8 2.5860941 34.92122 -1.5181059E-4
+ 40.8 2.6551337 34.931087 4.9785583E-5
+ 40.8 2.7543296 34.942066 1.827443E-4
+ 40.8 2.9136366 34.954265 1.8353498E-4
+ 40.8 3.1141183 34.964645 1.3333555E-4
+ 40.8 3.404008 34.979042 1.3430016E-4
+ 40.8 3.6618661 34.98484 2.5626283E-4
+ 40.8 3.9743537 35.00664 8.505256E-4
+ 40.8 4.4915456 35.066967 1.8454888E-3
+ 40.8 5.5396785 35.22049 2.7566778E-3
+ 40.8 7.255685 35.49383 3.4469291E-3
+ 40.8 8.742337 35.708225 3.3972745E-3
+ 40.8 9.542306 35.755847 2.282604E-3
+ 40.8 9.921183 35.692272 7.5115216E-4
+ 40.8 10.1283 35.559967 -5.963904E-4
+ 40.8 10.486233 35.499912 -1.7907243E-3
+ 40.8 10.986253 35.513347 -2.956653E-3
+ 40.8 11.468842 35.55758 -3.8078082E-3
+ 40.8 11.840006 35.596096 -4.339933E-3
+ 40.8 12.175824 35.63238 -4.7948015E-3
+ 40.8 12.446295 35.662757 -5.217376E-3
+ 40.8 12.65483 35.686 -5.602816E-3
+ 40.8 12.822899 35.703685 -5.9461533E-3
+ 40.8 12.958339 35.71915 -6.278053E-3
+ 40.8 13.068925 35.73123 -6.604985E-3
+ 40.8 13.174393 35.744106 -6.906956E-3
+ 40.8 13.28092 35.759445 -7.188932E-3
+ 40.8 13.367267 35.768375 -7.452352E-3
+ 40.8 13.43889 35.77622 -7.690589E-3
+ 40.8 13.512978 35.784717 -7.904744E-3
+ 40.8 13.571148 35.78933 -8.100372E-3
+ 40.8 13.626686 35.796512 -8.285502E-3
+ 40.8 13.663703 35.79894 -8.462241E-3
+ 40.8 13.709835 35.804302 -8.631213E-3
+ 40.8 13.763143 35.81062 -8.791314E-3
+ 40.8 13.811797 35.81776 -8.939563E-3
+ 40.8 13.864004 35.8243 -9.080092E-3
+ 40.8 13.924479 35.83111 -9.215312E-3
+ 40.8 13.971446 35.834026 -9.342766E-3
+ 40.8 14.023733 35.842056 -9.465603E-3
+ 40.8 14.085384 35.849452 -9.586167E-3
+ 40.8 14.150401 35.856834 -9.701312E-3
+ 40.8 14.209788 35.861385 -9.813485E-3
+ 40.8 14.285363 35.869522 -9.926036E-3
+ 40.8 14.388126 35.878753 -0.010041653
+ 40.8 14.515122 35.891937 -0.010157609
+ 40.8 14.665919 35.90427 -0.010277953
+ 40.8 14.823728 35.905345 -0.010393975
+ 40.8 14.990703 35.906715 -0.010491279
+ 40.8 15.317047 35.91405 -0.010588527
+ 40.8 15.875161 35.909534 -0.010641039
+ 40.8 16.549276 35.92583 -0.010605499
+ 40.8 17.226036 35.919757 -0.010499239
+ 40.8 17.95865 35.931346 -0.010466903
+ 40.8 18.694462 35.948833 -0.010599802
+ 40.8 19.400423 35.95475 -0.010777812
+ 40.8 19.984825 35.94226 -0.010923378
+ 40.8 20.135098 35.94103 -0.011044708
+ 40.8 20.151627 35.941745 -0.011161592
+ 40.8 20.154707 35.94231 -0.01127873
+ 40.8 20.139011 35.93964 -0.0113977
+ 40.8 20.105413 35.943397 -0.011581992
+ 40.85 2.5178372 34.89832 0.0E+0
+ 40.85 2.5078394 34.902042 -8.383849E-5
+ 40.85 2.5162117 34.907455 -2.2668033E-4
+ 40.85 2.5458004 34.91498 -2.3620049E-4
+ 40.85 2.585631 34.921062 -1.1808945E-4
+ 40.85 2.6541311 34.930862 7.6123586E-5
+ 40.85 2.752802 34.941852 1.9558112E-4
+ 40.85 2.9115757 34.95405 1.8112661E-4
+ 40.85 3.1113247 34.96432 1.1782489E-4
+ 40.85 3.3992283 34.9784 1.0071852E-4
+ 40.85 3.654577 34.983757 1.9131355E-4
+ 40.85 3.960725 35.004146 7.2754046E-4
+ 40.85 4.4737696 35.06369 1.6465815E-3
+ 40.85 5.512 35.21545 2.4888885E-3
+ 40.85 7.213058 35.48546 3.1212992E-3
+ 40.85 8.703524 35.70081 3.0152362E-3
+ 40.85 9.523593 35.7534 1.8470657E-3
+ 40.85 9.900864 35.689495 2.7618437E-4
+ 40.85 10.107735 35.556941 -1.1228387E-3
+ 40.85 10.469361 35.497802 -2.371976E-3
+ 40.85 10.970545 35.51157 -3.5673417E-3
+ 40.85 11.456909 35.55585 -4.4458843E-3
+ 40.85 11.827604 35.59429 -5.0094E-3
+ 40.85 12.162478 35.630546 -5.493899E-3
+ 40.85 12.429883 35.66042 -5.9444564E-3
+ 40.85 12.638137 35.683734 -6.3536702E-3
+ 40.85 12.805082 35.70128 -6.7169927E-3
+ 40.85 12.935609 35.715915 -7.063393E-3
+ 40.85 13.044575 35.72782 -7.399931E-3
+ 40.85 13.148776 35.74045 -7.7088037E-3
+ 40.85 13.252977 35.75543 -7.995558E-3
+ 40.85 13.33843 35.764152 -8.2628E-3
+ 40.85 13.409598 35.771846 -8.504785E-3
+ 40.85 13.48369 35.78028 -8.722694E-3
+ 40.85 13.540969 35.784694 -8.9222164E-3
+ 40.85 13.595978 35.79184 -9.111014E-3
+ 40.85 13.632594 35.794223 -9.29115E-3
+ 40.85 13.678688 35.79963 -9.463227E-3
+ 40.85 13.732302 35.80594 -9.626162E-3
+ 40.85 13.782133 35.813247 -9.777059E-3
+ 40.85 13.83442 35.819843 -9.919927E-3
+ 40.85 13.895759 35.82679 -0.010057368
+ 40.85 13.943372 35.82972 -0.010186828
+ 40.85 13.99605 35.837852 -0.010311288
+ 40.85 14.057864 35.845256 -0.010433184
+ 40.85 14.123277 35.852497 -0.01054934
+ 40.85 14.181882 35.856922 -0.010662117
+ 40.85 14.257871 35.865104 -0.0107746
+ 40.85 14.360159 35.874366 -0.010889372
+ 40.85 14.48616 35.887027 -0.011003867
+ 40.85 14.6344 35.899005 -0.011121806
+ 40.85 14.793374 35.899673 -0.011235215
+ 40.85 14.961939 35.90101 -0.011329104
+ 40.85 15.286683 35.90813 -0.011420982
+ 40.85 15.855022 35.90347 -0.011467284
+ 40.85 16.537373 35.91999 -0.011425401
+ 40.85 17.220655 35.913845 -0.011311414
+ 40.85 17.933802 35.92528 -0.011266513
+ 40.85 18.660583 35.942764 -0.011378879
+ 40.85 19.368801 35.94853 -0.011534128
+ 40.85 19.955322 35.9356 -0.011666763
+ 40.85 20.106407 35.93446 -0.011785687
+ 40.85 20.122955 35.935153 -0.011903432
+ 40.85 20.12603 35.935764 -0.012021655
+ 40.85 20.109268 35.932773 -0.012141272
+ 40.85 20.075706 35.936744 -0.012327216
+ 40.9 2.5169532 34.89818 0.0E+0
+ 40.9 2.5072495 34.902072 -6.903079E-5
+ 40.9 2.515504 34.9074 -1.9959964E-4
+ 40.9 2.5454282 34.914913 -2.0225933E-4
+ 40.9 2.5851452 34.92091 -8.612654E-5
+ 40.9 2.653111 34.930637 1.0039074E-4
+ 40.9 2.7512698 34.941646 2.0676639E-4
+ 40.9 2.9095401 34.95384 1.7826172E-4
+ 40.9 3.1085741 34.96401 1.0319331E-4
+ 40.9 3.3945043 34.977783 6.903705E-5
+ 40.9 3.6474626 34.98272 1.2889877E-4
+ 40.9 3.947574 35.001773 6.061412E-4
+ 40.9 4.456659 35.060573 1.4470457E-3
+ 40.9 5.484928 35.210567 2.2187384E-3
+ 40.9 7.1707172 35.477207 2.7926552E-3
+ 40.9 8.664529 35.693428 2.633326E-3
+ 40.9 9.505088 35.751045 1.4193916E-3
+ 40.9 9.880942 35.686847 -1.8302003E-4
+ 40.9 10.087705 35.554134 -1.6275354E-3
+ 40.9 10.452655 35.495796 -2.9271473E-3
+ 40.9 10.954782 35.509815 -4.1491594E-3
+ 40.9 11.444675 35.55412 -5.0542573E-3
+ 40.9 11.814877 35.592483 -5.6495042E-3
+ 40.9 12.148566 35.628677 -6.163718E-3
+ 40.9 12.412834 35.65803 -6.64208E-3
+ 40.9 12.620714 35.681404 -7.0748664E-3
+ 40.9 12.786566 35.698814 -7.4580046E-3
+ 40.9 12.912428 35.71266 -7.818641E-3
+ 40.9 13.019924 35.724414 -8.164454E-3
+ 40.9 13.122953 35.736812 -8.479953E-3
+ 40.9 13.224902 35.75144 -8.771247E-3
+ 40.9 13.309487 35.759963 -9.042086E-3
+ 40.9 13.38022 35.767524 -9.2876395E-3
+ 40.9 13.454251 35.775882 -9.509191E-3
+ 40.9 13.510624 35.7801 -9.712528E-3
+ 40.9 13.565134 35.787212 -9.904909E-3
+ 40.9 13.601372 35.789562 -0.010088339
+ 40.9 13.647487 35.79502 -0.010263421
+ 40.9 13.701383 35.80132 -0.010429121
+ 40.9 13.752413 35.808795 -0.010582641
+ 40.9 13.804774 35.81544 -0.010727841
+ 40.9 13.866967 35.82253 -0.010867505
+ 40.9 13.915304 35.825477 -0.010999017
+ 40.9 13.968347 35.833702 -0.011125184
+ 40.9 14.030349 35.841106 -0.011248504
+ 40.9 14.096216 35.848213 -0.011365799
+ 40.9 14.15411 35.85252 -0.011479334
+ 40.9 14.230594 35.860744 -0.011591914
+ 40.9 14.332421 35.87002 -0.011705989
+ 40.9 14.457447 35.882152 -0.011819162
+ 40.9 14.603223 35.89377 -0.011934808
+ 40.9 14.763414 35.89407 -0.012045743
+ 40.9 14.933952 35.895412 -0.012136514
+ 40.9 15.25725 35.90233 -0.012223413
+ 40.9 15.835893 35.897544 -0.012264272
+ 40.9 16.526342 35.91426 -0.012217456
+ 40.9 17.216557 35.908103 -0.012097754
+ 40.9 17.910784 35.919357 -0.012041823
+ 40.9 18.629133 35.936786 -0.012134012
+ 40.9 19.339231 35.942424 -0.0122665
+ 40.9 19.926756 35.929122 -0.012386337
+ 40.9 20.078184 35.928085 -0.012503094
+ 40.9 20.094734 35.928771 -0.012621931
+ 40.9 20.097853 35.929435 -0.012741435
+ 40.9 20.080076 35.926124 -0.012861828
+ 40.9 20.04638 35.9303 -0.013049548
+ 40.95 2.5161337 34.898036 0.0E+0
+ 40.95 2.506712 34.902107 -5.4523825E-5
+ 40.95 2.514822 34.907333 -1.7284042E-4
+ 40.95 2.5450541 34.91485 -1.6934E-4
+ 40.95 2.5846414 34.920753 -5.5888722E-5
+ 40.95 2.6520781 34.93042 1.2265069E-4
+ 40.95 2.7497415 34.94145 2.1640758E-4
+ 40.95 2.9075393 34.95364 1.7510907E-4
+ 40.95 3.1058793 34.96371 8.969034E-5
+ 40.95 3.3898546 34.97719 3.9684E-5
+ 40.95 3.6405506 34.981735 6.978661E-5
+ 40.95 3.9349455 34.999523 4.8769087E-4
+ 40.95 4.440266 35.057617 1.2489709E-3
+ 40.95 5.458548 35.205852 1.9489664E-3
+ 40.95 7.128832 35.469112 2.4641721E-3
+ 40.95 8.62555 35.68612 2.254938E-3
+ 40.95 9.486844 35.74879 1.0032472E-3
+ 40.95 9.861476 35.68433 -6.2243215E-4
+ 40.95 10.068272 35.551544 -2.1059433E-3
+ 40.95 10.436163 35.493896 -3.4511263E-3
+ 40.95 10.939009 35.50809 -4.6965647E-3
+ 40.95 11.432171 35.552394 -5.6269345E-3
+ 40.95 11.801846 35.590675 -6.253785E-3
+ 40.95 12.134109 35.626777 -6.7974096E-3
+ 40.95 12.395183 35.65561 -7.3030646E-3
+ 40.95 12.602592 35.67902 -7.7589517E-3
+ 40.95 12.76738 35.696304 -8.161518E-3
+ 40.95 12.888846 35.709396 -8.53597E-3
+ 40.95 12.995019 35.721023 -8.890622E-3
+ 40.95 13.096972 35.7332 -9.212384E-3
+ 40.95 13.196749 35.747482 -9.507914E-3
+ 40.95 13.280492 35.75583 -9.782068E-3
+ 40.95 13.35081 35.76326 -0.010030959
+ 40.95 13.424708 35.77153 -0.010255984
+ 40.95 13.480162 35.775566 -0.010463004
+ 40.95 13.534205 35.78264 -0.010658829
+ 40.95 13.570088 35.784973 -0.010845402
+ 40.95 13.616278 35.79049 -0.011023337
+ 40.95 13.670431 35.796775 -0.01119169
+ 40.95 13.722672 35.804412 -0.011347764
+ 40.95 13.775101 35.811103 -0.011495242
+ 40.95 13.838134 35.81833 -0.011637084
+ 40.95 13.887266 35.82131 -0.011770651
+ 40.95 13.940643 35.82961 -0.011898563
+ 40.95 14.002856 35.837017 -0.012023358
+ 40.95 14.069227 35.84399 -0.012141877
+ 40.95 14.126484 35.84819 -0.012256284
+ 40.95 14.203538 35.85645 -0.01236909
+ 40.95 14.304924 35.86573 -0.012482585
+ 40.95 14.428999 35.87732 -0.012594546
+ 40.95 14.572421 35.88857 -0.012707994
+ 40.95 14.733874 35.888542 -0.012816577
+ 40.95 14.906747 35.889934 -0.012904507
+ 40.95 15.22875 35.89665 -0.012986803
+ 40.95 15.817704 35.89177 -0.013022965
+ 40.95 16.516068 35.90865 -0.012972596
+ 40.95 17.213566 35.902542 -0.012849167
+ 40.95 17.889568 35.91359 -0.012783763
+ 40.95 18.60015 35.93091 -0.012856233
+ 40.95 19.311735 35.936443 -0.01296611
+ 40.95 19.899126 35.92284 -0.013073373
+ 40.95 20.05042 35.92191 -0.013188223
+ 40.95 20.066952 35.922595 -0.013308381
+ 40.95 20.070166 35.923324 -0.013429364
+ 40.95 20.051437 35.919696 -0.013550677
+ 40.95 20.017433 35.92406 -0.013740316
+ 41.0 2.5153853 34.8979 0.0E+0
+ 41.0 2.5062308 34.90214 -4.0332477E-5
+ 41.0 2.5141696 34.907272 -1.4640296E-4
+ 41.0 2.5446805 34.91478 -1.3742982E-4
+ 41.0 2.584123 34.9206 -2.7330874E-5
+ 41.0 2.651038 34.930202 1.4298201E-4
+ 41.0 2.7482244 34.941257 2.2462574E-4
+ 41.0 2.9055817 34.95345 1.7184453E-4
+ 41.0 3.1032521 34.963424 7.756577E-5
+ 41.0 3.3852972 34.976615 1.3082751E-5
+ 41.0 3.633866 34.98081 1.4736068E-5
+ 41.0 3.9228804 34.997406 3.7354964E-4
+ 41.0 4.424639 35.054832 1.0544618E-3
+ 41.0 5.432942 35.201324 1.682344E-3
+ 41.0 7.087569 35.4612 2.1390691E-3
+ 41.0 8.586792 35.678916 1.8834826E-3
+ 41.0 9.468915 35.74664 6.022527E-4
+ 41.0 9.842524 35.68195 -1.0381226E-3
+ 41.0 10.049493 35.549182 -2.553665E-3
+ 41.0 10.419931 35.492107 -3.9389715E-3
+ 41.0 10.923276 35.5064 -5.2042072E-3
+ 41.0 11.419429 35.550685 -6.158125E-3
+ 41.0 11.788539 35.588874 -6.8159853E-3
+ 41.0 12.119136 35.62485 -7.3883295E-3
+ 41.0 12.376974 35.65316 -7.92044E-3
+ 41.0 12.583806 35.676586 -8.39869E-3
+ 41.0 12.74756 35.693752 -8.820078E-3
+ 41.0 12.864913 35.706134 -9.207775E-3
+ 41.0 12.96991 35.717655 -9.570725E-3
+ 41.0 13.070881 35.72963 -9.898304E-3
+ 41.0 13.168572 35.74357 -0.010197701
+ 41.0 13.251503 35.751747 -0.010474835
+ 41.0 13.321418 35.759063 -0.010726777
+ 41.0 13.395108 35.767234 -0.010955056
+ 41.0 13.449637 35.771095 -0.011165569
+ 41.0 13.503245 35.778137 -0.011364647
+ 41.0 13.538796 35.78046 -0.011554161
+ 41.0 13.585113 35.78604 -0.011734756
+ 41.0 13.639491 35.792312 -0.011905601
+ 41.0 13.692949 35.800113 -0.012064114
+ 41.0 13.745443 35.806842 -0.012213771
+ 41.0 13.809294 35.814197 -0.012357701
+ 41.0 13.859286 35.817222 -0.012493279
+ 41.0 13.912962 35.825576 -0.01262293
+ 41.0 13.975403 35.83299 -0.012749206
+ 41.0 14.042324 35.839836 -0.012868994
+ 41.0 14.099018 35.84394 -0.012984346
+ 41.0 14.176713 35.852226 -0.01309747
+ 41.0 14.277683 35.861495 -0.013210468
+ 41.0 14.400837 35.872543 -0.0133213
+ 41.0 14.542028 35.883415 -0.013432625
+ 41.0 14.704777 35.88311 -0.013538957
+ 41.0 14.880327 35.884582 -0.013624302
+ 41.0 15.201185 35.8911 -0.013702357
+ 41.0 15.800387 35.886154 -0.013734546
+ 41.0 16.506426 35.903163 -0.013681961
+ 41.0 17.211496 35.897174 -0.013556758
+ 41.0 17.870127 35.90799 -0.013483447
+ 41.0 18.573654 35.925144 -0.01353675
+ 41.0 19.286324 35.93059 -0.013624314
+ 41.0 19.872433 35.91675 -0.013719321
+ 41.0 20.023113 35.91594 -0.013832543
+ 41.0 20.039597 35.916633 -0.013954249
+ 41.0 20.042952 35.917434 -0.014076911
+ 41.0 20.023346 35.913482 -0.0141993
+ 41.0 19.988857 35.918022 -0.014391024
+ 41.05 2.5147132 34.89776 0.0E+0
+ 41.05 2.5058097 34.902175 -2.646995E-5
+ 41.05 2.5135514 34.907207 -1.2028747E-4
+ 41.05 2.5443093 34.91471 -1.0651105E-4
+ 41.05 2.583593 34.920452 -3.9752711E-7
+ 41.05 2.649995 34.929992 1.6147667E-4
+ 41.05 2.7467255 34.941082 2.3155376E-4
+ 41.05 2.9036755 34.953273 1.686493E-4
+ 41.05 3.1007051 34.963157 6.706754E-5
+ 41.05 3.38085 34.97607 -1.0351957E-5
+ 41.05 3.627432 34.97994 -3.5510267E-5
+ 41.05 3.9114141 34.99543 2.6506133E-4
+ 41.05 4.4098215 35.052227 8.656165E-4
+ 41.05 5.4081854 35.196987 1.4216467E-3
+ 41.05 7.047092 35.453506 1.8205786E-3
+ 41.05 8.548459 35.67186 1.522363E-3
+ 41.05 9.451353 35.744586 2.1995843E-4
+ 41.05 9.82414 35.67971 -1.4262893E-3
+ 41.05 10.031423 35.547046 -2.966475E-3
+ 41.05 10.404008 35.490436 -4.385951E-3
+ 41.05 10.907634 35.504753 -5.6669726E-3
+ 41.05 11.406485 35.548992 -6.6422875E-3
+ 41.05 11.774986 35.58709 -7.3301065E-3
+ 41.05 12.10368 35.62291 -7.9301E-3
+ 41.05 12.358254 35.65069 -8.487511E-3
+ 41.05 12.5644 35.67411 -8.987129E-3
+ 41.05 12.727148 35.69117 -9.426523E-3
+ 41.05 12.840683 35.70288 -9.826743E-3
+ 41.05 12.944651 35.71432 -0.01019735
+ 41.05 13.044733 35.726104 -0.01053022
+ 41.05 13.140428 35.739715 -0.010833051
+ 41.05 13.222575 35.747737 -0.011112778
+ 41.05 13.2921 35.754947 -0.011367433
+ 41.05 13.365503 35.763011 -0.011598691
+ 41.05 13.419102 35.7667 -0.011812455
+ 41.05 13.472308 35.773712 -0.012014546
+ 41.05 13.507553 35.77604 -0.012206751
+ 41.05 13.554041 35.781684 -0.012389766
+ 41.05 13.608611 35.78794 -0.0125629
+ 41.05 13.663286 35.7959 -0.012723691
+ 41.05 13.715839 35.802658 -0.012875382
+ 41.05 13.780481 35.810146 -0.013021265
+ 41.05 13.831394 35.813224 -0.013158765
+ 41.05 13.88533 35.821617 -0.013290106
+ 41.05 13.948013 35.829032 -0.013417825
+ 41.05 14.015522 35.835754 -0.013538883
+ 41.05 14.071728 35.839775 -0.013655212
+ 41.05 14.150129 35.84808 -0.013768709
+ 41.05 14.250714 35.857326 -0.013881261
+ 41.05 14.372982 35.867824 -0.013991019
+ 41.05 14.512078 35.878322 -0.014100276
+ 41.05 14.676149 35.877773 -0.014204439
+ 41.05 14.854691 35.879367 -0.014287434
+ 41.05 15.174554 35.885704 -0.014361589
+ 41.05 15.783873 35.880706 -0.014390502
+ 41.05 16.497297 35.897815 -0.014336989
+ 41.05 17.210175 35.892002 -0.014211911
+ 41.05 17.852413 35.902565 -0.014132257
+ 41.05 18.549656 35.919502 -0.01416704
+ 41.05 19.262989 35.924873 -0.014232737
+ 41.05 19.846664 35.91087 -0.014315897
+ 41.05 19.996252 35.91018 -0.014427785
+ 41.05 20.012657 35.91089 -0.014551261
+ 41.05 20.016195 35.911762 -0.014675804
+ 41.05 19.995792 35.907493 -0.014799439
+ 41.05 19.96065 35.912193 -0.014993434
+ 41.1 2.5141222 34.89763 0.0E+0
+ 41.1 2.5054523 34.902206 -1.2948064E-5
+ 41.1 2.5129714 34.907142 -9.449492E-5
+ 41.1 2.5439426 34.914646 -7.656243E-5
+ 41.1 2.5830554 34.920303 2.4975418E-5
+ 41.1 2.6489546 34.929786 1.7823809E-4
+ 41.1 2.745252 34.94091 2.3733458E-4
+ 41.1 2.9018294 34.953105 1.6570809E-4
+ 41.1 3.0982494 34.962905 5.843948E-5
+ 41.1 3.376529 34.97555 -3.021782E-5
+ 41.1 3.621269 34.979125 -8.02335E-5
+ 41.1 3.9005777 34.99359 1.6353939E-4
+ 41.1 4.39585 35.049804 6.8450433E-4
+ 41.1 5.384351 35.192855 1.169625E-3
+ 41.1 7.0075602 35.44605 1.5119167E-3
+ 41.1 8.510758 35.664978 1.1749467E-3
+ 41.1 9.43421 35.742637 -1.401797E-4
+ 41.1 9.806379 35.677612 -1.7832847E-3
+ 41.1 10.014114 35.545135 -3.340353E-3
+ 41.1 10.388442 35.488883 -4.787579E-3
+ 41.1 10.892134 35.503154 -6.080025E-3
+ 41.1 11.393379 35.547325 -7.074179E-3
+ 41.1 11.761221 35.585323 -7.790462E-3
+ 41.1 12.08778 35.620956 -8.416669E-3
+ 41.1 12.339075 35.648204 -8.997921E-3
+ 41.1 12.544424 35.671604 -9.51766E-3
+ 41.1 12.706193 35.688556 -9.974042E-3
+ 41.1 12.816216 35.69965 -0.010385923
+ 41.1 12.919296 35.711032 -0.01076345
+ 41.1 13.018579 35.722637 -0.011101008
+ 41.1 13.112373 35.735923 -0.01140678
+ 41.1 13.193766 35.74381 -0.011688661
+ 41.1 13.262911 35.75092 -0.011945643
+ 41.1 13.335944 35.758865 -0.012179555
+ 41.1 13.388614 35.76239 -0.012396276
+ 41.1 13.441451 35.769374 -0.012601088
+ 41.1 13.476415 35.771717 -0.012795689
+ 41.1 13.523115 35.77743 -0.012980839
+ 41.1 13.577841 35.78367 -0.013156017
+ 41.1 13.633724 35.791774 -0.01331888
+ 41.1 13.686333 35.798564 -0.013472416
+ 41.1 13.751736 35.806175 -0.013620074
+ 41.1 13.80362 35.809322 -0.013759366
+ 41.1 13.857775 35.817733 -0.013892303
+ 41.1 13.920708 35.82515 -0.014021384
+ 41.1 13.988838 35.831752 -0.014143671
+ 41.1 14.044632 35.835693 -0.014260968
+ 41.1 14.123797 35.844017 -0.014374857
+ 41.1 14.224036 35.853225 -0.014486981
+ 41.1 14.345456 35.863174 -0.014595689
+ 41.1 14.482604 35.87329 -0.014702915
+ 41.1 14.648018 35.872554 -0.014804971
+ 41.1 14.82984 35.874301 -0.014885828
+ 41.1 15.148856 35.88046 -0.014956406
+ 41.1 15.768094 35.87544 -0.014982709
+ 41.1 16.488575 35.892616 -0.014929496
+ 41.1 17.209412 35.88704 -0.01480638
+ 41.1 17.836388 35.897323 -0.014721932
+ 41.1 18.528147 35.913993 -0.01473893
+ 41.1 19.241713 35.919296 -0.014783349
+ 41.1 19.821804 35.905197 -0.014855158
+ 41.1 19.969828 35.90463 -0.014966026
+ 41.1 19.986126 35.905353 -0.015091491
+ 41.1 19.989882 35.90631 -0.015218116
+ 41.1 19.968775 35.901725 -0.015343177
+ 41.1 19.9328 35.906566 -0.01553965
+ 41.15 2.5136163 34.8975 0.0E+0
+ 41.15 2.5051605 34.902244 2.2245373E-7
+ 41.15 2.5124323 34.907077 -6.902814E-5
+ 41.15 2.543582 34.914577 -4.7560395E-5
+ 41.15 2.582513 34.92016 4.8858946E-5
+ 41.15 2.6479208 34.929584 1.9337935E-4
+ 41.15 2.7438104 34.940753 2.4211942E-4
+ 41.15 2.900051 34.95295 1.6320703E-4
+ 41.15 3.0958957 34.962665 5.1919E-5
+ 41.15 3.3723492 34.97506 -4.612874E-5
+ 41.15 3.6153955 34.97837 -1.187456E-4
+ 41.15 3.8903968 34.991897 7.0253125E-5
+ 41.15 4.382757 35.047565 5.131438E-4
+ 41.15 5.361501 35.188934 9.289746E-4
+ 41.15 6.9691267 35.438858 1.2162499E-3
+ 41.15 8.473897 35.658313 8.445387E-4
+ 41.15 9.417534 35.740787 -4.7482424E-4
+ 41.15 9.789294 35.675655 -2.105643E-3
+ 41.15 9.997611 35.543457 -3.6715152E-3
+ 41.15 10.37328 35.487453 -5.139657E-3
+ 41.15 10.876829 35.50161 -6.4388466E-3
+ 41.15 11.380155 35.545696 -7.448901E-3
+ 41.15 11.747281 35.58358 -8.191728E-3
+ 41.15 12.071481 35.61899 -8.842365E-3
+ 41.15 12.319496 35.645717 -9.445706E-3
+ 41.15 12.523933 35.669075 -9.984088E-3
+ 41.15 12.684748 35.68593 -0.010456244
+ 41.15 12.79157 35.69644 -0.010878792
+ 41.15 12.893902 35.70779 -0.011262412
+ 41.15 12.992473 35.71923 -0.011603982
+ 41.15 13.084463 35.73221 -0.011912148
+ 41.15 13.165133 35.739967 -0.012195697
+ 41.15 13.233903 35.746986 -0.012454572
+ 41.15 13.306485 35.754806 -0.012690764
+ 41.15 13.35823 35.758182 -0.012910096
+ 41.15 13.410732 35.765136 -0.013117292
+ 41.15 13.445441 35.7675 -0.013313949
+ 41.15 13.49239 35.77329 -0.013500911
+ 41.15 13.547232 35.779506 -0.013677845
+ 41.15 13.604309 35.787757 -0.013842532
+ 41.15 13.656972 35.794567 -0.013997684
+ 41.15 13.723097 35.8023 -0.014146895
+ 41.15 13.776 35.805522 -0.014287804
+ 41.15 13.830331 35.81393 -0.014422202
+ 41.15 13.893516 35.821346 -0.014552523
+ 41.15 13.962293 35.827835 -0.014675957
+ 41.15 14.017751 35.83171 -0.014794174
+ 41.15 14.097732 35.84004 -0.014908434
+ 41.15 14.19767 35.849197 -0.015020118
+ 41.15 14.318285 35.8586 -0.015127774
+ 41.15 14.453643 35.868335 -0.015232985
+ 41.15 14.62041 35.867454 -0.015332977
+ 41.15 14.805773 35.86939 -0.015411886
+ 41.15 15.124089 35.87537 -0.015479189
+ 41.15 15.752983 35.870357 -0.015503513
+ 41.15 16.480146 35.887573 -0.015451764
+ 41.15 17.209032 35.882293 -0.015332366
+ 41.15 17.821999 35.892276 -0.015244652
+ 41.15 18.509108 35.90862 -0.015244683
+ 41.15 19.222464 35.913867 -0.01526855
+ 41.15 19.797838 35.899734 -0.015329591
+ 41.15 19.94383 35.899291 -0.015439765
+ 41.15 19.959988 35.90004 -0.015567432
+ 41.15 19.963991 35.901077 -0.015696341
+ 41.15 19.942282 35.896183 -0.015823022
+ 41.15 19.905304 35.90115 -0.016022198
+ 41.2 2.5131988 34.897377 0.0E+0
+ 41.2 2.5049366 34.90228 1.3031653E-5
+ 41.2 2.5119378 34.907016 -4.3892614E-5
+ 41.2 2.5432288 34.914516 -1.9480554E-5
+ 41.2 2.58197 34.92002 7.132922E-5
+ 41.2 2.646898 34.92939 2.0702126E-4
+ 41.2 2.7424068 34.940605 2.460658E-4
+ 41.2 2.8983476 34.952804 1.6133198E-4
+ 41.2 3.0936543 34.962444 4.7734905E-5
+ 41.2 3.3683247 34.974597 -5.771852E-5
+ 41.2 3.6098268 34.977676 -1.5039636E-4
+ 41.2 3.880892 34.990345 -1.3585834E-5
+ 41.2 4.3705697 35.045513 3.5348051E-4
+ 41.2 5.339696 35.18523 7.023071E-4
+ 41.2 6.931937 35.431957 9.3666237E-4
+ 41.2 8.43808 35.651893 5.343539E-4
+ 41.2 9.401373 35.739036 -7.8078114E-4
+ 41.2 9.772933 35.673847 -2.3901064E-3
+ 41.2 9.981959 35.542003 -3.9564445E-3
+ 41.2 10.358569 35.486145 -5.4383035E-3
+ 41.2 10.861773 35.500125 -6.73928E-3
+ 41.2 11.366857 35.544105 -7.7619436E-3
+ 41.2 11.733208 35.581867 -8.528993E-3
+ 41.2 12.054832 35.617027 -9.201945E-3
+ 41.2 12.29958 35.643238 -9.825358E-3
+ 41.2 12.502989 35.666526 -0.010380683
+ 41.2 12.662872 35.68329 -0.010867223
+ 41.2 12.766809 35.693275 -0.011299316
+ 41.2 12.868526 35.704605 -0.01168812
+ 41.2 12.966469 35.715896 -0.012032959
+ 41.2 13.056756 35.728576 -0.012342917
+ 41.2 13.136735 35.736225 -0.012627607
+ 41.2 13.205132 35.74316 -0.012887895
+ 41.2 13.277177 35.75084 -0.013125949
+ 41.2 13.328008 35.754074 -0.013347499
+ 41.2 13.38021 35.761005 -0.013556697
+ 41.2 13.414692 35.7634 -0.013755029
+ 41.2 13.461919 35.769264 -0.013943439
+ 41.2 13.516837 35.775455 -0.014121805
+ 41.2 13.575085 35.783843 -0.01428803
+ 41.2 13.627803 35.790672 -0.014444526
+ 41.2 13.694608 35.798515 -0.014595031
+ 41.2 13.748568 35.80183 -0.014737344
+ 41.2 13.803029 35.810214 -0.014873026
+ 41.2 13.866467 35.817623 -0.015004424
+ 41.2 13.935909 35.824005 -0.015128883
+ 41.2 13.991107 35.827823 -0.015247933
+ 41.2 14.071948 35.836154 -0.01536251
+ 41.2 14.171639 35.845245 -0.01547371
+ 41.2 14.291493 35.854114 -0.015580284
+ 41.2 14.425228 35.86347 -0.015683478
+ 41.2 14.593353 35.862487 -0.015781432
+ 41.2 14.782487 35.86463 -0.015858557
+ 41.2 15.100249 35.870452 -0.015922869
+ 41.2 15.738472 35.86547 -0.015945805
+ 41.2 16.471912 35.88269 -0.015896613
+ 41.2 17.208858 35.87777 -0.015782602
+ 41.2 17.809189 35.88743 -0.015693111
+ 41.2 18.4925 35.903396 -0.01567707
+ 41.2 19.205196 35.908592 -0.015681246
+ 41.2 19.774734 35.89449 -0.015732182
+ 41.2 19.91825 35.894172 -0.015842004
+ 41.2 19.934229 35.894943 -0.015972082
+ 41.2 19.938509 35.896064 -0.016103478
+ 41.2 19.916298 35.890865 -0.016231976
+ 41.2 19.878147 35.895935 -0.016434103
+ 41.25 2.5128717 34.897262 0.0E+0
+ 41.25 2.5047814 34.902317 2.5470083E-5
+ 41.25 2.5114905 34.906955 -1.9097364E-5
+ 41.25 2.542885 34.914455 7.701127E-6
+ 41.25 2.5814287 34.919883 9.246584E-5
+ 41.25 2.6458907 34.929203 2.1929052E-4
+ 41.25 2.741048 34.94047 2.493357E-4
+ 41.25 2.8967261 34.952667 1.6026641E-4
+ 41.25 3.0915348 34.962242 4.6105167E-5
+ 41.25 3.3644688 34.974163 -6.46444E-5
+ 41.25 3.6045756 34.977043 -1.7458008E-4
+ 41.25 3.8720781 34.98894 -8.683657E-5
+ 41.25 4.3593072 35.04365 2.0736632E-4
+ 41.25 5.318985 35.18175 4.9212155E-4
+ 41.25 6.8961296 35.425365 6.761241E-4
+ 41.25 8.403507 35.64576 2.474884E-4
+ 41.25 9.38577 35.737384 -1.0550244E-3
+ 41.25 9.75734 35.67218 -2.633652E-3
+ 41.25 9.967195 35.540775 -4.19192E-3
+ 41.25 10.344356 35.484962 -5.679994E-3
+ 41.25 10.84702 35.49871 -6.977564E-3
+ 41.25 11.353534 35.54256 -8.009227E-3
+ 41.25 11.719042 35.580192 -8.797804E-3
+ 41.25 12.037885 35.615066 -9.490655E-3
+ 41.25 12.279393 35.64077 -0.010131873
+ 41.25 12.481656 35.663974 -0.01070224
+ 41.25 12.640628 35.680644 -0.011201606
+ 41.25 12.741998 35.690155 -0.011642011
+ 41.25 12.843227 35.701484 -0.012035013
+ 41.25 12.940622 35.712642 -0.012382319
+ 41.25 13.029308 35.725036 -0.012693421
+ 41.25 13.108627 35.732582 -0.012978682
+ 41.25 13.176653 35.739444 -0.013239867
+ 41.25 13.248077 35.74698 -0.013479319
+ 41.25 13.298009 35.75008 -0.013702652
+ 41.25 13.349944 35.75699 -0.013913428
+ 41.25 13.384228 35.759422 -0.014113018
+ 41.25 13.431757 35.76536 -0.014302479
+ 41.25 13.486709 35.77153 -0.014481914
+ 41.25 13.5461 35.78005 -0.014649351
+ 41.25 13.598874 35.786884 -0.014806885
+ 41.25 13.666313 35.794834 -0.014958388
+ 41.25 13.721363 35.79825 -0.015101852
+ 41.25 13.775907 35.806594 -0.015238605
+ 41.25 13.839592 35.813987 -0.015370879
+ 41.25 13.909712 35.820266 -0.015496205
+ 41.25 13.964723 35.824035 -0.015615963
+ 41.25 14.046465 35.832363 -0.015730768
+ 41.25 14.145965 35.841377 -0.01584141
+ 41.25 14.265106 35.849716 -0.015946848
+ 41.25 14.397393 35.85869 -0.016048007
+ 41.25 14.566874 35.85766 -0.016143931
+ 41.25 14.759978 35.860042 -0.016219418
+ 41.25 15.077332 35.865703 -0.016280996
+ 41.25 15.724498 35.860782 -0.016303102
+ 41.25 16.463776 35.877975 -0.016257474
+ 41.25 17.208715 35.87347 -0.01615042
+ 41.25 17.797895 35.88279 -0.0160606
+ 41.25 18.478275 35.898326 -0.016029453
+ 41.25 19.18985 35.903476 -0.016014922
+ 41.25 19.752466 35.88946 -0.016056493
+ 41.25 19.893072 35.889274 -0.016166316
+ 41.25 19.908834 35.890064 -0.016299006
+ 41.25 19.91341 35.891265 -0.016433092
+ 41.25 19.890814 35.885772 -0.016563622
+ 41.25 19.851324 35.89093 -0.016768958
+ 41.3 2.5126366 34.897155 0.0E+0
+ 41.3 2.5046963 34.902355 3.7528512E-5
+ 41.3 2.511093 34.906894 5.344368E-6
+ 41.3 2.5425515 34.9144 3.4007094E-5
+ 41.3 2.5808925 34.919754 1.1235021E-4
+ 41.3 2.6449027 34.92902 2.3031779E-4
+ 41.3 2.7397394 34.940345 2.5209342E-4
+ 41.3 2.895193 34.952545 1.6018953E-4
+ 41.3 3.0895454 34.962055 4.7234756E-5
+ 41.3 3.3607921 34.973754 -6.6590524E-5
+ 41.3 3.599652 34.976467 -1.9074196E-4
+ 41.3 3.8639647 34.98768 -1.4844126E-4
+ 41.3 4.3489842 35.04198 7.65385E-5
+ 41.3 5.2994122 35.178497 3.0077586E-4
+ 41.3 6.861831 35.4191 4.374584E-4
+ 41.3 8.370374 35.639934 -1.3109242E-5
+ 41.3 9.370766 35.735832 -1.2947217E-3
+ 41.3 9.7425584 35.670661 -2.8335163E-3
+ 41.3 9.953353 35.539764 -4.3750475E-3
+ 41.3 10.330686 35.483905 -5.86159E-3
+ 41.3 10.832624 35.497364 -7.1503696E-3
+ 41.3 11.340235 35.541065 -8.187142E-3
+ 41.3 11.704831 35.578556 -8.994209E-3
+ 41.3 12.020697 35.613117 -9.704268E-3
+ 41.3 12.259006 35.63833 -0.010360802
+ 41.3 12.460007 35.66142 -0.01094413
+ 41.3 12.618085 35.678005 -0.011454615
+ 41.3 12.717203 35.68709 -0.011901996
+ 41.3 12.818066 35.698436 -0.012298146
+ 41.3 12.914988 35.709472 -0.012647061
+ 41.3 13.002175 35.721591 -0.012958617
+ 41.3 13.080867 35.729053 -0.013243846
+ 41.3 13.148518 35.735847 -0.013505373
+ 41.3 13.219238 35.74322 -0.013745723
+ 41.3 13.268292 35.74621 -0.013970363
+ 41.3 13.319995 35.753093 -0.014182255
+ 41.3 13.354109 35.755577 -0.014382652
+ 41.3 13.401959 35.76159 -0.014572733
+ 41.3 13.456902 35.76773 -0.014752846
+ 41.3 13.517402 35.776367 -0.014921136
+ 41.3 13.570235 35.783203 -0.015079368
+ 41.3 13.638257 35.791255 -0.015231539
+ 41.3 13.694423 35.794776 -0.015375867
+ 41.3 13.749002 35.803066 -0.015513441
+ 41.3 13.812925 35.810443 -0.015646355
+ 41.3 13.883726 35.816623 -0.015772354
+ 41.3 13.938625 35.82035 -0.01589266
+ 41.3 14.021299 35.828666 -0.016007572
+ 41.3 14.120674 35.837593 -0.016117558
+ 41.3 14.239153 35.845413 -0.01622178
+ 41.3 14.370171 35.85401 -0.01632087
+ 41.3 14.541001 35.85298 -0.016414758
+ 41.3 14.738242 35.85562 -0.016488723
+ 41.3 15.05533 35.861133 -0.01654781
+ 41.3 15.710997 35.856296 -0.016569598
+ 41.3 16.455647 35.87344 -0.016528469
+ 41.3 17.208443 35.869403 -0.016429823
+ 41.3 17.788054 35.87836 -0.016341062
+ 41.3 18.46637 35.893417 -0.016295843
+ 41.3 19.176352 35.898517 -0.01626371
+ 41.3 19.730997 35.884654 -0.016296728
+ 41.3 19.868286 35.88459 -0.016406916
+ 41.3 19.883793 35.885406 -0.016542418
+ 41.3 19.888676 35.88668 -0.016679388
+ 41.3 19.865808 35.8809 -0.016812174
+ 41.3 19.82482 35.886127 -0.017020995
+ 41.35 2.5124943 34.897056 0.0E+0
+ 41.35 2.5046806 34.902393 4.91977E-5
+ 41.35 2.510747 34.90684 2.9414488E-5
+ 41.35 2.5422294 34.914344 5.9457113E-5
+ 41.35 2.580364 34.91963 1.3106396E-4
+ 41.35 2.6439378 34.92885 2.4023582E-4
+ 41.35 2.7384865 34.940227 2.5450397E-4
+ 41.35 2.8937547 34.95243 1.6127438E-4
+ 41.35 3.0876946 34.961883 5.1313567E-5
+ 41.35 3.3573055 34.973377 -6.3271145E-5
+ 41.35 3.5950632 34.97595 -1.983839E-4
+ 41.35 3.8565561 34.986557 -1.974368E-4
+ 41.35 4.3396086 35.04049 -3.7399444E-5
+ 41.35 5.281014 35.175472 1.3046061E-4
+ 41.35 6.82916 35.413185 2.2331004E-4
+ 41.35 8.338863 35.634456 -2.4466702E-4
+ 41.35 9.356398 35.734367 -1.4972585E-3
+ 41.35 9.728624 35.669284 -2.9872234E-3
+ 41.35 9.940462 35.538963 -4.503286E-3
+ 41.35 10.317601 35.482975 -5.980373E-3
+ 41.35 10.818635 35.496097 -7.254836E-3
+ 41.35 11.327013 35.53963 -8.2925874E-3
+ 41.35 11.690621 35.576965 -9.114802E-3
+ 41.35 12.003329 35.611183 -9.839132E-3
+ 41.35 12.238493 35.635913 -0.010508299
+ 41.35 12.438115 35.658874 -0.011102349
+ 41.35 12.595312 35.67538 -0.011622115
+ 41.35 12.692491 35.68409 -0.012075045
+ 41.35 12.793102 35.69547 -0.012473234
+ 41.35 12.889622 35.706394 -0.012822856
+ 41.35 12.975411 35.71825 -0.01313414
+ 41.35 13.053509 35.725643 -0.013418703
+ 41.35 13.120781 35.732376 -0.013679986
+ 41.35 13.190714 35.739582 -0.013920699
+ 41.35 13.238916 35.742462 -0.014146134
+ 41.35 13.29042 35.74933 -0.01435865
+ 41.35 13.324396 35.75186 -0.01455937
+ 41.35 13.37258 35.75795 -0.014749615
+ 41.35 13.427469 35.76406 -0.014929984
+ 41.35 13.489038 35.772804 -0.015098738
+ 41.35 13.541936 35.779644 -0.015257299
+ 41.35 13.610487 35.787784 -0.015409777
+ 41.35 13.667788 35.791427 -0.015554653
+ 41.35 13.722353 35.799636 -0.015692765
+ 41.35 13.786501 35.80699 -0.015826054
+ 41.35 13.857982 35.813076 -0.015952494
+ 41.35 13.912839 35.816772 -0.016073162
+ 41.35 13.99647 35.82507 -0.016188027
+ 41.35 14.095793 35.833896 -0.016297229
+ 41.35 14.213659 35.841213 -0.01640014
+ 41.35 14.343593 35.84944 -0.01649711
+ 41.35 14.51576 35.848453 -0.016588941
+ 41.35 14.717271 35.85138 -0.016661488
+ 41.35 15.034236 35.856746 -0.016718298
+ 41.35 15.697909 35.85202 -0.01674024
+ 41.35 16.447441 35.869087 -0.01670445
+ 41.35 17.207874 35.865566 -0.01661555
+ 41.35 17.779594 35.87415 -0.016529176
+ 41.35 18.456701 35.888675 -0.016470969
+ 41.35 19.164618 35.893726 -0.016422454
+ 41.35 19.710285 35.880073 -0.016447794
+ 41.35 19.843876 35.88013 -0.016558724
+ 41.35 19.859089 35.880966 -0.016697222
+ 41.35 19.864283 35.88231 -0.016837277
+ 41.35 19.841267 35.876262 -0.016972542
+ 41.35 19.798624 35.881534 -0.01718514
+ 41.4 2.5124444 34.896965 0.0E+0
+ 41.4 2.504734 34.902427 6.0468166E-5
+ 41.4 2.510454 34.906787 5.308954E-5
+ 41.4 2.54192 34.91429 8.406731E-5
+ 41.4 2.5798463 34.91951 1.4868748E-4
+ 41.4 2.643 34.92868 2.4917768E-4
+ 41.4 2.7372944 34.940124 2.5673094E-4
+ 41.4 2.8924164 34.952323 1.6368603E-4
+ 41.4 3.0859892 34.96173 5.8514448E-5
+ 41.4 3.3540174 34.973026 -5.443365E-5
+ 41.4 3.590814 34.975486 -1.9707002E-4
+ 41.4 3.8498513 34.985572 -2.329655E-4
+ 41.4 4.331181 35.039184 -1.3299564E-4
+ 41.4 5.2638173 35.172676 -1.6826329E-5
+ 41.4 6.7982215 35.407627 3.611548E-5
+ 41.4 8.309154 35.629344 -4.446184E-4
+ 41.4 9.342698 35.732997 -1.6602658E-3
+ 41.4 9.715573 35.668045 -3.092608E-3
+ 41.4 9.928545 35.538372 -4.574477E-3
+ 41.4 10.305143 35.48217 -6.0340724E-3
+ 41.4 10.805107 35.494907 -7.2886003E-3
+ 41.4 11.313919 35.538257 -8.323003E-3
+ 41.4 11.67646 35.575424 -9.156758E-3
+ 41.4 11.985845 35.60927 -9.892213E-3
+ 41.4 12.217927 35.633537 -0.010571163
+ 41.4 12.416058 35.65635 -0.011173559
+ 41.4 12.572385 35.672775 -0.011700655
+ 41.4 12.667929 35.681156 -0.012157633
+ 41.4 12.768395 35.69258 -0.012556705
+ 41.4 12.864577 35.703407 -0.012906093
+ 41.4 12.949072 35.71502 -0.013216349
+ 41.4 13.026606 35.72235 -0.013499588
+ 41.4 13.093492 35.729026 -0.013760017
+ 41.4 13.16256 35.73606 -0.014000528
+ 41.4 13.209941 35.73885 -0.014226215
+ 41.4 13.261281 35.745693 -0.014438831
+ 41.4 13.295149 35.748287 -0.014639369
+ 41.4 13.343673 35.754447 -0.014829295
+ 41.4 13.398466 35.76053 -0.015009474
+ 41.4 13.461059 35.76937 -0.015178277
+ 41.4 13.514029 35.7762 -0.01533677
+ 41.4 13.58305 35.784427 -0.015489172
+ 41.4 13.641498 35.788196 -0.01563425
+ 41.4 13.696003 35.796306 -0.015772589
+ 41.4 13.760359 35.803634 -0.015905954
+ 41.4 13.832508 35.809627 -0.016032582
+ 41.4 13.887393 35.8133 -0.016153388
+ 41.4 13.972 35.82157 -0.016268032
+ 41.4 14.071348 35.83029 -0.016376302
+ 41.4 14.188655 35.83712 -0.01647778
+ 41.4 14.317691 35.844985 -0.016572572
+ 41.4 14.491177 35.84409 -0.016662313
+ 41.4 14.697059 35.84731 -0.016733518
+ 41.4 15.01404 35.852542 -0.016788257
+ 41.4 15.685175 35.847953 -0.01681078
+ 41.4 16.439089 35.864917 -0.01678108
+ 41.4 17.206863 35.86196 -0.016703133
+ 41.4 17.77244 35.87016 -0.016620398
+ 41.4 18.449183 35.88411 -0.016550343
+ 41.4 19.154554 35.889106 -0.01648676
+ 41.4 19.690287 35.87571 -0.016505359
+ 41.4 19.81982 35.87589 -0.01661741
+ 41.4 19.8347 35.876747 -0.016759094
+ 41.4 19.840206 35.878147 -0.016902423
+ 41.4 19.817165 35.871845 -0.017040404
+ 41.4 19.77272 35.877147 -0.017257081
+ 41.45 2.512486 34.896884 0.0E+0
+ 41.45 2.5048553 34.902465 7.133E-5
+ 41.45 2.5102152 34.90674 7.634032E-5
+ 41.45 2.5416238 34.914245 1.0784929E-4
+ 41.45 2.579342 34.9194 1.6529842E-4
+ 41.45 2.6420917 34.92852 2.572751E-4
+ 41.45 2.736168 34.94003 2.5893474E-4
+ 41.45 2.8911833 34.952232 1.6757974E-4
+ 41.45 3.0844357 34.961593 6.8991335E-5
+ 41.45 3.3509354 34.972702 -3.986132E-5
+ 41.45 3.586906 34.975074 -1.8643145E-4
+ 41.45 3.843844 34.98472 -2.542846E-4
+ 41.45 4.3236975 35.038055 -2.0896619E-4
+ 41.45 5.2478423 35.1701 -1.3930263E-4
+ 41.45 6.769109 35.40244 -1.2192609E-4
+ 41.45 8.281405 35.62463 -6.1063095E-4
+ 41.45 9.329697 35.731712 -1.7816438E-3
+ 41.45 9.703432 35.666942 -3.147842E-3
+ 41.45 9.917621 35.537975 -4.586869E-3
+ 41.45 10.29335 35.481483 -6.020897E-3
+ 41.45 10.792089 35.4938 -7.2498284E-3
+ 41.45 11.301006 35.536952 -8.276403E-3
+ 41.45 11.662399 35.573932 -9.117868E-3
+ 41.45 11.968309 35.607383 -9.861126E-3
+ 41.45 12.197387 35.63121 -0.010546874
+ 41.45 12.393916 35.65385 -0.011155133
+ 41.45 12.549379 35.6702 -0.011687513
+ 41.45 12.643586 35.678302 -0.012146977
+ 41.45 12.744004 35.68978 -0.01254574
+ 41.45 12.839907 35.700523 -0.012893925
+ 41.45 12.923208 35.711902 -0.013202372
+ 41.45 13.000212 35.719184 -0.013483609
+ 41.45 13.066701 35.72581 -0.013742551
+ 41.45 13.134829 35.732662 -0.013982272
+ 41.45 13.181426 35.735374 -0.014207641
+ 41.45 13.232633 35.7422 -0.014419811
+ 41.45 13.266426 35.744857 -0.014619639
+ 41.45 13.315291 35.751087 -0.014808748
+ 41.45 13.369947 35.75713 -0.014988271
+ 41.45 13.433512 35.766063 -0.015156684
+ 41.45 13.486563 35.77288 -0.015314693
+ 41.45 13.555993 35.781177 -0.015466612
+ 41.45 13.615595 35.785087 -0.01561152
+ 41.45 13.669992 35.793083 -0.01574975
+ 41.45 13.734535 35.800373 -0.015882874
+ 41.45 13.807335 35.80628 -0.016009405
+ 41.45 13.862316 35.809936 -0.016130105
+ 41.45 13.947911 35.818176 -0.016244324
+ 41.45 14.047365 35.82678 -0.016351493
+ 41.45 14.164166 35.83314 -0.016451405
+ 41.45 14.292492 35.840652 -0.01654395
+ 41.45 14.467277 35.83989 -0.016631555
+ 41.45 14.677595 35.84342 -0.016701484
+ 41.45 14.994731 35.848522 -0.01675433
+ 41.45 15.672742 35.844097 -0.01677782
+ 41.45 16.430517 35.860935 -0.01675487
+ 41.45 17.205267 35.85859 -0.016688945
+ 41.45 17.766514 35.86639 -0.016611015
+ 41.45 18.443708 35.879726 -0.016530298
+ 41.45 19.146055 35.884654 -0.016453054
+ 41.45 19.67095 35.87157 -0.016465902
+ 41.45 19.796108 35.87187 -0.01657946
+ 41.45 19.810614 35.872745 -0.016724508
+ 41.45 19.816422 35.874195 -0.016871303
+ 41.45 19.793484 35.867656 -0.017012239
+ 41.45 19.747097 35.872962 -0.017233307
+ 41.5 2.5126175 34.896812 0.0E+0
+ 41.5 2.5050432 34.9025 8.177273E-5
+ 41.5 2.5100321 34.906692 9.9131633E-5
+ 41.5 2.5413417 34.914203 1.3080944E-4
+ 41.5 2.5788533 34.919292 1.8097056E-4
+ 41.5 2.641217 34.92837 2.6465664E-4
+ 41.5 2.7351112 34.939945 2.6127084E-4
+ 41.5 2.89006 34.952144 1.7309941E-4
+ 41.5 3.0830397 34.96147 8.2877515E-5
+ 41.5 3.348065 34.9724 -1.9375802E-5
+ 41.5 3.5833382 34.974716 -1.661706E-4
+ 41.5 3.8385221 34.983993 -2.6077471E-4
+ 41.5 4.317146 35.0371 -2.6420957E-4
+ 41.5 5.2331004 35.167755 -2.3542225E-4
+ 41.5 6.7419 35.397632 -2.488793E-4
+ 41.5 8.255771 35.62033 -7.406344E-4
+ 41.5 9.317415 35.730506 -1.8595887E-3
+ 41.5 9.692225 35.665973 -3.1514582E-3
+ 41.5 9.9077014 35.537765 -4.539143E-3
+ 41.5 10.282258 35.48092 -5.9395562E-3
+ 41.5 10.779628 35.492782 -7.137242E-3
+ 41.5 11.288327 35.53572 -8.1514054E-3
+ 41.5 11.648488 35.5725 -8.99657E-3
+ 41.5 11.950788 35.60553 -9.744169E-3
+ 41.5 12.176951 35.628936 -0.010433631
+ 41.5 12.371771 35.651386 -0.011045183
+ 41.5 12.526374 35.66766 -0.011580733
+ 41.5 12.619529 35.675533 -0.012041073
+ 41.5 12.719988 35.687076 -0.012438308
+ 41.5 12.815666 35.697742 -0.012784297
+ 41.5 12.89787 35.708904 -0.013090141
+ 41.5 12.974376 35.71615 -0.013368685
+ 41.5 13.040457 35.72273 -0.013625492
+ 41.5 13.107573 35.729393 -0.013863815
+ 41.5 13.153428 35.73204 -0.014088275
+ 41.5 13.204535 35.738842 -0.014299434
+ 41.5 13.238285 35.741573 -0.014498009
+ 41.5 13.287487 35.747867 -0.014685786
+ 41.5 13.341962 35.753875 -0.014864172
+ 41.5 13.406445 35.762882 -0.01503174
+ 41.5 13.459589 35.76968 -0.01518883
+ 41.5 13.529364 35.778045 -0.015339843
+ 41.5 13.590119 35.7821 -0.015484195
+ 41.5 13.644363 35.789962 -0.015621959
+ 41.5 13.70907 35.797206 -0.015754497
+ 41.5 13.782495 35.80303 -0.01588063
+ 41.5 13.837638 35.80668 -0.016000953
+ 41.5 13.924224 35.814884 -0.016114522
+ 41.5 14.023874 35.823356 -0.01622041
+ 41.5 14.140221 35.829277 -0.016318608
+ 41.5 14.268024 35.83644 -0.016408827
+ 41.5 14.444082 35.83586 -0.016494246
+ 41.5 14.658868 35.839706 -0.016562944
+ 41.5 14.976296 35.844692 -0.016614063
+ 41.5 15.660555 35.840454 -0.01663886
+ 41.5 16.42167 35.857147 -0.016623223
+ 41.5 17.20295 35.85545 -0.016570248
+ 41.5 17.761732 35.862842 -0.016498208
+ 41.5 18.440165 35.875522 -0.016408045
+ 41.5 19.139002 35.88038 -0.016318627
+ 41.5 19.652218 35.867645 -0.016326757
+ 41.5 19.772715 35.868064 -0.016442219
+ 41.5 19.786806 35.868957 -0.0165908
+ 41.5 19.7929 35.87045 -0.016741248
+ 41.5 19.77019 35.86369 -0.01688538
+ 41.5 19.721733 35.86898 -0.017111154
+ 41.55 2.5128364 34.896755 0.0E+0
+ 41.55 2.5052947 34.902534 9.178518E-5
+ 41.55 2.5099046 34.90665 1.2142215E-4
+ 41.55 2.5410742 34.914165 1.5294837E-4
+ 41.55 2.5783824 34.919193 1.9577262E-4
+ 41.55 2.6403784 34.92823 2.7144644E-4
+ 41.55 2.7341284 34.939872 2.638882E-4
+ 41.55 2.8890504 34.95207 1.803759E-4
+ 41.55 3.081806 34.96137 1.0028407E-4
+ 41.55 3.3454108 34.972126 7.160729E-6
+ 41.55 3.5801072 34.974403 -1.3606471E-4
+ 41.55 3.83387 34.98339 -2.5194694E-4
+ 41.55 4.311509 35.03631 -2.9781897E-4
+ 41.55 5.219593 35.165626 -3.0389335E-4
+ 41.55 6.716661 35.393207 -3.4309684E-4
+ 41.55 8.23238 35.616466 -8.328475E-4
+ 41.55 9.305874 35.729373 -1.8926176E-3
+ 41.55 9.681972 35.665134 -3.1023742E-3
+ 41.55 9.898796 35.53773 -4.430435E-3
+ 41.55 10.271899 35.480472 -5.7892897E-3
+ 41.55 10.76777 35.491855 -6.950142E-3
+ 41.55 11.275934 35.534557 -7.947258E-3
+ 41.55 11.634777 35.571125 -8.791974E-3
+ 41.55 11.933352 35.60371 -9.540359E-3
+ 41.55 12.156696 35.62672 -0.010230376
+ 41.55 12.349707 35.648963 -0.010842595
+ 41.55 12.503448 35.66516 -0.011379147
+ 41.55 12.595825 35.67285 -0.011838723
+ 41.55 12.696405 35.684467 -0.012233196
+ 41.55 12.791905 35.695064 -0.012575988
+ 41.55 12.873107 35.706024 -0.012878422
+ 41.55 12.949145 35.713245 -0.013153575
+ 41.55 13.014806 35.71978 -0.013407589
+ 41.55 13.080843 35.726253 -0.013643893
+ 41.55 13.126002 35.72885 -0.013866839
+ 41.55 13.177042 35.735633 -0.014076408
+ 41.55 13.210781 35.73844 -0.014273176
+ 41.55 13.26031 35.744792 -0.014459098
+ 41.55 13.314566 35.750762 -0.014635854
+ 41.55 13.379906 35.75983 -0.014802108
+ 41.55 13.433155 35.766605 -0.014957834
+ 41.55 13.503211 35.77503 -0.015107506
+ 41.55 13.565112 35.77924 -0.015250897
+ 41.55 13.61916 35.78695 -0.015387822
+ 41.55 13.684003 35.79414 -0.015519417
+ 41.55 13.758022 35.799884 -0.015644828
+ 41.55 13.813388 35.80353 -0.015764488
+ 41.55 13.900963 35.81169 -0.015877167
+ 41.55 14.0009 35.820037 -0.015981575
+ 41.55 14.116847 35.825527 -0.016077902
+ 41.55 14.244311 35.83236 -0.016165711
+ 41.55 14.421614 35.832004 -0.016248887
+ 41.55 14.640867 35.836177 -0.016316386
+ 41.55 14.958721 35.841045 -0.016365925
+ 41.55 15.648566 35.837024 -0.016392335
+ 41.55 16.412497 35.853553 -0.016384479
+ 41.55 17.199795 35.85254 -0.016345233
+ 41.55 17.758013 35.859516 -0.016280066
+ 41.55 18.438423 35.871501 -0.0161817
+ 41.55 19.133268 35.876274 -0.016081667
+ 41.55 19.634033 35.86394 -0.016086156
+ 41.55 19.749617 35.864475 -0.01620391
+ 41.55 19.76326 35.865383 -0.016356193
+ 41.55 19.769617 35.866905 -0.016510472
+ 41.55 19.747261 35.859947 -0.016658042
+ 41.55 19.696615 35.8652 -0.016888851
+ 41.6 2.5131392 34.8967 0.0E+0
+ 41.6 2.5056078 34.90257 1.0135544E-4
+ 41.6 2.509833 34.906612 1.4316446E-4
+ 41.6 2.540822 34.91413 1.742605E-4
+ 41.6 2.577932 34.9191 2.097673E-4
+ 41.6 2.639579 34.928096 2.7776267E-4
+ 41.6 2.7332234 34.93981 2.6692752E-4
+ 41.6 2.8881587 34.952 1.8952564E-4
+ 41.6 3.080738 34.961273 1.2129849E-4
+ 41.6 3.3429758 34.97187 3.9843736E-5
+ 41.6 3.5772068 34.974132 -9.59687E-5
+ 41.6 3.829866 34.982902 -2.2744836E-4
+ 41.6 4.306763 35.03568 -3.0909234E-4
+ 41.6 5.2073154 35.163707 -3.436933E-4
+ 41.6 6.6934413 35.389175 -4.032405E-4
+ 41.6 8.211351 35.613056 -8.858033E-4
+ 41.6 9.295083 35.72831 -1.8795922E-3
+ 41.6 9.672685 35.664413 -2.9999131E-3
+ 41.6 9.890906 35.53786 -4.2603593E-3
+ 41.6 10.262303 35.480136 -5.569883E-3
+ 41.6 10.756556 35.491016 -6.68843E-3
+ 41.6 11.263879 35.533477 -7.663853E-3
+ 41.6 11.621316 35.56981 -8.503891E-3
+ 41.6 11.916067 35.601936 -9.249439E-3
+ 41.6 12.136701 35.624572 -9.93682E-3
+ 41.6 12.327807 35.64659 -0.010547049
+ 41.6 12.480681 35.662715 -0.011082408
+ 41.6 12.572538 35.670265 -0.011539562
+ 41.6 12.673309 35.681957 -0.011930035
+ 41.6 12.768671 35.692497 -0.012268625
+ 41.6 12.848965 35.703266 -0.012566843
+ 41.6 12.924565 35.710472 -0.012837904
+ 41.6 12.989791 35.71697 -0.013088465
+ 41.6 13.054688 35.723243 -0.013322119
+ 41.6 13.099204 35.725807 -0.013542934
+ 41.6 13.150206 35.73257 -0.013750327
+ 41.6 13.183969 35.735454 -0.013944729
+ 41.6 13.233809 35.741863 -0.014128269
+ 41.6 13.287807 35.747795 -0.014302897
+ 41.6 13.353941 35.756912 -0.014467359
+ 41.6 13.40731 35.763656 -0.014621267
+ 41.6 13.477578 35.77212 -0.014769157
+ 41.6 13.540614 35.776496 -0.014911173
+ 41.6 13.594423 35.784042 -0.015046871
+ 41.6 13.659373 35.79117 -0.015177154
+ 41.6 13.733948 35.796836 -0.015301505
+ 41.6 13.789595 35.800487 -0.015420202
+ 41.6 13.87815 35.8086 -0.015531736
+ 41.6 13.978471 35.81681 -0.015634459
+ 41.6 14.094068 35.821903 -0.015728751
+ 41.6 14.221374 35.828414 -0.015814062
+ 41.6 14.399892 35.828323 -0.015894938
+ 41.6 14.623575 35.832824 -0.015961256
+ 41.6 14.941986 35.83759 -0.016009351
+ 41.6 15.636729 35.8338 -0.016037632
+ 41.6 16.402952 35.85015 -0.01603793
+ 41.6 17.195692 35.849853 -0.016013045
+ 41.6 17.755266 35.85641 -0.015955634
+ 41.6 18.438349 35.867675 -0.015850328
+ 41.6 19.128721 35.872344 -0.015741292
+ 41.6 19.616335 35.86045 -0.015743243
+ 41.6 19.726793 35.861095 -0.015863689
+ 41.6 19.739946 35.86202 -0.016019827
+ 41.6 19.746538 35.863555 -0.016178114
+ 41.6 19.724663 35.856422 -0.016329369
+ 41.6 19.671719 35.861618 -0.016565535
+ 41.65 2.5135223 34.896663 0.0E+0
+ 41.65 2.5059788 34.9026 1.1047079E-4
+ 41.65 2.509817 34.906578 1.6430521E-4
+ 41.65 2.540585 34.914104 1.9473379E-4
+ 41.65 2.577503 34.919017 2.230105E-4
+ 41.65 2.6388211 34.92797 2.8371621E-4
+ 41.65 2.7323992 34.939754 2.7051995E-4
+ 41.65 2.8873875 34.95194 2.0064934E-4
+ 41.65 3.0798394 34.961196 1.4598345E-4
+ 41.65 3.340762 34.97164 7.872486E-5
+ 41.65 3.5746288 34.973903 -4.581728E-5
+ 41.65 3.8264846 34.982513 -1.870663E-4
+ 41.65 4.3028793 35.03519 -2.9754015E-4
+ 41.65 5.196253 35.161994 -3.5408057E-4
+ 41.65 6.672276 35.38553 -4.282993E-4
+ 41.65 8.192781 35.610107 -8.983729E-4
+ 41.65 9.285052 35.72731 -1.819743E-3
+ 41.65 9.664372 35.66381 -2.8438244E-3
+ 41.65 9.884028 35.53814 -4.029024E-3
+ 41.65 10.253496 35.47991 -5.2816872E-3
+ 41.65 10.746027 35.49027 -6.3526253E-3
+ 41.65 11.252212 35.532474 -7.301753E-3
+ 41.65 11.608156 35.56856 -8.1328405E-3
+ 41.65 11.899002 35.60021 -8.871914E-3
+ 41.65 12.117041 35.6225 -9.55346E-3
+ 41.65 12.306154 35.64428 -0.010159039
+ 41.65 12.458153 35.660324 -0.010691
+ 41.65 12.549731 35.667778 -0.011144076
+ 41.65 12.650754 35.679553 -0.011529316
+ 41.65 12.746013 35.69004 -0.011862706
+ 41.65 12.825488 35.700637 -0.012155906
+ 41.65 12.900679 35.707836 -0.01242218
+ 41.65 12.965452 35.71429 -0.012668629
+ 41.65 13.029155 35.720363 -0.012899002
+ 41.65 13.073084 35.72291 -0.013117066
+ 41.65 13.124079 35.729656 -0.013321694
+ 41.65 13.157899 35.732624 -0.01351317
+ 41.65 13.20803 35.73908 -0.0136938
+ 41.65 13.261733 35.74497 -0.013865799
+ 41.65 13.328594 35.75412 -0.014027991
+ 41.65 13.3821 35.76083 -0.014179623
+ 41.65 13.452512 35.769332 -0.014325287
+ 41.65 13.516665 35.773876 -0.014465509
+ 41.65 13.570196 35.78124 -0.014599587
+ 41.65 13.635221 35.788295 -0.014728179
+ 41.65 13.710306 35.79389 -0.014851126
+ 41.65 13.766289 35.79755 -0.014968548
+ 41.65 13.85581 35.805614 -0.015078673
+ 41.65 13.956612 35.813682 -0.015179496
+ 41.65 14.071909 35.8184 -0.015271583
+ 41.65 14.199233 35.824604 -0.015354314
+ 41.65 14.378932 35.82482 -0.015432828
+ 41.65 14.606979 35.829647 -0.015497974
+ 41.65 14.926074 35.834312 -0.015544751
+ 41.65 15.625 35.830787 -0.01557512
+ 41.65 16.393002 35.846942 -0.01558385
+ 41.65 17.190548 35.84738 -0.015573804
+ 41.65 17.753407 35.85352 -0.015524927
+ 41.65 18.439798 35.864032 -0.015413955
+ 41.65 19.125217 35.868587 -0.015297577
+ 41.65 19.599052 35.857166 -0.015298111
+ 41.65 19.704214 35.857925 -0.015421641
+ 41.65 19.716848 35.858856 -0.01558179
+ 41.65 19.723637 35.8604 -0.015744256
+ 41.65 19.702362 35.85312 -0.015899433
+ 41.65 19.647024 35.858234 -0.016141282
+ 41.7 2.5139808 34.896633 0.0E+0
+ 41.7 2.5064046 34.902626 1.1911773E-4
+ 41.7 2.509856 34.906547 1.8478541E-4
+ 41.7 2.540364 34.91408 2.1434971E-4
+ 41.7 2.577098 34.918937 2.355506E-4
+ 41.7 2.6381072 34.927852 2.894098E-4
+ 41.7 2.7316591 34.939712 2.747857E-4
+ 41.7 2.8867394 34.951885 2.1383086E-4
+ 41.7 3.0791122 34.961135 1.7437583E-4
+ 41.7 3.338769 34.971424 1.2381081E-4
+ 41.7 3.5723624 34.97371 1.4373701E-5
+ 41.7 3.8236961 34.982223 -1.3073096E-4
+ 41.7 4.299821 35.034843 -2.6289062E-4
+ 41.7 5.1863832 35.160476 -3.346031E-4
+ 41.7 6.6531825 35.382263 -4.1760376E-4
+ 41.7 8.176747 35.60763 -8.697857E-4
+ 41.7 9.275782 35.72636 -1.7126887E-3
+ 41.7 9.657036 35.66331 -2.634301E-3
+ 41.7 9.878155 35.53856 -3.7370466E-3
+ 41.7 10.245498 35.47979 -4.9256333E-3
+ 41.7 10.736216 35.489616 -5.9438752E-3
+ 41.7 11.24098 35.53155 -6.862196E-3
+ 41.7 11.595342 35.567375 -7.6800687E-3
+ 41.7 11.882225 35.598533 -8.409046E-3
+ 41.7 12.097793 35.620506 -9.081591E-3
+ 41.7 12.28483 35.642032 -9.67988E-3
+ 41.7 12.435943 35.657997 -0.010206253
+ 41.7 12.527466 35.665393 -0.010653609
+ 41.7 12.628791 35.677253 -0.011032403
+ 41.7 12.723976 35.6877 -0.011359609
+ 41.7 12.802714 35.69813 -0.011647002
+ 41.7 12.877525 35.705333 -0.011907804
+ 41.7 12.94183 35.71175 -0.012149491
+ 41.7 13.00429 35.71762 -0.012375953
+ 41.7 13.047692 35.720165 -0.012590647
+ 41.7 13.098707 35.726886 -0.012791923
+ 41.7 13.132619 35.729942 -0.012979921
+ 41.7 13.183015 35.736434 -0.013157119
+ 41.7 13.236391 35.742282 -0.013325993
+ 41.7 13.303908 35.751457 -0.013485435
+ 41.7 13.357569 35.75813 -0.013634338
+ 41.7 13.428054 35.76666 -0.013777334
+ 41.7 13.493301 35.771377 -0.013915341
+ 41.7 13.54652 35.778545 -0.014047401
+ 41.7 13.611586 35.785514 -0.014173922
+ 41.7 13.68713 35.791046 -0.014295114
+ 41.7 13.743499 35.794715 -0.014410944
+ 41.7 13.833963 35.802726 -0.014519388
+ 41.7 13.935348 35.810653 -0.014618097
+ 41.7 14.050393 35.815025 -0.01470781
+ 41.7 14.177903 35.820934 -0.014787875
+ 41.7 14.358747 35.82149 -0.01486397
+ 41.7 14.591058 35.826644 -0.014927947
+ 41.7 14.910962 35.83122 -0.01497352
+ 41.7 15.61334 35.827976 -0.015006161
+ 41.7 16.382616 35.843925 -0.015023507
+ 41.7 17.184275 35.845123 -0.015028623
+ 41.7 17.75234 35.85084 -0.014988944
+ 41.7 18.442617 35.86058 -0.014873583
+ 41.7 19.122612 35.865005 -0.014751554
+ 41.7 19.58212 35.854087 -0.014751814
+ 41.7 19.681856 35.854957 -0.014878818
+ 41.7 19.693933 35.855895 -0.015043121
+ 41.7 19.700874 35.857433 -0.015209925
+ 41.7 19.680325 35.85002 -0.015369268
+ 41.7 19.622507 35.855037 -0.015617121
+ 41.75 2.51451 34.896614 0.0E+0
+ 41.75 2.506881 34.902652 1.2728204E-4
+ 41.75 2.5099494 34.906524 2.0454088E-4
+ 41.75 2.540159 34.914062 2.330833E-4
+ 41.75 2.576718 34.918865 2.4742807E-4
+ 41.75 2.6374394 34.927745 2.9493673E-4
+ 41.75 2.7310054 34.939674 2.7983292E-4
+ 41.75 2.8862166 34.95184 2.2913612E-4
+ 41.75 3.078558 34.961082 2.0648589E-4
+ 41.75 3.3369963 34.97123 1.7506263E-4
+ 41.75 3.5703945 34.97354 8.4506704E-5
+ 41.75 3.8214671 34.98202 -5.8516434E-5
+ 41.75 4.2975482 35.03462 -2.0509223E-4
+ 41.75 5.1776752 35.15914 -2.8510321E-4
+ 41.75 6.6361637 35.37938 -3.708362E-4
+ 41.75 8.163303 35.60563 -7.99648E-4
+ 41.75 9.267266 35.72546 -1.5584556E-3
+ 41.75 9.650672 35.662914 -2.371994E-3
+ 41.75 9.873272 35.5391 -3.3855675E-3
+ 41.75 10.238327 35.479766 -4.5032384E-3
+ 41.75 10.727155 35.489055 -5.4639633E-3
+ 41.75 11.230229 35.530712 -6.3471044E-3
+ 41.75 11.582923 35.566257 -7.1475524E-3
+ 41.75 11.865801 35.59691 -7.862867E-3
+ 41.75 12.079027 35.618595 -8.523306E-3
+ 41.75 12.263915 35.639854 -9.111715E-3
+ 41.75 12.414126 35.655742 -9.630343E-3
+ 41.75 12.5058 35.66312 -0.010070366
+ 41.75 12.607468 35.67506 -0.010441528
+ 41.75 12.702601 35.685462 -0.010761592
+ 41.75 12.780683 35.69575 -0.011042408
+ 41.75 12.855139 35.702964 -0.011297071
+ 41.75 12.918958 35.709342 -0.011533358
+ 41.75 12.980135 35.715007 -0.011755291
+ 41.75 13.023075 35.717567 -0.011966003
+ 41.75 13.074136 35.72427 -0.012163349
+ 41.75 13.108173 35.72741 -0.012347325
+ 41.75 13.158806 35.733936 -0.012520581
+ 41.75 13.211823 35.73974 -0.012685841
+ 41.75 13.279923 35.74892 -0.01284206
+ 41.75 13.333759 35.75555 -0.012987787
+ 41.75 13.404248 35.764095 -0.013127681
+ 41.75 13.47056 35.768993 -0.013263057
+ 41.75 13.523435 35.775955 -0.013392703
+ 41.75 13.588505 35.782833 -0.013516774
+ 41.75 13.66445 35.7883 -0.01363586
+ 41.75 13.721253 35.791984 -0.013749777
+ 41.75 13.812633 35.79994 -0.013856269
+ 41.75 13.914701 35.807723 -0.013952648
+ 41.75 14.029541 35.811775 -0.01403982
+ 41.75 14.157397 35.817405 -0.014117141
+ 41.75 14.339347 35.81834 -0.014190763
+ 41.75 14.575794 35.823814 -0.014253568
+ 41.75 14.896626 35.828296 -0.014298043
+ 41.75 15.601713 35.825366 -0.014333101
+ 41.75 16.371778 35.8411 -0.01435916
+ 41.75 17.176807 35.84307 -0.014379608
+ 41.75 17.751978 35.84837 -0.014349679
+ 41.75 18.446646 35.85732 -0.0142312
+ 41.75 19.120749 35.861587 -0.014105231
+ 41.75 19.565462 35.851203 -0.014106362
+ 41.75 19.659681 35.852184 -0.014237224
+ 41.75 19.671177 35.85313 -0.014405819
+ 41.75 19.67822 35.854644 -0.014577117
+ 41.75 19.65851 35.847137 -0.014740857
+ 41.75 19.598146 35.85203 -0.014995029
+ 41.8 2.5151038 34.896602 0.0E+0
+ 41.8 2.5074036 34.90267 1.3494886E-4
+ 41.8 2.5100955 34.906505 2.2350273E-4
+ 41.8 2.5399703 34.91405 2.5090336E-4
+ 41.8 2.5763652 34.9188 2.586751E-4
+ 41.8 2.6368203 34.927642 3.0038043E-4
+ 41.8 2.7304406 34.939647 2.8575671E-4
+ 41.8 2.8858208 34.951797 2.4661238E-4
+ 41.8 3.0781774 34.96104 2.422967E-4
+ 41.8 3.335441 34.971046 2.3239542E-4
+ 41.8 3.5687103 34.973403 1.6440277E-4
+ 41.8 3.8197605 34.981895 2.9359759E-5
+ 41.8 4.2960152 35.03451 -1.2431404E-4
+ 41.8 5.1700906 35.157978 -2.0571909E-4
+ 41.8 6.621206 35.376865 -2.8803705E-4
+ 41.8 8.152482 35.6041 -6.879563E-4
+ 41.8 9.259496 35.724597 -1.3574924E-3
+ 41.8 9.645271 35.66261 -2.0580224E-3
+ 41.8 9.86936 35.539752 -2.9762547E-3
+ 41.8 10.231996 35.479835 -4.016612E-3
+ 41.8 10.718869 35.488586 -4.915312E-3
+ 41.8 11.22 35.529953 -5.7590827E-3
+ 41.8 11.570942 35.56521 -6.537996E-3
+ 41.8 11.849794 35.595344 -7.2361766E-3
+ 41.8 12.060812 35.616775 -7.881497E-3
+ 41.8 12.243487 35.637752 -8.457507E-3
+ 41.8 12.392779 35.65356 -8.966289E-3
+ 41.8 12.484788 35.660953 -9.397411E-3
+ 41.8 12.586831 35.672973 -9.759794E-3
+ 41.8 12.681927 35.683345 -0.01007179
+ 41.8 12.759427 35.6935 -0.010345285
+ 41.8 12.833555 35.700725 -0.010593165
+ 41.8 12.896868 35.70707 -0.010823434
+ 41.8 12.95673 35.712532 -0.011040234
+ 41.8 12.999274 35.71512 -0.011246365
+ 41.8 13.050407 35.721797 -0.011439216
+ 41.8 13.084603 35.725025 -0.011618642
+ 41.8 13.13544 35.731575 -0.011787459
+ 41.8 13.18807 35.737335 -0.01194863
+ 41.8 13.256678 35.746505 -0.012101165
+ 41.8 13.310708 35.75309 -0.012243281
+ 41.8 13.38113 35.76164 -0.012379652
+ 41.8 13.448476 35.766723 -0.012511987
+ 41.8 13.500978 35.77347 -0.01263883
+ 41.8 13.566015 35.780246 -0.012760077
+ 41.8 13.6423 35.785652 -0.012876708
+ 41.8 13.699577 35.789352 -0.012988396
+ 41.8 13.79184 35.797245 -0.013092663
+ 41.8 13.894693 35.80489 -0.013186503
+ 41.8 14.00937 35.80865 -0.013270974
+ 41.8 14.137723 35.814022 -0.013345477
+ 41.8 14.32074 35.815364 -0.013416581
+ 41.8 14.561165 35.82115 -0.013478208
+ 41.8 14.883039 35.825553 -0.013521687
+ 41.8 15.590086 35.822952 -0.013559274
+ 41.8 16.360472 35.838455 -0.013594053
+ 41.8 17.16809 35.84121 -0.013629851
+ 41.8 17.752222 35.8461 -0.013610108
+ 41.8 18.451721 35.854236 -0.013489768
+ 41.8 19.119473 35.858337 -0.013361578
+ 41.8 19.549006 35.84851 -0.013364722
+ 41.8 19.637663 35.8496 -0.01349982
+ 41.8 19.648544 35.85055 -0.013672836
+ 41.8 19.655638 35.85203 -0.013848773
+ 41.8 19.636875 35.844455 -0.014017137
+ 41.8 19.573912 35.84921 -0.014277934
+ 41.85 2.5157566 34.896602 0.0E+0
+ 41.85 2.5079681 34.902687 1.4210284E-4
+ 41.85 2.5102934 34.906486 2.4159825E-4
+ 41.85 2.539798 34.914043 2.67773E-4
+ 41.85 2.5760402 34.918746 2.6931555E-4
+ 41.85 2.6362512 34.92755 3.0581353E-4
+ 41.85 2.7299666 34.93963 2.9263822E-4
+ 41.85 2.8855533 34.951763 2.662876E-4
+ 41.85 3.0779707 34.96101 2.8176375E-4
+ 41.85 3.3341002 34.970874 2.9567835E-4
+ 41.85 3.5672934 34.973285 2.5380245E-4
+ 41.85 3.818536 34.98183 1.3253877E-4
+ 41.85 4.295171 35.034507 -2.0943044E-5
+ 41.85 5.1635823 35.15698 -9.688239E-5
+ 41.85 6.6082773 35.37471 -1.6960659E-4
+ 41.85 8.144296 35.603046 -5.351081E-4
+ 41.85 9.252451 35.723762 -1.1106814E-3
+ 41.85 9.640819 35.662384 -1.6939804E-3
+ 41.85 9.866396 35.5405 -2.5113066E-3
+ 41.85 10.226513 35.479991 -3.4684531E-3
+ 41.85 10.711382 35.488212 -4.3009743E-3
+ 41.85 11.210333 35.52928 -5.1014134E-3
+ 41.85 11.55944 35.564228 -5.854825E-3
+ 41.85 11.834264 35.593845 -6.5325307E-3
+ 41.85 12.043215 35.615043 -7.15984E-3
+ 41.85 12.223621 35.63574 -7.7210306E-3
+ 41.85 12.371972 35.65146 -8.217938E-3
+ 41.85 12.464482 35.658897 -8.638648E-3
+ 41.85 12.566922 35.670997 -8.991153E-3
+ 41.85 12.66199 35.681335 -9.294198E-3
+ 41.85 12.738977 35.691371 -9.559661E-3
+ 41.85 12.8128 35.698616 -9.800141E-3
+ 41.85 12.87559 35.704925 -0.010023801
+ 41.85 12.934112 35.710182 -0.010234883
+ 41.85 12.976329 35.712814 -0.010435851
+ 41.85 13.027558 35.71947 -0.010623662
+ 41.85 13.061946 35.722785 -0.010798029
+ 41.85 13.11295 35.729354 -0.010961932
+ 41.85 13.165169 35.73507 -0.011118556
+ 41.85 13.234208 35.744216 -0.011266961
+ 41.85 13.288451 35.75075 -0.011405047
+ 41.85 13.358739 35.759292 -0.011537489
+ 41.85 13.427081 35.76457 -0.011666388
+ 41.85 13.479185 35.771087 -0.011790047
+ 41.85 13.544151 35.77775 -0.011908108
+ 41.85 13.620708 35.783096 -0.012021945
+ 41.85 13.678497 35.786815 -0.012131092
+ 41.85 13.771603 35.794647 -0.012232869
+ 41.85 13.875343 35.802154 -0.012323966
+ 41.85 13.989897 35.805652 -0.012405584
+ 41.85 14.118886 35.81078 -0.012477207
+ 41.85 14.302928 35.812564 -0.012545754
+ 41.85 14.547147 35.818645 -0.012606198
+ 41.85 14.870172 35.822975 -0.012648778
+ 41.85 15.578428 35.82072 -0.012688977
+ 41.85 16.348694 35.83599 -0.012732398
+ 41.85 17.158081 35.83953 -0.012783415
+ 41.85 17.752987 35.84402 -0.012774178
+ 41.85 18.45767 35.85134 -0.012653213
+ 41.85 19.118624 35.85525 -0.012524514
+ 41.85 19.532673 35.845996 -0.012530803
+ 41.85 19.615759 35.8472 -0.012670503
+ 41.85 19.626007 35.848155 -0.012848063
+ 41.85 19.633087 35.849586 -0.013028775
+ 41.85 19.615381 35.84197 -0.013201981
+ 41.85 19.549774 35.84656 -0.013469696
+ 41.9 2.5164613 34.89661 0.0E+0
+ 41.9 2.50857 34.9027 1.4872826E-4
+ 41.9 2.5105412 34.90648 2.5875144E-4
+ 41.9 2.539642 34.91404 2.8364986E-4
+ 41.9 2.5757443 34.918697 2.7936487E-4
+ 41.9 2.6357343 34.927467 3.112977E-4
+ 41.9 2.7295854 34.939617 3.00544E-4
+ 41.9 2.8854146 34.951732 2.8816983E-4
+ 41.9 3.0779371 34.96099 3.2481492E-4
+ 41.9 3.332969 34.970714 3.647352E-4
+ 41.9 3.5661253 34.97318 3.523678E-4
+ 41.9 3.817751 34.981826 2.5052396E-4
+ 41.9 4.2949604 35.03459 1.0442069E-4
+ 41.9 5.1580977 35.156124 4.068742E-5
+ 41.9 6.597332 35.3729 -1.6302161E-5
+ 41.9 8.138728 35.60245 -3.4190685E-4
+ 41.9 9.246111 35.722946 -8.193453E-4
+ 41.9 9.637291 35.662235 -1.2819377E-3
+ 41.9 9.864351 35.541324 -1.9934473E-3
+ 41.9 10.221883 35.480224 -2.8620404E-3
+ 41.9 10.70471 35.487922 -3.6246262E-3
+ 41.9 11.201263 35.528686 -4.3780403E-3
+ 41.9 11.548457 35.563316 -5.102169E-3
+ 41.9 11.819271 35.592407 -5.7562217E-3
+ 41.9 12.026294 35.61341 -6.3627776E-3
+ 41.9 12.204386 35.63381 -6.906846E-3
+ 41.9 12.351773 35.64944 -7.389942E-3
+ 41.9 12.444928 35.65696 -7.7988007E-3
+ 41.9 12.547778 35.66913 -8.140388E-3
+ 41.9 12.642822 35.67944 -8.433646E-3
+ 41.9 12.719361 35.689365 -8.690405E-3
+ 41.9 12.792901 35.696636 -8.922901E-3
+ 41.9 12.855148 35.702907 -9.139391E-3
+ 41.9 12.912314 35.707962 -9.344196E-3
+ 41.9 12.954276 35.710655 -9.539443E-3
+ 41.9 13.005623 35.71729 -9.721692E-3
+ 41.9 13.040235 35.72069 -9.890518E-3
+ 41.9 13.091366 35.727264 -0.010049055
+ 41.9 13.143152 35.732933 -0.010200695
+ 41.9 13.212544 35.742046 -0.010344544
+ 41.9 13.267022 35.748523 -0.010478201
+ 41.9 13.337106 35.757053 -0.01060633
+ 41.9 13.406405 35.762523 -0.010731416
+ 41.9 13.458091 35.768806 -0.010851525
+ 41.9 13.522947 35.775344 -0.010966052
+ 41.9 13.599703 35.780632 -0.011076766
+ 41.9 13.658037 35.784374 -0.01118307
+ 41.9 13.751943 35.79214 -0.011282101
+ 41.9 13.856666 35.799514 -0.011370263
+ 41.9 13.971135 35.80278 -0.011448889
+ 41.9 14.100887 35.807682 -0.011517581
+ 41.9 14.28591 35.809932 -0.011583544
+ 41.9 14.533714 35.8163 -0.011642801
+ 41.9 14.857993 35.82056 -0.011684579
+ 41.9 15.566712 35.818672 -0.01172744
+ 41.9 16.336445 35.8337 -0.011779348
+ 41.9 17.146757 35.838024 -0.011845309
+ 41.9 17.754173 35.84212 -0.011846779
+ 41.9 18.464327 35.84862 -0.011726395
+ 41.9 19.11804 35.852317 -0.011598883
+ 41.9 19.516384 35.843654 -0.011609428
+ 41.9 19.593937 35.84497 -0.011754085
+ 41.9 19.60353 35.84593 -0.011936302
+ 41.9 19.610535 35.847297 -0.012121916
+ 41.9 19.59398 35.83967 -0.01230017
+ 41.9 19.525705 35.84408 -0.01257508
+ 41.95 2.5172116 34.896625 0.0E+0
+ 41.95 2.5092041 34.902706 1.5480931E-4
+ 41.95 2.510837 34.90647 2.7488416E-4
+ 41.95 2.5395026 34.91404 2.9848725E-4
+ 41.95 2.5754785 34.91865 2.888304E-4
+ 41.95 2.635271 34.92739 3.168831E-4
+ 41.95 2.7292976 34.93961 3.0952531E-4
+ 41.95 2.8854048 34.95171 3.1224716E-4
+ 41.95 3.0780751 34.96098 3.7135047E-4
+ 41.95 3.3320412 34.970561 4.3934507E-4
+ 41.95 3.5651865 34.973087 4.5968467E-4
+ 41.95 3.81736 34.98186 3.8268597E-4
+ 41.95 4.295325 35.03475 2.5097146E-4
+ 41.95 5.153576 35.1554 2.0599243E-4
+ 41.95 6.5883064 35.37141 1.70769E-4
+ 41.95 8.135741 35.602306 -1.0956255E-4
+ 41.95 9.240443 35.72214 -4.8524825E-4
+ 41.95 9.634664 35.662143 -8.2443526E-4
+ 41.95 9.863193 35.542213 -1.4259171E-3
+ 41.95 10.218102 35.48053 -2.201219E-3
+ 41.95 10.698864 35.48772 -2.8905454E-3
+ 41.95 11.192821 35.528175 -3.5935477E-3
+ 41.95 11.538026 35.562473 -4.2848363E-3
+ 41.95 11.804867 35.591037 -4.912253E-3
+ 41.95 12.010107 35.611873 -5.49549E-3
+ 41.95 12.185848 35.63197 -6.0202726E-3
+ 41.95 12.332247 35.64751 -6.487729E-3
+ 41.95 12.426169 35.655132 -6.883379E-3
+ 41.95 12.529433 35.66737 -7.213074E-3
+ 41.95 12.624452 35.67765 -7.4957646E-3
+ 41.95 12.700601 35.68748 -7.7431946E-3
+ 41.95 12.773877 35.694782 -7.967164E-3
+ 41.95 12.835564 35.70101 -8.175955E-3
+ 41.95 12.891366 35.70587 -8.373955E-3
+ 41.95 12.933146 35.708637 -8.562952E-3
+ 41.95 12.98463 35.71525 -8.739145E-3
+ 41.95 13.019498 35.718734 -8.901976E-3
+ 41.95 13.070715 35.725307 -9.054723E-3
+ 41.95 13.12205 35.730926 -9.200969E-3
+ 41.95 13.191715 35.73999 -9.33986E-3
+ 41.95 13.246449 35.74641 -9.468716E-3
+ 41.95 13.316262 35.754913 -9.592173E-3
+ 41.95 13.386473 35.76058 -9.713087E-3
+ 41.95 13.437726 35.76662 -9.8292995E-3
+ 41.95 13.502431 35.773025 -9.939963E-3
+ 41.95 13.579313 35.77826 -0.01004724
+ 41.95 13.638218 35.782024 -0.010150415
+ 41.95 13.732874 35.789722 -0.010246455
+ 41.95 13.838676 35.796966 -0.010331505
+ 41.95 13.953093 35.80003 -0.010407012
+ 41.95 14.083723 35.804725 -0.010472735
+ 41.95 14.269682 35.807464 -0.010536102
+ 41.95 14.520839 35.814102 -0.010594171
+ 41.95 14.846468 35.8183 -0.010635243
+ 41.95 15.554916 35.816795 -0.010680793
+ 41.95 16.32373 35.831577 -0.010740957
+ 41.95 17.134106 35.83668 -0.010821445
+ 41.95 17.755692 35.840396 -0.01083371
+ 41.95 18.471508 35.84607 -0.010715077
+ 41.95 19.11756 35.84954 -0.010590414
+ 41.95 19.500061 35.841476 -0.010606299
+ 41.95 19.572151 35.842903 -0.010756254
+ 41.95 19.581076 35.843864 -0.010943235
+ 41.95 19.587936 35.845157 -0.011133863
+ 41.95 19.572626 35.837547 -0.01131736
+ 41.95 19.501675 35.84177 -0.011599725
+ 42.0 2.5180003 34.89665 0.0E+0
+ 42.0 2.5098655 34.902706 1.6033024E-4
+ 42.0 2.5111784 34.906467 2.899169E-4
+ 42.0 2.5393798 34.914047 3.1223453E-4
+ 42.0 2.5752434 34.918613 2.9771166E-4
+ 42.0 2.634863 34.927322 3.226084E-4
+ 42.0 2.7291052 34.939613 3.1961817E-4
+ 42.0 2.8855242 34.951686 3.3848732E-4
+ 42.0 3.078383 34.96097 4.2124334E-4
+ 42.0 3.3313105 34.970413 5.192438E-4
+ 42.0 3.5644557 34.972995 5.7526613E-4
+ 42.0 3.8173162 34.981933 5.2826915E-4
+ 42.0 4.296201 35.034973 4.1770766E-4
+ 42.0 5.1499505 35.154792 3.977688E-4
+ 42.0 6.5811233 35.37023 3.9016152E-4
+ 42.0 8.135275 35.602592 1.6031347E-4
+ 42.0 9.2354145 35.721332 -1.1059149E-4
+ 42.0 9.632903 35.66211 -3.244743E-4
+ 42.0 9.862884 35.543148 -8.1245566E-4
+ 42.0 10.215167 35.4809 -1.4903767E-3
+ 42.0 10.693851 35.487606 -2.1035843E-3
+ 42.0 11.185033 35.527744 -2.7531296E-3
+ 42.0 11.528179 35.5617 -3.4082815E-3
+ 42.0 11.791102 35.58974 -4.0063043E-3
+ 42.0 11.994702 35.61044 -4.5638536E-3
+ 42.0 12.168069 35.63023 -5.067346E-3
+ 42.0 12.313453 35.64567 -5.5174585E-3
+ 42.0 12.408244 35.65342 -5.8986376E-3
+ 42.0 12.511918 35.665718 -6.21554E-3
+ 42.0 12.606904 35.675971 -6.486948E-3
+ 42.0 12.682717 35.68572 -6.7244716E-3
+ 42.0 12.755747 35.693046 -6.939414E-3
+ 42.0 12.816855 35.699234 -7.1400203E-3
+ 42.0 12.871294 35.7039 -7.3307217E-3
+ 42.0 12.912966 35.706756 -7.5129703E-3
+ 42.0 12.964605 35.71334 -7.6826447E-3
+ 42.0 12.99976 35.716915 -7.839061E-3
+ 42.0 13.051019 35.723476 -7.985627E-3
+ 42.0 13.101889 35.72905 -8.126098E-3
+ 42.0 13.171747 35.738044 -8.259657E-3
+ 42.0 13.226755 35.744407 -8.383367E-3
+ 42.0 13.296233 35.752872 -8.501821E-3
+ 42.0 13.36731 35.758735 -8.618231E-3
+ 42.0 13.418118 35.76453 -8.730222E-3
+ 42.0 13.482633 35.770793 -8.836713E-3
+ 42.0 13.559561 35.775974 -8.940262E-3
+ 42.0 13.61906 35.779762 -9.040037E-3
+ 42.0 13.714412 35.78739 -9.132857E-3
+ 42.0 13.821384 35.794513 -9.214633E-3
+ 42.0 13.935778 35.7974 -9.286914E-3
+ 42.0 14.067388 35.80191 -9.349644E-3
+ 42.0 14.254235 35.805156 -9.410417E-3
+ 42.0 14.508493 35.812046 -9.467304E-3
+ 42.0 14.835559 35.81619 -9.50777E-3
+ 42.0 15.543018 35.81508 -9.556011E-3
+ 42.0 16.310566 35.829612 -9.624129E-3
+ 42.0 17.120129 35.83548 -9.718596E-3
+ 42.0 17.757448 35.83883 -9.741629E-3
+ 42.0 18.479044 35.843685 -9.625873E-3
+ 42.0 19.117022 35.846904 -9.50568E-3
+ 42.0 19.483624 35.83945 -9.527952E-3
+ 42.0 19.550365 35.84099 -9.683529E-3
+ 42.0 19.558607 35.84195 -9.875369E-3
+ 42.0 19.565252 35.84316 -0.010071116
+ 42.0 19.551268 35.8356 -0.010260034
+ 42.0 19.477648 35.839607 -0.010550091
+ 42.05 2.5188198 34.896682 0.0E+0
+ 42.05 2.510549 34.902702 1.6527565E-4
+ 42.05 2.5115633 34.90647 3.0377E-4
+ 42.05 2.5392737 34.91406 3.2483827E-4
+ 42.05 2.57504 34.918586 3.0600096E-4
+ 42.05 2.6345114 34.92726 3.2850084E-4
+ 42.05 2.7290084 34.93962 3.308427E-4
+ 42.05 2.8857722 34.951667 3.6683806E-4
+ 42.05 3.0788576 34.96097 4.7433981E-4
+ 42.05 3.3307685 34.970264 6.041253E-4
+ 42.05 3.5639116 34.972908 6.985564E-4
+ 42.05 3.817571 34.982025 6.863991E-4
+ 42.05 4.297524 35.03524 6.034434E-4
+ 42.05 5.147148 35.15429 6.145025E-4
+ 42.05 6.5756883 35.369335 6.4010825E-4
+ 42.05 8.137241 35.60329 4.6571923E-4
+ 42.05 9.230982 35.720512 3.019976E-4
+ 42.05 9.631971 35.662113 2.145011E-4
+ 42.05 9.863383 35.54412 -1.572767E-4
+ 42.05 10.213065 35.481327 -7.344129E-4
+ 42.05 10.689671 35.487567 -1.2691364E-3
+ 42.05 11.177921 35.527393 -1.8625518E-3
+ 42.05 11.518944 35.56099 -2.4785648E-3
+ 42.05 11.778021 35.588512 -3.0446841E-3
+ 42.05 11.980126 35.609107 -3.5743985E-3
+ 42.05 12.151103 35.628585 -4.0547712E-3
+ 42.05 12.295445 35.64393 -4.485974E-3
+ 42.05 12.391185 35.65182 -4.851523E-3
+ 42.05 12.495258 35.66417 -5.1548145E-3
+ 42.05 12.5902 35.674396 -5.414292E-3
+ 42.05 12.665723 35.684066 -5.6413887E-3
+ 42.05 12.738523 35.69143 -5.8468505E-3
+ 42.05 12.799035 35.69757 -6.038829E-3
+ 42.05 12.852122 35.70205 -6.2217777E-3
+ 42.05 12.893758 35.70501 -6.3968175E-3
+ 42.05 12.945568 35.711566 -6.55955E-3
+ 42.05 12.981039 35.715225 -6.7091672E-3
+ 42.05 13.032295 35.721767 -6.8491976E-3
+ 42.05 13.082689 35.72729 -6.983545E-3
+ 42.05 13.15266 35.736206 -7.1114297E-3
+ 42.05 13.207962 35.742504 -7.2296797E-3
+ 42.05 13.277041 35.75093 -7.342833E-3
+ 42.05 13.348935 35.75699 -7.4544344E-3
+ 42.05 13.399292 35.762535 -7.561904E-3
+ 42.05 13.463576 35.768642 -7.6639405E-3
+ 42.05 13.540469 35.773777 -7.7634896E-3
+ 42.05 13.600579 35.777584 -7.859616E-3
+ 42.05 13.69657 35.78515 -7.949007E-3
+ 42.05 13.804798 35.79215 -8.027367E-3
+ 42.05 13.919195 35.79489 -8.096333E-3
+ 42.05 14.051868 35.799236 -8.156064E-3
+ 42.05 14.239555 35.803005 -8.214259E-3
+ 42.05 14.496644 35.810127 -8.269978E-3
+ 42.05 14.825228 35.814216 -8.309939E-3
+ 42.05 15.531 35.81352 -8.360854E-3
+ 42.05 16.296967 35.827796 -8.4365624E-3
+ 42.05 17.104843 35.834415 -8.544331E-3
+ 42.05 17.759357 35.837413 -8.577994E-3
+ 42.05 18.486757 35.841457 -8.466191E-3
+ 42.05 19.116264 35.844402 -8.352035E-3
+ 42.05 19.46699 35.837562 -8.381698E-3
+ 42.05 19.52853 35.839214 -8.543202E-3
+ 42.05 19.536085 35.84018 -8.739989E-3
+ 42.05 19.542439 35.84129 -8.940941E-3
+ 42.05 19.529856 35.833812 -9.135444E-3
+ 42.05 19.453588 35.837593 -9.4334054E-3
+ 42.1 2.5196628 34.896717 0.0E+0
+ 42.1 2.51125 34.902694 1.696308E-4
+ 42.1 2.5119893 34.90648 3.1636477E-4
+ 42.1 2.5391845 34.91407 3.362432E-4
+ 42.1 2.5748686 34.91856 3.136838E-4
+ 42.1 2.634218 34.927207 3.3457632E-4
+ 42.1 2.7290081 34.939632 3.432034E-4
+ 42.1 2.886148 34.951652 3.972271E-4
+ 42.1 3.0794963 34.960975 5.3046015E-4
+ 42.1 3.3304073 34.97012 6.936438E-4
+ 42.1 3.5635313 34.972812 8.289353E-4
+ 42.1 3.8180747 34.98213 8.5609185E-4
+ 42.1 4.299225 35.03554 8.068224E-4
+ 42.1 5.1450915 35.15387 8.544479E-4
+ 42.1 6.5718936 35.3687 9.1854046E-4
+ 42.1 8.141531 35.604373 8.0427865E-4
+ 42.1 9.227098 35.71967 7.494832E-4
+ 42.1 9.631826 35.662147 7.886286E-4
+ 42.1 9.864646 35.54511 5.349623E-4
+ 42.1 10.21178 35.4818 6.129784E-5
+ 42.1 10.686322 35.487606 -3.9309234E-4
+ 42.1 11.171502 35.52711 -9.281046E-4
+ 42.1 11.510344 35.56035 -1.5022989E-3
+ 42.1 11.765664 35.587356 -2.0342795E-3
+ 42.1 11.966414 35.607875 -2.5342493E-3
+ 42.1 12.135 35.627044 -2.989863E-3
+ 42.1 12.278271 35.642284 -3.4007395E-3
+ 42.1 12.375021 35.65034 -3.7496131E-3
+ 42.1 12.479474 35.662727 -4.0385634E-3
+ 42.1 12.574356 35.672924 -4.2855367E-3
+ 42.1 12.64963 35.68253 -4.5017446E-3
+ 42.1 12.722215 35.689922 -4.6973242E-3
+ 42.1 12.782115 35.69602 -4.88028E-3
+ 42.1 12.833867 35.700317 -5.0550643E-3
+ 42.1 12.875541 35.703392 -5.222476E-3
+ 42.1 12.927535 35.709922 -5.377881E-3
+ 42.1 12.96335 35.71366 -5.520357E-3
+ 42.1 13.014558 35.720176 -5.6535345E-3
+ 42.1 13.064467 35.72565 -5.7814465E-3
+ 42.1 13.134472 35.73447 -5.9033483E-3
+ 42.1 13.190085 35.740707 -6.0158604E-3
+ 42.1 13.258705 35.749076 -6.1234505E-3
+ 42.1 13.331365 35.755332 -6.229969E-3
+ 42.1 13.381268 35.760627 -6.3326465E-3
+ 42.1 13.445283 35.766574 -6.4299753E-3
+ 42.1 13.522058 35.77166 -6.5252794E-3
+ 42.1 13.582789 35.775485 -6.6175302E-3
+ 42.1 13.679358 35.78298 -6.7033036E-3
+ 42.1 13.78892 35.789875 -6.778129E-3
+ 42.1 13.903341 35.7925 -6.8437093E-3
+ 42.1 14.03715 35.796695 -6.900455E-3
+ 42.1 14.225625 35.801006 -6.9561065E-3
+ 42.1 14.48526 35.80834 -7.010681E-3
+ 42.1 14.815431 35.812377 -7.0502446E-3
+ 42.1 15.518847 35.8121 -7.103797E-3
+ 42.1 16.28296 35.826122 -7.186672E-3
+ 42.1 17.08828 35.833465 -7.3069515E-3
+ 42.1 17.761328 35.836132 -7.3509984E-3
+ 42.1 18.494476 35.839374 -7.244166E-3
+ 42.1 19.115135 35.842033 -7.1375472E-3
+ 42.1 19.45008 35.8358 -7.1755545E-3
+ 42.1 19.506605 35.83757 -7.3432694E-3
+ 42.1 19.513466 35.838535 -7.545079E-3
+ 42.1 19.519457 35.83954 -7.7513116E-3
+ 42.1 19.508339 35.832172 -7.951543E-3
+ 42.1 19.429464 35.835716 -8.257596E-3
+ 42.15 2.5205218 34.89676 0.0E+0
+ 42.15 2.511963 34.90268 1.7338184E-4
+ 42.15 2.5124537 34.906486 3.2762446E-4
+ 42.15 2.5391123 34.91409 3.463932E-4
+ 42.15 2.5747296 34.91854 3.2073984E-4
+ 42.15 2.6339836 34.92716 3.4083984E-4
+ 42.15 2.7291047 34.93965 3.5668915E-4
+ 42.15 2.88665 34.951637 4.2956275E-4
+ 42.15 3.0802955 34.960987 5.8939954E-4
+ 42.15 3.3302175 34.96997 7.874159E-4
+ 42.15 3.5632917 34.97271 9.6572353E-4
+ 42.15 3.8187775 34.982234 1.0362634E-3
+ 42.15 4.3012332 35.035861 1.0263333E-3
+ 42.15 5.143698 35.153514 1.1156485E-3
+ 42.15 6.5696187 35.368297 1.2231125E-3
+ 42.15 8.148011 35.605812 1.1732641E-3
+ 42.15 9.223713 35.718795 1.2284453E-3
+ 42.15 9.632421 35.662204 1.3936592E-3
+ 42.15 9.866625 35.546104 1.2592E-3
+ 42.15 10.211293 35.48232 8.9095364E-4
+ 42.15 10.683792 35.487716 5.182108E-4
+ 42.15 11.165788 35.526905 4.3452626E-5
+ 42.15 11.502397 35.55977 -4.8659142E-4
+ 42.15 11.754065 35.586273 -9.82491E-4
+ 42.15 11.9536 35.606746 -1.45106E-3
+ 42.15 12.119802 35.625606 -1.8804785E-3
+ 42.15 12.261975 35.640735 -2.2697737E-3
+ 42.15 12.359775 35.648967 -2.6010463E-3
+ 42.15 12.464583 35.661384 -2.8750181E-3
+ 42.15 12.559385 35.67155 -3.1089922E-3
+ 42.15 12.634447 35.681102 -3.313913E-3
+ 42.15 12.706827 35.688526 -3.4992631E-3
+ 42.15 12.766099 35.69457 -3.6728517E-3
+ 42.15 12.816545 35.698696 -3.8391067E-3
+ 42.15 12.858328 35.7019 -3.998515E-3
+ 42.15 12.910518 35.708404 -4.146252E-3
+ 42.15 12.946702 35.712223 -4.281285E-3
+ 42.15 12.997816 35.718696 -4.407335E-3
+ 42.15 13.047236 35.72412 -4.5285383E-3
+ 42.15 13.117195 35.732837 -4.6441867E-3
+ 42.15 13.173135 35.739002 -4.7507206E-3
+ 42.15 13.241238 35.74731 -4.852521E-3
+ 42.15 13.314612 35.753765 -4.9537187E-3
+ 42.15 13.364064 35.758804 -5.051364E-3
+ 42.15 13.427772 35.764583 -5.143762E-3
+ 42.15 13.504345 35.76962 -5.234604E-3
+ 42.15 13.565703 35.773464 -5.3227795E-3
+ 42.15 13.662784 35.78089 -5.404771E-3
+ 42.15 13.773752 35.78769 -5.4759634E-3
+ 42.15 13.888215 35.79022 -5.5381143E-3
+ 42.15 14.023212 35.794292 -5.5919042E-3
+ 42.15 14.212423 35.799144 -5.6450674E-3
+ 42.15 14.474305 35.806667 -5.69853E-3
+ 42.15 14.806124 35.810665 -5.737809E-3
+ 42.15 15.506546 35.810817 -5.793947E-3
+ 42.15 16.26857 35.824577 -5.8835134E-3
+ 42.15 17.070484 35.832614 -6.0154022E-3
+ 42.15 17.763273 35.83497 -6.069487E-3
+ 42.15 18.50203 35.837432 -5.968582E-3
+ 42.15 19.113478 35.83978 -5.870924E-3
+ 42.15 19.432817 35.834156 -5.9181693E-3
+ 42.15 19.484537 35.83604 -6.0923565E-3
+ 42.15 19.490707 35.837005 -6.299253E-3
+ 42.15 19.49626 35.83789 -6.5108253E-3
+ 42.15 19.486662 35.83067 -6.716909E-3
+ 42.15 19.405237 35.83396 -7.0312074E-3
+ 42.2 2.521389 34.896804 0.0E+0
+ 42.2 2.5126831 34.902656 1.7651614E-4
+ 42.2 2.5129537 34.9065 3.3747573E-4
+ 42.2 2.539057 34.914112 3.552326E-4
+ 42.2 2.5746235 34.918525 3.271436E-4
+ 42.2 2.6338093 34.927116 3.4728585E-4
+ 42.2 2.729298 34.939674 3.7127354E-4
+ 42.2 2.887277 34.951625 4.6373446E-4
+ 42.2 3.0812504 34.961 6.5092934E-4
+ 42.2 3.3301892 34.96982 8.8502303E-4
+ 42.2 3.5631694 34.97259 1.1081881E-3
+ 42.2 3.8196287 34.982326 1.2257406E-3
+ 42.2 4.303478 35.036186 1.260327E-3
+ 42.2 5.142881 35.153213 1.395961E-3
+ 42.2 6.5687294 35.368103 1.5512296E-3
+ 42.2 8.156528 35.60757 1.5696246E-3
+ 42.2 9.220767 35.717876 1.7351113E-3
+ 42.2 9.6337 35.66227 2.024996E-3
+ 42.2 9.869267 35.547092 2.0100174E-3
+ 42.2 10.211577 35.482864 1.7483783E-3
+ 42.2 10.682066 35.487892 1.4580484E-3
+ 42.2 11.160785 35.526763 1.0449551E-3
+ 42.2 11.495118 35.559253 5.6102324E-4
+ 42.2 11.743253 35.585266 1.0283839E-4
+ 42.2 11.941708 35.60572 -3.3294054E-4
+ 42.2 12.105544 35.62427 -7.3494086E-4
+ 42.2 12.246592 35.63929 -1.1015688E-3
+ 42.2 12.345465 35.64771 -1.4144425E-3
+ 42.2 12.450597 35.66014 -1.6728959E-3
+ 42.2 12.545295 35.670276 -1.8934576E-3
+ 42.2 12.620175 35.67978 -2.0867593E-3
+ 42.2 12.69236 35.68723 -2.2615904E-3
+ 42.2 12.750991 35.693222 -2.425521E-3
+ 42.2 12.800167 35.697185 -2.5829307E-3
+ 42.2 12.842128 35.700527 -2.734007E-3
+ 42.2 12.894521 35.707 -2.87378E-3
+ 42.2 12.931099 35.710895 -3.001117E-3
+ 42.2 12.982074 35.717323 -3.119807E-3
+ 42.2 13.031004 35.7227 -3.2340693E-3
+ 42.2 13.10084 35.731292 -3.3432326E-3
+ 42.2 13.15712 35.737392 -3.4435878E-3
+ 42.2 13.224651 35.745624 -3.539412E-3
+ 42.2 13.298685 35.752277 -3.6350856E-3
+ 42.2 13.347693 35.757064 -3.7274935E-3
+ 42.2 13.411057 35.76267 -3.8147715E-3
+ 42.2 13.487342 35.767654 -3.9009647E-3
+ 42.2 13.549328 35.77152 -3.9848936E-3
+ 42.2 13.646855 35.77888 -4.0629636E-3
+ 42.2 13.75929 35.785583 -4.1304524E-3
+ 42.2 13.873809 35.788047 -4.189152E-3
+ 42.2 14.010032 35.792015 -4.240037E-3
+ 42.2 14.199924 35.79742 -4.2907833E-3
+ 42.2 14.463745 35.805107 -4.3431795E-3
+ 42.2 14.797262 35.809066 -4.382293E-3
+ 42.2 15.494087 35.809654 -4.440952E-3
+ 42.2 16.253828 35.82315 -4.53669E-3
+ 42.2 17.051512 35.831851 -4.679188E-3
+ 42.2 17.765114 35.833915 -4.7428673E-3
+ 42.2 18.509249 35.835613 -4.6487785E-3
+ 42.2 19.111147 35.83764 -4.5614186E-3
+ 42.2 19.415125 35.832614 -4.618732E-3
+ 42.2 19.46228 35.834613 -4.799627E-3
+ 42.2 19.467768 35.83558 -5.011663E-3
+ 42.2 19.472803 35.836338 -5.228617E-3
+ 42.2 19.464771 35.829292 -5.4406542E-3
+ 42.2 19.38087 35.832317 -5.7633216E-3
+ 42.25 2.5222575 34.89685 0.0E+0
+ 42.25 2.5134057 34.90263 1.7902265E-4
+ 42.25 2.5134866 34.906517 3.458496E-4
+ 42.25 2.539019 34.91414 3.6270727E-4
+ 42.25 2.5745501 34.918518 3.3286554E-4
+ 42.25 2.6336963 34.927082 3.5389894E-4
+ 42.25 2.729588 34.939697 3.8691534E-4
+ 42.25 2.8880267 34.95161 4.9961346E-4
+ 42.25 3.082357 34.96101 7.147983E-4
+ 42.25 3.3303117 34.969657 9.860145E-4
+ 42.25 3.5631403 34.972454 1.2555484E-3
+ 42.25 3.8205785 34.982402 1.4232733E-3
+ 42.25 4.305886 35.036502 1.507034E-3
+ 42.25 5.14255 35.152946 1.6930795E-3
+ 42.25 6.5690803 35.368083 1.9000788E-3
+ 42.25 8.166906 35.60962 1.9900195E-3
+ 42.25 9.2182 35.7169 2.2653951E-3
+ 42.25 9.63561 35.66233 2.6777407E-3
+ 42.25 9.872521 35.548057 2.7816912E-3
+ 42.25 10.212603 35.483436 2.6270824E-3
+ 42.25 10.681125 35.488132 2.4193748E-3
+ 42.25 11.156495 35.526687 2.0689035E-3
+ 42.25 11.488515 35.558795 1.6326596E-3
+ 42.25 11.73325 35.58433 1.2135011E-3
+ 42.25 11.930756 35.604793 8.1162573E-4
+ 42.25 12.092256 35.62304 4.380452E-4
+ 42.25 12.232153 35.637943 9.499374E-5
+ 42.25 12.332101 35.646556 -1.9881439E-4
+ 42.25 12.437522 35.658992 -4.4131104E-4
+ 42.25 12.53209 35.669094 -6.4813194E-4
+ 42.25 12.606815 35.678554 -8.2955113E-4
+ 42.25 12.67881 35.68603 -9.936324E-4
+ 42.25 12.736789 35.691963 -1.1476699E-3
+ 42.25 12.784738 35.695777 -1.2959703E-3
+ 42.25 12.826943 35.699264 -1.438436E-3
+ 42.25 12.879547 35.705707 -1.5699979E-3
+ 42.25 12.916541 35.70968 -1.6894308E-3
+ 42.25 12.967333 35.71605 -1.8005752E-3
+ 42.25 13.015775 35.721374 -1.9077071E-3
+ 42.25 13.08541 35.72984 -2.0101955E-3
+ 42.25 13.14204 35.735866 -2.1042122E-3
+ 42.25 13.208949 35.744022 -2.1939163E-3
+ 42.25 13.283589 35.750862 -2.2839005E-3
+ 42.25 13.332165 35.755405 -2.3709007E-3
+ 42.25 13.395148 35.760826 -2.4529043E-3
+ 42.25 13.471062 35.765766 -2.534295E-3
+ 42.25 13.53367 35.769645 -2.613836E-3
+ 42.25 13.631572 35.77694 -2.687873E-3
+ 42.25 13.745529 35.783565 -2.751612E-3
+ 42.25 13.860111 35.78598 -2.806863E-3
+ 42.25 13.997582 35.789863 -2.8549146E-3
+ 42.25 14.188096 35.795822 -2.9033361E-3
+ 42.25 14.45354 35.803653 -2.9547233E-3
+ 42.25 14.788796 35.807575 -2.993799E-3
+ 42.25 15.481462 35.8086 -3.0549033E-3
+ 42.25 16.238771 35.821826 -3.1562526E-3
+ 42.25 17.031431 35.83116 -3.3082736E-3
+ 42.25 17.766764 35.83295 -3.3810127E-3
+ 42.25 18.515974 35.833908 -3.294557E-3
+ 42.25 19.108 35.835594 -3.2187371E-3
+ 42.25 19.396923 35.83116 -3.2868767E-3
+ 42.25 19.439785 35.83327 -3.4746876E-3
+ 42.25 19.4446 35.834243 -3.6919021E-3
+ 42.25 19.449047 35.83487 -3.9142635E-3
+ 42.25 19.442617 35.828022 -4.1323322E-3
+ 42.25 19.356323 35.830776 -4.463455E-3
+ 42.3 2.5231194 34.896903 0.0E+0
+ 42.3 2.514126 34.9026 1.8089206E-4
+ 42.3 2.5140497 34.90654 3.5268283E-4
+ 42.3 2.5389988 34.914165 3.6876584E-4
+ 42.3 2.5745098 34.918514 3.378728E-4
+ 42.3 2.6336455 34.927055 3.606545E-4
+ 42.3 2.7299747 34.939727 4.035589E-4
+ 42.3 2.8888974 34.9516 5.370538E-4
+ 42.3 3.0836098 34.96102 7.807341E-4
+ 42.3 3.330574 34.969486 1.0899105E-3
+ 42.3 3.5631806 34.972293 1.4069832E-3
+ 42.3 3.8215773 34.982444 1.6275457E-3
+ 42.3 4.308383 35.036792 1.7645846E-3
+ 42.3 5.1426134 35.152694 2.004563E-3
+ 42.3 6.570516 35.36821 2.2666633E-3
+ 42.3 8.178949 35.611907 2.4308576E-3
+ 42.3 9.215946 35.715862 2.8149401E-3
+ 42.3 9.638089 35.662376 3.3467442E-3
+ 42.3 9.87633 35.548984 3.568255E-3
+ 42.3 10.214338 35.484024 3.5203315E-3
+ 42.3 10.680941 35.488426 3.394897E-3
+ 42.3 11.152912 35.52667 3.1075424E-3
+ 42.3 11.482594 35.558395 2.7201636E-3
+ 42.3 11.724074 35.583473 2.3410124E-3
+ 42.3 11.920754 35.603965 1.9738713E-3
+ 42.3 12.07996 35.621913 1.629485E-3
+ 42.3 12.218681 35.6367 1.3107381E-3
+ 42.3 12.319692 35.645507 1.0365265E-3
+ 42.3 12.425361 35.65794 8.1032165E-4
+ 42.3 12.51977 35.668003 6.174831E-4
+ 42.3 12.594361 35.677425 4.481396E-4
+ 42.3 12.666171 35.68493 2.949779E-4
+ 42.3 12.723486 35.6908 1.510112E-4
+ 42.3 12.770262 35.69447 1.2030962E-5
+ 42.3 12.812773 35.698116 -1.2159684E-4
+ 42.3 12.865592 35.704524 -2.447506E-4
+ 42.3 12.903022 35.708564 -3.5612116E-4
+ 42.3 12.953589 35.71487 -4.5957995E-4
+ 42.3 13.001547 35.72015 -5.59436E-4
+ 42.3 13.070907 35.72847 -6.55103E-4
+ 42.3 13.127894 35.734424 -7.426646E-4
+ 42.3 13.194134 35.742492 -8.2614604E-4
+ 42.3 13.269325 35.749523 -9.103153E-4
+ 42.3 13.317484 35.753822 -9.917746E-4
+ 42.3 13.380053 35.759056 -1.0683862E-3
+ 42.3 13.45551 35.763946 -1.1448541E-3
+ 42.3 13.518731 35.767837 -1.2198967E-3
+ 42.3 13.616936 35.775062 -1.2898184E-3
+ 42.3 13.732456 35.78162 -1.3497898E-3
+ 42.3 13.847107 35.784015 -1.4016215E-3
+ 42.3 13.98583 35.787834 -1.4469301E-3
+ 42.3 14.176907 35.794345 -1.493138E-3
+ 42.3 14.443654 35.802295 -1.5435863E-3
+ 42.3 14.780676 35.806186 -1.5827586E-3
+ 42.3 15.468664 35.807647 -1.6462246E-3
+ 42.3 16.223434 35.820602 -1.752593E-3
+ 42.3 17.010323 35.83052 -1.9129738E-3
+ 42.3 17.768148 35.83206 -1.9941562E-3
+ 42.3 18.52205 35.832302 -1.916073E-3
+ 42.3 19.103903 35.83364 -1.852932E-3
+ 42.3 19.378143 35.82978 -1.9325799E-3
+ 42.3 19.417 35.832 -2.1274853E-3
+ 42.3 19.421158 35.832977 -2.3499028E-3
+ 42.3 19.424944 35.833465 -2.5776776E-3
+ 42.3 19.420141 35.82685 -2.8018304E-3
+ 42.3 19.331562 35.829326 -3.141458E-3
+ 42.35 2.5239677 34.896953 0.0E+0
+ 42.35 2.51484 34.90256 1.821173E-4
+ 42.35 2.51464 34.906562 3.5791887E-4
+ 42.35 2.5389962 34.9142 3.7336096E-4
+ 42.35 2.5745022 34.918514 3.4213054E-4
+ 42.35 2.6336576 34.92703 3.675194E-4
+ 42.35 2.7304573 34.939762 4.2113495E-4
+ 42.35 2.8898861 34.951587 5.7589303E-4
+ 42.35 3.0850038 34.961032 8.4844505E-4
+ 42.35 3.330965 34.969306 1.1962053E-3
+ 42.35 3.5632677 34.972103 1.5616365E-3
+ 42.35 3.8225767 34.98245 1.8371892E-3
+ 42.35 4.310897 35.03705 2.0310278E-3
+ 42.35 5.142976 35.152446 2.327863E-3
+ 42.35 6.5728726 35.368446 2.6478385E-3
+ 42.35 8.192445 35.614402 2.88834E-3
+ 42.35 9.213936 35.714744 3.3791721E-3
+ 42.35 9.641074 35.6624 4.026666E-3
+ 42.35 9.880637 35.54987 4.3635643E-3
+ 42.35 10.216743 35.48462 4.4212196E-3
+ 42.35 10.681485 35.488765 4.3771537E-3
+ 42.35 11.150029 35.526706 4.152945E-3
+ 42.35 11.477354 35.558052 3.815201E-3
+ 42.35 11.715735 35.582687 3.476703E-3
+ 42.35 11.911707 35.60323 3.1448404E-3
+ 42.35 12.068669 35.620887 2.8301924E-3
+ 42.35 12.206193 35.63555 2.5362935E-3
+ 42.35 12.308238 35.64456 2.2820713E-3
+ 42.35 12.414113 35.65698 2.0723887E-3
+ 42.35 12.508331 35.666996 1.8936861E-3
+ 42.35 12.582804 35.676387 1.7365401E-3
+ 42.35 12.654432 35.683906 1.594406E-3
+ 42.35 12.711075 35.689712 1.4606293E-3
+ 42.35 12.756737 35.693252 1.3311255E-3
+ 42.35 12.799613 35.697063 1.20651E-3
+ 42.35 12.852648 35.70344 1.0919105E-3
+ 42.35 12.890531 35.70755 9.88711E-4
+ 42.35 12.940832 35.713783 8.930299E-4
+ 42.35 12.988314 35.719013 8.005501E-4
+ 42.35 13.057326 35.72718 7.118076E-4
+ 42.35 13.114674 35.733062 6.3077436E-4
+ 42.35 13.180201 35.741035 5.535743E-4
+ 42.35 13.25589 35.74825 4.753054E-4
+ 42.35 13.303651 35.752307 3.994822E-4
+ 42.35 13.365774 35.75735 3.283423E-4
+ 42.35 13.440692 35.762195 2.5688266E-4
+ 42.35 13.504511 35.766094 1.864158E-4
+ 42.35 13.602944 35.773254 1.2066268E-4
+ 42.35 13.72006 35.779754 6.444943E-5
+ 42.35 13.83478 35.782146 1.5982803E-5
+ 42.35 13.974741 35.78592 -2.669397E-5
+ 42.35 14.166318 35.792976 -7.081842E-5
+ 42.35 14.434046 35.80102 -1.2041125E-4
+ 42.35 14.77285 35.804882 -1.598222E-4
+ 42.35 15.45569 35.80678 -2.2555987E-4
+ 42.35 16.207859 35.819454 -3.363289E-4
+ 42.35 16.988276 35.829914 -5.0384254E-4
+ 42.35 17.769197 35.831233 -5.92776E-4
+ 42.35 18.527328 35.830787 -5.237248E-4
+ 42.35 19.098732 35.831764 -4.7429034E-4
+ 42.35 19.358713 35.82846 -5.660476E-4
+ 42.35 19.393875 35.83079 -7.6819444E-4
+ 42.35 19.397398 35.83177 -9.958243E-4
+ 42.35 19.400454 35.832115 -1.2289984E-3
+ 42.35 19.397291 35.825756 -1.4592607E-3
+ 42.35 19.306545 35.827945 -1.8074028E-3
+ 42.4 2.5247955 34.897006 0.0E+0
+ 42.4 2.5155425 34.90252 1.8269366E-4
+ 42.4 2.5152544 34.90659 3.6150924E-4
+ 42.4 2.5390117 34.91423 3.7645033E-4
+ 42.4 2.5745275 34.918514 3.4560283E-4
+ 42.4 2.6337337 34.92701 3.7445302E-4
+ 42.4 2.7310347 34.939796 4.3956146E-4
+ 42.4 2.8909904 34.951576 6.159539E-4
+ 42.4 3.0865333 34.96104 9.176218E-4
+ 42.4 3.331473 34.969112 1.3043708E-3
+ 42.4 3.563378 34.971885 1.7186245E-3
+ 42.4 3.82353 34.982406 2.0507955E-3
+ 42.4 4.313355 35.03725 2.3043523E-3
+ 42.4 5.1435422 35.15218 2.660351E-3
+ 42.4 6.5759773 35.368766 3.040349E-3
+ 42.4 8.207165 35.61705 3.358508E-3
+ 42.4 9.212097 35.713542 3.953353E-3
+ 42.4 9.644501 35.662384 4.712036E-3
+ 42.4 9.885384 35.550693 5.1613664E-3
+ 42.4 10.219775 35.485214 5.3227473E-3
+ 42.4 10.682722 35.48915 5.3585986E-3
+ 42.4 11.14783 35.526794 5.1970994E-3
+ 42.4 11.472789 35.55776 4.9093523E-3
+ 42.4 11.708237 35.581974 4.611815E-3
+ 42.4 11.903611 35.602592 4.315489E-3
+ 42.4 12.058392 35.619964 4.030892E-3
+ 42.4 12.194698 35.634506 3.7621986E-3
+ 42.4 12.297734 35.643714 3.5282208E-3
+ 42.4 12.403769 35.656097 3.335185E-3
+ 42.4 12.497765 35.666072 3.170684E-3
+ 42.4 12.572133 35.675437 3.0257857E-3
+ 42.4 12.643577 35.68297 2.8947251E-3
+ 42.4 12.699543 35.688705 2.771199E-3
+ 42.4 12.744157 35.692127 2.6512723E-3
+ 42.4 12.787451 35.69611 2.5357897E-3
+ 42.4 12.840703 35.702453 2.429839E-3
+ 42.4 12.879053 35.706623 2.3348692E-3
+ 42.4 12.929051 35.71278 2.24701E-3
+ 42.4 12.976066 35.71796 2.1619612E-3
+ 42.4 13.044659 35.725967 2.0802018E-3
+ 42.4 13.102369 35.73177 2.0057265E-3
+ 42.4 13.167143 35.739646 1.9348233E-3
+ 42.4 13.243276 35.747035 1.8624995E-3
+ 42.4 13.290664 35.750865 1.7923687E-3
+ 42.4 13.352311 35.75571 1.7267426E-3
+ 42.4 13.426609 35.760505 1.660341E-3
+ 42.4 13.491004 35.764411 1.5944942E-3
+ 42.4 13.589591 35.771507 1.5329325E-3
+ 42.4 13.708321 35.77796 1.4804401E-3
+ 42.4 13.823106 35.78037 1.4352587E-3
+ 42.4 13.964278 35.78412 1.3950831E-3
+ 42.4 14.156289 35.79171 1.3528936E-3
+ 42.4 14.424675 35.799823 1.3040601E-3
+ 42.4 14.765265 35.80366 1.2642613E-3
+ 42.4 15.442538 35.805992 1.1963464E-3
+ 42.4 16.192083 35.81838 1.0818148E-3
+ 42.4 16.96539 35.82933 9.0844725E-4
+ 42.4 17.769836 35.830444 8.1252236E-4
+ 42.4 18.53167 35.829345 8.719643E-4
+ 42.4 19.092367 35.829956 9.0678175E-4
+ 42.4 19.33857 35.827186 8.0239964E-4
+ 42.4 19.370361 35.82962 5.928983E-4
+ 42.4 19.373274 35.830604 3.6006353E-4
+ 42.4 19.375532 35.830802 1.2152443E-4
+ 42.4 19.374018 35.824726 -1.1484448E-4
+ 42.4 19.281237 35.82663 -4.7146857E-4
+ 42.45 2.5255961 34.89706 0.0E+0
+ 42.45 2.5162303 34.90247 1.8261914E-4
+ 42.45 2.5158905 34.90662 3.6341423E-4
+ 42.45 2.5390455 34.91427 3.7799813E-4
+ 42.45 2.574585 34.91852 3.4825381E-4
+ 42.45 2.6338741 34.927 3.8140814E-4
+ 42.45 2.7317068 34.93983 4.5874444E-4
+ 42.45 2.8922073 34.951564 6.5704493E-4
+ 42.45 3.088192 34.96105 9.879392E-4
+ 42.45 3.3320868 34.968906 1.41386E-3
+ 42.45 3.5634894 34.97163 1.877044E-3
+ 42.45 3.8243913 34.982307 2.26693E-3
+ 42.45 4.3156852 35.037395 2.5825065E-3
+ 42.45 5.144217 35.151882 2.9993485E-3
+ 42.45 6.579653 35.369132 3.440868E-3
+ 42.45 8.222864 35.619812 3.8372927E-3
+ 42.45 9.210358 35.712242 4.532643E-3
+ 42.45 9.648298 35.662326 5.3973235E-3
+ 42.45 9.89051 35.551452 5.9553785E-3
+ 42.45 10.223392 35.485805 6.217905E-3
+ 42.45 10.684611 35.489574 6.3316896E-3
+ 42.45 11.146297 35.526924 6.2320064E-3
+ 42.45 11.468891 35.557514 5.9942076E-3
+ 42.45 11.701578 35.581333 5.737604E-3
+ 42.45 11.896455 35.60204 5.476788E-3
+ 42.45 12.049127 35.61914 5.2223256E-3
+ 42.45 12.1842 35.633556 4.9790106E-3
+ 42.45 12.288172 35.64296 4.765393E-3
+ 42.45 12.39432 35.655303 4.589025E-3
+ 42.45 12.488059 35.66523 4.438703E-3
+ 42.45 12.562331 35.67457 4.306032E-3
+ 42.45 12.633589 35.682106 4.186029E-3
+ 42.45 12.688872 35.68777 4.072755E-3
+ 42.45 12.732513 35.691085 3.962451E-3
+ 42.45 12.776274 35.695247 3.856168E-3
+ 42.45 12.829738 35.701553 3.7589082E-3
+ 42.45 12.868568 35.705783 3.6721765E-3
+ 42.45 12.918228 35.711856 3.592136E-3
+ 42.45 12.964789 35.716987 3.5145278E-3
+ 42.45 13.032894 35.72482 3.4397656E-3
+ 42.45 13.090962 35.73055 3.371834E-3
+ 42.45 13.154949 35.73832 3.3072005E-3
+ 42.45 13.231473 35.74588 3.2408256E-3
+ 42.45 13.278514 35.74949 3.1764046E-3
+ 42.45 13.339658 35.75413 3.116296E-3
+ 42.45 13.413258 35.75888 3.0549666E-3
+ 42.45 13.478203 35.76279 2.993751E-3
+ 42.45 13.57687 35.76982 2.9363734E-3
+ 42.45 13.69722 35.776237 2.8875372E-3
+ 42.45 13.812063 35.77868 2.8455362E-3
+ 42.45 13.954399 35.78242 2.8077126E-3
+ 42.45 14.146775 35.79053 2.7672923E-3
+ 42.45 14.415502 35.7987 2.7191091E-3
+ 42.45 14.757868 35.80251 2.6787663E-3
+ 42.45 15.429207 35.805267 2.608772E-3
+ 42.45 16.176151 35.817352 2.4911283E-3
+ 42.45 16.941772 35.828746 2.3132257E-3
+ 42.45 17.770002 35.829685 2.2111271E-3
+ 42.45 18.53494 35.82796 2.260468E-3
+ 42.45 19.084703 35.828197 2.27988E-3
+ 42.45 19.317648 35.82594 2.1624467E-3
+ 42.45 19.346407 35.828475 1.945513E-3
+ 42.45 19.34874 35.829467 1.7074987E-3
+ 42.45 19.35014 35.829517 1.463651E-3
+ 42.45 19.350266 35.823745 1.2212079E-3
+ 42.45 19.255598 35.825355 8.561779E-4
+ 42.5 2.5263633 34.89711 0.0E+0
+ 42.5 2.5168995 34.902416 1.8189472E-4
+ 42.5 2.5165455 34.906654 3.6360422E-4
+ 42.5 2.5390985 34.914306 3.7797584E-4
+ 42.5 2.5746746 34.91853 3.5004882E-4
+ 42.5 2.6340794 34.926986 3.883318E-4
+ 42.5 2.732472 34.93987 4.7857884E-4
+ 42.5 2.8935334 34.95155 6.989624E-4
+ 42.5 3.089974 34.961051 1.0590585E-3
+ 42.5 3.332794 34.96868 1.5241108E-3
+ 42.5 3.5635805 34.97134 2.0359777E-3
+ 42.5 3.825118 34.982143 2.4841437E-3
+ 42.5 4.317819 35.03746 2.8634187E-3
+ 42.5 5.1449036 35.15154 3.3421544E-3
+ 42.5 6.5837163 35.36951 3.8460353E-3
+ 42.5 8.239288 35.62263 4.3205684E-3
+ 42.5 9.208639 35.710834 5.112162E-3
+ 42.5 9.652397 35.662212 6.0770045E-3
+ 42.5 9.895955 35.552135 6.7393607E-3
+ 42.5 10.227542 35.48638 7.099756E-3
+ 42.5 10.687109 35.490024 7.288976E-3
+ 42.5 11.145404 35.527095 7.249769E-3
+ 42.5 11.465646 35.55732 7.061469E-3
+ 42.5 11.695752 35.58076 6.8454425E-3
+ 42.5 11.890225 35.601573 6.6198315E-3
+ 42.5 12.040867 35.61841 6.3953604E-3
+ 42.5 12.174696 35.632698 6.1774132E-3
+ 42.5 12.279537 35.642295 5.9841373E-3
+ 42.5 12.385748 35.654586 5.8243526E-3
+ 42.5 12.479199 35.66446 5.6881033E-3
+ 42.5 12.55338 35.673774 5.5675683E-3
+ 42.5 12.624446 35.681312 5.458546E-3
+ 42.5 12.679045 35.6869 5.3554684E-3
+ 42.5 12.721792 35.690124 5.2547766E-3
+ 42.5 12.766061 35.694465 5.157706E-3
+ 42.5 12.819733 35.700733 5.0691282E-3
+ 42.5 12.859051 35.70502 4.9905935E-3
+ 42.5 12.908343 35.711002 4.9183215E-3
+ 42.5 12.954463 35.716087 4.848118E-3
+ 42.5 13.022015 35.72374 4.7803237E-3
+ 42.5 13.080433 35.72939 4.718879E-3
+ 42.5 13.143601 35.73705 4.660445E-3
+ 42.5 13.220465 35.744777 4.599983E-3
+ 42.5 13.267191 35.74817 4.541251E-3
+ 42.5 13.327807 35.752613 4.4866255E-3
+ 42.5 13.400633 35.757316 4.430347E-3
+ 42.5 13.466099 35.761222 4.373741E-3
+ 42.5 13.564769 35.76819 4.3205097E-3
+ 42.5 13.686732 35.774581 4.275238E-3
+ 42.5 13.801621 35.777072 4.236289E-3
+ 42.5 13.94506 35.780822 4.20065E-3
+ 42.5 14.13773 35.789436 4.161817E-3
+ 42.5 14.406486 35.79763 4.1141635E-3
+ 42.5 14.750604 35.801422 4.0731155E-3
+ 42.5 15.415699 35.804592 4.00114E-3
+ 42.5 16.160105 35.816371 3.8810425E-3
+ 42.5 16.917538 35.828147 3.6999501E-3
+ 42.5 17.769636 35.828933 3.5925453E-3
+ 42.5 18.53702 35.826622 3.6313792E-3
+ 42.5 19.075644 35.826484 3.634724E-3
+ 42.5 19.295893 35.824714 3.5039056E-3
+ 42.5 19.321962 35.82734 3.2794978E-3
+ 42.5 19.323751 35.828334 3.0363486E-3
+ 42.5 19.324236 35.828243 2.7872717E-3
+ 42.5 19.325987 35.822795 2.5388177E-3
+ 42.5 19.229595 35.824115 2.165503E-3
+ 42.55 2.527091 34.897155 0.0E+0
+ 42.55 2.517547 34.902362 1.8052448E-4
+ 42.55 2.5172162 34.90669 3.6206035E-4
+ 42.55 2.5391705 34.91435 3.763634E-4
+ 42.55 2.5747961 34.91854 3.509553E-4
+ 42.55 2.6343502 34.92698 3.9516648E-4
+ 42.55 2.733329 34.93991 4.9894984E-4
+ 42.55 2.8949654 34.951534 7.414914E-4
+ 42.55 3.0918724 34.96105 1.1306291E-3
+ 42.55 3.333583 34.968437 1.6345498E-3
+ 42.55 3.5636308 34.971012 2.194503E-3
+ 42.55 3.825669 34.981914 2.700987E-3
+ 42.55 4.3196883 35.037445 3.1450174E-3
+ 42.55 5.1455082 35.15113 3.6860737E-3
+ 42.55 6.587982 35.36987 4.252497E-3
+ 42.55 8.256173 35.62546 4.804205E-3
+ 42.55 9.206866 35.709312 5.6870556E-3
+ 42.55 9.656725 35.662033 6.745636E-3
+ 42.55 9.90166 35.552734 7.507198E-3
+ 42.55 10.232177 35.48693 7.961523E-3
+ 42.55 10.690168 35.490497 8.223193E-3
+ 42.55 11.145123 35.527297 8.242689E-3
+ 42.55 11.463033 35.557163 8.103045E-3
+ 42.55 11.690744 35.580253 7.926921E-3
+ 42.55 11.884895 35.601192 7.7359396E-3
+ 42.55 12.033598 35.61777 7.5410972E-3
+ 42.55 12.166174 35.631935 7.3483292E-3
+ 42.55 12.271809 35.641712 7.175241E-3
+ 42.55 12.378036 35.653942 7.031858E-3
+ 42.55 12.471164 35.663757 6.909489E-3
+ 42.55 12.545256 35.673053 6.8009314E-3
+ 42.55 12.616124 35.680583 6.7027537E-3
+ 42.55 12.670039 35.686092 6.6097592E-3
+ 42.55 12.711978 35.68924 6.5186163E-3
+ 42.55 12.756791 35.69376 6.430717E-3
+ 42.55 12.810662 35.699993 6.3507617E-3
+ 42.55 12.850475 35.704326 6.280334E-3
+ 42.55 12.899372 35.710216 6.215734E-3
+ 42.55 12.945067 35.715255 6.152856E-3
+ 42.55 13.012003 35.72272 6.091957E-3
+ 42.55 13.070757 35.72829 6.0369E-3
+ 42.55 13.133081 35.735836 5.984555E-3
+ 42.55 13.210236 35.743717 5.9299296E-3
+ 42.55 13.25668 35.74691 5.876828E-3
+ 42.55 13.316745 35.75115 5.827615E-3
+ 42.55 13.388725 35.755805 5.776332E-3
+ 42.55 13.454678 35.75971 5.72428E-3
+ 42.55 13.553274 35.76661 5.675129E-3
+ 42.55 13.676831 35.77299 5.633305E-3
+ 42.55 13.791751 35.77554 5.597255E-3
+ 42.55 13.936216 35.779315 5.5636186E-3
+ 42.55 14.129103 35.788414 5.5261757E-3
+ 42.55 14.397584 35.796615 5.4789213E-3
+ 42.55 14.74342 35.80039 5.4370015E-3
+ 42.55 15.402015 35.80396 5.363145E-3
+ 42.55 16.14399 35.815414 5.241252E-3
+ 42.55 16.892805 35.82752 5.058329E-3
+ 42.55 17.76868 35.828174 4.946525E-3
+ 42.55 18.537798 35.825313 4.9745333E-3
+ 42.55 19.065102 35.8248 4.9612787E-3
+ 42.55 19.273249 35.823486 4.8168343E-3
+ 42.55 19.296984 35.8262 4.5849503E-3
+ 42.55 19.298267 35.8272 4.3367315E-3
+ 42.55 19.297785 35.82696 4.0825284E-3
+ 42.55 19.301132 35.821857 3.8281586E-3
+ 42.55 19.20319 35.822887 3.4467265E-3
+ 42.6 2.527774 34.897197 0.0E+0
+ 42.6 2.5181694 34.9023 1.7851595E-4
+ 42.6 2.5179 34.906726 3.587753E-4
+ 42.6 2.539262 34.91439 3.731502E-4
+ 42.6 2.5749487 34.918552 3.5094397E-4
+ 42.6 2.6346864 34.926975 4.01851E-4
+ 42.6 2.7342765 34.93995 5.197339E-4
+ 42.6 2.8964993 34.951515 7.8440725E-4
+ 42.6 3.0938813 34.96104 1.2022913E-3
+ 42.6 3.3344423 34.968173 1.744596E-3
+ 42.6 3.563621 34.970642 2.3516973E-3
+ 42.6 3.8260066 34.98161 2.9160224E-3
+ 42.6 4.321228 35.037334 3.4252505E-3
+ 42.6 5.145939 35.15065 4.0284437E-3
+ 42.6 6.592263 35.37018 4.656943E-3
+ 42.6 8.273246 35.628246 5.284124E-3
+ 42.6 9.204963 35.70767 6.252561E-3
+ 42.6 9.661212 35.66178 7.397923E-3
+ 42.6 9.907564 35.553245 8.252975E-3
+ 42.6 10.237243 35.487457 8.7966704E-3
+ 42.6 10.693739 35.490982 9.127346E-3
+ 42.6 11.145421 35.52753 9.203363E-3
+ 42.6 11.461032 35.557044 9.111156E-3
+ 42.6 11.686536 35.579814 8.97395E-3
+ 42.6 11.880437 35.600883 8.816764E-3
+ 42.6 12.0273 35.617225 8.650976E-3
+ 42.6 12.15862 35.63126 8.483026E-3
+ 42.6 12.264964 35.641212 8.329844E-3
+ 42.6 12.371159 35.65337 8.202583E-3
+ 42.6 12.463932 35.663124 8.093823E-3
+ 42.6 12.537934 35.672397 7.997017E-3
+ 42.6 12.608594 35.679916 7.909491E-3
+ 42.6 12.661828 35.685337 7.826412E-3
+ 42.6 12.70305 35.688423 7.7446997E-3
+ 42.6 12.748435 35.693126 7.66588E-3
+ 42.6 12.802496 35.699317 7.5944373E-3
+ 42.6 12.842805 35.7037 7.5319814E-3
+ 42.6 12.891285 35.709495 7.474913E-3
+ 42.6 12.936573 35.714485 7.419238E-3
+ 42.6 13.002834 35.721755 7.3651196E-3
+ 42.6 13.061906 35.72725 7.3163113E-3
+ 42.6 13.123364 35.734672 7.269905E-3
+ 42.6 13.200762 35.742706 7.2210035E-3
+ 42.6 13.24696 35.74571 7.173436E-3
+ 42.6 13.306456 35.749744 7.129529E-3
+ 42.6 13.377523 35.754352 7.083152E-3
+ 42.6 13.443923 35.758247 7.0355683E-3
+ 42.6 13.542371 35.765083 6.9904024E-3
+ 42.6 13.667486 35.771465 6.951883E-3
+ 42.6 13.782419 35.77408 6.918561E-3
+ 42.6 13.927817 35.7779 6.886728E-3
+ 42.6 14.120844 35.787456 6.850467E-3
+ 42.6 14.388758 35.795646 6.8034706E-3
+ 42.6 14.736262 35.799396 6.7605096E-3
+ 42.6 15.38816 35.803352 6.6848704E-3
+ 42.6 16.127844 35.814472 6.5618357E-3
+ 42.6 16.867704 35.826843 6.378444E-3
+ 42.6 17.767084 35.827392 6.2631783E-3
+ 42.6 18.537174 35.82402 6.2801293E-3
+ 42.6 19.053 35.82313 6.249874E-3
+ 42.6 19.249674 35.82225 6.0916594E-3
+ 42.6 19.271423 35.825035 5.8523365E-3
+ 42.6 19.272245 35.82604 5.599134E-3
+ 42.6 19.27075 35.82566 5.339933E-3
+ 42.6 19.275663 35.82092 5.0797746E-3
+ 42.6 19.176353 35.821666 4.69044E-3
+ 42.65 2.5284068 34.897235 0.0E+0
+ 42.65 2.5187642 34.90224 1.7588014E-4
+ 42.65 2.5185945 34.90677 3.53754E-4
+ 42.65 2.539374 34.914432 3.6833574E-4
+ 42.65 2.575132 34.918567 3.499899E-4
+ 42.65 2.6350886 34.926975 4.0832164E-4
+ 42.65 2.7353127 34.939987 5.407997E-4
+ 42.65 2.898132 34.951496 8.2747742E-4
+ 42.65 3.0959935 34.961025 1.273678E-3
+ 42.65 3.3353605 34.967895 1.8536645E-3
+ 42.65 3.5635328 34.97023 2.5066467E-3
+ 42.65 3.8260955 34.981227 3.1278352E-3
+ 42.65 4.3223776 35.037117 3.702104E-3
+ 42.65 5.146105 35.15008 4.36666E-3
+ 42.65 6.596374 35.370395 5.0561414E-3
+ 42.65 8.290229 35.63094 5.756347E-3
+ 42.65 9.20285 35.70589 6.8040704E-3
+ 42.65 9.665784 35.661445 8.028792E-3
+ 42.65 9.913608 35.553657 8.971052E-3
+ 42.65 10.242684 35.487945 9.598989E-3
+ 42.65 10.697767 35.49148 9.994799E-3
+ 42.65 11.146262 35.527782 0.01012477
+ 42.65 11.459615 35.556964 0.010078419
+ 42.65 11.683102 35.579433 9.978859E-3
+ 42.65 11.876816 35.600643 9.854388E-3
+ 42.65 12.021945 35.61676 9.71688E-3
+ 42.65 12.15201 35.63067 9.573221E-3
+ 42.65 12.258974 35.640785 9.439539E-3
+ 42.65 12.36509 35.652862 9.328027E-3
+ 42.65 12.457477 35.662555 9.232529E-3
+ 42.65 12.531387 35.671806 9.147189E-3
+ 42.65 12.601827 35.6793 9.070064E-3
+ 42.65 12.654386 35.684635 8.996681E-3
+ 42.65 12.694984 35.68767 8.924232E-3
+ 42.65 12.740964 35.692554 8.854349E-3
+ 42.65 12.795201 35.698707 8.791262E-3
+ 42.65 12.836008 35.703132 8.736596E-3
+ 42.65 12.884053 35.708827 8.686876E-3
+ 42.65 12.928952 35.71377 8.638241E-3
+ 42.65 12.994481 35.720844 8.590749E-3
+ 42.65 13.053849 35.726257 8.548013E-3
+ 42.65 13.114422 35.73356 8.507358E-3
+ 42.65 13.192019 35.74173 8.46403E-3
+ 42.65 13.23801 35.744556 8.421866E-3
+ 42.65 13.29692 35.74839 8.383124E-3
+ 42.65 13.367011 35.75295 8.341531E-3
+ 42.65 13.433816 35.756835 8.2983E-3
+ 42.65 13.532041 35.763603 8.256998E-3
+ 42.65 13.658665 35.769992 8.221619E-3
+ 42.65 13.773589 35.772682 8.190832E-3
+ 42.65 13.919816 35.77656 8.160593E-3
+ 42.65 14.112899 35.786552 8.125293E-3
+ 42.65 14.379965 35.794712 8.078407E-3
+ 42.65 14.729075 35.798446 8.034234E-3
+ 42.65 15.374139 35.802764 7.956909E-3
+ 42.65 16.111713 35.81353 7.833376E-3
+ 42.65 16.842361 35.826107 7.6508657E-3
+ 42.65 17.764805 35.826572 7.5330962E-3
+ 42.65 18.53506 35.822723 7.5388452E-3
+ 42.65 19.03928 35.82147 7.4913203E-3
+ 42.65 19.225124 35.820983 7.319287E-3
+ 42.65 19.24524 35.823833 7.0726023E-3
+ 42.65 19.245647 35.82484 6.814527E-3
+ 42.65 19.243101 35.824325 6.550481E-3
+ 42.65 19.249533 35.81996 6.2846946E-3
+ 42.65 19.149054 35.820426 5.8877202E-3
+ 42.7 2.5289852 34.89727 0.0E+0
+ 42.7 2.5193293 34.902175 1.7263168E-4
+ 42.7 2.519297 34.90681 3.4701416E-4
+ 42.7 2.5395064 34.91448 3.619305E-4
+ 42.7 2.575345 34.91858 3.4807305E-4
+ 42.7 2.635557 34.92698 4.145132E-4
+ 42.7 2.736436 34.940025 5.620097E-4
+ 42.7 2.8998587 34.951473 8.704628E-4
+ 42.7 3.0982022 34.961006 1.344417E-3
+ 42.7 3.3363261 34.96759 1.961171E-3
+ 42.7 3.5633494 34.969772 2.6584514E-3
+ 42.7 3.8259036 34.980762 3.3350468E-3
+ 42.7 4.323079 35.03679 3.973619E-3
+ 42.7 5.14592 35.14941 4.6982006E-3
+ 42.7 6.6001296 35.3705 5.4469765E-3
+ 42.7 8.306846 35.633483 6.217051E-3
+ 42.7 9.200456 35.70397 7.3371944E-3
+ 42.7 9.670369 35.66102 8.633455E-3
+ 42.7 9.919734 35.553966 9.65614E-3
+ 42.7 10.248444 35.488395 0.01036267
+ 42.7 10.702198 35.491977 0.010819359
+ 42.7 11.147606 35.528053 0.011000357
+ 42.7 11.458753 35.55691 0.010997947
+ 42.7 11.680414 35.579116 0.010934485
+ 42.7 11.873992 35.60047 0.010841422
+ 42.7 12.0175 35.616374 0.010731228
+ 42.7 12.146317 35.63016 0.010611179
+ 42.7 12.253807 35.64043 0.010496476
+ 42.7 12.3598 35.65242 0.010400253
+ 42.7 12.45177 35.66204 0.010317598
+ 42.7 12.525583 35.67127 0.010243376
+ 42.7 12.595789 35.67873 0.010176352
+ 42.7 12.647681 35.68398 0.010112396
+ 42.7 12.687755 35.68698 0.010048992
+ 42.7 12.734342 35.692043 9.987855E-3
+ 42.7 12.788743 35.698154 9.932922E-3
+ 42.7 12.830042 35.70262 9.885823E-3
+ 42.7 12.87764 35.708213 9.843228E-3
+ 42.7 12.922169 35.713108 9.801432E-3
+ 42.7 12.986915 35.719982 9.760375E-3
+ 42.7 13.04655 35.72531 9.723498E-3
+ 42.7 13.106227 35.73249 9.688371E-3
+ 42.7 13.183979 35.740787 9.650433E-3
+ 42.7 13.229804 35.743453 9.613509E-3
+ 42.7 13.288115 35.747085 9.579759E-3
+ 42.7 13.357172 35.751594 9.542799E-3
+ 42.7 13.424335 35.75547 9.503775E-3
+ 42.7 13.522265 35.762172 9.466189E-3
+ 42.7 13.650334 35.76858 9.433765E-3
+ 42.7 13.765226 35.77135 9.405304E-3
+ 42.7 13.912161 35.775302 9.376437E-3
+ 42.7 14.105215 35.78569 9.341871E-3
+ 42.7 14.371169 35.793807 9.294939E-3
+ 42.7 14.721807 35.797523 9.2493845E-3
+ 42.7 15.359959 35.802185 9.170471E-3
+ 42.7 16.095638 35.812572 9.047066E-3
+ 42.7 16.816908 35.825294 8.866766E-3
+ 42.7 17.7618 35.8257 8.747461E-3
+ 42.7 18.531382 35.82141 8.741949E-3
+ 42.7 19.023888 35.819797 8.677017E-3
+ 42.7 19.199566 35.81968 8.491212E-3
+ 42.7 19.218393 35.82258 8.237286E-3
+ 42.7 19.218435 35.82359 7.974471E-3
+ 42.7 19.214811 35.822944 7.7057597E-3
+ 42.7 19.222708 35.818965 7.43454E-3
+ 42.7 19.121264 35.819156 7.030236E-3
+ 42.75 2.529505 34.897296 0.0E+0
+ 42.75 2.5198624 34.90211 1.68789E-4
+ 42.75 2.520005 34.906852 3.3858654E-4
+ 42.75 2.5396602 34.914524 3.5395642E-4
+ 42.75 2.5755875 34.918594 3.4517952E-4
+ 42.75 2.636091 34.926982 4.2035986E-4
+ 42.75 2.7376441 34.940067 5.832213E-4
+ 42.75 2.9016757 34.951446 9.1311946E-4
+ 42.75 3.1005008 34.96098 1.4141333E-3
+ 42.75 3.3373284 34.96727 2.066534E-3
+ 42.75 3.563056 34.969272 2.8062325E-3
+ 42.75 3.8254024 34.98021 3.5363235E-3
+ 42.75 4.323278 35.03634 4.2379084E-3
+ 42.75 5.145302 35.148632 5.0206496E-3
+ 42.75 6.6033496 35.37045 5.826476E-3
+ 42.75 8.322817 35.635833 6.662611E-3
+ 42.75 9.197703 35.70191 7.8478194E-3
+ 42.75 9.674898 35.660495 9.207473E-3
+ 42.75 9.925886 35.554172 0.010303362
+ 42.75 10.254466 35.488796 0.011082379
+ 42.75 10.706973 35.49247 0.011595345
+ 42.75 11.149408 35.528335 0.011824121
+ 42.75 11.458412 35.55689 0.011863425
+ 42.75 11.678437 35.578853 0.011834265
+ 42.75 11.87192 35.600357 0.01177109
+ 42.75 12.013927 35.616062 0.011687069
+ 42.75 12.141507 35.629726 0.011589801
+ 42.75 12.249426 35.64014 0.011493446
+ 42.75 12.355253 35.652034 0.011411973
+ 42.75 12.44678 35.661586 0.011341674
+ 42.75 12.520491 35.670783 0.011278169
+ 42.75 12.590448 35.678207 0.011220898
+ 42.75 12.641683 35.683364 0.011166051
+ 42.75 12.681333 35.686347 0.011111431
+ 42.75 12.728535 35.69158 0.011058804
+ 42.75 12.783082 35.697654 0.011011781
+ 42.75 12.824867 35.702152 0.010971985
+ 42.75 12.872011 35.707645 0.010936255
+ 42.75 12.91619 35.712493 0.01090106
+ 42.75 12.980102 35.719161 0.010866211
+ 42.75 13.039972 35.72441 0.010834945
+ 42.75 13.098744 35.731464 0.010805093
+ 42.75 13.176611 35.739875 0.01077233
+ 42.75 13.222312 35.742397 0.010740452
+ 42.75 13.280014 35.745834 0.010711491
+ 42.75 13.347985 35.750293 0.010678982
+ 42.75 13.415456 35.75415 0.010643996
+ 42.75 13.513019 35.760784 0.010609955
+ 42.75 13.642457 35.76722 0.010580283
+ 42.75 13.757288 35.77007 0.010553922
+ 42.75 13.904801 35.77411 0.010526201
+ 42.75 14.097738 35.784866 0.010492133
+ 42.75 14.36233 35.792922 0.010444998
+ 42.75 14.714409 35.79662 0.010397892
+ 42.75 15.345626 35.8016 0.010317484
+ 42.75 16.079659 35.811592 0.010194815
+ 42.75 16.791475 35.824394 0.010018017
+ 42.75 17.758036 35.824756 9.898148E-3
+ 42.75 18.526072 35.820072 9.881399E-3
+ 42.75 19.006786 35.81811 9.799051E-3
+ 42.75 19.172974 35.818325 9.599618E-3
+ 42.75 19.190847 35.821254 9.338612E-3
+ 42.75 19.190582 35.822265 9.071217E-3
+ 42.75 19.185852 35.821502 8.798047E-3
+ 42.75 19.195154 35.817916 8.521622E-3
+ 42.75 19.092957 35.817844 8.110349E-3
+ 42.8 2.5299627 34.897315 0.0E+0
+ 42.8 2.5203623 34.902046 1.6437424E-4
+ 42.8 2.5207161 34.906902 3.2851527E-4
+ 42.8 2.5398354 34.91457 3.4444738E-4
+ 42.8 2.575858 34.91861 3.4130195E-4
+ 42.8 2.6366906 34.92699 4.257963E-4
+ 42.8 2.7389352 34.940105 6.042879E-4
+ 42.8 2.9035782 34.95142 9.552004E-4
+ 42.8 3.102882 34.96094 1.4824517E-3
+ 42.8 3.3383572 34.966922 2.1691804E-3
+ 42.8 3.5626385 34.968723 2.9491377E-3
+ 42.8 3.8245666 34.97957 3.730389E-3
+ 42.8 4.3229265 35.035766 4.493172E-3
+ 42.8 5.1441726 35.14773 5.331714E-3
+ 42.8 6.605859 35.370223 6.1918413E-3
+ 42.8 8.337869 35.637935 7.0896474E-3
+ 42.8 9.194525 35.699695 8.332161E-3
+ 42.8 9.679301 35.65987 9.746811E-3
+ 42.8 9.93201 35.554267 0.010908318
+ 42.8 10.260692 35.489147 0.011753317
+ 42.8 10.712035 35.49295 0.01231766
+ 42.8 11.151624 35.52862 0.012590675
+ 42.8 11.458555 35.556892 0.012669185
+ 42.8 11.677134 35.578643 0.012672303
+ 42.8 11.870551 35.6003 0.012637306
+ 42.8 12.011182 35.61582 0.012578158
+ 42.8 12.137544 35.629367 0.01250271
+ 42.8 12.245792 35.639904 0.012423973
+ 42.8 12.351416 35.6517 0.012356634
+ 42.8 12.442473 35.66118 0.012298144
+ 42.8 12.516074 35.67035 0.012244905
+ 42.8 12.585765 35.677722 0.012196993
+ 42.8 12.636356 35.682785 0.012150897
+ 42.8 12.675686 35.685764 0.012104755
+ 42.8 12.723501 35.691165 0.01206036
+ 42.8 12.778177 35.6972 0.012020962
+ 42.8 12.820439 35.70173 0.011988169
+ 42.8 12.867125 35.70712 0.011959011
+ 42.8 12.910974 35.71192 0.011930145
+ 42.8 12.974007 35.718383 0.011901244
+ 42.8 13.034073 35.723552 0.011875315
+ 42.8 13.091937 35.730476 0.011850454
+ 42.8 13.169883 35.738994 0.011822621
+ 42.8 13.215503 35.741382 0.011795565
+ 42.8 13.272589 35.74463 0.011771164
+ 42.8 13.339426 35.749034 0.0117429
+ 42.8 13.407153 35.752872 0.011711758
+ 42.8 13.50428 35.75944 0.011681071
+ 42.8 13.634996 35.765907 0.01165393
+ 42.8 13.749738 35.768844 0.011629434
+ 42.8 13.897686 35.77298 0.011602623
+ 42.8 14.090413 35.78407 0.011568817
+ 42.8 14.353412 35.792057 0.011521317
+ 42.8 14.70683 35.795734 0.011472498
+ 42.8 15.331151 35.80101 0.011390687
+ 42.8 16.063812 35.81057 0.011269337
+ 42.8 16.766197 35.82339 0.011097289
+ 42.8 17.753487 35.823734 0.010977816
+ 42.8 18.519081 35.818687 0.010949933
+ 42.8 18.987951 35.816394 0.010850293
+ 42.8 19.145325 35.816905 0.010637466
+ 42.8 19.162575 35.81985 0.010369586
+ 42.8 19.162054 35.820854 0.010097796
+ 42.8 19.156206 35.819984 9.820402E-3
+ 42.8 19.166843 35.8168 9.539033E-3
+ 42.8 19.064114 35.816474 9.121198E-3
+ 42.85 2.5303552 34.897327 0.0E+0
+ 42.85 2.5208272 34.901977 1.5941334E-4
+ 42.85 2.5214288 34.906948 3.168579E-4
+ 42.85 2.5400326 34.914615 3.3344945E-4
+ 42.85 2.5761566 34.918624 3.3644028E-4
+ 42.85 2.637355 34.927 4.3075851E-4
+ 42.85 2.7403063 34.94014 6.2506034E-4
+ 42.85 2.905562 34.95139 9.96457E-4
+ 42.85 3.1053388 34.9609 1.5489985E-3
+ 42.85 3.339402 34.966556 2.2685474E-3
+ 42.85 3.5620851 34.968132 3.0863478E-3
+ 42.85 3.8233747 34.97884 3.916031E-3
+ 42.85 4.321979 35.03506 4.737709E-3
+ 42.85 5.142461 35.146697 5.629245E-3
+ 42.85 6.6074895 35.369792 6.540473E-3
+ 42.85 8.351733 35.63974 7.495061E-3
+ 42.85 9.19085 35.697322 8.786811E-3
+ 42.85 9.683513 35.659137 0.010247887
+ 42.85 9.938052 35.554256 0.011467131
+ 42.85 10.267064 35.489444 0.012371279
+ 42.85 10.717324 35.493415 0.012981848
+ 42.85 11.154206 35.528907 0.013295313
+ 42.85 11.459146 35.556915 0.013410269
+ 42.85 11.676463 35.578487 0.013443442
+ 42.85 11.869832 35.60029 0.013434745
+ 42.85 12.009217 35.615642 0.013399028
+ 42.85 12.134384 35.629074 0.013344316
+ 42.85 12.242864 35.639724 0.013282373
+ 42.85 12.348248 35.651416 0.013228488
+ 42.85 12.438814 35.660823 0.013181206
+ 42.85 12.512298 35.669956 0.013137736
+ 42.85 12.581704 35.677276 0.013098749
+ 42.85 12.631665 35.68224 0.013061007
+ 42.85 12.670781 35.68523 0.013022999
+ 42.85 12.719199 35.690795 0.012986518
+ 42.85 12.773984 35.696784 0.012954424
+ 42.85 12.816709 35.70134 0.012928302
+ 42.85 12.862942 35.70663 0.01290539
+ 42.85 12.906481 35.71139 0.012882554
+ 42.85 12.968594 35.717643 0.012859312
+ 42.85 13.028813 35.72273 0.012838416
+ 42.85 13.085768 35.729526 0.012818238
+ 42.85 13.163759 35.738136 0.012795066
+ 42.85 13.209344 35.74041 0.012772583
+ 42.85 13.265809 35.74347 0.012752487
+ 42.85 13.331471 35.747825 0.01272824
+ 42.85 13.399399 35.75164 0.012700725
+ 42.85 13.496023 35.758136 0.012673183
+ 42.85 13.627911 35.76465 0.01264834
+ 42.85 13.742534 35.76766 0.012625462
+ 42.85 13.890765 35.771907 0.012599324
+ 42.85 14.083186 35.783287 0.012565543
+ 42.85 14.344382 35.791194 0.012517518
+ 42.85 14.699025 35.794853 0.012466828
+ 42.85 15.316541 35.800392 0.012383706
+ 42.85 16.048138 35.809497 0.012264227
+ 42.85 16.741203 35.822273 0.012098121
+ 42.85 17.748129 35.822612 0.011979988
+ 42.85 18.51037 35.81724 0.011941156
+ 42.85 18.967373 35.814636 0.011824466
+ 42.85 19.116608 35.81541 0.011598573
+ 42.85 19.133543 35.81835 0.011324067
+ 42.85 19.13283 35.819347 0.011048096
+ 42.85 19.125856 35.818374 0.010766738
+ 42.85 19.13775 35.815597 0.010480722
+ 42.85 19.034716 35.815032 0.010056779
+ 42.9 2.5306806 34.897327 0.0E+0
+ 42.9 2.521257 34.901912 1.5393592E-4
+ 42.9 2.5221405 34.906997 3.0368537E-4
+ 42.9 2.5402522 34.91466 3.210211E-4
+ 42.9 2.5764818 34.918636 3.3060222E-4
+ 42.9 2.6380844 34.927005 4.3518486E-4
+ 42.9 2.7417552 34.940177 6.453881E-4
+ 42.9 2.9076223 34.951354 1.0366406E-3
+ 42.9 3.1078641 34.960845 1.6134042E-3
+ 42.9 3.3404533 34.966167 2.364087E-3
+ 42.9 3.5613853 34.9675 3.217081E-3
+ 42.9 3.821809 34.97802 4.0921112E-3
+ 42.9 4.3203973 35.03422 4.969931E-3
+ 42.9 5.140099 35.14553 5.9112515E-3
+ 42.9 6.608083 35.36913 6.86999E-3
+ 42.9 8.364151 35.641204 7.876065E-3
+ 42.9 9.186618 35.694793 9.208773E-3
+ 42.9 9.687468 35.65829 0.01070761
+ 42.9 9.943965 35.554134 0.011976494
+ 42.9 10.273525 35.48968 0.012932694
+ 42.9 10.722781 35.493854 0.013584137
+ 42.9 11.157104 35.529186 0.013934055
+ 42.9 11.460142 35.556957 0.014082482
+ 42.9 11.676378 35.578372 0.014143313
+ 42.9 11.869708 35.60032 0.014158894
+ 42.9 12.007981 35.61552 0.014145039
+ 42.9 12.131981 35.628845 0.014109873
+ 42.9 12.240596 35.63959 0.014063822
+ 42.9 12.34571 35.65118 0.014022649
+ 42.9 12.435765 35.66051 0.013985928
+ 42.9 12.509123 35.669605 0.01395169
+ 42.9 12.578225 35.676856 0.013921159
+ 42.9 12.627575 35.68173 0.013891338
+ 42.9 12.666582 35.684741 0.013861086
+ 42.9 12.715585 35.690456 0.013832165
+ 42.9 12.770458 35.696403 0.013807023
+ 42.9 12.813631 35.700984 0.013787211
+ 42.9 12.859419 35.70618 0.013770193
+ 42.9 12.902668 35.71089 0.013753058
+ 42.9 12.963822 35.716934 0.01373516
+ 42.9 13.024147 35.72194 0.013718971
+ 42.9 13.080198 35.728607 0.013703147
+ 42.9 13.158203 35.737297 0.013684343
+ 42.9 13.203797 35.739475 0.013666162
+ 42.9 13.259641 35.742355 0.013650096
+ 42.9 13.324093 35.74666 0.013629616
+ 42.9 13.392164 35.75045 0.013605495
+ 42.9 13.488222 35.756874 0.013580873
+ 42.9 13.621165 35.76343 0.013558083
+ 42.9 13.735634 35.766517 0.013536571
+ 42.9 13.883988 35.770885 0.013510868
+ 42.9 14.076005 35.782516 0.013476878
+ 42.9 14.335207 35.79034 0.01342817
+ 42.9 14.690949 35.79398 0.013375463
+ 42.9 15.301809 35.799747 0.013291119
+ 42.9 16.032665 35.80837 0.013174031
+ 42.9 16.716623 35.821033 0.013014994
+ 42.9 17.741943 35.821384 0.012899118
+ 42.9 18.499916 35.815727 0.012849591
+ 42.9 18.945045 35.81283 0.012716217
+ 42.9 19.086817 35.81383 0.012477673
+ 42.9 19.103733 35.816745 0.012196834
+ 42.9 19.102888 35.817726 0.011916921
+ 42.9 19.09479 35.81667 0.011631889
+ 42.9 19.107862 35.814296 0.011341554
+ 42.9 19.004751 35.813503 0.010912005
+ 42.95 2.5309367 34.897323 0.0E+0
+ 42.95 2.5216505 34.90185 1.4797524E-4
+ 42.95 2.5228493 34.90705 2.890816E-4
+ 42.95 2.5404944 34.914707 3.0723304E-4
+ 42.95 2.5768325 34.91865 3.2380362E-4
+ 42.95 2.6388773 34.927013 4.3901658E-4
+ 42.95 2.7432792 34.940212 6.6512054E-4
+ 42.95 2.9097542 34.95132 1.0755045E-3
+ 42.95 3.110451 34.960784 1.6753052E-3
+ 42.95 3.3415026 34.965755 2.4552678E-3
+ 42.95 3.5605306 34.966815 3.3405981E-3
+ 42.95 3.8198552 34.97711 4.257572E-3
+ 42.95 4.318147 35.033245 5.1883715E-3
+ 42.95 5.1370286 35.144222 6.1759133E-3
+ 42.95 6.6074886 35.368213 7.178248E-3
+ 42.95 8.374875 35.64228 8.230209E-3
+ 42.95 9.181769 35.692104 9.595499E-3
+ 42.95 9.691107 35.657325 0.011123411
+ 42.95 9.949699 35.5539 0.012433697
+ 42.95 10.280018 35.489856 0.013434662
+ 42.95 10.728346 35.494262 0.01412148
+ 42.95 11.160269 35.52946 0.014503687
+ 42.95 11.461503 35.55701 0.014682429
+ 42.95 11.676833 35.5783 0.014768379
+ 42.95 11.87012 35.600383 0.014806094
+ 42.95 12.007418 35.61545 0.01481243
+ 42.95 12.130287 35.628673 0.014795526
+ 42.95 12.238942 35.639503 0.014764394
+ 42.95 12.34376 35.65098 0.014735141
+ 42.95 12.433287 35.660236 0.014708292
+ 42.95 12.506513 35.66929 0.014682716
+ 42.95 12.575289 35.676467 0.014660142
+ 42.95 12.624046 35.68124 0.01463778
+ 42.95 12.663051 35.684295 0.014614873
+ 42.95 12.712615 35.690147 0.014593129
+ 42.95 12.767553 35.696052 0.014574557
+ 42.95 12.811154 35.700656 0.014560666
+ 42.95 12.856511 35.705753 0.014549167
+ 42.95 12.899491 35.710422 0.014537383
+ 42.95 12.959651 35.716262 0.014524493
+ 42.95 13.02003 35.72118 0.014512666
+ 42.95 13.075185 35.727722 0.014500846
+ 42.95 13.153176 35.73648 0.0144861
+ 42.95 13.198825 35.73858 0.014471931
+ 42.95 13.254049 35.741283 0.014459601
+ 42.95 13.317263 35.745532 0.014442622
+ 42.95 13.385419 35.749301 0.014421645
+ 42.95 13.480848 35.755645 0.014399704
+ 42.95 13.614716 35.762256 0.014378717
+ 42.95 13.728998 35.76541 0.014358316
+ 42.95 13.877306 35.769905 0.014332813
+ 42.95 14.068819 35.78175 0.014298384
+ 42.95 14.325857 35.78948 0.014248841
+ 42.95 14.682563 35.7931 0.014193981
+ 42.95 15.286965 35.799064 0.014108503
+ 42.95 16.017431 35.807163 0.013994293
+ 42.95 16.692577 35.819656 0.013843374
+ 42.95 17.734924 35.82004 0.013730638
+ 42.95 18.487707 35.81413 0.013670744
+ 42.95 18.920984 35.810966 0.013521163
+ 42.95 19.055956 35.812156 0.013270469
+ 42.95 19.07313 35.81502 0.01298363
+ 42.95 19.072216 35.81598 0.012700045
+ 42.95 19.063004 35.814853 0.012411656
+ 42.95 19.077164 35.812885 0.012117363
+ 42.95 18.974213 35.81188 0.011682755
+ 43.0 2.531122 34.897304 0.0E+0
+ 43.0 2.5220077 34.90179 1.41568E-4
+ 43.0 2.5235536 34.907104 2.7314326E-4
+ 43.0 2.5407598 34.914752 2.9216811E-4
+ 43.0 2.577208 34.91866 3.1606876E-4
+ 43.0 2.6397328 34.927024 4.421988E-4
+ 43.0 2.7448747 34.940242 6.8410806E-4
+ 43.0 2.9119532 34.951282 1.1128053E-3
+ 43.0 3.1130926 34.960712 1.7343464E-3
+ 43.0 3.3425412 34.965324 2.54158E-3
+ 43.0 3.5595142 34.966094 3.4562065E-3
+ 43.0 3.8175032 34.976112 4.4114417E-3
+ 43.0 4.3152017 35.032127 5.3916946E-3
+ 43.0 5.133196 35.142765 6.4215906E-3
+ 43.0 6.6055703 35.367023 7.4633513E-3
+ 43.0 8.383674 35.642932 8.555404E-3
+ 43.0 9.1762495 35.689247 9.944904E-3
+ 43.0 9.694372 35.65624 0.011493265
+ 43.0 9.955214 35.553562 0.012836651
+ 43.0 10.286489 35.489967 0.013874973
+ 43.0 10.733961 35.494636 0.014591572
+ 43.0 11.163648 35.529716 0.015001781
+ 43.0 11.463184 35.557075 0.015207541
+ 43.0 11.677777 35.57827 0.015315959
+ 43.0 11.871009 35.60048 0.015373572
+ 43.0 12.007471 35.615425 0.015398337
+ 43.0 12.12925 35.628555 0.015398336
+ 43.0 12.237854 35.639453 0.01538109
+ 43.0 12.342355 35.650825 0.015362924
+ 43.0 12.43134 35.660003 0.015345225
+ 43.0 12.504426 35.669002 0.015327712
+ 43.0 12.572855 35.676097 0.015312569
+ 43.0 12.621041 35.680774 0.015297181
+ 43.0 12.66015 35.683883 0.015281181
+ 43.0 12.710242 35.689865 0.015266203
+ 43.0 12.76522 35.69573 0.015253794
+ 43.0 12.809229 35.700347 0.015245418
+ 43.0 12.854174 35.70536 0.015239043
+ 43.0 12.896903 35.70998 0.015232239
+ 43.0 12.95604 35.715614 0.015224002
+ 43.0 13.016414 35.72045 0.015216175
+ 43.0 13.070686 35.726867 0.015207999
+ 43.0 13.14864 35.73568 0.015196984
+ 43.0 13.194388 35.737712 0.015186521
+ 43.0 13.248998 35.740257 0.01517762
+ 43.0 13.310952 35.744453 0.015163862
+ 43.0 13.379131 35.74819 0.015145767
+ 43.0 13.473873 35.75446 0.015126259
+ 43.0 13.608525 35.761127 0.015106819
+ 43.0 13.722586 35.76434 0.015087272
+ 43.0 13.870673 35.768966 0.01506174
+ 43.0 14.061578 35.78098 0.015026652
+ 43.0 14.316306 35.788612 0.014976129
+ 43.0 14.673829 35.79221 0.014918995
+ 43.0 15.272022 35.798336 0.014832474
+ 43.0 16.002464 35.80588 0.014721588
+ 43.0 16.669188 35.818141 0.014579753
+ 43.0 17.727064 35.81857 0.014470997
+ 43.0 18.473743 35.81244 0.014401126
+ 43.0 18.895218 35.809032 0.014235925
+ 43.0 19.024033 35.810375 0.013973662
+ 43.0 19.041723 35.813163 0.013681201
+ 43.0 19.040806 35.8141 0.013394242
+ 43.0 19.030497 35.812915 0.013102839
+ 43.0 19.04565 35.811344 0.012804983
+ 43.0 18.943096 35.810142 0.012365906
+ 43.05 2.5312361 34.89728 0.0E+0
+ 43.05 2.5223288 34.90173 1.3475423E-4
+ 43.05 2.5242516 34.907157 2.5597921E-4
+ 43.05 2.5410482 34.9148 2.7592093E-4
+ 43.05 2.577607 34.91867 3.0743033E-4
+ 43.05 2.6406497 34.927036 4.4468097E-4
+ 43.05 2.746539 34.940273 7.0220325E-4
+ 43.05 2.9142134 34.95124 1.1483042E-3
+ 43.05 3.1157817 34.960636 1.7901825E-3
+ 43.05 3.3435616 34.964874 2.6225356E-3
+ 43.05 3.5583312 34.965332 3.5632641E-3
+ 43.05 3.8147466 34.97503 4.5528416E-3
+ 43.05 4.3115377 35.03087 5.578701E-3
+ 43.05 5.1285567 35.14116 6.6468343E-3
+ 43.05 6.602203 35.36554 7.723661E-3
+ 43.05 8.390328 35.64312 8.849923E-3
+ 43.05 9.170013 35.68623 0.010255378
+ 43.05 9.697213 35.655033 0.011815696
+ 43.05 9.960466 35.553115 0.013183892
+ 43.05 10.292885 35.49001 0.014252117
+ 43.05 10.73957 35.49497 0.01499286
+ 43.05 11.167192 35.529953 0.01542671
+ 43.05 11.465143 35.55715 0.015656086
+ 43.05 11.679159 35.578273 0.01578424
+ 43.05 11.872314 35.600597 0.015859444
+ 43.05 12.00808 35.61544 0.015900815
+ 43.05 12.128814 35.62848 0.015916293
+ 43.05 12.237283 35.639434 0.015911855
+ 43.05 12.34145 35.6507 0.015903909
+ 43.05 12.429885 35.659805 0.015894612
+ 43.05 12.502824 35.66875 0.015884541
+ 43.05 12.570883 35.67575 0.015876284
+ 43.05 12.618522 35.680332 0.015867362
+ 43.05 12.657838 35.683506 0.01585781
+ 43.05 12.708419 35.689605 0.015849164
+ 43.05 12.763413 35.695423 0.015842494
+ 43.05 12.807804 35.70006 0.015839204
+ 43.05 12.852362 35.704986 0.015837545
+ 43.05 12.894858 35.709564 0.015835337
+ 43.05 12.952945 35.714996 0.015831381
+ 43.05 13.013255 35.719745 0.015827183
+ 43.05 13.06666 35.72604 0.01582228
+ 43.05 13.144555 35.734893 0.015814658
+ 43.05 13.190447 35.73688 0.015807584
+ 43.05 13.24445 35.73927 0.015801793
+ 43.05 13.305127 35.743412 0.015790965
+ 43.05 13.373269 35.747123 0.01577548
+ 43.05 13.46727 35.753303 0.015758151
+ 43.05 13.602554 35.760032 0.015740002
+ 43.05 13.716358 35.763294 0.015721055
+ 43.05 13.864044 35.768062 0.015695274
+ 43.05 14.054237 35.780197 0.015659317
+ 43.05 14.30653 35.787734 0.015607679
+ 43.05 14.664715 35.79131 0.015548167
+ 43.05 15.256993 35.797557 0.015460692
+ 43.05 15.98779 35.80451 0.015353536
+ 43.05 16.646566 35.81648 0.015221662
+ 43.05 17.718369 35.81696 0.015117674
+ 43.05 18.458038 35.810642 0.015038279
+ 43.05 18.86778 35.807025 0.014858145
+ 43.05 18.991068 35.808486 0.014584969
+ 43.05 19.00951 35.811172 0.014287304
+ 43.05 19.008654 35.812072 0.013997299
+ 43.05 18.997274 35.81085 0.013703253
+ 43.05 19.013327 35.80967 0.013402258
+ 43.05 18.911402 35.808292 0.012959346
+ 43.1 2.531279 34.897243 0.0E+0
+ 43.1 2.5226142 34.901676 1.27577E-4
+ 43.1 2.524942 34.907215 2.3770964E-4
+ 43.1 2.5413601 34.914844 2.585973E-4
+ 43.1 2.5780282 34.918674 2.979296E-4
+ 43.1 2.6416265 34.927043 4.464176E-4
+ 43.1 2.7482686 34.940303 7.19262E-4
+ 43.1 2.9165303 34.951194 1.181769E-3
+ 43.1 3.1185116 34.96055 1.842481E-3
+ 43.1 3.3445568 34.9644 2.6976743E-3
+ 43.1 3.5569784 34.96453 3.6611824E-3
+ 43.1 3.8115825 34.97386 4.680988E-3
+ 43.1 4.3071403 35.029472 5.7483343E-3
+ 43.1 5.1230726 35.1394 6.8503874E-3
+ 43.1 6.5972766 35.363742 7.9578E-3
+ 43.1 8.394645 35.64281 9.112409E-3
+ 43.1 9.163018 35.68305 0.01052579
+ 43.1 9.69958 35.653705 0.01208978
+ 43.1 9.965423 35.55257 0.013474583
+ 43.1 10.299155 35.489986 0.014565279
+ 43.1 10.745117 35.49526 0.015324543
+ 43.1 11.17085 35.530166 0.015777638
+ 43.1 11.467335 35.55723 0.016027164
+ 43.1 11.680927 35.578311 0.01617227
+ 43.1 11.873974 35.600734 0.01626272
+ 43.1 12.009185 35.61549 0.016318828
+ 43.1 12.128926 35.62845 0.016348317
+ 43.1 12.23718 35.639442 0.016355569
+ 43.1 12.341001 35.650608 0.01635695
+ 43.1 12.42888 35.65964 0.016355293
+ 43.1 12.501667 35.66852 0.01635203
+ 43.1 12.569332 35.675422 0.016350096
+ 43.1 12.616449 35.67991 0.016347118
+ 43.1 12.656075 35.68316 0.016343541
+ 43.1 12.707098 35.68936 0.016340772
+ 43.1 12.762083 35.69514 0.016339395
+ 43.1 12.806829 35.699787 0.01634076
+ 43.1 12.851029 35.704635 0.016343394
+ 43.1 12.89331 35.709167 0.016345385
+ 43.1 12.950324 35.714405 0.016345331
+ 43.1 13.010506 35.71907 0.016344381
+ 43.1 13.063061 35.725242 0.016342374
+ 43.1 13.14088 35.734123 0.016337799
+ 43.1 13.18696 35.73608 0.016333785
+ 43.1 13.240368 35.738323 0.01633078
+ 43.1 13.299758 35.74241 0.016322585
+ 43.1 13.3678 35.746093 0.016309435
+ 43.1 13.461009 35.752185 0.016294027
+ 43.1 13.596764 35.75898 0.01627691
+ 43.1 13.710275 35.762275 0.01625832
+ 43.1 13.857379 35.76719 0.016232075
+ 43.1 14.046753 35.779396 0.016195059
+ 43.1 14.296509 35.786842 0.016142184
+ 43.1 14.655192 35.79039 0.016080206
+ 43.1 15.241893 35.796722 0.01599187
+ 43.1 15.973434 35.80304 0.015888808
+ 43.1 16.624819 35.81466 0.015767673
+ 43.1 17.708841 35.81521 0.015669184
+ 43.1 18.440619 35.808734 0.01558077
+ 43.1 18.838722 35.804935 0.015386485
+ 43.1 18.95709 35.80648 0.015103124
+ 43.1 18.976494 35.809032 0.014800714
+ 43.1 18.975765 35.809894 0.01450802
+ 43.1 18.96335 35.808643 0.014211729
+ 43.1 18.980198 35.807846 0.013908049
+ 43.1 18.87914 35.80631 0.013461972
+ 43.15 2.531251 34.897193 0.0E+0
+ 43.15 2.5228645 34.901626 1.2008216E-4
+ 43.15 2.525623 34.907272 2.1846536E-4
+ 43.15 2.5416953 34.91489 2.4031366E-4
+ 43.15 2.5784704 34.918682 2.8761613E-4
+ 43.15 2.6426613 34.927055 4.473685E-4
+ 43.15 2.7500593 34.94033 7.351447E-4
+ 43.15 2.918898 34.95115 1.2129747E-3
+ 43.15 3.1212754 34.96045 1.8909227E-3
+ 43.15 3.34552 34.963912 2.7665626E-3
+ 43.15 3.5554542 34.963695 3.7494287E-3
+ 43.15 3.8080122 34.97261 4.795197E-3
+ 43.15 4.301999 35.02794 5.899683E-3
+ 43.15 5.1167144 35.13749 7.0311892E-3
+ 43.15 6.5906963 35.36163 8.164653E-3
+ 43.15 8.396445 35.641975 9.341875E-3
+ 43.15 9.155231 35.679706 0.010755473
+ 43.15 9.701433 35.652256 0.012315125
+ 43.15 9.97005 35.55192 0.013708494
+ 43.15 10.305251 35.489887 0.01481432
+ 43.15 10.750551 35.495494 0.015586546
+ 43.15 11.174573 35.530353 0.01605451
+ 43.15 11.469716 35.557312 0.016320689
+ 43.15 11.683028 35.578376 0.016479949
+ 43.15 11.875926 35.600883 0.01658328
+ 43.15 12.010724 35.615562 0.016652234
+ 43.15 12.129527 35.628452 0.016694235
+ 43.15 12.237494 35.639472 0.01671204
+ 43.15 12.340963 35.650543 0.016721843
+ 43.15 12.428284 35.659503 0.016727049
+ 43.15 12.500914 35.668315 0.016729943
+ 43.15 12.568162 35.67511 0.016733766
+ 43.15 12.614783 35.6795 0.0167362
+ 43.15 12.65482 35.682842 0.016738106
+ 43.15 12.706233 35.689132 0.016740747
+ 43.15 12.761181 35.694866 0.016744215
+ 43.15 12.806255 35.699523 0.016749784
+ 43.15 12.850129 35.704303 0.016756285
+ 43.15 12.892211 35.70879 0.016762072
+ 43.15 12.948133 35.713836 0.016765531
+ 43.15 13.008119 35.718414 0.016767448
+ 43.15 13.059848 35.72447 0.016767956
+ 43.15 13.137577 35.73336 0.01676608
+ 43.15 13.183887 35.73531 0.016764795
+ 43.15 13.236711 35.737415 0.016764248
+ 43.15 13.294812 35.741447 0.016758384
+ 43.15 13.362693 35.745105 0.016747288
+ 43.15 13.455062 35.751102 0.016733542
+ 43.15 13.591118 35.757957 0.016717212
+ 43.15 13.7043 35.761276 0.016698735
+ 43.15 13.850639 35.76634 0.016671835
+ 43.15 14.039086 35.778575 0.016633578
+ 43.15 14.286226 35.785934 0.016579362
+ 43.15 14.645238 35.789455 0.016514856
+ 43.15 15.226737 35.79583 0.01642575
+ 43.15 15.959418 35.80147 0.016327104
+ 43.15 16.604042 35.812686 0.016217383
+ 43.15 17.698498 35.81331 0.016125059
+ 43.15 18.421522 35.806705 0.016028183
+ 43.15 18.808104 35.802757 0.015820611
+ 43.15 18.922132 35.80435 0.015527857
+ 43.15 18.942684 35.806743 0.0152212
+ 43.15 18.942152 35.807552 0.014926203
+ 43.15 18.928743 35.806297 0.014628091
+ 43.15 18.946281 35.805866 0.014322207
+ 43.15 18.846325 35.80419 0.013873677
+ 43.2 2.5311527 34.897136 0.0E+0
+ 43.2 2.5230805 34.901584 1.1231806E-4
+ 43.2 2.5262937 34.907333 1.9838674E-4
+ 43.2 2.5420536 34.914932 2.2119605E-4
+ 43.2 2.5789327 34.918682 2.765475E-4
+ 43.2 2.643752 34.927062 4.4749942E-4
+ 43.2 2.7519075 34.940353 7.497169E-4
+ 43.2 2.9213113 34.9511 1.2417063E-3
+ 43.2 3.124066 34.960346 1.9352048E-3
+ 43.2 3.346446 34.963405 2.8287975E-3
+ 43.2 3.5537588 34.962825 3.8275292E-3
+ 43.2 3.8040401 34.971286 4.894884E-3
+ 43.2 4.2961115 35.02627 6.0319826E-3
+ 43.2 5.1094622 35.13543 7.188375E-3
+ 43.2 6.582384 35.35918 8.3433585E-3
+ 43.2 8.395578 35.64059 9.537684E-3
+ 43.2 9.146626 35.67621 0.010944211
+ 43.2 9.702735 35.650684 0.012491857
+ 43.2 9.974318 35.551177 0.013885978
+ 43.2 10.311129 35.489723 0.014999754
+ 43.2 10.755822 35.495685 0.015779499
+ 43.2 11.178313 35.53051 0.016258007
+ 43.2 11.472244 35.557392 0.01653736
+ 43.2 11.68541 35.578464 0.016707985
+ 43.2 11.878113 35.60104 0.01682185
+ 43.2 12.012636 35.61566 0.01690175
+ 43.2 12.130562 35.62849 0.016954752
+ 43.2 12.238176 35.639522 0.016981957
+ 43.2 12.341293 35.6505 0.016999269
+ 43.2 12.428057 35.659393 0.01701056
+ 43.2 12.500527 35.668125 0.017018968
+ 43.2 12.567334 35.67481 0.017027967
+ 43.2 12.613488 35.679107 0.017035278
+ 43.2 12.654031 35.68255 0.017042171
+ 43.2 12.705775 35.688915 0.017049747
+ 43.2 12.760661 35.694606 0.017057596
+ 43.2 12.806031 35.699272 0.017066922
+ 43.2 12.849618 35.703983 0.01707686
+ 43.2 12.891516 35.708427 0.017086035
+ 43.2 12.946331 35.713287 0.017092617
+ 43.2 13.006051 35.717777 0.017097017
+ 43.2 13.056979 35.723716 0.017099665
+ 43.2 13.134606 35.732612 0.01710014
+ 43.2 13.181187 35.734565 0.017101252
+ 43.2 13.233443 35.73655 0.017102832
+ 43.2 13.290257 35.74053 0.017098999
+ 43.2 13.357914 35.744152 0.01708968
+ 43.2 13.449401 35.750053 0.017077338
+ 43.2 13.585582 35.756973 0.01706155
+ 43.2 13.6984 35.760292 0.017042963
+ 43.2 13.843788 35.765506 0.017015226
+ 43.2 14.0312 35.777725 0.016975572
+ 43.2 14.275669 35.785003 0.016919922
+ 43.2 14.634834 35.788494 0.016852848
+ 43.2 15.211541 35.794872 0.016763072
+ 43.2 15.945763 35.799793 0.016669115
+ 43.2 16.584326 35.81055 0.016571375
+ 43.2 17.687359 35.811256 0.016485814
+ 43.2 18.4008 35.80455 0.016381076
+ 43.2 18.775997 35.80049 0.01616116
+ 43.2 18.886238 35.802097 0.015859867
+ 43.2 18.908104 35.804294 0.015549498
+ 43.2 18.907831 35.80505 0.015252612
+ 43.2 18.893476 35.803802 0.014953127
+ 43.2 18.911604 35.803726 0.014645548
+ 43.2 18.812975 35.801933 0.014195306
+ 43.25 2.5309858 34.897068 0.0E+0
+ 43.25 2.5232636 34.901546 1.0433517E-4
+ 43.25 2.526953 34.90739 1.7762257E-4
+ 43.25 2.5424346 34.914978 2.0137941E-4
+ 43.25 2.5794134 34.918682 2.64789E-4
+ 43.25 2.6448967 34.927074 4.4678212E-4
+ 43.25 2.7538092 34.940376 7.6285045E-4
+ 43.25 2.9237647 34.951045 1.2677583E-3
+ 43.25 3.1268768 34.960235 1.975041E-3
+ 43.25 3.3473298 34.962882 2.8840084E-3
+ 43.25 3.5518944 34.96192 3.8950692E-3
+ 43.25 3.7996745 34.96989 4.9795676E-3
+ 43.25 4.2894797 35.024467 6.1446153E-3
+ 43.25 5.101303 35.133216 7.321275E-3
+ 43.25 6.5722784 35.356395 8.493309E-3
+ 43.25 8.391918 35.638637 9.699536E-3
+ 43.25 9.137184 35.672557 0.011092209
+ 43.25 9.703453 35.64899 0.012620577
+ 43.25 9.978204 35.550346 0.014007933
+ 43.25 10.316747 35.489486 0.0151227
+ 43.25 10.760884 35.495815 0.015904685
+ 43.25 11.182024 35.530632 0.016389517
+ 43.25 11.474875 35.557472 0.016678615
+ 43.25 11.68802 35.57857 0.016857862
+ 43.25 11.880473 35.601196 0.016979946
+ 43.25 12.01486 35.615776 0.017068913
+ 43.25 12.131974 35.62855 0.017131403
+ 43.25 12.239177 35.639583 0.017166859
+ 43.25 12.341946 35.650482 0.017190766
+ 43.25 12.428159 35.65931 0.017207371
+ 43.25 12.500466 35.667957 0.017220642
+ 43.25 12.566808 35.67452 0.017234245
+ 43.25 12.612525 35.678726 0.017245896
+ 43.25 12.653669 35.68228 0.017257275
+ 43.25 12.70568 35.6887 0.017269302
+ 43.25 12.760476 35.69435 0.01728107
+ 43.25 12.806109 35.699024 0.017293707
+ 43.25 12.84945 35.703681 0.017306652
+ 43.25 12.891179 35.70808 0.017318808
+ 43.25 12.944875 35.71276 0.017328124
+ 43.25 13.004256 35.717163 0.01733463
+ 43.25 13.05441 35.722991 0.01733905
+ 43.25 13.131927 35.731872 0.017341528
+ 43.25 13.178819 35.733844 0.017344708
+ 43.25 13.230525 35.73572 0.017348088
+ 43.25 13.28606 35.739643 0.017345985
+ 43.25 13.353433 35.74324 0.01733817
+ 43.25 13.443999 35.74904 0.017326983
+ 43.25 13.580122 35.75602 0.01731151
+ 43.25 13.692543 35.759326 0.017292598
+ 43.25 13.836796 35.764694 0.017263863
+ 43.25 14.023067 35.776847 0.017222676
+ 43.25 14.264829 35.784053 0.017165525
+ 43.25 14.623966 35.78751 0.017095866
+ 43.25 15.196322 35.79385 0.017005522
+ 43.25 15.932484 35.798007 0.016916484
+ 43.25 16.56575 35.808258 0.016831178
+ 43.25 17.67545 35.80905 0.016752906
+ 43.25 18.378515 35.802265 0.016640943
+ 43.25 18.742487 35.798126 0.016409695
+ 43.25 18.84946 35.799716 0.016100762
+ 43.25 18.872774 35.80169 0.015787253
+ 43.25 18.87283 35.802375 0.015488923
+ 43.25 18.857584 35.801155 0.015188536
+ 43.25 18.87619 35.80142 0.014879794
+ 43.25 18.779114 35.799526 0.014428617
+ 43.3 2.5307521 34.896987 0.0E+0
+ 43.3 2.523415 34.901515 9.618572E-5
+ 43.3 2.5275995 34.90745 1.5632887E-4
+ 43.3 2.5428383 34.91502 1.8100622E-4
+ 43.3 2.579911 34.91868 2.5241295E-4
+ 43.3 2.6460924 34.927082 4.4519465E-4
+ 43.3 2.7557594 34.940395 7.7442446E-4
+ 43.3 2.9262521 34.950992 1.2909374E-3
+ 43.3 3.1297013 34.960113 2.0101652E-3
+ 43.3 3.348167 34.962345 2.9318586E-3
+ 43.3 3.5498642 34.96099 3.951695E-3
+ 43.3 3.7949271 34.96843 5.048866E-3
+ 43.3 4.2821135 35.02254 6.237109E-3
+ 43.3 5.0922336 35.13086 7.429407E-3
+ 43.3 6.5603365 35.353267 8.614132E-3
+ 43.3 8.385363 35.6361 9.827443E-3
+ 43.3 9.126895 35.66876 0.011200055
+ 43.3 9.703566 35.647186 0.012702327
+ 43.3 9.981688 35.549434 0.014075756
+ 43.3 10.322069 35.48918 0.01518484
+ 43.3 10.765695 35.49589 0.015964
+ 43.3 11.185663 35.530723 0.016451076
+ 43.3 11.47757 35.55755 0.016746571
+ 43.3 11.690808 35.5787 0.016931769
+ 43.3 11.882952 35.601352 0.017059818
+ 43.3 12.017337 35.6159 0.01715601
+ 43.3 12.133706 35.628635 0.017226495
+ 43.3 12.24045 35.639656 0.017269054
+ 43.3 12.342879 35.650482 0.01729866
+ 43.3 12.42855 35.65925 0.01731982
+ 43.3 12.500694 35.667804 0.017337315
+ 43.3 12.566549 35.674236 0.017354952
+ 43.3 12.611857 35.678356 0.01737041
+ 43.3 12.653691 35.682033 0.017385775
+ 43.3 12.705901 35.688495 0.017401773
+ 43.3 12.76058 35.694103 0.017416999
+ 43.3 12.806443 35.698776 0.0174325
+ 43.3 12.849583 35.703392 0.01744803
+ 43.3 12.891154 35.707744 0.017462766
+ 43.3 12.943723 35.712253 0.017474433
+ 43.3 13.002693 35.716567 0.017482674
+ 43.3 13.052103 35.722286 0.017488508
+ 43.3 13.129505 35.73114 0.01749265
+ 43.3 13.176745 35.733154 0.01749757
+ 43.3 13.22792 35.734931 0.017502435
+ 43.3 13.282191 35.738796 0.017501771
+ 43.3 13.34922 35.74237 0.01749519
+ 43.3 13.438829 35.748054 0.017484915
+ 43.3 13.574709 35.755096 0.017469537
+ 43.3 13.686698 35.758373 0.01745011
+ 43.3 13.829636 35.76389 0.017420236
+ 43.3 14.014659 35.775936 0.017377408
+ 43.3 14.253701 35.78308 0.017318703
+ 43.3 14.612627 35.7865 0.017246468
+ 43.3 15.181099 35.79276 0.017155664
+ 43.3 15.919597 35.796112 0.017071731
+ 43.3 16.548384 35.805805 0.016999206
+ 43.3 17.6628 35.80669 0.016928665
+ 43.3 18.354738 35.799846 0.016810143
+ 43.3 18.707663 35.79567 0.016568633
+ 43.3 18.81186 35.797206 0.016253015
+ 43.3 18.836735 35.79892 0.01593697
+ 43.3 18.837181 35.799526 0.01563766
+ 43.3 18.821104 35.798355 0.015336868
+ 43.3 18.840086 35.79894 0.015027517
+ 43.3 18.74478 35.79697 0.014576208
+ 43.35 2.5304541 34.896896 0.0E+0
+ 43.35 2.5235362 34.90149 8.792329E-5
+ 43.35 2.5282328 34.907516 1.3466753E-4
+ 43.35 2.543264 34.91506 1.602255E-4
+ 43.35 2.580424 34.918674 2.3949816E-4
+ 43.35 2.647336 34.927085 4.427214E-4
+ 43.35 2.757754 34.940414 7.8432576E-4
+ 43.35 2.928768 34.95094 1.3110626E-3
+ 43.35 3.1325328 34.959983 2.04033E-3
+ 43.35 3.3489537 34.961795 2.972046E-3
+ 43.35 3.5476741 34.960037 3.9971135E-3
+ 43.35 3.7898128 34.966903 5.1024993E-3
+ 43.35 4.274028 35.020492 6.3091334E-3
+ 43.35 5.082259 35.12836 7.5124725E-3
+ 43.35 6.546533 35.3498 8.705683E-3
+ 43.35 8.375841 35.632972 9.921702E-3
+ 43.35 9.115756 35.664817 0.011268678
+ 43.35 9.703052 35.645267 0.012738536
+ 43.35 9.984753 35.548442 0.014091287
+ 43.35 10.32706 35.488807 0.015188352
+ 43.35 10.770215 35.495906 0.01595987
+ 43.35 11.18919 35.530773 0.016445292
+ 43.35 11.480291 35.557617 0.016743964
+ 43.35 11.693725 35.578842 0.01693254
+ 43.35 11.885494 35.6015 0.017064383
+ 43.35 12.020008 35.616027 0.017166011
+ 43.35 12.135704 35.628734 0.017243028
+ 43.35 12.241948 35.639736 0.017291574
+ 43.35 12.344052 35.650497 0.017325992
+ 43.35 12.429193 35.659206 0.017350966
+ 43.35 12.501174 35.667667 0.017372062
+ 43.35 12.566519 35.67396 0.017393176
+ 43.35 12.611451 35.678 0.017411917
+ 43.35 12.654057 35.68181 0.017430775
+ 43.35 12.706395 35.68829 0.017450264
+ 43.35 12.760931 35.693855 0.01746849
+ 43.35 12.806988 35.698535 0.017486421
+ 43.35 12.849975 35.703113 0.017504126
+ 43.35 12.8914 35.707416 0.017521044
+ 43.35 12.942837 35.71176 0.017534683
+ 43.35 13.001321 35.71599 0.017544303
+ 43.35 13.050019 35.721607 0.017551202
+ 43.35 13.127303 35.73042 0.017556686
+ 43.35 13.174926 35.732486 0.017563028
+ 43.35 13.225591 35.734176 0.017569069
+ 43.35 13.278617 35.737987 0.01756956
+ 43.35 13.345244 35.741535 0.017563958
+ 43.35 13.433866 35.747104 0.017554363
+ 43.35 13.569314 35.754203 0.01753888
+ 43.35 13.680839 35.757427 0.017518762
+ 43.35 13.822286 35.7631 0.017487632
+ 43.35 14.005956 35.77499 0.017443078
+ 43.35 14.242285 35.78208 0.017382797
+ 43.35 14.600815 35.785465 0.017308025
+ 43.35 15.165891 35.7916 0.017216874
+ 43.35 15.907113 35.7941 0.017138189
+ 43.35 16.532284 35.803195 0.017078664
+ 43.35 17.649445 35.804176 0.017016219
+ 43.35 18.329556 35.79729 0.016891835
+ 43.35 18.671629 35.793113 0.016641177
+ 43.35 18.7735 35.79457 0.016319865
+ 43.35 18.800026 35.795993 0.01600192
+ 43.35 18.800924 35.79651 0.015702128
+ 43.35 18.784084 35.795406 0.015401443
+ 43.35 18.803333 35.796283 0.015092058
+ 43.35 18.710007 35.794261 0.014641445
+ 43.4 2.5300946 34.896797 0.0E+0
+ 43.4 2.5236291 34.901473 7.960238E-5
+ 43.4 2.528852 34.907577 1.128048E-4
+ 43.4 2.543711 34.9151 1.3919132E-4
+ 43.4 2.5809512 34.918663 2.2612912E-4
+ 43.4 2.648625 34.927093 4.3935308E-4
+ 43.4 2.759788 34.940433 7.9244986E-4
+ 43.4 2.931306 34.950881 1.3279666E-3
+ 43.4 3.1353647 34.95985 2.0653104E-3
+ 43.4 3.3496878 34.96123 3.0043048E-3
+ 43.4 3.5453302 34.95906 4.031093E-3
+ 43.4 3.7843492 34.965324 5.1402845E-3
+ 43.4 4.265245 35.018333 6.3604963E-3
+ 43.4 5.071394 35.125732 7.5703477E-3
+ 43.4 6.5308623 35.345993 8.768023E-3
+ 43.4 8.36331 35.62925 9.982854E-3
+ 43.4 9.103776 35.660747 0.011299302
+ 43.4 9.7019004 35.64324 0.012730967
+ 43.4 9.987389 35.54738 0.014056749
+ 43.4 10.331693 35.48837 0.015135848
+ 43.4 10.774413 35.495864 0.015895205
+ 43.4 11.192566 35.530784 0.016375287
+ 43.4 11.482999 35.557674 0.016674062
+ 43.4 11.696724 35.578994 0.01686357
+ 43.4 11.888049 35.60164 0.016997145
+ 43.4 12.022818 35.61616 0.017102491
+ 43.4 12.137915 35.62885 0.017184623
+ 43.4 12.243627 35.63982 0.017238066
+ 43.4 12.345423 35.650524 0.017276444
+ 43.4 12.430049 35.659187 0.017304515
+ 43.4 12.501871 35.667537 0.017328603
+ 43.4 12.566684 35.673694 0.017352648
+ 43.4 12.611271 35.67765 0.017374167
+ 43.4 12.65473 35.6816 0.01739603
+ 43.4 12.70712 35.688083 0.017418537
+ 43.4 12.761486 35.69361 0.017439323
+ 43.4 12.807702 35.69829 0.017459258
+ 43.4 12.850585 35.702842 0.017478734
+ 43.4 12.891873 35.707103 0.017497454
+ 43.4 12.942179 35.711292 0.017512701
+ 43.4 13.000101 35.715427 0.01752336
+ 43.4 13.04812 35.720947 0.017530996
+ 43.4 13.125287 35.72971 0.017537504
+ 43.4 13.173325 35.731845 0.017544964
+ 43.4 13.223504 35.733463 0.017551886
+ 43.4 13.275309 35.737216 0.017553264
+ 43.4 13.341478 35.74074 0.017548393
+ 43.4 13.429086 35.74619 0.017539263
+ 43.4 13.563914 35.753337 0.017523494
+ 43.4 13.674944 35.756492 0.017502531
+ 43.4 13.814728 35.762317 0.017470052
+ 43.4 13.996943 35.774002 0.017423715
+ 43.4 14.230585 35.78106 0.017361855
+ 43.4 14.588535 35.7844 0.017284613
+ 43.4 15.150717 35.79037 0.01719324
+ 43.4 15.895043 35.79198 0.017119894
+ 43.4 16.517498 35.800434 0.017073482
+ 43.4 17.635427 35.80151 0.017019413
+ 43.4 18.303057 35.7946 0.01688988
+ 43.4 18.634493 35.79046 0.016631234
+ 43.4 18.734463 35.791812 0.016305253
+ 43.4 18.7627 35.792907 0.015986066
+ 43.4 18.76411 35.793323 0.015686316
+ 43.4 18.746578 35.7923 0.015386269
+ 43.4 18.765991 35.79346 0.015077442
+ 43.4 18.67484 35.7914 0.014628375
+ 43.45 2.5296764 34.896686 0.0E+0
+ 43.45 2.5236952 34.901466 7.1277965E-5
+ 43.45 2.529456 34.907642 9.0909896E-5
+ 43.45 2.544178 34.91514 1.180615E-4
+ 43.45 2.5814907 34.91865 2.1239519E-4
+ 43.45 2.649955 34.927097 4.3508672E-4
+ 43.45 2.7618563 34.940444 7.9870125E-4
+ 43.45 2.9338603 34.950824 1.341497E-3
+ 43.45 3.1381907 34.95971 2.084904E-3
+ 43.45 3.3503665 34.96066 3.0284062E-3
+ 43.45 3.542841 34.95807 4.0534613E-3
+ 43.45 3.7785573 34.963695 5.1621343E-3
+ 43.45 4.2557916 35.016063 6.3911373E-3
+ 43.45 5.059661 35.122974 7.6030744E-3
+ 43.45 6.5133376 35.341857 8.801403E-3
+ 43.45 8.347755 35.624935 0.010011656
+ 43.45 9.090967 35.656555 0.011293389
+ 43.45 9.700107 35.641113 0.012681653
+ 43.45 9.989589 35.546253 0.01397468
+ 43.45 10.335942 35.48787 0.015030298
+ 43.45 10.778257 35.49576 0.0157733
+ 43.45 11.195759 35.530757 0.016244609
+ 43.45 11.485663 35.557727 0.016540598
+ 43.45 11.69976 35.579154 0.01672874
+ 43.45 11.890569 35.60176 0.016862107
+ 43.45 12.025715 35.616287 0.016969543
+ 43.45 12.140288 35.62897 0.017055428
+ 43.45 12.245445 35.6399 0.01711272
+ 43.45 12.346955 35.650562 0.017154235
+ 43.45 12.431086 35.65918 0.01718472
+ 43.45 12.502752 35.66742 0.017211217
+ 43.45 12.567011 35.67343 0.01723767
+ 43.45 12.611286 35.677314 0.017261473
+ 43.45 12.655671 35.681404 0.017285869
+ 43.45 12.708036 35.687877 0.017310938
+ 43.45 12.762206 35.693363 0.017333845
+ 43.45 12.808544 35.698047 0.017355382
+ 43.45 12.851376 35.70258 0.017376244
+ 43.45 12.892536 35.706794 0.017396394
+ 43.45 12.941711 35.710834 0.0174129
+ 43.45 12.998999 35.71488 0.01742427
+ 43.45 13.046374 35.72031 0.01743234
+ 43.45 13.123425 35.729007 0.017439572
+ 43.45 13.171908 35.731227 0.017447865
+ 43.45 13.221624 35.73278 0.017455384
+ 43.45 13.272238 35.736484 0.017457396
+ 43.45 13.337896 35.739982 0.017453028
+ 43.45 13.424469 35.745304 0.017444158
+ 43.45 13.558486 35.7525 0.01742794
+ 43.45 13.668994 35.755565 0.017406007
+ 43.45 13.806949 35.761535 0.01737211
+ 43.45 13.987611 35.77298 0.017323963
+ 43.45 14.218611 35.780014 0.01726055
+ 43.45 14.575797 35.783313 0.017180936
+ 43.45 15.135599 35.789077 0.017089467
+ 43.45 15.883393 35.789745 0.017021514
+ 43.45 16.50406 35.797527 0.016988209
+ 43.45 17.620794 35.798694 0.016942708
+ 43.45 18.275345 35.79178 0.01680875
+ 43.45 18.596373 35.787712 0.016543308
+ 43.45 18.694824 35.78893 0.016213708
+ 43.45 18.724813 35.789665 0.015893972
+ 43.45 18.726793 35.78997 0.015594801
+ 43.45 18.708647 35.789054 0.015295945
+ 43.45 18.72812 35.790462 0.014988284
+ 43.45 18.639338 35.788394 0.014541629
+ 43.5 2.5292034 34.896564 0.0E+0
+ 43.5 2.5237367 34.901462 6.3005005E-5
+ 43.5 2.5300445 34.907707 6.9153335E-5
+ 43.5 2.5446643 34.915176 9.699602E-5
+ 43.5 2.582041 34.918636 1.983896E-4
+ 43.5 2.651323 34.9271 4.2992547E-4
+ 43.5 2.7639532 34.940456 8.0299435E-4
+ 43.5 2.936425 34.950763 1.3515163E-3
+ 43.5 3.1410043 34.95956 2.0989307E-3
+ 43.5 3.3509883 34.96008 3.0441591E-3
+ 43.5 3.5402154 34.95706 4.064107E-3
+ 43.5 3.7724604 34.96203 5.1680523E-3
+ 43.5 4.245702 35.0137 6.4011225E-3
+ 43.5 5.047091 35.1201 7.6108472E-3
+ 43.5 6.493992 35.3374 8.806247E-3
+ 43.5 8.329195 35.620037 0.01000904
+ 43.5 9.077356 35.652252 0.011252586
+ 43.5 9.697672 35.63889 0.01259284
+ 43.5 9.991348 35.545074 0.013847864
+ 43.5 10.339787 35.487304 0.014874959
+ 43.5 10.781724 35.495594 0.01559777
+ 43.5 11.198739 35.53069 0.016057145
+ 43.5 11.48825 35.557765 0.016347665
+ 43.5 11.702791 35.579322 0.016532317
+ 43.5 11.893011 35.601863 0.016663678
+ 43.5 12.028649 35.61641 0.016771678
+ 43.5 12.142776 35.629096 0.016860027
+ 43.5 12.247362 35.63998 0.016920166
+ 43.5 12.348612 35.65061 0.016964037
+ 43.5 12.432268 35.65919 0.016996283
+ 43.5 12.503783 35.667312 0.01702464
+ 43.5 12.567471 35.673171 0.017053
+ 43.5 12.611465 35.676982 0.017078616
+ 43.5 12.656843 35.68123 0.01710509
+ 43.5 12.709104 35.687667 0.017132271
+ 43.5 12.763054 35.693115 0.017156884
+ 43.5 12.809478 35.6978 0.017179636
+ 43.5 12.852311 35.702327 0.017201519
+ 43.5 12.893349 35.706497 0.01722275
+ 43.5 12.9414 35.7104 0.017240182
+ 43.5 12.997979 35.714355 0.017251961
+ 43.5 13.044746 35.719692 0.017260173
+ 43.5 13.121687 35.728313 0.017267857
+ 43.5 13.170642 35.73063 0.017276704
+ 43.5 13.219921 35.73214 0.017284567
+ 43.5 13.269377 35.735786 0.017286967
+ 43.5 13.334472 35.739265 0.017282888
+ 43.5 13.419993 35.744453 0.017274098
+ 43.5 13.553014 35.75169 0.017257294
+ 43.5 13.662972 35.754646 0.017234286
+ 43.5 13.798943 35.76076 0.017198933
+ 43.5 13.977956 35.77192 0.017148979
+ 43.5 14.206374 35.778945 0.017084062
+ 43.5 14.562616 35.7822 0.017002206
+ 43.5 15.120559 35.78772 0.01691078
+ 43.5 15.872168 35.787406 0.016848229
+ 43.5 16.491997 35.79448 0.016827907
+ 43.5 17.605597 35.795734 0.016791085
+ 43.5 18.24653 35.788825 0.01665344
+ 43.5 18.557398 35.784873 0.016382407
+ 43.5 18.654676 35.78593 0.01605026
+ 43.5 18.686436 35.786273 0.015730685
+ 43.5 18.68904 35.786457 0.015432658
+ 43.5 18.670357 35.78566 0.015135556
+ 43.5 18.68979 35.787296 0.01482968
+ 43.5 18.603552 35.78524 0.014386317
+ 43.55 2.5286793 34.896434 0.0E+0
+ 43.55 2.5237555 34.90147 5.4837986E-5
+ 43.55 2.530617 34.907775 4.7705376E-5
+ 43.55 2.545169 34.915214 7.615557E-5
+ 43.55 2.5826003 34.918617 1.842086E-4
+ 43.55 2.6527247 34.9271 4.2387825E-4
+ 43.55 2.7660732 34.940467 8.052536E-4
+ 43.55 2.9389934 34.950702 1.3579036E-3
+ 43.55 3.1437995 34.959407 2.1072363E-3
+ 43.55 3.351553 34.95949 3.0514097E-3
+ 43.55 3.5374646 34.956043 4.0629743E-3
+ 43.55 3.7660846 34.960323 5.1581296E-3
+ 43.55 4.235014 35.011241 6.3906353E-3
+ 43.55 5.0337243 35.11711 7.594004E-3
+ 43.55 6.472876 35.332633 8.783125E-3
+ 43.55 8.307676 35.61457 9.9760685E-3
+ 43.55 9.062975 35.64785 0.01117867
+ 43.55 9.694604 35.63658 0.012466917
+ 43.55 9.992671 35.543842 0.013679257
+ 43.55 10.343215 35.486686 0.014673292
+ 43.55 10.784795 35.49537 0.015372461
+ 43.55 11.201479 35.53058 0.015817039
+ 43.55 11.490732 35.557792 0.016099643
+ 43.55 11.70578 35.57949 0.016278865
+ 43.55 11.895336 35.60195 0.016406583
+ 43.55 12.031575 35.616523 0.016513731
+ 43.55 12.145333 35.629222 0.016603336
+ 43.55 12.249341 35.640056 0.01666538
+ 43.55 12.35036 35.65067 0.01671087
+ 43.55 12.433564 35.659214 0.016744275
+ 43.55 12.504936 35.66721 0.016773963
+ 43.55 12.568034 35.672916 0.016803754
+ 43.55 12.61178 35.676662 0.016830739
+ 43.55 12.658212 35.681064 0.016858853
+ 43.55 12.71029 35.687454 0.016887723
+ 43.55 12.763996 35.692867 0.016913647
+ 43.55 12.810469 35.697547 0.016937245
+ 43.55 12.853357 35.70208 0.016959803
+ 43.55 12.894279 35.706203 0.01698178
+ 43.55 12.941214 35.709976 0.016999828
+ 43.55 12.997014 35.71384 0.017011737
+ 43.55 13.04321 35.719097 0.017019834
+ 43.55 13.120045 35.72763 0.01702771
+ 43.55 13.169497 35.730056 0.01703686
+ 43.55 13.218365 35.73153 0.017044822
+ 43.55 13.266701 35.735122 0.017047396
+ 43.55 13.331186 35.738586 0.017043415
+ 43.55 13.41564 35.743633 0.017034538
+ 43.55 13.547484 35.750904 0.017017031
+ 43.55 13.656868 35.75373 0.016992874
+ 43.55 13.790706 35.759986 0.016956054
+ 43.55 13.967981 35.770816 0.016904326
+ 43.55 14.193893 35.77786 0.016837982
+ 43.55 14.549016 35.781063 0.016754042
+ 43.55 15.105619 35.786296 0.016662804
+ 43.55 15.861374 35.784965 0.016605627
+ 43.55 16.481316 35.791297 0.016598059
+ 43.55 17.589888 35.792644 0.016569933
+ 43.55 18.216728 35.78575 0.016429337
+ 43.55 18.517694 35.781948 0.01615394
+ 43.55 18.614117 35.782825 0.01582033
+ 43.55 18.647642 35.78274 0.015501644
+ 43.55 18.650923 35.782787 0.015205343
+ 43.55 18.63178 35.78213 0.014910572
+ 43.55 18.65108 35.783973 0.01460711
+ 43.55 18.56755 35.781944 0.014167928
+ 43.6 2.5281085 34.896297 0.0E+0
+ 43.6 2.5237534 34.901485 4.683046E-5
+ 43.6 2.5311732 34.90784 2.6734351E-5
+ 43.6 2.54569 34.91525 5.5699922E-5
+ 43.6 2.5831668 34.9186 1.6995023E-4
+ 43.6 2.654156 34.9271 4.1695954E-4
+ 43.6 2.768211 34.940475 8.0541404E-4
+ 43.6 2.9415595 34.95064 1.3605546E-3
+ 43.6 3.1465702 34.95925 2.1096903E-3
+ 43.6 3.3520596 34.9589 3.050043E-3
+ 43.6 3.5345997 34.95502 4.0500657E-3
+ 43.6 3.7594583 34.958587 5.132539E-3
+ 43.6 4.223772 35.00871 6.35997E-3
+ 43.6 5.0196084 35.114032 7.553012E-3
+ 43.6 6.45006 35.32758 8.73274E-3
+ 43.6 8.283278 35.60855 9.913901E-3
+ 43.6 9.047864 35.64336 0.011073489
+ 43.6 9.690917 35.634193 0.012306356
+ 43.6 9.993561 35.542572 0.013471923
+ 43.6 10.346214 35.48601 0.014428887
+ 43.6 10.787455 35.495086 0.015101366
+ 43.6 11.203959 35.53043 0.015528609
+ 43.6 11.493085 35.55781 0.015801093
+ 43.6 11.708692 35.57966 0.015973149
+ 43.6 11.897509 35.602012 0.016095757
+ 43.6 12.034451 35.616622 0.016200772
+ 43.6 12.147917 35.62935 0.016290508
+ 43.6 12.251347 35.640125 0.01635358
+ 43.6 12.352168 35.65073 0.016400002
+ 43.6 12.434946 35.65925 0.016433999
+ 43.6 12.506183 35.667114 0.016464537
+ 43.6 12.568674 35.67267 0.016495312
+ 43.6 12.612203 35.676345 0.016523244
+ 43.6 12.659743 35.680912 0.016552588
+ 43.6 12.71156 35.687236 0.01658274
+ 43.6 12.764999 35.69261 0.016609596
+ 43.6 12.811485 35.697292 0.0166337
+ 43.6 12.854482 35.70184 0.016656619
+ 43.6 12.895294 35.705917 0.016679032
+ 43.6 12.941124 35.709568 0.016697401
+ 43.6 12.996075 35.713344 0.01670919
+ 43.6 13.041737 35.71852 0.016716938
+ 43.6 13.118476 35.726955 0.01672477
+ 43.6 13.168445 35.729503 0.016733995
+ 43.6 13.216929 35.730957 0.016741836
+ 43.6 13.264185 35.734493 0.016744386
+ 43.6 13.328015 35.737945 0.016740331
+ 43.6 13.411395 35.742847 0.016731227
+ 43.6 13.541884 35.75015 0.016712924
+ 43.6 13.650672 35.752822 0.01668757
+ 43.6 13.782242 35.759212 0.016649297
+ 43.6 13.957694 35.769683 0.016595863
+ 43.6 14.18119 35.77675 0.016528197
+ 43.6 14.535024 35.779903 0.01644236
+ 43.6 15.090803 35.784816 0.016351469
+ 43.6 15.85101 35.782424 0.016299594
+ 43.6 16.47202 35.788 0.016304435
+ 43.6 17.573727 35.78943 0.016284943
+ 43.6 18.186064 35.782554 0.016142134
+ 43.6 18.477402 35.778942 0.0158636
+ 43.6 18.573244 35.779613 0.015529616
+ 43.6 18.608515 35.779075 0.015212565
+ 43.6 18.612516 35.778976 0.014918587
+ 43.6 18.592999 35.778476 0.014626736
+ 43.6 18.61207 35.780494 0.014326323
+ 43.6 18.531403 35.77852 0.013892217
+ 43.65 2.527495 34.896152 0.0E+0
+ 43.65 2.5237326 34.901512 3.9034512E-5
+ 43.65 2.5317122 34.907905 6.40504E-6
+ 43.65 2.5462265 34.915283 3.578631E-5
+ 43.65 2.5837388 34.918575 1.5571331E-4
+ 43.65 2.6556117 34.9271 4.0918905E-4
+ 43.65 2.77036 34.940483 8.034213E-4
+ 43.65 2.9441165 34.95058 1.3593821E-3
+ 43.65 3.14931 34.95909 2.1061887E-3
+ 43.65 3.3525085 34.95831 3.039981E-3
+ 43.65 3.531634 34.953994 4.025436E-3
+ 43.65 3.752611 34.956836 5.091531E-3
+ 43.65 4.212025 35.006107 6.309522E-3
+ 43.65 5.004799 35.110862 7.488454E-3
+ 43.65 6.4256324 35.32225 8.655898E-3
+ 43.65 8.256107 35.60201 9.823754E-3
+ 43.65 9.032074 35.638797 0.010938912
+ 43.65 9.686632 35.631736 0.012113652
+ 43.65 9.994028 35.541267 0.013228957
+ 43.65 10.348779 35.48529 0.014145389
+ 43.65 10.789696 35.494747 0.014788548
+ 43.65 11.20616 35.530242 0.01519625
+ 43.65 11.495287 35.55781 0.01545668
+ 43.65 11.711495 35.579826 0.015620052
+ 43.65 11.8995 35.60205 0.015736263
+ 43.65 12.03724 35.616706 0.015837992
+ 43.65 12.150491 35.62947 0.015926838
+ 43.65 12.253351 35.640182 0.015990127
+ 43.65 12.354006 35.6508 0.01603685
+ 43.65 12.436385 35.659297 0.016070927
+ 43.65 12.507496 35.667026 0.016101861
+ 43.65 12.569367 35.67242 0.016133208
+ 43.65 12.61271 35.67604 0.0161617
+ 43.65 12.661407 35.680774 0.016191885
+ 43.65 12.712884 35.687015 0.016222933
+ 43.65 12.766036 35.692356 0.016250378
+ 43.65 12.812499 35.697036 0.01627467
+ 43.65 12.855658 35.701606 0.01629765
+ 43.65 12.896362 35.705635 0.016320216
+ 43.65 12.941103 35.70918 0.016338643
+ 43.65 12.99514 35.712863 0.016350081
+ 43.65 13.040305 35.717967 0.016357277
+ 43.65 13.116956 35.726295 0.01636486
+ 43.65 13.167461 35.728973 0.016373947
+ 43.65 13.215588 35.730415 0.016381476
+ 43.65 13.261808 35.733905 0.016383825
+ 43.65 13.324943 35.73734 0.016379545
+ 43.65 13.407244 35.74209 0.016370092
+ 43.65 13.536209 35.749412 0.016350934
+ 43.65 13.644383 35.75192 0.016324362
+ 43.65 13.773559 35.75844 0.016284678
+ 43.65 13.947109 35.768512 0.016229633
+ 43.65 14.168291 35.775623 0.016160777
+ 43.65 14.520673 35.77873 0.016073264
+ 43.65 15.076136 35.783283 0.015982881
+ 43.65 15.841077 35.779796 0.015936209
+ 43.65 16.464094 35.784584 0.015953014
+ 43.65 17.557178 35.786094 0.015942005
+ 43.65 18.154669 35.77925 0.015797706
+ 43.65 18.436663 35.775863 0.015517261
+ 43.65 18.53217 35.776313 0.015183996
+ 43.65 18.569141 35.775287 0.014869339
+ 43.65 18.573912 35.775032 0.014578295
+ 43.65 18.554102 35.774703 0.014289958
+ 43.65 18.572859 35.77687 0.013993233
+ 43.65 18.495186 35.774967 0.013565099
+ 43.7 2.5268437 34.896 0.0E+0
+ 43.7 2.5236952 34.901542 3.1500327E-5
+ 43.7 2.5322341 34.907974 -1.3122961E-5
+ 43.7 2.5467758 34.915317 1.6567845E-5
+ 43.7 2.584314 34.91855 1.4159632E-4
+ 43.7 2.6570875 34.927097 4.0059111E-4
+ 43.7 2.772514 34.94049 7.992322E-4
+ 43.7 2.9466586 34.95052 1.3543167E-3
+ 43.7 3.152013 34.958927 2.0966527E-3
+ 43.7 3.3529007 34.957714 3.0211836E-3
+ 43.7 3.5285811 34.95297 3.9891912E-3
+ 43.7 3.7455747 34.95507 5.035425E-3
+ 43.7 4.199827 35.00345 6.239776E-3
+ 43.7 4.989358 35.107624 7.4010165E-3
+ 43.7 6.3996996 35.316673 8.553496E-3
+ 43.7 8.226302 35.59498 9.70687E-3
+ 43.7 9.015661 35.634174 0.010776778
+ 43.7 9.681776 35.62922 0.011891262
+ 43.7 9.994086 35.539936 0.012953428
+ 43.7 10.350911 35.484523 0.013826425
+ 43.7 10.791513 35.494354 0.01443806
+ 43.7 11.208071 35.530017 0.014824362
+ 43.7 11.497321 35.557804 0.01507108
+ 43.7 11.714163 35.579994 0.015224474
+ 43.7 11.901284 35.602066 0.015333195
+ 43.7 12.039908 35.61677 0.015430626
+ 43.7 12.15302 35.629585 0.015517659
+ 43.7 12.255323 35.640232 0.015580428
+ 43.7 12.355848 35.650867 0.01562688
+ 43.7 12.437858 35.65935 0.015660573
+ 43.7 12.508854 35.666942 0.015691498
+ 43.7 12.570091 35.672176 0.015723033
+ 43.7 12.613278 35.675743 0.015751729
+ 43.7 12.663172 35.680644 0.015782395
+ 43.7 12.714235 35.686786 0.015813984
+ 43.7 12.767079 35.692092 0.015841687
+ 43.7 12.813486 35.696773 0.015865885
+ 43.7 12.856859 35.701377 0.015888661
+ 43.7 12.897458 35.70536 0.015911117
+ 43.7 12.941126 35.7088 0.015929362
+ 43.7 12.994188 35.7124 0.015940253
+ 43.7 13.038893 35.717437 0.01594672
+ 43.7 13.115467 35.725646 0.01595387
+ 43.7 13.166523 35.728462 0.015962638
+ 43.7 13.21432 35.729907 0.015969686
+ 43.7 13.259551 35.733345 0.01597168
+ 43.7 13.321953 35.736774 0.015967049
+ 43.7 13.403175 35.741367 0.015957149
+ 43.7 13.530457 35.748703 0.015937097
+ 43.7 13.638 35.751022 0.015909314
+ 43.7 13.764668 35.757667 0.015868297
+ 43.7 13.936246 35.767307 0.015811767
+ 43.7 14.155226 35.774486 0.015741875
+ 43.7 14.506004 35.777534 0.015652936
+ 43.7 15.061644 35.7817 0.015563236
+ 43.7 15.831574 35.77709 0.015521625
+ 43.7 16.457518 35.781074 0.015549848
+ 43.7 17.540306 35.782657 0.015547095
+ 43.7 18.122677 35.775844 0.015402024
+ 43.7 18.39562 35.772716 0.015120879
+ 43.7 18.491007 35.77293 0.014789419
+ 43.7 18.529625 35.77139 0.014477921
+ 43.7 18.535198 35.77097 0.014190435
+ 43.7 18.515177 35.770824 0.013906211
+ 43.7 18.533539 35.77312 0.013613816
+ 43.7 18.45898 35.771305 0.013192546
+ 43.75 2.5261592 34.89584 0.0E+0
+ 43.75 2.5236432 34.90158 2.4275705E-5
+ 43.75 2.5327386 34.90804 -3.1696832E-5
+ 43.75 2.5473368 34.915348 -1.8080684E-6
+ 43.75 2.5848913 34.918518 1.2769621E-4
+ 43.75 2.6585781 34.927097 3.9119442E-4
+ 43.75 2.7746672 34.94049 7.928146E-4
+ 43.75 2.9491786 34.95046 1.3453069E-3
+ 43.75 3.1546738 34.95876 2.0810302E-3
+ 43.75 3.3532376 34.957122 2.9936484E-3
+ 43.75 3.5254552 34.951946 3.941486E-3
+ 43.75 3.7383832 34.953296 4.964606E-3
+ 43.75 4.1872353 35.000743 6.1513022E-3
+ 43.75 4.9733552 35.10432 7.2914743E-3
+ 43.75 6.372384 35.31087 8.426496E-3
+ 43.75 8.194028 35.587486 9.564476E-3
+ 43.75 8.998691 35.62951 0.010588855
+ 43.75 9.676382 35.62665 0.011641561
+ 43.75 9.993752 35.53859 0.012648319
+ 43.75 10.352612 35.483715 0.013475537
+ 43.75 10.792908 35.493907 0.014053877
+ 43.75 11.209682 35.529754 0.014417272
+ 43.75 11.499172 35.55778 0.014648904
+ 43.75 11.716672 35.580154 0.014791259
+ 43.75 11.902842 35.602054 0.014891585
+ 43.75 12.042428 35.616817 0.014983857
+ 43.75 12.155475 35.62969 0.015068262
+ 43.75 12.257241 35.64027 0.015129853
+ 43.75 12.357671 35.650936 0.01517552
+ 43.75 12.439341 35.659416 0.01520842
+ 43.75 12.510233 35.66686 0.01523897
+ 43.75 12.570827 35.671936 0.015270348
+ 43.75 12.613888 35.675453 0.015298923
+ 43.75 12.665013 35.680526 0.015329738
+ 43.75 12.715588 35.686553 0.015361536
+ 43.75 12.768108 35.69183 0.015389206
+ 43.75 12.814425 35.696506 0.015413047
+ 43.75 12.858063 35.701156 0.015435383
+ 43.75 12.898558 35.705093 0.015457496
+ 43.75 12.941172 35.708442 0.015475345
+ 43.75 12.993203 35.71195 0.015485518
+ 43.75 13.037485 35.716926 0.015491111
+ 43.75 13.113993 35.725006 0.015497677
+ 43.75 13.165611 35.727977 0.015505963
+ 43.75 13.213106 35.729434 0.015512387
+ 43.75 13.257395 35.732822 0.015513898
+ 43.75 13.319033 35.736244 0.015508813
+ 43.75 13.399179 35.740676 0.015498396
+ 43.75 13.524629 35.74802 0.015477438
+ 43.75 13.631528 35.750133 0.015448482
+ 43.75 13.75559 35.756896 0.015406227
+ 43.75 13.925132 35.76608 0.015348372
+ 43.75 14.14203 35.77334 0.01527763
+ 43.75 14.491062 35.776325 0.015187536
+ 43.75 15.047352 35.780075 0.015098703
+ 43.75 15.822498 35.774307 0.015061984
+ 43.75 16.452253 35.777484 0.015100987
+ 43.75 17.523182 35.77913 0.01510618
+ 43.75 18.090225 35.772354 0.014961035
+ 43.75 18.354425 35.769515 0.014680385
+ 43.75 18.44987 35.769474 0.014351806
+ 43.75 18.490063 35.767395 0.01404424
+ 43.75 18.496477 35.766796 0.013760942
+ 43.75 18.476326 35.766853 0.013481433
+ 43.75 18.494213 35.76925 0.013194006
+ 43.75 18.422876 35.767543 0.012780487
+ 43.8 2.525447 34.895675 0.0E+0
+ 43.8 2.5235784 34.90163 1.7405615E-5
+ 43.8 2.5332252 34.908107 -4.917209E-5
+ 43.8 2.547907 34.91538 -1.9201287E-5
+ 43.8 2.5854682 34.918487 1.1410737E-4
+ 43.8 2.6600782 34.92709 3.8103133E-4
+ 43.8 2.7768127 34.940494 7.8414753E-4
+ 43.8 2.9516706 34.950397 1.3323193E-3
+ 43.8 3.1572861 34.95859 2.0592953E-3
+ 43.8 3.353521 34.956535 2.957408E-3
+ 43.8 3.5222713 34.95093 3.8825215E-3
+ 43.8 3.7310712 34.951522 4.879515E-3
+ 43.8 4.174312 34.998004 6.04474E-3
+ 43.8 4.9568667 35.100975 7.1606785E-3
+ 43.8 6.343824 35.304874 8.275911E-3
+ 43.8 8.159476 35.57958 9.3977674E-3
+ 43.8 8.9812355 35.624816 0.0103768
+ 43.8 9.670488 35.624046 0.011366791
+ 43.8 9.993046 35.537227 0.012316472
+ 43.8 10.353892 35.482872 0.013096128
+ 43.8 10.793886 35.493415 0.013639832
+ 43.8 11.210991 35.52946 0.013979164
+ 43.8 11.500829 35.557746 0.014194626
+ 43.8 11.719003 35.580307 0.014325112
+ 43.8 11.90416 35.602016 0.014416339
+ 43.8 12.044776 35.616844 0.014502738
+ 43.8 12.157828 35.629783 0.01458381
+ 43.8 12.259081 35.640293 0.014643644
+ 43.8 12.359455 35.65101 0.014688075
+ 43.8 12.440815 35.65949 0.014719827
+ 43.8 12.511615 35.666782 0.014749677
+ 43.8 12.571559 35.6717 0.014780591
+ 43.8 12.614521 35.675174 0.014808755
+ 43.8 12.666903 35.680416 0.014839416
+ 43.8 12.716921 35.686317 0.014871121
+ 43.8 12.769101 35.69156 0.01489849
+ 43.8 12.815298 35.696235 0.014921749
+ 43.8 12.859247 35.70094 0.014943435
+ 43.8 12.89964 35.70483 0.014964998
+ 43.8 12.941224 35.7081 0.014982264
+ 43.8 12.99217 35.711513 0.01499158
+ 43.8 13.036067 35.716434 0.014996187
+ 43.8 13.112521 35.724384 0.015002039
+ 43.8 13.164709 35.72751 0.015009712
+ 43.8 13.211929 35.728992 0.015015394
+ 43.8 13.255326 35.73233 0.015016321
+ 43.8 13.316172 35.73575 0.015010703
+ 43.8 13.395251 35.740016 0.014999717
+ 43.8 13.51873 35.747356 0.014977869
+ 43.8 13.624974 35.749252 0.014947802
+ 43.8 13.746345 35.756126 0.014904439
+ 43.8 13.913798 35.764823 0.014845442
+ 43.8 14.128741 35.772182 0.014774057
+ 43.8 14.475895 35.775112 0.01468311
+ 43.8 15.033288 35.77841 0.014595335
+ 43.8 15.813845 35.77146 0.014563311
+ 43.8 16.44826 35.773822 0.014612368
+ 43.8 17.505875 35.775524 0.014625126
+ 43.8 18.057459 35.768787 0.014480586
+ 43.8 18.31323 35.76627 0.014201601
+ 43.8 18.40888 35.76596 0.013876962
+ 43.8 18.450567 35.763317 0.013574099
+ 43.8 18.457851 35.762535 0.013295626
+ 43.8 18.437649 35.762802 0.013021434
+ 43.8 18.454996 35.765274 0.012739609
+ 43.8 18.386963 35.76369 0.012334717
+ 43.85 2.5247116 34.895503 0.0E+0
+ 43.85 2.523503 34.901683 1.0931771E-5
+ 43.85 2.5336937 34.908176 -6.541404E-5
+ 43.85 2.5484845 34.915405 -3.5480417E-5
+ 43.85 2.586043 34.918457 1.009204E-4
+ 43.85 2.6615822 34.927085 3.701375E-4
+ 43.85 2.778944 34.940494 7.7322113E-4
+ 43.85 2.9541275 34.95034 1.3153389E-3
+ 43.85 3.1598443 34.958423 2.0314482E-3
+ 43.85 3.353753 34.955955 2.912532E-3
+ 43.85 3.5190455 34.949932 3.8125396E-3
+ 43.85 3.7236738 34.94976 4.780647E-3
+ 43.85 4.1611213 34.995246 5.920791E-3
+ 43.85 4.939974 35.097595 7.009541E-3
+ 43.85 6.3141722 35.29871 8.102788E-3
+ 43.85 8.122866 35.571304 9.207881E-3
+ 43.85 8.963374 35.620117 0.010142131
+ 43.85 9.664139 35.621414 0.011069032
+ 43.85 9.99199 35.535865 0.01196055
+ 43.85 10.354764 35.482002 0.012691412
+ 43.85 10.79446 35.49288 0.013199558
+ 43.85 11.211998 35.529132 0.013514022
+ 43.85 11.502286 35.557697 0.013712515
+ 43.85 11.721143 35.580455 0.013830538
+ 43.85 11.905227 35.601955 0.013912156
+ 43.85 12.046934 35.616847 0.013992117
+ 43.85 12.160057 35.629867 0.014069263
+ 43.85 12.260828 35.64031 0.014126842
+ 43.85 12.361181 35.651077 0.01416965
+ 43.85 12.442263 35.65957 0.014199951
+ 43.85 12.512983 35.66671 0.014228822
+ 43.85 12.572271 35.671466 0.014259
+ 43.85 12.615161 35.674903 0.014286498
+ 43.85 12.668819 35.680316 0.014316735
+ 43.85 12.718216 35.686073 0.014348074
+ 43.85 12.770042 35.691287 0.014374904
+ 43.85 12.816091 35.695964 0.014397384
+ 43.85 12.860397 35.70073 0.01441824
+ 43.85 12.900687 35.704574 0.014439074
+ 43.85 12.941264 35.707767 0.0144556
+ 43.85 12.991082 35.711093 0.014463949
+ 43.85 13.034627 35.715965 0.014467486
+ 43.85 13.111039 35.723777 0.014472525
+ 43.85 13.163803 35.727062 0.014479476
+ 43.85 13.210774 35.72858 0.014484327
+ 43.85 13.25333 35.731872 0.01448459
+ 43.85 13.313362 35.73529 0.014478385
+ 43.85 13.391385 35.739387 0.014466804
+ 43.85 13.51277 35.746723 0.014444106
+ 43.85 13.618353 35.74838 0.014413019
+ 43.85 13.736962 35.75536 0.0143687
+ 43.85 13.902281 35.763545 0.014308773
+ 43.85 14.1154 35.771022 0.014236976
+ 43.85 14.460559 35.77389 0.014145501
+ 43.85 15.01948 35.776721 0.014058983
+ 43.85 15.805611 35.76857 0.01403143
+ 43.85 16.445478 35.770103 0.014089737
+ 43.85 17.488459 35.77186 0.01410961
+ 43.85 18.024525 35.765155 0.01396633
+ 43.85 18.272184 35.762985 0.013690148
+ 43.85 18.368168 35.762405 0.013370489
+ 43.85 18.411255 35.75918 0.013073101
+ 43.85 18.419434 35.7582 0.01280009
+ 43.85 18.399256 35.75869 0.012531814
+ 43.85 18.415998 35.761215 0.012256217
+ 43.85 18.351337 35.75977 0.011860813
+ 43.9 2.5239582 34.895332 0.0E+0
+ 43.9 2.5234186 34.901744 4.8922274E-6
+ 43.9 2.5341444 34.90824 -8.029919E-5
+ 43.9 2.5490665 34.915435 -5.0524235E-5
+ 43.9 2.5866131 34.918422 8.8221095E-5
+ 43.9 2.6630847 34.92708 3.5855124E-4
+ 43.9 2.7810542 34.940494 7.6003675E-4
+ 43.9 2.9565432 34.95028 1.2943689E-3
+ 43.9 3.1623435 34.958255 1.9975157E-3
+ 43.9 3.3539364 34.955383 2.8591237E-3
+ 43.9 3.5157933 34.948947 3.7318223E-3
+ 43.9 3.716228 34.948013 4.6685375E-3
+ 43.9 4.147732 34.992477 5.7802107E-3
+ 43.9 4.9227623 35.0942 6.8390252E-3
+ 43.9 6.2835965 35.29241 7.9081915E-3
+ 43.9 8.084437 35.56271 8.9958785E-3
+ 43.9 8.945191 35.61542 9.886207E-3
+ 43.9 9.657382 35.618762 0.010750169
+ 43.9 9.990612 35.53451 0.011583004
+ 43.9 10.355244 35.48111 0.012264368
+ 43.9 10.794644 35.492305 0.012736447
+ 43.9 11.212707 35.528774 0.013025579
+ 43.9 11.503538 35.557636 0.013206589
+ 43.9 11.72308 35.580593 0.013311782
+ 43.9 11.906039 35.601867 0.013383472
+ 43.9 12.048887 35.616832 0.01345658
+ 43.9 12.162146 35.629936 0.013529318
+ 43.9 12.262466 35.64031 0.013584225
+ 43.9 12.362835 35.65115 0.013625084
+ 43.9 12.443669 35.659652 0.013653688
+ 43.9 12.514322 35.66664 0.013681344
+ 43.9 12.572951 35.671237 0.01371055
+ 43.9 12.615795 35.67464 0.013737162
+ 43.9 12.67074 35.680225 0.013766736
+ 43.9 12.719458 35.68583 0.013797464
+ 43.9 12.770919 35.691013 0.013823548
+ 43.9 12.816791 35.69569 0.013845082
+ 43.9 12.861495 35.700523 0.01386496
+ 43.9 12.901683 35.704322 0.013884914
+ 43.9 12.941282 35.707454 0.013900567
+ 43.9 12.98993 35.71069 0.013907869
+ 43.9 13.033158 35.715515 0.013910283
+ 43.9 13.109541 35.723182 0.013914437
+ 43.9 13.162883 35.72664 0.013920584
+ 43.9 13.209631 35.728202 0.013924539
+ 43.9 13.251398 35.731445 0.013924084
+ 43.9 13.310597 35.734867 0.013917262
+ 43.9 13.387579 35.738792 0.013905084
+ 43.9 13.506762 35.74611 0.0138816
+ 43.9 13.611679 35.747516 0.01384961
+ 43.9 13.727472 35.754592 0.013804511
+ 43.9 13.890622 35.762256 0.01374389
+ 43.9 14.102052 35.769863 0.013671933
+ 43.9 14.445113 35.77267 0.013580276
+ 43.9 15.005955 35.775005 0.013495222
+ 43.9 15.79779 35.76564 0.013471895
+ 43.9 16.443846 35.766353 0.013538575
+ 43.9 17.471008 35.768146 0.013565047
+ 43.9 17.991566 35.761482 0.013423658
+ 43.9 18.231441 35.759685 0.013151382
+ 43.9 18.327856 35.75882 0.012837714
+ 43.9 18.372246 35.75499 0.012546566
+ 43.9 18.381336 35.753814 0.012279656
+ 43.9 18.361256 35.754535 0.012017889
+ 43.9 18.377338 35.757087 0.011749136
+ 43.9 18.316101 35.755794 0.011364064
+ 43.95 2.523192 34.895156 0.0E+0
+ 43.95 2.5233273 34.901813 -6.78994E-7
+ 43.95 2.5345764 34.90831 -9.3716545E-5
+ 43.95 2.549651 34.915462 -6.422301E-5
+ 43.95 2.5871772 34.918384 7.608943E-5
+ 43.95 2.6645798 34.92707 3.4631293E-4
+ 43.95 2.7831368 34.940494 7.4460654E-4
+ 43.95 2.958911 34.950222 1.2694308E-3
+ 43.95 3.1647777 34.958087 1.9575506E-3
+ 43.95 3.354074 34.95482 2.7973195E-3
+ 43.95 3.5125315 34.947982 3.6406873E-3
+ 43.95 3.70877 34.94629 4.543762E-3
+ 43.95 4.134213 34.989715 5.6237955E-3
+ 43.95 4.905324 35.09081 6.650131E-3
+ 43.95 6.252275 35.28601 7.6931933E-3
+ 43.95 8.044455 35.55385 8.762734E-3
+ 43.95 8.926777 35.610755 9.6102114E-3
+ 43.95 9.650271 35.61611 0.010411879
+ 43.95 9.988941 35.53316 0.011186043
+ 43.95 10.355354 35.480197 0.011817719
+ 43.95 10.794458 35.4917 0.012253612
+ 43.95 11.213127 35.528392 0.012517275
+ 43.95 11.504586 35.557567 0.012680561
+ 43.95 11.724807 35.58072 0.012772781
+ 43.95 11.906596 35.601753 0.012834415
+ 43.95 12.050626 35.6168 0.012900396
+ 43.95 12.164079 35.629993 0.012968354
+ 43.95 12.263984 35.640293 0.013020252
+ 43.95 12.364404 35.651214 0.013058898
+ 43.95 12.445021 35.659736 0.013085612
+ 43.95 12.51562 35.666572 0.013111858
+ 43.95 12.57359 35.671012 0.013139896
+ 43.95 12.61641 35.67439 0.013165435
+ 43.95 12.672648 35.68014 0.013194137
+ 43.95 12.720633 35.68558 0.013224041
+ 43.95 12.77172 35.69074 0.013249201
+ 43.95 12.817391 35.695415 0.013269652
+ 43.95 12.862532 35.70033 0.013288431
+ 43.95 12.902617 35.70408 0.01330738
+ 43.95 12.941265 35.707157 0.013322058
+ 43.95 12.988712 35.710304 0.013328261
+ 43.95 13.031656 35.715087 0.013329529
+ 43.95 13.108022 35.722606 0.013332751
+ 43.95 13.161942 35.726234 0.013338036
+ 43.95 13.208491 35.727848 0.013341057
+ 43.95 13.249521 35.73105 0.013339854
+ 43.95 13.307873 35.734477 0.013332407
+ 43.95 13.383835 35.738227 0.01331965
+ 43.95 13.50072 35.74552 0.01329547
+ 43.95 13.604972 35.74667 0.013262716
+ 43.95 13.717911 35.753833 0.013217034
+ 43.95 13.878868 35.760955 0.01315598
+ 43.95 14.088745 35.768707 0.013084133
+ 43.95 14.42962 35.771453 0.01299266
+ 43.95 14.992742 35.773277 0.012909284
+ 43.95 15.790375 35.762687 0.012889917
+ 43.95 16.443289 35.76258 0.012964032
+ 43.95 17.4536 35.76441 0.012996529
+ 43.95 17.95873 35.75778 0.012857631
+ 43.95 18.191156 35.756374 0.012590326
+ 43.95 18.288078 35.755222 0.012283632
+ 43.95 18.33366 35.750774 0.011999481
+ 43.95 18.34368 35.74939 0.011739304
+ 43.95 18.323763 35.75035 0.011484631
+ 43.95 18.339136 35.75291 0.011223326
+ 43.95 18.281355 35.75178 0.010849407
+ 44.0 2.5224184 34.894977 0.0E+0
+ 44.0 2.5232305 34.901885 -5.7522356E-6
+ 44.0 2.53499 34.908374 -1.0556877E-4
+ 44.0 2.550235 34.91549 -7.64797E-5
+ 44.0 2.5877332 34.918346 6.459857E-5
+ 44.0 2.6660614 34.92706 3.334646E-4
+ 44.0 2.7851846 34.94049 7.269535E-4
+ 44.0 2.9612243 34.950164 1.2405638E-3
+ 44.0 3.1671416 34.95792 1.9116307E-3
+ 44.0 3.354169 34.954265 2.727289E-3
+ 44.0 3.509276 34.947036 3.5394846E-3
+ 44.0 3.7013375 34.944595 4.4069266E-3
+ 44.0 4.120638 34.98697 5.4523744E-3
+ 44.0 4.887753 35.087425 6.443885E-3
+ 44.0 6.220396 35.27955 7.4588614E-3
+ 44.0 8.003198 35.54478 8.509335E-3
+ 44.0 8.908226 35.606132 9.315153E-3
+ 44.0 9.642862 35.61347 0.01005562
+ 44.0 9.987006 35.531833 0.010771626
+ 44.0 10.355119 35.47927 0.011353903
+ 44.0 10.793927 35.491062 0.011753864
+ 44.0 11.213272 35.52799 0.011992234
+ 44.0 11.505432 35.557487 0.012137819
+ 44.0 11.726323 35.580837 0.012217134
+ 44.0 11.906904 35.60162 0.012268759
+ 44.0 12.052147 35.61674 0.012327482
+ 44.0 12.165848 35.630035 0.012390392
+ 44.0 12.265375 35.64027 0.012439022
+ 44.0 12.365878 35.651283 0.012475252
+ 44.0 12.446308 35.65983 0.012499932
+ 44.0 12.516865 35.666507 0.012524619
+ 44.0 12.574181 35.670795 0.012551324
+ 44.0 12.616998 35.674144 0.01257564
+ 44.0 12.674526 35.68006 0.01260329
+ 44.0 12.721731 35.685333 0.012632185
+ 44.0 12.772437 35.690464 0.012656273
+ 44.0 12.817886 35.695144 0.012675535
+ 44.0 12.863497 35.700134 0.012693121
+ 44.0 12.903478 35.703842 0.01271097
+ 44.0 12.941207 35.70687 0.012724594
+ 44.0 12.987428 35.709934 0.012729673
+ 44.0 13.03012 35.714683 0.012729798
+ 44.0 13.106481 35.72205 0.012732068
+ 44.0 13.160973 35.72585 0.012736459
+ 44.0 13.207348 35.727523 0.012738531
+ 44.0 13.247692 35.730682 0.012736573
+ 44.0 13.30519 35.73412 0.012728516
+ 44.0 13.380154 35.737693 0.012715221
+ 44.0 13.494666 35.744956 0.012690455
+ 44.0 13.598254 35.745834 0.012657098
+ 44.0 13.708318 35.753086 0.012611052
+ 44.0 13.867068 35.75965 0.012549844
+ 44.0 14.075528 35.767562 0.012478395
+ 44.0 14.414145 35.770244 0.012387488
+ 44.0 14.97987 35.771545 0.012306007
+ 44.0 15.783361 35.759727 0.01229032
+ 44.0 16.443726 35.75881 0.012370878
+ 44.0 17.436312 35.760662 0.012408775
+ 44.0 17.92617 35.754062 0.012272939
+ 44.0 18.151482 35.75307 0.012011621
+ 44.0 18.24896 35.75162 0.011712851
+ 44.0 18.29563 35.746547 0.01143644
+ 44.0 18.306583 35.744953 0.011183624
+ 44.0 18.286896 35.74616 0.01093662
+ 44.0 18.301521 35.748706 0.01068335
+ 44.0 18.247204 35.74775 0.010321382
+ 44.05 2.5216424 34.8948 0.0E+0
+ 44.05 2.52313 34.901962 -1.0302501E-5
+ 44.05 2.5353851 34.90844 -1.1577324E-4
+ 44.05 2.550816 34.915512 -8.721107E-5
+ 44.05 2.5882787 34.91831 5.381399E-5
+ 44.05 2.6675236 34.92705 3.200492E-4
+ 44.05 2.787191 34.94049 7.071111E-4
+ 44.05 2.963477 34.95011 1.2078254E-3
+ 44.05 3.1694304 34.957756 1.8598597E-3
+ 44.05 3.354225 34.953727 2.649232E-3
+ 44.05 3.506044 34.946117 3.4285932E-3
+ 44.05 3.6939675 34.942935 4.2586605E-3
+ 44.05 4.10708 34.98425 5.266802E-3
+ 44.05 4.8701467 35.084075 6.221329E-3
+ 44.05 6.1881585 35.273056 7.2062523E-3
+ 44.05 7.9609646 35.535564 8.236476E-3
+ 44.05 8.889638 35.60157 9.001868E-3
+ 44.05 9.635217 35.610843 9.682631E-3
+ 44.05 9.984842 35.53053 0.010341456
+ 44.05 10.354565 35.47834 0.010875072
+ 44.05 10.793077 35.490402 0.011239699
+ 44.05 11.213156 35.52757 0.011453243
+ 44.05 11.506082 35.557395 0.011581395
+ 44.05 11.727627 35.580947 0.011648075
+ 44.05 11.90697 35.601467 0.011689907
+ 44.05 12.053448 35.616664 0.01174137
+ 44.05 12.167445 35.630062 0.011799068
+ 44.05 12.266633 35.640235 0.011844245
+ 44.05 12.367251 35.651344 0.011877912
+ 44.05 12.447522 35.659923 0.011900467
+ 44.05 12.518049 35.666446 0.01192348
+ 44.05 12.574716 35.67058 0.011948726
+ 44.05 12.617551 35.67391 0.011971698
+ 44.05 12.676359 35.679992 0.011998148
+ 44.05 12.722745 35.685085 0.012025878
+ 44.05 12.773066 35.69019 0.012048773
+ 44.05 12.818274 35.69487 0.012066766
+ 44.05 12.864384 35.69995 0.012083096
+ 44.05 12.90426 35.703613 0.012099771
+ 44.05 12.941103 35.706604 0.01211229
+ 44.05 12.98608 35.70958 0.012116246
+ 44.05 13.02855 35.7143 0.012115259
+ 44.05 13.104917 35.721508 0.012116581
+ 44.05 13.159975 35.725486 0.012120068
+ 44.05 13.206199 35.727226 0.012121199
+ 44.05 13.245907 35.730346 0.0121185
+ 44.05 13.302549 35.73379 0.012109867
+ 44.05 13.376541 35.73719 0.012096095
+ 44.05 13.48862 35.744415 0.012070873
+ 44.05 13.591552 35.745018 0.012037095
+ 44.05 13.698734 35.752342 0.01199092
+ 44.05 13.855277 35.75835 0.011929855
+ 44.05 14.062455 35.76643 0.011859106
+ 44.05 14.398758 35.76905 0.011769161
+ 44.05 14.967368 35.769817 0.011689797
+ 44.05 15.77674 35.75677 0.011677496
+ 44.05 16.44507 35.75505 0.011763459
+ 44.05 17.419222 35.756923 0.011806088
+ 44.05 17.894028 35.75035 0.011673852
+ 44.05 18.112564 35.749786 0.011419492
+ 44.05 18.21064 35.748046 0.01112956
+ 44.05 18.258284 35.742336 0.010861617
+ 44.05 18.270176 35.740524 0.010616778
+ 44.05 18.25077 35.741977 0.010378003
+ 44.05 18.264614 35.744495 0.010133339
+ 44.05 18.213755 35.74372 9.784093E-3
+ 44.1 2.520869 34.894622 0.0E+0
+ 44.1 2.523027 34.902046 -1.4309709E-5
+ 44.1 2.5357613 34.9085 -1.2426294E-4
+ 44.1 2.5513913 34.915534 -9.634862E-5
+ 44.1 2.588812 34.91827 4.3792686E-5
+ 44.1 2.6689603 34.92704 3.061103E-4
+ 44.1 2.7891485 34.940486 6.851229E-4
+ 44.1 2.9656624 34.950057 1.1712901E-3
+ 44.1 3.171639 34.957595 1.8023655E-3
+ 44.1 3.3542454 34.953205 2.563378E-3
+ 44.1 3.5028514 34.94523 3.3084182E-3
+ 44.1 3.6866972 34.941322 4.099612E-3
+ 44.1 4.093613 34.981575 5.067947E-3
+ 44.1 4.852605 35.080772 5.9835114E-3
+ 44.1 6.155768 35.26657 6.9364043E-3
+ 44.1 7.918068 35.526264 7.944871E-3
+ 44.1 8.871115 35.59709 8.671031E-3
+ 44.1 9.627397 35.608253 9.293947E-3
+ 44.1 9.982482 35.529254 9.896984E-3
+ 44.1 10.353724 35.47741 0.010383087
+ 44.1 10.79194 35.489723 0.010713291
+ 44.1 11.2128 35.52713 0.010902745
+ 44.1 11.506545 35.5573 0.011013963
+ 44.1 11.728725 35.581047 0.01106846
+ 44.1 11.90681 35.601295 0.011100871
+ 44.1 12.054533 35.616573 0.011145195
+ 44.1 12.168868 35.63008 0.011197612
+ 44.1 12.267756 35.64019 0.011239221
+ 44.1 12.368518 35.651405 0.011270234
+ 44.1 12.448657 35.660015 0.011290616
+ 44.1 12.519166 35.666385 0.011311884
+ 44.1 12.575193 35.670375 0.011335574
+ 44.1 12.618064 35.673686 0.011357113
+ 44.1 12.678134 35.679927 0.011382244
+ 44.1 12.72367 35.684833 0.011408679
+ 44.1 12.773605 35.689914 0.011430288
+ 44.1 12.818555 35.6946 0.011446959
+ 44.1 12.865187 35.69977 0.011461993
+ 44.1 12.904959 35.703392 0.011477448
+ 44.1 12.94095 35.70635 0.011488832
+ 44.1 12.984674 35.709243 0.01149169
+ 44.1 13.02695 35.713932 0.011489646
+ 44.1 13.103334 35.72099 0.011490047
+ 44.1 13.158948 35.72514 0.011492639
+ 44.1 13.205042 35.726955 0.01149286
+ 44.1 13.244165 35.730033 0.011489455
+ 44.1 13.299952 35.733493 0.011480301
+ 44.1 13.373001 35.736713 0.011466129
+ 44.1 13.482609 35.7439 0.011440599
+ 44.1 13.584893 35.74422 0.0114066
+ 44.1 13.689206 35.751613 0.011360545
+ 44.1 13.84355 35.757057 0.011299935
+ 44.1 14.049577 35.76532 0.011230199
+ 44.1 14.383529 35.767875 0.011141622
+ 44.1 14.955266 35.768096 0.011064601
+ 44.1 15.770506 35.753833 0.011055381
+ 44.1 16.447227 35.751327 0.01114568
+ 44.1 17.402405 35.753215 0.011192332
+ 44.1 17.862452 35.746665 0.011064202
+ 44.1 18.074556 35.746536 0.01081772
+ 44.1 18.173244 35.744503 0.010537499
+ 44.1 18.221752 35.738155 0.010278733
+ 44.1 18.23458 35.736125 0.010042476
+ 44.1 18.21551 35.73783 9.812475E-3
+ 44.1 18.228548 35.7403 9.576969E-3
+ 44.1 18.18112 35.739715 9.241184E-3
+ 44.15 2.5201034 34.894447 0.0E+0
+ 44.15 2.522923 34.90213 -1.7758903E-5
+ 44.15 2.5361187 34.908565 -1.3098717E-4
+ 44.15 2.5519578 34.915557 -1.0383941E-4
+ 44.15 2.5893313 34.918231 3.4582477E-5
+ 44.15 2.6703653 34.927032 2.9169142E-4
+ 44.15 2.7910511 34.940483 6.610426E-4
+ 44.15 2.9677746 34.950004 1.1310497E-3
+ 44.15 3.1737623 34.957435 1.7393001E-3
+ 44.15 3.3542344 34.9527 2.469984E-3
+ 44.15 3.4997155 34.94437 3.179387E-3
+ 44.15 3.6795628 34.939754 3.930442E-3
+ 44.15 4.0803127 34.978954 4.8566865E-3
+ 44.15 4.835229 35.07753 5.7314792E-3
+ 44.15 6.1234335 35.260135 6.6503356E-3
+ 44.15 7.8748302 35.51694 7.6351594E-3
+ 44.15 8.852759 35.592716 8.323181E-3
+ 44.15 9.619466 35.605712 8.89041E-3
+ 44.15 9.979962 35.52802 9.439426E-3
+ 44.15 10.352629 35.476486 9.879528E-3
+ 44.15 10.790549 35.489032 0.010176506
+ 44.15 11.212226 35.526687 0.010342845
+ 44.15 11.506833 35.557193 0.010437833
+ 44.15 11.729623 35.581134 0.010480769
+ 44.15 11.906438 35.601104 0.01050427
+ 44.15 12.055409 35.616466 0.01054169
+ 44.15 12.170119 35.63008 0.010588845
+ 44.15 12.268746 35.640136 0.010626838
+ 44.15 12.369676 35.65146 0.010655156
+ 44.15 12.449709 35.66011 0.010673361
+ 44.15 12.520212 35.66633 0.010692843
+ 44.15 12.57561 35.670177 0.010714913
+ 44.15 12.618531 35.673473 0.010734959
+ 44.15 12.679841 35.67987 0.010758677
+ 44.15 12.724503 35.68459 0.010783715
+ 44.15 12.774052 35.689647 0.01080397
+ 44.15 12.818732 35.694332 0.010819292
+ 44.15 12.865906 35.699604 0.010833013
+ 44.15 12.905573 35.703182 0.010847222
+ 44.15 12.940748 35.706111 0.010857466
+ 44.15 12.983218 35.708923 0.010859274
+ 44.15 13.025326 35.713592 0.010856249
+ 44.15 13.101737 35.72049 0.010855774
+ 44.15 13.157895 35.724815 0.010857504
+ 44.15 13.203879 35.72671 0.010856865
+ 44.15 13.242464 35.72975 0.010852805
+ 44.15 13.297405 35.733226 0.010843202
+ 44.15 13.369545 35.73627 0.010828725
+ 44.15 13.476658 35.743412 0.010803051
+ 44.15 13.578307 35.743442 0.010769044
+ 44.15 13.67978 35.7509 0.010723372
+ 44.15 13.831948 35.755783 0.010663539
+ 44.15 14.036952 35.76423 0.010595139
+ 44.15 14.368533 35.766723 0.010508343
+ 44.15 14.943592 35.766403 0.01043389
+ 44.15 15.76465 35.75093 0.010427441
+ 44.15 16.450102 35.74766 0.01052098
+ 44.15 17.38594 35.749553 0.01057092
+ 44.15 17.831581 35.743022 0.010447368
+ 44.15 18.0376 35.74334 0.010209632
+ 44.15 18.136906 35.741012 9.939953E-3
+ 44.15 18.186169 35.73403 9.691051E-3
+ 44.15 18.199923 35.731784 9.463964E-3
+ 44.15 18.181232 35.73374 9.243265E-3
+ 44.15 18.193447 35.73614 9.017444E-3
+ 44.15 18.149405 35.735752 8.69583E-3
+ 44.2 2.5193505 34.89427 0.0E+0
+ 44.2 2.5228192 34.902217 -2.0640398E-5
+ 44.2 2.5364573 34.908626 -1.3591223E-4
+ 44.2 2.5525131 34.915576 -1.0964663E-4
+ 44.2 2.5898342 34.918193 2.6221425E-5
+ 44.2 2.671733 34.927017 2.768356E-4
+ 44.2 2.7928917 34.940475 6.34933E-4
+ 44.2 2.9698076 34.94996 1.0872124E-3
+ 44.2 3.1757957 34.957283 1.6708387E-3
+ 44.2 3.3541958 34.952213 2.3693342E-3
+ 44.2 3.496652 34.943546 3.0419465E-3
+ 44.2 3.6726005 34.938243 3.7518176E-3
+ 44.2 4.0672535 34.976402 4.6338993E-3
+ 44.2 4.8181204 35.074367 5.4662683E-3
+ 44.2 6.091371 35.253787 6.349039E-3
+ 44.2 7.831582 35.507663 7.3079266E-3
+ 44.2 8.83468 35.588455 7.95874E-3
+ 44.2 9.611493 35.60323 8.472699E-3
+ 44.2 9.97732 35.52682 8.969779E-3
+ 44.2 10.351313 35.475574 9.365715E-3
+ 44.2 10.788939 35.48834 9.630909E-3
+ 44.2 11.211458 35.526233 9.77532E-3
+ 44.2 11.506959 35.557083 9.854968E-3
+ 44.2 11.730333 35.581214 9.887112E-3
+ 44.2 11.905876 35.600906 9.90234E-3
+ 44.2 12.056086 35.61634 9.9331894E-3
+ 44.2 12.1712 35.630073 9.975181E-3
+ 44.2 12.269604 35.64007 0.01000957
+ 44.2 12.370724 35.651512 0.010035198
+ 44.2 12.450675 35.660205 0.01005126
+ 44.2 12.521181 35.666275 0.010068951
+ 44.2 12.575966 35.669982 0.010089363
+ 44.2 12.618951 35.673274 0.010107883
+ 44.2 12.681472 35.679817 0.01013012
+ 44.2 12.725243 35.684345 0.010153684
+ 44.2 12.77441 35.689384 0.01017254
+ 44.2 12.818812 35.694072 0.010186507
+ 44.2 12.866539 35.69944 0.010198921
+ 44.2 12.906102 35.702976 0.01021188
+ 44.2 12.940498 35.705886 0.010220997
+ 44.2 12.981723 35.708621 0.010221823
+ 44.2 13.023687 35.71327 0.010217912
+ 44.2 13.100134 35.720016 0.010216628
+ 44.2 13.15682 35.72451 0.010217543
+ 44.2 13.202712 35.726486 0.01021611
+ 44.2 13.240808 35.729492 0.010211465
+ 44.2 13.294915 35.732982 0.0102015
+ 44.2 13.366179 35.735855 0.010186828
+ 44.2 13.470797 35.742946 0.010161185
+ 44.2 13.571826 35.74269 0.010127395
+ 44.2 13.670506 35.750205 0.010082378
+ 44.2 13.820532 35.754528 0.010023652
+ 44.2 14.024633 35.76317 9.956917E-3
+ 44.2 14.353844 35.765602 9.872316E-3
+ 44.2 14.932376 35.764736 9.800659E-3
+ 44.2 15.759165 35.74808 9.796667E-3
+ 44.2 16.453587 35.744071 9.892337E-3
+ 44.2 17.369904 35.745956 9.944807E-3
+ 44.2 17.801561 35.739444 9.82627E-3
+ 44.2 18.001837 35.74021 9.598093E-3
+ 44.2 18.101753 35.737594 9.339745E-3
+ 44.2 18.151669 35.72998 9.101369E-3
+ 44.2 18.166332 35.727516 8.884021E-3
+ 44.2 18.148058 35.729724 8.673132E-3
+ 44.2 18.159445 35.73205 8.457502E-3
+ 44.2 18.11872 35.731857 8.150732E-3
+ 44.25 2.518615 34.894104 0.0E+0
+ 44.25 2.522717 34.902305 -2.2949911E-5
+ 44.25 2.5367767 34.908683 -1.3902172E-4
+ 44.25 2.553054 34.9156 -1.1375018E-4
+ 44.25 2.590319 34.918155 1.8737357E-5
+ 44.25 2.6730566 34.92701 2.615851E-4
+ 44.25 2.794664 34.94047 6.068663E-4
+ 44.25 2.9717552 34.94991 1.0399022E-3
+ 44.25 3.177735 34.957134 1.5971786E-3
+ 44.25 3.3541333 34.951747 2.2617373E-3
+ 44.25 3.4936761 34.942756 2.8965608E-3
+ 44.25 3.665845 34.93679 3.564408E-3
+ 44.25 4.0545096 34.97393 4.400456E-3
+ 44.25 4.8013806 35.071296 5.188899E-3
+ 44.25 6.0597953 35.247566 6.033486E-3
+ 44.25 7.788658 35.498497 6.963718E-3
+ 44.25 8.816979 35.584335 7.5780474E-3
+ 44.25 9.603544 35.600814 8.041354E-3
+ 44.25 9.974589 35.52567 8.488856E-3
+ 44.25 10.349814 35.47468 8.842732E-3
+ 44.25 10.787148 35.487644 9.077791E-3
+ 44.25 11.210523 35.52578 9.201642E-3
+ 44.25 11.506939 35.556972 9.266997E-3
+ 44.25 11.730866 35.581283 9.289246E-3
+ 44.25 11.905145 35.600692 9.296943E-3
+ 44.25 12.056578 35.616207 9.321644E-3
+ 44.25 12.172119 35.630054 9.3586444E-3
+ 44.25 12.270336 35.64 9.389495E-3
+ 44.25 12.371665 35.65156 9.412478E-3
+ 44.25 12.451555 35.660297 9.426468E-3
+ 44.25 12.522074 35.66622 9.442388E-3
+ 44.25 12.576264 35.6698 9.461133E-3
+ 44.25 12.619323 35.673084 9.478116E-3
+ 44.25 12.683017 35.67977 9.498828E-3
+ 44.25 12.725892 35.684104 9.52086E-3
+ 44.25 12.774684 35.689125 9.538295E-3
+ 44.25 12.8188 35.693817 9.5509234E-3
+ 44.25 12.867088 35.699287 9.562056E-3
+ 44.25 12.906547 35.70278 9.573779E-3
+ 44.25 12.940204 35.70568 9.5818E-3
+ 44.25 12.980199 35.70834 9.581727E-3
+ 44.25 13.022043 35.712966 9.577043E-3
+ 44.25 13.098533 35.719562 9.575031E-3
+ 44.25 13.155729 35.724227 9.575197E-3
+ 44.25 13.201546 35.726284 9.573052E-3
+ 44.25 13.239198 35.729255 9.567905E-3
+ 44.25 13.292489 35.732765 9.557678E-3
+ 44.25 13.362916 35.73547 9.54293E-3
+ 44.25 13.465056 35.742504 9.517507E-3
+ 44.25 13.565485 35.741962 9.484168E-3
+ 44.25 13.661433 35.74953 9.440083E-3
+ 44.25 13.809365 35.7533 9.3828E-3
+ 44.25 14.012678 35.76214 9.318058E-3
+ 44.25 14.339535 35.76451 9.236071E-3
+ 44.25 14.921646 35.76311 9.167432E-3
+ 44.25 15.754045 35.745296 9.165583E-3
+ 44.25 16.45758 35.740573 9.262272E-3
+ 44.25 17.354368 35.74245 9.3165E-3
+ 44.25 17.772524 35.735946 9.203381E-3
+ 44.25 17.967403 35.737163 8.985524E-3
+ 44.25 18.067917 35.73427 8.739248E-3
+ 44.25 18.11838 35.72603 8.512033E-3
+ 44.25 18.133936 35.723346 8.304974E-3
+ 44.25 18.116106 35.725807 8.104379E-3
+ 44.25 18.126661 35.728042 7.899422E-3
+ 44.25 18.089174 35.728046 7.6081324E-3
+ 44.3 2.5179011 34.893936 0.0E+0
+ 44.3 2.522617 34.902393 -2.4688585E-5
+ 44.3 2.537077 34.908737 -1.4031684E-4
+ 44.3 2.553578 34.915615 -1.1614685E-4
+ 44.3 2.5907835 34.918117 1.2147534E-5
+ 44.3 2.674331 34.926994 2.459809E-4
+ 44.3 2.7963607 34.940467 5.769232E-4
+ 44.3 2.9736118 34.949863 9.892588E-4
+ 44.3 3.1795756 34.956993 1.5185386E-3
+ 44.3 3.3540513 34.951305 2.1475253E-3
+ 44.3 3.4908041 34.942005 2.7437068E-3
+ 44.3 3.6593306 34.935405 3.36888E-3
+ 44.3 4.0421533 34.971546 4.157217E-3
+ 44.3 4.7851104 35.068336 4.9003716E-3
+ 44.3 6.028923 35.24151 5.7046264E-3
+ 44.3 7.7463965 35.48951 6.6030626E-3
+ 44.3 8.799767 35.58037 7.1813953E-3
+ 44.3 9.595688 35.598487 7.5968182E-3
+ 44.3 9.97181 35.52457 7.997313E-3
+ 44.3 10.348169 35.473812 8.311455E-3
+ 44.3 10.785216 35.486957 8.518199E-3
+ 44.3 11.20945 35.525325 8.623004E-3
+ 44.3 11.506789 35.556854 8.675243E-3
+ 44.3 11.731239 35.581344 8.688599E-3
+ 44.3 11.904271 35.600475 8.689597E-3
+ 44.3 12.056899 35.616065 8.708644E-3
+ 44.3 12.172884 35.630027 8.740887E-3
+ 44.3 12.270948 35.639923 8.768311E-3
+ 44.3 12.3725 35.651607 8.788733E-3
+ 44.3 12.45235 35.660392 8.800751E-3
+ 44.3 12.52289 35.666175 8.814948E-3
+ 44.3 12.576505 35.669624 8.832036E-3
+ 44.3 12.619648 35.672904 8.847496E-3
+ 44.3 12.684473 35.67973 8.8666575E-3
+ 44.3 12.726453 35.683872 8.887123E-3
+ 44.3 12.774878 35.688873 8.903132E-3
+ 44.3 12.818706 35.693572 8.914454E-3
+ 44.3 12.867557 35.69914 8.9243454E-3
+ 44.3 12.906913 35.7026 8.934864E-3
+ 44.3 12.939872 35.705482 8.941837E-3
+ 44.3 12.978661 35.708072 8.940964E-3
+ 44.3 13.020404 35.712684 8.935634E-3
+ 44.3 13.096944 35.71913 8.932987E-3
+ 44.3 13.15463 35.72396 8.932481E-3
+ 44.3 13.200387 35.726104 8.929719E-3
+ 44.3 13.237638 35.729045 8.924167E-3
+ 44.3 13.290137 35.732574 8.913788E-3
+ 44.3 13.359768 35.73511 8.899095E-3
+ 44.3 13.459467 35.742092 8.874085E-3
+ 44.3 13.559317 35.74127 8.841439E-3
+ 44.3 13.652614 35.74888 8.798565E-3
+ 44.3 13.798509 35.75211 8.743062E-3
+ 44.3 14.001142 35.76115 8.680644E-3
+ 44.3 14.325682 35.763465 8.601681E-3
+ 44.3 14.91143 35.761535 8.536282E-3
+ 44.3 15.749282 35.742595 8.536265E-3
+ 44.3 16.461977 35.737182 8.632865E-3
+ 44.3 17.339409 35.73905 8.6880754E-3
+ 44.3 17.744604 35.73255 8.580744E-3
+ 44.3 17.934435 35.734214 8.373911E-3
+ 44.3 18.035515 35.731044 8.140402E-3
+ 44.3 18.086433 35.7222 7.924954E-3
+ 44.3 18.102856 35.719303 7.7287075E-3
+ 44.3 18.085493 35.722007 7.538869E-3
+ 44.3 18.095224 35.724147 7.345039E-3
+ 44.3 18.060873 35.724346 7.0698293E-3
+ 44.35 2.517214 34.89378 0.0E+0
+ 44.35 2.5225207 34.90248 -2.586301E-5
+ 44.35 2.5373578 34.908794 -1.3981639E-4
+ 44.35 2.5540816 34.915634 -1.1685051E-4
+ 44.35 2.5912268 34.91808 6.4584332E-6
+ 44.35 2.67555 34.926986 2.3006236E-4
+ 44.35 2.7979762 34.940464 5.4519256E-4
+ 44.35 2.975372 34.94982 9.3543634E-4
+ 44.35 3.1813135 34.956855 1.4351578E-3
+ 44.35 3.3539535 34.950881 2.0270512E-3
+ 44.35 3.4880506 34.941295 2.5838736E-3
+ 44.35 3.6530897 34.93409 3.1658937E-3
+ 44.35 4.0302567 34.96927 3.9050278E-3
+ 44.35 4.7694087 35.0655 4.601659E-3
+ 44.35 5.9989666 35.235656 5.363389E-3
+ 44.35 7.7051315 35.480766 6.226495E-3
+ 44.35 8.783144 35.57658 6.769064E-3
+ 44.35 9.587991 35.596252 7.139469E-3
+ 44.35 9.969018 35.523525 7.4956854E-3
+ 44.35 10.346417 35.472972 7.772589E-3
+ 44.35 10.783181 35.486282 7.952967E-3
+ 44.35 11.208267 35.524883 8.040353E-3
+ 44.35 11.506528 35.55674 8.080756E-3
+ 44.35 11.731467 35.581394 8.086301E-3
+ 44.35 11.90328 35.60025 8.0815E-3
+ 44.35 12.057069 35.615913 8.09545E-3
+ 44.35 12.173507 35.629993 8.12322E-3
+ 44.35 12.271449 35.639842 8.14737E-3
+ 44.35 12.373235 35.65165 8.165344E-3
+ 44.35 12.453061 35.66048 8.175513E-3
+ 44.35 12.523629 35.666126 8.188057E-3
+ 44.35 12.576693 35.669456 8.2035195E-3
+ 44.35 12.619925 35.672737 8.217486E-3
+ 44.35 12.685834 35.67969 8.235091E-3
+ 44.35 12.72693 35.683647 8.253974E-3
+ 44.35 12.774999 35.688632 8.268569E-3
+ 44.35 12.81854 35.693336 8.278634E-3
+ 44.35 12.867949 35.699 8.287341E-3
+ 44.35 12.907204 35.702423 8.296699E-3
+ 44.35 12.939506 35.705303 8.302683E-3
+ 44.35 12.977124 35.70782 8.301122E-3
+ 44.35 13.018785 35.712425 8.295283E-3
+ 44.35 13.095379 35.718727 8.292108E-3
+ 44.35 13.153533 35.723712 8.291016E-3
+ 44.35 13.199244 35.725944 8.287744E-3
+ 44.35 13.236135 35.728855 8.281888E-3
+ 44.35 13.28787 35.732402 8.271479E-3
+ 44.35 13.356747 35.73478 8.2569764E-3
+ 44.35 13.454062 35.741703 8.23258E-3
+ 44.35 13.553357 35.740604 8.200869E-3
+ 44.35 13.644098 35.748252 8.159487E-3
+ 44.35 13.788028 35.75096 8.106096E-3
+ 44.35 13.99008 35.7602 8.046329E-3
+ 44.35 14.312359 35.76246 7.970795E-3
+ 44.35 14.901755 35.760013 7.908851E-3
+ 44.35 15.744869 35.739994 7.910361E-3
+ 44.35 16.46667 35.73393 8.005783E-3
+ 44.35 17.325092 35.735774 8.061203E-3
+ 44.35 17.717928 35.729282 7.959996E-3
+ 44.35 17.903053 35.731376 7.7648344E-3
+ 44.35 18.00467 35.727947 7.544741E-3
+ 44.35 18.055958 35.718505 7.3416316E-3
+ 44.35 18.073215 35.715404 7.156697E-3
+ 44.35 18.056334 35.718345 6.9780517E-3
+ 44.35 18.065256 35.720382 6.7957746E-3
+ 44.35 18.03392 35.720775 6.5372055E-3
+ 44.4 2.5165572 34.893623 0.0E+0
+ 44.4 2.5224285 34.90257 -2.6485168E-5
+ 44.4 2.537619 34.908843 -1.375567E-4
+ 44.4 2.5545628 34.91565 -1.1589198E-4
+ 44.4 2.591646 34.918045 1.6656719E-6
+ 44.4 2.6767082 34.926975 2.1386711E-4
+ 44.4 2.7995045 34.940456 5.1177095E-4
+ 44.4 2.9770305 34.949783 8.7860296E-4
+ 44.4 3.1829447 34.95673 1.3472945E-3
+ 44.4 3.353844 34.950485 1.9006897E-3
+ 44.4 3.4854295 34.94063 2.4175588E-3
+ 44.4 3.647154 34.93285 2.9560993E-3
+ 44.4 4.018888 34.967102 3.6447108E-3
+ 44.4 4.7543716 35.062797 4.2937053E-3
+ 44.4 5.970136 35.23004 5.010686E-3
+ 44.4 7.665194 35.47233 5.8345766E-3
+ 44.4 8.767216 35.572982 6.3413563E-3
+ 44.4 9.58052 35.594123 6.669658E-3
+ 44.4 9.9662485 35.522544 6.984431E-3
+ 44.4 10.344594 35.472167 7.226705E-3
+ 44.4 10.781084 35.485622 7.382752E-3
+ 44.4 11.207006 35.52445 7.4544232E-3
+ 44.4 11.506176 35.55662 7.4843466E-3
+ 44.4 11.731569 35.581436 7.4832225E-3
+ 44.4 11.902201 35.60003 7.4735707E-3
+ 44.4 12.057107 35.61576 7.483022E-3
+ 44.4 12.173999 35.629947 7.5066443E-3
+ 44.4 12.271849 35.63976 7.5277066E-3
+ 44.4 12.373874 35.651687 7.5433696E-3
+ 44.4 12.453693 35.66057 7.5518353E-3
+ 44.4 12.524294 35.666084 7.5628124E-3
+ 44.4 12.576832 35.6693 7.5766975E-3
+ 44.4 12.620159 35.67258 7.589216E-3
+ 44.4 12.687097 35.67966 7.6052756E-3
+ 44.4 12.727329 35.683433 7.622573E-3
+ 44.4 12.775056 35.688404 7.6357815E-3
+ 44.4 12.818314 35.693107 7.644651E-3
+ 44.4 12.86827 35.698875 7.6522417E-3
+ 44.4 12.907427 35.70226 7.6604946E-3
+ 44.4 12.939114 35.70514 7.665561E-3
+ 44.4 12.975604 35.707592 7.66343E-3
+ 44.4 13.017198 35.712184 7.6572257E-3
+ 44.4 13.093851 35.71835 7.653636E-3
+ 44.4 13.152447 35.723487 7.652057E-3
+ 44.4 13.198125 35.7258 7.648386E-3
+ 44.4 13.234694 35.728683 7.6423394E-3
+ 44.4 13.285697 35.732254 7.632023E-3
+ 44.4 13.353865 35.734477 7.6178545E-3
+ 44.4 13.448874 35.74134 7.59427E-3
+ 44.4 13.547642 35.73997 7.563737E-3
+ 44.4 13.635936 35.747657 7.524124E-3
+ 44.4 13.777985 35.749866 7.473174E-3
+ 44.4 13.979548 35.7593 7.416377E-3
+ 44.4 14.299637 35.7615 7.3446664E-3
+ 44.4 14.892648 35.758563 7.2863865E-3
+ 44.4 15.740799 35.737503 7.289124E-3
+ 44.4 16.471552 35.73082 7.382306E-3
+ 44.4 17.31149 35.732643 7.4371746E-3
+ 44.4 17.692614 35.72615 7.3423963E-3
+ 44.4 17.873383 35.72867 7.159501E-3
+ 44.4 17.975498 35.72499 6.9534215E-3
+ 44.4 18.027079 35.714977 6.76319E-3
+ 44.4 18.045135 35.711677 6.5900385E-3
+ 44.4 18.028738 35.714843 6.422995E-3
+ 44.4 18.036877 35.716777 6.2526692E-3
+ 44.4 18.008419 35.717357 6.01126E-3
+ 44.45 2.515935 34.89348 0.0E+0
+ 44.45 2.5223412 34.902652 -2.6572314E-5
+ 44.45 2.537861 34.908893 -1.3359122E-4
+ 44.45 2.5550184 34.915664 -1.1331881E-4
+ 44.45 2.5920403 34.91801 -2.24594E-6
+ 44.45 2.6778001 34.926963 1.9743071E-4
+ 44.45 2.8009393 34.940452 4.7676198E-4
+ 44.45 2.978582 34.949745 8.189397E-4
+ 44.45 3.1844654 34.956607 1.2552255E-3
+ 44.45 3.3537263 34.950115 1.7688321E-3
+ 44.45 3.4829545 34.94001 2.2452664E-3
+ 44.45 3.6415534 34.93169 2.7401344E-3
+ 44.45 4.0081133 34.965057 3.3770664E-3
+ 44.45 4.7400927 35.06025 3.9774244E-3
+ 44.45 5.942636 35.2247 4.6474193E-3
+ 44.45 7.6269073 35.464267 5.4279216E-3
+ 44.45 8.75208 35.569587 5.8986367E-3
+ 44.45 9.573339 35.592117 6.1877463E-3
+ 44.45 9.963539 35.52162 6.4639593E-3
+ 44.45 10.342739 35.4714 6.6742775E-3
+ 44.45 10.778965 35.484992 6.808075E-3
+ 44.45 11.205697 35.52403 6.8657794E-3
+ 44.45 11.505752 35.55651 6.8866205E-3
+ 44.45 11.731564 35.581474 6.880002E-3
+ 44.45 11.901062 35.599807 6.866477E-3
+ 44.45 12.057033 35.615604 6.87206E-3
+ 44.45 12.174375 35.6299 6.891892E-3
+ 44.45 12.272158 35.639675 6.9100754E-3
+ 44.45 12.374424 35.651721 6.9235856E-3
+ 44.45 12.454247 35.66065 6.930508E-3
+ 44.45 12.524886 35.666042 6.9400183E-3
+ 44.45 12.576929 35.669155 6.952386E-3
+ 44.45 12.620352 35.67244 6.9635156E-3
+ 44.45 12.688261 35.67963 6.978052E-3
+ 44.45 12.727656 35.683227 6.993776E-3
+ 44.45 12.775058 35.688182 7.0056365E-3
+ 44.45 12.818039 35.692893 7.0133805E-3
+ 44.45 12.868527 35.698753 7.0199314E-3
+ 44.45 12.907589 35.702106 7.0271445E-3
+ 44.45 12.938706 35.704986 7.0313722E-3
+ 44.45 12.974116 35.70738 7.0287962E-3
+ 44.45 13.015658 35.711963 7.0223766E-3
+ 44.45 13.092373 35.717994 7.0184906E-3
+ 44.45 13.151385 35.723278 7.0165256E-3
+ 44.45 13.197038 35.725673 7.012574E-3
+ 44.45 13.233324 35.72853 7.0064524E-3
+ 44.45 13.283632 35.732124 6.996358E-3
+ 44.45 13.351138 35.7342 6.9826655E-3
+ 44.45 13.443934 35.741004 6.960094E-3
+ 44.45 13.542206 35.73938 6.9309785E-3
+ 44.45 13.62818 35.747097 6.8934033E-3
+ 44.45 13.76844 35.74882 6.8452134E-3
+ 44.45 13.969596 35.75845 6.791695E-3
+ 44.45 14.287588 35.7606 6.724187E-3
+ 44.45 14.884134 35.757186 6.669772E-3
+ 44.45 15.737068 35.73514 6.673452E-3
+ 44.45 16.47652 35.727874 6.763366E-3
+ 44.45 17.298666 35.729675 6.8169422E-3
+ 44.45 17.668781 35.723182 6.7288647E-3
+ 44.45 17.845535 35.72611 6.558776E-3
+ 44.45 17.94811 35.72219 6.3672615E-3
+ 44.45 17.99991 35.711635 6.19041E-3
+ 44.45 18.018726 35.70814 6.029483E-3
+ 44.45 18.002813 35.71153 5.874423E-3
+ 44.45 18.010197 35.71335 5.716416E-3
+ 44.45 17.984465 35.71411 5.4926467E-3
+ 44.5 2.515351 34.893344 0.0E+0
+ 44.5 2.5222592 34.902736 -2.6146829E-5
+ 44.5 2.5380833 34.908935 -1.279902E-4
+ 44.5 2.5554463 34.915676 -1.0919485E-4
+ 44.5 2.5924074 34.917976 -5.3022104E-6
+ 44.5 2.6788206 34.926952 1.807865E-4
+ 44.5 2.8022754 34.94045 4.4027602E-4
+ 44.5 2.980022 34.949714 7.5664004E-4
+ 44.5 3.185872 34.956493 1.1592438E-3
+ 44.5 3.3536043 34.94977 1.6318874E-3
+ 44.5 3.4806385 34.939434 2.067506E-3
+ 44.5 3.6363155 34.93061 2.518622E-3
+ 44.5 3.9979968 34.96315 3.1028692E-3
+ 44.5 4.7266607 35.057865 3.6536965E-3
+ 44.5 5.9166612 35.219673 4.2744805E-3
+ 44.5 7.5905823 35.45664 5.0072115E-3
+ 44.5 8.737834 35.56642 5.4413615E-3
+ 44.5 9.566511 35.590232 5.694142E-3
+ 44.5 9.960921 35.520767 5.934675E-3
+ 44.5 10.340888 35.470684 6.115719E-3
+ 44.5 10.776863 35.48439 6.229356E-3
+ 44.5 11.204369 35.52363 6.27485E-3
+ 44.5 11.505276 35.5564 6.288022E-3
+ 44.5 11.731471 35.581504 6.277094E-3
+ 44.5 11.899892 35.59959 6.2606814E-3
+ 44.5 12.056868 35.61545 6.263041E-3
+ 44.5 12.174649 35.629852 6.279458E-3
+ 44.5 12.272387 35.63959 6.2949904E-3
+ 44.5 12.374893 35.651752 6.306519E-3
+ 44.5 12.45473 35.66073 6.3120676E-3
+ 44.5 12.525409 35.666004 6.3202213E-3
+ 44.5 12.576988 35.669017 6.331142E-3
+ 44.5 12.620508 35.672306 6.3409502E-3
+ 44.5 12.689324 35.679607 6.3539966E-3
+ 44.5 12.727919 35.683036 6.36817E-3
+ 44.5 12.775013 35.687976 6.37873E-3
+ 44.5 12.817729 35.69269 6.385426E-3
+ 44.5 12.868727 35.698642 6.39102E-3
+ 44.5 12.907698 35.701965 6.3972636E-3
+ 44.5 12.938288 35.70485 6.400737E-3
+ 44.5 12.972679 35.70718 6.397844E-3
+ 44.5 13.014181 35.711765 6.39136E-3
+ 44.5 13.090957 35.71767 6.3872993E-3
+ 44.5 13.150357 35.723087 6.385053E-3
+ 44.5 13.195995 35.725563 6.3809412E-3
+ 44.5 13.23203 35.728397 6.3748615E-3
+ 44.5 13.281685 35.73201 6.3651176E-3
+ 44.5 13.348579 35.733947 6.352045E-3
+ 44.5 13.439276 35.740695 6.330682E-3
+ 44.5 13.537083 35.738826 6.3032163E-3
+ 44.5 13.620876 35.746566 6.26794E-3
+ 44.5 13.759454 35.747844 6.2228157E-3
+ 44.5 13.960277 35.757652 6.1728716E-3
+ 44.5 14.276278 35.759754 6.109929E-3
+ 44.5 14.876237 35.755893 6.0595683E-3
+ 44.5 15.733668 35.73292 6.063918E-3
+ 44.5 16.481476 35.72511 6.149585E-3
+ 44.5 17.286678 35.72689 6.2011536E-3
+ 44.5 17.646536 35.720386 6.12002E-3
+ 44.5 17.819616 35.7237 5.963225E-3
+ 44.5 17.92261 35.719562 5.786777E-3
+ 44.5 17.97457 35.708492 5.6237704E-3
+ 44.5 17.994099 35.704814 5.4754773E-3
+ 44.5 17.97866 35.70841 5.332752E-3
+ 44.5 17.985327 35.71012 5.187402E-3
+ 44.5 17.96215 35.71106 4.9817096E-3
+ 44.55 2.5148086 34.893215 0.0E+0
+ 44.55 2.5221834 34.90281 -2.5235993E-5
+ 44.55 2.5382857 34.908977 -1.2083979E-4
+ 44.55 2.5558435 34.91569 -1.0359956E-4
+ 44.55 2.5927464 34.917945 -7.5392385E-6
+ 44.55 2.679765 34.92694 1.6396561E-4
+ 44.55 2.8035078 34.94044 4.0242946E-4
+ 44.55 2.981346 34.94968 6.9190876E-4
+ 44.55 3.1871616 34.95639 1.0596584E-3
+ 44.55 3.3534815 34.949455 1.4902794E-3
+ 44.55 3.4784932 34.938907 1.8847901E-3
+ 44.55 3.6314668 34.92962 2.2921676E-3
+ 44.55 3.9885971 34.961387 2.8228654E-3
+ 44.55 4.71416 35.055656 3.3233691E-3
+ 44.55 5.8923993 35.21499 3.892757E-3
+ 44.55 7.5565166 35.449497 4.573217E-3
+ 44.55 8.724567 35.563488 4.9701076E-3
+ 44.55 9.560096 35.58849 5.1893293E-3
+ 44.55 9.958429 35.519977 5.3970064E-3
+ 44.55 10.339078 35.470012 5.551419E-3
+ 44.55 10.774815 35.483825 5.6469496E-3
+ 44.55 11.203053 35.52325 5.6819645E-3
+ 44.55 11.504769 35.556293 5.6888675E-3
+ 44.55 11.73131 35.581527 5.6748013E-3
+ 44.55 11.89872 35.59938 5.656476E-3
+ 44.55 12.056633 35.615303 5.656257E-3
+ 44.55 12.174837 35.6298 5.6696436E-3
+ 44.55 12.272549 35.639507 5.6827622E-3
+ 44.55 12.375287 35.65178 5.6924875E-3
+ 44.55 12.455146 35.6608 5.696837E-3
+ 44.55 12.525867 35.665973 5.70375E-3
+ 44.55 12.577016 35.668895 5.7133017E-3
+ 44.55 12.620631 35.672187 5.721862E-3
+ 44.55 12.690286 35.679584 5.73346E-3
+ 44.55 12.728125 35.682853 5.746113E-3
+ 44.55 12.774933 35.687786 5.755426E-3
+ 44.55 12.817397 35.692504 5.761157E-3
+ 44.55 12.868876 35.698543 5.765879E-3
+ 44.55 12.907762 35.701835 5.7712285E-3
+ 44.55 12.937872 35.704723 5.7740346E-3
+ 44.55 12.971308 35.707004 5.770952E-3
+ 44.55 13.01278 35.711582 5.7645533E-3
+ 44.55 13.089618 35.717372 5.760439E-3
+ 44.55 13.149376 35.722915 5.758018E-3
+ 44.55 13.195005 35.725463 5.753865E-3
+ 44.55 13.230822 35.72828 5.7479436E-3
+ 44.55 13.27987 35.73191 5.738678E-3
+ 44.55 13.3462 35.733722 5.726364E-3
+ 44.55 13.434929 35.740413 5.7063982E-3
+ 44.55 13.532306 35.738315 5.6808055E-3
+ 44.55 13.614072 35.74608 5.6480765E-3
+ 44.55 13.751084 35.74693 5.606308E-3
+ 44.55 13.951637 35.756916 5.560219E-3
+ 44.55 14.265773 35.758972 5.502182E-3
+ 44.55 14.868981 35.75469 5.4560545E-3
+ 44.55 15.730595 35.730857 5.460817E-3
+ 44.55 16.48632 35.722545 5.54131E-3
+ 44.55 17.275589 35.724296 5.590193E-3
+ 44.55 17.625977 35.71779 5.516218E-3
+ 44.55 17.795727 35.72147 5.3731515E-3
+ 44.55 17.899097 35.71712 5.212223E-3
+ 44.55 17.951164 35.70557 5.063487E-3
+ 44.55 17.971357 35.70172 4.9282032E-3
+ 44.55 17.956377 35.70551 4.798135E-3
+ 44.55 17.962366 35.707115 4.665748E-3
+ 44.55 17.941566 35.708217 4.478529E-3
+ 44.6 2.5143113 34.8931 0.0E+0
+ 44.6 2.5221142 34.90288 -2.3871738E-5
+ 44.6 2.5384683 34.909015 -1.1224139E-4
+ 44.6 2.5562083 34.915702 -9.662732E-5
+ 44.6 2.5930554 34.91792 -9.002973E-6
+ 44.6 2.6806285 34.926933 1.4699678E-4
+ 44.6 2.8046312 34.940437 3.633442E-4
+ 44.6 2.9825496 34.949653 6.2496087E-4
+ 44.6 3.1883311 34.956295 9.567925E-4
+ 44.6 3.353361 34.94917 1.3444459E-3
+ 44.6 3.47653 34.938426 1.6976331E-3
+ 44.6 3.6270315 34.92872 2.0613605E-3
+ 44.6 3.97997 34.95977 2.5377741E-3
+ 44.6 4.702669 35.053634 2.9872565E-3
+ 44.6 5.870025 35.210681 3.5031368E-3
+ 44.6 7.5249915 35.442905 4.126811E-3
+ 44.6 8.712365 35.56081 4.485596E-3
+ 44.6 9.55415 35.58689 4.673896E-3
+ 44.6 9.956093 35.519264 4.851435E-3
+ 44.6 10.337342 35.469394 4.98177E-3
+ 44.6 10.772857 35.483303 5.0611784E-3
+ 44.6 11.201777 35.5229 5.0873877E-3
+ 44.6 11.504249 35.556194 5.0893803E-3
+ 44.6 11.731101 35.581546 5.073312E-3
+ 44.6 11.897574 35.599185 5.054019E-3
+ 44.6 12.056351 35.615158 5.051852E-3
+ 44.6 12.174953 35.629745 5.062592E-3
+ 44.6 12.272654 35.63943 5.0735366E-3
+ 44.6 12.375614 35.651805 5.081639E-3
+ 44.6 12.455501 35.66087 5.084964E-3
+ 44.6 12.526264 35.66594 5.0907544E-3
+ 44.6 12.577019 35.66878 5.0990176E-3
+ 44.6 12.620725 35.672077 5.106407E-3
+ 44.6 12.691147 35.679565 5.1166033E-3
+ 44.6 12.728282 35.68269 5.127772E-3
+ 44.6 12.774826 35.68761 5.135896E-3
+ 44.6 12.817054 35.692333 5.140744E-3
+ 44.6 12.868984 35.698451 5.1446827E-3
+ 44.6 12.90779 35.701717 5.149214E-3
+ 44.6 12.937464 35.704612 5.15144E-3
+ 44.6 12.970019 35.706844 5.1482925E-3
+ 44.6 13.011471 35.711421 5.1421234E-3
+ 44.6 13.088368 35.717102 5.1380745E-3
+ 44.6 13.148453 35.72276 5.135582E-3
+ 44.6 13.194079 35.72538 5.1315044E-3
+ 44.6 13.229706 35.728176 5.125856E-3
+ 44.6 13.278196 35.731826 5.117191E-3
+ 44.6 13.344017 35.73352 5.1057706E-3
+ 44.6 13.430924 35.740158 5.0873807E-3
+ 44.6 13.527907 35.73785 5.063872E-3
+ 44.6 13.607811 35.74563 5.0339223E-3
+ 44.6 13.743383 35.746093 4.9957814E-3
+ 44.6 13.943723 35.756244 4.9538076E-3
+ 44.6 14.256132 35.75826 4.9009942E-3
+ 44.6 14.862385 35.753585 4.859266E-3
+ 44.6 15.727843 35.72896 4.8642014E-3
+ 44.6 16.490965 35.720195 4.9386592E-3
+ 44.6 17.26545 35.72192 4.98422E-3
+ 44.6 17.6072 35.715404 4.91759E-3
+ 44.6 17.773958 35.719417 4.7886366E-3
+ 44.6 17.877663 35.71488 4.6436325E-3
+ 44.6 17.929794 35.702884 4.5095523E-3
+ 44.6 17.950598 35.698883 4.3876194E-3
+ 44.6 17.93605 35.702846 4.2704972E-3
+ 44.6 17.941416 35.704353 4.15135E-3
+ 44.6 17.92279 35.705604 3.982957E-3
+ 44.65 2.5138616 34.892993 0.0E+0
+ 44.65 2.5220518 34.90295 -2.209032E-5
+ 44.65 2.538631 34.909053 -1.0231057E-4
+ 44.65 2.5565383 34.91571 -8.8386404E-5
+ 44.65 2.593334 34.917892 -9.748637E-6
+ 44.65 2.6814072 34.926925 1.2990649E-4
+ 44.65 2.8056414 34.940433 3.2314716E-4
+ 44.65 2.9836294 34.949626 5.5602105E-4
+ 44.65 3.1893777 34.95621 8.5098214E-4
+ 44.65 3.3532457 34.94891 1.194836E-3
+ 44.65 3.4747586 34.938 1.5065501E-3
+ 44.65 3.6230316 34.92791 1.8267707E-3
+ 44.65 3.9721665 34.958316 2.2482855E-3
+ 44.65 4.6922616 35.051807 2.6461407E-3
+ 44.65 5.849702 35.206775 3.1065095E-3
+ 44.65 7.496268 35.43691 3.6689774E-3
+ 44.65 8.701308 35.55839 3.988708E-3
+ 44.65 9.548723 35.58545 4.148551E-3
+ 44.65 9.953939 35.518623 4.298519E-3
+ 44.65 10.335712 35.468837 4.4071953E-3
+ 44.65 10.771025 35.482822 4.472361E-3
+ 44.65 11.200567 35.52258 4.4913506E-3
+ 44.65 11.503734 35.556102 4.4897245E-3
+ 44.65 11.730861 35.581562 4.4727316E-3
+ 44.65 11.89648 35.599002 4.453367E-3
+ 44.65 12.056041 35.615024 4.4498573E-3
+ 44.65 12.175013 35.629695 4.458322E-3
+ 44.65 12.272714 35.63936 4.4673276E-3
+ 44.65 12.375882 35.65183 4.473985E-3
+ 44.65 12.455799 35.66093 4.476455E-3
+ 44.65 12.526604 35.665912 4.4812397E-3
+ 44.65 12.577003 35.66868 4.4882954E-3
+ 44.65 12.620794 35.67198 4.494592E-3
+ 44.65 12.691908 35.67955 4.5034354E-3
+ 44.65 12.728398 35.68254 4.513161E-3
+ 44.65 12.774702 35.68745 4.5201536E-3
+ 44.65 12.816713 35.692176 4.524202E-3
+ 44.65 12.869056 35.69837 4.527441E-3
+ 44.65 12.90779 35.701614 4.53123E-3
+ 44.65 12.937076 35.704517 4.5329602E-3
+ 44.65 12.96883 35.7067 4.529868E-3
+ 44.65 13.010267 35.711277 4.524066E-3
+ 44.65 13.087221 35.71686 4.5201955E-3
+ 44.65 13.147599 35.722621 4.517731E-3
+ 44.65 13.193227 35.72531 4.5138406E-3
+ 44.65 13.228692 35.72809 4.508573E-3
+ 44.65 13.276676 35.73176 4.5006256E-3
+ 44.65 13.34204 35.73334 4.490225E-3
+ 44.65 13.427287 35.739933 4.4735786E-3
+ 44.65 13.523916 35.737426 4.4523486E-3
+ 44.65 13.602134 35.745223 4.425394E-3
+ 44.65 13.736402 35.745334 4.39113E-3
+ 44.65 13.936576 35.755634 4.353512E-3
+ 44.65 14.247412 35.75761 4.306211E-3
+ 44.65 14.856471 35.752586 4.269033E-3
+ 44.65 15.725408 35.72724 4.2739235E-3
+ 44.65 16.495323 35.718067 4.3415543E-3
+ 44.65 17.256308 35.71977 4.383206E-3
+ 44.65 17.59029 35.71324 4.324081E-3
+ 44.65 17.754395 35.717567 4.2095775E-3
+ 44.65 17.858389 35.712856 4.0808534E-3
+ 44.65 17.910553 35.70046 3.961773E-3
+ 44.65 17.931908 35.69631 3.853496E-3
+ 44.65 17.917765 35.700435 3.7495784E-3
+ 44.65 17.922558 35.701847 3.643914E-3
+ 44.65 17.905903 35.703235 3.4946592E-3
+ 44.7 2.5134625 34.892902 0.0E+0
+ 44.7 2.5219964 34.903007 -1.9931982E-5
+ 44.7 2.5387735 34.909084 -9.1175934E-5
+ 44.7 2.5568313 34.91572 -7.899791E-5
+ 44.7 2.59358 34.91787 -9.840037E-6
+ 44.7 2.682097 34.926914 1.12719E-4
+ 44.7 2.8065347 34.94043 2.8196955E-4
+ 44.7 2.9845821 34.949604 4.8532214E-4
+ 44.7 3.1902987 34.956134 7.4257486E-4
+ 44.7 3.3531386 34.948684 1.0419097E-3
+ 44.7 3.4731881 34.937622 1.3120557E-3
+ 44.7 3.6194872 34.9272 1.5889514E-3
+ 44.7 3.9652335 34.957027 1.9550621E-3
+ 44.7 4.683004 35.050193 2.3007735E-3
+ 44.7 5.831578 35.203296 2.7037702E-3
+ 44.7 7.470584 35.431556 3.200817E-3
+ 44.7 8.691467 35.556255 3.4804937E-3
+ 44.7 9.543866 35.58417 3.6141397E-3
+ 44.7 9.951997 35.51806 3.738911E-3
+ 44.7 10.334218 35.46834 3.8281707E-3
+ 44.7 10.769348 35.482395 3.8808328E-3
+ 44.7 11.19945 35.522293 3.8940722E-3
+ 44.7 11.503243 35.556022 3.8900275E-3
+ 44.7 11.730609 35.581573 3.8731107E-3
+ 44.7 11.895463 35.59884 3.8545078E-3
+ 44.7 12.055723 35.614902 3.850218E-3
+ 44.7 12.17503 35.629646 3.85676E-3
+ 44.7 12.272739 35.63929 3.8640506E-3
+ 44.7 12.376098 35.651847 3.8694322E-3
+ 44.7 12.456047 35.660984 3.8712085E-3
+ 44.7 12.526891 35.66589 3.8750981E-3
+ 44.7 12.576974 35.66859 3.8810265E-3
+ 44.7 12.620844 35.671897 3.8863052E-3
+ 44.7 12.69257 35.679534 3.8938457E-3
+ 44.7 12.728481 35.682403 3.9021677E-3
+ 44.7 12.774571 35.68731 3.908089E-3
+ 44.7 12.816387 35.69204 3.9114155E-3
+ 44.7 12.869101 35.6983 3.914037E-3
+ 44.7 12.907769 35.70152 3.9171543E-3
+ 44.7 12.936715 35.70443 3.9184703E-3
+ 44.7 12.967753 35.706577 3.9155445E-3
+ 44.7 13.009182 35.71115 3.910238E-3
+ 44.7 13.086188 35.71665 3.9066504E-3
+ 44.7 13.146825 35.722503 3.9043077E-3
+ 44.7 13.192457 35.72525 3.9007081E-3
+ 44.7 13.227785 35.728015 3.895922E-3
+ 44.7 13.275321 35.7317 3.8888002E-3
+ 44.7 13.340282 35.733184 3.8795357E-3
+ 44.7 13.424045 35.73973 3.8647856E-3
+ 44.7 13.52036 35.737056 3.8460127E-3
+ 44.7 13.59708 35.744865 3.8222474E-3
+ 44.7 13.730187 35.74466 3.792086E-3
+ 44.7 13.930235 35.755096 3.7590397E-3
+ 44.7 14.239665 35.75704 3.7175128E-3
+ 44.7 14.851255 35.751697 3.68502E-3
+ 44.7 15.723286 35.725715 3.6896683E-3
+ 44.7 16.499317 35.71618 3.7497587E-3
+ 44.7 17.248209 35.717853 3.7869694E-3
+ 44.7 17.575321 35.71132 3.735486E-3
+ 44.7 17.737108 35.71592 3.6357208E-3
+ 44.7 17.841352 35.71106 3.523585E-3
+ 44.7 17.893524 35.6983 3.419806E-3
+ 44.7 17.915369 35.694023 3.3254523E-3
+ 44.7 17.901594 35.698295 3.2349652E-3
+ 44.7 17.905876 35.699615 3.1429952E-3
+ 44.7 17.890968 35.70113 3.0131482E-3
+ 44.75 2.513116 34.89282 0.0E+0
+ 44.75 2.5219488 34.90306 -1.7440541E-5
+ 44.75 2.5388958 34.909107 -7.897785E-5
+ 44.75 2.557086 34.915725 -6.8594505E-5
+ 44.75 2.593793 34.91785 -9.348773E-6
+ 44.75 2.682695 34.92691 9.545649E-5
+ 44.75 2.807307 34.94043 2.3994649E-4
+ 44.75 2.9854042 34.949584 4.131045E-4
+ 44.75 3.1910924 34.956066 6.319282E-4
+ 44.75 3.353042 34.94849 8.861358E-4
+ 44.75 3.471827 34.937297 1.1146639E-3
+ 44.75 3.6164157 34.926582 1.348438E-3
+ 44.75 3.9592118 34.955913 1.658741E-3
+ 44.75 4.674955 35.04879 1.9518776E-3
+ 44.75 5.8157863 35.20027 2.295821E-3
+ 44.75 7.4481544 35.426883 2.723549E-3
+ 44.75 8.682908 35.5544 2.9621778E-3
+ 44.75 9.539619 35.583065 3.0716501E-3
+ 44.75 9.950286 35.51757 3.1733657E-3
+ 44.75 10.332885 35.46791 3.2452354E-3
+ 44.75 10.767855 35.48202 3.2869656E-3
+ 44.75 11.198447 35.52204 3.2957827E-3
+ 44.75 11.50279 35.55595 3.2904057E-3
+ 44.75 11.730361 35.58158 3.2744696E-3
+ 44.75 11.894546 35.598693 3.2573805E-3
+ 44.75 12.055414 35.61479 3.2528236E-3
+ 44.75 12.175018 35.629604 3.2577654E-3
+ 44.75 12.272741 35.63923 3.263549E-3
+ 44.75 12.376269 35.65186 3.2678113E-3
+ 44.75 12.456249 35.66103 3.269042E-3
+ 44.75 12.527129 35.665866 3.2721401E-3
+ 44.75 12.576938 35.66851 3.2770147E-3
+ 44.75 12.620878 35.671825 3.2813467E-3
+ 44.75 12.693134 35.679523 3.2876317E-3
+ 44.75 12.728537 35.68229 3.2945913E-3
+ 44.75 12.774441 35.687187 3.299495E-3
+ 44.75 12.816085 35.691917 3.3021732E-3
+ 44.75 12.869126 35.69824 3.3042521E-3
+ 44.75 12.907736 35.70144 3.306765E-3
+ 44.75 12.936389 35.704357 3.3077413E-3
+ 44.75 12.966804 35.70647 3.3050831E-3
+ 44.75 13.008227 35.711044 3.3003867E-3
+ 44.75 13.08528 35.716464 3.297179E-3
+ 44.75 13.146142 35.7224 3.2950427E-3
+ 44.75 13.19178 35.7252 3.2918278E-3
+ 44.75 13.226994 35.72795 3.2876147E-3
+ 44.75 13.27414 35.73165 3.2814156E-3
+ 44.75 13.338754 35.733055 3.273392E-3
+ 44.75 13.421221 35.73956 3.2606741E-3
+ 44.75 13.517264 35.736732 3.2445164E-3
+ 44.75 13.592682 35.744552 3.2241127E-3
+ 44.75 13.72478 35.744071 3.1982527E-3
+ 44.75 13.924733 35.75463 3.1699684E-3
+ 44.75 14.232936 35.756542 3.1344445E-3
+ 44.75 14.846754 35.750926 3.106755E-3
+ 44.75 15.721474 35.72439 3.1109878E-3
+ 44.75 16.502876 35.71454 3.1629092E-3
+ 44.75 17.241192 35.71619 3.1952082E-3
+ 44.75 17.562365 35.709644 3.1514794E-3
+ 44.75 17.72217 35.714492 3.0666943E-3
+ 44.75 17.826624 35.709495 2.9714081E-3
+ 44.75 17.878784 35.696422 2.8831891E-3
+ 44.75 17.901054 35.692035 2.802989E-3
+ 44.75 17.887608 35.69643 2.7261245E-3
+ 44.75 17.891441 35.697677 2.6480294E-3
+ 44.75 17.87805 35.6993 2.5378176E-3
+ 44.8 2.512824 34.89275 0.0E+0
+ 44.8 2.5219087 34.903106 -1.4662974E-5
+ 44.8 2.538998 34.90913 -6.586701E-5
+ 44.8 2.5573005 34.915733 -5.7319055E-5
+ 44.8 2.5939714 34.91783 -8.353351E-6
+ 44.8 2.6831974 34.926902 7.8139193E-5
+ 44.8 2.8079555 34.940425 1.9721626E-4
+ 44.8 2.9860935 34.94957 3.396147E-4
+ 44.8 3.191757 34.956012 5.194082E-4
+ 44.8 3.3529582 34.948326 7.279903E-4
+ 44.8 3.470682 34.937026 9.148866E-4
+ 44.8 3.6138327 34.926067 1.1057501E-3
+ 44.8 3.9541375 34.954975 1.3599347E-3
+ 44.8 4.6681666 35.04761 1.6001504E-3
+ 44.8 5.8024435 35.19772 1.8835716E-3
+ 44.8 7.4291677 35.422935 2.2385052E-3
+ 44.8 8.675687 35.55284 2.4351505E-3
+ 44.8 9.536022 35.58213 2.5222105E-3
+ 44.8 9.94883 35.517162 2.6027453E-3
+ 44.8 10.331738 35.46755 2.6590016E-3
+ 44.8 10.766571 35.4817 2.6911767E-3
+ 44.8 11.19758 35.521827 2.6967346E-3
+ 44.8 11.50239 35.555885 2.6909783E-3
+ 44.8 11.73013 35.58159 2.6768154E-3
+ 44.8 11.893749 35.598567 2.6618991E-3
+ 44.8 12.055131 35.614696 2.6575266E-3
+ 44.8 12.174989 35.629562 2.6611546E-3
+ 44.8 12.272727 35.63918 2.665616E-3
+ 44.8 12.376401 35.651874 2.668899E-3
+ 44.8 12.456409 35.66107 2.6697153E-3
+ 44.8 12.52732 35.66585 2.6721146E-3
+ 44.8 12.5769 35.668445 2.6760026E-3
+ 44.8 12.6209 35.67177 2.6794518E-3
+ 44.8 12.693602 35.679515 2.684526E-3
+ 44.8 12.728573 35.68219 2.6901606E-3
+ 44.8 12.77432 35.68708 2.694097E-3
+ 44.8 12.815818 35.69182 2.6961923E-3
+ 44.8 12.869137 35.698184 2.6977953E-3
+ 44.8 12.907697 35.701374 2.6997637E-3
+ 44.8 12.936105 35.704296 2.7004664E-3
+ 44.8 12.965993 35.706382 2.698165E-3
+ 44.8 13.007414 35.710956 2.6941795E-3
+ 44.8 13.084508 35.716312 2.6914356E-3
+ 44.8 13.145558 35.722316 2.689581E-3
+ 44.8 13.191202 35.72516 2.6868334E-3
+ 44.8 13.226325 35.7279 2.6832732E-3
+ 44.8 13.273141 35.731613 2.678082E-3
+ 44.8 13.337465 35.732944 2.6713905E-3
+ 44.8 13.418835 35.739418 2.6608228E-3
+ 44.8 13.514649 35.73646 2.6474164E-3
+ 44.8 13.58897 35.74429 2.6305217E-3
+ 44.8 13.720216 35.74358 2.6091337E-3
+ 44.8 13.920102 35.75424 2.585774E-3
+ 44.8 14.227265 35.756126 2.556448E-3
+ 44.8 14.842982 35.75028 2.5336621E-3
+ 44.8 15.719968 35.72327 2.5373306E-3
+ 44.8 16.50594 35.713157 2.580545E-3
+ 44.8 17.235292 35.71479 2.6075271E-3
+ 44.8 17.551477 35.708236 2.5716433E-3
+ 44.8 17.70963 35.713287 2.5020365E-3
+ 44.8 17.814257 35.70818 2.423815E-3
+ 44.8 17.866398 35.69484 2.3513697E-3
+ 44.8 17.889029 35.690357 2.2855142E-3
+ 44.8 17.875858 35.694862 2.222432E-3
+ 44.8 17.879316 35.696037 2.1583593E-3
+ 44.8 17.8672 35.697753 2.0679687E-3
+ 44.85 2.5125887 34.892692 0.0E+0
+ 44.85 2.5218765 34.90314 -1.1648938E-5
+ 44.85 2.5390796 34.90915 -5.200297E-5
+ 44.85 2.557474 34.915737 -4.5323144E-5
+ 44.85 2.5941154 34.917816 -6.938199E-6
+ 44.85 2.6836028 34.9269 6.078567E-5
+ 44.85 2.8084774 34.940422 1.5391984E-4
+ 44.85 2.9866476 34.94956 2.6510443E-4
+ 44.85 3.1922903 34.95597 4.0538798E-4
+ 44.85 3.3528888 34.948192 5.679554E-4
+ 44.85 3.4697585 34.936805 7.1323424E-4
+ 44.85 3.6117506 34.925655 8.613921E-4
+ 44.85 3.9500412 34.954216 1.0592343E-3
+ 44.85 4.6626825 35.04666 1.2462661E-3
+ 44.85 5.791649 35.195655 1.4679403E-3
+ 44.85 7.413783 35.419742 1.7471217E-3
+ 44.85 8.66985 35.551586 1.9009564E-3
+ 44.85 9.533105 35.58138 1.9670808E-3
+ 44.85 9.947642 35.516834 2.028014E-3
+ 44.85 10.330795 35.467254 2.0701552E-3
+ 44.85 10.765518 35.481445 2.0939346E-3
+ 44.85 11.196864 35.521652 2.0972117E-3
+ 44.85 11.502056 35.555835 2.0918787E-3
+ 44.85 11.72993 35.581592 2.0801555E-3
+ 44.85 11.89309 35.598464 2.0679663E-3
+ 44.85 12.054887 35.61462 2.0641586E-3
+ 44.85 12.174952 35.62953 2.0667167E-3
+ 44.85 12.272706 35.639133 2.0700141E-3
+ 44.85 12.3765 35.651882 2.0724372E-3
+ 44.85 12.456533 35.661102 2.0729512E-3
+ 44.85 12.52747 35.665836 2.0747308E-3
+ 44.85 12.576863 35.668392 2.0776903E-3
+ 44.85 12.620913 35.67172 2.0803117E-3
+ 44.85 12.693974 35.67951 2.0842135E-3
+ 44.85 12.728595 35.68211 2.0885574E-3
+ 44.85 12.774214 35.686996 2.09157E-3
+ 44.85 12.815594 35.691734 2.0931384E-3
+ 44.85 12.869138 35.698146 2.0943228E-3
+ 44.85 12.907659 35.70132 2.0957977E-3
+ 44.85 12.93587 35.70425 2.096283E-3
+ 44.85 12.965331 35.70631 2.0944131E-3
+ 44.85 13.006752 35.710884 2.091224E-3
+ 44.85 13.083879 35.71619 2.0890147E-3
+ 44.85 13.145081 35.722248 2.0875048E-3
+ 44.85 13.190731 35.72513 2.085294E-3
+ 44.85 13.225782 35.727863 2.0824542E-3
+ 44.85 13.272333 35.731582 2.078342E-3
+ 44.85 13.336424 35.732856 2.0730586E-3
+ 44.85 13.416904 35.739303 2.064739E-3
+ 44.85 13.512534 35.736244 2.0541963E-3
+ 44.85 13.58597 35.744075 2.040933E-3
+ 44.85 13.716527 35.74318 2.0241565E-3
+ 44.85 13.916365 35.75392 2.0058546E-3
+ 44.85 14.222686 35.75579 1.9828865E-3
+ 44.85 14.83995 35.749752 1.9650855E-3
+ 44.85 15.718767 35.722366 1.9680666E-3
+ 44.85 16.508453 35.71204 2.0021307E-3
+ 44.85 17.230537 35.713657 2.0234615E-3
+ 44.85 17.542707 35.707096 1.9954924E-3
+ 44.85 17.699541 35.712314 1.9412178E-3
+ 44.85 17.804304 35.70712 1.8802294E-3
+ 44.85 17.856422 35.693565 1.8237286E-3
+ 44.85 17.879341 35.689002 1.77237E-3
+ 44.85 17.8664 35.693595 1.723195E-3
+ 44.85 17.86955 35.694717 1.6732607E-3
+ 44.85 17.858467 35.696506 1.6028355E-3
+ 44.9 2.5124108 34.89265 0.0E+0
+ 44.9 2.5218522 34.903167 -8.450288E-6
+ 44.9 2.539141 34.909164 -3.7552472E-5
+ 44.9 2.5576047 34.91574 -3.276548E-5
+ 44.9 2.5942242 34.91781 -5.192623E-6
+ 44.9 2.6839087 34.926895 4.3413E-5
+ 44.9 2.8088707 34.940422 1.1020022E-4
+ 44.9 2.9870645 34.949546 1.898296E-4
+ 44.9 3.1926913 34.955936 2.902461E-4
+ 44.9 3.3528356 34.948093 4.0651738E-4
+ 44.9 3.4690618 34.93664 5.102149E-4
+ 44.9 3.61018 34.925342 6.1585614E-4
+ 44.9 3.946947 34.953647 7.57212E-4
+ 44.9 4.658538 35.045944 8.908792E-4
+ 44.9 5.7834815 35.194095 1.0498522E-3
+ 44.9 7.402129 35.41732 1.2509252E-3
+ 44.9 8.665439 35.55064 1.3612753E-3
+ 44.9 9.530894 35.58081 1.4076387E-3
+ 44.9 9.94674 35.51659 1.4502302E-3
+ 44.9 10.330074 35.46703 1.4794506E-3
+ 44.9 10.764713 35.48125 1.4957581E-3
+ 44.9 11.196315 35.521522 1.4975324E-3
+ 44.9 11.501796 35.555797 1.4932605E-3
+ 44.9 11.729771 35.581592 1.4845052E-3
+ 44.9 11.892583 35.598384 1.475483E-3
+ 44.9 12.054694 35.61456 1.472543E-3
+ 44.9 12.174917 35.62951 1.4742266E-3
+ 44.9 12.272685 35.639102 1.4764874E-3
+ 44.9 12.376569 35.65189 1.4781468E-3
+ 44.9 12.456622 35.66113 1.478448E-3
+ 44.9 12.52758 35.665824 1.4796719E-3
+ 44.9 12.576833 35.668354 1.48175E-3
+ 44.9 12.62092 35.671684 1.4835887E-3
+ 44.9 12.694252 35.679504 1.4863505E-3
+ 44.9 12.728607 35.68205 1.4894311E-3
+ 44.9 12.77413 35.686935 1.4915558E-3
+ 44.9 12.81542 35.691673 1.4926423E-3
+ 44.9 12.869135 35.698112 1.4934543E-3
+ 44.9 12.907625 35.70128 1.494477E-3
+ 44.9 12.93569 35.704212 1.4947904E-3
+ 44.9 12.964827 35.706256 1.4934118E-3
+ 44.9 13.006248 35.710834 1.491086E-3
+ 44.9 13.083401 35.7161 1.4894674E-3
+ 44.9 13.144717 35.7222 1.4883528E-3
+ 44.9 13.190373 35.725105 1.4867342E-3
+ 44.9 13.225371 35.727832 1.4846676E-3
+ 44.9 13.271721 35.73156 1.4816907E-3
+ 44.9 13.335636 35.732795 1.4778749E-3
+ 44.9 13.415444 35.73922 1.4718794E-3
+ 44.9 13.510934 35.736076 1.4642886E-3
+ 44.9 13.583701 35.743915 1.4547504E-3
+ 44.9 13.713738 35.742874 1.4426942E-3
+ 44.9 13.913544 35.75368 1.4295528E-3
+ 44.9 14.219228 35.755535 1.4130654E-3
+ 44.9 14.837667 35.749355 1.4003111E-3
+ 44.9 15.717868 35.721683 1.4025087E-3
+ 44.9 16.510378 35.7112 1.4270781E-3
+ 44.9 17.22695 35.712802 1.4424965E-3
+ 44.9 17.536095 35.706237 1.4224923E-3
+ 44.9 17.69194 35.71158 1.3836616E-3
+ 44.9 17.796804 35.706317 1.3400292E-3
+ 44.9 17.8489 35.6926 1.2995984E-3
+ 44.9 17.872038 35.68798 1.2628485E-3
+ 44.9 17.85927 35.69264 1.2276727E-3
+ 44.9 17.86219 35.693714 1.1919605E-3
+ 44.9 17.851885 35.695564 1.1416042E-3
+ 44.95 2.512292 34.892623 0.0E+0
+ 44.95 2.521836 34.903186 -5.1205597E-6
+ 44.95 2.539182 34.909172 -2.2687804E-5
+ 44.95 2.5576922 34.915744 -1.981026E-5
+ 44.95 2.5942966 34.9178 -3.209694E-6
+ 44.95 2.6841132 34.92689 2.6037113E-5
+ 44.95 2.809134 34.94042 6.620191E-5
+ 44.95 2.9873435 34.94954 1.1404897E-4
+ 44.95 3.1929593 34.955913 1.7436508E-4
+ 44.95 3.3527994 34.94803 2.4416585E-4
+ 44.95 3.4685955 34.936534 3.0633434E-4
+ 44.95 3.6091287 34.925132 3.6962327E-4
+ 44.95 3.944874 34.953266 4.5442476E-4
+ 44.95 4.65576 35.045463 5.346284E-4
+ 44.95 5.7780027 35.19305 6.302381E-4
+ 44.95 7.394305 35.415695 7.5151555E-4
+ 44.95 8.662481 35.550006 8.178969E-4
+ 44.95 9.52941 35.58043 8.4535713E-4
+ 44.95 9.946133 35.516422 8.7052874E-4
+ 44.95 10.329586 35.46688 8.8770093E-4
+ 44.95 10.764168 35.481117 8.972094E-4
+ 44.95 11.195943 35.521434 8.9804554E-4
+ 44.95 11.501618 35.55577 8.9529686E-4
+ 44.95 11.72966 35.581596 8.898918E-4
+ 44.95 11.892239 35.59833 8.843527E-4
+ 44.95 12.054561 35.61452 8.8250066E-4
+ 44.95 12.17489 35.62949 8.834525E-4
+ 44.95 12.272668 35.63908 8.8477035E-4
+ 44.95 12.376614 35.651897 8.8573683E-4
+ 44.95 12.45668 35.661144 8.858909E-4
+ 44.95 12.527651 35.665817 8.866058E-4
+ 44.95 12.576811 35.668327 8.8783795E-4
+ 44.95 12.620924 35.671657 8.88927E-4
+ 44.95 12.694437 35.6795 8.905735E-4
+ 44.95 12.728613 35.68201 8.924122E-4
+ 44.95 12.774072 35.686893 8.9367554E-4
+ 44.95 12.8153 35.69163 8.943136E-4
+ 44.95 12.869131 35.698093 8.947869E-4
+ 44.95 12.907601 35.701251 8.9538784E-4
+ 44.95 12.935567 35.70419 8.9556234E-4
+ 44.95 12.964488 35.706222 8.9471816E-4
+ 44.95 13.005909 35.7108 8.933038E-4
+ 44.95 13.08308 35.716037 8.9231674E-4
+ 44.95 13.144472 35.722164 8.916335E-4
+ 44.95 13.190132 35.72509 8.9064665E-4
+ 44.95 13.225095 35.727813 8.893918E-4
+ 44.95 13.271311 35.73155 8.875903E-4
+ 44.95 13.335109 35.73275 8.852847E-4
+ 44.95 13.414464 35.73916 8.8166724E-4
+ 44.95 13.509862 35.735965 8.7709E-4
+ 44.95 13.582179 35.74381 8.713431E-4
+ 44.95 13.711868 35.742671 8.6408236E-4
+ 44.95 13.911655 35.75352 8.561724E-4
+ 44.95 14.216911 35.755363 8.462504E-4
+ 44.95 14.836142 35.74909 8.3858455E-4
+ 44.95 15.717269 35.721225 8.3993E-4
+ 44.95 16.511679 35.710636 8.5476244E-4
+ 44.95 17.224548 35.71223 8.640837E-4
+ 44.95 17.53167 35.70566 8.520745E-4
+ 44.95 17.686857 35.711086 8.287585E-4
+ 44.95 17.791786 35.70578 8.0255995E-4
+ 44.95 17.843864 35.69195 7.782801E-4
+ 44.95 17.867151 35.687294 7.5621122E-4
+ 44.95 17.854502 35.691993 7.350922E-4
+ 44.95 17.857264 35.693046 7.136538E-4
+ 44.95 17.84748 35.69493 6.8342883E-4
+ 45.0 2.512232 34.89261 0.0E+0
+ 45.0 2.521828 34.9032 0.0E+0
+ 45.0 2.5392024 34.909175 0.0E+0
+ 45.0 2.5577363 34.915744 0.0E+0
+ 45.0 2.594333 34.917797 0.0E+0
+ 45.0 2.6842157 34.92689 0.0E+0
+ 45.0 2.8092658 34.94042 0.0E+0
+ 45.0 2.9874832 34.94954 0.0E+0
+ 45.0 3.1930935 34.955902 0.0E+0
+ 45.0 3.3527812 34.947994 0.0E+0
+ 45.0 3.4683618 34.936477 0.0E+0
+ 45.0 3.6086015 34.92503 0.0E+0
+ 45.0 3.9438345 34.953075 0.0E+0
+ 45.0 4.6543664 35.045223 0.0E+0
+ 45.0 5.7752532 35.192523 0.0E+0
+ 45.0 7.3903765 35.414882 0.0E+0
+ 45.0 8.660998 35.549686 0.0E+0
+ 45.0 9.528665 35.58024 0.0E+0
+ 45.0 9.9458274 35.516342 0.0E+0
+ 45.0 10.32934 35.46681 0.0E+0
+ 45.0 10.763894 35.481052 0.0E+0
+ 45.0 11.195755 35.52139 0.0E+0
+ 45.0 11.501528 35.55576 0.0E+0
+ 45.0 11.729603 35.581596 0.0E+0
+ 45.0 11.892065 35.59831 0.0E+0
+ 45.0 12.054492 35.614501 0.0E+0
+ 45.0 12.174875 35.629482 0.0E+0
+ 45.0 12.272658 35.63907 0.0E+0
+ 45.0 12.376636 35.651897 0.0E+0
+ 45.0 12.456709 35.66115 0.0E+0
+ 45.0 12.527687 35.665813 0.0E+0
+ 45.0 12.576799 35.668315 0.0E+0
+ 45.0 12.620926 35.671646 0.0E+0
+ 45.0 12.694529 35.6795 0.0E+0
+ 45.0 12.728615 35.68199 0.0E+0
+ 45.0 12.774042 35.68687 0.0E+0
+ 45.0 12.81524 35.691612 0.0E+0
+ 45.0 12.869128 35.698081 0.0E+0
+ 45.0 12.907588 35.70124 0.0E+0
+ 45.0 12.935505 35.704177 0.0E+0
+ 45.0 12.964317 35.706203 0.0E+0
+ 45.0 13.005739 35.71078 0.0E+0
+ 45.0 13.082918 35.716007 0.0E+0
+ 45.0 13.144348 35.72215 0.0E+0
+ 45.0 13.19001 35.725082 0.0E+0
+ 45.0 13.224957 35.727802 0.0E+0
+ 45.0 13.271105 35.73154 0.0E+0
+ 45.0 13.334844 35.73273 0.0E+0
+ 45.0 13.413972 35.739131 0.0E+0
+ 45.0 13.509323 35.735912 0.0E+0
+ 45.0 13.581416 35.74375 0.0E+0
+ 45.0 13.71093 35.742572 0.0E+0
+ 45.0 13.910708 35.75344 0.0E+0
+ 45.0 14.215749 35.75528 0.0E+0
+ 45.0 14.835378 35.748954 0.0E+0
+ 45.0 15.71697 35.720996 0.0E+0
+ 45.0 16.512335 35.710353 0.0E+0
+ 45.0 17.223347 35.711944 0.0E+0
+ 45.0 17.529451 35.70537 0.0E+0
+ 45.0 17.68431 35.71084 0.0E+0
+ 45.0 17.789272 35.70551 0.0E+0
+ 45.0 17.841343 35.691627 0.0E+0
+ 45.0 17.864702 35.68695 0.0E+0
+ 45.0 17.852112 35.691673 0.0E+0
+ 45.0 17.854795 35.692707 0.0E+0
+ 45.0 17.845272 35.694614 0.0E+0
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/pomme_rho_ascii
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/pomme_rho_ascii	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/pomme_rho_ascii	(revision 6)
@@ -0,0 +1,66 @@
+ -4755.1 -4755.1 1030.0659
+ -4462.2 -4608.65 1029.934
+ -4173.05 -4317.625 1029.8033
+ -3888.35 -4030.7 1029.675
+ -3608.85 -3748.6 1029.5463
+ -3335.4 -3472.125 1029.4202
+ -3068.85 -3202.125 1029.2959
+ -2810.2 -2939.525 1029.1681
+ -2560.6 -2685.4 1029.0391
+ -2321.0 -2440.8 1028.9086
+ -2092.5 -2206.75 1028.7813
+ -1876.15 -1984.325 1028.6656
+ -1672.75 -1774.45 1028.5618
+ -1483.05 -1577.9 1028.467
+ -1307.65 -1395.35 1028.3691
+ -1146.9 -1227.275 1028.2397
+ -1000.8 -1073.85 1028.076
+ -869.15 -934.975 1027.897
+ -751.5 -810.325 1027.7148
+ -647.15 -699.325 1027.5529
+ -555.25 -601.2 1027.4297
+ -474.85 -515.05 1027.342
+ -409.75 -442.3 1027.2753
+ -361.1 -385.425 1027.2238
+ -323.7 -342.4 1027.1816
+ -294.15 -308.925 1027.1472
+ -270.2 -282.175 1027.1194
+ -250.35 -260.275 1027.0936
+ -233.55 -241.95 1027.0713
+ -219.1 -226.325 1027.0515
+ -206.5 -212.8 1027.0345
+ -195.35 -200.925 1027.0197
+ -185.35 -190.35 1027.007
+ -176.3 -180.825 1026.9946
+ -168.05 -172.175 1026.9838
+ -160.45 -164.25 1026.9733
+ -153.4 -156.925 1026.9648
+ -146.8 -150.1 1026.9551
+ -140.55 -143.675 1026.9456
+ -134.6 -137.575 1026.9364
+ -128.9 -131.75 1026.9264
+ -123.4 -126.15 1026.9169
+ -118.05 -120.725 1026.9042
+ -112.8 -115.425 1026.894
+ -107.65 -110.225 1026.8829
+ -102.55 -105.1 1026.8715
+ -97.5 -100.025 1026.8582
+ -92.5 -95.0 1026.8416
+ -87.5 -90.0 1026.8215
+ -82.5 -85.0 1026.799
+ -77.5 -80.0 1026.7728
+ -72.5 -75.0 1026.7385
+ -67.5 -70.0 1026.6893
+ -62.5 -65.0 1026.6093
+ -57.5 -60.0 1026.4727
+ -52.5 -55.0 1026.3036
+ -47.5 -50.0 1026.1324
+ -42.5 -45.0 1025.928
+ -37.5 -40.0 1025.7582
+ -32.5 -35.0 1025.6349
+ -27.5 -30.0 1025.556
+ -22.5 -25.0 1025.5374
+ -17.5 -20.0 1025.5355
+ -12.5 -15.0 1025.5371
+ -7.5 -10.0 1025.5372
+ 0.0E+0 -3.75 1025.5511
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/problem_params.h
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/problem_params.h	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/problem_params.h	(revision 6)
@@ -0,0 +1,121 @@
+C*****************************************************************************
+c   PARAMETER FILE FOR PARALLEL SPECTRAL MODEL.  *****************************
+c*****************************************************************************
+      pi=4.*atan(1.)
+
+c     Initial conditions: either name a file or specify none
+c xlv     netcdf_file='/home/alpha0/kraig/NSF_IWS/input/ics/GM_cdf_2145.000'
+c      netcdf_file='/workdir/rech/dyc/rdyc711/cfd_2D_000500'
+      netcdf_file='none'    ! none means ICS defined in initialize.f
+
+c     Flag specifying whether flow is forced via user_defined_forcing.f
+c      force_flag='yes'
+      force_flag='yes'
+
+
+c*****************************************************************************
+c    Type of z boundary conditions.
+c*****************************************************************************
+      bc_flag = 'zslip'              ! 'zperiodic'  or 'zslip' allowable
+                                     !  always periodic in x,y
+c=============================================================================
+c     Declare how the two scalars relate to density
+c     R (rho)  T (temp) S (salinity)   P (passive)
+c     Legal Settings: 'TS' 'TP' 'SP' 'RP'  'PP'
+c=============================================================================
+      scalars = 'TS'        ! scalar1=rho'  scalar2=passive
+      s1_scale= 1.0    
+      s2_scale= 1.0 
+
+c*****************************************************************************
+c    Size of computational domain.
+c    x in [0,Lx)   , y in [0,Ly)   , z in [0,Lz]  zslip
+c                                         [0,Lz]  zperiodic
+c*****************************************************************************
+      Lx = 150000              ! x domain size [m]
+      Ly = Lx                ! y domain size [m] (unused for 2d see below)
+      Lz = 4000.                ! z domain size [m]
+      dz = Lz/float(nz)         ! vertical grid spacing [m]  (*$*)
+c*****************************************************************************
+c*****************************************************************************
+
+
+c*****************************************************************************
+c     Physical parameters
+c*****************************************************************************
+      g=9.81                          ! gravity [m/s2]
+c xlv      xlat=pi/4                       ! latitude in radians
+      xlatit=47.5*pi/180
+      xOmega=2.*pi/(24.*3600.)        ! earth rotation frequency [1/s]
+      f=2*xOmega*sin(xlatit)            ! Coriolis parameter [1/s]
+c     beta=(1/R)2(Omega)cos(xlatit); R~6400km   ! beta effect pba June 2005
+c xlv      beta=(1./(6400*1.e3))*2*xOmega*cos(xlatit)  ! [1/ms]
+      beta=0.
+
+c*****************************************************************************
+c*****************************************************************************
+
+
+
+c*****************************************************************************
+c     Fluid properties
+c*****************************************************************************
+      rho_0=1000.                     ! characteristic density [kg/m3]
+      nu = 1.e-6                      ! viscosity [m2/s]  (3),(4)
+      kappa_1 = nu/1.                 ! diffusivity for scalar 1 [m2/s]
+      kappa_2 = nu/1.                 ! diffusivity for scalar 2 [m2/s]
+c*****************************************************************************
+c     dissipation scheme
+c     for DNS, i.e. nu grad^2 u, kappa grad^2 rho
+c     choose 'isotropic' and p=2, higher orders of p
+c     and anisotropic are undocumented currently
+      diss_flag='isotropic'           ! isotropic or anisotropic
+      p=2.                            ! order of (hyper)viscosity operator
+      T_diss=3000                     ! [s] decay time scale at maximim wavenumber 
+                                      ! ignored if diss_flag=isotropic and p=2 i.e. for DNS
+c*****************************************************************************
+
+c*****************************************************************************
+c     Additional user specified scales required to nondimensionalize 
+c     the equations of motion.
+c*****************************************************************************
+      DGRAD=3.e-4                     ! char. scale of dens gradient [kg/m4]
+c xlv      s1_scale= 1.0                   ! char. scale of scalar 1 e.g. would be deg C if s1->Temp.
+c xlv      s2_scale= 1.                    ! char. scale of scalar 2 e.g. would be psu   if s2->Salinity
+      U0=0.01                         ! char. velocity scale [m/s] 
+      bfreq = sqrt((g/rho_0)*DGRAD)   ! char. buoyancy frequency [1/s]  (*$*)
+c*****************************************************************************
+c*****************************************************************************
+
+c*****************************************************************************
+c    Time step and execution control parameters
+c*****************************************************************************
+      dt=600               ! integration time step  [s]  
+      t_start=0*dt              ! starting time [s]
+      t_end=100*dt           ! ending time [s]  (test wave per = 4.89 hrs --> 3 pers.)    
+      vort_flag='no'           ! write out vorticity fields as well as velocity/density
+      t_stat=20*dt             ! time increment for calls to energetics [s]  
+c*****************************************************************************
+c*****************************************************************************
+
+c******************************************************************************
+c         Lagrangian "float" parameters
+c******************************************************************************
+      t_floats_on =t_start     ! float insertion time
+      z_close=0.5*dz/Lz        ! min. distance to upper/lower bdries
+                               ! that floats can attain [d'less]=[1]
+      z_offset=-0.5*dz/Lz      ! up offset for second float dens. measurement
+      delta_w=0.0/U0           ! float velocity due to residual buoyancy [1]
+c******************************************************************************
+c******************************************************************************
+
+c******************************************************************************
+c     Perturbed, "noisy" ICS parameter
+c******************************************************************************
+      efactor=0*1.e-4
+c     if efactor is nonzero, the (linear) vortical mode field is perturbed
+c     with a spectrum of "noise" (decays linearly with horiz. wavenumber) such
+c     that the total kinetic energy of the noise is a specified fraction of
+c     the horizontal kinetic energy of the deterministically specified ICs
+c     efactor=0.01 --> noise field has 1% of the HKE in the deterministic fields
+c******************************************************************************
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/rk4_even.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/rk4_even.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/rk4_even.f	(revision 6)
@@ -0,0 +1,151 @@
+      subroutine rk4_even(dt,k_rk4,float_variables,float_parameters,Lz,s1_scale,s2_scale,
+     *                    locnx,ny,nz,nfloats,nfloatparams,nsensors,N,NM1,
+     *                    u,v,w,s1,s2,wnx,wny,wnz,bc_flag,Pr,Re,myid,comm)
+
+c
+c     Routine to update k1, k2 and k3 in the RK4 algorithm for
+c     each float variable and each float.
+c
+
+      implicit none
+      integer locnx,ny,nz,nfloats,nfloatparams,nsensors,N,NM1
+      integer myid,comm,i
+      real dt,k_rk4(5,nfloats,4)    ! 5 variables  governed by odes
+      real float_variables(6,nfloats)
+      real float_parameters(nfloatparams,nfloats),Lz,s1_scale,s2_scale
+      complex u(locnx,ny+1,nz+1,2),v(locnx,ny+1,nz+1,2)
+      complex w(locnx,ny+1,nz+1,2),s1(locnx,ny+1,nz+1,2)
+      complex s2(locnx,ny+1,nz+1,2)
+      real wnx(locnx),wny(ny+1),wnz(nz+1)
+      character*80 bc_flag
+      character*1 u_flag,v_flag,w_flag,s1_flag,s2_flag
+      real x0,y0,z0,Pr,Re,PrRe,u_fluid,v_fluid,w_fluid,s1_bar,g2s1b,junk,xx,grad2_s1
+      real s2_bar,g2s2b,grad2_s2
+
+
+      if( bc_flag .eq. 'zslip' ) then
+       u_flag='c'
+       v_flag='c'
+       w_flag='s'
+       s1_flag='s'
+       s2_flag='s'
+      elseif( bc_flag .eq. 'zperiodic' ) then
+       u_flag='f'
+       v_flag='f'
+       w_flag='f'
+       s1_flag='f'
+       s2_flag='f'
+      endif
+      PrRe=Pr*Re
+      xx=1.0
+
+
+c     main loop through all floats
+
+      do i=1,nfloats
+c
+c      evaluate k1 for x,y,z,T_float and rho_lagrangian  i.e. variables 1-5
+c
+       x0 = float_variables(1,i)    ! time N x position (wrt 2dt time grid)
+       y0 = float_variables(2,i)    ! time N y position (wrt 2dt time grid)
+       z0 = float_variables(3,i)    ! time N z position (wrt 2dt time grid)
+
+c      u_fluid <--- u(x0,y0,z0)
+       call ds_interp(x0,y0,z0,u(1,1,1,N),wnx,wny,wnz,locnx,ny,nz,
+     *                u_flag,u_fluid,myid,comm)
+
+c      v_fluid <--- v(x0,y0,z0)
+       call ds_interp(x0,y0,z0,v(1,1,1,N),wnx,wny,wnz,locnx,ny,nz,
+     *                 v_flag,v_fluid,myid,comm)
+
+c      w_fluid <--- w(x0,y0,z0)
+       call ds_interp(x0,y0,z0,w(1,1,1,N),wnx,wny,wnz,locnx,ny,nz,
+     *                 w_flag,w_fluid,myid,comm)
+
+c      grad2_s1 <--- laplacian s1(x0,y0,z0)
+       call ds_L_interp(x0,y0,z0,s1(1,1,1,N),wnx,wny,wnz,locnx,ny,nz,
+     *                  s1_flag,grad2_s1,myid,comm)
+       call s1_bar_func(x0,y0,z0,s1_bar,junk,junk,junk,g2s1b,Lz,s1_scale)
+
+c
+c      here k1 = u_float is set equal to u_fluid etc, generalizations possible
+c
+       k_rk4(1,i,1) = u_fluid    ! variable 1 = x_float
+       k_rk4(2,i,1) = v_fluid    ! variable 2 = y_float
+       k_rk4(3,i,1) = w_fluid  
+     *              + float_parameters(3,i)   ! variable 3 = z_float
+       k_rk4(4,i,1) = 0.0        ! variable 4 = temperature_float
+       k_rk4(5,i,1) = (1./PrRe)*(grad2_s1+g2s1b) ! var 5 = Lagrangian scalar 1
+
+c
+c      evaluate k2 for x,y,z,T_float and rho_lagrangian  i.e. variables 1-5
+c      time evaluated at  t_n+dt (N+1/2 on Lagrangian time grid), stored in "NM1" 
+c      position evaluated at (x_N + dt*k1)
+c
+       x0 = float_variables(1,i) + dt*k_rk4(1,i,1)
+       y0 = float_variables(2,i) + dt*k_rk4(2,i,1)
+       z0 = float_variables(3,i) + dt*k_rk4(3,i,1)
+
+c      u_fluid <--- u(x0,y0,z0)
+       call ds_interp(x0,y0,z0,u(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                u_flag,u_fluid,myid,comm)
+
+c      v_fluid <--- v(x0,y0,z0)
+       call ds_interp(x0,y0,z0,v(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                v_flag,v_fluid,myid,comm)
+
+c      w_fluid <--- w(x0,y0,z0)
+       call ds_interp(x0,y0,z0,w(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                w_flag,w_fluid,myid,comm)
+
+c      grad2_s1 <--- laplacian s1(x0,y0,z0)
+       call ds_L_interp(x0,y0,z0,s1(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                  s1_flag,grad2_s1,myid,comm)
+       call s1_bar_func(x0,y0,z0,s1_bar,junk,junk,junk,g2s1b,Lz,s1_scale)
+
+       k_rk4(1,i,2) = u_fluid    ! variable 1 = x_float
+       k_rk4(1,i,2) = u_fluid    ! variable 1 = x_float
+       k_rk4(2,i,2) = v_fluid    ! variable 2 = y_float
+       k_rk4(3,i,2) = w_fluid    
+     *              + float_parameters(3,i)  ! variable 3 = z_float
+       k_rk4(4,i,2) = 0.0        ! variable 4 = temperature_float
+       k_rk4(5,i,2) = (1./PrRe)*(grad2_s1+g2s1b) ! variable 5 = Lagrangian scalar 1
+
+c
+c      evaluate k3 for x,y,z,T_float and rho_lagrangian  i.e. variables 1-5
+c      time evaluated at  t_n+dt (N+1/2 on Lagrangian time grid), stored in "NM1" 
+c      position evaluated at (x_N + dt*k2)
+c
+       x0 = float_variables(1,i) + dt*k_rk4(1,i,2)
+       y0 = float_variables(2,i) + dt*k_rk4(2,i,2)
+       z0 = float_variables(3,i) + dt*k_rk4(3,i,2)
+
+c      u_fluid <--- u(x0,y0,z0)
+       call ds_interp(x0,y0,z0,u(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                u_flag,u_fluid,myid,comm)
+
+c      v_fluid <--- v(x0,y0,z0)
+       call ds_interp(x0,y0,z0,v(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                v_flag,v_fluid,myid,comm)
+
+c      w_fluid <--- w(x0,y0,z0)
+       call ds_interp(x0,y0,z0,w(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                w_flag,w_fluid,myid,comm)
+
+c      grad2_s1 <--- laplacian s1(x0,y0,z0)
+       call ds_L_interp(x0,y0,z0,s1(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                  s1_flag,grad2_s1,myid,comm)
+       call s1_bar_func(x0,y0,z0,s1_bar,junk,junk,junk,g2s1b,Lz,s1_scale)
+
+       k_rk4(1,i,3) = u_fluid    ! variable 1 = x_float
+       k_rk4(2,i,3) = v_fluid    ! variable 2 = y_float
+       k_rk4(3,i,3) = w_fluid    
+     *              + float_parameters(3,i)  ! variable 3 = z_float
+       k_rk4(4,i,3) = 0.0        ! variable 4 = temperature_float
+       k_rk4(5,i,3) = (1./PrRe)*(grad2_s1+g2s1b) ! variable 5 = Lagrangian scalar 1
+ 
+
+      enddo
+
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/rk4_odd.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/rk4_odd.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/rk4_odd.f	(revision 6)
@@ -0,0 +1,174 @@
+      subroutine rk4_odd(dt,k_rk4,float_variables,float_parameters,Lz,s1_scale,s2_scale,
+     *                    locnx,ny,nz,nfloats,nfloatparams,nsensors,N,NM1,
+     *                    u,v,w,s1,s2,wnx,wny,wnz,bc_flag,Pr,Re,sensor_data,myid,comm)
+
+c
+c     Routine to update k4 of the RK4 algorithm, 
+c     the float variables and the sensor data for
+c     each float.
+c
+c         sensors 1,2  s1 and s1 at z_up, i.e. slightly displaced point in z
+c         sensors 6,7  s2 and s2 at z_up, i.e. slightly displaced point in z
+c         sensors 3-5  u,v and w at z_up, i.e. slightly displaced point in z
+
+      implicit none
+      integer myid,comm,i,j
+      integer locnx,ny,nz,nfloats,nfloatparams,nsensors,N,NM1
+      real dt,k_rk4(5,nfloats,4)    ! 5 variables  governed by odes
+      real float_variables(6,nfloats),sensor_data(nsensors,nfloats)
+      real float_parameters(nfloatparams,nfloats),Lz,DGRAD,S1GRAD,xx
+      complex u(locnx,ny+1,nz+1,2),v(locnx,ny+1,nz+1,2)
+      complex w(locnx,ny+1,nz+1,2),s1(locnx,ny+1,nz+1,2)
+      complex s2(locnx,ny+1,nz+1,2)
+      real wnx(locnx),wny(ny+1),wnz(nz+1)
+      real u_fluid,v_fluid,w_fluid,grad2_s1,s1_bar,g2s1b,junk
+      real grad2_s2,s2_bar,g2s2b,eul_s1,eul_s2
+      real u_up,v_up,w_up
+      real phi_1,phi_2,phi_3,phi_4,phi_5,ZMAX,ZMIN,z_up
+      character*80 bc_flag,u_flag,v_flag,w_flag,s1_flag,s2_flag
+      real x0,y0,z0,Pr,Re,PrRe,phi(5),s1_scale,s2_scale
+
+      if( bc_flag .eq. 'zslip' ) then
+       u_flag='c'
+       v_flag='c'
+       w_flag='s'
+       s1_flag='s'
+       s2_flag='s'
+      elseif( bc_flag .eq. 'zperiodic' ) then
+       u_flag='f'
+       v_flag='f'
+       w_flag='f'
+       s1_flag='f'
+       s2_flag='f'
+      endif
+      PrRe=Pr*Re
+      xx=1.
+
+
+c     main loop through all floats
+
+      do i=1,nfloats
+c
+c      evaluate k4 for x,y,z,T_float and rho_lagrangian  i.e. variables 1-5
+c      time evaluated at  t_n-1+2dt (N+1 on Lagrangian time grid), stored in "NM1" 
+c      position evaluated at (x_N + 2*dt*k3)
+c
+       x0 = float_variables(1,i) + 2.*dt*k_rk4(1,i,3)
+       y0 = float_variables(2,i) + 2.*dt*k_rk4(2,i,3)
+       z0 = float_variables(3,i) + 2.*dt*k_rk4(3,i,3)
+
+c      u_fluid <--- u(x0,y0,z0)
+       call ds_interp(x0,y0,z0,u(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                u_flag,u_fluid,myid,comm)
+
+c      v_fluid <--- v(x0,y0,z0)
+       call ds_interp(x0,y0,z0,v(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                v_flag,v_fluid,myid,comm)
+
+c      w_fluid <--- w(x0,y0,z0)
+       call ds_interp(x0,y0,z0,w(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                w_flag,w_fluid,myid,comm)
+
+c      grad2_s1 <--- laplacian s1(x0,y0,z0)
+       call ds_L_interp(x0,y0,z0,s1(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                  s1_flag,grad2_s1,myid,comm)
+       call s1_bar_func(x0,y0,z0,s1_bar,junk,junk,junk,g2s1b,Lz,s1_scale)
+
+       k_rk4(1,i,4) = u_fluid    ! variable 1 = x_float
+       k_rk4(2,i,4) = v_fluid    ! variable 2 = y_float
+       k_rk4(3,i,4) = w_fluid  
+     *              + float_parameters(3,i)   ! variable 3 = z_float
+       k_rk4(4,i,4) = 0.0        ! variable 4 = temperature_float
+       k_rk4(5,i,4) = (1./PrRe)*(grad2_s1+g2s1b) ! variable 5 = Lagrangian density
+
+c
+c      update float_variables, overwrite values
+c
+       phi_1=( k_rk4(1,i,1) + 2.*k_rk4(1,i,2) + 2.*k_rk4(1,i,3) + k_rk4(1,i,4) )/6.
+       phi_2=( k_rk4(2,i,1) + 2.*k_rk4(2,i,2) + 2.*k_rk4(2,i,3) + k_rk4(2,i,4) )/6.
+       phi_3=( k_rk4(3,i,1) + 2.*k_rk4(3,i,2) + 2.*k_rk4(3,i,3) + k_rk4(3,i,4) )/6.
+       phi_4=( k_rk4(4,i,1) + 2.*k_rk4(4,i,2) + 2.*k_rk4(4,i,3) + k_rk4(4,i,4) )/6.
+       phi_5=( k_rk4(5,i,1) + 2.*k_rk4(5,i,2) + 2.*k_rk4(5,i,3) + k_rk4(5,i,4) )/6.
+
+       float_variables(1,i) = float_variables(1,i) + 2.*dt*phi_1  ! x location
+       float_variables(2,i) = float_variables(2,i) + 2.*dt*phi_2  ! y location
+       float_variables(3,i) = float_variables(3,i) + 2.*dt*phi_3  ! z location
+       float_variables(4,i) = float_variables(4,i) + 2.*dt*phi_4  ! float temp.
+       float_variables(5,i) = float_variables(5,i) + 2.*dt*phi_5  ! Lag. density
+       float_variables(6,i) = float_variables(6,i)                ! float density 
+
+c      keep floats away from boundaries: if they end up within a distance
+c      of z_close, move the float to a distance equal to z_close
+
+       ZMAX=1.-float_parameters(2,i)    ! dimensionless
+       ZMIN=float_parameters(2,i)       ! dimensionless
+
+       if( float_variables(3,i) .gt. ZMAX ) then
+        float_variables(3,i)=ZMAX
+       elseif( float_variables(3,i) .lt. ZMIN ) then
+        float_variables(3,i)=ZMIN
+       endif
+     
+c
+c      query sensors at new float locations
+c
+        x0 = float_variables(1,i)    ! time N+1 x position (wrt 2dt time grid)
+        y0 = float_variables(2,i)    ! time N+1 y position (wrt 2dt time grid)
+        z0 = float_variables(3,i)    ! time N+1 z position (wrt 2dt time grid)
+        z_up = z0 + float_parameters(4,i)    
+
+c       eul_s1 <--- s1(x0,y0,z0)  , s1_bar<--- s1_bar(z0) 
+        call ds_interp(x0,y0,z0,s1(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                 s1_flag,eul_s1,myid,comm)
+        call s1_bar_func(x0,y0,z0,s1_bar,junk,junk,junk,g2s1b,Lz,s1_scale)
+c
+c       sensor(1,:) eulerian total s1 at float position
+        sensor_data(1,i) = eul_s1 + s1_bar
+ 
+c       query flow field for density slightly above float position (for ds1dz)
+c       eul_s1 <--- s1(x0,y0,z_up)  , s1_bar<--- rho_bar(z_up) 
+        call ds_interp(x0,y0,z_up,s1(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                 s1_flag,eul_s1,myid,comm)
+        call s1_bar_func(x0,y0,z_up,s1_bar,junk,junk,junk,g2s1b,Lz,s1_scale)
+c
+c       sensor(2,:) eulerian density just above float position
+        sensor_data(2,i) = eul_s1 + s1_bar
+    
+c       eul_s2 <--- s2(x0,y0,z0)  , s2_bar<--- s2_bar(z0) 
+        call ds_interp(x0,y0,z0,s2(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                 s2_flag,eul_s2,myid,comm)
+        call s2_bar_func(x0,y0,z0,s2_bar,junk,junk,junk,g2s2b,Lz,s2_scale)
+c
+c       sensor(6,:) eulerian scalar (1) at float position
+        sensor_data(6,i) = eul_s2 + s2_bar
+ 
+c       query flow field for scalar (2) slightly above float position (for ds2dz)
+c       eul_s2 <--- s2(x0,y0,z_up)  , s2_bar<--- s2_bar(z_up) 
+        call ds_interp(x0,y0,z_up,s2(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                 s2_flag,eul_s2,myid,comm)
+        call s2_bar_func(x0,y0,z_up,s2_bar,junk,junk,junk,g2s2b,Lz,S1GRAD)
+c
+c       sensor(7,:) eulerian density just above float position
+        sensor_data(7,i) = eul_s2 + s2_bar
+
+c       query flow field for velocity slightly above float position (for d/dz)
+c       u_up <--- u(x0,y0,z_up)  
+        call ds_interp(x0,y0,z_up,u(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                 u_flag,u_up,myid,comm)
+c       v_up <--- v(x0,y0,z_up)  
+        call ds_interp(x0,y0,z_up,v(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                 v_flag,v_up,myid,comm)
+c       w_up <--- w(x0,y0,z_up)  
+        call ds_interp(x0,y0,z_up,w(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                 w_flag,w_up,myid,comm)
+
+c
+c       sensor(3-5,:) eulerian (u,v,w) just above float position
+        sensor_data(3,i) = u_up
+        sensor_data(4,i) = v_up
+        sensor_data(5,i) = w_up
+
+      enddo     ! go to next float
+
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/runtime_initialization.h
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/runtime_initialization.h	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/runtime_initialization.h	(revision 6)
@@ -0,0 +1,71 @@
+c***************************************************************
+c     BEGIN RUNTIME INITIALIZATION
+c***************************************************************
+
+
+	if(ny .eq. 0) then
+		num_dims = 2
+	else
+		num_dims = 3
+	endif
+
+      if( myid .eq. 0 ) then
+       write(6,*) ' '
+       write(6,*) ' '
+       write(6,*)'problem_params.h executed via include statement: flow_solve.x'
+      endif
+ 
+      t_write_selective=-999999*dt    ! not implemented yet
+      if(num_dims .eq. 2) then
+       Ly=1.0                         ! 2d calculation, per unit length in y [m]
+       nyplanes=1                     ! parameter ny is zero for 2d xz calcs
+      else
+       nyplanes=ny
+      endif
+
+c     Create specialized data structure for MPI data swaps
+      call create_MPI_data_type(nx,ny,nz,locnx,locnz,twoslice,subslice,myid,comm)
+      call MPI_BARRIER(comm,ierr)
+
+c     Prescribe initial conditions and nondimensionalize variables
+      istart_floats=(t_floats_on-t_start)/dt    ! step to begin float tracking
+      call initialize(u,v,w,s1,s2,ambient_density,u_cplx,v_cplx,w_cplx,s1_cplx,s2_cplx,
+     *                nx,ny,nz,num_dims,efactor,
+     *                Lx,Ly,Lz,dx,dy,dz,U0,DGRAD,s1_scale,s2_scale,rho_0,f,g,kappa_1,kappa_2,nu,
+     *                bc_flag,ifax,ifay,ifaz,trigx,trigy,trigz,wn,
+     *                wnx,wny,wnz,amp,p,T_diss,diss_flag,N,NM1,M,MM1,MM2,step_flag,
+     *                Rot,Ri,Re,Pr_1,Pr_2,istart,iend,i_all,i_selective,i_stat,
+     *                dt,t_start,t_end,t_write_selective,
+     *                t_stat,xt,work(1,1,1,1),work_cplx(1,1,1,8),myid,
+     *                numprocs,locnx,locnz,comm,twoslice,subslice,work(1,1,1,8),
+     *                netcdf_file,nyplanes,force_cplx,force_flag,
+     *                work(1,1,1,2),scalars,beta,ddy_vels,Vg,s1_bar,s2_bar)
+
+
+c     Check accuracy of spectral interpolation:
+c     (a) reproduce initial u(z) profile at x=y=0
+c     i=1  
+c     j=1
+c     if( myid .eq. 0 ) open(1,file='output/interp_check')
+c     do k=1,nz+1
+
+c      dimensionless positions i.e. on gridpoints
+c      x0=(i-1.)*dx/Lz
+c      y0=(j-1.)*dy/Lz
+c      z0=(k-1.)*dz/Lz
+
+c      interpolate to find u on grid points
+c      fcs_flag='c'
+c      call ds_interp(x0,y0,z0,u_cplx(1,1,1,N),wnx,wny,wnz,locnx,ny,nz,
+c    *                fcs_flag,interp_val,myid,comm)
+c      if( myid .eq. 0 ) write(1,*) x0*Lz,y0*Lz,z0*Lz,interp_val*U0
+
+c     enddo
+
+      if( myid .eq. 0 ) write(0,*) 'runtime initialization completed'
+      if( myid .eq. 0 ) write(6,*) 'runtime initialization completed'
+      if( myid .eq. 0 ) close(1)
+
+c***************************************************************
+c     END RUNTIME INITIALIZATION
+c***************************************************************
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/runtime_variables.h
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/runtime_variables.h	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/runtime_variables.h	(revision 6)
@@ -0,0 +1,14 @@
+c     Resolution and decomposition control
+      integer numprocs, nx, ny, nz
+
+      parameter(numprocs=1)
+      parameter(nx=256)
+      parameter(ny=0)              ! set y=0 for 2d problems in xz plane
+      parameter(nz=256)
+
+
+c     Lagrangian float parameters
+      integer nfloats,floats
+      character*80 float_switch
+      parameter(float_switch='off')
+      parameter(nfloats=1)
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/s1_bar_func.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/s1_bar_func.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/s1_bar_func.f	(revision 6)
@@ -0,0 +1,90 @@
+      subroutine s1_bar_func(xprime,yprime,zprime,s1_bar,
+     *                        s1_bar_x,s1_bar_y,s1_bar_z,g2s1b,
+     *                        Lz,s1_scale)
+c
+c     *****input arguments xprime,yprime,zprime are DIMENSIONLESS as are all returned values
+c     (xprime,yprime,zprime):     d'less spatial position
+c     Lz:                         vertical size of computational domain [m]
+c     s1_scale:                   characteristic range of s1 values, used to scale s1
+c                                 units are dimensional, e.g. deg C for s1-->Temp.
+      
+c     *****output variables, these need to be specified in this routine
+c             s1_bar, s1_bar_x, s1_bar_y, s1_bar_z, g2s1b
+c             scalar concentration, and spatial gradients, g2s1b=grad2(s1_bar)   [dimensional units]
+
+      implicit none
+      real xprime,yprime,zprime
+      real Lz,s1_scale
+      real s1_bar,s1_bar_x,s1_bar_y,s1_bar_z,g2s1b
+
+c     local variables: you may need some intermediate variables,
+c                      these need to be explicitly declared here
+      real x,y,z,ans,ansp,ansm,delta_z,delta_x
+
+c     it may be convenient to know the dimensional spatial location (x,y,z) in [m], so we compute it
+      x = xprime*Lz       ! use dimensional value to evaluate formulae
+      y = yprime*Lz       ! use dimensional value to evaluate formulae
+      z = zprime*Lz       ! use dimensional value to evaluate formulae
+
+
+c****    USER CUSTOMIZED CODE SEGMENT STARTS  HERE ************************
+c            scalars='TS' --> s1 = T' and s2 = S'
+
+      delta_z = Lz/10000.    ! [m] (offset for estimating derivs)
+      delta_x = 100.   ! ""
+      
+      ! stay underwater
+      if(z >= Lz-delta_z) z=Lz-delta_z
+      
+      call interp2d(x,z,'T',ans) 
+      call interp2d(x,z+delta_z,'T',ansp)
+      call interp2d(x,z-delta_z,'T',ansm)
+cc      print*,'after call interp2d on z'
+      
+      s1_bar = ans ! [deg C]
+      s1_bar_z = (ansp-ansm)/(2.*delta_z)        ! [deg C/m]
+      g2s1b = (ansp -2.*ans + ansm)/(delta_z**2) ! [deg C/m2]
+      
+      
+      call interp2d(x+delta_x,z,'T',ansp)
+      call interp2d(x-delta_x,z,'T',ansm)
+cc      print*,'after call interp2d on x'
+
+      
+      s1_bar_x = (ansp-ansm)/(2.*delta_x)        ! [deg C/m]
+         
+         
+      s1_bar_y = 0.0                             ! [deg C/m] 
+      
+
+c****    USER DEFINED CODE SEGMENT ENDS HERE ********************************
+
+
+
+
+c***  LEAVE THIS SECTION AS IS, SCALING MUST BE CONSISTENT********************
+c***  WITH THE REST OF THE ALGORITHM  ****************************************
+      s1_bar=s1_bar/(s1_scale)
+      s1_bar_x = s1_bar_x/(s1_scale/Lz)
+      s1_bar_y = s1_bar_y/(s1_scale/Lz)
+      s1_bar_z = s1_bar_z/(s1_scale/Lz)
+      g2s1b = g2s1b/(s1_scale/Lz**2)
+c*****************************************************************************
+c*****************************************************************************
+
+c      print*,'s1_bar interpoled ...'
+      return
+      end
+
+c It may seem odd to have the inputs in dimensionless form
+c when it is usually convenient for the user to define the
+c ambient quantities in dimensional form. Also, we have a
+c **do not touch** section of code that converts the user
+c specified dimensional quantities back to dimensionless form.
+c I chose to do it this way because this function gets called
+c from so many places in the code, it would be a pain and
+c a potential source of typos to do the scalings just before
+c and just after each call. This is not the case with 
+c user_defined_ics and user_defined_forcing. These routines
+c get called in one location only and so it makes sense to
+c make the scaling "invisible" to the user.
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/s2_bar_func.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/s2_bar_func.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/s2_bar_func.f	(revision 6)
@@ -0,0 +1,91 @@
+      subroutine s2_bar_func(xprime,yprime,zprime,s2_bar,
+     *                        s2_bar_x,s2_bar_y,s2_bar_z,g2s2b,
+     *                        Lz,s2_scale)
+c
+c     *****input arguments xprime,yprime,zprime are DIMENSIONLESS as are all returned values
+c     (xprime,yprime,zprime):     d'less spatial position
+c     Lz:                         vertical size of computational domain [m]
+c     s2_scale:                   characteristic range of s2 values, used to scale s2
+c                                 units are dimensional, e.g. psu for s2-->Salinity
+      
+c     *****output variables, these need to be specified in this routine
+c             s2_bar, s2_bar_x, s2_bar_y, s2_bar_z, g2s2b
+c             scalar concentration, and spatial gradients, g2s2b=grad2(s2_bar)   [dimensional units]
+
+      implicit none
+      real xprime,yprime,zprime
+      real Lz,s2_scale
+      real s2_bar,s2_bar_x,s2_bar_y,s2_bar_z,g2s2b
+
+c     local variables: you may need some intermediate variables,
+c                      these need to be explicitly declared here
+      real x,y,z,ans,ansp,ansm,delta_z,delta_x
+
+
+c     it may be convenient to know the dimensional spatial location (x,y,z) in [m], so we compute it
+      x = xprime*Lz       ! use dimensional value to evaluate formulae
+      y = yprime*Lz       ! use dimensional value to evaluate formulae
+      z = zprime*Lz       ! use dimensional value to evaluate formulae
+
+
+c****    USER CUSTOMIZED CODE SEGMENT STARTS  HERE ************************
+c            scalars='TS' --> s2 = T' and s2 = S'
+
+      delta_z = Lz/10000.    ! [m] (offset for estimating derivs)
+      delta_x = 100.   ! ""
+      
+      ! stay underwater
+      if(z >= Lz-delta_z) z=Lz-delta_z
+      
+      call interp2d(x,z,'S',ans) 
+      call interp2d(x,z+delta_z,'S',ansp)
+      call interp2d(x,z-delta_z,'S',ansm)
+      
+      s2_bar = ans ! [psu]
+      s2_bar_z = (ansp-ansm)/(2.*delta_z)        ! [psu/m]
+      g2s2b = (ansp -2.*ans + ansm)/(delta_z**2) ! [psu/m2]
+      
+      
+      call interp2d(x+delta_x,z,'S',ansp)
+      call interp2d(x-delta_x,z,'S',ansm)
+      
+      s2_bar_x = (ansp-ansm)/(2.*delta_x)        ! [psu/m]
+         
+         
+      s2_bar_y = 0.0                             ! [psu/m] 
+      
+
+c****    USER DEFINED CODE SEGMENT ENDS HERE ********************************
+
+
+
+
+c     
+c***  LEAVE THIS SECTION AS IS, SCALING MUST BE CONSISTENT********************
+c***  WITH THE REST OF THE ALGORITHM  ****************************************
+      s2_bar=s2_bar/(s2_scale)
+      s2_bar_x = s2_bar_x/(s2_scale/Lz)
+      s2_bar_y = s2_bar_y/(s2_scale/Lz)
+      s2_bar_z = s2_bar_z/(s2_scale/Lz)
+      g2s2b = g2s2b/(s2_scale/Lz**2)
+c*****************************************************************************
+c*****************************************************************************
+
+c      print*,'s2_bar interpoled ...'
+      return
+      end
+
+
+
+c It may seem odd to have the inputs in dimensionless form
+c when it is usually convenient for the user to define the
+c ambient quantities in dimensional form. Also, we have a
+c **do not touch** section of code that converts the user
+c specified dimenaional quantities back to dimensionless form.
+c I chose to do it this way because this function gets called
+c from so many places in the code, it would be a pain and
+c a potential source of typos to do the scalings just before
+c and just after each call. This is not the case with 
+c user_defined_ics and user_defined_forcing. These routines
+c get called in one location only and so it makes sense to
+c make the scaling "invisible" to the user.
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/user_defined_forcing.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/user_defined_forcing.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/user_defined_forcing.f	(revision 6)
@@ -0,0 +1,91 @@
+      subroutine user_defined_forcing(x,y,z,t,F1,F2,F3,F4,F5,Lx,Ly,Lz,f,g,rho_0)
+
+c********************************************************************************************
+c     User defined subroutine to add time/space dependent forcing to the 
+c     equations of motion. Inputs and outputs for this routine are all
+c     DIMENSIONAL.
+c
+
+c     inputs:
+c            x,y,z       spatial location at which forcing is to be defined, [m]
+c                t       time at which forcing is to be defined              [s]
+c            f,g,rho_0   Coriolis parameter, gravity, reference density [1/s,m/s2,kg/m3]
+
+c     outputs:
+c            F1-3        acceleration at x,y,z & t in x,y,z directions       [m/s2]
+c            F4          rhs of perturbation scalar (s1) eqn                 [(deg C)/s]
+c            F5          rhs of perturbation scalar (s2) eqn                 [(psu)/s]
+c                        careful with F4,F5 you must take into account what you are
+c                        using for s1_bar & s2_bar when you define this term
+c********************************************************************************************
+      implicit none
+      real x,y,z,t,F1,F2,F3,F4,F5
+      real Lx,Ly,Lz,f,g,rho_0
+      real u,v,w,s1,s2
+
+
+c     declare local variables here:
+cpba
+c**************************************************************************
+c**user declares any additional local variables needed here
+      real ambient_density_gradient,pi,arg,c(2,2)
+      real A_ics,k_ics,l_ics,m_ics,N2_ics,omega2,omega_ics
+      real dTdz,dSdz
+      real xfreq
+      real r,sigma1,sigma2,FF,GG
+
+c**************************************************************************
+cpba
+c     These next values are used locally for setting up this example
+c     but are not passed in through the argument list. The IW snapshot,
+c     however, only makes sense however when these values are consistent with
+c     what I'm specifying elsewhere. Thus, there is some redundancy
+c     and also an opportunity to set things up "wrong".
+       pi=4.*atan(1.)
+!       rho_0=1000.                                  ! [kg/m3]
+!       g=9.81                                       ! [m/s2]
+!       f=2.*(2.*pi/(24.*3600.))*sin(pi/4.)          ! [1/s] 45 deg latitude
+       dTdz = 1.4133829e-3                          ! [deg C/m]
+c       dTdz=0.
+       dSdz = 0.0                                   ! [psu/m]
+
+c     Initial conditions are a snapshot of an internal wave in uniform stratification.
+c     The local variable "ambient_density_stratification" is set to be consistent with
+c     the specifications in s1_bar_func.f, s2_bar_func.f via the equation of state.
+       ambient_density_gradient = -3.105172e-4     ! [kg/m4], ---> corresponds to 1 cph
+                                                   ! and to the Temp gradient specified in s1_bar_func.f
+       N2_ics=(-g/rho_0)*ambient_density_gradient  ! [1/s^2]
+
+c      parameter of the body force
+       A_ics=100.                                     ! displacement [m]
+       xfreq=0.80
+
+       arg= xfreq*f*t  ! generally -omega_ics*t but set t=0,
+
+c      enveloppe gaussienne : on divise par 2 / run 1
+
+       sigma1=20000.
+       sigma2=100.
+       
+       FF=exp((-((x-Lx/2)**2))/(sigma1**2))
+       !!! lieu du forcage : au centre ou en surface
+!!!       GG=exp((-((Lz/2-z)**2))/(sigma2**2))    !!!! au centre
+       GG=exp((-((Lz-z)**2))/(sigma2**2))      !!!! en surface
+
+
+       s1=0.
+       s2=0.
+       w = 0.
+       u = -A_ics*xfreq*xfreq*f*f*sin(arg)*FF*GG          ! du/dt
+       v = 0.
+
+
+c     Define rhs values for evolution equations.
+      F1=-u
+      F2=-v
+      F3=-w
+      F4=-s1
+      F5=-s2
+
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/user_defined_ics.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/user_defined_ics.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/user_defined_ics.f	(revision 6)
@@ -0,0 +1,189 @@
+      subroutine user_defined_ics(x,y,z,Lx,Ly,Lz,u,v,w,s1,s2)
+!
+c     inputs 
+c              x,y,z     positions in spatial domain           [m]
+c              Lx,Ly,Lz  domain lengths in x,y,z               [m]
+c     outputs
+c              u,v,w     speeds in x,y,z directions at (x,y,z) [m/s] 
+c              s1        scalar 1,  in this case s1--> rho'    [kg/m3]
+c              s2        scalar 2,  passive, conc. [0,1]       
+c     note:
+c              s1 and s2 are defined relative to the ambient profiles
+c              s1_bar and s2_bar defined in s1_bar_func.f & s2_bar_func.f
+c              There are corresponding quantities rho_bar and perturbation
+c              density pd that are computed via equation_of_state.f and
+c              used internally in the algorithm. They need not be set here.
+
+      implicit none
+      real x,y,z,Lx,Ly,Lz,u,v,w,s1,s2,pi,junk
+c**************************************************************************
+c**user declares any additional local variables needed here
+      real Tval,Sval,Ugeo,Vgeo,DGRAD,s1_scale,s2_scale,s1_bar,s2_bar
+c**************************************************************************
+
+c  set for a surface concentrated jet flowing from W to E
+c  at the mid latitude of the domain
+c  NB  +x ---> N,    +y ---> W       +z  ---> up  w/ z=0 at uniform ocean depth Lz
+
+
+      
+c     use geostrophically balanced horizontal velocity as background
+c     and so set perturbation quantities to zero
+      u = 0.0       ! [m/s]
+      v = 0.0       ! [m/s]
+c     initialize scalar perturbations
+      s1 = 0.0       ! [deg C]
+      s2 = 0.0       ! [psu]
+
+c     no vertical motion
+      w = 0.
+
+      return
+      end
+
+
+c=================================================================
+
+      subroutine interp2d(x_star, z_star, id, ans)
+
+      implicit none
+      character*1 id
+      integer im,ip,km,kp
+      real ans,dx,dz,gamma
+      real data2D(2,2),data1D(2)
+      
+     
+      
+c     Extra variables added for POMME initial conditions and forcing
+c     each processor will read/store the global data
+#include "pomme.h"     
+      real x_star, y_star, z_star, w(m1,m3)
+
+c     use periodicity to work in [0,Lx]      
+      if(x_star<0) x_star=x_star+L_x
+      if(x_star>L_x) x_star=x_star-L_x
+      
+!==================================================================
+
+      if(id == 'T') then
+       w = Temperature
+      elseif(id == 'S') then
+       w = Salinity
+      elseif(id == 'V') then
+       w = Vgeo
+      else
+       write(0,*) 'What field are you trying to interpolate? you said ',id
+       stop
+      endif
+     
+!     because this data set is equally spaced in x it is easy
+!     to determine the bounding indices, so do it explicitly here
+      dx = xi(2)-xi(1)
+      im = floor( x_star/dx ) + 1
+      ip = im + 1
+
+!     zi and zi_geo are irregularly spaced, use binary search
+      if( id == 'V') then
+       call find_neighbors_1d(zi_geo,m3,z_star,km,kp)
+!       write(0,*) 'z interp data: ', id,km,kp,zi_geo(km),z_star,zi_geo(kp)
+      else
+!       print*,'call find_neighbors_1d'  
+!       write(0,*) 'z interp data: id=',id
+       call find_neighbors_1d(zi,m3,z_star,km,kp)
+      endif
+      
+!     surrounding points
+      data2D(1,1) = w(im,km)
+      data2D(1,2) = w(im,kp)
+      data2D(2,1) = w(ip,km)
+      data2D(2,2) = w(ip,kp)
+     
+! interp in z first
+      if( id == 'V') then
+       dz = zi_geo(kp) - zi_geo(km)
+       gamma = (z_star - zi_geo(km) )/dz
+      else
+       dz = zi(kp) - zi(km)
+       gamma = (z_star - zi(km) )/dz
+      endif
+      data1D = (gamma)*data2D(:,2) + (1-gamma)*data2D(:,1)
+      
+! interp in x to get ans
+      gamma = (x_star - xi(im) )/dx
+      ans = (1.-gamma)*data1D(1) + (gamma)*data1D(2)
+      return
+
+      end subroutine interp2d
+
+!==============================================================
+      subroutine find_neighbors_1d(y, n_eta, y_star, eta_lt_nbr, eta_rt_nbr)
+
+      real y(n_eta), y_star
+      integer n_eta, eta_lt_nbr, eta_rt_nbr, ix, increment 
+      
+      ! the shifted Vgeo depth grid doesn't quite reach the surface
+      if( y_star .gt. y(n_eta) ) y_star=y(n_eta)
+      
+
+      if( y_star .eq. y(1) ) then
+       eta_lt_nbr = 1
+	   eta_rt_nbr = eta_lt_nbr + 1
+	   return
+      elseif( y_star .eq. y(n_eta) ) then
+       eta_lt_nbr = n_eta-1
+	   eta_rt_nbr = n_eta
+	   return
+	  elseif( y_star < y(1) ) then
+	   write(0,*) ' z_star < zi(1) ERROR in find_neighbors_1d '
+	   stop
+      endif
+
+ 
+      increment = n_eta / 2
+      ix_eta = increment
+      do
+	   increment = increment / 2
+
+!          print*,'boucle increment.., increment=',increment
+
+	  if(y(ix_eta) .lt. y_star) then
+		if(increment .eq. 0) then
+			eta_lt_nbr = ix_eta
+			eta_rt_nbr = ix_eta + 1
+			goto 300
+		else
+			ix_eta = ix_eta + increment
+		endif
+	  else if(y(ix_eta) .gt. y_star) then
+		if(increment .eq. 0) then
+			eta_rt_nbr = ix_eta
+			eta_lt_nbr = ix_eta - 1
+			goto 300
+		else
+			ix_eta = ix_eta - increment
+		endif
+          else if( y(ix_eta) .eq. y_star ) then 
+!             PRINT*,'  PROBLEME CAS NON PREVU DANS LE CODE !!! '
+!             PRINT*,'  MODIFICATION POUR FORCER LE PASSAGE...  '
+             eta_rt_nbr = ix_eta
+             eta_lt_nbr = ix_eta + 1
+             goto 300
+	  end if 
+      end do
+
+300   continue
+
+      if(y_star .lt. y(eta_lt_nbr)  ) then
+       eta_lt_nbr=1
+       eta_rt_nbr=eta_lt_nbr+1
+      elseif( y_star .gt. y(eta_rt_nbr)) then
+       eta_rt_nbr=n_eta
+       eta_lt_nbr=eta_rt_nbr-1
+      endif
+ 
+!       write(0,*) 'z interp data: ', y, n_eta, y_star, eta_lt_nbr, eta_rt_nbr
+
+
+      return
+      end 
+
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/variable_declarations.h
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/variable_declarations.h	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/variable_declarations.h	(revision 6)
@@ -0,0 +1,105 @@
+c===============================================================
+c     ARRAY ALLOCATION AND VARIABLE DECLARATIONS
+c===============================================================
+
+#include "mpif.h"
+
+      real beta   
+
+      integer locnx,locnz,nwork
+      parameter(locnz=nz/numprocs,locnx=(nx/2)/numprocs)
+      parameter(nwork=(nx+2)*(ny+1)*(locnz+1))   
+
+c     Physical space dependent variables: time t_n
+      real u(nx+2,ny+1,locnz+1),v(nx+2,ny+1,locnz+1)
+      real w(nx+2,ny+1,locnz+1),pd(nx+2,ny+1,locnz+1)
+      real s1(nx+2,ny+1,locnz+1),s2(nx+2,ny+1,locnz+1)
+      real ambient_density(nx+2,ny+1,locnz+1)
+ 
+c     Wavenumber space dependent variables: times t_n, t_n-1
+      complex u_cplx(locnx,ny+1,nz+1,2),v_cplx(locnx,ny+1,nz+1,2)
+      complex w_cplx(locnx,ny+1,nz+1,2),s1_cplx(locnx,ny+1,nz+1,2)
+      complex s2_cplx(locnx,ny+1,nz+1,2)
+ 
+c     3 copies of transfer terms: t_n, t_n-1, t_n-2
+      complex Tr1(locnx,ny+1,nz+1,3),Tr2(locnx,ny+1,nz+1,3)
+      complex Tr3(locnx,ny+1,nz+1,3),Tr4(locnx,ny+1,nz+1,3)
+      complex Tr5(locnx,ny+1,nz+1,3)
+ 
+c     Fourier amplitudes of forcing waves (if force_flag=yesFourier)
+      complex force_cplx(locnx,ny+1,nz+1)
+
+c     Scratch arrays for temporary storage
+      real work(nx+2,ny+1,locnz+1,14)
+      complex work_cplx(locnx,ny+1,nz+1,14)
+      real scratch(nwork)
+      real sponge(nx+2,ny+1,locnz+1,5)    ! <--------  EXTRA FOR SPONGE LAYERS
+
+c     Wavenumber arrays and integrating factors
+      real wnx(locnx),wny(ny+1),wnz(nz+1)
+      real amp(locnx,ny+1,nz+1,3)
+ 
+c     Trigonometric and FFT related auxilliary arrays/variables 
+      real trigx(3*(nx+2)/2+1),trigy(2*(ny+1)),trigz(2*nz)
+      complex wn(nz/4+1),xt(nx+2, nz/2+1)
+      integer ifax(13),ifay(13),ifaz(13),itrig
+      character tswitch
+
+c     Storage for float variables    
+c     1-3: x,y,z  4: T_float  5: rho_lagrangian  6: rho_float
+      integer nsensors,nfloatparameters,num_dims
+      parameter(nsensors=7)
+      parameter(nfloatparameters=4)
+      real float_variables(6,nfloats)
+ 
+c     Data from float sensors
+      real sensor_data(nsensors,nfloats)
+ 
+c     Parameters describing float properties
+      real float_parameters(nfloatparameters,nfloats)
+      real z_close,z_offset,delta_w
+ 
+c     Work space for RK4 method
+      real k_rk4(5,nfloats,4)  ! 5 variables governed by odes, 4th order
+ 
+c     Dimensionless parameters appearing in scaled eqns of motion
+      real Rot,Ri,Re,Pr_1,Pr_2
+
+c     Misc. real-valued scalars
+      real Lx,Ly,Lz,dx,dy,dz,U0,DGRAD,s1_scale,s2_scale,rho_0,f,g,kappa_1,kappa_2,nu,kmax
+      real pi,latitude,xOmega,bfreq,dt,t_start,t_end
+      real t_write_selective,t_stat,t_floats_on
+      real time,time_scale,delta_u,delta_rho,z_0,h_0,k_0,a,b,c
+      real x0,y0,z0,interp_val,efactor,T_diss
+      complex  cmplxi
+
+c     Misc. integer-valued scalars
+      integer i,j,k,istep,nyplanes,istart_floats,N,NM1,M,MM1,MM2
+      integer istart,iend,i_all,i_selective,i_stat,tmp,j_float_time
+      integer subslice,twoslice,comm,status,myid,iproc,nprocs,ierr,p,iswitch
+
+c     Character variables
+      character*80 bc_flag,step_flag,prelim_flag,fcs_flag
+      character*80 diss_flag,pressure_flag,force_flag
+      character*3  vort_flag
+      character*32 rootname 
+      character*80 netcdf_file
+      character*2 scalars       ! TS, TP, RP, R0, PP
+      
+c     Extra variables added for POMME initial conditions and forcing
+c     each processor will read/store the global data
+#include "pomme.h"
+     
+      real xlatit
+
+c     Extra variables associated with expansion about geostrophic state
+      real ddy_vels(nx+2,ny+1,locnz+1,3), Vg(nx+2,locnz+1,3)
+      real s1_bar(nx+2,locnz+1,4), s2_bar(nx+2,locnz+1,4)
+      
+      integer start3D(3),count3D(3)
+
+      pi=4.*atan(1.)
+
+c=================================================================
+c		END OF VARIABLE DECLARATIONS
+c=================================================================
Index: /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/write_netcdf.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/write_netcdf.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/BETA_PLANE/POMME/write_netcdf.f	(revision 6)
@@ -0,0 +1,526 @@
+      subroutine write_netcdf(start3D,count3D,u,v,w,s1,s2,hold3D,
+     *            vort_x,vort_y,vort_z,Lx,Ly,length_scale,
+     *            nx,ny,nyplanes,nz,locnx,locnz,myid,numprocs,istep,
+     *            velocity_scale,s1_scale,s2_scale,rho_0,bc_flag,vort_flag,
+     *            pressure_flag,rootname,Xs1_bar,Xs2_bar,Vg)
+ 
+c     if pressure_flag = 'do_pressure_only' then the u field actually
+c     contains dimensionless pressure, otherwise ignore pressure
+
+      implicit none
+#include "netcdf.inc"
+
+      integer nx,ny,nz,locnx,locnz,myid,numprocs,istep
+      real velocity_scale,density_scale,Lx,Ly,length_scale,rho_0
+      real u(nx+2,ny+1,locnz+1),v(nx+2,ny+1,locnz+1),w(nx+2,ny+1,locnz+1)
+      real s1(nx+2,ny+1,locnz+1)
+      real s2(nx+2,ny+1,locnz+1)
+      real vort_x(nx+2,ny+1,locnz+1),vort_y(nx+2,ny+1,locnz+1)
+      real vort_z(nx+2,ny+1,locnz+1),Vg(nx+2,locnz+1,1)
+      character*80 bc_flag,pressure_flag
+      character*80 err_msg
+      character*32 rootname
+ 
+c Define local variables
+      integer i,j,k,b1,nyplanes,nycount
+      character*6 cnum
+      character*3 cid,vort_flag
+      character*80 filename
+      integer ncid,rcode   
+      real dx,dy,dz,x,y,z,Lz
+
+c 4D Variables    (3 space + time)
+      integer s1VarID,s2VarID,uVarID,vVarID,pVarID
+      integer vort_xVarID,vort_yVarID,vort_zVarID
+      integer wVarID                 ! 4D Variable ids
+      integer start4D(4),count4D(4),netcdf4D(4)  ! 4D arrays containing variables size
+      integer start3D(3),count3D(3)
+
+c Arrays for holding data
+c     real hold3D(nx,nyplanes,locnz+1)  ! 3D tmp array
+      real hold3D(count3D(1),count3D(2),count3D(3)+1)  ! 3D tmp array
+      real s1_bar,s2_bar,junk
+      real s1_scale, s2_scale
+      real Xs1_bar(nx+2,locnz+1,4), Xs2_bar(nx+2,locnz+1,4)
+
+      integer dim_count, counter
+      character c_dim_count
+
+      integer data_start, data_stop, data_count, slice_start, slice_stop
+      integer l,m,n,o
+
+      real hxm,hxp,hzm,hzp
+      integer indic
+
+
+c Determine number of y planes
+      if( ny .eq. 0 ) then
+       nycount=1
+      else
+       nycount=count3D(2)
+      endif
+
+
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+c brens code for figuring out where data reporting begins and ends 
+c with respect to the current data slice in the z direction.
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+c determine number of z grid points
+      data_start = start3D(3)
+      data_stop = start3D(3) + count3D(3) - 1
+      
+      slice_start = myid * locnz + 1
+      slice_stop = ((myid + 1) * locnz)
+
+      if(bc_flag .eq. 'zslip' .and. myid .eq. numprocs-1) slice_stop = slice_stop + 1
+
+c	cases: "Excluded above" and "Excluded below". No data to be printed
+c	from this slice.
+      if((data_start .gt. slice_stop) .or. (data_stop .lt. slice_start))
+     &  return
+
+      if(data_start .ge. slice_start) then
+
+c	case: "contained within"
+        if(data_stop .le. slice_stop) then
+c	  do nothing in this case. data_start and data_stop are already
+c	  exactly what they should be.
+
+c	case: "start inside"
+        else
+          data_stop = slice_stop
+        endif
+      else
+
+c	case: "ends inside"
+        if(data_stop .le. slice_stop) then
+          data_start = slice_start
+
+c	case: "includes"
+        else
+          data_start = slice_start
+          data_stop = slice_stop
+        endif
+      endif
+
+      data_count = data_stop - (data_start - 1)
+
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+
+      Lz=length_scale
+      dx=Lx/float(nx)
+      dy=Ly/float(nyplanes)
+      dz=Lz/float(nz)
+
+        dim_count  =  0
+        do i = 1, 3
+            if(count3D(i) .gt. 1) then
+                dim_count = dim_count + 1
+            endif
+        enddo
+
+c       Create the filename
+        write(unit = cnum, fmt = 100) istep
+100         format(I6.6)
+        write(unit = cid, fmt = 101) myid
+101         format(I3.3)
+        write(unit = c_dim_count, fmt = 102) dim_count
+102         format(I1.1)
+
+        counter = 0
+        do i = 1, 32
+          if(rootname(i:i) .eq. ' ')then
+            exit
+          endif
+            counter = counter + 1
+        enddo
+
+        if(numprocs .gt. 1) then
+            filename = 'output/'//c_dim_count//'D/'//rootname(1:counter)
+     &                 //'_'//cnum//'_'//cid
+	else
+            filename = 'output/'//c_dim_count//'D/'//rootname(1:counter)
+     &                 //'_'//cnum
+        endif
+
+
+c Each processor opens netcdf file and gets variable id's.
+      if( myid .eq. 0 .and. pressure_flag .ne. 'do_pressure_only' ) then
+       write(0,*)'Writing simulation data to file: ' , filename
+      endif
+
+      rcode=NF_OPEN(filename,NF_WRITE,ncid)
+      if(rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR OPENING FILE in write3D_mpi_netcdf: ',rcode,filename
+
+      if( pressure_flag .ne. 'do_pressure_only' ) then
+
+       rcode=NF_INQ_VARID(ncid,'s1Var',s1VarID)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR INQ_VARID -> s1Var: ',rcode
+
+       rcode=NF_INQ_VARID(ncid,'s2Var',s2VarID)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR INQ_VARID -> s2Var: ',rcode
+
+       rcode=NF_INQ_VARID(ncid,'uVar',uVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR INQ_VARID -> uVar: ',rcode
+
+       rcode=NF_INQ_VARID(ncid,'vVar',vVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR INQ_VARID -> vVar: ',rcode
+
+       rcode=NF_INQ_VARID(ncid,'wVar',wVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR INQ_VARID -> wVar: ',rcode
+ 
+       if( vort_flag .eq. 'yes' ) then       
+        rcode=NF_INQ_VARID(ncid,'vort_xVar',vort_xVarID)
+        if (rcode.ne.NF_NOERR) print *,myid,
+     &    'NetCDF ERROR INQ_VARID -> vort_xVar: ',rcode
+        
+        rcode=NF_INQ_VARID(ncid,'vort_yVar',vort_yVarID)
+        if (rcode.ne.NF_NOERR) print *,myid,
+     &    'NetCDF ERROR INQ_VARID -> vort_yVar: ',rcode
+        
+        rcode=NF_INQ_VARID(ncid,'vort_zVar',vort_zVarID)
+        if (rcode.ne.NF_NOERR) print *,myid,
+     &    'NetCDF ERROR INQ_VARID -> vort_zVar: ',rcode
+       endif
+        
+      elseif( pressure_flag .eq. 'do_pressure_only' ) then
+
+       rcode=NF_INQ_VARID(ncid,'pVar',pVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR INQ_VARID -> pVar: ',rcode
+
+      endif
+ 
+c     Write 4D data to netcdf file. *******************************
+
+c     Specify start and endpoints for each processor's local data.
+      start4D(1) = start3D(1)
+      start4D(2) = start3D(2)
+      start4D(3) = data_start
+      start4D(4) = 1
+      count4D(1) = count3D(1)
+      count4D(2) = nycount
+      count4D(3) = data_count
+      count4D(4) = 1
+
+      netcdf4D(1) = 1
+      netcdf4D(2) = 1
+      netcdf4D(3) = 1
+      netcdf4D(4) = 1
+
+c      print*,'AVANT APPEL S1_BAR_FUNC...'
+
+      if( pressure_flag .ne. 'do_pressure_only' ) then
+
+c     Scalar 1 (Temp.) in dimensional units.
+       do i=start4D(1), start4D(1) + count4D(1) - 1
+        x=(i-1.)*dx/length_scale
+        do j=start4D(2), start4D(2) + count4D(2) - 1
+         y=(j-1.)*dy/length_scale
+         do k=start4D(3), start4D(3) + count4D(3) - 1
+          z=(k-1.)*dz/length_scale
+          
+c          s1_bar = Xs1_bar(i,k,1)
+          
+          
+         call s1_bar_func(x,y,z,s1_bar,junk,junk,junk,junk,
+     &                      Lz,s1_scale)
+
+          l = i - start4D(1) + 1
+          m = j - start4D(2) + 1
+          n = k - start4D(3) + 1
+          o = k - slice_start + 1
+          indic=0
+
+          hold3D(l,m,n) = (s1(i,j,o)+s1_bar)*s1_scale
+
+!          if ( i == start4D(1) .and. j == start4D(2) ) then
+!          print*,'Xs1_bar,  s1_bar=',s1_bar,'s1(i,j,o)=',s1(i,j,o)
+!     &       ,' hold3D(l,m,n)=',hold3D(l,m,n)
+!          endif
+          if ( hold3D(l,m,n) > 100 .or.  hold3D(l,m,n) < -10 ) then
+              print*,' VALEURS ELEVEES !!!'
+              print*,i,j,k,hold3D(l,m,n)
+              !!STOP
+              if ( i .gt. start4D(1) ) then
+                       hxm=hold3D(l-1,m,n)
+                       indic=indic+1
+              else
+                       hxm=0. 
+              endif
+              if ( i .lt. start4D(1) + count4D(1) - 1 ) then
+                       hxp=hold3D(l+1,m,n)
+                       indic=indic+1
+              else
+                       hxp=0.
+              endif
+              if ( k .gt. start4D(3) ) then
+                       hzm=hold3D(l,m,n-1)
+                       indic=indic+1
+              else
+                       hzm=0.
+              endif
+              if ( k .lt. start4D(3) + count4D(3) - 1 ) then
+                       hzp=hold3D(l,m,n+1)
+                       indic=indic+1
+              else
+                       hzp=0.
+              endif
+              hold3D(l,m,n)=(hxm+hxp+hzm+hzp)/indic
+              if ( hold3D(l,m,n) > 100 .or.  hold3D(l,m,n) < -10 ) then
+                 print*,' VALEURS ERRONEES  !!!'
+                 print*,i,j,k,hold3D(l,m,n)
+                 STOP
+              endif
+          endif 
+
+         enddo
+        enddo
+       enddo
+
+c       print*,'APRES APPEL S1_BAR_FUNC...'
+
+c      Each processor writes its local data to 
+c      the appropriate locations in the netcdf file.
+       rcode=NF_PUT_VARA_REAL(ncid,s1VarID,netcdf4D,count4D,hold3D)
+       if(rcode.ne.NF_NOERR) then
+        print *,myid,'NetCDF ERROR: PUT_VARA_REAL scalar (1)',rcode
+        err_msg=NF_STRERROR(rcode)
+        print*,myid, err_msg
+       endif
+
+c       print*,'AVANT APPEL S2_BAR_FUNC...'
+
+c     Scalar 2  (Salinity) in dimensional units.
+       do i=start4D(1), start4D(1) + count4D(1) - 1
+        x=(i-1.)*dx/length_scale
+        do j=start4D(2), start4D(2) + count4D(2) - 1
+         y=(j-1.)*dy/length_scale
+         do k=start4D(3), start4D(3) + count4D(3) - 1
+          z=(k-1.)*dz/length_scale
+          
+c          s2_bar = Xs2_bar(i,k,1)
+          
+         call s2_bar_func(x,y,z,s2_bar,junk,junk,junk,junk,
+     &                      Lz,s2_scale)
+
+          l = i - start4D(1) + 1
+          m = j - start4D(2) + 1
+          n = k - start4D(3) + 1
+          o = k - slice_start + 1
+          indic=0
+
+          hold3D(l,m,n) = (s2(i,j,o)+s2_bar)*s2_scale
+
+!          if ( i == start4D(1) .and. j == start4D(2) ) then 
+!          print*,'Xs2_bar,  s2_bar=',s2_bar,'s2(i,j,o)=',s2(i,j,o)
+!     &       ,' hold3D(l,m,n)=',hold3D(l,m,n)
+!          endif
+          if ( hold3D(l,m,n) > 100 .or.  hold3D(l,m,n) < -10 ) then
+              print*,' VALEURS ELEVEES !!!'
+              print*,i,j,k,hold3D(l,m,n)
+              !!!!STOP
+              if ( i .gt. start4D(1) ) then
+                       hxm=hold3D(l-1,m,n)
+                       indic=indic+1
+              else
+                       hxm=0.
+              endif
+              if ( i .lt. start4D(1) + count4D(1) - 1 ) then
+                       hxp=hold3D(l+1,m,n)
+                       indic=indic+1
+              else
+                       hxp=0.
+              endif
+              if ( k .gt. start4D(3) ) then
+                       hzm=hold3D(l,m,n-1)
+                       indic=indic+1
+              else
+                       hzm=0.
+              endif
+              if ( k .lt. start4D(3) + count4D(3) - 1 ) then
+                       hzp=hold3D(l,m,n+1)
+                       indic=indic+1
+              else
+                       hzp=0.
+              endif
+              hold3D(l,m,n)=(hxm+hxp+hzm+hzp)/indic
+              if ( hold3D(l,m,n) > 100 .or.  hold3D(l,m,n) < -10 ) then
+                 print*,' VALEURS ERRONEES !!!'
+                 print*,i,j,k,hold3D(l,m,n)
+                 STOP
+              endif
+          endif
+
+         enddo
+        enddo
+       enddo
+
+c       print*,'APRES APPEL S2_BAR_FUNC...'
+
+c      Each processor writes its local data to 
+c      the appropriate locations in the netcdf file.
+       rcode=NF_PUT_VARA_REAL(ncid,s2VarID,netcdf4D,count4D,hold3D)
+       if(rcode.ne.NF_NOERR) then
+        print *,myid,'NetCDF ERROR: PUT_VARA_REAL scalar (2)',rcode
+        err_msg=NF_STRERROR(rcode)
+        print*,myid, err_msg
+       endif
+
+c     u velocity component in dimensional units.
+       do i=start4D(1), start4D(1) + count4D(1) - 1
+        do j=start4D(2), start4D(2) + count4D(2) - 1
+         do k=start4D(3), start4D(3) + count4D(3) - 1
+          l = i - start4D(1) + 1
+          m = j - start4D(2) + 1
+          n = k - start4D(3) + 1
+          o = k - slice_start + 1
+          hold3D(l,m,n) = (u(i,j,o))*velocity_scale
+         enddo
+        enddo
+       enddo
+
+c      Each processor writes its local data to 
+c      the appropriate locations in the netcdf file.
+       rcode=NF_PUT_VARA_REAL(ncid,uVarID,netcdf4D,count4D,hold3D)
+       if(rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR: PUT_VARA_REAL u',rcode
+
+c      v velocity component in dimensional units.
+       do i=start4D(1), start4D(1) + count4D(1) - 1
+        do j=start4D(2), start4D(2) + count4D(2) - 1
+         do k=start4D(3), start4D(3) + count4D(3) - 1
+          l = i - start4D(1) + 1
+          m = j - start4D(2) + 1
+          n = k - start4D(3) + 1
+          o = k - slice_start + 1
+ccc          hold3D(l,m,n) = (v(i,j,o) + Vg(i,o,1))*velocity_scale
+             hold3D(l,m,n) = (v(i,j,o))*velocity_scale
+         enddo
+        enddo
+       enddo
+
+c      Each processor writes its local data to 
+c      the appropriate locations in the netcdf file.
+       rcode=NF_PUT_VARA_REAL(ncid,vVarID,netcdf4D,count4D,hold3D)
+       if(rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR: PUT_VARA_REAL v',rcode
+
+c      w velocity component in dimensional units.
+       do i=start4D(1), start4D(1) + count4D(1) - 1
+        do j=start4D(2), start4D(2) + count4D(2) - 1
+         do k=start4D(3), start4D(3) + count4D(3) - 1
+          l = i - start4D(1) + 1
+          m = j - start4D(2) + 1
+          n = k - start4D(3) + 1
+          o = k - slice_start + 1
+          hold3D(l,m,n) = (w(i,j,o))*velocity_scale
+         enddo
+        enddo
+       enddo
+
+c      Each processor writes its local data to 
+c      the appropriate locations in the netcdf file.
+       rcode=NF_PUT_VARA_REAL(ncid,wVarID,netcdf4D,count4D,hold3D)
+       if(rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR PUT_VARA_REAL: w ',rcode
+
+
+      if( vort_flag .eq. 'yes' ) then       
+c      x vorticity in dimensional units.
+       do i=start4D(1), start4D(1) + count4D(1) - 1
+        do j=start4D(2), start4D(2) + count4D(2) - 1
+         do k=start4D(3), start4D(3) + count4D(3) - 1
+          l = i - start4D(1) + 1
+          m = j - start4D(2) + 1
+          n = k - start4D(3) + 1
+          o = k - slice_start + 1
+          hold3D(l,m,n) = (vort_x(i,j,o))*velocity_scale/length_scale
+         enddo
+        enddo
+       enddo
+
+c      Each processor writes its local data to 
+c      the appropriate locations in the netcdf file.
+       rcode=NF_PUT_VARA_REAL(ncid,vort_xVarID,netcdf4D,count4D,hold3D)
+       if(rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR PUT_VARA_REAL: vort_x ',rcode
+
+
+c      y vorticity in dimensional units.
+       do i=start4D(1), start4D(1) + count4D(1) - 1
+        do j=start4D(2), start4D(2) + count4D(2) - 1
+         do k=start4D(3), start4D(3) + count4D(3) - 1
+          l = i - start4D(1) + 1
+          m = j - start4D(2) + 1
+          n = k - start4D(3) + 1
+          o = k - slice_start + 1
+          hold3D(l,m,n) = (vort_y(i,j,o))*velocity_scale/length_scale
+         enddo
+        enddo
+       enddo
+
+c      Each processor writes its local data to 
+c      the appropriate locations in the netcdf file.
+       rcode=NF_PUT_VARA_REAL(ncid,vort_yVarID,netcdf4D,count4D,hold3D)
+       if(rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR PUT_VARA_REAL: vort_y ',rcode
+
+c      z vorticity in dimensional units.
+       do i=start4D(1), start4D(1) + count4D(1) - 1
+        do j=start4D(2), start4D(2) + count4D(2) - 1
+         do k=start4D(3), start4D(3) + count4D(3) - 1
+          l = i - start4D(1) + 1
+          m = j - start4D(2) + 1
+          n = k - start4D(3) + 1
+          o = k - slice_start + 1
+          hold3D(l,m,n) = (vort_z(i,j,o))*velocity_scale/length_scale
+         enddo
+        enddo
+       enddo
+
+c      Each processor writes its local data to 
+c      the appropriate locations in the netcdf file.
+       rcode=NF_PUT_VARA_REAL(ncid,vort_zVarID,netcdf4D,count4D,hold3D)
+       if(rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR PUT_VARA_REAL: vort_z ',rcode
+      endif ! end vort_flag = 'yes' logic
+
+      elseif( pressure_flag .eq. 'do_pressure_only' ) then
+
+c      pressure in dimensional units. ( pressure stored in u array )
+       do i=start4D(1), start4D(1) + count4D(1) - 1
+        do j=start4D(2), start4D(2) + count4D(2) - 1
+         do k=start4D(3), start4D(3) + count4D(3) - 1
+          l = i - start4D(1) + 1
+          m = j - start4D(2) + 1
+          n = k - start4D(3) + 1
+          o = k - slice_start + 1
+          hold3D(l,m,n) = (u(i,j,o))*rho_0*velocity_scale**2
+         enddo
+        enddo
+       enddo
+
+c      Each processor writes its local data to 
+c      the appropriate locations in the netcdf file.
+       rcode=NF_PUT_VARA_REAL(ncid,pVarID,netcdf4D,count4D,hold3D)
+       if(rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR PUT_VARA_REAL: pressure ',rcode
+
+      endif
+
+c      print*,'FIN WRITE_NETCDF... '
+
+c      Each processor closes the netcdf file.
+       rcode=NF_CLOSE(ncid)
+       if(rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR: closing file in write3D_mpi_netcdf',rcode
+
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/Makefile
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/Makefile	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/Makefile	(revision 6)
@@ -0,0 +1,126 @@
+##############################################
+include system.mk
+
+# all makefile variables used below are defined in
+# sources.mk.  sources.mk is generated by
+# spectral_model/setup.
+
+##############################################
+all:	flow_solve.x
+
+flow_solve.o: flow_solve.f problem_params.h \
+variable_declarations.h runtime_initialization.h \
+runtime_variables.h init_write_netcdf.h \
+trans_write_netcdf.h
+	$(FC) $(FFLAGS)  -c flow_solve.f 
+
+initialize.o: initialize.f
+	$(FC) $(FFLAGS)  -c initialize.f
+
+initialize_floats.o: initialize_floats.f
+	$(FC) $(FFLAGS)  -c initialize_floats.f
+
+add_noise.o: add_noise.f
+	$(FC) $(FFLAGS)  -c add_noise.f
+
+initialize_user_fforcing.o: initialize_user_fforcing.f
+	$(FC) $(FFLAGS)  -c initialize_user_fforcing.f
+
+add_fforcing.o: add_fforcing.f
+	$(FC) $(FFLAGS)  -c add_fforcing.f
+
+zufall.o: zufall.f 
+	$(FC) $(FFLAGS)  -c zufall.f
+
+create_mpi_data_type.o: create_mpi_data_type.f 
+	$(FC) $(FFLAGS)  -c create_mpi_data_type.f
+
+user_defined_ics.o: user_defined_ics.f
+	$(FC) $(FFLAGS)  -c user_defined_ics.f
+
+s1_bar_func.o: s1_bar_func.f
+	$(FC) $(FFLAGS)  -c s1_bar_func.f
+
+s2_bar_func.o: s2_bar_func.f
+	$(FC) $(FFLAGS)  -c s2_bar_func.f
+
+slabs_to_columns.o: slabs_to_columns.f 
+	$(FC) $(FFLAGS)  -c slabs_to_columns.f
+
+columns_to_slabs.o: columns_to_slabs.f 
+	$(FC) $(FFLAGS)  -c columns_to_slabs.f
+
+transform3d.o: transform3d.f 
+	$(FC) $(FFLAGS)  -c transform3d.f
+
+cfft99.o: cfft99.f 
+	$(FC) $(FFLAGS)  -c cfft99.f
+
+ds_interp.o: ds_interp.f 
+	$(FC) $(FFLAGS)  -c ds_interp.f
+
+vort_fcs.o: vort_fcs.f 
+	$(FC) $(FFLAGS)  -c vort_fcs.f
+
+fill_wave_vectors.o: fill_wave_vectors.f 
+	$(FC) $(FFLAGS)  -c fill_wave_vectors.f
+
+ifft.o: ifft.f 
+	$(FC) $(FFLAGS)  -c ifft.f
+
+energetics.o: energetics.f 
+	$(FC) $(FFLAGS)  -c energetics.f
+
+nonlin.o: nonlin.f 
+	$(FC) $(FFLAGS)  -c nonlin.f
+
+add_forcing.o: add_forcing.f 
+	$(FC) $(FFLAGS)  -c add_forcing.f
+
+user_defined_forcing.o: user_defined_forcing.f 
+	$(FC) $(FFLAGS)  -c user_defined_forcing.f
+
+fft.o: fft.f 
+	$(FC) $(FFLAGS)  -c fft.f
+
+step.o: step.f 
+	$(FC) $(FFLAGS)  -c step.f
+
+rhs.o: rhs.f 
+	$(FC) $(FFLAGS)  -c rhs.f
+
+rk4_even.o: rk4_even.f 
+	$(FC) $(FFLAGS)  -c rk4_even.f
+
+rk4_odd.o: rk4_odd.f 
+	$(FC) $(FFLAGS)  -c rk4_odd.f
+
+write_floats_nc3.o: write_floats_nc3.f 
+	$(FC) $(FFLAGS)  -c write_floats_nc3.f
+
+init_netcdf.o: init_netcdf.f 
+	$(FC) $(FFLAGS)  -c init_netcdf.f
+
+write_netcdf.o: write_netcdf.f 
+	$(FC) $(FFLAGS)  -c write_netcdf.f
+
+equation_of_state.o: equation_of_state.f
+	$(FC) $(FFLAGS) -c equation_of_state.f
+##################################################
+
+flow_solve.x: flow_solve.o initialize.o initialize_user_fforcing.o initialize_floats.o add_noise.o \
+zufall.o create_mpi_data_type.o user_defined_ics.o add_fforcing.o s1_bar_func.o \
+s2_bar_func.o slabs_to_columns.o columns_to_slabs.o transform3d.o cfft99.o \
+ds_interp.o vort_fcs.o fill_wave_vectors.o ifft.o energetics.o nonlin.o fft.o \
+step.o rhs.o rk4_even.o rk4_odd.o write_floats_nc3.o add_forcing.o user_defined_forcing.o \
+init_netcdf.o write_netcdf.o equation_of_state.o
+	$(FC) flow_solve.o initialize.o initialize_user_fforcing.o initialize_floats.o add_noise.o \
+	zufall.o create_mpi_data_type.o user_defined_ics.o add_fforcing.o s1_bar_func.o \
+	s2_bar_func.o slabs_to_columns.o columns_to_slabs.o transform3d.o cfft99.o \
+	ds_interp.o vort_fcs.o fill_wave_vectors.o ifft.o energetics.o nonlin.o fft.o \
+	step.o rhs.o rk4_even.o rk4_odd.o write_floats_nc3.o equation_of_state.o \
+	init_netcdf.o write_netcdf.o add_forcing.o user_defined_forcing.o \
+	-o ../flow_solve.x $(FLIBS)
+	 
+clean:	
+	rm -f *.o ../flow_solve.x core *-location.h init_write_netcdf.h trans_write_netcdf.h *.mk float_positions.dat machfile ../run
Index: /trunk/SpectralModelF90/PROJECTS/trivial/add_fforcing.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/add_fforcing.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/add_fforcing.f	(revision 6)
@@ -0,0 +1,100 @@
+      subroutine add_fforcing(force_cplx,Tr1,Tr2,Tr3,
+     *                   Tr4,Tr5,wnx,wny,wnz,locnx,ny,nyplanes,nz,Lz,
+     *                   U0,DGRAD,time_dim,f,g,rho_0)
+
+c     Routine, called conditionally when force_flag is set to 'yesFourier', to loop
+c     through each point in the spectral domain and adds a du/dt,dv/dt... 
+c     forcing term.    
+
+C---------------------------------------------------------------------------
+C
+C  add_ffforcing - Called by flow_solve.f if force_flag is set to 'yesFourier'.
+c                  Routine uses the stored fourier magnitudes of vertcical
+c                  displacement from initialize_user_fforcing.f.  At each time
+c                  step corresponding fourier amplitudes of the time derivatives
+c                  of u,v,w and s1 based on the linear internal-wave equations
+c		   are calculated and rotated forward in time by exp(-i omega t)
+c                  The result is added to the rhs forcing terms Tr1,Tr2,Tr3,Tr3
+c                  which were created in rhs.f and used to time-step in step.f 
+c                   
+c
+C       code written by Jen MacKinnon 3/6/03
+C
+C     INPUT:
+c       force_cplx    	   - Fourier amplitudes of vertical displacement forcing at t=0
+c       Tr1,Tr2,Tr3,Tr4    - RHS forcing terms of N-S (minus viscosity), created in rhs.f
+c       nx, ny, nz         -The number of x,y and z gridpoints in the OPEN
+c                           intervals i.e. [0,Lx), [0,Ly), [0,Lz)
+c       Lx, Ly,Lz          - dimensional lengths
+c       locnx              - number of k values in local portion of
+c                            wavenumber space
+C       wnx,wny,wnz        - real arrays of sizes(locnx),(ny+1),(nz+1)
+C                            respectively) - contain the k, l, and m wavenumbers
+c       time_dim           - dimensional time
+C
+c     OUTPUT:
+c        Tr1,Tr2,Tr3,Tr4   - RHS forcing terms for u,v,w,s1 to which 
+c                            the time derivatives of the user-defined forcing wavefield
+c                             have now been added
+C
+C---------------------------------------------------------------------------
+
+      implicit none
+      integer i,j,k
+      real pi,N2,Rot,Ri,U0,Lz,DGRAD,g,rho_0,f
+      integer locnx,ny,nyplanes,nz
+      real wnx(locnx),wny(ny+1),wnz(nz+1)
+      real wnh,omega,time_dim,time,omega_force,omega_force_ND
+      complex Tr1(locnx,ny+1,nz+1),Tr2(locnx,ny+1,nz+1)
+      complex Tr3(locnx,ny+1,nz+1),Tr4(locnx,ny+1,nz+1)
+      complex Tr5(locnx,ny+1,nz+1)
+      complex force_cplx(locnx,ny+1,nz+1),cmplxi
+ 
+
+c define user modified parameters
+      pi=4.*atan(1.)
+      cmplxi=(0.0,1.0)
+      N2=(g/rho_0)*DGRAD       ! [1/s^2]
+      omega_force=2.*pi/12.44/3600.
+
+c    Non-dimensionalize
+      Rot=f*Lz/U0
+      Ri=N2*Lz**2/(U0**2)
+      time=time_dim*U0/Lz
+      omega_force_ND=omega_force*Lz/U0
+      
+
+
+c     
+c    Look through fourier space. Add the appropriate forcing to each variable
+c    based upon the fourier ampitude of vertical displacement (force_cplx),
+c    the linear internal-wave equations, and a simple rotation forward
+c    in time, exp (-i omega t)
+
+      do k = 1, nz+1
+        do j = 1, nyplanes     ! OK for 2d when ny=0
+	  do i = 1, locnx
+             wnh=sqrt(wnx(i)**2+wny(j)**2)  ! horizontal wavenumber mag
+	     if (k .gt. 1 .and. wnh .gt. 0) then
+             omega=sqrt((Rot**2*wnz(k)**2+Ri*wnh**2)/
+     *                  (wnh**2+wnz(k)**2))        ! frequency at each wavenumber
+             Tr1(i,j,k)=Tr1(i,j,k)-cmplxi*omega*wnz(k)/wnh*
+     *                  (wnx(i)*omega/wnh+cmplxi*wny(j)*Rot/wnh)
+     *                  *exp(-cmplxi*omega_force_ND*time)*force_cplx(i,j,k)
+             Tr2(i,j,k)=Tr2(i,j,k)-cmplxi*omega*wnz(k)/wnh*
+     *                  (wny(j)*omega/wnh-cmplxi*wnx(i)*Rot/wnh)
+     *                  *exp(-cmplxi*omega_force_ND*time)*force_cplx(i,j,k)
+             Tr3(i,j,k)=Tr3(i,j,k)-omega**2*exp(-cmplxi*omega_force_ND*time)*force_cplx(i,j,k)
+             Tr4(i,j,k)=Tr4(i,j,k)-cmplxi*omega*exp(-cmplxi*omega_force_ND*time)*force_cplx(i,j,k)
+             Tr5(i,j,k)=Tr5(i,j,k)-cmplxi*omega
+     *                  *exp(-cmplxi*omega_force_ND*time)
+     *                  *force_cplx(i,j,k)
+	     endif
+          enddo
+        enddo
+       enddo
+   
+
+      return
+      end
+
Index: /trunk/SpectralModelF90/PROJECTS/trivial/add_forcing.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/add_forcing.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/add_forcing.f	(revision 6)
@@ -0,0 +1,54 @@
+      subroutine add_forcing(Fu,Fv,Fw,Fs1,Fs2,nx,ny,locnz,myid,numprocs,
+     *                       Lx,Ly,Lz,U0,DGRAD,s1_scale,s2_scale,time,f,g,rho_0)
+
+c     Routine, called conditionally when force_flag is set to 'yes', to loop
+c     through each point in the spatial domain, call a user defined
+c     routine specifying the value of the rhs functions, and to add
+c     the nondimensionalized values to the appropriate arrays.
+
+      implicit none
+      integer nx,ny,locnz,myid,numprocs,nyplanes
+      real Fu(nx+2,ny+1,locnz+1),Fv(nx+2,ny+1,locnz+1)
+      real Fw(nx+2,ny+1,locnz+1),Fs1(nx+2,ny+1,locnz+1)
+      real Fs2(nx+2,ny+1,locnz+1)
+      real Lx,Ly,Lz,U0,DGRAD,time,zprime,rho_bar,ddz,d2dz2
+      real s1_scale,s2_scale
+      real N2_dim,f,g,rho_0
+
+      real x,y,z,dx,dy,dz
+      real val1,val2,val3,val4,val5
+      integer i,j,k
+
+      dx=Lx/float(nx)
+      if(ny .gt. 0 ) then
+       dy=Ly/float(ny)
+       nyplanes=ny
+      else
+       dy=1.
+       nyplanes=1
+      endif
+      dz=Lz/float(numprocs*locnz)
+
+      do k=1,locnz+1
+       do j=1,nyplanes
+        do i=1,nx
+         x=(i-1.)*dx              ! [m]
+         y=(j-1.)*dy              ! [m]
+         z=(k+myid*locnz-1.)*dz   ! [m]
+
+         zprime=z/Lz              ! dimensionless Lz
+         call user_defined_forcing(x,y,z,time,val1,val2,val3,val4,val5,Lx,Ly,Lz,f,g,rho_0)
+
+c        add dimensionless value to partial rhs arrays  (T~Lz/U0, dens~DGRAD*Lz)
+         Fu(i,j,k) = Fu(i,j,k) + val1/(U0**2/Lz)  
+         Fv(i,j,k) = Fv(i,j,k) + val2/(U0**2/Lz)  
+         Fw(i,j,k) = Fw(i,j,k) + val3/(U0**2/Lz)  
+         Fs1(i,j,k) = Fs1(i,j,k) + val4/(s1_scale*U0/Lz)  
+         Fs2(i,j,k) = Fs2(i,j,k) + val5/(s2_scale*U0/Lz)
+
+        enddo
+       enddo
+      enddo
+
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/add_noise.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/add_noise.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/add_noise.f	(revision 6)
@@ -0,0 +1,145 @@
+      subroutine add_noise(u_cplx,v_cplx,efactor,
+     *                     nx,ny,nz,num_dims,
+     *                     wnx,wny,wnz,N,NM1,
+     *                     myid,numprocs,locnx,comm)
+ 
+c     routine to add random noise to the horizontal velocity fields
+c     linear vortex component only
+c     Energy spectrum defined in function Eofk
+c     efact = Enoise/Einput  controls the level of the noise
+
+c     implicit none
+      integer nx,ny,nz,num_dims,N,NM1,nyplanes
+      integer myid,numprocs,ierr,locnx,i,j,k
+      integer comm
+      integer iseed,npts
+      parameter (npts=2048)  ! >=nx
+      double precision urv(npts),vrv(npts),wrv(npts)
+      complex u_cplx(locnx,ny+1,nz+1,2),v_cplx(locnx,ny+1,nz+1,2)
+      complex w_cplx(locnx,ny+1,nz+1,2)
+      real wnx(locnx),wny(ny+1),wnz(nz+1),rmax,efactor
+
+      real Ein,Etmp,kappa,xx,utmp,vtmp
+      complex zeta
+
+      external Enoise
+
+#include "mpif.h"
+
+      if( ny .eq. 0 ) then
+       rmax = 8./9.*sqrt( 2*wnz( nz/2 )**2 )  ! assumes dx~dz
+      else
+       rmax = 8./9.*sqrt( 2*wny( ny/2 )**2 )  ! assumes dx~dy
+      endif
+
+      if( num_dims .eq. 2 ) then
+       nyplanes=1
+      elseif( num_dims .eq. 3 ) then
+       nyplanes=ny
+      endif
+
+c     random number initialization
+      iseed=myid             ! different initial seeds for each processor     
+
+c     determine HKE of input fields (un-normalized)
+      Ein = 0.0
+      do k=1,nz
+       do j=1,nyplanes
+        do i=1,locnx
+         Ein = Ein + .5*( cabs( u_cplx(i,j,k,N) )**2 + cabs( v_cplx(i,j,k,N) )**2 )
+        enddo
+       enddo
+      enddo
+      call MPI_ALLREDUCE(Ein,xx,1,MPI_REAL,MPI_SUM,comm,ierr) ! xx <-- global sum
+      Ein=xx
+
+
+c     Loop through wavenumber domain
+      do k=1,nz
+       do j=1,nyplanes
+c       obtain npts normal, zero mean, variance=1
+        call zufalli(iseed)    ! initialization
+        call normalen(npts,urv)
+        call normalen(npts,vrv)
+        call normalen(npts,wrv)
+
+        do i=1,locnx
+
+          kappa= sqrt( wnx(i)**2 + wny(j)**2 + wnz(k)**2 )/rmax
+          if( kappa .eq. 0 .or. kappa .gt. 1 ) kappa=1.e32
+          xx = Enoise(kappa)/(rmax*kappa)  ! i.e. E/sqrt(k^2+l^2+m^2)
+          urv(i)=urv(i)*xx
+          vrv(i)=vrv(i)*xx
+          wrv(i)=wrv(i)*xx
+ 
+           utmp = wny(j)*wrv(i) - wnz(k)*vrv(i)
+           vtmp = wnz(k)*urv(i) - wnx(i)*wrv(i)
+
+c        keep vortex part only
+          zeta = (0.,1.)*wnx(i)*vtmp - (0.,1.)*wny(j)*utmp
+
+c        put unscaled noise field in u/v_cplx(:,:,:,NM1) for now
+c        set noise mode to zero when kx=ky=0
+         xx=(wnx(i)**2 + wny(j)**2)
+         if( xx .gt. 0 ) then
+          u_cplx(i,j,k,NM1) = wny(j)*zeta/xx
+          v_cplx(i,j,k,NM1) =-wnz(k)*zeta/xx
+         else
+          u_cplx(i,j,k,NM1) = 0.
+          v_cplx(i,j,k,NM1) = 0.
+         endif
+         
+        enddo
+        iseed=iseed + numprocs ! get new seed for next set of kx locations
+       enddo
+      enddo
+
+c     determine HKE of noise fields (un-normalized)
+      Etmp = 0.0
+      do k=1,nz
+       do j=1,nyplanes
+        do i=1,locnx
+         Etmp = Etmp + .5*( cabs( u_cplx(i,j,k,NM1) )**2 + cabs( v_cplx(i,j,k,NM1) )**2 )
+        enddo
+       enddo
+      enddo
+      call MPI_ALLREDUCE(Etmp,xx,1,MPI_REAL,MPI_SUM,comm,ierr) ! xx <-- global sum
+      Etmp=xx
+
+c     scale the noise fields to the desired level     
+c     and add to the input fields
+      xx = sqrt(efactor*Ein/Etmp)  ! scale amplitudes not energy
+      Etmp = 0.0
+      do k=1,nz
+       do j=1,nyplanes
+        do i=1,locnx
+         u_cplx(i,j,k,N) = u_cplx(i,j,k,N) + xx*u_cplx(i,j,k,NM1)
+         v_cplx(i,j,k,N) = v_cplx(i,j,k,N) + xx*v_cplx(i,j,k,NM1)
+         Etmp = Etmp + .5*( cabs( u_cplx(i,j,k,N) )**2 + cabs( v_cplx(i,j,k,N) )**2 )
+        enddo
+       enddo
+      enddo
+      call MPI_ALLREDUCE(Etmp,xx,1,MPI_REAL,MPI_SUM,comm,ierr) ! xx <-- global sum
+      Etmp=xx
+      if(myid .eq. 0) write(0,*) ' noise field added to transforms of deterministic ICs '
+      if(myid .eq. 0) write(0,*) ' ratio of total energy to deterministic input HKE: ',Etmp/Ein
+      if(myid .eq. 0) write(0,*) ' requested ratio (efactor in problem_params.h) :',efactor
+
+      return
+      end
+
+      real function Enoise(k)
+c
+c     define the dimensionless energy spectrum as a function
+c     of scaled wavenumber k
+c
+      real k
+      
+      if( k .ge. 1 .or. k .eq. 0 ) then   ! outside truncation region or k=0
+       Enoise = 0.0
+      else
+       Enoise = 1.0 - k
+      endif
+      
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/cfft99.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/cfft99.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/cfft99.f	(revision 6)
@@ -0,0 +1,1642 @@
+C  @(#)           cfft99.f  (Stellar) Version 1.1 of 9/7/90
+
+      SUBROUTINE CFFT99(A,WORK,TRIGS,IFAX,INC,JUMP,N,LOT,ISIGN)
+C
+C PURPOSE      PERFORMS MULTIPLE FAST FOURIER TRANSFORMS.  THIS PACKAGE
+C              WILL PERFORM A NUMBER OF SIMULTANEOUS COMPLEX PERIODIC
+C              FOURIER TRANSFORMS OR CORRESPONDING INVERSE TRANSFORMS.
+C              THAT IS, GIVEN A SET OF COMPLEX GRIDPOINT VECTORS, THE
+C              PACKAGE RETURNS A SET OF COMPLEX FOURIER
+C              COEFFICIENT VECTORS, OR VICE VERSA.  THE LENGTH OF THE
+C              TRANSFORMS MUST BE A NUMBER GREATER THAN 1 THAT HAS
+C              NO PRIME FACTORS OTHER THAN 2, 3, AND 5.
+C
+C              THE PACKAGE CFFT99 CONTAINS SEVERAL USER-LEVEL ROUTINES:
+C
+C            SUBROUTINE CFTFAX
+C                AN INITIALIZATION ROUTINE THAT MUST BE CALLED ONCE
+C                BEFORE A SEQUENCE OF CALLS TO CFFT99
+C                (PROVIDED THAT N IS NOT CHANGED).
+C
+C            SUBROUTINE CFFT99
+C                THE ACTUAL TRANSFORM ROUTINE ROUTINE, CABABLE OF
+C                PERFORMING BOTH THE TRANSFORM AND ITS INVERSE.
+C                HOWEVER, AS THE TRANSFORMS ARE NOT NORMALIZED,
+C                THE APPLICATION OF A TRANSFORM FOLLOWED BY ITS
+C                INVERSE WILL YIELD THE ORIGINAL VALUES MULTIPLIED
+C                BY N.
+C
+C
+C ACCESS       *FORTRAN,P=XLIB,SN=CFFT99
+C
+C
+C USAGE        LET N BE OF THE FORM 2**P * 3**Q * 5**R, WHERE P .GE. 0,
+C              Q .GE. 0, AND R .GE. 0.  THEN A TYPICAL SEQUENCE OF
+C              CALLS TO TRANSFORM A GIVEN SET OF COMPLEX VECTORS OF
+C              LENGTH N TO A SET OF (UNSCALED) COMPLEX FOURIER
+C              COEFFICIENT VECTORS OF LENGTH N IS
+C
+C                   DIMENSION IFAX(13),TRIGS(2*N)
+C                   COMPLEX A(...), WORK(...)
+C
+C                   CALL CFTFAX (N, IFAX, TRIGS)
+C                   CALL CFFT99 (A,WORK,TRIGS,IFAX,INC,JUMP,N,LOT,ISIGN)
+C
+C              THE OUTPUT VECTORS OVERWRITE THE INPUT VECTORS, AND
+C              THESE ARE STORED IN A.  WITH APPROPRIATE CHOICES FOR
+C              THE OTHER ARGUMENTS, THESE VECTORS MAY BE CONSIDERED
+C              EITHER THE ROWS OR THE COLUMNS OF THE ARRAY A.
+C              SEE THE INDIVIDUAL WRITE-UPS FOR CFTFAX AND
+C              CFFT99 BELOW, FOR A DETAILED DESCRIPTION OF THE
+C              ARGUMENTS.
+C
+C HISTORY      THE PACKAGE WAS WRITTEN BY CLIVE TEMPERTON AT ECMWF IN
+C              NOVEMBER, 1978.  IT WAS MODIFIED, DOCUMENTED, AND TESTED
+C              FOR NCAR BY RUSS REW IN SEPTEMBER, 1980.  IT WAS
+C              FURTHER MODIFIED FOR THE FULLY COMPLEX CASE BY DAVE
+C              FULKER IN NOVEMBER, 1980.
+C
+C-----------------------------------------------------------------------
+C
+C SUBROUTINE CFTFAX (N,IFAX,TRIGS)
+C
+C PURPOSE      A SET-UP ROUTINE FOR CFFT99.  IT NEED ONLY BE
+C              CALLED ONCE BEFORE A SEQUENCE OF CALLS TO CFFT99,
+C              PROVIDED THAT N IS NOT CHANGED.
+C
+C ARGUMENT     IFAX(13),TRIGS(2*N)
+C DIMENSIONS
+C
+C ARGUMENTS
+C
+C ON INPUT     N
+C               AN EVEN NUMBER GREATER THAN 1 THAT HAS NO PRIME FACTOR
+C               GREATER THAN 5.  N IS THE LENGTH OF THE TRANSFORMS (SEE
+C               THE DOCUMENTATION FOR CFFT99 FOR THE DEFINITION OF
+C               THE TRANSFORMS).
+C
+C              IFAX
+C               AN INTEGER ARRAY.  THE NUMBER OF ELEMENTS ACTUALLY USED
+C               WILL DEPEND ON THE FACTORIZATION OF N.  DIMENSIONING
+C               IFAX FOR 13 SUFFICES FOR ALL N LESS THAN 1 MILLION.
+C
+C              TRIGS
+C               A REAL ARRAY OF DIMENSION 2*N
+C
+C ON OUTPUT    IFAX
+C               CONTAINS THE FACTORIZATION OF N.  IFAX(1) IS THE
+C               NUMBER OF FACTORS, AND THE FACTORS THEMSELVES ARE STORED
+C               IN IFAX(2),IFAX(3),...  IF N HAS ANY PRIME FACTORS
+C               GREATER THAN 5, IFAX(1) IS SET TO -99.
+C
+C              TRIGS
+C               AN ARRAY OF TRIGONOMETRIC FUNCTION VALUES SUBSEQUENTLY
+C               USED BY THE CFT ROUTINES.
+C
+C-----------------------------------------------------------------------
+C
+C SUBROUTINE CFFT99 (A,WORK,TRIGS,IFAX,INC,JUMP,N,LOT,ISIGN)
+C
+C PURPOSE      PERFORM A NUMBER OF SIMULTANEOUS (UNNORMALIZED) COMPLEX
+C              PERIODIC FOURIER TRANSFORMS OR CORRESPONDING INVERSE
+C              TRANSFORMS.  GIVEN A SET OF COMPLEX GRIDPOINT
+C              VECTORS, THE PACKAGE RETURNS A SET OF
+C              COMPLEX FOURIER COEFFICIENT VECTORS, OR VICE
+C              VERSA.  THE LENGTH OF THE TRANSFORMS MUST BE A
+C              NUMBER HAVING NO PRIME FACTORS OTHER THAN
+C              2, 3, AND 5.  THIS ROUTINE IS
+C              OPTIMIZED FOR USE ON THE CRAY-1.
+C
+C ARGUMENT     COMPLEX A(N*INC+(LOT-1)*JUMP), WORK(N*LOT)
+C DIMENSIONS   REAL TRIGS(2*N), INTEGER IFAX(13)
+C
+C ARGUMENTS
+C
+C ON INPUT     A
+C               A COMPLEX ARRAY OF LENGTH N*INC+(LOT-1)*JUMP CONTAINING
+C               THE INPUT GRIDPOINT OR COEFFICIENT VECTORS.  THIS ARRAY
+C               OVERWRITTEN BY THE RESULTS.
+C
+C               N.B. ALTHOUGH THE ARRAY A IS USUALLY CONSIDERED TO BE OF
+C               TYPE COMPLEX IN THE CALLING PROGRAM, IT IS TREATED AS
+C               REAL WITHIN THE TRANSFORM PACKAGE.  THIS REQUIRES THAT
+C               SUCH TYPE CONFLICTS ARE PERMITTED IN THE USER^S
+C               ENVIRONMENT, AND THAT THE STORAGE OF COMPLEX NUMBERS
+C               MATCHES THE ASSUMPTIONS OF THIS ROUTINE.  THIS ROUTINE
+C               ASSUMES THAT THE REAL AND IMAGINARY PORTIONS OF A
+C               COMPLEX NUMBER OCCUPY ADJACENT ELEMENTS OF MEMORY.  IF
+C               THESE CONDITIONS ARE NOT MET, THE USER MUST TREAT THE
+C               ARRAY A AS REAL (AND OF TWICE THE ABOVE LENGTH), AND
+C               WRITE THE CALLING PROGRAM TO TREAT THE REAL AND
+C               IMAGINARY PORTIONS EXPLICITLY.
+C
+C              WORK
+C               A COMPLEX WORK ARRAY OF LENGTH N*LOT OR A REAL ARRAY
+C               OF LENGTH 2*N*LOT.  SEE N.B. ABOVE.
+C
+C              TRIGS
+C               AN ARRAY SET UP BY CFTFAX, WHICH MUST BE CALLED FIRST.
+C
+C              IFAX
+C               AN ARRAY SET UP BY CFTFAX, WHICH MUST BE CALLED FIRST.
+C
+C
+C               N.B. IN THE FOLLOWING ARGUMENTS, INCREMENTS ARE MEASURED
+C               IN WORD PAIRS, BECAUSE EACH COMPLEX ELEMENT IS ASSUMED
+C               TO OCCUPY AN ADJACENT PAIR OF WORDS IN MEMORY.
+C
+C              INC
+C               THE INCREMENT (IN WORD PAIRS) BETWEEN SUCCESSIVE ELEMENT
+C               OF EACH (COMPLEX) GRIDPOINT OR COEFFICIENT VECTOR
+C               (E.G.  INC=1 FOR CONSECUTIVELY STORED DATA).
+C
+C              JUMP
+C               THE INCREMENT (IN WORD PAIRS) BETWEEN THE FIRST ELEMENTS
+C               OF SUCCESSIVE DATA OR COEFFICIENT VECTORS.  ON THE CRAY-
+C               TRY TO ARRANGE DATA SO THAT JUMP IS NOT A MULTIPLE OF 8
+C               (TO AVOID MEMORY BANK CONFLICTS).  FOR CLARIFICATION OF
+C               INC AND JUMP, SEE THE EXAMPLES BELOW.
+C
+C              N
+C               THE LENGTH OF EACH TRANSFORM (SEE DEFINITION OF
+C               TRANSFORMS, BELOW).
+C
+C              LOT
+C               THE NUMBER OF TRANSFORMS TO BE DONE SIMULTANEOUSLY.
+C
+C              ISIGN
+C               = -1 FOR A TRANSFORM FROM GRIDPOINT VALUES TO FOURIER
+C                    COEFFICIENTS.
+C               = +1 FOR A TRANSFORM FROM FOURIER COEFFICIENTS TO
+C                    GRIDPOINT VALUES.
+C
+C ON OUTPUT    A
+C               IF ISIGN = -1, AND LOT GRIDPOINT VECTORS ARE SUPPLIED,
+C               EACH CONTAINING THE COMPLEX SEQUENCE:
+C
+C               G(0),G(1), ... ,G(N-1)  (N COMPLEX VALUES)
+C
+C               THEN THE RESULT CONSISTS OF LOT COMPLEX VECTORS EACH
+C               CONTAINING THE CORRESPONDING N COEFFICIENT VALUES:
+C
+C               C(0),C(1), ... ,C(N-1)  (N COMPLEX VALUES)
+C
+C               DEFINED BY:
+C                 C(K) = SUM(J=0,...,N-1)( G(J)*EXP(-2*I*J*K*PI/N) )
+C                 WHERE I = SQRT(-1)
+C
+C
+C               IF ISIGN = +1, AND LOT COEFFICIENT VECTORS ARE SUPPLIED,
+C               EACH CONTAINING THE COMPLEX SEQUENCE:
+C
+C               C(0),C(1), ... ,C(N-1)  (N COMPLEX VALUES)
+C
+C               THEN THE RESULT CONSISTS OF LOT COMPLEX VECTORS EACH
+C               CONTAINING THE CORRESPONDING N GRIDPOINT VALUES:
+C
+C               G(0),G(1), ... ,G(N-1)  (N COMPLEX VALUES)
+C
+C               DEFINED BY:
+C                 G(J) = SUM(K=0,...,N-1)( G(K)*EXP(+2*I*J*K*PI/N) )
+C                 WHERE I = SQRT(-1)
+C
+C
+C               A CALL WITH ISIGN=-1 FOLLOWED BY A CALL WITH ISIGN=+1
+C               (OR VICE VERSA) RETURNS THE ORIGINAL DATA, MULTIPLIED
+C               BY THE FACTOR N.
+C
+C
+C EXAMPLE       GIVEN A 64 BY 9 GRID OF COMPLEX VALUES, STORED IN
+C               A 66 BY 9 COMPLEX ARRAY, A, COMPUTE THE TWO DIMENSIONAL
+C               FOURIER TRANSFORM OF THE GRID.  FROM TRANSFORM THEORY,
+C               IT IS KNOWN THAT A TWO DIMENSIONAL TRANSFORM CAN BE
+C               OBTAINED BY FIRST TRANSFORMING THE GRID ALONG ONE
+C               DIRECTION, THEN TRANSFORMING THESE RESULTS ALONG THE
+C               ORTHOGONAL DIRECTION.
+C
+C               COMPLEX A(66,9), WORK(64,9)
+C               REAL TRIGS1(128), TRIGS2(18)
+C               INTEGER IFAX1(13), IFAX2(13)
+C
+C               SET UP THE IFAX AND TRIGS ARRAYS FOR EACH DIRECTION:
+C
+C               CALL CFTFAX(64, IFAX1, TRIGS1)
+C               CALL CFTFAX( 9, IFAX2, TRIGS2)
+C
+C               IN THIS CASE, THE COMPLEX VALUES OF THE GRID ARE
+C               STORED IN MEMORY AS FOLLOWS (USING U AND V TO
+C               DENOTE THE REAL AND IMAGINARY COMPONENTS, AND
+C               ASSUMING CONVENTIONAL FORTRAN STORAGE):
+C
+C   U(1,1), V(1,1), U(2,1), V(2,1),  ...  U(64,1), V(64,1), 4 NULLS,
+C
+C   U(1,2), V(1,2), U(2,2), V(2,2),  ...  U(64,2), V(64,2), 4 NULLS,
+C
+C   .       .       .       .         .   .        .        .
+C   .       .       .       .         .   .        .        .
+C   .       .       .       .         .   .        .        .
+C
+C   U(1,9), V(1,9), U(2,9), V(2,9),  ...  U(64,9), V(64,9), 4 NULLS.
+C
+C               WE CHOOSE (ARBITRARILY) TO TRANSORM FIRST ALONG THE
+C               DIRECTION OF THE FIRST SUBSCRIPT.  THUS WE DEFINE
+C               THE LENGTH OF THE TRANSFORMS, N, TO BE 64, THE
+C               NUMBER OF TRANSFORMS, LOT, TO BE 9, THE INCREMENT
+C               BETWEEN ELEMENTS OF EACH TRANSFORM, INC, TO BE 1,
+C               AND THE INCREMENT BETWEEN THE STARTING POINTS
+C               FOR EACH TRANSFORM, JUMP, TO BE 66 (THE FIRST
+C               DIMENSION OF A).
+C
+C               CALL CFFT99( A, WORK, TRIGS1, IFAX1, 1, 66, 64, 9, -1)
+C
+C               TO TRANSFORM ALONG THE DIRECTION OF THE SECOND SUBSCRIPT
+C               THE ROLES OF THE INCREMENTS ARE REVERSED.  THUS WE DEFIN
+C               THE LENGTH OF THE TRANSFORMS, N, TO BE 9, THE
+C               NUMBER OF TRANSFORMS, LOT, TO BE 64, THE INCREMENT
+C               BETWEEN ELEMENTS OF EACH TRANSFORM, INC, TO BE 66,
+C               AND THE INCREMENT BETWEEN THE STARTING POINTS
+C               FOR EACH TRANSFORM, JUMP, TO BE 1
+C
+C               CALL CFFT99( A, WORK, TRIGS2, IFAX2, 66, 1, 9, 64, -1)
+C
+C               THESE TWO SEQUENTIAL STEPS RESULTS IN THE TWO-DIMENSIONA
+C               FOURIER COEFFICIENT ARRAY OVERWRITING THE INPUT
+C               GRIDPOINT ARRAY, A.  THE SAME TWO STEPS APPLIED AGAIN
+C               WITH ISIGN = +1 WOULD RESULT IN THE RECONSTRUCTION OF
+C               THE GRIDPOINT ARRAY (MULTIPLIED BY A FACTOR OF 64*9).
+C
+C
+C-----------------------------------------------------------------------
+c     DIMENSION A(1),WORK(1),TRIGS(1),IFAX(1)
+      REAL A(2*N*INC+2*(LOT-1)*JUMP), WORK(2*N*LOT)
+      REAL TRIGS(2*N) 
+      INTEGER IFAX(13)
+c     unshared work
+C
+C     SUBROUTINE ^CFFT99^ - MULTIPLE FAST COMPLEX FOURIER TRANSFORM
+C
+C     A IS THE ARRAY CONTAINING INPUT AND OUTPUT DATA
+C     WORK IS AN AREA OF SIZE N*LOT
+C     TRIGS IS A PREVIOUSLY PREPARED LIST OF TRIG FUNCTION VALUES
+C     IFAX IS A PREVIOUSLY PREPARED LIST OF FACTORS OF N
+C     INC IS THE INCREMENT WITHIN EACH DATA #VECTOR#
+C         (E.G. INC=1 FOR CONSECUTIVELY STORED DATA)
+C     JUMP IS THE INCREMENT BETWEEN THE START OF EACH DATA VECTOR
+C     N IS THE LENGTH OF THE DATA VECTORS
+C     LOT IS THE NUMBER OF DATA VECTORS
+C     ISIGN = +1 FOR TRANSFORM FROM SPECTRAL TO GRIDPOINT
+C           = -1 FOR TRANSFORM FROM GRIDPOINT TO SPECTRAL
+C
+C
+C     VECTORIZATION IS ACHIEVED ON CRAY BY DOING THE TRANSFORMS IN
+C     PARALLEL.
+C
+C
+C
+      NN = N+N
+      INK=INC+INC
+      JUM = JUMP+JUMP
+      NFAX=IFAX(1)
+      JNK = 2
+      JST = 2
+      IF (ISIGN.GE.0) GO TO 30
+C
+C     THE INNERMOST TEMPERTON ROUTINES HAVE NO FACILITY FOR THE
+C     FORWARD (ISIGN = -1) TRANSFORM.  THEREFORE, THE INPUT MUST BE
+C     REARRANGED AS FOLLOWS:
+C
+C     THE ORDER OF EACH INPUT VECTOR,
+C
+C     G(0), G(1), G(2), ... , G(N-2), G(N-1)
+C
+C     IS REVERSED (EXCLUDING G(0)) TO YIELD
+C
+C     G(0), G(N-1), G(N-2), ... , G(2), G(1).
+C
+C     WITHIN THE TRANSFORM, THE CORRESPONDING EXPONENTIAL MULTIPLIER
+C     IS THEN PRECISELY THE CONJUGATE OF THAT FOR THE NORMAL
+C     ORDERING.  THUS THE FORWARD (ISIGN = -1) TRANSFORM IS
+C     ACCOMPLISHED
+C
+C     FOR NFAX ODD, THE INPUT MUST BE TRANSFERRED TO THE WORK ARRAY,
+C     AND THE REARRANGEMENT CAN BE DONE DURING THE MOVE.
+C
+      JNK = -2
+      JST = NN-2
+      IF (MOD(NFAX,2).EQ.1) GOTO 40
+C
+C     FOR NFAX EVEN, THE REARRANGEMENT MUST BE APPLIED DIRECTLY TO
+C     THE INPUT ARRAY.  THIS CAN BE DONE BY SWAPPING ELEMENTS.
+C
+      IBASE = 1
+      ILAST = (N-1)*INK
+      NH = N/2
+      DO 20 L=1,LOT
+      I1 = IBASE+INK
+      I2 = IBASE+ILAST
+C$DIR NO_RECURRENCE
+      DO 10 M=1,NH
+C     SWAP REAL AND IMAGINARY PORTIONS
+      HREAL = A(I1)
+      HIMAG = A(I1+1)
+      A(I1) = A(I2)
+      A(I1+1) = A(I2+1)
+      A(I2) = HREAL
+      A(I2+1) = HIMAG
+      I1 = I1+INK
+      I2 = I2-INK
+   10 CONTINUE
+      IBASE = IBASE+JUM
+   20 CONTINUE
+      GOTO 100
+C
+   30 CONTINUE
+      IF (MOD(NFAX,2).EQ.0) GOTO 100
+C
+   40 CONTINUE
+C
+C     DURING THE TRANSFORM PROCESS, NFAX STEPS ARE TAKEN, AND THE
+C     RESULTS ARE STORED ALTERNATELY IN WORK AND IN A.  IF NFAX IS
+C     ODD, THE INPUT DATA ARE FIRST MOVED TO WORK SO THAT THE FINAL
+C     RESULT (AFTER NFAX STEPS) IS STORED IN ARRAY A.
+C
+      IBASE=1
+      JBASE=1
+      DO 60 L=1,LOT
+C     MOVE REAL AND IMAGINARY PORTIONS OF ELEMENT ZERO
+      WORK(JBASE) = A(IBASE)
+      WORK(JBASE+1) = A(IBASE+1)
+      I=IBASE+INK
+      J=JBASE+JST
+C$DIR NO_RECURRENCE
+      DO 50 M=2,N
+C     MOVE REAL AND IMAGINARY PORTIONS OF OTHER ELEMENTS (POSSIBLY IN
+C     REVERSE ORDER, DEPENDING ON JST AND JNK)
+      WORK(J) = A(I)
+      WORK(J+1) = A(I+1)
+      I=I+INK
+      J=J+JNK
+   50 CONTINUE
+      IBASE=IBASE+JUM
+      JBASE=JBASE+NN
+   60 CONTINUE
+C
+  100 CONTINUE
+C
+C     PERFORM THE TRANSFORM PASSES, ONE PASS FOR EACH FACTOR.  DURING
+C     EACH PASS THE DATA ARE MOVED FROM A TO WORK OR FROM WORK TO A.
+C
+C     FOR NFAX EVEN, THE FIRST PASS MOVES FROM A TO WORK
+      IGO = 110
+C     FOR NFAX ODD, THE FIRST PASS MOVES FROM WORK TO A
+      IF (MOD(NFAX,2).EQ.1) IGO = 120
+      LA=1
+      DO 140 K=1,NFAX
+      IF (IGO.EQ.120) GO TO 120
+  110 CONTINUE
+      CALL VPASSM(A(1),A(2),WORK(1),WORK(2),TRIGS,
+     *   INK,2,JUM,NN,LOT,N,IFAX(K+1),LA)
+      IGO=120
+      GO TO 130
+  120 CONTINUE
+      CALL VPASSM(WORK(1),WORK(2),A(1),A(2),TRIGS,
+     *    2,INK,NN,JUM,LOT,N,IFAX(K+1),LA)
+      IGO=110
+  130 CONTINUE
+      LA=LA*IFAX(K+1)
+  140 CONTINUE
+C
+C     AT THIS POINT THE FINAL TRANSFORM RESULT IS STORED IN A.
+C
+      RETURN
+      END
+
+
+      SUBROUTINE CFTFAX(N,IFAX,TRIGS)
+      DIMENSION IFAX(13),TRIGS(1)
+C
+C     THIS ROUTINE WAS MODIFIED FROM TEMPERTON^S ORIGINAL
+C     BY DAVE FULKER.  IT NO LONGER PRODUCES FACTORS IN ASCENDING
+C     ORDER, AND THERE ARE NONE OF THE ORIGINAL #MODE# OPTIONS.
+C
+C ON INPUT     N
+C               THE LENGTH OF EACH COMPLEX TRANSFORM TO BE PERFORMED
+C
+C               N MUST BE GREATER THAN 1 AND CONTAIN NO PRIME
+C               FACTORS GREATER THAN 5.
+C
+C ON OUTPUT    IFAX
+C               IFAX(1)
+C                 THE NUMBER OF FACTORS CHOSEN OR -99 IN CASE OF ERROR
+C               IFAX(2) THRU IFAX( IFAX(1)+1 )
+C                 THE FACTORS OF N IN THE FOLLOWIN ORDER:  APPEARING
+C                 FIRST ARE AS MANY FACTORS OF 4 AS CAN BE OBTAINED.
+C                 SUBSEQUENT FACTORS ARE PRIMES, AND APPEAR IN
+C                 ASCENDING ORDER, EXCEPT FOR MULTIPLE FACTORS.
+C
+C              TRIGS
+C               2N SIN AND COS VALUES FOR USE BY THE TRANSFORM ROUTINE
+C
+      CALL FACT(N,IFAX)
+      K = IFAX(1)
+      IF (K .LT. 1 .OR. IFAX(K+1) .GT. 5) IFAX(1) = -99
+      IF (IFAX(1) .LE. 0 )PRINT*, ' FFTFAX -- INVALID N'
+      CALL CFTRIG (N, TRIGS)
+      RETURN
+      END
+
+
+      SUBROUTINE FACT(N,IFAX)
+C     FACTORIZATION ROUTINE THAT FIRST EXTRACTS ALL FACTORS OF 4
+      DIMENSION IFAX(13)
+      IF (N.GT.1) GO TO 10
+      IFAX(1) = 0
+      IF (N.LT.1) IFAX(1) = -99
+      RETURN
+   10 NN=N
+      K=1
+C     TEST FOR FACTORS OF 4
+   20 IF (MOD(NN,4).NE.0) GO TO 30
+      K=K+1
+      IFAX(K)=4
+      NN=NN/4
+      IF (NN.EQ.1) GO TO 80
+      GO TO 20
+C     TEST FOR EXTRA FACTOR OF 2
+   30 IF (MOD(NN,2).NE.0) GO TO 40
+      K=K+1
+      IFAX(K)=2
+      NN=NN/2
+      IF (NN.EQ.1) GO TO 80
+C     TEST FOR FACTORS OF 3
+   40 IF (MOD(NN,3).NE.0) GO TO 50
+      K=K+1
+      IFAX(K)=3
+      NN=NN/3
+      IF (NN.EQ.1) GO TO 80
+      GO TO 40
+C     NOW FIND REMAINING FACTORS
+   50 L=5
+      MAX = SQRT(FLOAT(NN))
+      INC=2
+C     INC ALTERNATELY TAKES ON VALUES 2 AND 4
+   60 IF (MOD(NN,L).NE.0) GO TO 70
+      K=K+1
+      IFAX(K)=L
+      NN=NN/L
+      IF (NN.EQ.1) GO TO 80
+      GO TO 60
+   70 IF (L.GT.MAX) GO TO 75
+      L=L+INC
+      INC=6-INC
+      GO TO 60
+   75 K = K+1
+      IFAX(K) = NN
+   80 IFAX(1)=K-1
+C     IFAX(1) NOW CONTAINS NUMBER OF FACTORS
+      RETURN
+      END
+
+      SUBROUTINE CFTRIG(N,TRIGS)
+      DIMENSION TRIGS(1)
+      PI=2.0*ASIN(1.0)
+      DEL=(PI+PI)/FLOAT(N)
+      L=N+N
+      DO 10 I=1,L,2
+      ANGLE=0.5*FLOAT(I-1)*DEL
+      TRIGS(I)=COS(ANGLE)
+      TRIGS(I+1)=SIN(ANGLE)
+   10 CONTINUE
+      RETURN
+      END
+
+
+c     OPTIONS  -re -O3       ! try parallel as this is most of the work
+
+
+      SUBROUTINE VPASSM(A,B,C,D,TRIGS,INC1,INC2,INC3,INC4,LOT,N,IFAC,LA)
+      DIMENSION A(N),B(N),C(N),D(N),TRIGS(N)
+C
+C     SUBROUTINE ^VPASSM^ - MULTIPLE VERSION OF ^VPASSA^
+C     PERFORMS ONE PASS THROUGH DATA
+C     AS PART OF MULTIPLE COMPLEX (INVERSE) FFT ROUTINE
+C     A IS FIRST REAL INPUT VECTOR
+C     B IS FIRST IMAGINARY INPUT VECTOR
+C     C IS FIRST REAL OUTPUT VECTOR
+C     D IS FIRST IMAGINARY OUTPUT VECTOR
+C     TRIGS IS PRECALCULATED TABLE OF SINES \ COSINES
+C     INC1 IS ADDRESSING INCREMENT FOR A AND B
+C     INC2 IS ADDRESSING INCREMENT FOR C AND D
+C     INC3 IS ADDRESSING INCREMENT BETWEEN A^S \ B^S
+C     INC4 IS ADDRESSING INCREMENT BETWEEN C^S \ D^S
+C     LOT IS THE NUMBER OF VECTORS
+C     N IS LENGTH OF VECTORS
+C     IFAC IS CURRENT FACTOR OF N
+C     LA IS PRODUCT OF PREVIOUS FACTORS
+C
+      DATA SIN36/0.587785252292473/,COS36/0.809016994374947/,
+     *     SIN72/0.951056516295154/,COS72/0.309016994374947/,
+     *     SIN60/0.866025403784437/
+C
+      M=N/IFAC
+      IINK=M*INC1
+      JINK=LA*INC2
+      JUMP=(IFAC-1)*JINK
+      IBASE=0
+      JBASE=0
+      IGO=IFAC-1
+      IF (IGO.GT.4) RETURN
+      GO TO (10,50,90,130),IGO
+C
+C     CODING FOR FACTOR 2
+C
+   10 IA=1
+      JA=1
+      IB=IA+IINK
+      JB=JA+JINK
+      DO 20 L=1,LA
+      I=IBASE
+      J=JBASE
+C$DIR NO_RECURRENCE
+      DO 15 IJK=1,LOT
+      C(JA+J)=A(IA+I)+A(IB+I)
+      D(JA+J)=B(IA+I)+B(IB+I)
+      C(JB+J)=A(IA+I)-A(IB+I)
+      D(JB+J)=B(IA+I)-B(IB+I)
+      I=I+INC3
+      J=J+INC4
+   15 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+   20 CONTINUE
+      IF (LA.EQ.M) RETURN
+      LA1=LA+1
+      JBASE=JBASE+JUMP
+      DO 40 K=LA1,M,LA
+      KB=K+K-2
+      C1=TRIGS(KB+1)
+      S1=TRIGS(KB+2)
+      DO 30 L=1,LA
+      I=IBASE
+      J=JBASE
+C$DIR NO_RECURRENCE
+      DO 25 IJK=1,LOT
+      C(JA+J)=A(IA+I)+A(IB+I)
+      D(JA+J)=B(IA+I)+B(IB+I)
+      C(JB+J)=C1*(A(IA+I)-A(IB+I))-S1*(B(IA+I)-B(IB+I))
+      D(JB+J)=S1*(A(IA+I)-A(IB+I))+C1*(B(IA+I)-B(IB+I))
+      I=I+INC3
+      J=J+INC4
+   25 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+   30 CONTINUE
+      JBASE=JBASE+JUMP
+   40 CONTINUE
+      RETURN
+C
+C     CODING FOR FACTOR 3
+C
+   50 IA=1
+      JA=1
+      IB=IA+IINK
+      JB=JA+JINK
+      IC=IB+IINK
+      JC=JB+JINK
+      DO 60 L=1,LA
+      I=IBASE
+      J=JBASE
+C$DIR NO_RECURRENCE
+      DO 55 IJK=1,LOT
+      C(JA+J)=A(IA+I)+(A(IB+I)+A(IC+I))
+      D(JA+J)=B(IA+I)+(B(IB+I)+B(IC+I))
+      C(JB+J)=(A(IA+I)-0.5*(A(IB+I)+A(IC+I)))-(SIN60*(B(IB+I)-B(IC+I)))
+      C(JC+J)=(A(IA+I)-0.5*(A(IB+I)+A(IC+I)))+(SIN60*(B(IB+I)-B(IC+I)))
+      D(JB+J)=(B(IA+I)-0.5*(B(IB+I)+B(IC+I)))+(SIN60*(A(IB+I)-A(IC+I)))
+      D(JC+J)=(B(IA+I)-0.5*(B(IB+I)+B(IC+I)))-(SIN60*(A(IB+I)-A(IC+I)))
+      I=I+INC3
+      J=J+INC4
+   55 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+   60 CONTINUE
+      IF (LA.EQ.M) RETURN
+      LA1=LA+1
+      JBASE=JBASE+JUMP
+      DO 80 K=LA1,M,LA
+      KB=K+K-2
+      KC=KB+KB
+      C1=TRIGS(KB+1)
+      S1=TRIGS(KB+2)
+      C2=TRIGS(KC+1)
+      S2=TRIGS(KC+2)
+      DO 70 L=1,LA
+      I=IBASE
+      J=JBASE
+C$DIR NO_RECURRENCE
+      DO 65 IJK=1,LOT
+      C(JA+J)=A(IA+I)+(A(IB+I)+A(IC+I))
+      D(JA+J)=B(IA+I)+(B(IB+I)+B(IC+I))
+      C(JB+J)=
+     *    C1*((A(IA+I)-0.5*(A(IB+I)+A(IC+I)))-(SIN60*(B(IB+I)-B(IC+I))))
+     *   -S1*((B(IA+I)-0.5*(B(IB+I)+B(IC+I)))+(SIN60*(A(IB+I)-A(IC+I))))
+      D(JB+J)=
+     *    S1*((A(IA+I)-0.5*(A(IB+I)+A(IC+I)))-(SIN60*(B(IB+I)-B(IC+I))))
+     *   +C1*((B(IA+I)-0.5*(B(IB+I)+B(IC+I)))+(SIN60*(A(IB+I)-A(IC+I))))
+      C(JC+J)=
+     *    C2*((A(IA+I)-0.5*(A(IB+I)+A(IC+I)))+(SIN60*(B(IB+I)-B(IC+I))))
+     *   -S2*((B(IA+I)-0.5*(B(IB+I)+B(IC+I)))-(SIN60*(A(IB+I)-A(IC+I))))
+      D(JC+J)=
+     *    S2*((A(IA+I)-0.5*(A(IB+I)+A(IC+I)))+(SIN60*(B(IB+I)-B(IC+I))))
+     *   +C2*((B(IA+I)-0.5*(B(IB+I)+B(IC+I)))-(SIN60*(A(IB+I)-A(IC+I))))
+      I=I+INC3
+      J=J+INC4
+   65 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+   70 CONTINUE
+      JBASE=JBASE+JUMP
+   80 CONTINUE
+      RETURN
+C
+C     CODING FOR FACTOR 4
+C
+   90 IA=1
+      JA=1
+      IB=IA+IINK
+      JB=JA+JINK
+      IC=IB+IINK
+      JC=JB+JINK
+      ID=IC+IINK
+      JD=JC+JINK
+      DO 100 L=1,LA
+      I=IBASE
+      J=JBASE
+C$DIR NO_RECURRENCE
+      DO 95 IJK=1,LOT
+      C(JA+J)=(A(IA+I)+A(IC+I))+(A(IB+I)+A(ID+I))
+      C(JC+J)=(A(IA+I)+A(IC+I))-(A(IB+I)+A(ID+I))
+      D(JA+J)=(B(IA+I)+B(IC+I))+(B(IB+I)+B(ID+I))
+      D(JC+J)=(B(IA+I)+B(IC+I))-(B(IB+I)+B(ID+I))
+      C(JB+J)=(A(IA+I)-A(IC+I))-(B(IB+I)-B(ID+I))
+      C(JD+J)=(A(IA+I)-A(IC+I))+(B(IB+I)-B(ID+I))
+      D(JB+J)=(B(IA+I)-B(IC+I))+(A(IB+I)-A(ID+I))
+      D(JD+J)=(B(IA+I)-B(IC+I))-(A(IB+I)-A(ID+I))
+      I=I+INC3
+      J=J+INC4
+   95 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  100 CONTINUE
+      IF (LA.EQ.M) RETURN
+      LA1=LA+1
+      JBASE=JBASE+JUMP
+      DO 120 K=LA1,M,LA
+      KB=K+K-2
+      KC=KB+KB
+      KD=KC+KB
+      C1=TRIGS(KB+1)
+      S1=TRIGS(KB+2)
+      C2=TRIGS(KC+1)
+      S2=TRIGS(KC+2)
+      C3=TRIGS(KD+1)
+      S3=TRIGS(KD+2)
+      DO 110 L=1,LA
+      I=IBASE
+      J=JBASE
+C$DIR NO_RECURRENCE
+      DO 105 IJK=1,LOT
+      C(JA+J)=(A(IA+I)+A(IC+I))+(A(IB+I)+A(ID+I))
+      D(JA+J)=(B(IA+I)+B(IC+I))+(B(IB+I)+B(ID+I))
+      C(JC+J)=
+     *    C2*((A(IA+I)+A(IC+I))-(A(IB+I)+A(ID+I)))
+     *   -S2*((B(IA+I)+B(IC+I))-(B(IB+I)+B(ID+I)))
+      D(JC+J)=
+     *    S2*((A(IA+I)+A(IC+I))-(A(IB+I)+A(ID+I)))
+     *   +C2*((B(IA+I)+B(IC+I))-(B(IB+I)+B(ID+I)))
+      C(JB+J)=
+     *    C1*((A(IA+I)-A(IC+I))-(B(IB+I)-B(ID+I)))
+     *   -S1*((B(IA+I)-B(IC+I))+(A(IB+I)-A(ID+I)))
+      D(JB+J)=
+     *    S1*((A(IA+I)-A(IC+I))-(B(IB+I)-B(ID+I)))
+     *   +C1*((B(IA+I)-B(IC+I))+(A(IB+I)-A(ID+I)))
+      C(JD+J)=
+     *    C3*((A(IA+I)-A(IC+I))+(B(IB+I)-B(ID+I)))
+     *   -S3*((B(IA+I)-B(IC+I))-(A(IB+I)-A(ID+I)))
+      D(JD+J)=
+     *    S3*((A(IA+I)-A(IC+I))+(B(IB+I)-B(ID+I)))
+     *   +C3*((B(IA+I)-B(IC+I))-(A(IB+I)-A(ID+I)))
+      I=I+INC3
+      J=J+INC4
+  105 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  110 CONTINUE
+      JBASE=JBASE+JUMP
+  120 CONTINUE
+      RETURN
+C
+C     CODING FOR FACTOR 5
+C
+  130 IA=1
+      JA=1
+      IB=IA+IINK
+      JB=JA+JINK
+      IC=IB+IINK
+      JC=JB+JINK
+      ID=IC+IINK
+      JD=JC+JINK
+      IE=ID+IINK
+      JE=JD+JINK
+      DO 140 L=1,LA
+      I=IBASE
+      J=JBASE
+C$DIR NO_RECURRENCE
+      DO 135 IJK=1,LOT
+      C(JA+J)=A(IA+I)+(A(IB+I)+A(IE+I))+(A(IC+I)+A(ID+I))
+      D(JA+J)=B(IA+I)+(B(IB+I)+B(IE+I))+(B(IC+I)+B(ID+I))
+      C(JB+J)=(A(IA+I)+COS72*(A(IB+I)+A(IE+I))-COS36*(A(IC+I)+A(ID+I)))
+     *  -(SIN72*(B(IB+I)-B(IE+I))+SIN36*(B(IC+I)-B(ID+I)))
+      C(JE+J)=(A(IA+I)+COS72*(A(IB+I)+A(IE+I))-COS36*(A(IC+I)+A(ID+I)))
+     *  +(SIN72*(B(IB+I)-B(IE+I))+SIN36*(B(IC+I)-B(ID+I)))
+      D(JB+J)=(B(IA+I)+COS72*(B(IB+I)+B(IE+I))-COS36*(B(IC+I)+B(ID+I)))
+     *  +(SIN72*(A(IB+I)-A(IE+I))+SIN36*(A(IC+I)-A(ID+I)))
+      D(JE+J)=(B(IA+I)+COS72*(B(IB+I)+B(IE+I))-COS36*(B(IC+I)+B(ID+I)))
+     *  -(SIN72*(A(IB+I)-A(IE+I))+SIN36*(A(IC+I)-A(ID+I)))
+      C(JC+J)=(A(IA+I)-COS36*(A(IB+I)+A(IE+I))+COS72*(A(IC+I)+A(ID+I)))
+     *  -(SIN36*(B(IB+I)-B(IE+I))-SIN72*(B(IC+I)-B(ID+I)))
+      C(JD+J)=(A(IA+I)-COS36*(A(IB+I)+A(IE+I))+COS72*(A(IC+I)+A(ID+I)))
+     *  +(SIN36*(B(IB+I)-B(IE+I))-SIN72*(B(IC+I)-B(ID+I)))
+      D(JC+J)=(B(IA+I)-COS36*(B(IB+I)+B(IE+I))+COS72*(B(IC+I)+B(ID+I)))
+     *  +(SIN36*(A(IB+I)-A(IE+I))-SIN72*(A(IC+I)-A(ID+I)))
+      D(JD+J)=(B(IA+I)-COS36*(B(IB+I)+B(IE+I))+COS72*(B(IC+I)+B(ID+I)))
+     *  -(SIN36*(A(IB+I)-A(IE+I))-SIN72*(A(IC+I)-A(ID+I)))
+      I=I+INC3
+      J=J+INC4
+  135 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  140 CONTINUE
+      IF (LA.EQ.M) RETURN
+      LA1=LA+1
+      JBASE=JBASE+JUMP
+      DO 160 K=LA1,M,LA
+      KB=K+K-2
+      KC=KB+KB
+      KD=KC+KB
+      KE=KD+KB
+      C1=TRIGS(KB+1)
+      S1=TRIGS(KB+2)
+      C2=TRIGS(KC+1)
+      S2=TRIGS(KC+2)
+      C3=TRIGS(KD+1)
+      S3=TRIGS(KD+2)
+      C4=TRIGS(KE+1)
+      S4=TRIGS(KE+2)
+      DO 150 L=1,LA
+      I=IBASE
+      J=JBASE
+C$DIR NO_RECURRENCE
+      DO 145 IJK=1,LOT
+      C(JA+J)=A(IA+I)+(A(IB+I)+A(IE+I))+(A(IC+I)+A(ID+I))
+      D(JA+J)=B(IA+I)+(B(IB+I)+B(IE+I))+(B(IC+I)+B(ID+I))
+      C(JB+J)=
+     *    C1*((A(IA+I)+COS72*(A(IB+I)+A(IE+I))-COS36*(A(IC+I)+A(ID+I)))
+     *      -(SIN72*(B(IB+I)-B(IE+I))+SIN36*(B(IC+I)-B(ID+I))))
+     *   -S1*((B(IA+I)+COS72*(B(IB+I)+B(IE+I))-COS36*(B(IC+I)+B(ID+I)))
+     *      +(SIN72*(A(IB+I)-A(IE+I))+SIN36*(A(IC+I)-A(ID+I))))
+      D(JB+J)=
+     *    S1*((A(IA+I)+COS72*(A(IB+I)+A(IE+I))-COS36*(A(IC+I)+A(ID+I)))
+     *      -(SIN72*(B(IB+I)-B(IE+I))+SIN36*(B(IC+I)-B(ID+I))))
+     *   +C1*((B(IA+I)+COS72*(B(IB+I)+B(IE+I))-COS36*(B(IC+I)+B(ID+I)))
+     *      +(SIN72*(A(IB+I)-A(IE+I))+SIN36*(A(IC+I)-A(ID+I))))
+      C(JE+J)=
+     *    C4*((A(IA+I)+COS72*(A(IB+I)+A(IE+I))-COS36*(A(IC+I)+A(ID+I)))
+     *      +(SIN72*(B(IB+I)-B(IE+I))+SIN36*(B(IC+I)-B(ID+I))))
+     *   -S4*((B(IA+I)+COS72*(B(IB+I)+B(IE+I))-COS36*(B(IC+I)+B(ID+I)))
+     *      -(SIN72*(A(IB+I)-A(IE+I))+SIN36*(A(IC+I)-A(ID+I))))
+      D(JE+J)=
+     *    S4*((A(IA+I)+COS72*(A(IB+I)+A(IE+I))-COS36*(A(IC+I)+A(ID+I)))
+     *      +(SIN72*(B(IB+I)-B(IE+I))+SIN36*(B(IC+I)-B(ID+I))))
+     *   +C4*((B(IA+I)+COS72*(B(IB+I)+B(IE+I))-COS36*(B(IC+I)+B(ID+I)))
+     *      -(SIN72*(A(IB+I)-A(IE+I))+SIN36*(A(IC+I)-A(ID+I))))
+      C(JC+J)=
+     *    C2*((A(IA+I)-COS36*(A(IB+I)+A(IE+I))+COS72*(A(IC+I)+A(ID+I)))
+     *      -(SIN36*(B(IB+I)-B(IE+I))-SIN72*(B(IC+I)-B(ID+I))))
+     *   -S2*((B(IA+I)-COS36*(B(IB+I)+B(IE+I))+COS72*(B(IC+I)+B(ID+I)))
+     *      +(SIN36*(A(IB+I)-A(IE+I))-SIN72*(A(IC+I)-A(ID+I))))
+      D(JC+J)=
+     *    S2*((A(IA+I)-COS36*(A(IB+I)+A(IE+I))+COS72*(A(IC+I)+A(ID+I)))
+     *      -(SIN36*(B(IB+I)-B(IE+I))-SIN72*(B(IC+I)-B(ID+I))))
+     *   +C2*((B(IA+I)-COS36*(B(IB+I)+B(IE+I))+COS72*(B(IC+I)+B(ID+I)))
+     *      +(SIN36*(A(IB+I)-A(IE+I))-SIN72*(A(IC+I)-A(ID+I))))
+      C(JD+J)=
+     *    C3*((A(IA+I)-COS36*(A(IB+I)+A(IE+I))+COS72*(A(IC+I)+A(ID+I)))
+     *      +(SIN36*(B(IB+I)-B(IE+I))-SIN72*(B(IC+I)-B(ID+I))))
+     *   -S3*((B(IA+I)-COS36*(B(IB+I)+B(IE+I))+COS72*(B(IC+I)+B(ID+I)))
+     *      -(SIN36*(A(IB+I)-A(IE+I))-SIN72*(A(IC+I)-A(ID+I))))
+      D(JD+J)=
+     *    S3*((A(IA+I)-COS36*(A(IB+I)+A(IE+I))+COS72*(A(IC+I)+A(ID+I)))
+     *      +(SIN36*(B(IB+I)-B(IE+I))-SIN72*(B(IC+I)-B(ID+I))))
+     *   +C3*((B(IA+I)-COS36*(B(IB+I)+B(IE+I))+COS72*(B(IC+I)+B(ID+I)))
+     *      -(SIN36*(A(IB+I)-A(IE+I))-SIN72*(A(IC+I)-A(ID+I))))
+      I=I+INC3
+      J=J+INC4
+  145 CONTINUE
+      IBASE=IBASE+INC1
+      JBASE=JBASE+INC2
+  150 CONTINUE
+      JBASE=JBASE+JUMP
+  160 CONTINUE
+      RETURN
+      END
+
+      SUBROUTINE FFT99(A,WORK,TRIGS,IFAX,INC,JUMP,N,LOT,ISIGN)
+C
+C PURPOSE      PERFORMS MULTIPLE FAST FOURIER TRANSFORMS.  THIS PACKAGE
+C              WILL PERFORM A NUMBER OF SIMULTANEOUS REAL/HALF-COMPLEX
+C              PERIODIC FOURIER TRANSFORMS OR CORRESPONDING INVERSE
+C              TRANSFORMS, I.E.  GIVEN A SET OF REAL DATA VECTORS, THE
+C              PACKAGE RETURNS A SET OF #HALF-COMPLEX# FOURIER
+C              COEFFICIENT VECTORS, OR VICE VERSA.  THE LENGTH OF THE
+C              TRANSFORMS MUST BE AN EVEN NUMBER GREATER THAN 4 THAT HAS
+C              NO OTHER FACTORS EXCEPT POSSIBLY POWERS OF 2, 3, AND 5.
+C              THIS IS AN ALL FORTRAN VERSION OF THE CRAYLIB PACKAGE
+C              THAT IS MOSTLY WRITTEN IN CAL.
+C
+C              THE PACKAGE FFT99F CONTAINS SEVERAL USER-LEVEL ROUTINES:
+C
+C            SUBROUTINE FFTFAX
+C                AN INITIALIZATION ROUTINE THAT MUST BE CALLED ONCE
+C                BEFORE A SEQUENCE OF CALLS TO THE FFT ROUTINES
+C                (PROVIDED THAT N IS NOT CHANGED).
+C
+C            SUBROUTINES FFT99 AND FFT991
+C                TWO FFT ROUTINES THAT RETURN SLIGHTLY DIFFERENT
+C                ARRANGEMENTS OF THE DATA IN GRIDPOINT SPACE.
+C
+C
+C ACCESS       THIS FORTRAN VERSION MAY BE ACCESSED WITH
+C
+C                   *FORTRAN,P=XLIB,SN=FFT99F
+C
+C              TO ACCESS THE CRAY OBJECT CODE, CALLING THE USER ENTRY
+C              POINTS FROM A CRAY PROGRAM IS SUFFICIENT.  THE SOURCE
+C              FORTRAN AND CAL CODE FOR THE CRAYLIB VERSION MAY BE
+C              ACCESSED USING
+C
+C                   FETCH P=CRAYLIB,SN=FFT99
+C                   FETCH P=CRAYLIB,SN=CAL99
+C
+C USAGE        LET N BE OF THE FORM 2**P * 3**Q * 5**R, WHERE P .GE. 1,
+C              Q .GE. 0, AND R .GE. 0.  THEN A TYPICAL SEQUENCE OF
+C              CALLS TO TRANSFORM A GIVEN SET OF REAL VECTORS OF LENGTH
+C              N TO A SET OF #HALF-COMPLEX# FOURIER COEFFICIENT VECTORS
+C              OF LENGTH N IS
+C
+C                   DIMENSION IFAX(13),TRIGS(3*N/2+1),A(M*(N+2)),
+C                  +          WORK(M*(N+1))
+C
+C                   CALL FFTFAX (N, IFAX, TRIGS)
+C                   CALL FFT99 (A,WORK,TRIGS,IFAX,INC,JUMP,N,M,ISIGN)
+C
+C              SEE THE INDIVIDUAL WRITE-UPS FOR FFTFAX, FFT99, AND
+C              FFT991 BELOW, FOR A DETAILED DESCRIPTION OF THE
+C              ARGUMENTS.
+C
+C HISTORY      THE PACKAGE WAS WRITTEN BY CLIVE TEMPERTON AT ECMWF IN
+C              NOVEMBER, 1978.  IT WAS MODIFIED, DOCUMENTED, AND TESTED
+C              FOR NCAR BY RUSS REW IN SEPTEMBER, 1980.
+C
+C-----------------------------------------------------------------------
+C
+C SUBROUTINE FFTFAX (N,IFAX,TRIGS)
+C
+C PURPOSE      A SET-UP ROUTINE FOR FFT99 AND FFT991.  IT NEED ONLY BE
+C              CALLED ONCE BEFORE A SEQUENCE OF CALLS TO THE FFT
+C              ROUTINES (PROVIDED THAT N IS NOT CHANGED).
+C
+C ARGUMENT     IFAX(13),TRIGS(3*N/2+1)
+C DIMENSIONS
+C
+C ARGUMENTS
+C
+C ON INPUT     N
+C               AN EVEN NUMBER GREATER THAN 4 THAT HAS NO PRIME FACTOR
+C               GREATER THAN 5.  N IS THE LENGTH OF THE TRANSFORMS (SEE
+C               THE DOCUMENTATION FOR FFT99 AND FFT991 FOR THE
+C               DEFINITIONS OF THE TRANSFORMS).
+C
+C              IFAX
+C               AN INTEGER ARRAY.  THE NUMBER OF ELEMENTS ACTUALLY USED
+C               WILL DEPEND ON THE FACTORIZATION OF N.  DIMENSIONING
+C               IFAX FOR 13 SUFFICES FOR ALL N LESS THAN A MILLION.
+C
+C              TRIGS
+C               A FLOATING POINT ARRAY OF DIMENSION 3*N/2 IF N/2 IS
+C               EVEN, OR 3*N/2+1 IF N/2 IS ODD.
+C
+C ON OUTPUT    IFAX
+C               CONTAINS THE FACTORIZATION OF N/2.  IFAX(1) IS THE
+C               NUMBER OF FACTORS, AND THE FACTORS THEMSELVES ARE STORED
+C               IN IFAX(2),IFAX(3),...  IF FFTFAX IS CALLED WITH N ODD,
+C               OR IF N HAS ANY PRIME FACTORS GREATER THAN 5, IFAX(1)
+C               IS SET TO -99.
+C
+C              TRIGS
+C               AN ARRAY OF TRIGNOMENTRIC FUNCTION VALUES SUBSEQUENTLY
+C               USED BY THE FFT ROUTINES.
+C
+C-----------------------------------------------------------------------
+C
+C SUBROUTINE FFT991 (A,WORK,TRIGS,IFAX,INC,JUMP,N,M,ISIGN)
+C                       AND
+C SUBROUTINE FFT99 (A,WORK,TRIGS,IFAX,INC,JUMP,N,M,ISIGN)
+C
+C PURPOSE      PERFORM A NUMBER OF SIMULTANEOUS REAL/HALF-COMPLEX
+C              PERIODIC FOURIER TRANSFORMS OR CORRESPONDING INVERSE
+C              TRANSFORMS, USING ORDINARY SPATIAL ORDER OF GRIDPOINT
+C              VALUES (FFT991) OR EXPLICIT CYCLIC CONTINUITY IN THE
+C              GRIDPOINT VALUES (FFT99).  GIVEN A SET
+C              OF REAL DATA VECTORS, THE PACKAGE RETURNS A SET OF
+C              #HALF-COMPLEX# FOURIER COEFFICIENT VECTORS, OR VICE
+C              VERSA.  THE LENGTH OF THE TRANSFORMS MUST BE AN EVEN
+C              NUMBER THAT HAS NO OTHER FACTORS EXCEPT POSSIBLY POWERS
+C              OF 2, 3, AND 5.  THESE VERSION OF FFT991 AND FFT99 ARE
+C              OPTIMIZED FOR USE ON THE CRAY-1.
+C
+C ARGUMENT     A(M*(N+2)), WORK(M*(N+1)), TRIGS(3*N/2+1), IFAX(13)
+C DIMENSIONS
+C
+C ARGUMENTS
+C
+C ON INPUT     A
+C               AN ARRAY OF LENGTH M*(N+2) CONTAINING THE INPUT DATA
+C               OR COEFFICIENT VECTORS.  THIS ARRAY IS OVERWRITTEN BY
+C               THE RESULTS.
+C
+C              WORK
+C               A WORK ARRAY OF DIMENSION M*(N+1)
+C
+C              TRIGS
+C               AN ARRAY SET UP BY FFTFAX, WHICH MUST BE CALLED FIRST.
+C
+C              IFAX
+C               AN ARRAY SET UP BY FFTFAX, WHICH MUST BE CALLED FIRST.
+C
+C              INC
+C               THE INCREMENT (IN WORDS) BETWEEN SUCCESSIVE ELEMENTS OF
+C               EACH DATA OR COEFFICIENT VECTOR (E.G.  INC=1 FOR
+C               CONSECUTIVELY STORED DATA).
+C
+C              JUMP
+C               THE INCREMENT (IN WORDS) BETWEEN THE FIRST ELEMENTS OF
+C               SUCCESSIVE DATA OR COEFFICIENT VECTORS.  ON THE CRAY-1,
+C               TRY TO ARRANGE DATA SO THAT JUMP IS NOT A MULTIPLE OF 8
+C               (TO AVOID MEMORY BANK CONFLICTS).  FOR CLARIFICATION OF
+C               INC AND JUMP, SEE THE EXAMPLES BELOW.
+C
+C              N
+C               THE LENGTH OF EACH TRANSFORM (SEE DEFINITION OF
+C               TRANSFORMS, BELOW).
+C
+C              M
+C               THE NUMBER OF TRANSFORMS TO BE DONE SIMULTANEOUSLY.
+C
+C              ISIGN
+C               = +1 FOR A TRANSFORM FROM FOURIER COEFFICIENTS TO
+C                    GRIDPOINT VALUES.
+C               = -1 FOR A TRANSFORM FROM GRIDPOINT VALUES TO FOURIER
+C                    COEFFICIENTS.
+C
+C ON OUTPUT    A
+C               IF ISIGN = +1, AND M COEFFICIENT VECTORS ARE SUPPLIED
+C               EACH CONTAINING THE SEQUENCE:
+C
+C               A(0),B(0),A(1),B(1),...,A(N/2),B(N/2)  (N+2 VALUES)
+C
+C               THEN THE RESULT CONSISTS OF M DATA VECTORS EACH
+C               CONTAINING THE CORRESPONDING N+2 GRIDPOINT VALUES:
+C
+C               FOR FFT991, X(0), X(1), X(2),...,X(N-1),0,0.
+C               FOR FFT99, X(N-1),X(0),X(1),X(2),...,X(N-1),X(0).
+C                   (EXPLICIT CYCLIC CONTINUITY)
+C
+C               WHEN ISIGN = +1, THE TRANSFORM IS DEFINED BY:
+C                 X(J)=SUM(K=0,...,N-1)(C(K)*EXP(2*I*J*K*PI/N))
+C                 WHERE C(K)=A(K)+I*B(K) AND C(N-K)=A(K)-I*B(K)
+C                 AND I=SQRT (-1)
+C
+C               IF ISIGN = -1, AND M DATA VECTORS ARE SUPPLIED EACH
+C               CONTAINING A SEQUENCE OF GRIDPOINT VALUES X(J) AS
+C               DEFINED ABOVE, THEN THE RESULT CONSISTS OF M VECTORS
+C               EACH CONTAINING THE CORRESPONDING FOURIER COFFICIENTS
+C               A(K), B(K), 0 .LE. K .LE N/2.
+C
+C               WHEN ISIGN = -1, THE INVERSE TRANSFORM IS DEFINED BY:
+C                 C(K)=(1/N)*SUM(J=0,...,N-1)(X(J)*EXP(-2*I*J*K*PI/N))
+C                 WHERE C(K)=A(K)+I*B(K) AND I=SQRT(-1)
+C
+C               A CALL WITH ISIGN=+1 FOLLOWED BY A CALL WITH ISIGN=-1
+C               (OR VICE VERSA) RETURNS THE ORIGINAL DATA.
+C
+C               NOTE: THE FACT THAT THE GRIDPOINT VALUES X(J) ARE REAL
+C               IMPLIES THAT B(0)=B(N/2)=0.  FOR A CALL WITH ISIGN=+1,
+C               IT IS NOT ACTUALLY NECESSARY TO SUPPLY THESE ZEROS.
+C
+C EXAMPLES      GIVEN 19 DATA VECTORS EACH OF LENGTH 64 (+2 FOR EXPLICIT
+C               CYCLIC CONTINUITY), COMPUTE THE CORRESPONDING VECTORS OF
+C               FOURIER COEFFICIENTS.  THE DATA MAY, FOR EXAMPLE, BE
+C               ARRANGED LIKE THIS:
+C
+C FIRST DATA   A(1)=    . . .                A(66)=             A(70)
+C VECTOR       X(63) X(0) X(1) X(2) ... X(63) X(0)  (4 EMPTY LOCATIONS)
+C
+C SECOND DATA  A(71)=   . . .                                  A(140)
+C VECTOR       X(63) X(0) X(1) X(2) ... X(63) X(0)  (4 EMPTY LOCATIONS)
+C
+C               AND SO ON.  HERE INC=1, JUMP=70, N=64, M=19, ISIGN=-1,
+C               AND FFT99 SHOULD BE USED (BECAUSE OF THE EXPLICIT CYCLIC
+C               CONTINUITY).
+C
+C               ALTERNATIVELY THE DATA MAY BE ARRANGED LIKE THIS:
+C
+C                FIRST         SECOND                          LAST
+C                DATA          DATA                            DATA
+C                VECTOR        VECTOR                          VECTOR
+C
+C                 A(1)=         A(2)=                           A(19)=
+C
+C                 X(63)         X(63)       . . .               X(63)
+C        A(20)=   X(0)          X(0)        . . .               X(0)
+C        A(39)=   X(1)          X(1)        . . .               X(1)
+C                  .             .                               .
+C                  .             .                               .
+C                  .             .                               .
+C
+C               IN WHICH CASE WE HAVE INC=19, JUMP=1, AND THE REMAINING
+C               PARAMETERS ARE THE SAME AS BEFORE.  IN EITHER CASE, EACH
+C               COEFFICIENT VECTOR OVERWRITES THE CORRESPONDING INPUT
+C               DATA VECTOR.
+C
+C-----------------------------------------------------------------------
+      DIMENSION A(N),WORK(N),TRIGS(N),IFAX(1)
+C
+C     SUBROUTINE ^FFT99^ - MULTIPLE FAST REAL PERIODIC TRANSFORM
+C     CORRESPONDING TO OLD SCALAR ROUTINE FFT9
+C     PROCEDURE USED TO CONVERT TO HALF-LENGTH COMPLEX TRANSFORM
+C     IS GIVEN BY COOLEY, LEWIS AND WELCH (J. SOUND VIB., VOL. 12
+C     (1970), 315-337)
+C
+C     A IS THE ARRAY CONTAINING INPUT AND OUTPUT DATA
+C     WORK IS AN AREA OF SIZE (N+1)*LOT
+C     TRIGS IS A PREVIOUSLY PREPARED LIST OF TRIG FUNCTION VALUES
+C     IFAX IS A PREVIOUSLY PREPARED LIST OF FACTORS OF N/2
+C     INC IS THE INCREMENT WITHIN EACH DATA #VECTOR#
+C         (E.G. INC=1 FOR CONSECUTIVELY STORED DATA)
+C     JUMP IS THE INCREMENT BETWEEN THE START OF EACH DATA VECTOR
+C     N IS THE LENGTH OF THE DATA VECTORS
+C     LOT IS THE NUMBER OF DATA VECTORS
+C     ISIGN = +1 FOR TRANSFORM FROM SPECTRAL TO GRIDPOINT
+C           = -1 FOR TRANSFORM FROM GRIDPOINT TO SPECTRAL
+C
+C     ORDERING OF COEFFICIENTS:
+C         A(0),B(0),A(1),B(1),A(2),B(2),...,A(N/2),B(N/2)
+C         WHERE B(0)=B(N/2)=0; (N+2) LOCATIONS REQUIRED
+C
+C     ORDERING OF DATA:
+C         X(N-1),X(0),X(1),X(2),...,X(N),X(0)
+C         I.E. EXPLICIT CYCLIC CONTINUITY; (N+2) LOCATIONS REQUIRED
+C
+C     VECTORIZATION IS ACHIEVED ON CRAY BY DOING THE TRANSFORMS IN
+C     PARALLEL
+C
+C     *** N.B. N IS ASSUMED TO BE AN EVEN NUMBER
+C
+C     DEFINITION OF TRANSFORMS:
+C     -------------------------
+C
+C     ISIGN=+1: X(J)=SUM(K=0,...,N-1)(C(K)*EXP(2*I*J*K*PI/N))
+C         WHERE C(K)=A(K)+I*B(K) AND C(N-K)=A(K)-I*B(K)
+C
+C     ISIGN=-1: A(K)=(1/N)*SUM(J=0,...,N-1)(X(J)*COS(2*J*K*PI/N))
+C               B(K)=-(1/N)*SUM(J=0,...,N-1)(X(J)*SIN(2*J*K*PI/N))
+C
+C
+C THE FOLLOWING CALL IS FOR MONITORING LIBRARY USE AT NCAR
+C      CALL Q8QST4 ( 4HXLIB, 6HFFT99F, 5HFFT99, 10HVERSION 01)
+      NFAX=IFAX(1)
+      NX=N+1
+      NH=N/2
+      INK=INC+INC
+      IF (ISIGN.EQ.+1) GO TO 30
+C
+C     IF NECESSARY, TRANSFER DATA TO WORK AREA
+      IGO=50
+      IF (MOD(NFAX,2).EQ.1) GOTO 40
+      IBASE=INC+1
+      JBASE=1
+      DO 20 L=1,LOT
+      I=IBASE
+      J=JBASE
+C$DIR NO_RECURRENCE
+      DO 10 M=1,N
+      WORK(J)=A(I)
+      I=I+INC
+      J=J+1
+   10 CONTINUE
+      IBASE=IBASE+JUMP
+      JBASE=JBASE+NX
+   20 CONTINUE
+C
+      IGO=60
+      GO TO 40
+C
+C     PREPROCESSING (ISIGN=+1)
+C     ------------------------
+C
+   30 CONTINUE
+      CALL FFT99A(A,WORK,TRIGS,INC,JUMP,N,LOT)
+      IGO=60
+C
+C     COMPLEX TRANSFORM
+C     -----------------
+C
+   40 CONTINUE
+      IA=INC+1
+      LA=1
+      DO 80 K=1,NFAX
+      IF (IGO.EQ.60) GO TO 60
+   50 CONTINUE
+      CALL VPASSM(A(IA),A(IA+INC),WORK(1),WORK(2),TRIGS,
+     *   INK,2,JUMP,NX,LOT,NH,IFAX(K+1),LA)
+      IGO=60
+      GO TO 70
+   60 CONTINUE
+      CALL VPASSM(WORK(1),WORK(2),A(IA),A(IA+INC),TRIGS,
+     *    2,INK,NX,JUMP,LOT,NH,IFAX(K+1),LA)
+      IGO=50
+   70 CONTINUE
+      LA=LA*IFAX(K+1)
+   80 CONTINUE
+C
+      IF (ISIGN.EQ.-1) GO TO 130
+C
+C     IF NECESSARY, TRANSFER DATA FROM WORK AREA
+      IF (MOD(NFAX,2).EQ.1) GO TO 110
+      IBASE=1
+      JBASE=IA
+      DO 100 L=1,LOT
+      I=IBASE
+      J=JBASE
+C$DIR NO_RECURRENCE
+      DO 90 M=1,N
+      A(J)=WORK(I)
+      I=I+1
+      J=J+INC
+   90 CONTINUE
+      IBASE=IBASE+NX
+      JBASE=JBASE+JUMP
+  100 CONTINUE
+C
+C     FILL IN CYCLIC BOUNDARY POINTS
+  110 CONTINUE
+      IA=1
+      IB=N*INC+1
+C$DIR NO_RECURRENCE
+      DO 120 L=1,LOT
+      A(IA)=A(IB)
+      A(IB+INC)=A(IA+INC)
+      IA=IA+JUMP
+      IB=IB+JUMP
+  120 CONTINUE
+      GO TO 140
+C
+C     POSTPROCESSING (ISIGN=-1):
+C     --------------------------
+C
+  130 CONTINUE
+      CALL FFT99B(WORK,A,TRIGS,INC,JUMP,N,LOT)
+C
+  140 CONTINUE
+      RETURN
+      END
+
+      SUBROUTINE FFT99A(A,WORK,TRIGS,INC,JUMP,N,LOT)
+      DIMENSION A(N),WORK(N),TRIGS(N)
+C
+C     SUBROUTINE FFT99A - PREPROCESSING STEP FOR FFT99, ISIGN=+1
+C     (SPECTRAL TO GRIDPOINT TRANSFORM)
+C
+      NH=N/2
+      NX=N+1
+      INK=INC+INC
+C
+C     A(0) AND A(N/2)
+      IA=1
+      IB=N*INC+1
+      JA=1
+      JB=2
+C$DIR NO_RECURRENCE
+      DO 10 L=1,LOT
+      WORK(JA)=A(IA)+A(IB)
+      WORK(JB)=A(IA)-A(IB)
+      IA=IA+JUMP
+      IB=IB+JUMP
+      JA=JA+NX
+      JB=JB+NX
+   10 CONTINUE
+C
+C     REMAINING WAVENUMBERS
+      IABASE=2*INC+1
+      IBBASE=(N-2)*INC+1
+      JABASE=3
+      JBBASE=N-1
+C
+      DO 30 K=3,NH,2
+      IA=IABASE
+      IB=IBBASE
+      JA=JABASE
+      JB=JBBASE
+      C=TRIGS(N+K)
+      S=TRIGS(N+K+1)
+C$DIR NO_RECURRENCE
+      DO 20 L=1,LOT
+      WORK(JA)=(A(IA)+A(IB))-
+     *    (S*(A(IA)-A(IB))+C*(A(IA+INC)+A(IB+INC)))
+      WORK(JB)=(A(IA)+A(IB))+
+     *    (S*(A(IA)-A(IB))+C*(A(IA+INC)+A(IB+INC)))
+      WORK(JA+1)=(C*(A(IA)-A(IB))-S*(A(IA+INC)+A(IB+INC)))+
+     *    (A(IA+INC)-A(IB+INC))
+      WORK(JB+1)=(C*(A(IA)-A(IB))-S*(A(IA+INC)+A(IB+INC)))-
+     *    (A(IA+INC)-A(IB+INC))
+      IA=IA+JUMP
+      IB=IB+JUMP
+      JA=JA+NX
+      JB=JB+NX
+   20 CONTINUE
+      IABASE=IABASE+INK
+      IBBASE=IBBASE-INK
+      JABASE=JABASE+2
+      JBBASE=JBBASE-2
+   30 CONTINUE
+C
+      IF (IABASE.NE.IBBASE) GO TO 50
+C     WAVENUMBER N/4 (IF IT EXISTS)
+      IA=IABASE
+      JA=JABASE
+C$DIR NO_RECURRENCE
+      DO 40 L=1,LOT
+      WORK(JA)=2.0*A(IA)
+      WORK(JA+1)=-2.0*A(IA+INC)
+      IA=IA+JUMP
+      JA=JA+NX
+   40 CONTINUE
+C
+   50 CONTINUE
+      RETURN
+      END
+
+      SUBROUTINE FFT99B(WORK,A,TRIGS,INC,JUMP,N,LOT)
+      DIMENSION WORK(N),A(N),TRIGS(N)
+C
+C     SUBROUTINE FFT99B - POSTPROCESSING STEP FOR FFT99, ISIGN=-1
+C     (GRIDPOINT TO SPECTRAL TRANSFORM)
+C
+      NH=N/2
+      NX=N+1
+      INK=INC+INC
+C
+C     A(0) AND A(N/2)
+      SCALE=1.0/FLOAT(N)
+      IA=1
+      IB=2
+      JA=1
+      JB=N*INC+1
+C$DIR NO_RECURRENCE
+      DO 10 L=1,LOT
+      A(JA)=SCALE*(WORK(IA)+WORK(IB))
+      A(JB)=SCALE*(WORK(IA)-WORK(IB))
+      A(JA+INC)=0.0
+      A(JB+INC)=0.0
+      IA=IA+NX
+      IB=IB+NX
+      JA=JA+JUMP
+      JB=JB+JUMP
+   10 CONTINUE
+C
+C     REMAINING WAVENUMBERS
+      SCALE=0.5*SCALE
+      IABASE=3
+      IBBASE=N-1
+      JABASE=2*INC+1
+      JBBASE=(N-2)*INC+1
+C
+      DO 30 K=3,NH,2
+      IA=IABASE
+      IB=IBBASE
+      JA=JABASE
+      JB=JBBASE
+      C=TRIGS(N+K)
+      S=TRIGS(N+K+1)
+C$DIR NO_RECURRENCE
+      DO 20 L=1,LOT
+      A(JA)=SCALE*((WORK(IA)+WORK(IB))
+     *   +(C*(WORK(IA+1)+WORK(IB+1))+S*(WORK(IA)-WORK(IB))))
+      A(JB)=SCALE*((WORK(IA)+WORK(IB))
+     *   -(C*(WORK(IA+1)+WORK(IB+1))+S*(WORK(IA)-WORK(IB))))
+      A(JA+INC)=SCALE*((C*(WORK(IA)-WORK(IB))-S*(WORK(IA+1)+WORK(IB+1)))
+     *    +(WORK(IB+1)-WORK(IA+1)))
+      A(JB+INC)=SCALE*((C*(WORK(IA)-WORK(IB))-S*(WORK(IA+1)+WORK(IB+1)))
+     *    -(WORK(IB+1)-WORK(IA+1)))
+      IA=IA+NX
+      IB=IB+NX
+      JA=JA+JUMP
+      JB=JB+JUMP
+   20 CONTINUE
+      IABASE=IABASE+2
+      IBBASE=IBBASE-2
+      JABASE=JABASE+INK
+      JBBASE=JBBASE-INK
+   30 CONTINUE
+C
+      IF (IABASE.NE.IBBASE) GO TO 50
+C     WAVENUMBER N/4 (IF IT EXISTS)
+      IA=IABASE
+      JA=JABASE
+      SCALE=2.0*SCALE
+C$DIR NO_RECURRENCE
+      DO 40 L=1,LOT
+      A(JA)=SCALE*WORK(IA)
+      A(JA+INC)=-SCALE*WORK(IA+1)
+      IA=IA+NX
+      JA=JA+JUMP
+   40 CONTINUE
+C
+   50 CONTINUE
+      RETURN
+      END
+
+      SUBROUTINE FFT991(A,WORK,TRIGS,IFAX,INC,JUMP,N,LOT,ISIGN)
+      DIMENSION A(N),WORK(N),TRIGS(N),IFAX(1)
+C
+C     SUBROUTINE ^FFT991^ - MULTIPLE REAL/HALF-COMPLEX PERIODIC
+C     FAST FOURIER TRANSFORM
+C
+C     SAME AS FFT99 EXCEPT THAT ORDERING OF DATA CORRESPONDS TO
+C     THAT IN MRFFT2
+C
+C     PROCEDURE USED TO CONVERT TO HALF-LENGTH COMPLEX TRANSFORM
+C     IS GIVEN BY COOLEY, LEWIS AND WELCH (J. SOUND VIB., VOL. 12
+C     (1970), 315-337)
+C
+C     A IS THE ARRAY CONTAINING INPUT AND OUTPUT DATA
+C     WORK IS AN AREA OF SIZE (N+1)*LOT
+C     TRIGS IS A PREVIOUSLY PREPARED LIST OF TRIG FUNCTION VALUES
+C     IFAX IS A PREVIOUSLY PREPARED LIST OF FACTORS OF N/2
+C     INC IS THE INCREMENT WITHIN EACH DATA #VECTOR#
+C         (E.G. INC=1 FOR CONSECUTIVELY STORED DATA)
+C     JUMP IS THE INCREMENT BETWEEN THE START OF EACH DATA VECTOR
+C     N IS THE LENGTH OF THE DATA VECTORS
+C     LOT IS THE NUMBER OF DATA VECTORS
+C     ISIGN = +1 FOR TRANSFORM FROM SPECTRAL TO GRIDPOINT
+C           = -1 FOR TRANSFORM FROM GRIDPOINT TO SPECTRAL
+C
+C     ORDERING OF COEFFICIENTS:
+C         A(0),B(0),A(1),B(1),A(2),B(2),...,A(N/2),B(N/2)
+C         WHERE B(0)=B(N/2)=0; (N+2) LOCATIONS REQUIRED
+C
+C     ORDERING OF DATA:
+C         X(0),X(1),X(2),...,X(N-1)
+C
+C     VECTORIZATION IS ACHIEVED ON CRAY BY DOING THE TRANSFORMS IN
+C     PARALLEL
+C
+C     *** N.B. N IS ASSUMED TO BE AN EVEN NUMBER
+C
+C     DEFINITION OF TRANSFORMS:
+C     -------------------------
+C
+C     ISIGN=+1: X(J)=SUM(K=0,...,N-1)(C(K)*EXP(2*I*J*K*PI/N))
+C         WHERE C(K)=A(K)+I*B(K) AND C(N-K)=A(K)-I*B(K)
+C
+C     ISIGN=-1: A(K)=(1/N)*SUM(J=0,...,N-1)(X(J)*COS(2*J*K*PI/N))
+C               B(K)=-(1/N)*SUM(J=0,...,N-1)(X(J)*SIN(2*J*K*PI/N))
+C
+C THE FOLLOWING CALL IS FOR MONITORING LIBRARY USE AT NCAR
+C      CALL Q8QST4 ( 4HXLIB, 6HFFT99F, 6HFFT991, 10HVERSION 01)
+      NFAX=IFAX(1)
+      NX=N+1
+      NH=N/2
+      INK=INC+INC
+      IF (ISIGN.EQ.+1) GO TO 30
+C
+C     IF NECESSARY, TRANSFER DATA TO WORK AREA
+      IGO=50
+      IF (MOD(NFAX,2).EQ.1) GOTO 40
+      IBASE=1
+      JBASE=1
+      DO 20 L=1,LOT
+      I=IBASE
+      J=JBASE
+C$DIR NO_RECURRENCE
+      DO 10 M=1,N
+      WORK(J)=A(I)
+      I=I+INC
+      J=J+1
+   10 CONTINUE
+      IBASE=IBASE+JUMP
+      JBASE=JBASE+NX
+   20 CONTINUE
+C
+      IGO=60
+      GO TO 40
+C
+C     PREPROCESSING (ISIGN=+1)
+C     ------------------------
+C
+   30 CONTINUE
+      CALL FFT99A(A,WORK,TRIGS,INC,JUMP,N,LOT)
+      IGO=60
+C
+C     COMPLEX TRANSFORM
+C     -----------------
+C
+   40 CONTINUE
+      IA=1
+      LA=1
+      DO 80 K=1,NFAX
+      IF (IGO.EQ.60) GO TO 60
+   50 CONTINUE
+      CALL VPASSM(A(IA),A(IA+INC),WORK(1),WORK(2),TRIGS,
+     *   INK,2,JUMP,NX,LOT,NH,IFAX(K+1),LA)
+      IGO=60
+      GO TO 70
+   60 CONTINUE
+      CALL VPASSM(WORK(1),WORK(2),A(IA),A(IA+INC),TRIGS,
+     *    2,INK,NX,JUMP,LOT,NH,IFAX(K+1),LA)
+      IGO=50
+   70 CONTINUE
+      LA=LA*IFAX(K+1)
+   80 CONTINUE
+C
+      IF (ISIGN.EQ.-1) GO TO 130
+C
+C     IF NECESSARY, TRANSFER DATA FROM WORK AREA
+      IF (MOD(NFAX,2).EQ.1) GO TO 110
+      IBASE=1
+      JBASE=1
+      DO 100 L=1,LOT
+      I=IBASE
+      J=JBASE
+C$DIR NO_RECURRENCE
+      DO 90 M=1,N
+      A(J)=WORK(I)
+      I=I+1
+      J=J+INC
+   90 CONTINUE
+      IBASE=IBASE+NX
+      JBASE=JBASE+JUMP
+  100 CONTINUE
+C
+C     FILL IN ZEROS AT END
+  110 CONTINUE
+      IB=N*INC+1
+C$DIR NO_RECURRENCE
+      DO 120 L=1,LOT
+      A(IB)=0.0
+      A(IB+INC)=0.0
+      IB=IB+JUMP
+  120 CONTINUE
+      GO TO 140
+C
+C     POSTPROCESSING (ISIGN=-1):
+C     --------------------------
+C
+  130 CONTINUE
+      CALL FFT99B(WORK,A,TRIGS,INC,JUMP,N,LOT)
+C
+  140 CONTINUE
+      RETURN
+      END
+
+      SUBROUTINE FFTFAX(N,IFAX,TRIGS)
+      DIMENSION IFAX(13),TRIGS(1)
+C
+C MODE 3 IS USED FOR REAL/HALF-COMPLEX TRANSFORMS.  IT IS POSSIBLE
+C TO DO COMPLEX/COMPLEX TRANSFORMS WITH OTHER VALUES OF MODE, BUT
+C DOCUMENTATION OF THE DETAILS WERE NOT AVAILABLE WHEN THIS ROUTINE
+C WAS WRITTEN.
+C
+      DATA MODE /3/
+      CALL FAX (IFAX, N, MODE)
+      I = IFAX(1)
+      IF (IFAX(I+1) .GT. 5 .OR. N .LE. 4) IFAX(1) = -99
+      IF (IFAX(1) .LE. 0 )PRINT*,' FFTFAX -- INVALID N'
+      CALL FFTRIG (TRIGS, N, MODE)
+      RETURN
+      END
+
+      SUBROUTINE FAX(IFAX,N,MODE)
+      DIMENSION IFAX(10)
+      NN=N
+      IF (IABS(MODE).EQ.1) GO TO 10
+      IF (IABS(MODE).EQ.8) GO TO 10
+      NN=N/2
+      IF ((NN+NN).EQ.N) GO TO 10
+      IFAX(1)=-99
+      RETURN
+   10 K=1
+C     TEST FOR FACTORS OF 4
+   20 IF (MOD(NN,4).NE.0) GO TO 30
+      K=K+1
+      IFAX(K)=4
+      NN=NN/4
+      IF (NN.EQ.1) GO TO 80
+      GO TO 20
+C     TEST FOR EXTRA FACTOR OF 2
+   30 IF (MOD(NN,2).NE.0) GO TO 40
+      K=K+1
+      IFAX(K)=2
+      NN=NN/2
+      IF (NN.EQ.1) GO TO 80
+C     TEST FOR FACTORS OF 3
+   40 IF (MOD(NN,3).NE.0) GO TO 50
+      K=K+1
+      IFAX(K)=3
+      NN=NN/3
+      IF (NN.EQ.1) GO TO 80
+      GO TO 40
+C     NOW FIND REMAINING FACTORS
+   50 L=5
+      INC=2
+C     INC ALTERNATELY TAKES ON VALUES 2 AND 4
+   60 IF (MOD(NN,L).NE.0) GO TO 70
+      K=K+1
+      IFAX(K)=L
+      NN=NN/L
+      IF (NN.EQ.1) GO TO 80
+      GO TO 60
+   70 L=L+INC
+      INC=6-INC
+      GO TO 60
+   80 IFAX(1)=K-1
+C     IFAX(1) CONTAINS NUMBER OF FACTORS
+      NFAX=IFAX(1)
+C     SORT FACTORS INTO ASCENDING ORDER
+      IF (NFAX.EQ.1) GO TO 110
+      DO 100 II=2,NFAX
+      ISTOP=NFAX+2-II
+      DO 90 I=2,ISTOP
+      IF (IFAX(I+1).GE.IFAX(I)) GO TO 90
+      ITEM=IFAX(I)
+      IFAX(I)=IFAX(I+1)
+      IFAX(I+1)=ITEM
+   90 CONTINUE
+  100 CONTINUE
+  110 CONTINUE
+      RETURN
+      END
+
+      SUBROUTINE FFTRIG(TRIGS,N,MODE)
+      DIMENSION TRIGS(1)
+      PI=2.0*ASIN(1.0)
+      IMODE=IABS(MODE)
+      NN=N
+      IF (IMODE.GT.1.AND.IMODE.LT.6) NN=N/2
+      DEL=(PI+PI)/FLOAT(NN)
+      L=NN+NN
+      DO 10 I=1,L,2
+      ANGLE=0.5*FLOAT(I-1)*DEL
+      TRIGS(I)=COS(ANGLE)
+      TRIGS(I+1)=SIN(ANGLE)
+   10 CONTINUE
+      IF (IMODE.EQ.1) RETURN
+      IF (IMODE.EQ.8) RETURN
+      DEL=0.5*DEL
+      NH=(NN+1)/2
+      L=NH+NH
+      LA=NN+NN
+      DO 20 I=1,L,2
+      ANGLE=0.5*FLOAT(I-1)*DEL
+      TRIGS(LA+I)=COS(ANGLE)
+      TRIGS(LA+I+1)=SIN(ANGLE)
+   20 CONTINUE
+      IF (IMODE.LE.3) RETURN
+      DEL=0.5*DEL
+      LA=LA+NN
+      IF (MODE.EQ.5) GO TO 40
+      DO 30 I=2,NN
+      ANGLE=FLOAT(I-1)*DEL
+      TRIGS(LA+I)=2.0*SIN(ANGLE)
+   30 CONTINUE
+      RETURN
+   40 CONTINUE
+      DEL=0.5*DEL
+      DO 50 I=2,N
+      ANGLE=FLOAT(I-1)*DEL
+      TRIGS(LA+I)=SIN(ANGLE)
+   50 CONTINUE
+      RETURN
+      END
+C------
Index: /trunk/SpectralModelF90/PROJECTS/trivial/columns_to_slabs.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/columns_to_slabs.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/columns_to_slabs.f	(revision 6)
@@ -0,0 +1,93 @@
+      subroutine columns_to_slabs(x,xc,nx,ny,nz,locnx,locnz,numprocs,
+     *                            myid,comm,twoslice,subslice,buffer)
+
+c     Routine to swap data from "column" orientation to "slab"  orientation.
+c     See data maps for details. Relies on the specialized data  structures
+c     "subslice" and "twoslice" defined in "create_MPI_data_type".
+
+      implicit none
+#include "mpif.h"
+      integer MAXPROCS,BYTESPERWORD,NUMBUFS
+      parameter(MAXPROCS=1024,BYTESPERWORD=4,NUMBUFS=2)
+      integer status_array(MPI_STATUS_SIZE,2*MAXPROCS)
+      integer nx,ny,nz,locnx,locnz,numprocs,myid
+      integer comm,twoslice,subslice,ierr
+      real x(nx+2,ny+1,locnz+1)
+      real buffer((nx+2)*(ny+1)*(locnz+1))
+      complex xc(locnx,ny+1,nz+1)
+
+      integer iproc,istart,kstart,source,dest,numwords,tag
+      integer j,reqs(2*MAXPROCS),nreqs
+
+      character*80 msg_text
+      integer msg_len,jerr
+
+c     Ship portions of my local data "column" xc needed by other nodes
+c     and recieve remote data required to construct my local data
+c     "slab" x.
+
+!1st post the receives
+      do iproc=0,numprocs-1
+       istart=(iproc*2*locnx)+1    ! start index for recieving "real"  data x
+       source=iproc
+       tag = 2
+       j=iproc+1
+       call  MPI_IRECV(x(istart,1,1),1,subslice,source,tag,comm,reqs(j),ierr)
+      enddo
+      call MPI_BARRIER(comm,ierr)
+
+! now post the sends
+      do iproc=0,numprocs-1
+       kstart=(iproc*locnz)+1      ! start index for sending "complex"  data xc
+       dest=iproc
+       numwords=2*locnx*(ny+1)*locnz ! # of real words to send from xc  w/ each send
+       tag = 2
+       j=numprocs+iproc+1
+       call  MPI_IRSEND(xc(1,1,kstart),numwords,MPI_REAL,dest,tag,comm,reqs(j),ierr)
+      enddo
+
+c     make sure all communications are done before proceeding
+      call MPI_WAITALL(2*numprocs,reqs,status_array,ierr)
+      call MPI_BARRIER(comm,ierr)
+
+c     Processor (numprocs-1)still needs to assemble its uppermost  (nz+1) slice.
+c     lets explicitly count the communications requests, start with 1
+      j=0  !  will increment after each comm
+
+c     First, Processor (numprocs-1) issues the numprocs recieves.
+c     these have request numbers 1->numprocs, but are only issued by top processor
+      kstart=locnz+1              ! k start index for recieving real  data x
+      numwords=1
+      if( myid .eq. numprocs-1 ) then
+       do iproc=0,numprocs-1
+        istart=(iproc*2*locnx)+1  ! i start index for recieving real  data x
+        source=iproc
+        j=iproc+1
+        call MPI_IRECV(x(istart,1,kstart),numwords,twoslice,source,
+     *                tag,comm,reqs(j),ierr)
+       enddo
+      endif
+      call MPI_BARRIER(comm,ierr)
+
+c     Now, post the sends. Each processor posts one send: request number numprocs+1
+c     Note that even the top processor sends/receives w itself
+c     Each processor sends its k=nz+1 data to processor (numprocs-1)
+      dest=numprocs-1
+      numwords=2*locnx*(ny+1)  ! real words
+      kstart=nz+1
+      j=numprocs+1
+      call  MPI_IRSEND(xc(1,1,kstart),numwords,MPI_REAL,dest,tag,comm,reqs(j),ierr) ! i.e. req numprocs+1
+
+      if( myid .eq. numprocs-1 ) then
+            nreqs = numprocs + 1  ! numprocs receives, 1 send
+       call MPI_WAITALL(nreqs,reqs(1),status_array,ierr)
+      else
+       nreqs=1    ! just one send
+       call MPI_WAITALL(nreqs,reqs(numprocs+1),status_array,ierr)
+      endif
+
+c     make sure all of the top plane communications are done
+      call MPI_BARRIER(comm,ierr)
+
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/create_mpi_data_type.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/create_mpi_data_type.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/create_mpi_data_type.f	(revision 6)
@@ -0,0 +1,35 @@
+      subroutine create_MPI_data_type(nx,ny,nz,locnx,locnz,
+     *                                twoslice,subslice,myid,comm)
+ 
+c     Routine to create a specialized data type for MPI data swaps
+c     between processors. See real and complex data maps for details.
+ 
+      implicit none
+#include "mpif.h"
+      integer nx,ny,nz,locnx,locnz
+      integer myid,comm,ierr
+      integer sizeofreal,oneslice,twoslice,subslice
+
+      call MPI_TYPE_EXTENT(MPI_REAL,sizeofreal,ierr)
+
+
+c     data type for 1d section of basic data slice: 2*locnx
+      call MPI_TYPE_VECTOR(2*locnx,1,1,MPI_REAL,oneslice,ierr)
+
+c     data type for 2d section of basic data slice: ny+1 1d sections
+      call MPI_TYPE_HVECTOR(ny+1,1,(nx+2)*sizeofreal,oneslice,twoslice,ierr)
+      if( myid .eq. 0 ) then
+       if( ierr .ne. 0 ) write(6,*) ' TYPE_HVECTOR twoslice failure'
+      endif
+      call MPI_TYPE_COMMIT(twoslice,ierr)
+
+c     data type for 3d section of basic data slice: locnz 2d sections
+      call MPI_TYPE_HVECTOR(locnz,1,(nx+2)*(ny+1)*sizeofreal,
+     *                      twoslice,subslice,ierr)
+      if( myid .eq. 0 ) then
+       if( ierr .ne. 0 ) write(6,*) ' TYPE_HVECTOR subslice failure'
+      endif
+      call MPI_TYPE_COMMIT(subslice,ierr)
+
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/ds_interp.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/ds_interp.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/ds_interp.f	(revision 6)
@@ -0,0 +1,347 @@
+      subroutine ds_interp(x0,y0,z0,F,kx,ky,kz,locnx,ny,nz,
+     *                     trans_flag,val,myid,comm)
+c
+c     Direct Fourier sum interpolation given the fff/ffc/ffs coefficients
+c     F(kx,ky,kz) at the specified point x0,y0,z0. The wavenumber
+c     values are stored in the 1d arrays kx, ky and kz. Legal values
+c     of trans_flag are 'f','c' or 's' indicating that the field is
+c     fourier, cosine or sine expanded in the z direction. Fourier is assumed
+c     in both x and y. The interpolated value "val" is returned.
+c
+c     Modified for parallel execution under MPI, KW, 8/22/00
+c
+
+      implicit none
+#include "mpif.h"
+      integer i,j,k,locnx,ny,nz,nyplanes,myid,comm
+      integer istart,iend,ierr
+      real val,x0,y0,z0,arg,global_val,xnorm
+      real kx(locnx),ky(ny+1),kz(nz+1)
+      complex F(locnx,ny+1,nz+1)
+      complex htrig1,htrig2,vtrig,dval
+      character*1 trans_flag
+
+c     Determine length of y wavenumber vector.
+      if( ny .eq. 0 ) then
+       nyplanes=1
+      else
+       nyplanes=ny
+      endif
+
+c     loop control depends on processor id because
+c     only processor 0 has the kx=0 (conj symmetry) wavenumber
+c     Note that the nyquist in x is not stored.
+      if( myid .eq. 0 ) then
+       istart=2
+       iend=locnx
+      else
+       istart=1
+       iend=locnx
+      endif
+      
+      if( trans_flag .eq. 'c' ) then   ! cosine transform in z
+       xnorm = 2./float(nz)
+       dval = (0.0,0.0)
+       do j=1,nyplanes
+
+        if( myid .eq. 0 ) then
+ccc      for kx=0, don't need to consider implicitly represented
+ccc      2d conjugate symmetric modes
+         i = 1
+         arg = ky(j)*y0
+         htrig1 = cmplx( cos(arg) , sin(arg) )  
+
+         k=1
+         vtrig = cos( kz(k)*z0 )/2.
+         dval = dval + F(i,j,k)*htrig1*vtrig
+         do k=2,nz+1         ! loop over k for i=1
+           vtrig = cos( kz(k)*z0 )
+           dval = dval + F(i,j,k)*htrig1*vtrig
+         enddo   
+        endif   ! end special logic for kx=0
+
+ccc     for kx>0, we need to include implicitly represented
+ccc     conjugate symmetric modes (in kx,ky plane)
+        do i=istart,iend
+         arg = kx(i)*x0 + ky(j)*y0
+         htrig1 = cmplx( cos(arg) , sin(arg) )  ! for kx > 0
+         htrig2 = cmplx( cos(arg) ,-sin(arg) )  ! for kx < 0 (implicit)
+
+         k=1
+         vtrig = cos( kz(k)*z0 )/2.
+         dval = dval + F(i,j,k)*htrig1*vtrig
+     *            + conjg(F(i,j,k))*htrig2*vtrig 
+         do k=2,nz+1     ! loop over k for i > 1
+          vtrig = cos( kz(k)*z0 )
+          dval = dval + F(i,j,k)*htrig1*vtrig
+     *              + conjg(F(i,j,k))*htrig2*vtrig 
+         enddo   
+
+        enddo    ! end loop over wavenumbers w/ conj pairs
+
+       enddo     ! end j loop
+       val = real(dval)*xnorm
+       call MPI_BARRIER(comm,ierr)
+c      partial sums now complete, compute global sum
+       call MPI_ALLREDUCE(val,global_val,1,MPI_REAL,MPI_SUM,comm,ierr)
+       val=global_val
+
+      elseif( trans_flag .eq. 's' ) then   ! sine transform in z
+       xnorm = 2./float(nz)   
+       dval = 0.0
+       do j=1,nyplanes
+
+        if( myid .eq. 0 ) then
+ccc      for kx=0, don't need to consider implicitly represented
+ccc      2d conjugate symmetric modes
+         i = 1
+         arg = ky(j)*y0
+         htrig1 = cmplx( cos(arg) , sin(arg) )  
+
+         k=1
+         vtrig = sin( kz(k)*z0 )/2.
+         dval = dval + F(i,j,k)*htrig1*vtrig
+         do k=2,nz+1         ! loop over k for i=1
+           vtrig = sin( kz(k)*z0 )
+           dval = dval + F(i,j,k)*htrig1*vtrig
+         enddo   
+        endif   ! end special logic for kx=0 modes
+
+ccc     for kx>0, we need to include implicitly represented
+ccc     conjugate symmetric modes (in kx,ky plane)
+        do i=istart,iend
+         arg = kx(i)*x0 + ky(j)*y0
+         htrig1 = cmplx( cos(arg) , sin(arg) )  ! for kx > 0
+         htrig2 = cmplx( cos(arg) ,-sin(arg) )  ! for kx < 0 (implicit)
+
+         k=1
+         vtrig = sin( kz(k)*z0 )/2.
+         dval = dval + F(i,j,k)*htrig1*vtrig
+     *            + conjg(F(i,j,k))*htrig2*vtrig 
+         do k=2,nz+1     ! loop over k for i > 1
+          vtrig = sin( kz(k)*z0 )  
+          dval = dval + F(i,j,k)*htrig1*vtrig
+     *              + conjg(F(i,j,k))*htrig2*vtrig 
+         enddo   
+
+        enddo    ! end loop over modes w/ conj symmetry pairs
+
+       enddo     ! end j loop
+       val = real(dval)*xnorm
+       call MPI_BARRIER(comm,ierr)
+c      partial sums now complete, compute global sum
+       call MPI_ALLREDUCE(val,global_val,1,MPI_REAL,MPI_SUM,comm,ierr)
+       val=global_val
+
+
+      elseif( trans_flag .eq. 'f' ) then   ! Fourier transform in z
+      
+       dval = 0.0
+       do k=1,nz
+        do j=1,nyplanes
+         if( myid .eq. 0 ) then
+          i=1
+          arg = kx(i)*x0 + ky(j)*y0 + kz(k)*z0
+          htrig1 = cmplx( cos(arg) , sin(arg) )  ! for kx > 0
+          dval = dval + F(i,j,k)*htrig1
+         endif
+         do i=istart,iend
+          arg = kx(i)*x0 + ky(j)*y0 + kz(k)*z0
+          htrig1 = cmplx( cos(arg) , sin(arg) )  ! for kx > 0
+          htrig2 = cmplx( cos(arg) ,-sin(arg) )  ! for kx < 0 (implicit)
+          dval = dval + F(i,j,k)*htrig1 + conjg(F(i,j,k))*htrig2
+         enddo
+
+        enddo
+       enddo
+
+       val = real(dval)
+       call MPI_BARRIER(comm,ierr)
+c      partial sums now complete, compute global sum
+       call MPI_ALLREDUCE(val,global_val,1,MPI_REAL,MPI_SUM,comm,ierr)
+       val=global_val
+
+      endif
+
+      return
+      end
+
+
+      subroutine ds_L_interp(x0,y0,z0,F,kx,ky,kz,locnx,ny,nz,
+     *                     trans_flag,val,myid,comm)
+c
+c     Direct Fourier sum interpolation of the LAPLACIAN of
+c     F(kx,ky,kz) at the specified point x0,y0,z0
+c     given the fff/ffc/ffs coefficients
+c     The wavenumber
+c     values are stored in the 1d arrays kx, ky and kz. Legal values
+c     of trans_flag are 'f','c' or 's' indicating that the field is
+c     fourier, cosine or sine expanded in the z direction. Fourier is assumed
+c     in both x and y. The interpolated value "val" is returned.
+c
+c
+
+      implicit none
+#include "mpif.h"
+      integer i,j,k,locnx,ny,nz,nyplanes,myid,comm
+      integer istart,iend,ierr
+      real val,x0,y0,z0,arg,kappa2,global_val,xnorm
+      real kx(locnx),ky(ny+1),kz(nz+1)
+      complex F(locnx,ny+1,nz+1)
+      complex htrig1,htrig2,vtrig,dval
+      character*1 trans_flag
+
+      if( ny .eq. 0 ) then
+       nyplanes=1
+      else
+       nyplanes=ny
+      endif
+
+c     loop control depends on processpr id because
+c     only processor 0 has the kx=0 (conj symmetry) wavenumber
+c     Note that the nyquist in x is not stored.
+      if( myid .eq. 0 ) then
+       istart=2
+       iend=locnx
+      else
+       istart=1
+       iend=locnx
+      endif
+      
+      if( trans_flag .eq. 'c' ) then   ! cosine transform in z
+       xnorm = 2./float(nz)
+       dval = 0.0
+       do j=1,nyplanes
+
+        if( myid .eq. 0 ) then
+ccc       for kx=0, don't need to consider implicitly represented
+ccc       2d conjugate symmetric modes
+          i = 1
+          arg = ky(j)*y0
+          htrig1 = cmplx( cos(arg) , sin(arg) )  
+
+          k=1
+          vtrig = cos( kz(k)*z0 )/2.
+          kappa2 = -(kx(i)**2 + ky(j)**2 + kz(k)**2)
+          dval = dval + kappa2*F(i,j,k)*htrig1*vtrig
+          do k=2,nz+1         ! loop over k for i=1
+            vtrig = cos( kz(k)*z0 )
+            kappa2 = -(kx(i)**2 + ky(j)**2 + kz(k)**2)
+           dval = dval + kappa2*F(i,j,k)*htrig1*vtrig
+         enddo   
+        endif   ! end special logic for kx=0 modes
+
+ccc     for kx>0, we need to include implicitly represented
+ccc     conjugate symmetric modes (in kx,ky plane)
+        do i=istart,iend
+         arg = kx(i)*x0 + ky(j)*y0
+         htrig1 = cmplx(cos(arg) ,sin(arg) )  ! for kx > 0
+         htrig2 = cmplx( cos(arg) ,-sin(arg) )  ! for kx < 0 (implicit)
+
+         k=1
+         vtrig = cos( kz(k)*z0 )/2.
+         kappa2 = -(kx(i)**2 + ky(j)**2 + kz(k)**2)
+         dval = dval + kappa2*F(i,j,k)*htrig1*vtrig
+     *            + kappa2*conjg(F(i,j,k))*htrig2*vtrig 
+         do k=2,nz+1     ! loop over k for i > 1
+          vtrig = cos( kz(k)*z0 )
+          kappa2 = -(kx(i)**2 + ky(j)**2 + kz(k)**2)
+          dval = dval + kappa2*F(i,j,k)*htrig1*vtrig
+     *              + kappa2*conjg(F(i,j,k))*htrig2*vtrig 
+         enddo   
+
+        enddo    ! end loop over modes w/ conj symmetry pairs
+
+       enddo     ! end j loop
+       val = real(dval)*xnorm
+       call MPI_BARRIER(comm,ierr)
+c      partial sums now complete, compute global sum
+       call MPI_ALLREDUCE(val,global_val,1,MPI_REAL,MPI_SUM,comm,ierr)
+       val=global_val
+
+      elseif( trans_flag .eq. 's' ) then   ! sine transform in z
+       xnorm = 2./float(nz)
+       dval = 0.0
+
+       do j=1,nyplanes
+
+        if( myid .eq. 0 ) then
+ccc      for kx=0, don't need to consider implicitly represented
+ccc      2d conjugate symmetric modes
+         i = 1
+         arg = ky(j)*y0
+         htrig1 = cmplx( cos(arg) , sin(arg) )  
+
+         k=1
+         vtrig = sin( kz(k)*z0 )/2.
+         kappa2 = -(kx(i)**2 + ky(j)**2 + kz(k)**2)
+         dval = dval + kappa2*F(i,j,k)*htrig1*vtrig
+         do k=2,nz+1         ! loop over k for i=1
+           vtrig = sin( kz(k)*z0 )
+           kappa2 = -(kx(i)**2 + ky(j)**2 + kz(k)**2)
+           dval = dval + kappa2*F(i,j,k)*htrig1*vtrig
+         enddo   
+        endif    ! end of special logic for kx=0 modes
+
+ccc     for kx>0, we need to include implicitly represented
+ccc     conjugate symmetric modes (in kx,ky plane)
+        do i=istart,iend
+         arg = kx(i)*x0 + ky(j)*y0
+         htrig1 = cmplx( cos(arg) , sin(arg) )  ! for kx > 0
+         htrig2 = cmplx( cos(arg) ,-sin(arg) )  ! for kx < 0 (implicit)
+
+         k=1
+         vtrig = sin( kz(k)*z0 )/2.
+         kappa2 = -(kx(i)**2 + ky(j)**2 + kz(k)**2)
+         dval = dval + kappa2*F(i,j,k)*htrig1*vtrig
+     *            + kappa2*conjg(F(i,j,k))*htrig2*vtrig 
+         do k=2,nz+1     ! loop over k for i > 1
+          vtrig = sin( kz(k)*z0 )
+          kappa2 = -(kx(i)**2 + ky(j)**2 + kz(k)**2)
+          dval = dval + kappa2*F(i,j,k)*htrig1*vtrig
+     *              + kappa2*conjg(F(i,j,k))*htrig2*vtrig 
+         enddo   
+
+        enddo    ! end loop over modes w/ conjugate symmetry pairs
+
+       enddo     ! end j loop
+       val = real(dval)*xnorm
+       call MPI_BARRIER(comm,ierr)
+c      partial sums now complete, compute global sum
+       call MPI_ALLREDUCE(val,global_val,1,MPI_REAL,MPI_SUM,comm,ierr)
+       val=global_val
+
+
+      elseif( trans_flag .eq. 'f' ) then   ! Fourier transform in z
+      
+       dval = 0.0
+       do k=1,nz
+        do j=1,nyplanes
+         if( myid .eq. 0 ) then
+          i=1
+          arg = kx(i)*x0 + ky(j)*y0 + kz(k)*z0
+          htrig1 = cmplx( cos(arg) , sin(arg) )  ! for kx > 0
+          kappa2 = -(kx(i)**2 + ky(j)**2 + kz(k)**2)
+          dval = dval + kappa2*F(i,j,k)*htrig1
+         endif
+         do i=istart,iend
+          arg = kx(i)*x0 + ky(j)*y0 + kz(k)*z0
+          htrig1 = cmplx( cos(arg) , sin(arg) )  ! for kx > 0
+          htrig2 = cmplx( cos(arg) ,-sin(arg) )  ! for kx < 0 (implicit)
+          kappa2 = -(kx(i)**2 + ky(j)**2 + kz(k)**2)
+          dval = dval + F(i,j,k)*htrig1 + kappa2*conjg(F(i,j,k))*htrig2
+         enddo
+
+        enddo
+       enddo
+
+       val = real(dval)
+       call MPI_BARRIER(comm,ierr)
+c      partial sums now complete, compute global sum
+       call MPI_ALLREDUCE(val,global_val,1,MPI_REAL,MPI_SUM,comm,ierr)
+       val=global_val
+
+      endif
+
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/energetics.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/energetics.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/energetics.f	(revision 6)
@@ -0,0 +1,374 @@
+      subroutine energetics(u,v,w,pd,uc,vc,wc,wnx,wny,wnz,
+     *                      U0,Lx,Ly,Lz,f,g,rho_0,DGRAD,Re,kappa,nu,
+     *                      nx,ny,nz,num_dims,bc_flag,force_flag,time,
+     *                      comm,myid,numprocs,locnx,locnz,ambient_density)
+
+c     Modified for parallel execution under MPI, KW, 8/24/00
+c     N.B. All processors recieve the global summation results
+c     when done using MPI_ALL_REDUCE.
+c
+c     Routine to compute and output physical space, volume averaged
+c     energetics diagnostics. Input fields are dimensionless, outputs
+c     are in dimensional units. Transforms of u,v and w are stored
+c     in uc, vc and wc respectively.
+c
+      implicit none
+#include "mpif.h"
+      integer comm,myid,numprocs,locnx,locnz,ierr,ktop
+      integer i,j,k,nx,ny,nz,num_dims,nyplanes,nzplanes
+      real Lx,Ly,Lz,U0,f,g,rho_0,DGRAD,Re,x,y,z,density_scale
+      real dx,dy,dz,dA,dV,Vol,time,kappa,nu,fac,N2
+      real rho_bar,ddz,junk
+      character*80 bc_flag
+      character*3 force_flag
+c     Physical space storage locations
+      real u(nx+2,ny+1,locnz+1),v(nx+2,ny+1,locnz+1)
+      real w(nx+2,ny+1,locnz+1),pd(nx+2,ny+1,locnz+1)
+      real ambient_density(nx+2,ny+1,locnz+1)
+c     Wavenumber space storage locations
+      complex uc(locnx,ny+1,nz+1),vc(locnx,ny+1,nz+1),wc(locnx,ny+1,nz+1)
+      real wnx(locnx),wny(ny+1),wnz(nz+1)
+      real*8 ke,pe,bf,rho,kappa2,diss,Ep_surf_adv,Ep_surf_dif,rho_top
+      real*8 rho_bottom,zgrad,phi_i,phi_a,global_val,xmag,xnorm
+      real*8 ke_forced,pe_forced
+      real F1,F2,F3,F4,F5
+
+      real s1_scale
+      s1_scale=1.0
+
+c     THIS NEEDS TO BE UPDATED FROM PD TO T/S LOGIC FOR DENSITY
+
+c
+c     preliminaries:
+c
+
+      dx = Lx/float(nx)   ! [m]
+      dz = Lz/float(nz)   ! [m]
+      ke = 0.d0
+      pe = 0.d0
+      ke_forced = 0.d0
+      pe_forced = 0.d0
+      bf = 0.d0
+      diss = 0.d0
+      rho_top = 0.d0
+      rho_bottom = 0.d0
+      Ep_surf_dif=0.d0
+      Ep_surf_adv=0.d0
+      zgrad=0.d0
+      density_scale = DGRAD*Lz
+
+      if( num_dims .eq. 2 ) then
+       nyplanes = 1
+       dy = 1.0            ! [m] work per unit length in infinite y direction
+       Vol = Lx*1.*Lz      ! [m^3]
+       dV = dx*dy*dz       ! [m^3]
+      elseif( num_dims .eq. 3 ) then
+       nyplanes = ny
+       dy = Ly/float(ny)   ! [m]
+       Vol = Lx*Ly*Lz      ! [m^3]
+       dV = dx*dy*dz       ! [m^3]
+      endif
+      
+
+c   N.B. work with dimensionless quantities ONLY within (ijk-xyz) loop
+c        horizontally periodic bcs imply <w>_xy=0 --> perturbation
+c        density can be used rather than rho_total to compute buoy. flux
+
+      if( bc_flag .eq. 'zperiodic' ) then
+       
+c     volume integrals calculated in physical space,
+c     each processor integrates over its assigned data space
+ 
+c     z*pd is not periodic so this form of integration is not quite right for pe
+c     at bottom and at "missing" top", the weighting should be 1/2
+c     OK to have fac=1 at bottom since z=0 anyway, need to add the top bit
+c     note that pd(top)=pd(1) by periodicity, so add this when k=1, {z}=1
+
+       do k=1,locnz
+        z = myid*locnz*dz/Lz + (k-1.)*dz/Lz   ! dz is dimensional
+        if( k .eq. 1 ) then
+         fac=0.5
+        else
+         fac=0.0
+        endif
+        do j=1,nyplanes
+         do i=1,nx
+          rho = pd(i,j,k)  
+          ke = ke + ( u(i,j,k)**2 + v(i,j,k)**2 + w(i,j,k)**2 )
+          pe = pe + rho*z + fac*rho*1.0  ! 1.0 is dless z at top
+          bf = bf + pd(i,j,k)*w(i,j,k)
+         enddo
+        enddo
+       enddo
+
+      if(force_flag .eq. 'yes' ) then
+       do k=1,locnz
+        z = myid*locnz*dz/Lz + (k-1.)*dz/Lz   ! dz is dimensional
+        do j=1,nyplanes
+         do i=1,nx
+          x=(i-1.)*dx
+          y=(j-1.)*dy
+          call user_defined_forcing(x,y,z,time,F1,F2,F3,F4,F5,Lx,Ly,Lz,f,g,rho_0)
+          ke_forced = ke_forced + ( u(i,j,k)*F1 + v(i,j,k)*F2 + w(i,j,k)*F3 )/(U0**2/Lz)  ! make F_i dless
+          pe_forced = pe_forced + ( (z/Lz)*F4/(density_scale/(Lz/U0)) )
+         enddo
+        enddo
+       enddo
+      endif
+
+c     Do global sums using MPI_ALLREDUCE
+      call MPI_ALLREDUCE(ke,global_val,1,MPI_DOUBLE_PRECISION,MPI_SUM,comm,ierr)
+      ke=global_val
+      call MPI_ALLREDUCE(pe,global_val,1,MPI_DOUBLE_PRECISION,MPI_SUM,comm,ierr)
+      pe=global_val
+      call MPI_ALLREDUCE(bf,global_val,1,MPI_DOUBLE_PRECISION,MPI_SUM,comm,ierr)
+      bf=global_val
+
+      if(force_flag .eq. 'yes' ) then
+       call MPI_ALLREDUCE(ke_forced,global_val,1,MPI_DOUBLE_PRECISION,MPI_SUM,comm,ierr)
+       ke_forced=global_val
+       call MPI_ALLREDUCE(pe_forced,global_val,1,MPI_DOUBLE_PRECISION,MPI_SUM,comm,ierr)
+       pe_forced=global_val
+      endif
+
+c      
+c     surface integrals calculated in physical space
+c
+      ! for pd, z=Lz, by periodicity
+      do j=1,nyplanes
+       do i=1,nx
+        if( myid .eq. 0 ) then
+         rho_top=rho_top + pd(i,j,1)  ! perturbation density at top by periodicity
+         rho_bottom=rho_bottom + ( ambient_density(i,j,1) + pd(i,j,1) )
+         Ep_surf_adv=Ep_surf_adv + pd(i,j,1)*w(i,j,1)   ! z=0 at bottom, --> accumulate ddz(pd) at top only
+         zgrad = zgrad + (pd(i,j,2)-pd(i,j,1))/(dz/Lz)  ! =~ ddz (pd) at top by periodicity
+        endif
+        if( myid .eq. numprocs-1 ) then
+         rho_top=rho_top + ambient_density(i,j,locnz+1)   ! rho_bar at top
+         rho_bottom=rho_bottom + 0.0
+         Ep_surf_adv=Ep_surf_adv + 0.0
+         zgrad = zgrad + (ambient_density(i,j,locnz+1)-ambient_density(i,j,locnz))/(dz/Lz) ! ~ ddz(rho_bar) at top
+        endif
+       enddo
+      enddo
+
+c     Do global sums using MPI_ALLREDUCE
+      call MPI_ALLREDUCE(rho_top,global_val,1,MPI_DOUBLE_PRECISION,MPI_SUM,comm,ierr)
+      rho_top=global_val
+      call MPI_ALLREDUCE(rho_bottom,global_val,1,MPI_DOUBLE_PRECISION,MPI_SUM,comm,ierr)
+      rho_bottom=global_val
+      call MPI_ALLREDUCE(Ep_surf_adv,global_val,1,MPI_DOUBLE_PRECISION,MPI_SUM,comm,ierr)
+      Ep_surf_adv=global_val
+
+      call MPI_ALLREDUCE(zgrad,global_val,1,MPI_DOUBLE_PRECISION,MPI_SUM,comm,ierr)
+      zgrad=global_val/(nx*nyplanes)
+
+      Ep_surf_adv=Ep_surf_adv/(nx*nyplanes)
+      Ep_surf_dif=zgrad
+      phi_i=(rho_top-rho_bottom)/(nx*nyplanes)
+
+ 
+      
+c     volume integrals calculated in spectral space
+c
+       xnorm = 1./2.   ! normalization for fff transforms
+       do i=1,locnx
+        if( i .eq. 1 .and. myid .eq. 0 ) then
+         fac=xnorm*1.0    ! add zero wavenumber component once
+        else
+         fac=xnorm*2.0    ! all other modes have complex conjugate pairs
+        endif
+        do j=1,nyplanes
+         do k=1,nz
+          kappa2 = wnx(i)**2 + wny(j)**2 + wnz(k)**2
+          xmag = cabs(uc(i,j,k))**2 + cabs(vc(i,j,k))**2 + cabs(wc(i,j,k))**2
+          diss = diss - fac*(1./Re)*kappa2*xmag
+         enddo
+        enddo
+       enddo
+                 
+c     Do global sums using MPI_ALLREDUCE
+      call MPI_ALLREDUCE(diss,global_val,1,MPI_DOUBLE_PRECISION,MPI_SUM,comm,ierr)
+      diss=global_val
+
+      elseif( bc_flag .eq. 'zslip' ) then
+c
+c     volume integrals calculated in physical space
+c
+       do k=1,locnz
+        z = myid*locnz*dz/Lz + (k-1.)*dz/Lz   ! dz is dimensional, we need dless z for pe
+        fac=1.0
+        if( k .eq. 1 .and. myid .eq. 0 ) fac=0.5   ! see below
+        do j=1,nyplanes
+         do i=1,nx
+          rho = pd(i,j,k)   
+          ke = ke + fac*( u(i,j,k)**2 + v(i,j,k)**2 + w(i,j,k)**2 )
+          pe = pe + fac*rho*z
+          bf = bf + fac*pd(i,j,k)*w(i,j,k)
+         enddo
+        enddo
+       enddo
+
+      if(force_flag .eq. 'yes' ) then
+       do k=1,locnz
+        z = myid*locnz*dz + (k-1.)*dz   ! we need dimensional position
+        fac=1.0
+        if( k .eq. 1 .and. myid .eq. 0 ) fac=0.5   ! see below
+        do j=1,nyplanes
+         do i=1,nx
+          x=(i-1.)*dx
+          y=(j-1.)*dy
+          call user_defined_forcing(x,y,z,time,F1,F2,F3,F4,F5,Lx,Ly,Lz,f,g,rho_0)
+          ke_forced = ke_forced + fac*( u(i,j,k)*F1 + v(i,j,k)*F2 + w(i,j,k)*F3 )/(U0**2/Lz)  ! make F_i dless
+          pe_forced = pe_forced + fac*( (z/Lz)*F4/(density_scale/(Lz/U0)) )
+         enddo
+        enddo
+       enddo
+      endif
+
+c      Uppermost processor must add in z=Lz contribution
+c      Give only 1/2 weight to end point of closed interval
+       if (myid .eq. numprocs-1) then
+        fac=0.5
+        k=locnz+1 
+         z = 1.0    ! d'less
+         do j=1,nyplanes
+          do i=1,nx
+           rho = pd(i,j,k)
+           ke = ke + fac*( u(i,j,k)**2 + v(i,j,k)**2 + w(i,j,k)**2 )
+           pe = pe + fac*rho*z
+           bf = bf + fac*pd(i,j,k)*w(i,j,k)  
+          enddo
+         enddo
+       endif
+
+      if(force_flag .eq. 'yes' ) then
+c      Uppermost processor must add in z=Lz contribution
+c      Give only 1/2 weight to end point of closed interval
+       if (myid .eq. numprocs-1) then
+        fac=0.5
+        k=locnz+1 
+         z = Lz   ! we need dimensional position
+         do j=1,nyplanes
+          do i=1,nx
+           x=(i-1.)*dx
+           y=(j-1.)*dy
+           call user_defined_forcing(x,y,z,time,F1,F2,F3,F4,F5,Lx,Ly,Lz,f,g,rho_0)
+           ke_forced = ke_forced + fac*( u(i,j,k)*F1 + v(i,j,k)*F2 + w(i,j,k)*F3 )/(U0**2/Lz)  ! make F_i dless
+           pe_forced = pe_forced + fac*( (z/Lz)*F4/(density_scale/(Lz/U0)) )
+          enddo
+         enddo
+       endif
+      endif
+
+c     Do global sums using MPI_ALLREDUCE
+      call MPI_ALLREDUCE(ke,global_val,1,MPI_DOUBLE_PRECISION,MPI_SUM,comm,ierr)
+      ke=global_val
+      call MPI_ALLREDUCE(pe,global_val,1,MPI_DOUBLE_PRECISION,MPI_SUM,comm,ierr)
+      pe=global_val
+      call MPI_ALLREDUCE(bf,global_val,1,MPI_DOUBLE_PRECISION,MPI_SUM,comm,ierr)
+      bf=global_val
+
+      if( force_flag .eq. 'yes' ) then
+       call MPI_ALLREDUCE(ke_forced,global_val,1,MPI_DOUBLE_PRECISION,MPI_SUM,comm,ierr)
+       ke_forced=global_val
+       call MPI_ALLREDUCE(pe_forced,global_val,1,MPI_DOUBLE_PRECISION,MPI_SUM,comm,ierr)
+       pe_forced=global_val
+      endif
+
+c      
+c     surface integrals calculated in physical space
+c
+
+       do j=1,nyplanes
+        do i=1,nx
+         if(myid .eq. numprocs-1 ) then
+          k=locnz+1
+          Ep_surf_adv=Ep_surf_adv + pd(i,j,k)*w(i,j,k) ! w=0 by bcs
+          rho_top=rho_top + ( ambient_density(i,j,k) + pd(i,j,k) )
+          rho_bottom=rho_bottom + 0.
+          zgrad = ( ambient_density(i,j,k)-ambient_density(i,j,k-1) )/(dz/Lz) 
+     *                + ( pd(i,j,k)-pd(i,j,k-1) )/(dz/Lz) 
+          Ep_surf_dif=Ep_surf_dif + zgrad
+         endif
+         if( myid .eq. 0 ) then
+          k=1
+          Ep_surf_adv=Ep_surf_adv + 0.
+          rho_top=rho_top + 0.
+          Ep_surf_dif=Ep_surf_dif + 0.
+          rho_bottom=rho_bottom + ( ambient_density(i,j,k) + pd(i,j,k) )
+         endif
+        enddo
+       enddo
+
+     
+c     Do global sums using MPI_ALLREDUCE
+      call MPI_ALLREDUCE(rho_top,global_val,1,MPI_DOUBLE_PRECISION,MPI_SUM,comm,ierr)
+      rho_top=global_val
+      call MPI_ALLREDUCE(rho_bottom,global_val,1,MPI_DOUBLE_PRECISION,MPI_SUM,comm,ierr)
+      rho_bottom=global_val
+      call MPI_ALLREDUCE(Ep_surf_adv,global_val,1,MPI_DOUBLE_PRECISION,MPI_SUM,comm,ierr)
+      Ep_surf_adv=global_val
+      call MPI_ALLREDUCE(Ep_surf_dif,global_val,1,MPI_DOUBLE_PRECISION,MPI_SUM,comm,ierr)
+      Ep_surf_dif=global_val
+
+
+      Ep_surf_adv=Ep_surf_adv/(nx*nyplanes)
+      Ep_surf_dif=Ep_surf_dif/(nx*nyplanes)
+      phi_i=(rho_top-rho_bottom)/(nx*nyplanes)
+c      
+c     volume integrals calculated in spectral space
+c
+       xnorm = (1./nz)**2  ! normalization for ffc/s transforms   
+       do i=1,locnx
+        if(i .eq. 1 .and. myid .eq. 0) then
+         fac=1.0*xnorm    ! add zero wavenumber component once
+        else
+         fac=2.0*xnorm    ! all other modes have complex conjugate pairs
+        endif
+        do j=1,nyplanes
+         do k=1,nz+1
+          kappa2 = wnx(i)**2 + wny(j)**2 + wnz(k)**2
+          xmag = cabs(uc(i,j,k))**2 + cabs(vc(i,j,k))**2 + cabs(wc(i,j,k))**2
+          diss = diss - fac*(1./Re)*kappa2*xmag
+         enddo
+        enddo
+       enddo
+                 
+c     Do global sums using MPI_ALLREDUCE
+      call MPI_ALLREDUCE(diss,global_val,1,MPI_DOUBLE_PRECISION,MPI_SUM,comm,ierr)
+      diss=global_val
+
+      endif
+
+c
+c     dimensionalize the results: energy in [J/kg], transfers in [W/kg]
+c
+      ke = (0.5)*(dV/Vol)*(U0**2)*ke                                  ! [m2/s2]=[J/kg]
+      ke_forced = (dV/Vol)*(U0**3/Lz)*ke_forced                       ! [m2/s3]=[W/kg]
+      pe = (dV/Vol)*(g/rho_0)*(density_scale*Lz)*pe                   ! [J/kg]
+      pe_forced = (dV/Vol)*(g/rho_0)*(density_scale*U0)*pe_forced     ! [W/kg]
+      bf = (dV/Vol)*(g/rho_0)*(density_scale*U0)*bf                   ! [m2/s3]=[W/kg]
+      diss = 2.0*(U0**3/Lz)*diss                                      ! [m2/s3]=[W/kg]
+      Ep_surf_adv=-(g/rho_0)*(density_scale*U0)*Ep_surf_adv           ! [m2/s3]=[W/kg]
+      phi_i =-((kappa*g)/(rho_0*Lz))*(density_scale)*phi_i            ! [m2/s3]=[W/kg]
+      Ep_surf_dif=(kappa*g/rho_0)*(density_scale/Lz)*Ep_surf_dif      ! [W/kg]
+      phi_a = bf
+
+c
+c     write the dimensional values to an ascii data file
+c
+      if( myid .eq. 0 ) then
+#ifdef F77
+       open(1,file='output/energetics',status='unknown',access='append')
+#else
+       open(1,file='output/energetics',status='unknown',position='append')
+#endif F77
+        write(1,100) time,ke,pe,phi_a,diss,Ep_surf_adv,Ep_surf_dif,phi_i,ke_forced,pe_forced
+100     format(1x,10e16.8)
+       close(1)
+       WRITE(6,*) time,ke,pe,ke+pe
+      endif
+
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/equation_of_state.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/equation_of_state.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/equation_of_state.f	(revision 6)
@@ -0,0 +1,196 @@
+        subroutine equation_of_state(
+     *              scalars,s1,s2,s1_scale, s2_scale,
+     *              nx, ny, locnz, rho_0, DGRAD,
+     *              myid, numprocs, Lx, Ly, Lz, pd)
+
+!     Routine to calculate d'less pd from values of d'less s1 and s2
+!     and their reference profiles s1_bar(x,z) and s2_bar(x,z)
+!     The "perturbation" density is defined relative to the reference
+!     profile rho_bar(x,z). 
+!======================================================================
+!     scalars='TS'
+!     EOS from MILLERO et.al. (1980) DEEP-SEA RES.
+!     The scalar s1=temparature in deg C and 
+!     the scalar s2 is salinity in psu (i.e. ~ 36)
+
+      implicit none
+      character*2 scalars
+      integer nx, ny, locnz, myid, numprocs, nyplanes
+      real Lx, Ly, Lz
+      real s1(nx+2,ny+1,locnz+1),s2(nx+2,ny+1,locnz+1),pd(nx+2,ny+1,locnz+1)
+      real s1_scale, s2_scale, rho_0, DGRAD
+
+! local variables
+!     S,T,P all DOUBLE precision arguments of function rho:  P in MPa, T in deg C, S in conc units
+      double precision Temp,Salinity
+      double precision P_Mpa,density
+      double precision rho_bar,total_density
+      real z,depth,s1_bar,s2_bar,dx,dy,dz
+      real junk,xprime,yprime,zprime,xx,yy
+      integer i, j, k, kend
+
+      if(ny .eq. 0) then
+        nyplanes = 1
+      else
+        nyplanes = ny
+      endif
+
+      P_Mpa = 0.0   !   compute potential density, not in situ density
+
+      if( scalars .eq. 'TS' ) then
+       xx=1.0    ! use this to keep  Salinity
+       yy=1.0    ! use this to keep Temperature
+      elseif( scalars .eq. 'SP'  .or. scalars .eq. 'S0' ) then
+       xx=1.0    ! use this to keep  Salinity
+       yy=0.0    ! use this to neglect Temperature
+      elseif( scalars .eq. 'TP'  .or. scalars .eq. 'T0' ) then
+       yy=1.0    ! use this to keep Temperature
+       xx=0.0    ! use this to neglect Salinity
+      endif
+
+      kend=locnz
+      if( myid .eq. numprocs-1) kend=locnz+1
+
+      dx=Lx/float(nx)                 ! [m]
+      dy=Ly/float(nyplanes)           ! [m]
+      dz=Lz/float(locnz*numprocs)     ! [m]
+
+      if( scalars .eq. 'TS' 
+     *    .or. scalars .eq. 'TP' .or. scalars .eq. 'SP' 
+     *    .or. scalars .eq. 'T0' .or. scalars .eq. 'S0' ) then
+
+      do k=1,kend
+       z = (myid*locnz+k-1)*dz   ![m]
+       zprime=z/Lz               ! d'less z
+        do j=1,nyplanes
+         yprime=(j-1.)*dy/Lz
+          do i=1,nx
+           xprime=(i-1)*dx/Lz
+           call s1_bar_func(xprime,yprime,zprime,s1_bar,
+     *                      junk,junk,junk,junk,
+     *                      Lz,s1_scale)
+           call s2_bar_func(xprime,yprime,zprime,s2_bar,
+     *                      junk,junk,junk,junk,
+     *                      Lz,s2_scale)
+           Temp = yy*(s1_bar*s1_scale)    ! [deg C]
+           Salinity = (s2_bar*s2_scale)   ! [psu]
+           Salinity=xx*Salinity/1000.     ! fortran routine rho uses concentration units
+           call rho(Salinity,Temp,P_mpa,density)
+           rho_bar = density  ! ambient density [kg/m3]
+
+!          now repeat the calculation for total s1 & s2
+           Temp = yy*((s1_bar
+     *            + s1(i,j,k))*s1_scale) ! dimensional quantity: total Temp.
+           Salinity = ((s2_bar 
+     *            + s2(i,j,k))*s2_scale) ! dimensional quantity: total Salinity
+           Salinity=xx*Salinity/1000.     ! fortran routine rho uses concentration units
+
+           call rho(Salinity,Temp,P_Mpa,density) ! total density [kg/m3]
+           total_density = density  ! [kg/m3]
+
+           pd(i,j,k) = total_density - rho_bar   ! perturbation in kg/m3
+           pd(i,j,k) = pd(i,j,k)/(Lz*DGRAD)   ! dimensionless perturbation density
+
+         enddo
+        enddo
+       enddo  
+
+      elseif( scalars .eq. 'RP' .or. scalars .eq. 'R0' ) then  ! s1 is pd
+
+       do k=1,kend
+        do j=1,nyplanes
+         do i=1,nx
+          pd(i,j,k)=s1(i,j,k)
+         enddo
+        enddo
+       enddo
+
+      elseif( scalars .eq. 'PP' ) then ! both scalars passive, set pd=0 
+
+       do k=1,kend
+        do j=1,nyplanes
+         do i=1,nx
+          pd(i,j,k)=0.0
+         enddo
+        enddo
+       enddo
+
+      endif
+
+      end subroutine equation_of_state
+
+
+        !	"rho.f"
+
+        !	Parameter	:	equation of state
+        !	Source		:	MILLERO et.al. (1980) DEEP-SEA RES.
+        !				Vol 27A, pp 255-264
+        !	Units		:	Kg / m**3
+        !	Input		:	s (concentration units), t (deg C), p (MPa)
+        !	Range		:	s (0 to 0.040), t (-2 to 40), p (MPa)
+        !	Ck value	:	K (0, 0, 100)      = 2.297721e4
+        !				K (0.035, 0, 100)  = 2.499200e4
+        !				K (0, 25, 100)     = 2.54051e4
+        !				K (0.035, 25, 100) = 2.710895e4
+        !	Coded		:	Ngoc Dang, July 1982
+
+        subroutine rho (s, t, p, density)
+
+        double precision s, t, p
+        double precision a, b, c, d, e, k, t1, t2, t3, t4, ta, tb
+        double precision k0, k0w, alpha0, alpha, rho0, aw, bw, density 
+
+
+        !  convert input units
+
+        s = 1000.0d0 * s
+        p = 10.0d0 * p
+
+!  compute alpha0 = alpha (s, t, 0)
+
+        t1 = 9.99841594d-1 + t * (6.793952d-5 + t * (-9.095290d-6 + t *
+     &       (1.001685d-7 + t * (-1.120083d-9 + t * 6.536332d-12))))
+        t2 = 8.25917d-4 + t * (-4.4490d-6 + t * (1.0485d-7 + t *      
+     &       (-1.258d-9 + t * 3.315d-12)))
+        t3 = -6.33761d-6 + t * (2.8441d-7 + t * (-1.6871d-8 + t *     
+     &       2.83258d-10))
+        t4 = 5.4705d-7 + t * (-1.97975d-8 + t * (1.6641d-9 - t *      
+     &       3.1203d-11))
+        rho0 = t1 + t2 * s + t3 * s**(1.5) + t4 * s**2
+        alpha0 = 1.0d0 / rho0
+
+        !  compute the pressure coefficient
+
+        !	the first term
+        k0w = 1.965221d4 + t * (1.484206d2 + t * (-2.327105d0 + t *     
+     &        (1.360477d-2 - t * 5.155288d-5)))
+        ta = 5.46746d1 + t * (-6.03459d-1 + t * (1.09987d-2 - t *       
+     &       6.167d-5))
+        tb = 7.944d-2 + t * (1.6483d-2 - t * 5.3009d-4)
+        k0 = k0w + ta * s + tb * s**(1.5)
+
+        !	the second term
+        aw = 3.239908d0 + t * (1.43713d-3 + t * (1.16092d-4 - t *      
+     &       5.77905d-7))
+        c = 2.2838d-3 + t * (-1.0981d-5 - t * 1.6078d-6)
+        d = 1.9107d-4
+        a = aw + c * s + d * s**(1.5)
+
+        !	the third term
+        bw = 8.50935d-5 + t * (-6.12293d-6 + t * 5.2787d-8)
+        e = -9.9348d-7 + t * (2.0816d-8 + t * 9.1697d-10)
+        b = bw + e * s
+
+        k = k0 + a * p + b * p**2
+
+        !  compute density
+        alpha = alpha0 * (1.0d0 - p / k)
+        density = 1.0d0 / alpha
+
+        !  convert to kg / m**3
+        density = 1000.0d0 * density
+        s = s / 1000.0d0
+        p = p / 10.0d0
+
+        return
+        end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/fft.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/fft.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/fft.f	(revision 6)
@@ -0,0 +1,168 @@
+	subroutine fft (s1u,s1v,s1w,F1,F2,F3,F4,F5,F6,F7,F8,F9,dRdz,
+     *                  num_dims,nx,ny,nz,trigx,trigy,trigz, 
+     *                  ifax,ifay,ifaz,wn,bc_flag,xt,work,scratch,
+     *                  myid,numprocs,locnx,locnz,comm,
+     *                  twoslice,subslice)
+
+C----------------------------------------------------------------------
+C
+C  fft - Routine to compute the forward transforms, in place, of
+c        the various terms calculated in subroutine nonlin.
+C 
+C	input: s1u, s1v, s1w (real arrays of nx+2 by ny+1 by locnz+1)
+c              products of scalar 1 with u, v, and w
+
+C	       F1,F2,F3 - contain the i, j, k components of the cross product
+C		        of velocity and vorticity with the additional rotation 
+c                       and buoyancy terms defined in routine "nonlin".
+C	       F4       -u dot grad s1_bar
+C	       F5       -u dot grad s2_bar
+c	       F6,F7,F8	s2*u, s2*v, s2*w
+c              F9	d/dz s2_bar
+C	       dRdz     d/dz s1_bar
+C	       nx, ny, nz (integers) - size of physical space data
+C	       trigx, trigy, trigz (real arrays) - contain the trig
+C	                     tables required by the Temperton FFT package
+C	       ifax, ifay, ifaz (integer arrays) - contain the factorization
+C	                        tables required by the Temperton FFT package
+C	       wn (complex array) - contains the complex exponential values
+C		                    required by the forward z sin/cos transform
+C	       xt (compex array) - work array for the forward z sine/
+C		                   cosine transform 
+C	       scratch           - work array required by the Temperton 
+C		                   FFT package
+c              myid, numprocs    - local processor id and total # of processors
+c              locnx,locnz       - local portions of arrays in 
+c                                  wavenumber,physical space assigned to 
+c                                  each processor
+C
+C	output: 3d transforms of the input arrays are 
+c               stored in the cplx array work(:,:,:,1-13)
+c               see comments in flow_solve.f for storage map
+C 
+C----------------------------------------------------------------------
+	
+        implicit none
+        integer i,j,k,myid,numprocs,locnx,locnz
+	integer nx,ny,nz,num_dims
+        integer comm,twoslice,subslice
+	real s1u(nx+2,ny+1,locnz+1),s1v(nx+2,ny+1,locnz+1)
+	real s1w(nx+2,ny+1,locnz+1),F1(nx+2,ny+1,locnz+1)
+	real F2(nx+2,ny+1,locnz+1),F3(nx+2,ny+1,locnz+1)
+	real F4(nx+2,ny+1,locnz+1),dRdz(nx+2,ny+1,locnz+1)
+	real F5(nx+2,ny+1,locnz+1)
+	real F6(nx+2,ny+1,locnz+1)
+	real F7(nx+2,ny+1,locnz+1)
+	real F8(nx+2,ny+1,locnz+1)
+	real F9(nx+2,ny+1,locnz+1)
+	real trigx(3*(nx+2)/2+1), trigy(2*(ny+1)), trigz(2*nz)
+	integer ifax(13), ifay(13), ifaz(13)
+	complex wn(nz/4+1)
+	complex work(locnx,ny+1,nz+1,14)
+        real scratch(1)
+        complex xt(nx+2,nz/2+1)
+	integer iswitch, itrig
+	character*1 tswitch
+	character*80 bc_flag
+
+	iswitch = +1   ! Forward transforms: physical to wavenumber domain
+	itrig = 0      ! trig tables computed previously
+	
+c     set transform type for terms in u,v eqns
+      if( bc_flag .eq. 'zperiodic' ) then
+       tswitch='f'
+      elseif( bc_flag .eq. 'zslip' ) then
+       tswitch = 'c'   ! free slip, du/dz=dv/dz=0 at top & bottom
+      endif
+      
+
+c     note the work(1,1,1,8) location is not used as work space for forward transforms (it is for inverse)
+      call transform3d (F1,work(1,1,1,4),nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,scratch,work(1,1,1,14),xt,myid,
+     *                  numprocs,locnx,locnz,comm,twoslice,subslice)
+     
+      call transform3d (F2,work(1,1,1,5),nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,scratch,work(1,1,1,14),xt,myid,
+     *                  numprocs,locnx,locnz,comm,twoslice,subslice)
+     
+c     set transform type for terms in s1 eqn
+      if( bc_flag .eq. 'zperiodic' ) then
+       tswitch='f'
+      elseif( bc_flag .eq. 'zslip' ) then
+       tswitch = 's'   ! free slip, ds1/dz=0 at top & bottom
+      endif
+      
+      call transform3d (s1u,work(1,1,1,1),nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,scratch,work(1,1,1,14),xt,myid,
+     *                  numprocs,locnx,locnz,comm,twoslice,subslice)
+     
+      call transform3d (s1v,work(1,1,1,2),nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,scratch,work(1,1,1,14),xt,myid,
+     *                  numprocs,locnx,locnz,comm,twoslice,subslice)
+     
+      call transform3d (F6,work(1,1,1,10),nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,scratch,work(1,1,1,14),xt,myid,
+     *                  numprocs,locnx,locnz,comm,twoslice,subslice)
+     
+      call transform3d (F7,work(1,1,1,11),nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,scratch,work(1,1,1,14),xt,myid,
+     *                  numprocs,locnx,locnz,comm,twoslice,subslice)
+     
+      call transform3d (F4,work(1,1,1,7),nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,scratch,work(1,1,1,14),xt,myid,
+     *                  numprocs,locnx,locnz,comm,twoslice,subslice)
+     
+      call transform3d (F5,work(1,1,1,9),nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,scratch,work(1,1,1,14),xt,myid,
+     *                  numprocs,locnx,locnz,comm,twoslice,subslice)
+
+     
+     
+      if( bc_flag .eq. 'zperiodic' ) then
+       tswitch='f'
+      elseif( bc_flag .eq. 'zslip' ) then
+       tswitch = 'c'   ! free slip, ds1/dz=0 at top & bottom
+      endif
+      
+      call transform3d (s1w,work(1,1,1,3),nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,scratch,work(1,1,1,14),xt,myid,
+     *                  numprocs,locnx,locnz,comm,twoslice,subslice)
+     
+      call transform3d (F8,work(1,1,1,12),nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,scratch,work(1,1,1,14),xt,myid,
+     *                  numprocs,locnx,locnz,comm,twoslice,subslice)
+
+c     note the work(1,1,1,8) location is not used as work space for forward transforms (it is for inverse)
+      call transform3d (dRdz,work(1,1,1,8),nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,scratch,work(1,1,1,14),xt,myid,
+     *                  numprocs,locnx,locnz,comm,twoslice,subslice)
+     
+      call transform3d (F9,work(1,1,1,13),nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,scratch,work(1,1,1,14),xt,myid,
+     *                  numprocs,locnx,locnz,comm,twoslice,subslice)
+
+      if( bc_flag .eq. 'zperiodic' ) then
+       tswitch='f'
+      elseif( bc_flag .eq. 'zslip' ) then
+       tswitch = 's'   ! free slip, w=0 at top & bottom
+      endif
+      
+      call transform3d (F3,work(1,1,1,6),nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,scratch,work(1,1,1,14),xt,myid,
+     *                  numprocs,locnx,locnz,comm,twoslice,subslice)
+     
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/fill_wave_vectors.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/fill_wave_vectors.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/fill_wave_vectors.f	(revision 6)
@@ -0,0 +1,224 @@
+      subroutine fill_wave_vectors (wnx, wny, wnz, nx, ny, nz, Lx, Ly, amp,
+     *                              dt, Re, Pr_1, Pr_2, p, T_diss, diss_flag, num_dims, bc_flag,
+     *                              myid, numprocs, locnx)
+
+C---------------------------------------------------------------------------
+C   
+C  fill_wave_vectors - Routine to compute discrete wavenumber vectors
+c                      appropriate for mixed Fourier(x,y) and sin/cos(z)
+c                      or triply Fourier transforms, depending on bc_flag. 
+c                      An integrating factor which is useful
+c                      for the explicit time stepping is also initialized.
+c
+C	code written by Kraig Winters 7/1/97 
+c       modified for MPI by KW 8/18/00
+C
+C	input: nx, ny, nz   The number of x,y and z gridpoints in the OPEN
+c                           intervals i.e. [0,Lx), [0,Ly), [0,Lz)
+c       Lx, Ly (reals) - see above, Lz assumed 1, all dimensionless values
+C       rmax (real)    - radius of truncation sphere used for simulation
+c                      - modes with wavenumber magnitudes > rmax are truncated
+c       dt (real)      - nondimensional time step
+C       Re (real)      - Reynolds Number  UL/nu
+C       Pr (real)      - Prandtl Number   nu/kappa 
+C       p (integer)    - order of derivative on hyperdissipation terms
+c                        currently assumed to be 2 for DNS simulations
+c                        input value is not currently used
+c       num_dims       - number of spatial dimensions 3(x,y,z) or 2(x,z) z="up"
+c       bc_flag        - character flag specifying vertical boundary conditions
+c                        legal values are 'zperiodic' or 'zslip'
+c       myid           - processor id flag
+c       numprocs       - total number of processors
+c       locnx          - number of k values in local portion of
+c                        wavenumber space
+C	
+C	output: wnx, wny, wnz real arrays of sizes(locnx),(ny+1),(nz+1) 
+C               respectively) - contain the k, l, and m wavenumbers
+C	        amp           - real arrays (locnx,ny+1,nz+1,2) 
+C               contains the integrating factors for the time stepping
+C               plane 1 has exp(-dt*(1/Re)*(k^2 + l^2 + m^2)^(p/2)),
+C               plane 2 has exp(-dt*(1/PrRe)*(k^2 + l^2 + m^2)^(p/2)))
+C
+C---------------------------------------------------------------------------
+
+      implicit none
+      integer nx,ny,nz,i,j,k,num_dims,p
+      integer myid,numprocs,locnx,isign,ii
+      real Lx,Ly,Lz
+      real wnx(locnx),wny(ny+1),wnz(nz+1)
+      real amp(locnx,ny+1,nz+1,3)
+      real rmax,dt,Pr_1,Pr_2,Re,pi,dk,dl,dm,f1,f2,f3,r2,r2_scaled,T_diss
+      real kmax,lmax,mmax,gamma,taper
+      character*80 bc_flag,diss_flag
+    
+      pi = 4.0*atan(1.0)
+      Lz = 1  ! problem scaled by vertical domain size
+
+c
+c  Compute the local portion of the k wavevector (2*pi*k/Lx for k's(myid))
+c  Negative k wavenumbers not needed due to conjugate symmetry
+c
+      dk = 2.0*pi/Lx
+      ii = myid*locnx
+      do i = 1,locnx
+       wnx(i) = ii*dk
+       ii=ii+1
+      enddo
+
+c
+c   Compute the l wavevector (2*pi*l/ly for whole table)
+c
+      if( num_dims .eq. 3 ) then
+       do j = 2, ny/2
+        wny(j) = 2.0*pi*(j-1)/Ly
+        wny(ny-j+2) = -wny(j)
+       enddo
+       wny(1) = 0.0
+       wny(ny/2+1) = 2.0*pi*(ny/2)/Ly
+      elseif( num_dims .eq. 2 ) then
+       wny(1) = 0.0   ! the only y wavenumber needed
+      endif
+
+c
+c  Compute the m (vertical, z) wavevector
+c
+
+      if( bc_flag .eq. 'zslip' ) then   ! sin and cos expansions in z
+       do k = 1, nz+1
+        wnz(k) = pi*(k-1)/Lz
+       enddo
+      elseif( bc_flag .eq. 'zperiodic') then  ! Fourier expansions in z
+       do k = 2, nz/2
+        wnz(k) = 2.0*pi*(k-1)/Lz
+        wnz(nz-k+2) = -wnz(k)
+       enddo
+       wnz(1) = 0.0
+       wnz(nz/2+1) = 2.0*pi*(nz/2)/Lz
+      endif
+
+c
+c   Compute the integrating factor for modes within truncation sphere
+c   Store only the local portion of the arrays.
+c
+       f1 = 1./Re          ! factor for velocity
+       f2 = 1./(Re*Pr_1)     ! factor for scalar 1
+       f3 = 1./(Re*Pr_2)     ! factor for scalar 2
+
+c      Cutoff values of wavenumbers (max values representable on grid)
+c      (remember, Lx, Ly and Lz=1 are dimensionless values)
+       kmax=(nx/2.)*2.*pi/Lx
+       lmax=(ny/2.)*2.*pi/Ly
+       mmax=(nz)*pi/Lz
+
+c      for 2d problems, set lmax very large to avoid division by zero: wny/lmax
+       if(ny .eq. 0) lmax=1.e32
+
+c      dimensionless inverse time scale for dissipation
+c      at the maximum wavenumber (in any direction)
+c      used to set the coefficient in the dissipation
+c      terms for hyperviscosity runs and when
+c      dissipation is distorted to match grid stretching
+c      value is ignored for isotropic laplacian diss/diff
+       gamma = 1./( T_diss )
+
+      if( diss_flag .eq. 'isotropic' .and. p .eq. 2 ) then
+c      Laplacian dissipation/diffusion, i.e. DNS
+c      Maximum radius in wavenumber space mapped to unit sphere
+c      This was, but is no longer, a user-specified parameter
+       rmax =  8./9.
+    
+	do k = 1, nz+1
+	 do j = 1, ny+1     ! OK for 2d when ny=0
+	  do i = 1, locnx
+
+c          squared magnitude of wavenumber vector
+            r2 = (wnx(i))**2 + (wny(j))**2 + (wnz(k))**2
+            r2_scaled = (wnx(i)/kmax)**2 + (wny(j)/lmax)**2 + (wnz(k)/mmax)**2
+	    if( r2_scaled .le. rmax ) then
+             amp(i,j,k,1) = exp(-dt*f1*r2) 
+             amp(i,j,k,2) = exp(-dt*f2*r2)
+             amp(i,j,k,3) = exp(-dt*f3*r2)
+	    elseif ( r2_scaled .gt. rmax**2 .and. r2_scaled .le. 1 ) then 
+             taper = cos( (pi/2.)*(sqrt(r2_scaled)-rmax)/(1.0-rmax) )**4 
+                                     ! 1 at r2_scaled=8/9 ---> 0 at 1.0
+             amp(i,j,k,1) = exp(-dt*f1*r2)*taper 
+             amp(i,j,k,2) = exp(-dt*f2*r2)*taper
+             amp(i,j,k,3) = exp(-dt*f3*r2)*taper
+	    elseif( r2_scaled .gt. 1.0 ) then
+             amp(i,j,k,1) = 0.0
+             amp(i,j,k,2) = 0.0
+             amp(i,j,k,3) = 0.0
+	    endif
+
+           enddo
+          enddo
+         enddo
+
+      elseif( diss_flag .eq. 'isotropic' .and. p .gt. 2 ) then
+c      Hyperviscosity dissipation/diffusion, no grid distortions
+c      Maximum radius in wavenumber space mapped to unit sphere
+c      This was, but is no longer, a user-specified parameter
+       rmax =  8./9.
+    
+	do k = 1, nz+1
+	 do j = 1, ny+1     ! OK for 2d when ny=0
+	  do i = 1, locnx
+
+c     squared magnitude of *scaled* wavenumber vector (all max's equal)
+            r2 = (wnx(i))**2 + (wny(j))**2 + (wnz(k))**2
+            r2_scaled = (wnx(i)/kmax)**2 + (wny(j)/lmax)**2 + (wnz(k)/mmax)**2
+	    if (r2_scaled .gt. rmax**2) then 
+             amp(i,j,k,1) = 0.0
+             amp(i,j,k,2) = 0.0
+             amp(i,j,k,3) = 0.0
+	    else
+             amp(i,j,k,1) = exp(-dt*gamma*r2**(p/2.))
+             amp(i,j,k,2) = exp(-dt*gamma*r2**(p/2.))
+             amp(i,j,k,3) = exp(-dt*gamma*r2**(p/2.))
+	    endif
+
+           enddo
+          enddo
+         enddo
+
+      elseif( diss_flag .eq. 'anisotropic' ) then
+c      distort the dissipation/diffusion operators for stretched grid
+c     this used to be mapped to a unit sphere (commented below), which
+c     for p>2 in effect creates cross-derivative terms in the spatial
+c     hyperviscosity operator.  Instead, each spatial derivative term
+c     is now separately taken to the pth power in r2_scaled.   
+c     Thus the contours of r2_scaled look more like squares with rounded
+c     corners than spheres (or ellipses).
+c     For r2_scaled close enough to the edge, amplitude set to zero. 
+c      This was, but is no longer, a user-specified parameter
+       rmax =  8./9.
+    
+	do k = 1, nz+1
+	 do j = 1, ny+1     ! OK for 2d when ny=0
+	  do i = 1, locnx
+
+c          squared magnitude of stretched/distorted wavenumber vector
+            r2 = (wnx(i))**2 + (wny(j))**2 + (wnz(k))**2
+c            r2_scaled = (wnx(i)/kmax)**2 + (wny(j)/lmax)**2 + (wnz(k)/mmax)**2
+            r2_scaled = (wnx(i)/kmax)**p + (wny(j)/lmax)**p + (wnz(k)/mmax)**p
+	    if (r2_scaled .gt. rmax**p) then 
+             amp(i,j,k,1) = 0.0
+             amp(i,j,k,2) = 0.0
+             amp(i,j,k,3) = 0.0
+	    else
+c             amp(i,j,k,1) = exp(-dt*gamma*r2_scaled**(p/2.))
+c             amp(i,j,k,2) = exp(-dt*gamma*r2_scaled**(p/2.))
+             amp(i,j,k,1) = exp(-dt*gamma*r2_scaled)
+             amp(i,j,k,2) = exp(-dt*gamma*r2_scaled)
+             amp(i,j,k,3) = exp(-dt*gamma*r2_scaled)
+
+	    endif
+
+           enddo
+          enddo
+         enddo
+
+        endif
+
+	return
+	end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/flow_solve.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/flow_solve.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/flow_solve.f	(revision 6)
@@ -0,0 +1,213 @@
+      program flow_solve
+c=========================================================================================
+c     Free-Slip or Triply Periodic Spectral model in in 2/3 dimensions.
+c     Parallel version using MPI.
+c     Lagrangian floats. (Very slow but accurate)
+c=========================================================================================
+
+      implicit none
+#include "runtime_variables.h"
+#include "variable_declarations.h"
+#include "mpi_init.h"
+#include "problem_params.h"
+#include "runtime_initialization.h"
+      
+c=========================================================================================
+c                     BEGIN MAIN TIME STEPPING LOOP
+c=========================================================================================
+
+      do istep = istart,iend
+       time = (t_start + istep*dt)*(Lz/U0)   ! dimensional time clock
+
+
+c     Initialize floats if neccesary.
+       if( float_switch .eq. 'on' .and. istep .eq. istart_floats ) then
+        call initialize_floats(float_variables,nfloats,locnx,ny,nz,Lx,Ly,Lz,U0,
+     *                         u_cplx,v_cplx,w_cplx,s1_cplx,s2_cplx,
+     *                         rho_0,DGRAD,s1_scale,s2_scale,wnx,wny,wnz,bc_flag,sensor_data,
+     *                         nsensors,float_parameters,nfloatparameters,
+     *                         j_float_time,time,z_close,delta_w,z_offset,
+     *                         myid,comm)
+       endif
+
+
+c      Calculate transform of vorticity vector [vortx,vorty,vortz].
+c      Use the t_n values of u_cplx,v_cplx, and w_cplx stored in location N.
+c      Store the vorticity components in work_cplx(:,:,:,1-3) respectively. 
+        call vort_fcs(u_cplx(1,1,1,N),v_cplx(1,1,1,N),w_cplx(1,1,1,N),
+     *                locnx,nx,ny,nz,wnx,wny,wnz,
+     *                work_cplx(1,1,1,1),work_cplx(1,1,1,2),work_cplx(1,1,1,3),
+     *                num_dims,bc_flag)
+
+
+c      Inverse transform the time t_n dependent variables and
+c      the vorticity vector {work_cplx(1-3)} back to the physical domain.
+c      Physical space representations of u,v,w,s1 and s2 are returned
+c      in the arrays work(:,:,:,4-7,9) respectively.
+c      The physical space representation of vorticity components are
+c      returned in the arrays work(:,:,:,1-3).
+c      The array scratch is used for temporary work space.
+       call ifft(u_cplx,v_cplx,w_cplx,s1_cplx,s2_cplx,
+     *           work_cplx(1,1,1,1),work_cplx(1,1,1,2),work_cplx(1,1,1,3), 
+     *           N,nx,ny,nz,trigx,trigy,trigz,ifax,ifay,ifaz,wn,
+     *           scratch,xt,num_dims,bc_flag,
+     *           work(1,1,1,4),work(1,1,1,5),work(1,1,1,6),work(1,1,1,7),work(1,1,1,9),
+     *           work(1,1,1,1),work(1,1,1,2),work(1,1,1,3),work_cplx(1,1,1,8),
+     *           myid,numprocs,locnx,locnz,comm,twoslice,subslice)
+
+c      Call equation of state to calculate perturbation density pd(:,:,:), given the physical
+c      space values of s1 and s2 now stored in work(:,:,:,7) and work(:,:,:,9) respectively.
+       call equation_of_state(scalars,work(1,1,1,7),work(1,1,1,9),s1_scale,s2_scale,
+     *                        nx,ny,locnz,rho_0,DGRAD,myid,numprocs,Lx,Ly,Lz,pd(1,1,1))
+
+c      Given the current numerical solutions on the physical space grid, do some
+c      quick analyses and/or output selected results if appropriate.
+       if( mod(istep,i_stat) .eq. 0 ) then
+c      **** I'm using only kappa_1 here for surface diffusion term g*kappa*d/dz rho ...check
+        call energetics(work(1,1,1,4),work(1,1,1,5),work(1,1,1,6),pd(1,1,1),
+     *                  u_cplx(1,1,1,N),v_cplx(1,1,1,N),w_cplx(1,1,1,N),wnx,wny,wnz,
+     *                  U0,Lx,Ly,Lz,f,g,rho_0,DGRAD,Re,kappa_1,nu,
+     *                  nx,ny,nz,num_dims,bc_flag,force_flag,time,
+     *                  comm,myid,numprocs,locnx,locnz,ambient_density)
+       endif 
+
+#include "init_write_netcdf.h"
+
+c      Compute nonlinear products locally in physical space. On input, the
+c      work arrays contain values as described above.
+c      For now, we assume s1_bar and s2_bar are functions of z only and so
+c      d/dx and d/dy of p_bar, the hydrostatic pressure associated w/ s1_bar/s2_bar,
+c      are equal to zero.
+c      On output:
+c      work(:,:,:,1-3)   contains the products of s1 and u,v and w respectively.
+c      work(:,:,:,10-12) contains the products of s2 and u,v and w respectively.
+c      work(:,:,:,4)   v*vortz - w vorty + Rot*v -u*d/dx rho_bar - d/dx p_bar
+c      work(:,:,:,5)   w*vortx - u vortz - Rot*u -v*d/dy rho_bar - d/dy p_bar
+c      work(:,:,:,6)   u*vorty - v vortx - Ri*pd
+c      work(:,:,:,7)   -u dot grad s1_bar
+c      work(:,:,:,8)   d/dz s1_bar
+c      work(:,:,:,9)   -u dot grad s2_bar
+c      work(:,:,:,13)   d/dz s2_bar
+       call nonlin (scalars,work(1,1,1,4),work(1,1,1,5),work(1,1,1,6),
+     *              pd(1,1,1),work(1,1,1,7),work(1,1,1,9), 
+     *              work(1,1,1,1),work(1,1,1,2),work(1,1,1,3),
+     *              work(1,1,1,10),work(1,1,1,11),work(1,1,1,12),
+     *              Lx,Ly,Lz,U0,DGRAD,s1_scale,s2_scale,rho_0,
+     *              work(1,1,1,8),work(1,1,1,13),Ri,Rot,num_dims,
+     *              nx,ny,locnz,myid,numprocs,comm)
+
+c      Add forcing terms via user_defined_forcing subroutine
+       if( force_flag .eq. 'yes' ) then
+        call add_forcing(work(1,1,1,4),work(1,1,1,5),work(1,1,1,6),
+     *                   work(1,1,1,7),work(1,1,1,9),nx,ny,locnz,myid,
+     *                   numprocs,Lx,Ly,Lz,U0,DGRAD,s1_scale,s2_scale,time,f,g,rho_0)
+       endif
+
+c      Transform physical space quantities back to the wavenumber domain.
+c      The results are stored in work_cplx(:,:,:,i) for i as follows:
+c      work_cplx(:,:,:,1-3)   contains the products of s1 and u,v and w respectively.
+c      work_cplx(:,:,:,10-12) contains the products of s2 and u,v and w respectively.
+c      work_cplx(:,:,:,4)   v*vortz - w vorty + Rot*v -u*d/dx rho_bar - d/dx p_bar
+c      work_cplx(:,:,:,5)   w*vortx - u vortz - Rot*u -v*d/dy rho_bar - d/dy p_bar
+c      work_cplx(:,:,:,6)   u*vorty - v vortx - Ri*pd
+c      work_cplx(:,:,:,7)   -u dot grad s1_bar
+c      work_cplx(:,:,:,8)   d/dz s1_bar
+c      work_cplx(:,:,:,9)   -u dot grad s2_bar
+c      work_cplx(:,:,:,13)   d/dz s2_bar
+c      The array scratch is used as temporary work space.
+       call fft (work(1,1,1,1),work(1,1,1,2),work(1,1,1,3),work(1,1,1,4), 
+     *           work(1,1,1,5),work(1,1,1,6),work(1,1,1,7),work(1,1,1,9),
+     *           work(1,1,1,10),work(1,1,1,11),work(1,1,1,12),
+     *           work(1,1,1,13),work(1,1,1,8),
+     *           num_dims,nx,ny,nz,trigx,trigy,trigz, 
+     *           ifax,ifay,ifaz,wn,bc_flag,xt,work_cplx,scratch,
+     *           myid,numprocs,locnx,locnz,comm,twoslice,subslice)
+
+c      Compute the transfer terms, i.e. all components of the rhs's
+c      except the dissipation and diffusion terms which are treated 
+c      analytically via integrating factors. Store the results in the
+c      "M" locations of the Tr1, Tr2, Tr3 and Tr4 arrays. The transform
+c      of the pressure is also computed and stored in work_cplx(:,:,:,8).
+       call rhs(work_cplx(1,1,1,4),work_cplx(1,1,1,5),work_cplx(1,1,1,6),
+     *          work_cplx(1,1,1,7),work_cplx(1,1,1,9),
+     *          work_cplx(1,1,1,10),work_cplx(1,1,1,11),
+     *          work_cplx(1,1,1,12),work_cplx(1,1,1,13),
+     *          work_cplx(1,1,1,1),work_cplx(1,1,1,2),
+     *          work_cplx(1,1,1,3),work_cplx(1,1,1,8),
+     *          Tr1(1,1,1,M),Tr2(1,1,1,M),Tr3(1,1,1,M),Tr4(1,1,1,M),
+     *          Tr5(1,1,1,M),amp,dt,
+     *          myid,num_dims,locnx,ny,nz,wnx,wny,wnz,bc_flag) 
+
+c      Add forcing in Fourier space. This is for experts only,
+c      using this method of forcing requires knowledge of the
+c      fourier space wavenumber map, which is defined in
+c      source/fill_wave_vectors.f.
+       if( force_flag .eq. 'yesFourier' ) then
+        call add_fforcing(force_cplx,Tr1(1,1,1,M),Tr2(1,1,1,M),
+     *                   Tr3(1,1,1,M),Tr4(1,1,1,M),Tr5(1,1,1,M),
+     *                   wnx,wny,wnz,locnx,ny,nyplanes,nz,Lz,
+     *                   U0,DGRAD,time,f,g,rho_0)
+       endif
+
+#include "trans_write_netcdf.h"
+
+c      Take an explicit, multilevel time step.
+c      Store the updated fields in locations (:,:,:,NM1).
+c      N.B. The "NM1" locations will shortly be "promoted" to the "current"
+c      fields before advancing to the next time step.
+       call step(u_cplx,v_cplx,w_cplx,s1_cplx,s2_cplx,Tr1,Tr2,Tr3,Tr4,Tr5,amp,
+     *           num_dims,M,MM1,MM2,N,NM1,locnx,ny,nz,step_flag,dt)
+
+c      If required, advance the infinitesimal lagrangian floats
+       if( float_switch .eq. 'on' ) then
+        if( mod(istep,2) .eq. 0 ) then
+
+         call rk4_even(dt,k_rk4,float_variables,float_parameters,Lz,s1_scale,s2_scale,
+     *                 locnx,ny,nz,nfloats,nfloatparameters,nsensors,
+     *                 N,NM1,u_cplx,v_cplx,w_cplx,s1_cplx,s2_cplx,wnx,wny,wnz,
+     *                 bc_flag,Pr_1,Re,myid,comm)
+
+        else   ! for odd time steps:
+         call rk4_odd (dt,k_rk4,float_variables,float_parameters,Lz,s1_scale,s2_scale,
+     *                 locnx,ny,nz,nfloats,nfloatparameters,nsensors,
+     *                 N,NM1,u_cplx,v_cplx,w_cplx,s1_cplx,s2_cplx,wnx,wny,wnz,
+     *                 bc_flag,Pr_1,Re,sensor_data,myid,comm)
+
+         time = (t_start + (istep+1)*dt)*(Lz/U0)   ! value after time step
+
+c        Float data can be written every odd time step, i.e. step 1,3,5,7 etc
+c        Setting the mod argument to 7 selects every fourth available
+c        output point. Setting it to 1 selects every odd time step.
+
+         if( istep .gt. istart_floats .and. mod(istep,1) .eq. 0 ) then
+          if(myid .eq. 0 ) then
+           prelim_flag='no'
+           call write_floats_nc(time,istep,nfloats,nsensors,Lz,s1_scale,s2_scale,U0,
+     *                          float_variables,sensor_data,j_float_time,
+     *                          float_parameters,nfloatparameters,prelim_flag)
+          endif
+         endif  ! end of special, i.e. write data, odd case
+
+        endif   ! end of even/odd time step block
+       endif    ! end of float_switch on case
+ 
+c      toggle N,N-1 pointers (storage ids for dependent variables)
+       tmp=NM1
+       NM1=N
+       N=tmp
+
+c      toggle M,M-1 & M-2 pointers (storage ids for transfer terms)
+       tmp=MM2
+       MM2=MM1
+       MM1=M
+       M=tmp
+
+       call MPI_BARRIER(comm,ierr)   ! precautionary synchronization
+      enddo    ! end time stepping loop
+
+c     Clean up and gracefully exit MPI environment.
+999   call MPI_BARRIER(comm,ierr)
+      call MPI_FINALIZE(ierr)
+
+      stop
+      end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/i.initialize.f.old
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/i.initialize.f.old	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/i.initialize.f.old	(revision 6)
@@ -0,0 +1,1793 @@
+      subroutine initialize(u,v,w,s1,s2,ambient_density,u_cplx,v_cplx,w_cplx,s1_cplx,s2_cplx,
+     *                      nx,ny,nz,num_dims,efactor,
+     *                      Lx,Ly,Lz,dx,dy,dz,U0,DGRAD,s1_scale,s2_scale,rho_0,f,g,kappa_1,kappa_2,nu,
+     *                      bc_flag,ifax,ifay,ifaz,trigx,trigy,trigz,wn,
+     *                      wnx,wny,wnz,amp,p,T_diss,diss_flag,N,NM1,M,MM1,MM2,step_flag,
+     *                      Rot,Ri,Re,Pr_1,Pr_2,istart,iend,i_all,i_selective,i_stat,
+     *                      dt,t_start,t_end,t_write_selective,
+     *                      t_stat,xt,work,scratch,myid,numprocs,locnx,locnz,
+     *                      comm,twoslice,subslice,temp,netcdf_file,nyplanes,
+     *                      force_cplx,force_flag,work_P,scalars)
+     
+c
+c     Routine to set up the initial conditions, scale
+c     all variables (i.e. nondimensionalize variables) and initialize
+c     various arrays, flags and counters.
+c
+
+      implicit none
+      integer nyplanes,nx,ny,nz,num_dims,p,iswitch,itrig,i_stat,N,NM1,M,MM1,MM2
+      integer myid,numprocs,ierr,locnx,locnz,i,j,k,iwrite
+      integer comm,twoslice,subslice
+      integer iseed,npts
+      parameter (npts=4*2048)  ! >=nx
+      double precision urv(npts),vrv(npts)
+      real u(nx+2,ny+1,locnz+1),v(nx+2,ny+1,locnz+1),w(nx+2,ny+1,locnz+1)
+      real s1(nx+2,ny+1,locnz+1),s2(nx+2,ny+1,locnz+1)
+      real ambient_density(nx+2,ny+1,locnz+1)
+      real temp(nx,nyplanes,locnz+1)
+      complex u_cplx(locnx,ny+1,nz+1,2),v_cplx(locnx,ny+1,nz+1,2)
+      complex w_cplx(locnx,ny+1,nz+1,2),s1_cplx(locnx,ny+1,nz+1,2)
+      complex s2_cplx(locnx,ny+1,nz+1,2)
+      real Lx,Ly,Lz,U0,DGRAD,s1_scale,s2_scale,rho_0,f,g,kappa_1,kappa_2,nu
+      real Rot,Ri,Re,Pr_1,Pr_2,dt,t_start,t_end,t_write_selective
+      character*80 bc_flag,step_flag,strat_flag,read_netcdf,netcdf_file
+      character*80 diss_flag,force_flag
+      character*2 scalars
+      character tswitch
+      integer ifax(13),ifay(13),ifaz(13)
+      integer jstart(4),icount(4),data_dims(4),ncid,RCODE,var_id
+      real wnx(locnx),wny(ny+1),wnz(nz+1)
+      real amp(locnx,ny+1,nz+1,2),T_diss
+      real trigx(3*(nx+2)/2+1),trigy(2*(ny+1)),trigz(2*nz)
+      real work((nx+2)*(ny+1)*(locnz+1)),efactor
+      real work_P(nx+2,ny+1,locnz+1)
+      complex scratch(locnx,ny+1,nz+1)
+      complex force_cplx(locnx,ny+1,nz+1)
+      complex wn(nz/4+1),xt(nx+2, nz/2+1)
+
+      real pi,dx,dy,dz,x,y,z,time_scale,t_stat,total_density,N2,delta_u
+      real xpos,ypos,zpos,s1_bar,s2_bar,junk,rho_bar,Tgrad
+      double precision Temperature,Salinity,pMpa,density
+      integer istart,iend,i_all,i_selective,kglobal
+      integer dim_length,ii,jj
+
+!
+! netcdf version 3 fortran interface:
+!
+
+!
+! external netcdf data types:
+!
+      integer nf_byte
+      integer nf_int1
+      integer nf_char
+      integer nf_short
+      integer nf_int2
+      integer nf_int
+      integer nf_float
+      integer nf_real
+      integer nf_double
+
+      parameter (nf_byte = 1)
+      parameter (nf_int1 = nf_byte)
+      parameter (nf_char = 2)
+      parameter (nf_short = 3)
+      parameter (nf_int2 = nf_short)
+      parameter (nf_int = 4)
+      parameter (nf_float = 5)
+      parameter (nf_real = nf_float)
+      parameter (nf_double = 6)
+
+!
+! default fill values:
+!
+      integer           nf_fill_byte
+      integer           nf_fill_int1
+      integer           nf_fill_char
+      integer           nf_fill_short
+      integer           nf_fill_int2
+      integer           nf_fill_int
+      real              nf_fill_float
+      real              nf_fill_real
+      doubleprecision   nf_fill_double
+
+      parameter (nf_fill_byte = -127)
+      parameter (nf_fill_int1 = nf_fill_byte)
+      parameter (nf_fill_char = 0)
+      parameter (nf_fill_short = -32767)
+      parameter (nf_fill_int2 = nf_fill_short)
+      parameter (nf_fill_int = -2147483647)
+      parameter (nf_fill_float = 9.9692099683868690e+36)
+      parameter (nf_fill_real = nf_fill_float)
+      parameter (nf_fill_double = 9.9692099683868690e+36)
+
+!
+! mode flags for opening and creating a netcdf dataset:
+!
+      integer nf_nowrite
+      integer nf_write
+      integer nf_clobber
+      integer nf_noclobber
+      integer nf_fill
+      integer nf_nofill
+      integer nf_lock
+      integer nf_share
+
+      parameter (nf_nowrite = 0)
+      parameter (nf_write = 1)
+      parameter (nf_clobber = 0)
+      parameter (nf_noclobber = 4)
+      parameter (nf_fill = 0)
+      parameter (nf_nofill = 256)
+      parameter (nf_lock = 1024)
+      parameter (nf_share = 2048)
+
+!
+! size argument for defining an unlimited dimension:
+!
+      integer nf_unlimited
+      parameter (nf_unlimited = 0)
+
+!
+! global attribute id:
+!
+      integer nf_global
+      parameter (nf_global = 0)
+
+!
+! implementation limits:
+!
+      integer nf_max_dims
+      integer nf_max_attrs
+      integer nf_max_vars
+      integer nf_max_name
+      integer nf_max_var_dims
+
+      parameter (nf_max_dims = 100)
+      parameter (nf_max_attrs = 2000)
+      parameter (nf_max_vars = 2000)
+      parameter (nf_max_name = 128)
+      parameter (nf_max_var_dims = nf_max_dims)
+
+!
+! error codes:
+!
+      integer nf_noerr
+      integer nf_ebadid
+      integer nf_eexist
+      integer nf_einval
+      integer nf_eperm
+      integer nf_enotindefine
+      integer nf_eindefine
+      integer nf_einvalcoords
+      integer nf_emaxdims
+      integer nf_enameinuse
+      integer nf_enotatt
+      integer nf_emaxatts
+      integer nf_ebadtype
+      integer nf_ebaddim
+      integer nf_eunlimpos
+      integer nf_emaxvars
+      integer nf_enotvar
+      integer nf_eglobal
+      integer nf_enotnc
+      integer nf_ests
+      integer nf_emaxname
+      integer nf_eunlimit
+      integer nf_enorecvars
+      integer nf_echar
+      integer nf_eedge
+      integer nf_estride
+      integer nf_ebadname
+      integer nf_erange
+
+      parameter (nf_noerr = 0)
+      parameter (nf_ebadid = -33)
+      parameter (nf_eexist = -35)
+      parameter (nf_einval = -36)
+      parameter (nf_eperm = -37)
+      parameter (nf_enotindefine = -38)
+      parameter (nf_eindefine = -39)
+      parameter (nf_einvalcoords = -40)
+      parameter (nf_emaxdims = -41)
+      parameter (nf_enameinuse = -42)
+      parameter (nf_enotatt = -43)
+      parameter (nf_emaxatts = -44)
+      parameter (nf_ebadtype = -45)
+      parameter (nf_ebaddim = -46)
+      parameter (nf_eunlimpos = -47)
+      parameter (nf_emaxvars = -48)
+      parameter (nf_enotvar = -49)
+      parameter (nf_eglobal = -50)
+      parameter (nf_enotnc = -51)
+      parameter (nf_ests = -52)
+      parameter (nf_emaxname = -53)
+      parameter (nf_eunlimit = -54)
+      parameter (nf_enorecvars = -55)
+      parameter (nf_echar = -56)
+      parameter (nf_eedge = -57)
+      parameter (nf_estride = -58)
+      parameter (nf_ebadname = -59)
+      parameter (nf_erange = -60)
+
+!
+! error handling modes:
+!
+      integer  nf_fatal
+      integer nf_verbose
+
+      parameter (nf_fatal = 1)
+      parameter (nf_verbose = 2)
+
+!
+! miscellaneous routines:
+!
+      character*80   nf_inq_libvers
+      external       nf_inq_libvers
+
+      character*80   nf_strerror
+!                         (integer             ncerr)
+      external       nf_strerror
+
+      logical        nf_issyserr
+!                         (integer             ncerr)
+      external       nf_issyserr
+
+!
+! control routines:
+!
+
+      integer         nf_create
+!                         (character*(*)       path,
+!                          integer             cmode,
+!                          integer             ncid)
+      external        nf_create
+
+      integer         nf__create
+!                         (character*(*)       path,
+!                          integer             cmode,
+!                          integer             initialsz,
+!                          integer             chunksizehint,
+!                          integer             ncid)
+      external        nf__create
+
+      integer         nf_open
+!                         (character*(*)       path,
+!                          integer             mode,
+!                          integer             ncid)
+      external        nf_open
+
+      integer         nf__open
+!                         (character*(*)       path,
+!                          integer             mode,
+!                          integer             chunksizehint,
+!                          integer             ncid)
+      external        nf__open
+
+      integer         nf_set_fill
+!                         (integer             ncid,
+!                          integer             fillmode,
+!                          integer             old_mode)
+      external        nf_set_fill
+
+      integer         nf_redef
+!                         (integer             ncid)
+      external        nf_redef
+
+      integer         nf_enddef
+!                         (integer             ncid)
+      external        nf_enddef
+
+      integer         nf__enddef
+!                         (integer             ncid,
+!                          integer             h_minfree,
+!                          integer             v_align,
+!                          integer             v_minfree,
+!                          integer             r_align)
+      external        nf__enddef
+
+      integer         nf_sync
+!                         (integer             ncid)
+      external        nf_sync
+
+      integer         nf_abort
+!                         (integer             ncid)
+      external        nf_abort
+
+      integer         nf_close
+!                         (integer             ncid)
+      external        nf_close
+
+      integer         nf_delete
+!                         (character*(*)       ncid)
+      external        nf_delete
+
+!
+! general inquiry routines:
+!
+
+      integer         nf_inq
+!                         (integer             ncid,
+!                          integer             ndims,
+!                          integer             nvars,
+!                          integer             ngatts,
+!                          integer             unlimdimid)
+      external        nf_inq
+
+      integer         nf_inq_ndims
+!                         (integer             ncid,
+!                          integer             ndims)
+      external        nf_inq_ndims
+
+      integer         nf_inq_nvars
+!                         (integer             ncid,
+!                          integer             nvars)
+      external        nf_inq_nvars
+
+      integer         nf_inq_natts
+!                         (integer             ncid,
+!                          integer             ngatts)
+      external        nf_inq_natts
+
+      integer         nf_inq_unlimdim
+!                         (integer             ncid,
+!                          integer             unlimdimid)
+      external        nf_inq_unlimdim
+
+!
+! dimension routines:
+!
+
+      integer         nf_def_dim
+!                         (integer             ncid,
+!                          character(*)        name,
+!                          integer             len,
+!                          integer             dimid)
+      external        nf_def_dim
+
+      integer         nf_inq_dimid
+!                         (integer             ncid,
+!                          character(*)        name,
+!                          integer             dimid)
+      external        nf_inq_dimid
+
+      integer         nf_inq_dim
+!                         (integer             ncid,
+!                          integer             dimid,
+!                          character(*)        name,
+!                          integer             len)
+      external        nf_inq_dim
+
+      integer         nf_inq_dimname
+!                         (integer             ncid,
+!                          integer             dimid,
+!                          character(*)        name)
+      external        nf_inq_dimname
+
+      integer         nf_inq_dimlen
+!                         (integer             ncid,
+!                          integer             dimid,
+!                          integer             len)
+      external        nf_inq_dimlen
+
+      integer         nf_rename_dim
+!                         (integer             ncid,
+!                          integer             dimid,
+!                          character(*)        name)
+      external        nf_rename_dim
+
+!
+! general attribute routines:
+!
+
+      integer         nf_inq_att
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          integer             xtype,
+!                          integer             len)
+      external        nf_inq_att
+
+      integer         nf_inq_attid
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          integer             attnum)
+      external        nf_inq_attid
+
+      integer         nf_inq_atttype
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          integer             xtype)
+      external        nf_inq_atttype
+
+      integer         nf_inq_attlen
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          integer             len)
+      external        nf_inq_attlen
+
+      integer         nf_inq_attname
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             attnum,
+!                          character(*)        name)
+      external        nf_inq_attname
+
+      integer         nf_copy_att
+!                         (integer             ncid_in,
+!                          integer             varid_in,
+!                          character(*)        name,
+!                          integer             ncid_out,
+!                          integer             varid_out)
+      external        nf_copy_att
+
+      integer         nf_rename_att
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        curname,
+!                          character(*)        newname)
+      external        nf_rename_att
+
+      integer         nf_del_att
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name)
+      external        nf_del_att
+
+!
+! attribute put/get routines:
+!
+
+      integer         nf_put_att_text
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          integer             len,
+!                          character(*)        text)
+      external        nf_put_att_text
+
+      integer         nf_get_att_text
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          character(*)        text)
+      external        nf_get_att_text
+
+      integer         nf_put_att_int1
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          integer             xtype,
+!                          integer             len,
+!                          nf_int1_t           i1vals(1))
+      external        nf_put_att_int1
+
+      integer         nf_get_att_int1
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          nf_int1_t           i1vals(1))
+      external        nf_get_att_int1
+
+      integer         nf_put_att_int2
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          integer             xtype,
+!                          integer             len,
+!                          nf_int2_t           i2vals(1))
+      external        nf_put_att_int2
+
+      integer         nf_get_att_int2
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          nf_int2_t           i2vals(1))
+      external        nf_get_att_int2
+
+      integer         nf_put_att_int
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          integer             xtype,
+!                          integer             len,
+!                          integer             ivals(1))
+      external        nf_put_att_int
+
+      integer         nf_get_att_int
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          integer             ivals(1))
+      external        nf_get_att_int
+
+      integer         nf_put_att_real
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          integer             xtype,
+!                          integer             len,
+!                          real                rvals(1))
+      external        nf_put_att_real
+
+      integer         nf_get_att_real
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          real                rvals(1))
+      external        nf_get_att_real
+
+      integer         nf_put_att_double
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          integer             xtype,
+!                          integer             len,
+!                          double              dvals(1))
+      external        nf_put_att_double
+
+      integer         nf_get_att_double
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          double              dvals(1))
+      external        nf_get_att_double
+
+!
+! general variable routines:
+!
+
+      integer         nf_def_var
+!                         (integer             ncid,
+!                          character(*)        name,
+!                          integer             datatype,
+!                          integer             ndims,
+!                          integer             dimids(1),
+!                          integer             varid)
+      external        nf_def_var
+
+      integer         nf_inq_var
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name,
+!                          integer             datatype,
+!                          integer             ndims,
+!                          integer             dimids(1),
+!                          integer             natts)
+      external        nf_inq_var
+
+      integer         nf_inq_varid
+!                         (integer             ncid,
+!                          character(*)        name,
+!                          integer             varid)
+      external        nf_inq_varid
+
+      integer         nf_inq_varname
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name)
+      external        nf_inq_varname
+
+      integer         nf_inq_vartype
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             xtype)
+      external        nf_inq_vartype
+
+      integer         nf_inq_varndims
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             ndims)
+      external        nf_inq_varndims
+
+      integer         nf_inq_vardimid
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             dimids(1))
+      external        nf_inq_vardimid
+
+      integer         nf_inq_varnatts
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             natts)
+      external        nf_inq_varnatts
+
+      integer         nf_rename_var
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        name)
+      external        nf_rename_var
+
+      integer         nf_copy_var
+!                         (integer             ncid_in,
+!                          integer             varid,
+!                          integer             ncid_out)
+      external        nf_copy_var
+
+!
+! entire variable put/get routines:
+!
+
+      integer         nf_put_var_text
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        text)
+      external        nf_put_var_text
+
+      integer         nf_get_var_text
+!                         (integer             ncid,
+!                          integer             varid,
+!                          character(*)        text)
+      external        nf_get_var_text
+
+      integer         nf_put_var_int1
+!                         (integer             ncid,
+!                          integer             varid,
+!                          nf_int1_t           i1vals(1))
+      external        nf_put_var_int1
+
+      integer         nf_get_var_int1
+!                         (integer             ncid,
+!                          integer             varid,
+!                          nf_int1_t           i1vals(1))
+      external        nf_get_var_int1
+
+      integer         nf_put_var_int2
+!                         (integer             ncid,
+!                          integer             varid,
+!                          nf_int2_t           i2vals(1))
+      external        nf_put_var_int2
+
+      integer         nf_get_var_int2
+!                         (integer             ncid,
+!                          integer             varid,
+!                          nf_int2_t           i2vals(1))
+      external        nf_get_var_int2
+
+      integer         nf_put_var_int
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             ivals(1))
+      external        nf_put_var_int
+
+      integer         nf_get_var_int
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             ivals(1))
+      external        nf_get_var_int
+
+      integer         nf_put_var_real
+!                         (integer             ncid,
+!                          integer             varid,
+!                          real                rvals(1))
+      external        nf_put_var_real
+
+      integer         nf_get_var_real
+!                         (integer             ncid,
+!                          integer             varid,
+!                          real                rvals(1))
+      external        nf_get_var_real
+
+      integer         nf_put_var_double
+!                         (integer             ncid,
+!                          integer             varid,
+!                          doubleprecision     dvals(1))
+      external        nf_put_var_double
+
+      integer         nf_get_var_double
+!                         (integer             ncid,
+!                          integer             varid,
+!                          doubleprecision     dvals(1))
+      external        nf_get_var_double
+
+!
+! single variable put/get routines:
+!
+
+      integer         nf_put_var1_text
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             index(1),
+!                          character*1         text)
+      external        nf_put_var1_text
+
+      integer         nf_get_var1_text
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             index(1),
+!                          character*1         text)
+      external        nf_get_var1_text
+
+      integer         nf_put_var1_int1
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             index(1),
+!                          nf_int1_t           i1val)
+      external        nf_put_var1_int1
+
+      integer         nf_get_var1_int1
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             index(1),
+!                          nf_int1_t           i1val)
+      external        nf_get_var1_int1
+
+      integer         nf_put_var1_int2
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             index(1),
+!                          nf_int2_t           i2val)
+      external        nf_put_var1_int2
+
+      integer         nf_get_var1_int2
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             index(1),
+!                          nf_int2_t           i2val)
+      external        nf_get_var1_int2
+
+      integer         nf_put_var1_int
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             index(1),
+!                          integer             ival)
+      external        nf_put_var1_int
+
+      integer         nf_get_var1_int
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             index(1),
+!                          integer             ival)
+      external        nf_get_var1_int
+
+      integer         nf_put_var1_real
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             index(1),
+!                          real                rval)
+      external        nf_put_var1_real
+
+      integer         nf_get_var1_real
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             index(1),
+!                          real                rval)
+      external        nf_get_var1_real
+
+      integer         nf_put_var1_double
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             index(1),
+!                          doubleprecision     dval)
+      external        nf_put_var1_double
+
+      integer         nf_get_var1_double
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             index(1),
+!                          doubleprecision     dval)
+      external        nf_get_var1_double
+
+!
+! variable array put/get routines:
+!
+
+      integer         nf_put_vara_text
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          character(*)        text)
+      external        nf_put_vara_text
+
+      integer         nf_get_vara_text
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          character(*)        text)
+      external        nf_get_vara_text
+
+      integer         nf_put_vara_int1
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          nf_int1_t           i1vals(1))
+      external        nf_put_vara_int1
+
+      integer         nf_get_vara_int1
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          nf_int1_t           i1vals(1))
+      external        nf_get_vara_int1
+
+      integer         nf_put_vara_int2
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          nf_int2_t           i2vals(1))
+      external        nf_put_vara_int2
+
+      integer         nf_get_vara_int2
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          nf_int2_t           i2vals(1))
+      external        nf_get_vara_int2
+
+      integer         nf_put_vara_int
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             ivals(1))
+      external        nf_put_vara_int
+
+      integer         nf_get_vara_int
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             ivals(1))
+      external        nf_get_vara_int
+
+      integer         nf_put_vara_real
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          real                rvals(1))
+      external        nf_put_vara_real
+
+      integer         nf_get_vara_real
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          real                rvals(1))
+      external        nf_get_vara_real
+
+      integer         nf_put_vara_double
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          doubleprecision     dvals(1))
+      external        nf_put_vara_double
+
+      integer         nf_get_vara_double
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          doubleprecision     dvals(1))
+      external        nf_get_vara_double
+
+!
+! strided variable put/get routines:
+!
+
+      integer         nf_put_vars_text
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          character(*)        text)
+      external        nf_put_vars_text
+
+      integer         nf_get_vars_text
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          character(*)        text)
+      external        nf_get_vars_text
+
+      integer         nf_put_vars_int1
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          nf_int1_t           i1vals(1))
+      external        nf_put_vars_int1
+
+      integer         nf_get_vars_int1
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          nf_int1_t           i1vals(1))
+      external        nf_get_vars_int1
+
+      integer         nf_put_vars_int2
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          nf_int2_t           i2vals(1))
+      external        nf_put_vars_int2
+
+      integer         nf_get_vars_int2
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          nf_int2_t           i2vals(1))
+      external        nf_get_vars_int2
+
+      integer         nf_put_vars_int
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             ivals(1))
+      external        nf_put_vars_int
+
+      integer         nf_get_vars_int
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             ivals(1))
+      external        nf_get_vars_int
+
+      integer         nf_put_vars_real
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          real                rvals(1))
+      external        nf_put_vars_real
+
+      integer         nf_get_vars_real
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          real                rvals(1))
+      external        nf_get_vars_real
+
+      integer         nf_put_vars_double
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          doubleprecision     dvals(1))
+      external        nf_put_vars_double
+
+      integer         nf_get_vars_double
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          doubleprecision     dvals(1))
+      external        nf_get_vars_double
+
+!
+! mapped variable put/get routines:
+!
+
+      integer         nf_put_varm_text
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             imap(1),
+!                          character(*)        text)
+      external        nf_put_varm_text
+
+      integer         nf_get_varm_text
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             imap(1),
+!                          character(*)        text)
+      external        nf_get_varm_text
+
+      integer         nf_put_varm_int1
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             imap(1),
+!                          nf_int1_t           i1vals(1))
+      external        nf_put_varm_int1
+
+      integer         nf_get_varm_int1
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             imap(1),
+!                          nf_int1_t           i1vals(1))
+      external        nf_get_varm_int1
+
+      integer         nf_put_varm_int2
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             imap(1),
+!                          nf_int2_t           i2vals(1))
+      external        nf_put_varm_int2
+
+      integer         nf_get_varm_int2
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             imap(1),
+!                          nf_int2_t           i2vals(1))
+      external        nf_get_varm_int2
+
+      integer         nf_put_varm_int
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             imap(1),
+!                          integer             ivals(1))
+      external        nf_put_varm_int
+
+      integer         nf_get_varm_int
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             imap(1),
+!                          integer             ivals(1))
+      external        nf_get_varm_int
+
+      integer         nf_put_varm_real
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             imap(1),
+!                          real                rvals(1))
+      external        nf_put_varm_real
+
+      integer         nf_get_varm_real
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             imap(1),
+!                          real                rvals(1))
+      external        nf_get_varm_real
+
+      integer         nf_put_varm_double
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             imap(1),
+!                          doubleprecision     dvals(1))
+      external        nf_put_varm_double
+
+      integer         nf_get_varm_double
+!                         (integer             ncid,
+!                          integer             varid,
+!                          integer             start(1),
+!                          integer             count(1),
+!                          integer             stride(1),
+!                          integer             imap(1),
+!                          doubleprecision     dvals(1))
+      external        nf_get_varm_double
+
+!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+! begin netcdf 2.4 backward compatibility:
+!
+
+!      
+! functions in the fortran interface
+!
+      integer nccre
+      integer ncopn
+      integer ncddef
+      integer ncdid
+      integer ncvdef
+      integer ncvid
+      integer nctlen
+      integer ncsfil
+
+      external nccre
+      external ncopn
+      external ncddef
+      external ncdid
+      external ncvdef
+      external ncvid
+      external nctlen
+      external ncsfil
+
+
+      integer ncrdwr
+      integer nccreat
+      integer ncexcl
+      integer ncindef
+      integer ncnsync
+      integer nchsync
+      integer ncndirty
+      integer nchdirty
+      integer nclink
+      integer ncnowrit
+      integer ncwrite
+      integer ncclob
+      integer ncnoclob
+      integer ncglobal
+      integer ncfill
+      integer ncnofill
+      integer maxncop
+      integer maxncdim
+      integer maxncatt
+      integer maxncvar
+      integer maxncnam
+      integer maxvdims
+      integer ncnoerr
+      integer ncebadid
+      integer ncenfile
+      integer nceexist
+      integer nceinval
+      integer nceperm
+      integer ncenotin
+      integer nceindef
+      integer ncecoord
+      integer ncemaxds
+      integer ncename
+      integer ncenoatt
+      integer ncemaxat
+      integer ncebadty
+      integer ncebadd
+      integer ncests
+      integer nceunlim
+      integer ncemaxvs
+      integer ncenotvr
+      integer nceglob
+      integer ncenotnc
+      integer ncfoobar
+      integer ncsyserr
+      integer ncfatal
+      integer ncverbos
+      integer ncentool
+
+
+!
+! netcdf data types:
+!
+      integer ncbyte
+      integer ncchar
+      integer ncshort
+      integer nclong
+      integer ncfloat
+      integer ncdouble
+
+      parameter(ncbyte = 1)
+      parameter(ncchar = 2)
+      parameter(ncshort = 3)
+      parameter(nclong = 4)
+      parameter(ncfloat = 5)
+      parameter(ncdouble = 6)
+
+!     
+!     masks for the struct nc flag field; passed in as 'mode' arg to
+!     nccreate and ncopen.
+!     
+
+!     read/write, 0 => readonly 
+      parameter(ncrdwr = 1)
+!     in create phase, cleared by ncendef 
+      parameter(nccreat = 2)
+!     on create destroy existing file 
+      parameter(ncexcl = 4)
+!     in define mode, cleared by ncendef 
+      parameter(ncindef = 8)
+!     synchronise numrecs on change (x'10')
+      parameter(ncnsync = 16)
+!     synchronise whole header on change (x'20')
+      parameter(nchsync = 32)
+!     numrecs has changed (x'40')
+      parameter(ncndirty = 64)  
+!     header info has changed (x'80')
+      parameter(nchdirty = 128)
+!     prefill vars on endef and increase of record, the default behavior
+      parameter(ncfill = 0)
+!     do not fill vars on endef and increase of record (x'100')
+      parameter(ncnofill = 256)
+!     isa link (x'8000')
+      parameter(nclink = 32768)
+
+!     
+!     'mode' arguments for nccreate and ncopen
+!     
+      parameter(ncnowrit = 0)
+      parameter(ncwrite = ncrdwr)
+      parameter(ncclob = nf_clobber)
+      parameter(ncnoclob = nf_noclobber)
+
+!     
+!     'size' argument to ncdimdef for an unlimited dimension
+!     
+      integer ncunlim
+      parameter(ncunlim = 0)
+
+!     
+!     attribute id to put/get a global attribute
+!     
+      parameter(ncglobal  = 0)
+
+!     
+!     advisory maximums:
+!     
+      parameter(maxncop = 32)
+      parameter(maxncdim = 100)
+      parameter(maxncatt = 2000)
+      parameter(maxncvar = 2000)
+!     not enforced 
+      parameter(maxncnam = 128)
+      parameter(maxvdims = maxncdim)
+
+!     
+!     global netcdf error status variable
+!     initialized in error.c
+!     
+
+!     no error 
+      parameter(ncnoerr = nf_noerr)
+!     not a netcdf id 
+      parameter(ncebadid = nf_ebadid)
+!     too many netcdfs open 
+      parameter(ncenfile = -31)   ! nc_syserr
+!     netcdf file exists && ncnoclob
+      parameter(nceexist = nf_eexist)
+!     invalid argument 
+      parameter(nceinval = nf_einval)
+!     write to read only 
+      parameter(nceperm = nf_eperm)
+!     operation not allowed in data mode 
+      parameter(ncenotin = nf_enotindefine )   
+!     operation not allowed in define mode 
+      parameter(nceindef = nf_eindefine)   
+!     coordinates out of domain 
+      parameter(ncecoord = nf_einvalcoords)
+!     maxncdims exceeded 
+      parameter(ncemaxds = nf_emaxdims)
+!     string match to name in use 
+      parameter(ncename = nf_enameinuse)   
+!     attribute not found 
+      parameter(ncenoatt = nf_enotatt)
+!     maxncattrs exceeded 
+      parameter(ncemaxat = nf_emaxatts)
+!     not a netcdf data type 
+      parameter(ncebadty = nf_ebadtype)
+!     invalid dimension id 
+      parameter(ncebadd = nf_ebaddim)
+!     ncunlimited in the wrong index 
+      parameter(nceunlim = nf_eunlimpos)
+!     maxncvars exceeded 
+      parameter(ncemaxvs = nf_emaxvars)
+!     variable not found 
+      parameter(ncenotvr = nf_enotvar)
+!     action prohibited on ncglobal varid 
+      parameter(nceglob = nf_eglobal)
+!     not a netcdf file 
+      parameter(ncenotnc = nf_enotnc)
+      parameter(ncests = nf_ests)
+      parameter (ncentool = nf_emaxname) 
+      parameter(ncfoobar = 32)
+      parameter(ncsyserr = -31)
+
+!     
+!     global options variable. used to determine behavior of error handler.
+!     initialized in lerror.c
+!     
+      parameter(ncfatal = 1)
+      parameter(ncverbos = 2)
+
+!
+!     default fill values.  these must be the same as in the c interface.
+!
+      integer filbyte
+      integer filchar
+      integer filshort
+      integer fillong
+      real filfloat
+      doubleprecision fildoub
+
+      parameter (filbyte = -127)
+      parameter (filchar = 0)
+      parameter (filshort = -32767)
+      parameter (fillong = -2147483647)
+      parameter (filfloat = 9.9692099683868690e+36)
+      parameter (fildoub = 9.9692099683868690e+36)
+
+      N=1   ! put startup fields on plane 1 
+      NM1=2 ! the other field
+      pi = 4.0*atan(1.0)
+      dx = Lx/float(nx)
+      dz = Lz/float(nz)
+      time_scale = Lz/U0
+
+      if( num_dims .eq. 2 ) then
+       dy = 1
+       jj=1   ! j index for writing out rho_bar
+      elseif( num_dims .eq. 3 ) then
+       dy = Ly/float(ny)
+       jj=nyplanes/2   ! j index for writing out rho_bar
+      endif
+
+c     Will write out rho_bar(z) at Lx/2,Ly/2
+      ii=nx/2
+      if(myid.eq.0) open(1,file='output/rho_bar')
+
+       do k=1,locnz+1
+        kglobal = k + myid*locnz
+        zpos=(kglobal-1.)*dz/Lz     ! use dimensionless values here
+        do j=1,nyplanes
+         do i=1,nx
+           xpos=(i-1.)*dx/Lz
+           ypos=(j-1.)*dy/Lz
+
+          call s1_bar_func(xpos,ypos,zpos,s1_bar,
+     *                     junk,junk,junk,junk,
+     *                     Lz,s1_scale)
+          call s2_bar_func(xpos,ypos,zpos,s2_bar,
+     *                     junk,junk,junk,junk,
+     *                     Lz,s2_scale)
+          if( scalars .eq. 'TS' ) then
+           Temperature = (s1_bar*s1_scale)       ! [deg C]
+           Salinity = (s2_bar*s2_scale)   ! [psu]
+           Salinity=Salinity/1000.     ! fortran routine rho uses concentration units
+           pmPa=0.d0
+           call rho(Salinity,Temperature,pMpa,density)
+           rho_bar = (sngl(density) - rho_0)   ! [kg/m3]
+           ambient_density(i, j, k) = rho_bar/(Lz*DGRAD)   ! store dimensionless values
+          elseif( scalars .eq. 'TP' .or. scalars .eq. 'T0' ) then
+           Temperature = (s1_bar*s1_scale)       ! [deg C]
+           Salinity = 0.  ! [psu]
+           pmPa=0.d0
+           call rho(Salinity,Temperature,pMpa,density)
+           rho_bar = (sngl(density) - rho_0)   ! [kg/m3]
+           ambient_density(i, j, k) = rho_bar/(Lz*DGRAD)   ! store dimensionless values
+          elseif( scalars .eq. 'SP' .or. scalars .eq. 'S0' ) then
+           Temperature = 0.       ! [deg C]
+           Salinity = (s2_bar*s2_scale)   ! [psu]
+           Salinity=Salinity/1000.     ! fortran routine rho uses concentration units
+           pmPa=0.d0
+           call rho(Salinity,Temperature,pMpa,density)
+           rho_bar = (sngl(density) - rho_0)   ! [kg/m3]
+           ambient_density(i, j, k) = rho_bar/(Lz*DGRAD)   ! store dimensionless values
+          elseif( scalars .eq. 'RP' .or. scalars .eq. 'R0' ) then
+           ambient_density(i, j, k) = s1_bar/s1_scale      ! store dimensionless values
+          elseif( scalars .eq. 'PP' ) then
+           ambient_density(i, j, k) = 0.0                  ! store dimensionless values
+          endif
+
+          if(myid.eq.0 .and. i.eq.ii .and. j.eq.jj) write(1,*) zpos*Lz,rho_bar
+         enddo
+        enddo
+       enddo
+       if(myid.eq.0) close(10)
+       call MPI_BARRIER(comm,ierr)   ! all processors loop and compute but only writes file
+ 
+
+      if( netcdf_file .eq. 'none' .or. netcdf_file .eq. 'NONE' ) then
+       do k=1,locnz+1
+        kglobal = k + myid*locnz
+        zpos=(kglobal-1.)*dz     ![m]
+
+        do j=1,nyplanes
+         do i=1,nx
+      
+          xpos=(i-1.)*dx
+          ypos=(j-1.)*dy
+
+          call user_defined_ics(xpos,ypos,zpos,Lx,Ly,Lz,
+     *         u(i,j,k),v(i,j,k),w(i,j,k),s1(i,j,k),s2(i,j,k) )
+
+         enddo
+        enddo
+       enddo
+ 
+      else  ! we will read ICS from an existing netcdf file
+c     for example, to read ICs from a netcdf file generated via GMwaves.x
+
+c      define size of data blocks for reading from netcdf file 
+       jstart(1)=1
+       jstart(2)=1
+       jstart(3)=(myid*locnz)+1
+       jstart(4)=1
+       icount(1)=nx
+       data_dims(1)=nx
+       icount(2)=nyplanes 
+       data_dims(2)=nyplanes 
+       if( myid .eq. numprocs-1 .and. bc_flag .eq. 'zslip') then  
+        icount(3)=locnz+1
+        data_dims(3)=numprocs*locnz+1
+       else
+        icount(3)=locnz
+        data_dims(3)=numprocs*locnz
+       endif
+       icount(4)=1
+       data_dims(4)=1
+
+c      ACCESS THE FILE SEQUENTIALLY ACROSS PROCESSORS
+
+       DO IWRITE=0,NUMPROCS-1
+        IF( MYID .NE. IWRITE ) GOTO 999    ! wait for IWRITE to finish w/ file
+
+       write(0,*) 'Processor ',myid,' accessing ICs file ',netcdf_file
+c      processor IWRITE opens the specified file
+       rcode=NF_OPEN(netcdf_file,NF_NOWRITE,ncid)
+
+c      read in the dimensional values from the file
+       do i=0, 4
+        rcode=NF_INQ_DIMLEN(ncid, i, dim_length)
+        if(dim_length .ne. data_dims(i)) then
+         write (0,*) "dimensional values from the file are inconsistant
+     * with global dimensions of the problem given."
+         exit
+        endif
+       enddo
+
+c      U
+       rcode=NF_INQ_VARID(ncid,'uVar',var_id)
+       rcode=NF_GET_VARA_REAL(ncid,var_id,jstart,icount,temp)
+       do k=1,icount(3)
+        do j=1,nyplanes
+         do i=1,nx
+          u(i,j,k)=temp(i,j,k)
+         enddo
+        enddo
+       enddo
+
+c      V
+       rcode=NF_INQ_VARID(ncid,'vVar',var_id)
+       rcode=NF_GET_VARA_REAL(ncid,var_id,jstart,icount,temp)
+        do k=1,icount(3)
+         do j=1,nyplanes
+          do i=1,nx
+           v(i,j,k)=temp(i,j,k)
+          enddo
+         enddo
+        enddo
+
+c      W
+       rcode=NF_INQ_VARID(ncid,'wVar',var_id)
+       rcode=NF_GET_VARA_REAL(ncid,var_id,jstart,icount,temp)
+       do k=1,icount(3)
+        do j=1,nyplanes
+         do i=1,nx
+          w(i,j,k)=temp(i,j,k)
+         enddo
+        enddo
+       enddo
+
+
+c      s1
+       rcode=NF_INQ_VARID(ncid,'s1Var',var_id)
+       rcode=NF_GET_VARA_REAL(ncid,var_id,jstart,icount,temp)
+
+       do k=1,icount(3)      
+        kglobal = k + myid*locnz
+        zpos=(kglobal-1.)*dz/Lz     ![dless]
+        do j=1,nyplanes 
+         ypos=(j-1.)*dy/Lz
+         do i=1,nx
+          xpos=(i-1.)*dx/Lz
+          call s1_bar_func(xpos,ypos,zpos,s1_bar,junk,junk,junk,junk,Lz,s1_scale)
+          s1(i,j,k) = temp(i,j,k) - s1_bar*(s1_scale)
+         enddo
+        enddo
+       enddo 
+
+c      s2
+       rcode=NF_INQ_VARID(ncid,'s2Var',var_id)
+       rcode=NF_GET_VARA_REAL(ncid,var_id,jstart,icount,temp)
+       do k=1,icount(3)      
+        kglobal = k + myid*locnz
+        zpos=(kglobal-1.)*dz/Lz     ![dless]
+        do j=1,nyplanes 
+         ypos=(j-1.)*dy/Lz
+         do i=1,nx
+          xpos=(i-1.)*dx/Lz
+          call s2_bar_func(xpos,ypos,zpos,s2_bar,junk,junk,junk,junk,Lz,s2_scale)
+          s2(i,j,k) = temp(i,j,k) - s2_bar*(s2_scale)
+         enddo
+        enddo
+       enddo
+
+       rcode=NF_CLOSE(ncid)
+999    call MPI_BARRIER(comm,ierr)    ! all processes wait here before reading next block
+      ENDDO
+
+      endif  ! end if block for netcdf or user specified ICS
+
+c     write out parameters characterizing simulation
+c
+      if( myid .eq. 0 ) then
+       write(6,*) ' Number of dimensions:  ',num_dims
+       write(6,*) ' nx, ny, nz : ',nx,ny,nz
+       write(6,*) ' boundary conditions:  ',bc_flag
+       write(6,*) ' '
+       write(6,*) ' '
+       write(6,*) ' domain lengths Lx, Ly, Lz [m]:  ',Lx,Ly,Lz
+       write(6,*) ' grid spacings dx, dy, dz [m]:  ',dx,dy,dz
+       write(6,*) ' bulk velocity scale U [m/s]:  ',U0
+       write(6,*) ' characteristic density gradient scale [kg/m4]:  ',DGRAD
+       write(6,*) ' characteristic range of scalar 1 [e.g. deg C]  ',s1_scale
+       write(6,*) ' characteristic range of scalar 2 [e.g. psu]  ',s2_scale
+       write(6,*) 
+     &   ' characteristic density of Boussinesq fluid [kg/m3]:  ',rho_0
+       write(6,*) ' coriolis parameter f [1/s]:  ',f
+       write(6,*) ' gravitational acceleration g [m/s2]:  ',g
+       write(6,*) ' molecular diffusivity of scalar 1 [m2/s]:  ',kappa_1
+       write(6,*) ' molecular diffusivity of scalar 2 [m2/s]:  ',kappa_2
+       write(6,*) ' viscosity [m2/s]:  ',nu
+c      write(6,*) ' minimum BV period [s]:  ',per_min
+c      write(6,*) ' CFL_x = Umax dt/dx:  ', UMAX*dt/dx
+c      write(6,*) ' CFL_y = Vmax dt/dy:  ', VMAX*dt/dy
+c      write(6,*) ' CFL_z = Wmax dt/dz:  ', WMAX*dt/dz
+
+c     nondimensionalize the initial fields, the stratification parameters 
+c     and time variables
+       write(6,*) ' time step dt [s]    :  ',dt
+       write(6,*) ' initial time  [s]   :  ',t_start
+       write(6,*) ' final time    [s]   :  ',t_end
+       write(6,*) ' Lz/U0        [s]    :  ',time_scale
+      endif
+
+      istart = 0
+      iend = ( t_end - t_start ) / dt
+      i_selective = t_write_selective/dt
+      i_stat = t_stat/dt
+
+      dt = dt/time_scale
+      t_start = t_start/time_scale
+      t_end = t_end/time_scale
+      t_write_selective = t_write_selective/time_scale
+      t_stat = t_stat/time_scale
+
+      if( myid .eq. 0 ) then
+       write(6,*) ' '
+       write(6,*) ' time variables initialized via problem_parameters.h'
+       write(6,*) ' non-dimensionalized in initilize.f'
+      endif
+      
+      if( myid .eq. 0 ) then
+       write(6,*) ' '
+       write(6,*) ' time increment counters set'
+       write(6,*) ' number of steps:  ',iend-istart+1
+       write(6,*) ' number of steps between energetics calculations:  ',i_stat
+       write(6,*) ' number of steps between full writes:  ',i_all
+       write(6,*) ' number of steps between selective writes:  ',i_selective
+      endif
+      
+      do i=0,numprocs-1
+       if( myid .eq. i .and. myid .lt. numprocs-1 ) then
+
+        open(1,file='output/u_profile',status='unknown',
+     &       position='append')  ! f90 syntax
+
+        do k=1,locnz
+         write(1,*) 0.,0.,(k-1+myid*locnz)*dz,u(1,1,k)
+        enddo
+        close(1)
+       elseif( myid .eq. i .and. myid .eq. numprocs-1 ) then
+
+        open(1,file='output/u_profile',status='unknown',
+     &       position='append')   ! f90 syntax
+
+c '
+       do k=1,locnz+1
+         write(1,*) 0.,0.,(k-1+myid*locnz)*dz,u(1,1,k)
+        enddo
+        close(1)
+        endif
+         call MPI_BARRIER(comm,ierr)
+        enddo
+      
+c     Nondimensionalize dependent variables:
+      do k=1,locnz+1
+       do j=1,nyplanes
+        do i=1,nx
+         u(i,j,k) = u(i,j,k)/U0
+         v(i,j,k) = v(i,j,k)/U0
+         w(i,j,k) = w(i,j,k)/U0
+         s1(i,j,k) = s1(i,j,k)/(s1_scale)
+         s2(i,j,k) = s2(i,j,k)/(s2_scale)
+        enddo
+       enddo
+      enddo
+
+      if( myid .eq. 0 ) then
+       write(6,*) ' '
+       write(6,*) 'dependent variables non-dimensionalized'
+      endif
+      
+c     compute the dimensionless parameters
+      Rot= f*Lz/U0
+      N2 = (g/rho_0)*DGRAD
+      Ri = N2*Lz**2/(U0**2)
+      Re = U0*Lz/nu
+      Pr_1 = nu/kappa_1
+      Pr_2 = nu/kappa_2
+      
+      if( myid .eq. 0 ) then
+       write(6,*) ' '
+       write(6,*) ' '
+       write(6,*) ' inverse Rossby number fL/U:  ',Rot
+       write(6,*) ' bulk Richardson number (NL/U)^2 : ',Ri
+       write(6,*) ' bulk Reynolds number UL/nu:  ',Re
+       write(6,*) ' Prandtl number  nu/kappa_1:  ',Pr_1
+       write(6,*) ' Prandtl number  nu/kappa_2:  ',Pr_2
+       write(6,*) ' '
+       write(6,*) ' '
+      endif
+
+c
+c     set up dimensionless wavenumber vectors, 
+c     N.B. for fill_wave_vectors, input length & time scales, 
+c     including wavenumber truncation radius,
+c     are dimensionless quantities, scaled by vertical domain size Lz & U0
+c
+      call fill_wave_vectors (wnx, wny, wnz, nx, ny, nz, Lx/Lz, Ly/Lz, amp,
+     *                        dt, Re, Pr_1, Pr_2, p,T_diss/time_scale,diss_flag,num_dims,bc_flag,
+     *                        myid, numprocs, locnx)
+     
+      if( myid .eq. 0 ) then
+       write(6,*) ' '
+       write(6,*) ' dimensionless wavenumber vectors and '
+       write(6,*) ' integrating factors initialized'
+       write(6,*) ' '
+      
+       write(6,*) 'TRANSFORMING DIMENSIONLESS INITIAL CONDITIONS P-->S'
+      endif
+
+c
+c     take the 3d transforms of the dimensionless, physical space ICS
+c
+	iswitch = +1   ! Forward transforms: physical to wavenumber domain
+	itrig = 1      ! compute & return trig tables with first call
+                       ! to transform3d
+	
+C
+C     set tswitch to indicate type of z transform, and transform u & v & s1
+C
+      if( bc_flag .eq. 'zperiodic' ) then
+       tswitch='f'  ! indicating fourier in xy, fourier in z
+      elseif( bc_flag .eq. 'zslip' ) then
+       tswitch = 'c'   ! free slip, du/dz=dv/dz=ds1d/dz=0 at top & bottom
+      endif
+      
+      call transform3d (u,u_cplx(1,1,1,N),nx,ny,nz,iswitch,tswitch,itrig,
+     *                   trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                   num_dims,work,scratch,xt,myid,numprocs,locnx,locnz,
+     *                   comm,twoslice,subslice)
+     
+      if( myid .eq. 0 ) then
+       write(6,*) ' u transformed to wavenumber domain: ', tswitch,iswitch,itrig
+      endif
+     
+      itrig = 0      ! trig tables now computed and stored
+      
+      call transform3d (v,v_cplx(1,1,1,N),nx,ny,nz,iswitch,tswitch,itrig,
+     *                   trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                   num_dims,work,scratch,xt,myid,numprocs,locnx,locnz,
+     *                   comm,twoslice,subslice)
+      if( myid .eq. 0 ) then
+       write(6,*) ' v transformed to wavenumber domain: ', tswitch,iswitch,itrig
+      endif
+     
+      if( bc_flag .eq. 'zperiodic' ) then
+       tswitch='f'
+      elseif( bc_flag .eq. 'zslip' ) then
+       tswitch = 's'  
+      endif
+      
+      call transform3d (s1,s1_cplx(1,1,1,N),nx,ny,nz,iswitch,tswitch,itrig,
+     *                   trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                   num_dims,work,scratch,xt,myid,numprocs,locnx,locnz,
+     *                   comm,twoslice,subslice)
+      if( myid .eq. 0 ) then
+       write(6,*) ' s1 transformed to wavenumber domain: ', tswitch,iswitch,itrig
+      endif
+      
+      if( bc_flag .eq. 'zperiodic' ) then
+       tswitch='f'
+      elseif( bc_flag .eq. 'zslip' ) then
+       tswitch = 's'  
+      endif
+      
+      call transform3d (s2,s2_cplx(1,1,1,N),nx,ny,nz,iswitch,tswitch,itrig,
+     *                   trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                   num_dims,work,scratch,xt,myid,numprocs,locnx,locnz,
+     *                   comm,twoslice,subslice)
+      if( myid .eq. 0 ) then
+       write(6,*) ' s2 transformed to wavenumber domain: ', tswitch,iswitch,itrig
+      endif
+      
+C
+C     set tswitch to indicate type of z transform, and transform u & v & s1 
+C
+      if( bc_flag .eq. 'zperiodic' ) then
+       tswitch='f'
+      elseif( bc_flag .eq. 'zslip' ) then
+       tswitch = 's'   ! w=0 at top & bottom
+      endif
+      
+       call transform3d (w,w_cplx(1,1,1,N),nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,work,scratch,xt,myid,numprocs,locnx,locnz,
+     *                  comm,twoslice,subslice)
+
+      if( myid .eq. 0 ) then
+       write(6,*) ' w transformed to wavenumber domain: ', tswitch,iswitch,itrig
+      endif
+     
+      if( efactor .gt. 0 ) then
+       call add_noise(u_cplx,v_cplx,efactor,nx,ny,nz,num_dims,
+     *                wnx,wny,wnz,N,NM1,myid,numprocs,locnx,comm)
+      endif
+
+c
+c     Initialize forcing wavenumber array, to be called later in
+c
+      if( force_flag .eq. 'yesFourier' ) then      
+c        if( myid .eq. 0 ) then
+c         write(6,*) ''
+c         write(6,*) 'Initializing Fourier forcing  '
+c         write(6,*) ''
+c        endif
+        call initialize_user_fforcing (force_cplx,wnx,wny,wnz,f,g,rho_0,DGRAD,Rot,U0,
+     *                                    nx,ny,nyplanes,nz,locnx,Lx,Ly,Lz,
+     *                                    locnz,myid,numprocs,num_dims,ifax,ifay,ifaz,
+     *                                    wn,comm,twoslice,subslice,trigx,trigy,trigz,
+     *                                    work_P,scratch,bc_flag,work)
+      endif
+
+c
+c     initialize array pointers and time step method
+c
+      N=1
+      NM1=2
+      M=1
+      MM1=2
+      MM2=3
+      step_flag='euler'   ! startup method, no previous information known
+
+      call MPI_BARRIER(comm,ierr)
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/ifft.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/ifft.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/ifft.f	(revision 6)
@@ -0,0 +1,160 @@
+	subroutine ifft(uc,vc,wc,s1c,s2c,vortxc,vortyc,vortzc, 
+     *                  N,nx,ny,nz,trigx,trigy,trigz,ifax,ifay,ifaz,wn,
+     *                  scratch,xt,num_dims,bc_flag,u,v,w,s1,s2,vx,vy,vz,
+     *                  copy,myid,numprocs,locnx,locnz,comm,
+     *                  twoslice,subslice) 
+
+C---------------------------------------------------------------------------
+C
+c   ifft - This FORTRAN subroutine transforms the spectral representations
+c          of u, v, and w velocities, perturbation density, perturbation scalar (1),
+c          and vorticity into physical space using inverse Fourier transforms.  
+c          
+C
+C	input: uc, vc, wc, s1c, s2c(cplx arrays of locnx by ny+1 by nz+1)
+c            - contain the spectral representations of u, v, w, and
+c              pert. density, respectively, stored in locations (:,:,:,N) 
+
+C	       vortxc, vortyc, vortzc (cplx arrays of locnx by ny+1 by nz+1)
+c            - contain the spectral representations of the i, j, k
+c              components of vorticity
+c              locnx (integer) number of complex x wavenumber locations
+c              stored on each processor 
+C	       nx, ny, nz (integers) - size of physical space data
+C	       trigx, trigy, trigz (real arrays of 3*(nx+2)/2, 2*(ny+1),
+c              and 2*nz, respectively) - contain the trig tables
+c              required by the Temperton FFT package 
+c              ifax, ifay, ifaz (integer arrays of 13) - contain the
+C	       factorization tables used by the Temperton package
+C	       wn (complex array of nz/4+1) - contain complex exponential
+c              tables needed for inverse sine/cosine transforms
+C	       xt (complex nx+2, nz/2+1) - temp arrays used in inverse
+c              sine/cosine transforms
+C	       scratch- temp array required by Temperton FFT package
+c              num_dims  number of spatial dimensions 2(x-z) or 3(x,y,z)
+c              bc_flag  character string defining z polarity: 
+c              'zperiodic' or 'zslip'
+c               for triply periodic or fourier in x/y free-slip in z bcs
+C
+c      output: u, v, w, s1, s2 - contain physical space representations of
+c              of u, v, w, perturbation density, and perturbation scalar (1)
+c              N.B. spectral representations untouched in uc,vc etc
+c              vx, vy, vz 
+c              contain the physical space i, j, k components
+C	       of vorticity, respectively
+c              N.B. the spectral representations are overwritten 
+c              by the Inv. transforms
+c----------------------------------------------------------------------------
+	
+        implicit none
+        integer i,j,k,myid,numprocs,locnx,locnz
+        integer comm,twoslice,subslice
+	integer N,nx,ny,nz,num_dims,nyplanes,itrig,iswitch
+	character*80 bc_flag
+        complex uc(locnx,ny+1,nz+1,2),vc(locnx,ny+1,nz+1,2)
+	complex wc(locnx,ny+1,nz+1,2),s1c(locnx,ny+1,nz+1,2)
+	complex s2c(locnx,ny+1,nz+1,2)
+	real u(nx+2,ny+1,locnz+1),v(nx+2,ny+1,locnz+1)
+	real w(nx+2,ny+1,locnz+1),s1(nx+2,ny+1,locnz+1)
+	real s2(nx+2,ny+1,locnz+1)
+	complex vortxc(locnx,ny+1,nz+1),vortyc(locnx,ny+1,nz+1)
+	complex vortzc(locnx,ny+1,nz+1)
+	complex copy(locnx,ny+1,nz+1)
+	real vx(nx+2,ny+1,locnz+1),vy(nx+2,ny+1,locnz+1)
+	real vz(nx+2,ny+1,locnz+1)
+	real trigx(3*(nx+2)/2+1), trigy(2*(ny+1)), trigz(2*nz)
+	complex wn(nz/4+1)
+	real scratch(1) 
+        complex xt(nx+2, nz/2+1)
+	integer ifax(13), ifay(13), ifaz(13)
+	character*1 tswitch
+
+ 
+c       Determine number of y planes to work with
+ 
+        if( num_dims .eq. 2 ) then
+         nyplanes=1
+        elseif( num_dims .eq. 3 ) then
+         nyplanes=ny
+        endif
+
+c       Set FFT flags
+ 
+	iswitch = -1    ! inverse transforms
+	itrig = 0       ! trig tables previously computed 
+
+c     Set tswitch to indicate type of z transform, 
+c     and inverse transform u & v & vortz
+ 
+      if( bc_flag .eq. 'zperiodic' ) then
+       tswitch='f'
+      elseif( bc_flag .eq. 'zslip' ) then
+       tswitch = 'c'   ! free slip, du/dz=dv/dz=0 at top & bottom
+      endif
+      
+      call transform3d (u,uc(1,1,1,N),nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,scratch,copy,xt,myid,numprocs,locnx,locnz,
+     *                  comm,twoslice,subslice)
+     
+      call transform3d (v,vc(1,1,1,N),nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,scratch,copy,xt,myid,numprocs,locnx,locnz,
+     *                  comm,twoslice,subslice)
+     
+      call transform3d (vz,vortzc,nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,scratch,copy,xt,myid,numprocs,locnx,locnz,
+     *                  comm,twoslice,subslice)
+     
+c     Set tswitch to indicate type of z transform, 
+c     and inverse transform s1, s2
+ 
+      if( bc_flag .eq. 'zperiodic' ) then
+       tswitch='f'
+      elseif( bc_flag .eq. 'zslip' ) then
+       tswitch = 's'   ! s1=0 at top & bottom
+      endif
+      
+      call transform3d (s1,s1c(1,1,1,N),nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,scratch,copy,xt,myid,numprocs,locnx,locnz,
+     *                  comm,twoslice,subslice)
+
+      if( bc_flag .eq. 'zperiodic' ) then
+       tswitch='f'
+      elseif( bc_flag .eq. 'zslip' ) then
+       tswitch = 's'   ! s1=0 at top & bottom
+      endif
+      
+      call transform3d (s2,s2c(1,1,1,N),nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,scratch,copy,xt,myid,numprocs,locnx,locnz,
+     *                  comm,twoslice,subslice)
+
+c     set tswitch to indicate type of z transform, 
+c     and inverse transform w & vortx & vorty
+ 
+      if( bc_flag .eq. 'zperiodic' ) then
+       tswitch='f'
+      elseif( bc_flag .eq. 'zslip' ) then
+       tswitch = 's'   ! free slip, w=0 at top & bottom
+      endif
+      
+      call transform3d (w,wc(1,1,1,N),nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,scratch,copy,xt,myid,numprocs,locnx,locnz,
+     *                  comm,twoslice,subslice)
+     
+      call transform3d (vx,vortxc,nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,scratch,copy,xt,myid,numprocs,locnx,locnz,
+     *                  comm,twoslice,subslice)
+     
+      call transform3d (vy,vortyc,nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,scratch,copy,xt,myid,numprocs,locnx,locnz,
+     *                  comm,twoslice,subslice)
+     
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/init_netcdf.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/init_netcdf.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/init_netcdf.f	(revision 6)
@@ -0,0 +1,474 @@
+      subroutine init_netcdf(start3D,count3D,scalars,nx,ny,nyplanes,nz,locnz,istep,Lx,Ly,Lz,DGRAD,
+     *            bc_flag,vort_flag,time_val,scratch,myid,numprocs,rootname)
+
+      implicit none
+#include "netcdf.inc"
+#include "mpif.h"
+
+      character*80 bc_flag,filename
+      character*2 scalars
+      character*6 cnum
+      character*3 cid,vort_flag
+      character*32 rootname
+      integer nx,ny,nz,locnz,b1,nyplanes,nycount
+      integer i,j,k,istep,ntimes
+      integer ncid,rcode,myid,numprocs
+      real Lx,Ly,Lz,time_val,scratch(nx*nz)
+      real x,y,z,dx,dy,dz,DGRAD
+
+C Dimensions and dimension variables
+      integer iid,jid,kid,timeid   ! Dimension ids 
+   
+C 1D (x,y,z and time) Variables 
+      integer xVarID,yVarID,zVarID,tVarID,s1VarID,s2VarID    ! x,y,z and time variable ids
+      integer vort_xVarID,vort_yVarID,vort_zVarID
+      integer start1D(1),count1D(1)  ! 1D arrays defining shape of 1D variable
+
+C 4D Variables
+      integer rhoVarID,uVarID,vVarID,wVarID,pVarID
+      integer All4DVarSIZE(4)     ! 4D array containing variables size
+      integer start3D(3),count3D(3)
+
+      integer dim_count
+      character c_dim_count
+      
+      integer data_start, data_stop, data_count, slice_start, slice_stop
+      integer counter
+
+      character*72 s1_name, s2_name, s1_units, s2_units
+      integer s1_name_len, s2_name_len, s1_units_len, s2_units_len
+c*****************************************************************************
+
+c determine number of y planes
+      if( ny .eq. 0 ) then
+       nycount=1
+      else
+       nycount=count3D(2)
+      endif
+
+
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+c brens code for figuring out where data reporting begins and ends 
+c with respect to the current data slice in the z direction.
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+c determine number of z grid points
+      data_start = start3D(3)
+      data_stop = start3D(3) + count3D(3) - 1
+      
+      slice_start = myid * locnz + 1
+      slice_stop = ((myid + 1) * locnz)
+
+      if(bc_flag .eq. 'zslip' .and. myid .eq. numprocs-1) slice_stop = slice_stop + 1
+
+c	cases: "Excluded above" and "Excluded below". No data to be printed
+c	from this slice.
+      if((data_start .gt. slice_stop) .or. (data_stop .lt. slice_start))
+     &  then
+        return
+      endif
+
+      if(data_start .ge. slice_start) then
+
+c	case: "contained within"
+        if(data_stop .le. slice_stop) then
+c	  do nothing in this case. data_start and data_stop are already
+c	  exactly what they should be.
+
+c	case: "start inside"
+        else
+          data_stop = slice_stop
+        endif
+      else
+
+c	case: "ends inside"
+        if(data_stop .le. slice_stop) then
+          data_start = slice_start
+
+c	case: "includes"
+        else
+          data_start = slice_start
+          data_stop = slice_stop
+        endif
+      endif
+
+      data_count = data_stop - (data_start - 1)
+
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+
+
+C each 3D file will contain 1 time slice
+        ntimes=1
+      
+        dim_count  =  0
+        do i = 1, 3
+            if(count3D(i) .gt. 1) then
+                dim_count = dim_count + 1
+            endif
+        enddo
+
+c       Create the filename
+        write(unit = cnum, fmt = 100) istep
+100         format(I6.6)
+        write(unit = cid, fmt = 101) myid
+101         format(I3.3)
+        write(unit = c_dim_count, fmt = 102) dim_count
+102         format(I1.1)
+
+        counter = 0
+        do i = 1, 32
+          if(rootname(i:i) .eq. ' ')then
+            exit
+          endif
+            counter = counter + 1
+        enddo
+
+        if(numprocs .gt. 1) then
+            filename = 'output/'//c_dim_count//'D/'//rootname(1:counter)
+     &                 //'_'//cnum//'_'//cid
+        else
+            filename = 'output/'//c_dim_count//'D/'//rootname(1:counter)
+     &                 //'_'//cnum
+        endif
+
+C Open a netcdf file
+c      if(myid==0) write(0,*) ' creating 3d netcdf file '
+       rcode=NF_CREATE(filename,NF_NOCLOBBER,ncid)
+       if(rcode.ne.NF_NOERR) print *,myid,'ERROR OPENING NETCDF FILE'
+
+C Dimensions Definition
+       rcode=NF_DEF_DIM(ncid,'idimension',count3D(1),iid)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_DEF_DIM: idimension', rcode
+       rcode=NF_DEF_DIM(ncid,'jdimension',nycount,jid)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_DEF_DIM: jdimension', rcode
+       rcode=NF_DEF_DIM(ncid,'kdimension',data_count,kid)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_DEF_DIM: kdimension', rcode
+       rcode=NF_DEF_DIM(ncid,'timedimension',NF_UNLIMITED,timeid)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_DEF_DIM: timedimension', rcode
+
+
+C Define x,y,z grid position  and time variables
+
+c**time*****
+      rcode=NF_DEF_VAR(ncid,'tVar',NF_FLOAT,1,timeid,tVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_DEF_VAR: tVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,tVarID,'long_name',4,'time')
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: tVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,tVarID,'units',7,'seconds')
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: tVar', rcode
+
+c**X*****
+      rcode=NF_DEF_VAR(ncid,'xVar',NF_FLOAT,1,iid,xVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_DEF_VAR: xVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,xVarID,'long_name',1,'x')
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: xVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,xVarID,'units',1,'m')
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: xVar', rcode
+
+c**Y*****
+      rcode=NF_DEF_VAR(ncid,'yVar',NF_FLOAT,1,jid,yVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_DEF_VAR: yVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,yVarID,'long_name',1,'y')
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: yVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,yVarID,'units',1,'m')
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: yVar', rcode
+
+c**Z*****
+      rcode=NF_DEF_VAR(ncid,'zVar',NF_FLOAT,1,kid,zVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_DEF_VAR: zVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,zVarID,'long_name',1,'z')
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: zVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,zVarID,'units',1,'m')
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: zVar', rcode
+     
+     
+CCC
+C Define 4D variables
+CCC
+
+c     Initialize size arrays for time varying variables
+      All4DVarSIZE(1) = iid
+      All4DVarSIZE(2) = jid
+      All4DVarSIZE(3) = kid    ! LOCAL
+      All4DVarSIZE(4) = timeid ! 1 slice
+
+
+c     Set the appropriate labels for s1 and s2.
+      if(scalars .eq. 'TS') then
+        s1_name = 'Temperature'
+        s1_name_len = 11
+        s1_units = 'Deg C'
+        s1_units_len = 5
+
+        s2_name = 'Salinity'
+        s2_name_len = 8
+        s2_units = 'PSU'
+        s2_units_len = 3
+      elseif(scalars .eq. 'TP') then
+        s1_name = 'Temperature'
+        s1_name_len = 11
+        s1_units = 'Deg C'
+        s1_units_len = 5
+
+        s2_name = 'Passive Tracer'
+        s2_name_len = 14
+        s2_units = 'Concentration'
+        s2_units_len = 13
+      elseif(scalars .eq. 'SP') then
+        s1_name = 'Salinity'
+        s1_name_len = 8
+        s1_units = 'PSU'
+        s1_units_len = 8
+
+        s2_name = 'Passive Tracer'
+        s2_name_len = 14
+        s2_units = 'Concentration'
+        s2_units_len = 13
+      elseif(scalars .eq. 'RP') then
+        s1_name = 'Perturbation Density'
+        s1_name_len = 19
+        s1_units = 'Kg/m**3'
+        s1_units_len = 7
+
+        s2_name = 'Passive Tracer'
+        s2_name_len = 14
+        s2_units = 'Concentration'
+        s2_units_len = 13
+      elseif(scalars .eq. 'PP') then
+        s1_name = 'Passive Tracer'
+        s1_name_len = 14
+        s1_units = 'Concentration'
+        s1_units_len = 13 
+
+        s2_name = 'Passive Tracer'
+        s2_name_len = 14
+        s2_units = 'Concentration'
+        s2_units_len = 13
+      else
+        print *, "scalars value is not set properly: scalars -> ", scalars
+        stop
+      endif
+
+CCC
+C scalar (1)
+CCC
+      rcode=NF_DEF_VAR(ncid,'s1Var',NF_FLOAT,4,All4DVarSIZE,s1VarID)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_DEF_VAR: s1Var', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,s1VarID,'long_name',s1_name_len,s1_name)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: s1Var', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,s1VarID,'units',s1_units_len,s1_units)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: s1Var', rcode
+
+
+CCC
+C scalar (2)
+CCC
+      rcode=NF_DEF_VAR(ncid,'s2Var',NF_FLOAT,4,All4DVarSIZE,s2VarID)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_DEF_VAR: s2Var', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,s2VarID,'long_name',s2_name_len,
+     &                      s2_name)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: s2Var', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,s2VarID,'units',s2_units_len,s2_units)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: s2Var', rcode
+
+CCC
+C x velocity = uVar
+CCC
+      rcode=NF_DEF_VAR(ncid,'uVar',NF_FLOAT,4,All4DVarSIZE,uVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_DEF_VAR: uVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,uVarID,'long_name',1,'u')
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: uVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,uVarID,'units',3,'m/s')
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: uVar', rcode
+     
+CCC
+C y velocity = vVar
+CCC 
+      rcode=NF_DEF_VAR(ncid,'vVar',NF_FLOAT,4,All4DVarSIZE,vVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_DEF_VAR: vVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,vVarID,'long_name',1,'v')
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: vVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,vVarID,'units',3,'m/s')
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: vVar', rcode
+    
+CCC
+C z velocity = wVar
+CCC 
+      rcode=NF_DEF_VAR(ncid,'wVar',NF_FLOAT,4,All4DVarSIZE,wVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_DEF_VAR: wVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,wVarID,'long_name',1,'w')
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: wVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,wVarID,'units',3,'m/s')
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: wVar', rcode
+    
+CCC
+C pressure = pVar
+CCC 
+      rcode=NF_DEF_VAR(ncid,'pVar',NF_FLOAT,4,All4DVarSIZE,pVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_DEF_VAR: pVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,pVarID,'long_name',8,'pressure')
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: pVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,pVarID,'units',6,'kg/ms2')
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: pVar', rcode
+    
+      if( vort_flag .eq. 'yes' ) then
+CCC
+C x vorticity = vort_xVar
+CCC 
+      rcode=NF_DEF_VAR(ncid,'vort_xVar',NF_FLOAT,4,All4DVarSIZE,vort_xVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_DEF_VAR: vort_xVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,vort_xVarID,'long_name',11,
+     &                      'x vorticity')
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: vort_xVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,vort_xVarID,'units',3,'1/s')
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: vort_xVar', rcode
+    
+CCC
+C y vorticity = vort_yVar
+CCC 
+      rcode=NF_DEF_VAR(ncid,'vort_yVar',NF_FLOAT,4,All4DVarSIZE,vort_yVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_DEF_VAR: vort_yVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,vort_yVarID,'long_name',11,
+     &                      'y vorticity')
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: vort_yVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,vort_yVarID,'units',3,'1/s')
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: vort_yVar', rcode
+    
+CCC
+C z vorticity = vort_zVar
+CCC 
+      rcode=NF_DEF_VAR(ncid,'vort_zVar',NF_FLOAT,4,All4DVarSIZE,vort_zVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_DEF_VAR: vort_zVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,vort_zVarID,'long_name',11,
+     &                      'z vorticity')
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: vort_zVar', rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,vort_zVarID,'units',3,'1/s')
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &     ': NetCDF Error: NF_PUT_ATT_TEXT: vort_zVar', rcode
+
+      endif  ! end vort_flag = 'yes' logic
+    
+CCC
+C End define mode
+CCC
+      rcode=NF_ENDDEF(ncid)
+      if(rcode.ne.NF_NOERR) print *,myid,'ERROR  LEAVING DEFINE MODE'
+
+
+CCC
+C Write out dimension variable y and other 1d variables to netcdf file
+CCC
+
+c     Put dimension data in netcdf file
+      start1D(1) = 1
+      count1D(1) = 1
+c     if(myid .eq. 0 ) write(0,*) ' time: ',time_val
+      rcode=NF_PUT_VARA_REAL(ncid,tVarID,start1D,count1D,time_val)
+      if(rcode.ne.NF_NOERR) print *,myid,'NetCDF ERROR tVarID: ',rcode
+
+      
+c     store x values in temp array
+      counter = 1
+      dx=Lx/float(nx)    
+      do i = start3D(1), start3D(1) + count3D(1) - 1
+       x=(i-1.)*dx
+       scratch(counter) = x ! [m]
+       counter = counter + 1
+      enddo
+
+c     Put dimension data in netcdf file
+      start1D(1) = 1
+      count1D(1) = count3D(1)
+      rcode=NF_PUT_VARA_REAL(ncid,xVarID,start1D,count1D,scratch)
+      if(rcode.ne.NF_NOERR) print *,myid,'NetCDF ERROR xVarID: ',rcode
+
+c     store y values in temp array
+      counter = 1
+      dy=Ly/float(nyplanes)   
+      do j = start3D(2), start3D(2) + nycount - 1
+       y=(j-1.)*dy
+       scratch(counter) = y ! [m]
+       counter = counter + 1
+      enddo
+
+c     Put dimension data in netcdf file
+      start1D(1) = 1
+      count1D(1) = nycount
+      rcode=NF_PUT_VARA_REAL(ncid,yVarID,start1D,count1D,scratch)
+      if(rcode.ne.NF_NOERR) print *,myid,'NetCDF ERROR yVarID: ',rcode
+        
+c     store z values in temp array
+      dz=Lz/float(nz)
+      counter = 1
+      do k = data_start,data_count + data_start - 1
+       z= k*dz
+       scratch(counter) = z ! [m]
+       counter = counter + 1
+      enddo
+
+c     Put dimension data in netcdf file
+      start1D(1) = 1
+      count1D(1) = data_count
+      rcode=NF_PUT_VARA_REAL(ncid,zVarID,start1D,count1D,scratch)
+      if(rcode.ne.NF_NOERR) print *,myid,'NetCDF ERROR zVarID: ',rcode
+        
+c     store the local portion of the rho_bar values in temp array
+c     do k = 1,kend
+c      scratch(k) = rho_bar(k)*DGRAD*Lz  ! [kg/m3]
+c     enddo
+
+c     Put dimension data in netcdf file
+c     start1D(1) = 1
+c     count1D(1) = kend
+c     rcode=NF_PUT_VARA_REAL(ncid,rho_barVarID,start1D,count1D,scratch)
+c     if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+        
+CCC
+C Close netcdf file
+CCC
+      rcode=NF_CLOSE(ncid)
+      if(rcode.ne.NF_NOERR) print *,myid,'ERROR CLOSING NETCDF FILE'
+        
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/initialize.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/initialize.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/initialize.f	(revision 6)
@@ -0,0 +1,518 @@
+      subroutine initialize(u,v,w,s1,s2,ambient_density,u_cplx,v_cplx,w_cplx,s1_cplx,s2_cplx,
+     *                      nx,ny,nz,num_dims,efactor,
+     *                      Lx,Ly,Lz,dx,dy,dz,U0,DGRAD,s1_scale,s2_scale,rho_0,f,g,kappa_1,kappa_2,nu,
+     *                      bc_flag,ifax,ifay,ifaz,trigx,trigy,trigz,wn,
+     *                      wnx,wny,wnz,amp,p,T_diss,diss_flag,N,NM1,M,MM1,MM2,step_flag,
+     *                      Rot,Ri,Re,Pr_1,Pr_2,istart,iend,i_all,i_selective,i_stat,
+     *                      dt,t_start,t_end,t_write_selective,
+     *                      t_stat,xt,work,scratch,myid,numprocs,locnx,locnz,
+     *                      comm,twoslice,subslice,temp,netcdf_file,nyplanes,
+     *                      force_cplx,force_flag,work_P,scalars)
+     
+c
+c     Routine to set up the initial conditions, scale
+c     all variables (i.e. nondimensionalize variables) and initialize
+c     various arrays, flags and counters.
+c
+
+      implicit none
+      integer nyplanes,nx,ny,nz,num_dims,p,iswitch,itrig,i_stat,N,NM1,M,MM1,MM2
+      integer myid,numprocs,ierr,locnx,locnz,i,j,k,iwrite
+      integer comm,twoslice,subslice
+      integer iseed,npts
+      parameter (npts=4*2048)  ! >=nx
+      double precision urv(npts),vrv(npts)
+      real u(nx+2,ny+1,locnz+1),v(nx+2,ny+1,locnz+1),w(nx+2,ny+1,locnz+1)
+      real s1(nx+2,ny+1,locnz+1),s2(nx+2,ny+1,locnz+1)
+      real ambient_density(nx+2,ny+1,locnz+1)
+      real temp(nx,nyplanes,locnz+1)
+      complex u_cplx(locnx,ny+1,nz+1,2),v_cplx(locnx,ny+1,nz+1,2)
+      complex w_cplx(locnx,ny+1,nz+1,2),s1_cplx(locnx,ny+1,nz+1,2)
+      complex s2_cplx(locnx,ny+1,nz+1,2)
+      real Lx,Ly,Lz,U0,DGRAD,s1_scale,s2_scale,rho_0,f,g,kappa_1,kappa_2,nu
+      real Rot,Ri,Re,Pr_1,Pr_2,dt,t_start,t_end,t_write_selective
+      character*80 bc_flag,step_flag,strat_flag,read_netcdf,netcdf_file
+      character*80 diss_flag,force_flag
+      character*2 scalars
+      character tswitch
+      integer ifax(13),ifay(13),ifaz(13)
+      integer jstart(4),icount(4),data_dims(4),ncid,RCODE,var_id
+      real wnx(locnx),wny(ny+1),wnz(nz+1)
+      real amp(locnx,ny+1,nz+1,2),T_diss
+      real trigx(3*(nx+2)/2+1),trigy(2*(ny+1)),trigz(2*nz)
+      real work((nx+2)*(ny+1)*(locnz+1)),efactor
+      real work_P(nx+2,ny+1,locnz+1)
+      complex scratch(locnx,ny+1,nz+1)
+      complex force_cplx(locnx,ny+1,nz+1)
+      complex wn(nz/4+1),xt(nx+2, nz/2+1)
+
+      real pi,dx,dy,dz,x,y,z,time_scale,t_stat,total_density,N2,delta_u
+      real xpos,ypos,zpos,s1_bar,s2_bar,junk,rho_bar,Tgrad
+      double precision Temperature,Salinity,pMpa,density
+      integer istart,iend,i_all,i_selective,kglobal
+      integer dim_length,ii,jj
+
+#include "netcdf.inc"
+
+      N=1   ! put startup fields on plane 1 
+      NM1=2 ! the other field
+      pi = 4.0*atan(1.0)
+      dx = Lx/float(nx)
+      dz = Lz/float(nz)
+      time_scale = Lz/U0
+
+      if( num_dims .eq. 2 ) then
+       dy = 1
+       jj=1   ! j index for writing out rho_bar
+      elseif( num_dims .eq. 3 ) then
+       dy = Ly/float(ny)
+       jj=nyplanes/2   ! j index for writing out rho_bar
+      endif
+
+c     Will write out rho_bar(z) at Lx/2,Ly/2
+      ii=nx/2
+      if(myid.eq.0) open(1,file='output/rho_bar')
+
+       do k=1,locnz+1
+        kglobal = k + myid*locnz
+        zpos=(kglobal-1.)*dz/Lz     ! use dimensionless values here
+        do j=1,nyplanes
+         do i=1,nx
+           xpos=(i-1.)*dx/Lz
+           ypos=(j-1.)*dy/Lz
+
+          call s1_bar_func(xpos,ypos,zpos,s1_bar,
+     *                     junk,junk,junk,junk,
+     *                     Lz,s1_scale)
+          call s2_bar_func(xpos,ypos,zpos,s2_bar,
+     *                     junk,junk,junk,junk,
+     *                     Lz,s2_scale)
+          if( scalars .eq. 'TS' ) then
+           Temperature = (s1_bar*s1_scale)       ! [deg C]
+           Salinity = (s2_bar*s2_scale)   ! [psu]
+           Salinity=Salinity/1000.     ! fortran routine rho uses concentration units
+           pmPa=0.d0
+           call rho(Salinity,Temperature,pMpa,density)
+           rho_bar = (sngl(density) - rho_0)   ! [kg/m3]
+           ambient_density(i, j, k) = rho_bar/(Lz*DGRAD)   ! store dimensionless values
+          elseif( scalars .eq. 'TP' .or. scalars .eq. 'T0' ) then
+           Temperature = (s1_bar*s1_scale)       ! [deg C]
+           Salinity = 0.  ! [psu]
+           pmPa=0.d0
+           call rho(Salinity,Temperature,pMpa,density)
+           rho_bar = (sngl(density) - rho_0)   ! [kg/m3]
+           ambient_density(i, j, k) = rho_bar/(Lz*DGRAD)   ! store dimensionless values
+          elseif( scalars .eq. 'SP' .or. scalars .eq. 'S0' ) then
+           Temperature = 0.       ! [deg C]
+           Salinity = (s2_bar*s2_scale)   ! [psu]
+           Salinity=Salinity/1000.     ! fortran routine rho uses concentration units
+           pmPa=0.d0
+           call rho(Salinity,Temperature,pMpa,density)
+           rho_bar = (sngl(density) - rho_0)   ! [kg/m3]
+           ambient_density(i, j, k) = rho_bar/(Lz*DGRAD)   ! store dimensionless values
+          elseif( scalars .eq. 'RP' .or. scalars .eq. 'R0' ) then
+           ambient_density(i, j, k) = s1_bar/s1_scale      ! store dimensionless values
+          elseif( scalars .eq. 'PP' ) then
+           ambient_density(i, j, k) = 0.0                  ! store dimensionless values
+          endif
+
+          if(myid.eq.0 .and. i.eq.ii .and. j.eq.jj) write(1,*) zpos*Lz,rho_bar
+         enddo
+        enddo
+       enddo
+       if(myid.eq.0) close(10)
+       call MPI_BARRIER(comm,ierr)   ! all processors loop and compute but only writes file
+ 
+
+      if( netcdf_file .eq. 'none' .or. netcdf_file .eq. 'NONE' ) then
+       do k=1,locnz+1
+        kglobal = k + myid*locnz
+        zpos=(kglobal-1.)*dz     ![m]
+
+        do j=1,nyplanes
+         do i=1,nx
+      
+          xpos=(i-1.)*dx
+          ypos=(j-1.)*dy
+
+          call user_defined_ics(xpos,ypos,zpos,Lx,Ly,Lz,
+     *         u(i,j,k),v(i,j,k),w(i,j,k),s1(i,j,k),s2(i,j,k) )
+
+         enddo
+        enddo
+       enddo
+ 
+      else  ! we will read ICS from an existing netcdf file
+c     for example, to read ICs from a netcdf file generated via GMwaves.x
+
+c      define size of data blocks for reading from netcdf file 
+       jstart(1)=1
+       jstart(2)=1
+       jstart(3)=(myid*locnz)+1
+       jstart(4)=1
+       icount(1)=nx
+       data_dims(1)=nx
+       icount(2)=nyplanes 
+       data_dims(2)=nyplanes 
+       if( myid .eq. numprocs-1 .and. bc_flag .eq. 'zslip') then  
+        icount(3)=locnz+1
+        data_dims(3)=numprocs*locnz+1
+       else
+        icount(3)=locnz
+        data_dims(3)=numprocs*locnz
+       endif
+       icount(4)=1
+       data_dims(4)=1
+
+c      ACCESS THE FILE SEQUENTIALLY ACROSS PROCESSORS
+
+       DO IWRITE=0,NUMPROCS-1
+        IF( MYID .NE. IWRITE ) GOTO 999    ! wait for IWRITE to finish w/ file
+
+       write(0,*) 'Processor ',myid,' accessing ICs file ',netcdf_file
+c      processor IWRITE opens the specified file
+       rcode=NF_OPEN(netcdf_file,NF_NOWRITE,ncid)
+
+c      read in the dimensional values from the file
+       do i=0, 4
+        rcode=NF_INQ_DIMLEN(ncid, i, dim_length)
+        if(dim_length .ne. data_dims(i)) then
+         write (0,*) "dimensional values from the file are inconsistant
+     * with global dimensions of the problem given."
+         exit
+        endif
+       enddo
+
+c      U
+       rcode=NF_INQ_VARID(ncid,'uVar',var_id)
+       rcode=NF_GET_VARA_REAL(ncid,var_id,jstart,icount,temp)
+       do k=1,icount(3)
+        do j=1,nyplanes
+         do i=1,nx
+          u(i,j,k)=temp(i,j,k)
+         enddo
+        enddo
+       enddo
+
+c      V
+       rcode=NF_INQ_VARID(ncid,'vVar',var_id)
+       rcode=NF_GET_VARA_REAL(ncid,var_id,jstart,icount,temp)
+        do k=1,icount(3)
+         do j=1,nyplanes
+          do i=1,nx
+           v(i,j,k)=temp(i,j,k)
+          enddo
+         enddo
+        enddo
+
+c      W
+       rcode=NF_INQ_VARID(ncid,'wVar',var_id)
+       rcode=NF_GET_VARA_REAL(ncid,var_id,jstart,icount,temp)
+       do k=1,icount(3)
+        do j=1,nyplanes
+         do i=1,nx
+          w(i,j,k)=temp(i,j,k)
+         enddo
+        enddo
+       enddo
+
+
+c      s1
+       rcode=NF_INQ_VARID(ncid,'s1Var',var_id)
+       rcode=NF_GET_VARA_REAL(ncid,var_id,jstart,icount,temp)
+
+       do k=1,icount(3)      
+        kglobal = k + myid*locnz
+        zpos=(kglobal-1.)*dz/Lz     ![dless]
+        do j=1,nyplanes 
+         ypos=(j-1.)*dy/Lz
+         do i=1,nx
+          xpos=(i-1.)*dx/Lz
+          call s1_bar_func(xpos,ypos,zpos,s1_bar,junk,junk,junk,junk,Lz,s1_scale)
+          s1(i,j,k) = temp(i,j,k) - s1_bar*(s1_scale)
+         enddo
+        enddo
+       enddo 
+
+c      s2
+       rcode=NF_INQ_VARID(ncid,'s2Var',var_id)
+       rcode=NF_GET_VARA_REAL(ncid,var_id,jstart,icount,temp)
+       do k=1,icount(3)      
+        kglobal = k + myid*locnz
+        zpos=(kglobal-1.)*dz/Lz     ![dless]
+        do j=1,nyplanes 
+         ypos=(j-1.)*dy/Lz
+         do i=1,nx
+          xpos=(i-1.)*dx/Lz
+          call s2_bar_func(xpos,ypos,zpos,s2_bar,junk,junk,junk,junk,Lz,s2_scale)
+          s2(i,j,k) = temp(i,j,k) - s2_bar*(s2_scale)
+         enddo
+        enddo
+       enddo
+
+       rcode=NF_CLOSE(ncid)
+999    call MPI_BARRIER(comm,ierr)    ! all processes wait here before reading next block
+      ENDDO
+
+      endif  ! end if block for netcdf or user specified ICS
+
+c     write out parameters characterizing simulation
+c
+      if( myid .eq. 0 ) then
+       write(6,*) ' Number of dimensions:  ',num_dims
+       write(6,*) ' nx, ny, nz : ',nx,ny,nz
+       write(6,*) ' boundary conditions:  ',bc_flag
+       write(6,*) ' '
+       write(6,*) ' '
+       write(6,*) ' domain lengths Lx, Ly, Lz [m]:  ',Lx,Ly,Lz
+       write(6,*) ' grid spacings dx, dy, dz [m]:  ',dx,dy,dz
+       write(6,*) ' bulk velocity scale U [m/s]:  ',U0
+       write(6,*) ' characteristic density gradient scale [kg/m4]:  ',DGRAD
+       write(6,*) ' characteristic range of scalar 1 [e.g. deg C]  ',s1_scale
+       write(6,*) ' characteristic range of scalar 2 [e.g. psu]  ',s2_scale
+       write(6,*) 
+     &   ' characteristic density of Boussinesq fluid [kg/m3]:  ',rho_0
+       write(6,*) ' coriolis parameter f [1/s]:  ',f
+       write(6,*) ' gravitational acceleration g [m/s2]:  ',g
+       write(6,*) ' molecular diffusivity of scalar 1 [m2/s]:  ',kappa_1
+       write(6,*) ' molecular diffusivity of scalar 2 [m2/s]:  ',kappa_2
+       write(6,*) ' viscosity [m2/s]:  ',nu
+c      write(6,*) ' minimum BV period [s]:  ',per_min
+c      write(6,*) ' CFL_x = Umax dt/dx:  ', UMAX*dt/dx
+c      write(6,*) ' CFL_y = Vmax dt/dy:  ', VMAX*dt/dy
+c      write(6,*) ' CFL_z = Wmax dt/dz:  ', WMAX*dt/dz
+
+c     nondimensionalize the initial fields, the stratification parameters 
+c     and time variables
+       write(6,*) ' time step dt [s]    :  ',dt
+       write(6,*) ' initial time  [s]   :  ',t_start
+       write(6,*) ' final time    [s]   :  ',t_end
+       write(6,*) ' Lz/U0        [s]    :  ',time_scale
+      endif
+
+      istart = 0
+      iend = ( t_end - t_start ) / dt
+      i_selective = t_write_selective/dt
+      i_stat = t_stat/dt
+
+      dt = dt/time_scale
+      t_start = t_start/time_scale
+      t_end = t_end/time_scale
+      t_write_selective = t_write_selective/time_scale
+      t_stat = t_stat/time_scale
+
+      if( myid .eq. 0 ) then
+       write(6,*) ' '
+       write(6,*) ' time variables initialized via problem_parameters.h'
+       write(6,*) ' non-dimensionalized in initilize.f'
+      endif
+      
+      if( myid .eq. 0 ) then
+       write(6,*) ' '
+       write(6,*) ' time increment counters set'
+       write(6,*) ' number of steps:  ',iend-istart+1
+       write(6,*) ' number of steps between energetics calculations:  ',i_stat
+       write(6,*) ' number of steps between full writes:  ',i_all
+       write(6,*) ' number of steps between selective writes:  ',i_selective
+      endif
+      
+      do i=0,numprocs-1
+       if( myid .eq. i .and. myid .lt. numprocs-1 ) then
+#ifdef F77
+        open(1,file='output/u_profile',status='unknown',access='append')    ! f77 syntax
+#else
+        open(1,file='output/u_profile',status='unknown',
+     &       position='append')  ! f90 syntax
+#endif F77
+        do k=1,locnz
+         write(1,*) 0.,0.,(k-1+myid*locnz)*dz,u(1,1,k)
+        enddo
+        close(1)
+       elseif( myid .eq. i .and. myid .eq. numprocs-1 ) then
+#ifdef F77
+        open(1,file='output/u_profile',status='unknown',access='append')     ! f77
+#else
+        open(1,file='output/u_profile',status='unknown',
+     &       position='append')   ! f90 syntax
+#endif F77 
+c '
+       do k=1,locnz+1
+         write(1,*) 0.,0.,(k-1+myid*locnz)*dz,u(1,1,k)
+        enddo
+        close(1)
+        endif
+         call MPI_BARRIER(comm,ierr)
+        enddo
+      
+c     Nondimensionalize dependent variables:
+      do k=1,locnz+1
+       do j=1,nyplanes
+        do i=1,nx
+         u(i,j,k) = u(i,j,k)/U0
+         v(i,j,k) = v(i,j,k)/U0
+         w(i,j,k) = w(i,j,k)/U0
+         s1(i,j,k) = s1(i,j,k)/(s1_scale)
+         s2(i,j,k) = s2(i,j,k)/(s2_scale)
+        enddo
+       enddo
+      enddo
+
+      if( myid .eq. 0 ) then
+       write(6,*) ' '
+       write(6,*) 'dependent variables non-dimensionalized'
+      endif
+      
+c     compute the dimensionless parameters
+      Rot= f*Lz/U0
+      N2 = (g/rho_0)*DGRAD
+      Ri = N2*Lz**2/(U0**2)
+      Re = U0*Lz/nu
+      Pr_1 = nu/kappa_1
+      Pr_2 = nu/kappa_2
+      
+      if( myid .eq. 0 ) then
+       write(6,*) ' '
+       write(6,*) ' '
+       write(6,*) ' inverse Rossby number fL/U:  ',Rot
+       write(6,*) ' bulk Richardson number (NL/U)^2 : ',Ri
+       write(6,*) ' bulk Reynolds number UL/nu:  ',Re
+       write(6,*) ' Prandtl number  nu/kappa_1:  ',Pr_1
+       write(6,*) ' Prandtl number  nu/kappa_2:  ',Pr_2
+       write(6,*) ' '
+       write(6,*) ' '
+      endif
+
+c
+c     set up dimensionless wavenumber vectors, 
+c     N.B. for fill_wave_vectors, input length & time scales, 
+c     including wavenumber truncation radius,
+c     are dimensionless quantities, scaled by vertical domain size Lz & U0
+c
+      call fill_wave_vectors (wnx, wny, wnz, nx, ny, nz, Lx/Lz, Ly/Lz, amp,
+     *                        dt, Re, Pr_1, Pr_2, p,T_diss/time_scale,diss_flag,num_dims,bc_flag,
+     *                        myid, numprocs, locnx)
+     
+      if( myid .eq. 0 ) then
+       write(6,*) ' '
+       write(6,*) ' dimensionless wavenumber vectors and '
+       write(6,*) ' integrating factors initialized'
+       write(6,*) ' '
+      
+       write(6,*) 'TRANSFORMING DIMENSIONLESS INITIAL CONDITIONS P-->S'
+      endif
+
+c
+c     take the 3d transforms of the dimensionless, physical space ICS
+c
+	iswitch = +1   ! Forward transforms: physical to wavenumber domain
+	itrig = 1      ! compute & return trig tables with first call
+                       ! to transform3d
+	
+C
+C     set tswitch to indicate type of z transform, and transform u & v & s1
+C
+      if( bc_flag .eq. 'zperiodic' ) then
+       tswitch='f'  ! indicating fourier in xy, fourier in z
+      elseif( bc_flag .eq. 'zslip' ) then
+       tswitch = 'c'   ! free slip, du/dz=dv/dz=ds1d/dz=0 at top & bottom
+      endif
+      
+      call transform3d (u,u_cplx(1,1,1,N),nx,ny,nz,iswitch,tswitch,itrig,
+     *                   trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                   num_dims,work,scratch,xt,myid,numprocs,locnx,locnz,
+     *                   comm,twoslice,subslice)
+     
+      if( myid .eq. 0 ) then
+       write(6,*) ' u transformed to wavenumber domain: ', tswitch,iswitch,itrig
+      endif
+     
+      itrig = 0      ! trig tables now computed and stored
+      
+      call transform3d (v,v_cplx(1,1,1,N),nx,ny,nz,iswitch,tswitch,itrig,
+     *                   trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                   num_dims,work,scratch,xt,myid,numprocs,locnx,locnz,
+     *                   comm,twoslice,subslice)
+      if( myid .eq. 0 ) then
+       write(6,*) ' v transformed to wavenumber domain: ', tswitch,iswitch,itrig
+      endif
+     
+      if( bc_flag .eq. 'zperiodic' ) then
+       tswitch='f'
+      elseif( bc_flag .eq. 'zslip' ) then
+       tswitch = 's'  
+      endif
+      
+      call transform3d (s1,s1_cplx(1,1,1,N),nx,ny,nz,iswitch,tswitch,itrig,
+     *                   trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                   num_dims,work,scratch,xt,myid,numprocs,locnx,locnz,
+     *                   comm,twoslice,subslice)
+      if( myid .eq. 0 ) then
+       write(6,*) ' s1 transformed to wavenumber domain: ', tswitch,iswitch,itrig
+      endif
+      
+      if( bc_flag .eq. 'zperiodic' ) then
+       tswitch='f'
+      elseif( bc_flag .eq. 'zslip' ) then
+       tswitch = 's'  
+      endif
+      
+      call transform3d (s2,s2_cplx(1,1,1,N),nx,ny,nz,iswitch,tswitch,itrig,
+     *                   trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                   num_dims,work,scratch,xt,myid,numprocs,locnx,locnz,
+     *                   comm,twoslice,subslice)
+      if( myid .eq. 0 ) then
+       write(6,*) ' s2 transformed to wavenumber domain: ', tswitch,iswitch,itrig
+      endif
+      
+C
+C     set tswitch to indicate type of z transform, and transform u & v & s1 
+C
+      if( bc_flag .eq. 'zperiodic' ) then
+       tswitch='f'
+      elseif( bc_flag .eq. 'zslip' ) then
+       tswitch = 's'   ! w=0 at top & bottom
+      endif
+      
+       call transform3d (w,w_cplx(1,1,1,N),nx,ny,nz,iswitch,tswitch,itrig,
+     *                  trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                  num_dims,work,scratch,xt,myid,numprocs,locnx,locnz,
+     *                  comm,twoslice,subslice)
+
+      if( myid .eq. 0 ) then
+       write(6,*) ' w transformed to wavenumber domain: ', tswitch,iswitch,itrig
+      endif
+     
+      if( efactor .gt. 0 ) then
+       call add_noise(u_cplx,v_cplx,efactor,nx,ny,nz,num_dims,
+     *                wnx,wny,wnz,N,NM1,myid,numprocs,locnx,comm)
+      endif
+
+c
+c     Initialize forcing wavenumber array, to be called later in
+c
+      if( force_flag .eq. 'yesFourier' ) then      
+c        if( myid .eq. 0 ) then
+c         write(6,*) ''
+c         write(6,*) 'Initializing Fourier forcing  '
+c         write(6,*) ''
+c        endif
+        call initialize_user_fforcing (force_cplx,wnx,wny,wnz,f,g,rho_0,DGRAD,Rot,U0,
+     *                                    nx,ny,nyplanes,nz,locnx,Lx,Ly,Lz,
+     *                                    locnz,myid,numprocs,num_dims,ifax,ifay,ifaz,
+     *                                    wn,comm,twoslice,subslice,trigx,trigy,trigz,
+     *                                    work_P,scratch,bc_flag,work)
+      endif
+
+c
+c     initialize array pointers and time step method
+c
+      N=1
+      NM1=2
+      M=1
+      MM1=2
+      MM2=3
+      step_flag='euler'   ! startup method, no previous information known
+
+      call MPI_BARRIER(comm,ierr)
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/initialize_floats.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/initialize_floats.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/initialize_floats.f	(revision 6)
@@ -0,0 +1,152 @@
+      subroutine initialize_floats(float_variables,nfloats,locnx,ny,nz,Lx,Ly,Lz,
+     *                             U0,u,v,w,s1,s2,rho_0,s1_scale,s2_scale,
+     &                             wnx,wny,wnz,bc_flag,
+     *                             sensor_data,nsensors,float_parameters,
+     *                             nfloatparams,j_float_time,t_start,
+     *                             z_close,delta_w,z_offset,myid,comm)
+c
+c     Routine to assign initial float positions etc
+c     (x,y,z) stored in float_variables(1-3,1:nfloats)
+c     float temperature in float_variables(4,1:nfloats)
+c     lagrangian density in float_variables(5,1:nfloats)
+c     float density in float_variables(6,1:nfloats)
+c
+      implicit none
+      integer nfloats,locnx,ny,nz,nyplanes,nsensors,nfloatparams,j_float_time
+      integer myid,comm,ierr
+      complex u(1),v(1),w(1),s1(1),s2(1)
+      real float_variables(6,nfloats),x,y,z,Lx,Ly,Lz,t_start
+      real U0,s1_scale,s1_bar,s2_bar,rho_0,s2_scale
+      real wnx(locnx),wny(ny+1),wnz(nz+1)
+      real sensor_data(nsensors,nfloats)
+      real float_parameters(nfloatparams,nfloats)
+      character*80 bc_flag,interp_flag,prelim_flag
+      character*80 junktext
+
+      integer nhpts,nzpts,i,j
+      real z_close,z_offset,delta_w,depth,z0,xnum,xpos,zpos,xdens,xtime,z_up
+      real fluid_density,fluid_density2,junk,fluid_s2,fluid_s2_2
+      real u_up,v_up,w_up,d_x,d_y,d_z
+
+      if( bc_flag .eq. 'zslip' ) then
+       interp_flag='c'    ! s1 expanded in cos series
+      elseif( bc_flag .eq. 'zperiodic' ) then
+       interp_flag='f'    ! s1 expanded in Fourier series
+      endif
+
+      open(1,file='input/float_positions.dat')    ! 
+
+      do i=1,nfloats
+
+c      BEGIN specify float parameters
+       float_parameters(1,i) = 0.0      ! float volume in m3
+       float_parameters(2,i) = z_close  ! min dist. to bdries [d'less] 
+       float_parameters(3,i) = delta_w  ! vert. vel. due to res. buoyancy [1]
+       float_parameters(4,i) = z_offset ! (up) offset for second density
+c                                                measurement
+c      END specify float parameters
+
+c      BEGIN specify float variables
+       d_x=Lx/float(nfloats)
+       d_y=Ly/float(nfloats)
+       d_z=(0.25)*Lz/float(nfloats)
+
+c      x=(i-1.)*d_x
+c      y=(i-1.)*d_y
+c      z = 3*Lz/8. + (i-1.)*d_z
+       read(1,*) j,x,y,z           ! dimensional float positions
+       if( j .ne. i ) then
+        write(0,*) ' problem with reading in float data: ids misaligned'
+        stop
+       endif
+       if( myid .eq. 0 ) write(0,*) j,x,y,z
+
+       x=x/Lz      ! args to ds_interp are dimensionless
+       y=y/Lz
+       z=z/Lz
+
+       float_variables(1,i) = x   ! work with dimensionless positions
+       float_variables(2,i) = y   
+       float_variables(3,i) = z   
+       z_up = z + z_offset
+ 
+c      Interpolate to get s1(x,y,z)      
+       call ds_interp(x,y,z,s1,wnx,wny,wnz,locnx,ny,nz,
+     *                interp_flag,fluid_density,myid,comm)
+       call s1_bar_func(x,y,z,s1_bar,junk,junk,junk,junk,Lz,s1_scale)
+
+c      set density to be that value interpolated from the position
+       fluid_density = fluid_density + s1_bar ! fluid_density <-- total density
+
+c      Interpolate to get pd(x,y,z+z_offset)      
+       call ds_interp(x,y,z_up,s1,wnx,wny,wnz,locnx,ny,nz,
+     *                interp_flag,fluid_density2,myid,comm)
+       call s1_bar_func(x,y,z_up,s1_bar,junk,junk,junk,junk,Lz,s1_scale)
+       fluid_density2 = fluid_density2 + s1_bar 
+
+c      Interpolate to get s2(x,y,z)      
+       call ds_interp(x,y,z,s2,wnx,wny,wnz,locnx,ny,nz,
+     *                interp_flag,fluid_s2,myid,comm)
+       call s2_bar_func(x,y,z,s2_bar,junk,junk,junk,junk,Lz,s2_scale)
+
+c      set density to be that value interpolated from the position
+       fluid_s2 = fluid_s2 + s2_bar ! fluid_density <-- total density
+
+c      Interpolate to get ps2(x,y,z+z_offset)      
+       call ds_interp(x,y,z_up,s2,wnx,wny,wnz,locnx,ny,nz,
+     *                interp_flag,fluid_s2_2,myid,comm)
+       call s2_bar_func(x,y,z_up,s2_bar,junk,junk,junk,junk,Lz,s1_scale)
+       fluid_s2_2 = fluid_s2_2 + s2_bar 
+
+       float_variables(4,i)=-99999           ! not used
+       float_variables(5,i)=fluid_density    !fluid density at float position
+       float_variables(6,i)=-99999           ! not used 
+
+c      END specify float variables
+
+c      BEGIN specify float sensor data
+c      Interpolate to get [u,v](x,y,z+z_offset)    (Polarity matches pd)
+       call ds_interp(x,y,z_up,u,wnx,wny,wnz,locnx,ny,nz,
+     *                interp_flag,u_up,myid,comm)
+       call ds_interp(x,y,z_up,v,wnx,wny,wnz,locnx,ny,nz,
+     *                interp_flag,v_up,myid,comm)
+
+c      Determine polarity of w before interpolating to get w(x,y,z+z_offset)
+       if( bc_flag .eq. 'zslip' ) then
+        interp_flag='c'    ! s1 expanded in cos series
+       elseif( bc_flag .eq. 'zperiodic' ) then
+        interp_flag='f'    ! s1 expanded in Fourier series
+       endif
+       call ds_interp(x,y,z_up,w,wnx,wny,wnz,locnx,ny,nz,
+     *                interp_flag,w_up,myid,comm)
+
+       sensor_data(1,i) = 0*fluid_density        ! eulerian density at float pos.
+       sensor_data(2,i) = 0*fluid_density2       ! eulerian density offset in z
+       sensor_data(3,i) = 0*u_up                 ! eulerian u offset in z
+       sensor_data(4,i) = 0*v_up                 ! eulerian v offset in z
+       sensor_data(5,i) = 0*w_up                 ! eulerian w offset in z
+       sensor_data(6,i) = 0*fluid_s2
+       sensor_data(7,i) = 0*fluid_s2_2
+
+
+c      END specify float sensor data
+
+
+      enddo
+      close(1)
+
+c
+c     initilize netcdf data file
+c
+      prelim_flag = 'yes'
+      if( myid .eq. 0 ) then
+       write(6,*) ' initialization call to write_floats_nc '
+       call write_floats_nc(t_start,0,nfloats,nsensors,Lz,s1_scale,s2_scale,U0,
+     *                      float_variables,sensor_data,j_float_time,
+     *                      float_parameters,nfloatparams,prelim_flag)
+       write(6,*) ' initialization call to write_floats_nc complete '
+      endif
+      call MPI_BARRIER(comm,ierr)
+
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/initialize_user_fforcing.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/initialize_user_fforcing.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/initialize_user_fforcing.f	(revision 6)
@@ -0,0 +1,254 @@
+      Subroutine initialize_user_fforcing(work_F,wnx,wny,wnz,f,g,rho_0,DGRAD,Rot,U0,
+     *                                    nx,ny,nyplanes,nz,locnx,Lx,Ly,Lz,
+     *                                    locnz,myid,numprocs,num_dims,ifax,ifay,ifaz,
+     *                                    wn,comm,twoslice,subslice,trigx,trigy,trigz,
+     *                                    work_P,t3D_scratch,bc_flag,t3d_work)
+
+C---------------------------------------------------------------------------
+C
+C  initialize_user_fforcing - Called by initialize.f if force_flag is set to 'yesFourier'.
+c                            Routine to initialize a user defined matrix that
+c                            defines the spectral amplitudes of the forcing waves.
+c                            The routine begins in spectral space and specifies the
+C                            amplitude of each fourier component of vertical displacement.
+C                            The result is tranformed to physical space and a vertical
+C                            amplitude envelope is applied to simulate bottom forced waves.
+C                            The new physical field is then transformed back into fourier
+C                            space and stored for use of add_fforing.f at each time step
+c
+C       code written by Jen MacKinnon 3/6/03
+C
+C     INPUT: 
+c       nx, ny, nz   The number of x,y and z gridpoints in the OPEN
+c                           intervals i.e. [0,Lx), [0,Ly), [0,Lz)
+c       Lx, Ly,Lz      - dimensional lengths
+c       num_dims       - number of spatial dimensions 3(x,y,z) or 2(x,z) z="up"
+c       bc_flag        - character flag specifying vertical boundary conditions
+c                        legal values are 'zperiodic' or 'zslip'
+c       myid           - processor id flag
+c       numprocs       - total number of processors
+c       locnx          - number of k values in local portion of
+c                        wavenumber space
+C       wnx,wny,wnz    - real arrays of sizes(locnx),(ny+1),(nz+1)
+C                        respectively) - contain the k, l, and m wavenumbers
+C
+c     OUTPUT:        
+c        work_F         - Fourier representation of forcing spectral amplitudes of
+c                         vertical displacement at time = 0.  Rotated in time and
+c                         added to u,v,w,s1 equations in add_fforcing.f
+c                         output and passed around as 'force_cplx' 
+C
+C---------------------------------------------------------------------------
+
+
+      integer i,j,k,myid,num_dims,iswitch,itrig
+      integer nx,ny,nyplanes,nz,locnx,locnz,numprocs
+      integer ifax(13),ifay(13),ifaz(13),kend
+      integer comm,twoslice,subslice
+      integer iseed,npts
+      parameter (npts=2048)  ! >=nx
+      double precision phase(npts)
+      real wnx(locnx),wny(ny+1),wnz(nz+1),dz,dx
+      real trigx(3*(nx+2)/2+1),trigy(2*(ny+1)),trigz(2*nz)
+      complex work_F(locnx,ny+1,nz+1)
+      real work_P(nx+2,ny+1,locnz+1)
+      real t3d_work(nx+2,ny+1,locnz+1)
+      complex t3D_scratch(locnx,ny+1,nz+1)
+      complex wn(nz/4+1),xt(nx+2, nz/2+1),cmplxi
+      character*80 tswitch,bc_flag
+      real A_rms,A_fforce,omega_fforce,k_fforce,l_fforce,m_fforce
+      real A_force,omega_force,k_force,l_force,m_force,F_of_z
+      real N2,f,g,pi,rho_0,U0,DGRAD,alpha,bfactor,b
+      real Lx,Ly,Lz,beta_k,beta_l,beta_m,m_m2,Rot,Ri
+      real workp2sum,workf2sum,wnh
+
+ 
+
+c define user modified parameters
+      dz=Lz/float(nz)
+      dx=Lx/float(nx)
+      pi=4.*atan(1.)
+      cmplxi=(0.0,1.0)
+      N2=(g/rho_0)*DGRAD       ! [1/s^2]
+
+      A_rms=2.0          ! rms displacement in physical space 
+      A_fforce=A_rms/2*sqrt(float(nx)*float(nz))  ! corresponding spectral amplitude
+      k_fforce=5.*(2.*pi/Lx)                         ! [1/m]
+      l_fforce=((0)*(2.*pi/Ly))
+      omega_fforce=(2.*pi/(12.44*3600.))
+      alpha=sqrt((omega_fforce**2-f**2)/(N2-omega_fforce**2)) 
+      m_fforce=k_fforce/alpha
+      beta_k=0.5*2*pi/Lx      ! spectral gaussian width of forcing wavenumber amplitudes
+      beta_l=.5*2*pi/Ly
+      beta_m=.02*2*pi/Lz
+      beta_k=sqrt(2.)*0.8e-4
+      beta_l=beta_k
+      beta_m=beta_k*dx/dz/2
+      bfactor=1.
+      b=bfactor*m_fforce/(2.*pi)  ! vertical scale of amplitude envelope in physical space
+
+      if (myid .eq. 0) then
+        write(6,*) 'k_fforce dim =',k_fforce
+        write(6,*) 'omega_fforce dim =',omega_fforce
+        write(6,*) 'N = ',sqrt(N2)
+        write(6,*) 'alpha = ',alpha
+        write(6,*) 'm_fforce =',m_fforce
+      endif
+
+c   Non-dimensionalize parameters
+      A_force=A_fforce/Lz
+      omega_force=omega_fforce*Lz/U0
+      b=b*Lz
+      k_force=k_fforce*Lz
+      l_force=l_fforce*Lz
+      m_force=m_fforce*Lz
+      Rot=f*Lz/U0
+      Ri=N2*Lz**2/(U0**2)
+      beta_k=beta_k*Lz
+      beta_l=beta_l*Lz
+      beta_m=beta_m*Lz
+
+      if (myid .eq. 0) then
+        write(6,*) 'k_fforce non dim =',k_force
+        write(6,*) 'A_force non dim =',A_force
+      endif
+
+c     random number initialization
+      iseed=myid             ! different initial seeds for each processor
+
+
+c   Initial horizontal wavenumber spectrum
+c   Gaussian in wnx and wny around k_force, and l_force
+c   gaussian in wnz around the vertical wavenumber that corresponds to
+c   the frequency omega_force for each horizontal wavenumber
+
+
+      workf2sum=0.
+c      do i=1,locnx
+c         write(6,*) 'i, k(i)',i,wnx(i)/Lz
+c      enddo
+
+      do k = 1, nz+1
+        do j = 1, nyplanes     ! OK for 2d when ny=0
+          call zufalli(iseed)    ! initialization
+          call normalen(npts,phase)
+	  do i = 1, locnx
+             wnh=sqrt(wnx(i)**2+wny(j)**2)  ! horizontal wavenumber mag
+c            if (i .gt. 1 .and. k .gt. 1 .and. wnh .gt. 0) then
+               m_m2=wnh/alpha
+	       work_F(i,j,k)=A_force*exp(-((wnx(i)-k_force)/beta_k)**2-((wny(j)-l_force)/beta_l)**2-((wnz(k)-m_m2)/beta_m)**2)
+c               work_F(i,j,k)=work_F(i,j,k)*exp(-cmplxi*phase(i))
+c            else
+c	       work_F(i,j,k)=0    ! don't force uniform flow
+c            endif
+          enddo
+          iseed=iseed + numprocs ! get new seed for next set of kx locations
+        enddo
+       enddo
+cccccccccccccccccccccccccccc TEMP NORMALIZATION CHECK ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+c      do k=1,nz+1
+c        do j=1,nyplanes
+c          do i=1,locnz
+c            work_F(i,j,k)=0
+c          enddo
+c        enddo
+c      enddo
+c      if (myid .eq. 0) then
+c        work_F(5,1,21)=A_force       
+c        write(6,*) 'Lz = ',Lz
+c        write(6,*) 'k_force = ',wnx(5)/Lz
+c        write(6,*) 'l_force = ',wny(1)/Lz
+c        write(6,*) 'm_force = ',wnz(6)/Lz
+c      endif
+
+      do k=1,nz
+        do j=1,nyplanes
+          do i=2,locnx
+             workf2sum=workf2sum+(work_F(i,j,k))**2
+          enddo
+        enddo
+      enddo
+      if (myid .eq. 0) then
+        write(6,*) ' Sum initialial fourier forcing=',workf2sum
+      endif
+
+      if( myid .eq. numprocs-1 ) then
+         kend = locnz+1
+       else
+         kend=locnz
+       endif
+
+c transform to physical space
+c
+      iswitch = -1   !  Inverse transform:  wavenumber to physical domain
+      itrig = 0      !  trig tables already computed and stored
+C
+C     set tswitch to indicate type of z transform, SINE for vertical displacement
+C
+      if( bc_flag .eq. 'zperiodic' ) then
+       tswitch='f'  ! indicating fourier in xy, fourier in z
+      elseif( bc_flag .eq. 'zslip' ) then
+       tswitch = 's'   ! free slip, eta=0 at top & bottom
+      endif
+
+c      do k=1,nz+1
+c      do j=1,nyplanes
+c       do i=1,locnx
+c         write(6,*) 'i,j,k,Work_F1(i,j,k)=',i,j,k,Work_F(i,j,k)
+c       enddo
+c      enddo
+c      enddo
+
+      call transform3d (work_P,work_F,nx,ny,nz,iswitch,tswitch,itrig,
+     *                   trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                   num_dims,t3d_work,t3d_scratch,xt,myid,numprocs,locnx,locnz,
+     *                   comm,twoslice,subslice)
+
+c 
+c Apply vertical amplitude envelope in physical space
+c
+      
+
+         
+      do k = 1,kend
+         z=(myid*locnz + k - 1.)*dz/Lz   ! dimensionless
+         do j = 1,nyplanes
+          do i = 1,nx
+            work_P(i,j,k)=work_P(i,j,k)*exp(-(b*z)**2)
+          enddo
+         enddo
+       enddo
+
+      workp2sum=0.
+      do k=1,kend
+        do j=1,nyplanes
+          do i=1,nx
+            workp2sum=workp2sum+work_P(i,j,k)**2
+          enddo
+        enddo
+      enddo
+      if (myid .eq. 0) then
+         write(6,*) 'mean A(x,z)^2=',workp2sum/(float(nz)*float(nyplanes)*float(nx))*Lz**2
+      endif
+
+c  transform back to fourier space
+c
+      iswitch = 1
+      call transform3d (work_P,work_F,nx,ny,nz,iswitch,tswitch,itrig,
+     *                   trigx,trigy,trigz,wn,ifax,ifay,ifaz,
+     *                   num_dims,t3d_work,t3d_scratch,xt,myid,numprocs,locnx,locnz,
+     *                   comm,twoslice,subslice)
+
+c      do k=1,nz+1
+c      do j=1,nyplanes
+c       do i=1,locnx
+c         write(6,*) 'i,j,k,Work_F2(i,j,k)=',i,j,k,Work_F(i,j,k)
+c       enddo
+c      enddo
+c      enddo
+          
+
+
+      return
+      end
+
Index: /trunk/SpectralModelF90/PROJECTS/trivial/mpi_init.h
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/mpi_init.h	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/mpi_init.h	(revision 6)
@@ -0,0 +1,16 @@
+!!!     Initialize MPI routines
+      comm=MPI_COMM_WORLD
+      call MPI_INIT(ierr)
+      call MPI_COMM_RANK(comm,myid,ierr)
+      call MPI_COMM_SIZE(comm,nprocs,ierr)
+      
+      if( myid .eq. 0 ) then
+       write(0,*) ' MPI initialized with ',nprocs,' live processors'
+       if( nprocs .ne. numprocs ) then
+        write(0,*) ' Number of live processors: ',nprocs,' does not match'
+        write(0,*) ' the number specified in variable_declarations.h: ',numprocs
+        write(0,*) ' Check the run.sh script.'
+        goto 999     ! shutdown MPI and exit gracefully
+       endif
+      endif
+
Index: /trunk/SpectralModelF90/PROJECTS/trivial/nonlin.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/nonlin.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/nonlin.f	(revision 6)
@@ -0,0 +1,144 @@
+	subroutine nonlin (scalars,u,v,w,pd,s1,s2,vortx,vorty,vortz,s2_u,s2_v,s2_w,
+     *                     Lx,Ly,Lz,U0,DGRAD,s1_scale,s2_scale,rho_0,ddz_s1,ddz_s2,
+     *                     Ri,Rot,num_dims,nx,ny,locnz,myid,numprocs,comm)
+
+C------------------------------------------------------------------------
+C
+C  nonlin - Compute u cross omega and add the appropriate rotation
+c           rotation and buoyancy terms.
+c           Also compute s1 times (u,v,w), u dot grad s1_bar
+C
+C
+C	INPUT:  u,v,w,pd,s1,s2:               physical space values at gridpoints
+c               vortx,vorty,vortz           i,j and k components of vorticity
+c               Ri,Rot                dimensionless parameters
+c               nx,ny,locnz                 dimension parameters for local data space
+c               num_dims                    2(xz) or 3(xyz) z positive up
+c               Lx,Ly,Lz                    dimensional domain sizes
+c               U0,DGRAD,s1_scale,s2_scale,rho_0       dimensional scaling values
+c
+C	OUTPUT:
+c       ddz_s1                                                    d/dz rho_bar
+c       s1*u, s1*v, s1*w                                          overwritten into the vorticity arrays
+c       (w*ddz)                                                   overwritten into the "s1" array
+
+c       s2*u, s2*v, s2*w                                          overwritten into the XXX arrays
+c       XXX                                                       overwritten into the "s2" array
+
+c       (T1 + Rot*v - u d/dx rho_bar - d/dx p_bar)                overwritten into the "u" array
+c       (T2 - Rot*u - v d/dy rho_bar - d/dy p_bar)                overwritten into the "v" array
+c       (T3 - Ri*pd)                                              overwritten into the "w" array
+C	where T is the cross product of velocity and vorticity 
+C       with components <T1,T2,T3>
+C
+C----------------------------------------------------------------------
+
+        implicit none
+        integer i,j,k,myid,numprocs,comm,kend,ierr
+	integer nx,ny,nz,locnz,num_dims,nyplanes
+c       Physical space decomposition: local portion in z direction
+	real u(nx+2,ny+1,locnz+1),v(nx+2,ny+1,locnz+1)
+	real w(nx+2,ny+1,locnz+1),s1(nx+2,ny+1,locnz+1)
+	real s2(nx+2,ny+1,locnz+1)
+	real pd(nx+2,ny+1,locnz+1)
+	real vortx(nx+2,ny+1,locnz+1),vorty(nx+2,ny+1,locnz+1)
+	real vortz(nx+2,ny+1,locnz+1)
+	real s2_u(nx+2,ny+1,locnz+1),s2_v(nx+2,ny+1,locnz+1)
+	real s2_w(nx+2,ny+1,locnz+1)
+	real ddz_s1(nx+2,ny+1,locnz+1)
+	real ddz_s2(nx+2,ny+1,locnz+1)
+	real Ri,Rot
+	real tmp1,tmp2,tmp3,x,y,z,dx,dy,dz
+        real Lx,Ly,Lz,U0,DGRAD,rho_0,s1_bar,ds1dx,ds1dy,ds1dz,g2s1b,dpdx,dpdy
+        real s1_scale,s2_scale,s2_bar,ds2dx,ds2dy,ds2dz,g2s2b,p_bar_x,p_bar_y
+        character*2 scalars
+
+        if( num_dims .eq. 2 ) then
+         nyplanes=1
+        elseif( num_dims .eq. 3 ) then
+         nyplanes=ny
+        endif
+
+        if( myid .eq. numprocs-1 ) then
+         kend = locnz+1
+        else
+         kend=locnz
+        endif
+
+        dx=Lx/float(nx)
+        dy=Ly/float(nyplanes)
+        dz=Lz/float(locnz*numprocs)
+
+        if( Ri .gt. 0 ) then
+         call equation_of_state(scalars, s1, s2, 
+     &                          s1_scale, s2_scale,
+     &                          nx, ny, locnz, rho_0, DGRAD,
+     &                          myid, numprocs, Lx, Ly, Lz, pd)
+        endif
+
+	do k = 1,kend
+         z=(myid*locnz + k - 1.)*dz/Lz   ! dimensionless
+         do j = 1,nyplanes
+          y=(j-1.)*dy/Lz
+          do i = 1,nx
+           x=(i-1.)*dx/Lz
+
+C  Calculate local s1_bar, its gradient etc.
+           call s1_bar_func(x,y,z,s1_bar,ds1dx,ds1dy,ds1dz,g2s1b,Lz,s1_scale)
+
+C  Compute the cross product of velocity and vorticity and add
+C  the rotational, buoyancy and p_bar gradient terms. Store in tmp variables.
+
+c	XXX	 dpdx and dpdy are not yet defined at this point of the code!
+           tmp1 = ( v(i,j,k)*vortz(i,j,k) - w(i,j,k)*vorty(i,j,k) )
+     *                + Rot*v(i,j,k) ! - dpdx                     ! grad p_bar for rho_bar(x,y,z)
+           tmp2 = ( w(i,j,k)*vortx(i,j,k) - u(i,j,k)*vortz(i,j,k) )
+     *                - Rot*u(i,j,k) ! - dpdy                     ! grad p_bar for rho_bar(x,y,z)
+           tmp3 = ( u(i,j,k)*vorty(i,j,k) - v(i,j,k)*vortx(i,j,k) )
+     *                - Ri*pd(i,j,k)                            ! d/dz p_bar removed with (g/rho_0) rho_bar
+
+C  Compute the products of density and velocity and storing the results
+C  where the vorticity terms used to be
+
+           vortx(i,j,k) = u(i,j,k)*s1(i,j,k)
+           vorty(i,j,k) = v(i,j,k)*s1(i,j,k)
+           vortz(i,j,k) = w(i,j,k)*s1(i,j,k)
+
+C  Overwrite s1 array with -u dot grad s1_bar 
+
+           s1(i,j,k) = -( u(i,j,k)*ds1dx + v(i,j,k)*ds1dy + w(i,j,k)*ds1dz )
+
+c  Save d/dz s1_bar
+    
+          ddz_s1(i,j,k) = ds1dz
+
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+c begin scalar (2) calculations
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+
+C  Calculate local s2_bar, its gradient and x,y derivs of p_bar
+           call s2_bar_func(x,y,z,s2_bar,ds2dx,ds2dy,ds2dz,g2s2b,Lz,s2_scale)
+
+           s2_u(i,j,k) = u(i,j,k) * s2(i,j,k)
+           s2_v(i,j,k) = v(i,j,k) * s2(i,j,k)
+           s2_w(i,j,k) = w(i,j,k) * s2(i,j,k)
+
+           s2(i,j,k) = -( u(i,j,k)*ds2dx + v(i,j,k)*ds2dy +w(i,j,k)*ds2dz )
+
+           ddz_s2(i,j,k) = ds2dz
+
+C  Now we can safely overwrite the u, v, w arrays with the cross product
+C  of velocity and vorticity + buoyancy + rotation 
+
+           u(i,j,k) = tmp1
+           v(i,j,k) = tmp2
+           w(i,j,k) = tmp3
+
+
+          enddo
+         enddo
+        enddo
+
+        call MPI_BARRIER(comm,ierr)
+        return
+        end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/output_control
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/output_control	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/output_control	(revision 6)
@@ -0,0 +1,34 @@
+# usage:
+# (x, y, z), t_write_all, filename_root
+#
+# 	(x, y, z) -> the data you want to see
+#       You can specify all the data in the range of the problem 
+#       using '*' as a wildcard. You can specify a range using ':'.
+#       For example, (*,*,10) represents the xy plane at z=10.
+#       (8:16,*,*) represents the line of x ranging between 8
+#       and 16 inclusively. You can also combine these, such as:
+#       (16:*,*) to represent the data from 16 to the end in the x
+#       direction, and all of the data in the y and z directions.
+#
+# 	t_write_all -> how often you want to see it (in secs)
+#       This can be an integer representing the number of seconds,
+#       or an integer*dt representing the number of timesteps.
+#
+# 	filename_root -> root of the filename you want the output sent to.
+#       For example, cfd3D will be used to generate outputfiles named
+#       "cfd3D_XXXXXX" where XXXXXX is an integer representing the timestep
+#       of the current output. All 3D output will be put in a directory
+#       called output/3D/, so its a good idea to give every output line below
+#       a unique filename root.
+
+# The entire cube of data, reported every 5 timesteps.
+(*, *, *), 5*dt , cfd3D
+
+# Samples:
+
+# The xy plane at z=10, output every 50 timesteps. 
+#(*, *, 10), 50*dt, z-10_2D
+
+# The line of data for 8<=x<=16 within the planes y=1 and z=10,
+# output every 10 timesteps.
+#(8:16, 1, 10), 10*dt, y-10_z-10_1D
Index: /trunk/SpectralModelF90/PROJECTS/trivial/problem_params.h
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/problem_params.h	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/problem_params.h	(revision 6)
@@ -0,0 +1,109 @@
+C*****************************************************************************
+c   PARAMETER FILE FOR PARALLEL SPECTRAL MODEL.  *****************************
+c*****************************************************************************
+
+c*****************************************************************************
+c     Initial conditions: either name a file or specify 'none'
+c*****************************************************************************
+      netcdf_file='none'    ! none means ICS defined in initialize.f
+
+c*****************************************************************************
+c     Declare how the two scalars relate to density
+c     R (rho)  T (temp) S (salinity)   P (passive) 
+c     Legal Settings: 'TS' 'TP' 'SP' 'RP'  'PP'
+c*****************************************************************************
+      scalars = 'RP'        ! scalar1=rho'  scalar2=passive
+
+c*****************************************************************************
+c     Flag specifying whether flow is forced via user_defined_forcing.f
+c*****************************************************************************
+      force_flag='no'
+
+c*****************************************************************************
+c    Type of z boundary conditions.
+c*****************************************************************************
+      bc_flag = 'zslip'              ! 'zperiodic'  or 'zslip' allowable
+                                     !  always periodic in x,y
+c*****************************************************************************
+
+c*****************************************************************************
+c    Size of computational domain.
+c    x in [0,Lx)   , y in [0,Ly)   , z in [0,Lz]  zslip
+c                                         [0,Lz]  zperiodic
+c*****************************************************************************
+      Lx = 1.0                ! x domain size [m]
+      Ly = 1.0                ! y domain size [m] (unused for 2d see below)
+      Lz = 1.0                ! z domain size [m]
+      dz = Lz/float(nz)       ! vertical grid spacing [m]  (=$=)
+c*****************************************************************************
+
+
+c*****************************************************************************
+c     Physical parameters
+c*****************************************************************************
+      g=9.81                          ! gravity [m/s2]
+      xlat=pi/4                       ! latitude in radians
+      xOmega=2.*pi/(24.*3600.)        ! earth rotation frequency [1/s]
+      f=2*xOmega*sin(xlat)            ! Coriolis parameter [1/s]
+c*****************************************************************************
+
+
+c*****************************************************************************
+c     Fluid properties
+c*****************************************************************************
+      rho_0=1000.                     ! characteristic density [kg/m3]
+      nu = 1.e-6                      ! viscosity [m2/s]  (3),(4)
+      kappa_1 = nu/1.                 ! diffusivity of scalar 1 [m2/s]
+      kappa_2 = nu/1.                 ! diffusivity of scalar 2 [m2/s]
+c*****************************************************************************
+c     dissipation scheme
+c     for DNS, i.e. nu grad^2 u, kappa grad^2 rho
+c     choose 'isotropic' and p=2, higher orders of p
+c     and anisotropic are undocumented currently
+      diss_flag='isotropic'           ! isotropic or anisotropic
+      p=2.                            ! order of (hyper)viscosity operator
+      T_diss=3000                     ! [s] decay time scale at maximim wavenumber 
+                                      ! ignored if diss_flag=isotropic and p=2 i.e. for DNS
+c*****************************************************************************
+
+c*****************************************************************************
+c     Additional user specified scales required to nondimensionalize 
+c     the equations of motion. (Lz,nu,kappa)
+c*****************************************************************************
+      DGRAD=1.0                ! char. scale of dens gradient [kg/m4]
+      s1_scale= 3              ! char. range of scalar 1 e.g. would be deg C if s1->Temp.
+      s2_scale= 1              ! char. range of scalar 2 e.g. would be psu if s2->Salinity.
+      U0=0.01                         ! char. velocity scale [m/s] 
+      bfreq = sqrt((g/rho_0)*DGRAD)   ! char. buoyancy frequency [1/s]  (=$=)
+c*****************************************************************************
+
+c*****************************************************************************
+c    Time step and execution control parameters
+c*****************************************************************************
+      dt=0.1                   ! integration time step  [s]  
+      t_start=0.0              ! starting time [s]
+      t_end=20*dt              ! ending time [s]          
+      vort_flag='no'           ! write out vorticity fields as well as velocity/density
+      t_stat=2*dt              ! time increment for calls to energetics [s]
+c*****************************************************************************
+
+c******************************************************************************
+c         Lagrangian "float" parameters
+c******************************************************************************
+      t_floats_on =t_start     ! float insertion time
+      z_close=0.5*dz/Lz        ! min. distance to upper/lower bdries
+                               ! that floats can attain [d'less]=[1]
+      z_offset=-0.5*dz/Lz      ! up offset for second float dens. measurement
+      delta_w=0.0/U0           ! float velocity due to residual buoyancy [1]
+c******************************************************************************
+
+c******************************************************************************
+c     Perturbed, "noisy" ICS parameter
+c******************************************************************************
+      efactor=0*1.e-4
+c     if efactor is nonzero, the (linear) vortical mode field is perturbed
+c     with a spectrum of "noise" (decays linearly with horiz. wavenumber) such
+c     that the total kinetic energy of the noise is a specified fraction of
+c     the horizontal kinetic energy of the deterministically specified ICs
+c     efactor=0.01 --> noise field has 1% of the HKE of the deterministic fields
+c******************************************************************************
Index: /trunk/SpectralModelF90/PROJECTS/trivial/rho_bar_func.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/rho_bar_func.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/rho_bar_func.f	(revision 6)
@@ -0,0 +1,73 @@
+      subroutine rho_bar_func(xprime,yprime,zprime,rho_bar,
+     *                        rho_bar_x,rho_bar_y,rho_bar_z,g2rb,
+     *                        p_bar_x,p_bar_y,Lz,DGRAD,U0,rho_0)
+c
+c     *****input arguments xprime,yprime,zprime are DIMENSIONLESS as are the
+c     *****output variables rho_bar,rho_bar_x,p_bar_x etc
+c
+c     (xprime,yprime,zprime):
+c              d'less vertical position
+c     Lz:    
+c              vertical domain length [m]
+c     DGRAD:
+c              characteristic density gradient used to scale variables [kg/m^4]
+c     U0   :
+c              characteristic velocity scale used in nondimensionalization
+c     rho_0:  
+c              reference drnsity [kg/m3]
+      
+c     rho_bar, rho_bar_x, rho_bar_y, rho_bar_z, g2rb
+c             density, and spatial gradients, g2rb=grad2(rho_bar)   [dimensional units]
+
+c     N.B.
+c     LZ,DGRAD, & U0 ARE OBTAINED BY THE CALLING MODULE
+c     FROM THE INPUT FILE input/problem_params.h. THEY ARE
+c     USED TO NONDIMENSIONALIZE THE RETURNED VALUES. YOU
+c     MAY OR MAY NOT WANT/NEED TO USE THEM IN YOUR DEFINITIONS
+
+      implicit none
+      real xprime,yprime,zprime
+      real Lz,DGRAD,U0,rho_0
+      real rho_bar,rho_bar_x,rho_bar_y,rho_bar_z,g2rb,p_bar_x,p_bar_y
+
+c     local variables
+      real x,y,z,DR,Lx,pi,g,arg
+
+
+
+c****    USER DEFINED DEFINITIONS START  HERE ******************************
+      x = xprime*Lz       ! use dimensional value to evaluate formulae
+      y = yprime*Lz       ! use dimensional value to evaluate formulae
+      z = zprime*Lz       ! use dimensional value to evaluate formulae
+
+      rho_bar = DGRAD*(Lz-z)
+      rho_bar_x = 0.0
+      rho_bar_y = 0.0
+      rho_bar_z = -DGRAD
+      g2rb = 0.0
+
+c     p_bar = -g rho_0 z - g* integral rho_bar (x,y,z') dz'
+c     only the quantities p_bar_x and p_bar_y are needed
+
+      p_bar_x = 0.0
+      p_bar_y = 0.0
+
+c****    USER DEFINED DEFINITIONS END HERE ******************************
+
+
+
+
+c     return nondimensional values
+c***  LEAVE THIS SECTION AS IS, SCALING MUST BE CONSISTENT
+c***  WITH THE REST OF THE ALGORITHM
+
+      rho_bar=rho_bar/(DGRAD*Lz)
+      rho_bar_x = rho_bar_x/(DGRAD)
+      rho_bar_y = rho_bar_y/(DGRAD)
+      rho_bar_z = rho_bar_z/(DGRAD)
+      g2rb = g2rb/(DGRAD/Lz)
+      p_bar_x = p_bar_x/( (rho_0*U0**2/Lz) )
+      p_bar_y = p_bar_y/( (rho_0*U0**2/Lz) )
+
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/rhs.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/rhs.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/rhs.f	(revision 6)
@@ -0,0 +1,189 @@
+	subroutine rhs(F1,F2,F3,F4,F5,s2u,s2v,s2w,ds2dz,s1u,s1v,s1w,
+     *                 p_cplx,Tr1,Tr2,Tr3,Tr4,Tr5,amp,dt,myid, 
+     *                 num_dims,locnx,ny,nz,wnx,wny,wnz,
+     *                 bc_flag) 
+
+C----------------------------------------------------------------------
+C  rhs - Computes the transfer terms for the momentum and pert. density
+c        equations. N.B. all terms included except viscous/diffusive
+c        terms which are integrated analytically.
+C
+C	input: F1,F2,F3 (complex arrays of locnx by ny+1 by nz+1)
+C		         i, j, k components of the cross product of velocity 
+C		         and vorticity + rotation & buoyancy
+C	       s1u, s1v, s1w   product of scalar (1) and the u, v, and w 
+C	       F4        -u dot grad s1_bar
+C              F5        -u dot grad s2_bar
+c              s2u,s2v,s2w        s2*u, s2*v, s2*w
+c              ds2dz     ds2dz
+C              p_cplx    transform of d/dz s1_bar
+C              amp       amplification arrays exp(-dt*gamma*"k"^p) (see fill_wave_vectors.f)
+C	       nx, ny, nz   (integers) - size of physical space data
+C              num_dims     number of dimensions 2(xz) or 3(xyz) z pos up
+C	       wnx, wny, wnz (real arrays of locnx, ny+1, nz+1, respectively)
+C		             contains x, y and z wavenumbers
+C              dt         dimensionless time step
+C
+C	 output: Tr1,Tr2,Tr3,Tr4 - contains the spectral representations of
+C		                   transfer terms for u, v, w and pert. density
+C              p_cplx    transform of pressure variable
+C
+C-----------------------------------------------------------------------
+
+        implicit none
+	integer locnx,ny,nz,num_dims,nyplanes,i,j,k,myid,isign
+	complex F1(locnx,ny+1,nz+1), F2(locnx,ny+1,nz+1)
+	complex F3(locnx,ny+1,nz+1), F4(locnx,ny+1,nz+1)
+	complex F5(locnx,ny+1,nz+1)
+	complex ds2dz(locnx,ny+1,nz+1)
+	complex s1u(locnx,ny+1,nz+1), s1v(locnx,ny+1,nz+1)
+	complex s1w(locnx,ny+1,nz+1),cmplxi
+	complex s2u(locnx,ny+1,nz+1), s2v(locnx,ny+1,nz+1)
+	complex s2w(locnx,ny+1,nz+1)
+	complex p_cplx(locnx,ny+1,nz+1),C
+	real amp(locnx,ny+1,nz+1,2)
+	complex Tr1(locnx,ny+1,nz+1),Tr2(locnx,ny+1,nz+1)
+	complex Tr3(locnx,ny+1,nz+1),Tr4(locnx,ny+1,nz+1)
+	complex Tr5(locnx,ny+1,nz+1)
+	real wnx(locnx),wny(ny+1),wnz(nz+1),kappa2,factor,dt
+	character*80 bc_flag
+	
+	cmplxi = (0.0,1.0)
+	if( num_dims .eq. 2 ) then
+	 nyplanes=1
+	elseif( num_dims .eq. 3 ) then
+	 nyplanes=ny
+	endif
+	
+	if( bc_flag .eq. 'zperiodic' ) then  ! fourier in 3d, --> d/dx --> ik
+         C= -cmplxi
+         do k = 1, nz
+          do j = 1, nyplanes
+           do i = 1,locnx
+
+            kappa2 = (wnx(i)**2) + (wny(j)**2) + (wnz(k)**2)
+            if (kappa2 .eq. 0.0) then
+             kappa2 = 1.e33
+             F1(i,j,k)=0.
+             F2(i,j,k)=0.
+             F3(i,j,k)=0.
+            endif
+            if( amp(i,j,k,2) .eq. 0 .or. wnz(k) .eq. 0 ) then
+             factor=0.0
+            else
+             factor = (-C/wnz(k))*log( amp(i,j,k,2) )/dt    ! strip -gamma*"k"^p from amp, mult by -i or 1 over m
+            endif
+
+C+
+C  scalar s1 and s2 equations: Tr4, Tr5
+C-
+	    Tr4(i,j,k) = -cmplxi*wnx(i)*s1u(i,j,k)
+     *                   -cmplxi*wny(j)*s1v(i,j,k)
+     *                   -cmplxi*wnz(k)*s1w(i,j,k)
+     *                   +F4(i,j,k) + factor*p_cplx(i,j,k)   ! p_cplx has transform of d/dz s1_bar
+
+	    Tr5(i,j,k) = -cmplxi*wnx(i)*s2u(i,j,k)
+     *                   -cmplxi*wny(j)*s2v(i,j,k)
+     *                   -cmplxi*wnz(k)*s2w(i,j,k)
+     *                   +F5(i,j,k) + factor*ds2dz(i,j,k)
+
+
+C+
+C  u, v & w equations: Tr1, Tr2, Tr3
+C-
+	    Tr1(i,j,k) = ((wny(j)**2 + wnz(k)**2)/kappa2)*F1(i,j,k)
+     *                   - (wnx(i)*wny(j)/kappa2)*F2(i,j,k)
+     *                   - (wnx(i)*wnz(k)/kappa2)*F3(i,j,k)  
+
+	    Tr2(i,j,k) = - (wnx(i)*wny(j)/kappa2)*F1(i,j,k)
+     *                   + ((wnx(i)**2 + wnz(k)**2)/kappa2)*F2(i,j,k)
+     *                   - (wny(j)*wnz(k)/kappa2)*F3(i,j,k)
+
+	    Tr3(i,j,k) = - (wnx(i)*wnz(k)/kappa2)*F1(i,j,k)
+     *                   - (wny(j)*wnz(k)/kappa2)*F2(i,j,k)
+     *                   + ((wnx(i)**2 + wny(j)**2)/kappa2)*F3(i,j,k)
+
+C
+C calculate pressure 
+C
+            p_cplx(i,j,k) = -(cmplxi*wnx(i)*F1(i,j,k)+cmplxi*wny(j)*F2(i,j,k)
+     *                        +cmplxi*wnz(k)*F3(i,j,k))/kappa2                  ! overwrite w/ pressure transform
+
+           enddo
+          enddo
+         enddo
+
+	elseif( bc_flag .eq. 'zslip' ) then  ! sin/cos polarity for z derivatives
+         C= 1.0
+
+         isign=-1   ! see rhs for s1 eqn
+
+         do k = 1, nz+1
+          do j = 1, nyplanes
+           do i = 1, locnx
+
+            kappa2 = (wnx(i)**2) + (wny(j)**2) + (wnz(k)**2)
+            if (kappa2 .eq. 0.0) then
+             kappa2 = 1.e33
+             F1(i,j,k)=0.
+             F2(i,j,k)=0.
+             F3(i,j,k)=0.
+            endif
+            if( amp(i,j,k,2) .eq. 0 .or. wnz(k) .eq. 0 ) then
+             factor=0.0
+            else
+             factor = (-C/wnz(k))*log( amp(i,j,k,2) )/dt    ! strip -gamma*"k"^p from amp, mult by -i or 1 over m
+            endif
+
+C+
+C  scalar s1 and s2 equations: Tr4, Tr5
+C-
+	    Tr4(i,j,k) = - cmplxi*wnx(i)*s1u(i,j,k)
+     *                   - cmplxi*wny(j)*s1v(i,j,k)
+     *                   - isign*wnz(k)*s1w(i,j,k)
+     *                   + F4(i,j,k) + factor*p_cplx(i,j,k)   ! p_cplx has transform of d/dz rho_bar on input
+
+	    Tr5(i,j,k) = -cmplxi*wnx(i)*s2u(i,j,k)
+     *                   -cmplxi*wny(j)*s2v(i,j,k)
+     *                   -isign*wnz(k)*s2w(i,j,k)
+     *                   +F5(i,j,k) + factor*ds2dz(i,j,k)
+
+C+
+C  u, v & w equations: Tr1, Tr2, Tr3
+C-
+	    Tr1(i,j,k) = ((wny(j)**2 + wnz(k)**2)/kappa2)*F1(i,j,k)
+     *                   - (wnx(i)*wny(j)/kappa2)*F2(i,j,k)
+     *                   + (cmplxi*wnx(i)*wnz(k)/kappa2)*F3(i,j,k)  
+
+	    Tr2(i,j,k) = - (wnx(i)*wny(j)/kappa2)*F1(i,j,k)
+     *                  + ((wnx(i)**2 + wnz(k)**2)/kappa2)*F2(i,j,k)
+     *                  + (cmplxi*wny(j)*wnz(k)/kappa2)*F3(i,j,k)
+
+
+	    Tr3(i,j,k) = - (cmplxi*wnx(i)*wnz(k)/kappa2)*F1(i,j,k)
+     *                   - (cmplxi*wny(j)*wnz(k)/kappa2)*F2(i,j,k)
+     *                   + ((wnx(i)**2 + wny(j)**2)/kappa2)*F3(i,j,k)
+
+C
+C calculate pressure 
+C
+            p_cplx(i,j,k) = -(cmplxi*wnx(i)*F1(i,j,k)+cmplxi*wny(j)*F2(i,j,k)
+     *                        +wnz(k)*F3(i,j,k))/kappa2                  ! overwrite w/ pressure transform
+
+           enddo
+          enddo
+         enddo
+	 
+	endif
+
+        if( myid .eq. 0 ) then  ! 1,1,1 location corresponds to (k,l,m)=(0,0,0)
+         Tr1(1,1,1) = F1(1,1,1)   !  Rot*v
+         Tr2(1,1,1) = F2(1,1,1)   ! -Rot*u
+C        disallow net vertical velocity 
+         Tr3(1,1,1) = 0.
+c        set mean pressure to zero
+         p_cplx(1,1,1) = 0.
+        endif
+
+	return
+	end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/rk4_even.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/rk4_even.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/rk4_even.f	(revision 6)
@@ -0,0 +1,151 @@
+      subroutine rk4_even(dt,k_rk4,float_variables,float_parameters,Lz,s1_scale,s2_scale,
+     *                    locnx,ny,nz,nfloats,nfloatparams,nsensors,N,NM1,
+     *                    u,v,w,s1,s2,wnx,wny,wnz,bc_flag,Pr,Re,myid,comm)
+
+c
+c     Routine to update k1, k2 and k3 in the RK4 algorithm for
+c     each float variable and each float.
+c
+
+      implicit none
+      integer locnx,ny,nz,nfloats,nfloatparams,nsensors,N,NM1
+      integer myid,comm,i
+      real dt,k_rk4(5,nfloats,4)    ! 5 variables  governed by odes
+      real float_variables(6,nfloats)
+      real float_parameters(nfloatparams,nfloats),Lz,s1_scale,s2_scale
+      complex u(locnx,ny+1,nz+1,2),v(locnx,ny+1,nz+1,2)
+      complex w(locnx,ny+1,nz+1,2),s1(locnx,ny+1,nz+1,2)
+      complex s2(locnx,ny+1,nz+1,2)
+      real wnx(locnx),wny(ny+1),wnz(nz+1)
+      character*80 bc_flag
+      character*1 u_flag,v_flag,w_flag,s1_flag,s2_flag
+      real x0,y0,z0,Pr,Re,PrRe,u_fluid,v_fluid,w_fluid,s1_bar,g2s1b,junk,xx,grad2_s1
+      real s2_bar,g2s2b,grad2_s2
+
+
+      if( bc_flag .eq. 'zslip' ) then
+       u_flag='c'
+       v_flag='c'
+       w_flag='s'
+       s1_flag='s'
+       s2_flag='s'
+      elseif( bc_flag .eq. 'zperiodic' ) then
+       u_flag='f'
+       v_flag='f'
+       w_flag='f'
+       s1_flag='f'
+       s2_flag='f'
+      endif
+      PrRe=Pr*Re
+      xx=1.0
+
+
+c     main loop through all floats
+
+      do i=1,nfloats
+c
+c      evaluate k1 for x,y,z,T_float and rho_lagrangian  i.e. variables 1-5
+c
+       x0 = float_variables(1,i)    ! time N x position (wrt 2dt time grid)
+       y0 = float_variables(2,i)    ! time N y position (wrt 2dt time grid)
+       z0 = float_variables(3,i)    ! time N z position (wrt 2dt time grid)
+
+c      u_fluid <--- u(x0,y0,z0)
+       call ds_interp(x0,y0,z0,u(1,1,1,N),wnx,wny,wnz,locnx,ny,nz,
+     *                u_flag,u_fluid,myid,comm)
+
+c      v_fluid <--- v(x0,y0,z0)
+       call ds_interp(x0,y0,z0,v(1,1,1,N),wnx,wny,wnz,locnx,ny,nz,
+     *                 v_flag,v_fluid,myid,comm)
+
+c      w_fluid <--- w(x0,y0,z0)
+       call ds_interp(x0,y0,z0,w(1,1,1,N),wnx,wny,wnz,locnx,ny,nz,
+     *                 w_flag,w_fluid,myid,comm)
+
+c      grad2_s1 <--- laplacian s1(x0,y0,z0)
+       call ds_L_interp(x0,y0,z0,s1(1,1,1,N),wnx,wny,wnz,locnx,ny,nz,
+     *                  s1_flag,grad2_s1,myid,comm)
+       call s1_bar_func(x0,y0,z0,s1_bar,junk,junk,junk,g2s1b,Lz,s1_scale)
+
+c
+c      here k1 = u_float is set equal to u_fluid etc, generalizations possible
+c
+       k_rk4(1,i,1) = u_fluid    ! variable 1 = x_float
+       k_rk4(2,i,1) = v_fluid    ! variable 2 = y_float
+       k_rk4(3,i,1) = w_fluid  
+     *              + float_parameters(3,i)   ! variable 3 = z_float
+       k_rk4(4,i,1) = 0.0        ! variable 4 = temperature_float
+       k_rk4(5,i,1) = (1./PrRe)*(grad2_s1+g2s1b) ! var 5 = Lagrangian scalar 1
+
+c
+c      evaluate k2 for x,y,z,T_float and rho_lagrangian  i.e. variables 1-5
+c      time evaluated at  t_n+dt (N+1/2 on Lagrangian time grid), stored in "NM1" 
+c      position evaluated at (x_N + dt*k1)
+c
+       x0 = float_variables(1,i) + dt*k_rk4(1,i,1)
+       y0 = float_variables(2,i) + dt*k_rk4(2,i,1)
+       z0 = float_variables(3,i) + dt*k_rk4(3,i,1)
+
+c      u_fluid <--- u(x0,y0,z0)
+       call ds_interp(x0,y0,z0,u(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                u_flag,u_fluid,myid,comm)
+
+c      v_fluid <--- v(x0,y0,z0)
+       call ds_interp(x0,y0,z0,v(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                v_flag,v_fluid,myid,comm)
+
+c      w_fluid <--- w(x0,y0,z0)
+       call ds_interp(x0,y0,z0,w(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                w_flag,w_fluid,myid,comm)
+
+c      grad2_s1 <--- laplacian s1(x0,y0,z0)
+       call ds_L_interp(x0,y0,z0,s1(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                  s1_flag,grad2_s1,myid,comm)
+       call s1_bar_func(x0,y0,z0,s1_bar,junk,junk,junk,g2s1b,Lz,s1_scale)
+
+       k_rk4(1,i,2) = u_fluid    ! variable 1 = x_float
+       k_rk4(1,i,2) = u_fluid    ! variable 1 = x_float
+       k_rk4(2,i,2) = v_fluid    ! variable 2 = y_float
+       k_rk4(3,i,2) = w_fluid    
+     *              + float_parameters(3,i)  ! variable 3 = z_float
+       k_rk4(4,i,2) = 0.0        ! variable 4 = temperature_float
+       k_rk4(5,i,2) = (1./PrRe)*(grad2_s1+g2s1b) ! variable 5 = Lagrangian scalar 1
+
+c
+c      evaluate k3 for x,y,z,T_float and rho_lagrangian  i.e. variables 1-5
+c      time evaluated at  t_n+dt (N+1/2 on Lagrangian time grid), stored in "NM1" 
+c      position evaluated at (x_N + dt*k2)
+c
+       x0 = float_variables(1,i) + dt*k_rk4(1,i,2)
+       y0 = float_variables(2,i) + dt*k_rk4(2,i,2)
+       z0 = float_variables(3,i) + dt*k_rk4(3,i,2)
+
+c      u_fluid <--- u(x0,y0,z0)
+       call ds_interp(x0,y0,z0,u(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                u_flag,u_fluid,myid,comm)
+
+c      v_fluid <--- v(x0,y0,z0)
+       call ds_interp(x0,y0,z0,v(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                v_flag,v_fluid,myid,comm)
+
+c      w_fluid <--- w(x0,y0,z0)
+       call ds_interp(x0,y0,z0,w(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                w_flag,w_fluid,myid,comm)
+
+c      grad2_s1 <--- laplacian s1(x0,y0,z0)
+       call ds_L_interp(x0,y0,z0,s1(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                  s1_flag,grad2_s1,myid,comm)
+       call s1_bar_func(x0,y0,z0,s1_bar,junk,junk,junk,g2s1b,Lz,s1_scale)
+
+       k_rk4(1,i,3) = u_fluid    ! variable 1 = x_float
+       k_rk4(2,i,3) = v_fluid    ! variable 2 = y_float
+       k_rk4(3,i,3) = w_fluid    
+     *              + float_parameters(3,i)  ! variable 3 = z_float
+       k_rk4(4,i,3) = 0.0        ! variable 4 = temperature_float
+       k_rk4(5,i,3) = (1./PrRe)*(grad2_s1+g2s1b) ! variable 5 = Lagrangian scalar 1
+ 
+
+      enddo
+
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/rk4_odd.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/rk4_odd.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/rk4_odd.f	(revision 6)
@@ -0,0 +1,174 @@
+      subroutine rk4_odd(dt,k_rk4,float_variables,float_parameters,Lz,s1_scale,s2_scale,
+     *                    locnx,ny,nz,nfloats,nfloatparams,nsensors,N,NM1,
+     *                    u,v,w,s1,s2,wnx,wny,wnz,bc_flag,Pr,Re,sensor_data,myid,comm)
+
+c
+c     Routine to update k4 of the RK4 algorithm, 
+c     the float variables and the sensor data for
+c     each float.
+c
+c         sensors 1,2  s1 and s1 at z_up, i.e. slightly displaced point in z
+c         sensors 6,7  s2 and s2 at z_up, i.e. slightly displaced point in z
+c         sensors 3-5  u,v and w at z_up, i.e. slightly displaced point in z
+
+      implicit none
+      integer myid,comm,i,j
+      integer locnx,ny,nz,nfloats,nfloatparams,nsensors,N,NM1
+      real dt,k_rk4(5,nfloats,4)    ! 5 variables  governed by odes
+      real float_variables(6,nfloats),sensor_data(nsensors,nfloats)
+      real float_parameters(nfloatparams,nfloats),Lz,DGRAD,S1GRAD,xx
+      complex u(locnx,ny+1,nz+1,2),v(locnx,ny+1,nz+1,2)
+      complex w(locnx,ny+1,nz+1,2),s1(locnx,ny+1,nz+1,2)
+      complex s2(locnx,ny+1,nz+1,2)
+      real wnx(locnx),wny(ny+1),wnz(nz+1)
+      real u_fluid,v_fluid,w_fluid,grad2_s1,s1_bar,g2s1b,junk
+      real grad2_s2,s2_bar,g2s2b,eul_s1,eul_s2
+      real u_up,v_up,w_up
+      real phi_1,phi_2,phi_3,phi_4,phi_5,ZMAX,ZMIN,z_up
+      character*80 bc_flag,u_flag,v_flag,w_flag,s1_flag,s2_flag
+      real x0,y0,z0,Pr,Re,PrRe,phi(5),s1_scale,s2_scale
+
+      if( bc_flag .eq. 'zslip' ) then
+       u_flag='c'
+       v_flag='c'
+       w_flag='s'
+       s1_flag='s'
+       s2_flag='s'
+      elseif( bc_flag .eq. 'zperiodic' ) then
+       u_flag='f'
+       v_flag='f'
+       w_flag='f'
+       s1_flag='f'
+       s2_flag='f'
+      endif
+      PrRe=Pr*Re
+      xx=1.
+
+
+c     main loop through all floats
+
+      do i=1,nfloats
+c
+c      evaluate k4 for x,y,z,T_float and rho_lagrangian  i.e. variables 1-5
+c      time evaluated at  t_n-1+2dt (N+1 on Lagrangian time grid), stored in "NM1" 
+c      position evaluated at (x_N + 2*dt*k3)
+c
+       x0 = float_variables(1,i) + 2.*dt*k_rk4(1,i,3)
+       y0 = float_variables(2,i) + 2.*dt*k_rk4(2,i,3)
+       z0 = float_variables(3,i) + 2.*dt*k_rk4(3,i,3)
+
+c      u_fluid <--- u(x0,y0,z0)
+       call ds_interp(x0,y0,z0,u(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                u_flag,u_fluid,myid,comm)
+
+c      v_fluid <--- v(x0,y0,z0)
+       call ds_interp(x0,y0,z0,v(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                v_flag,v_fluid,myid,comm)
+
+c      w_fluid <--- w(x0,y0,z0)
+       call ds_interp(x0,y0,z0,w(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                w_flag,w_fluid,myid,comm)
+
+c      grad2_s1 <--- laplacian s1(x0,y0,z0)
+       call ds_L_interp(x0,y0,z0,s1(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                  s1_flag,grad2_s1,myid,comm)
+       call s1_bar_func(x0,y0,z0,s1_bar,junk,junk,junk,g2s1b,Lz,s1_scale)
+
+       k_rk4(1,i,4) = u_fluid    ! variable 1 = x_float
+       k_rk4(2,i,4) = v_fluid    ! variable 2 = y_float
+       k_rk4(3,i,4) = w_fluid  
+     *              + float_parameters(3,i)   ! variable 3 = z_float
+       k_rk4(4,i,4) = 0.0        ! variable 4 = temperature_float
+       k_rk4(5,i,4) = (1./PrRe)*(grad2_s1+g2s1b) ! variable 5 = Lagrangian density
+
+c
+c      update float_variables, overwrite values
+c
+       phi_1=( k_rk4(1,i,1) + 2.*k_rk4(1,i,2) + 2.*k_rk4(1,i,3) + k_rk4(1,i,4) )/6.
+       phi_2=( k_rk4(2,i,1) + 2.*k_rk4(2,i,2) + 2.*k_rk4(2,i,3) + k_rk4(2,i,4) )/6.
+       phi_3=( k_rk4(3,i,1) + 2.*k_rk4(3,i,2) + 2.*k_rk4(3,i,3) + k_rk4(3,i,4) )/6.
+       phi_4=( k_rk4(4,i,1) + 2.*k_rk4(4,i,2) + 2.*k_rk4(4,i,3) + k_rk4(4,i,4) )/6.
+       phi_5=( k_rk4(5,i,1) + 2.*k_rk4(5,i,2) + 2.*k_rk4(5,i,3) + k_rk4(5,i,4) )/6.
+
+       float_variables(1,i) = float_variables(1,i) + 2.*dt*phi_1  ! x location
+       float_variables(2,i) = float_variables(2,i) + 2.*dt*phi_2  ! y location
+       float_variables(3,i) = float_variables(3,i) + 2.*dt*phi_3  ! z location
+       float_variables(4,i) = float_variables(4,i) + 2.*dt*phi_4  ! float temp.
+       float_variables(5,i) = float_variables(5,i) + 2.*dt*phi_5  ! Lag. density
+       float_variables(6,i) = float_variables(6,i)                ! float density 
+
+c      keep floats away from boundaries: if they end up within a distance
+c      of z_close, move the float to a distance equal to z_close
+
+       ZMAX=1.-float_parameters(2,i)    ! dimensionless
+       ZMIN=float_parameters(2,i)       ! dimensionless
+
+       if( float_variables(3,i) .gt. ZMAX ) then
+        float_variables(3,i)=ZMAX
+       elseif( float_variables(3,i) .lt. ZMIN ) then
+        float_variables(3,i)=ZMIN
+       endif
+     
+c
+c      query sensors at new float locations
+c
+        x0 = float_variables(1,i)    ! time N+1 x position (wrt 2dt time grid)
+        y0 = float_variables(2,i)    ! time N+1 y position (wrt 2dt time grid)
+        z0 = float_variables(3,i)    ! time N+1 z position (wrt 2dt time grid)
+        z_up = z0 + float_parameters(4,i)    
+
+c       eul_s1 <--- s1(x0,y0,z0)  , s1_bar<--- s1_bar(z0) 
+        call ds_interp(x0,y0,z0,s1(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                 s1_flag,eul_s1,myid,comm)
+        call s1_bar_func(x0,y0,z0,s1_bar,junk,junk,junk,g2s1b,Lz,s1_scale)
+c
+c       sensor(1,:) eulerian total s1 at float position
+        sensor_data(1,i) = eul_s1 + s1_bar
+ 
+c       query flow field for density slightly above float position (for ds1dz)
+c       eul_s1 <--- s1(x0,y0,z_up)  , s1_bar<--- rho_bar(z_up) 
+        call ds_interp(x0,y0,z_up,s1(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                 s1_flag,eul_s1,myid,comm)
+        call s1_bar_func(x0,y0,z_up,s1_bar,junk,junk,junk,g2s1b,Lz,s1_scale)
+c
+c       sensor(2,:) eulerian density just above float position
+        sensor_data(2,i) = eul_s1 + s1_bar
+    
+c       eul_s2 <--- s2(x0,y0,z0)  , s2_bar<--- s2_bar(z0) 
+        call ds_interp(x0,y0,z0,s2(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                 s2_flag,eul_s2,myid,comm)
+        call s2_bar_func(x0,y0,z0,s2_bar,junk,junk,junk,g2s2b,Lz,s2_scale)
+c
+c       sensor(6,:) eulerian scalar (1) at float position
+        sensor_data(6,i) = eul_s2 + s2_bar
+ 
+c       query flow field for scalar (2) slightly above float position (for ds2dz)
+c       eul_s2 <--- s2(x0,y0,z_up)  , s2_bar<--- s2_bar(z_up) 
+        call ds_interp(x0,y0,z_up,s2(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                 s2_flag,eul_s2,myid,comm)
+        call s2_bar_func(x0,y0,z_up,s2_bar,junk,junk,junk,g2s2b,Lz,S1GRAD)
+c
+c       sensor(7,:) eulerian density just above float position
+        sensor_data(7,i) = eul_s2 + s2_bar
+
+c       query flow field for velocity slightly above float position (for d/dz)
+c       u_up <--- u(x0,y0,z_up)  
+        call ds_interp(x0,y0,z_up,u(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                 u_flag,u_up,myid,comm)
+c       v_up <--- v(x0,y0,z_up)  
+        call ds_interp(x0,y0,z_up,v(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                 v_flag,v_up,myid,comm)
+c       w_up <--- w(x0,y0,z_up)  
+        call ds_interp(x0,y0,z_up,w(1,1,1,NM1),wnx,wny,wnz,locnx,ny,nz,
+     *                 w_flag,w_up,myid,comm)
+
+c
+c       sensor(3-5,:) eulerian (u,v,w) just above float position
+        sensor_data(3,i) = u_up
+        sensor_data(4,i) = v_up
+        sensor_data(5,i) = w_up
+
+      enddo     ! go to next float
+
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/runtime_initialization.h
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/runtime_initialization.h	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/runtime_initialization.h	(revision 6)
@@ -0,0 +1,70 @@
+c***************************************************************
+c     BEGIN RUNTIME INITIALIZATION
+c***************************************************************
+
+	if(ny .eq. 0) then
+		num_dims = 2
+	else
+		num_dims = 3
+	endif
+
+      if( myid .eq. 0 ) then
+       write(6,*) ' '
+       write(6,*) ' '
+       write(6,*)'problem_params.h executed via include statement: flow_solve.x'
+      endif
+ 
+      t_write_selective=-999999*dt    ! not implemented yet
+      if(num_dims .eq. 2) then
+       Ly=1.0                         ! 2d calculation, per unit length in y [m]
+       nyplanes=1                     ! parameter ny is zero for 2d xz calcs
+      else
+       nyplanes=ny
+      endif
+
+c     Create specialized data structure for MPI data swaps
+      call create_MPI_data_type(nx,ny,nz,locnx,locnz,twoslice,subslice,myid,comm)
+      call MPI_BARRIER(comm,ierr)
+
+c     Prescribe initial conditions and nondimensionalize variables
+      istart_floats=(t_floats_on-t_start)/dt    ! step to begin float tracking
+      call initialize(u,v,w,s1,s2,ambient_density,u_cplx,v_cplx,w_cplx,s1_cplx,s2_cplx,
+     *                nx,ny,nz,num_dims,efactor,
+     *                Lx,Ly,Lz,dx,dy,dz,U0,DGRAD,s1_scale,s2_scale,rho_0,f,g,kappa_1,kappa_2,nu,
+     *                bc_flag,ifax,ifay,ifaz,trigx,trigy,trigz,wn,
+     *                wnx,wny,wnz,amp,p,T_diss,diss_flag,N,NM1,M,MM1,MM2,step_flag,
+     *                Rot,Ri,Re,Pr_1,Pr_2,istart,iend,i_all,i_selective,i_stat,
+     *                dt,t_start,t_end,t_write_selective,
+     *                t_stat,xt,work(1,1,1,1),work_cplx(1,1,1,8),myid,
+     *                numprocs,locnx,locnz,comm,twoslice,subslice,work(1,1,1,8),
+     *                netcdf_file,nyplanes,force_cplx,force_flag,
+     *                work(1,1,1,2),scalars)
+
+
+c     Check accuracy of spectral interpolation:
+c     (a) reproduce initial u(z) profile at x=y=0
+c     i=1  
+c     j=1
+c     if( myid .eq. 0 ) open(1,file='output/interp_check')
+c     do k=1,nz+1
+
+c      dimensionless positions i.e. on gridpoints
+c      x0=(i-1.)*dx/Lz
+c      y0=(j-1.)*dy/Lz
+c      z0=(k-1.)*dz/Lz
+
+c      interpolate to find u on grid points
+c      fcs_flag='c'
+c      call ds_interp(x0,y0,z0,u_cplx(1,1,1,N),wnx,wny,wnz,locnx,ny,nz,
+c    *                fcs_flag,interp_val,myid,comm)
+c      if( myid .eq. 0 ) write(1,*) x0*Lz,y0*Lz,z0*Lz,interp_val*U0
+
+c     enddo
+
+      if( myid .eq. 0 ) write(0,*) 'runtime initialization completed'
+      if( myid .eq. 0 ) write(6,*) 'runtime initialization completed'
+      if( myid .eq. 0 ) close(1)
+
+c***************************************************************
+c     END RUNTIME INITIALIZATION
+c***************************************************************
Index: /trunk/SpectralModelF90/PROJECTS/trivial/runtime_variables.h
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/runtime_variables.h	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/runtime_variables.h	(revision 6)
@@ -0,0 +1,14 @@
+c     Resolution and decomposition control
+      integer numprocs, nx, ny, nz
+
+      parameter(numprocs=1)
+      parameter(nx=32)
+      parameter(ny=32)              ! set y=0 for 2d problems in xz plane
+      parameter(nz=32)  
+
+
+c     Lagrangian float parameters
+      integer nfloats,floats
+      character*80 float_switch
+      parameter(float_switch='off')
+      parameter(nfloats=1)
Index: /trunk/SpectralModelF90/PROJECTS/trivial/s1_bar_func.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/s1_bar_func.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/s1_bar_func.f	(revision 6)
@@ -0,0 +1,70 @@
+      subroutine s1_bar_func(xprime,yprime,zprime,s1_bar,
+     *                        s1_bar_x,s1_bar_y,s1_bar_z,g2s1b,
+     *                        Lz,s1_scale)
+c
+c     *****input arguments xprime,yprime,zprime are DIMENSIONLESS as are all returned values
+c     (xprime,yprime,zprime):     d'less spatial position
+c     Lz:                         vertical size of computational domain [m]
+c     s1_scale:                   characteristic range of s1 values, used to scale s1
+c                                 units are dimensional, e.g. deg C for s1-->Temp.
+      
+c     *****output variables, these need to be specified in this routine
+c             s1_bar, s1_bar_x, s1_bar_y, s1_bar_z, g2s1b
+c             scalar concentration, and spatial gradients, g2s1b=grad2(s1_bar)   [dimensional units]
+
+      implicit none
+      real xprime,yprime,zprime
+      real Lz,s1_scale
+      real s1_bar,s1_bar_x,s1_bar_y,s1_bar_z,g2s1b
+
+c     local variables: you may need some intermediate variables,
+c                      these need to be explicitly declared here
+      real x,y,z,s1_min
+
+c     it may be convenient to know the dimensional spatial location (x,y,z) in [m], so we compute it
+      x = xprime*Lz       ! use dimensional value to evaluate formulae
+      y = yprime*Lz       ! use dimensional value to evaluate formulae
+      z = zprime*Lz       ! use dimensional value to evaluate formulae
+
+
+c****    USER CUSTOMIZED CODE SEGMENT STARTS  HERE ******************************
+c^^^^^^ FOR NOW, ONLY LET S1_BAR DEPEND ON Z, NOT, X OR Y ^^^^^^^^^^^^^^^^^^^^^^^
+c     Example: stable, linear stratification in (potential) temperature
+      s1_min = 15.0                             ! we're working here w/ s1-->Temp. in deg C
+
+      s1_bar = s1_min + ((s1_scale)/(Lz))*(z)   ! [deg C]
+      s1_bar_x = 0.0                            ! [deg C/m]
+      s1_bar_y = 0.0                            ! [deg C/m]
+      s1_bar_z = s1_scale/Lz                    ! [deg C/m]
+      g2s1b = 0.0                               ! [deg C/m^2]
+
+c****    USER DEFINED CODE SEGMENT ENDS HERE ********************************
+
+
+
+
+c***  LEAVE THIS SECTION AS IS, SCALING MUST BE CONSISTENT********************
+c***  WITH THE REST OF THE ALGORITHM  ****************************************
+      s1_bar=s1_bar/(s1_scale)
+      s1_bar_x = s1_bar_x/(s1_scale/Lz)
+      s1_bar_y = s1_bar_y/(s1_scale/Lz)
+      s1_bar_z = s1_bar_z/(s1_scale/Lz)
+      g2s1b = g2s1b/(s1_scale/Lz**2)
+c*****************************************************************************
+c*****************************************************************************
+
+      return
+      end
+
+c It may seem odd to have the inputs in dimensionless form
+c when it is usually convenient for the user to define the
+c ambient quantities in dimensional form. Also, we have a
+c **do not touch** section of code that converts the user
+c specified dimenaional quantities back to dimensionless form.
+c I chose to do it this way because this function gets called
+c from so many places in the code, it would be a pain and
+c a potential source of typos to do the scalings just before
+c and just after each call. This is not the case with 
+c user_defined_ics and user_defined_forcing. These routines
+c get called in one location only and so it makes sense to
+c make the scaling "invisible" to the user.
Index: /trunk/SpectralModelF90/PROJECTS/trivial/s2_bar_func.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/s2_bar_func.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/s2_bar_func.f	(revision 6)
@@ -0,0 +1,74 @@
+      subroutine s2_bar_func(xprime,yprime,zprime,s2_bar,
+     *                        s2_bar_x,s2_bar_y,s2_bar_z,g2s2b,
+     *                        Lz,s2_scale)
+c
+c     *****input arguments xprime,yprime,zprime are DIMENSIONLESS as are all returned values
+c     (xprime,yprime,zprime):     d'less spatial position
+c     Lz:                         vertical size of computational domain [m]
+c     s2_scale:                   characteristic range of s2 values, used to scale s2
+c                                 units are dimensional, e.g. psu for s2-->Salinity
+      
+c     *****output variables, these need to be specified in this routine
+c             s2_bar, s2_bar_x, s2_bar_y, s2_bar_z, g2s2b
+c             scalar concentration, and spatial gradients, g2s2b=grad2(s2_bar)   [dimensional units]
+
+      implicit none
+      real xprime,yprime,zprime
+      real Lz,s2_scale
+      real s2_bar,s2_bar_x,s2_bar_y,s2_bar_z,g2s2b
+
+c     local variables: you may need some intermediate variables,
+c                      these need to be explicitly declared here
+      real x,y,z,s2_max
+
+c     it may be convenient to know the dimensional spatial location (x,y,z) in [m], so we compute it
+      x = xprime*Lz       ! use dimensional value to evaluate formulae
+      y = yprime*Lz       ! use dimensional value to evaluate formulae
+      z = zprime*Lz       ! use dimensional value to evaluate formulae
+
+
+c****    USER CUSTOMIZED CODE SEGMENT STARTS  HERE ******************************
+c^^^^^^ FOR NOW, ONLY LET S2_BAR DEPEND ON Z, NOT X OR Y ^^^^^^^^^^^^^^^^^^^^^^^^
+
+c     Example: stable, linear salt stratification 
+      s2_max = 35.0     ! we're working here w/ s2-->Salinity in psu
+
+      s2_bar = s2_max - ((s2_scale)/(Lz))*(z)
+      s2_bar_x = 0.0
+      s2_bar_y = 0.0
+      s2_bar_z = s2_scale/Lz
+      g2s2b = 0.0
+
+c****    USER DEFINED ODE SEGMENT ENDS HERE ********************************
+
+
+
+
+c     
+c***  LEAVE THIS SECTION AS IS, SCALING MUST BE CONSISTENT********************
+c***  WITH THE REST OF THE ALGORITHM  ****************************************
+      s2_bar=s2_bar/(s2_scale)
+      s2_bar_x = s2_bar_x/(s2_scale/Lz)
+      s2_bar_y = s2_bar_y/(s2_scale/Lz)
+      s2_bar_z = s2_bar_z/(s2_scale/Lz)
+      g2s2b = g2s2b/(s2_scale/Lz**2)
+c*****************************************************************************
+c*****************************************************************************
+
+      return
+      end
+
+
+
+c It may seem odd to have the inputs in dimensionless form
+c when it is usually convenient for the user to define the
+c ambient quantities in dimensional form. Also, we have a
+c **do not touch** section of code that converts the user
+c specified dimenaional quantities back to dimensionless form.
+c I chose to do it this way because this function gets called
+c from so many places in the code, it would be a pain and
+c a potential source of typos to do the scalings just before
+c and just after each call. This is not the case with 
+c user_defined_ics and user_defined_forcing. These routines
+c get called in one location only and so it makes sense to
+c make the scaling "invisible" to the user.
Index: /trunk/SpectralModelF90/PROJECTS/trivial/slabs_to_columns.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/slabs_to_columns.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/slabs_to_columns.f	(revision 6)
@@ -0,0 +1,88 @@
+      subroutine slabs_to_columns(x,xc,nx,ny,nz,locnx,locnz,numprocs,
+     *                            myid,comm,twoslice,subslice,buffer)
+
+c     Routine to swap data from "slab" orientation to "column"  orientation.
+c     See data maps for details. Relies on the specialized data  structures
+c     "subslice" and "twoslice" defined in "create_MPI_data_type".
+
+      implicit none
+#include "mpif.h"
+      integer MAXPROCS,BYTESPERWORD,NUMBUFS
+      parameter(MAXPROCS=1024,BYTESPERWORD=4,NUMBUFS=2)
+      integer nx,ny,nz,locnx,locnz,numprocs,myid
+      integer comm,twoslice,subslice,ierr
+      integer status_array(MPI_STATUS_SIZE,3*MAXPROCS+1)
+      real x(nx+2,ny+1,locnz+1),buffer((nx+2)*(ny+1)*(locnz+1))
+      complex xc(locnx,ny+1,nz+1)
+
+      integer iproc,istart,kstart,source,dest,numwords,tag
+      integer j,nreqs,reqs(3*MAXPROCS+1),k,i
+
+      character*80 msg_text
+      integer msg_len,jerr
+
+c     Ship portions of my local data "slab" x needed by other nodes
+c     and recieve remote data required to construct my local data
+c     "column" xc.
+
+c     All processors initiate nonblocking receives, establishing  buffers for the sends
+      do iproc=0,numprocs-1
+       kstart=(iproc*locnz)+1    ! start index for recieving "complex"  data xc
+       source=iproc
+       numwords=2*locnx*(ny+1)*locnz  !# of real words to store in xc  w/ each send
+       tag = 1
+       j=iproc+1
+       call  MPI_IRECV(xc(1,1,kstart),numwords,MPI_REAL,source,tag,comm,reqs(j),ierr )
+      enddo
+      call MPI_BARRIER(comm,ierr)   ! make sure all processors  receives are posted to avoid buffering
+
+c     All processors now initiate nonblocking sends, writing to the   pre-established buffers
+      do iproc=0,numprocs-1
+       istart=(iproc*2*locnx)+1  ! start index for sending "real" data  x
+       dest=iproc
+       numwords=1                ! i.e. 1 word of type subslice
+       tag = 1
+       j=numprocs+iproc+1
+       call  MPI_IRSEND(x(istart,1,1),numwords,subslice,dest,tag,comm,reqs(j),ierr)
+      enddo
+
+      nreqs=2*numprocs
+      call MPI_WAITALL(nreqs,reqs,status_array,ierr)
+      call MPI_BARRIER(comm,ierr)
+
+c     Each processor still needs its uppermost (nz+1) slice
+
+c     Post myid's nonblocking recieve
+      source=numprocs-1
+      numwords=(2*locnx)*(ny+1)
+      kstart=nz+1
+      tag=1
+      j=2*numprocs + 1
+      call  MPI_IRECV(xc(1,1,kstart),numwords,MPI_REAL,source,tag,comm,reqs(j),ierr )
+      call MPI_BARRIER(comm,ierr)   ! make sure all processors  receives are posted to avoid buffering
+
+C     Post numprocs sends from uppermost processor myid=numprocs-1
+      if( myid .eq. numprocs-1 ) then   ! initiate the sends
+       do iproc=0,numprocs-1
+        dest=iproc
+        numwords=1
+        tag=1
+        istart=(iproc*2*locnx)+1  ! i start index for sending "real"  data x
+        kstart=locnz+1
+        j=2*numprocs + 1 + (iproc+1)
+        call  MPI_IRSEND(x(istart,1,kstart),numwords,twoslice,dest,tag,comm,reqs(j),ierr)
+       enddo
+      endif
+
+c     make sure all communications assoc. w/ top slice are done
+      if(myid==numprocs-1) then
+       nreqs=numprocs+1
+      else
+       nreqs=1
+      endif
+
+      call  MPI_WAITALL(nreqs,reqs(2*numprocs+1),status_array(1,2*numprocs+1),ierr)
+      call MPI_BARRIER(comm,ierr)
+
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/step.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/step.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/step.f	(revision 6)
@@ -0,0 +1,107 @@
+       subroutine step(u,v,w,s1,s2,f1,f2,f3,f4,f5,amp,num_dims,
+     *                 M,MM1,MM2,N,NP1,locnx,ny,nz,step_flag,dt)
+c
+c      Routine to take a single explicit time step via the 
+c      Euler, AB2, AB3 methods. Dissipation/diffusion terms
+c      are integrated analytically via the integrating factors
+c      exp( 1/Re kappa^2 dt ) and exp( 1/PrRe kappa^2 dt ) 
+c      The differential equations are as follows:
+c
+c                  d/dt (amp*u)   = amp*f1
+c                  d/dt (amp*v)   = amp*f2
+c                  d/dt (amp*w)   = amp*f3
+c                  d/dt (amp*s1)  = amp*f4
+c
+c      inputs/outputs:
+c              locnx,ny,nz  local size of input fields
+c              num_dims     number of dimensions 2(xz) or 3(xyz) z pos up
+c              M,MM1,MM2    integer variables pointing to 
+c                           M, M-1, M-2 storage locations
+c              N,NP1        integer variables pointing to 
+c                           N, N+1 storage locations
+c              f1(:,:,:,M),f1(:,:,:,MM1),f1(:,:,:,MM2)  f1 at t,t-dt,t-2*dt
+c                                                       similarly for f2,f3,f4,f5
+c              u(:,:,:,N),u(:,:,:,N+1)  values of u at time t,t+dt
+c                                       similarly for v,w,s1,s2
+c              amp(:,:,:,2)   exp(-1/Re kappa^2 dt ) and 
+c                             exp(-1/PrRe kappa^2 dt ) factors
+c                             where kappa^2 = kx^2 + ky^2 + kz^2 
+c              dt             time increment
+c              step_flag      "euler","AB2","AB3" 
+c                             character flag indicating method to apply
+c
+
+       implicit none
+       integer i,j,k
+       integer locnx,ny,nz,M,MM1,MM2,N,NP1,num_dims,nyplanes
+       complex u(locnx,ny+1,nz+1,2),v(locnx,ny+1,nz+1,2)
+       complex w(locnx,ny+1,nz+1,2),s1(locnx,ny+1,nz+1,2)
+       complex s2(locnx,ny+1,nz+1,2)
+       complex f1(locnx,ny+1,nz+1,3),f2(locnx,ny+1,nz+1,3)
+       complex f3(locnx,ny+1,nz+1,3),f4(locnx,ny+1,nz+1,3)
+       complex f5(locnx,ny+1,nz+1,3)
+       real amp(locnx,ny+1,nz+1,3),dt,dt2,dt12
+       real XX,YY,ZZ
+       character*80 step_flag
+       
+       if( num_dims .eq. 2 ) then
+        nyplanes=1
+       elseif( num_dims .eq. 3 ) then
+        nyplanes=ny
+       endif
+       
+       if( step_flag .eq. 'euler' ) then
+        do k=1,nz+1
+         do j=1,nyplanes
+          do i=1,locnx
+           XX = amp(i,j,k,1)
+           YY = amp(i,j,k,2)
+           ZZ = amp(i,j,k,3)
+           u(i,j,k,NP1) = XX*( u(i,j,k,N) + dt*f1(i,j,k,M) )
+           v(i,j,k,NP1) = XX*( v(i,j,k,N) + dt*f2(i,j,k,M) )
+           w(i,j,k,NP1) = XX*( w(i,j,k,N) + dt*f3(i,j,k,M) )
+           s1(i,j,k,NP1)= YY*( s1(i,j,k,N)+ dt*f4(i,j,k,M) )
+           s2(i,j,k,NP1)= ZZ*( s2(i,j,k,N)+ dt*f5(i,j,k,M) )
+          enddo
+         enddo
+        enddo
+        step_flag = 'AB2'    ! next time use AB2
+        
+       elseif( step_flag .eq. 'AB2' ) then
+        dt2=dt/2.
+        do k=1,nz+1
+         do j=1,nyplanes
+          do i=1,locnx
+           XX = amp(i,j,k,1)
+           YY = amp(i,j,k,2)
+           ZZ = amp(i,j,k,3)
+           u(i,j,k,NP1)=XX*(u(i,j,k,N) + dt2*(3*f1(i,j,k,M)-XX*f1(i,j,k,MM1)))
+           v(i,j,k,NP1)=XX*(v(i,j,k,N) + dt2*(3*f2(i,j,k,M)-XX*f2(i,j,k,MM1)))
+           w(i,j,k,NP1)=XX*(w(i,j,k,N) + dt2*(3*f3(i,j,k,M)-XX*f3(i,j,k,MM1)))
+           s1(i,j,k,NP1)=YY*(s1(i,j,k,N) + dt2*(3*f4(i,j,k,M)-YY*f4(i,j,k,MM1)))
+           s2(i,j,k,NP1)=ZZ*(s2(i,j,k,N) + dt2*(3*f5(i,j,k,M)-YY*f5(i,j,k,MM1)))
+          enddo
+         enddo
+        enddo
+        step_flag = 'AB3'    ! next time use AB3
+        
+       elseif( step_flag .eq. 'AB3' ) then
+        dt12=dt/12.
+        do k=1,nz+1
+         do j=1,nyplanes
+          do i=1,locnx
+           XX = amp(i,j,k,1)
+           YY = amp(i,j,k,2)
+           ZZ = amp(i,j,k,3)
+           u(i,j,k,NP1) = XX*( u(i,j,k,N) + dt12*(23*f1(i,j,k,M)-16*XX*f1(i,j,k,MM1)+5*XX*XX*f1(i,j,k,MM2) )  )
+           v(i,j,k,NP1) = XX*( v(i,j,k,N) + dt12*(23*f2(i,j,k,M)-16*XX*f2(i,j,k,MM1)+5*XX*XX*f2(i,j,k,MM2) )  )
+           w(i,j,k,NP1) = XX*( w(i,j,k,N) + dt12*(23*f3(i,j,k,M)-16*XX*f3(i,j,k,MM1)+5*XX*XX*f3(i,j,k,MM2) )  )
+           s1(i,j,k,NP1)= YY*( s1(i,j,k,N)+ dt12*(23*f4(i,j,k,M)-16*YY*f4(i,j,k,MM1)+5*YY*YY*f4(i,j,k,MM2) )  )
+           s2(i,j,k,NP1)= ZZ*( s2(i,j,k,N)+ dt12*(23*f5(i,j,k,M)-16*YY*f5(i,j,k,MM1)+5*YY*YY*f5(i,j,k,MM2) )  )
+          enddo
+         enddo
+        enddo
+       endif
+
+       return
+       end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/system.mk
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/system.mk	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/system.mk	(revision 6)
@@ -0,0 +1,3 @@
+FC=sxmpif90
+FFLAGS= -f3 -EP -sx5 -w -Wf"-msg nb" -Wf"-msg f" ${NETCDF_I4R4}
+FLIBS= ${NETCDF_I4R4}
Index: /trunk/SpectralModelF90/PROJECTS/trivial/transform3d.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/transform3d.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/transform3d.f	(revision 6)
@@ -0,0 +1,707 @@
+c*********************************************************************************
+c*********************************************************************************
+c
+c   This file contains the subroutines transform3d, five, six and seven
+c   These routines must be linked to the Temperton FFT package to run
+c
+c*******************************************************************************
+c*******************************************************************************
+c     Modified to operate on physical space data distributed in
+c     horizontal "slabs" across processors and wavenumber space
+c     data distributed in columns, i.e. each processor stores a
+c     finite z range of P. space data and a finite kx range of
+c     wavenumber space data. 2 data swapping routines perform the
+c     interprocessor exchanges: slabs_to_columns and columns_to_slabs.
+c     Except for the number of transforms executed as a block, these
+c     transform routines are applied as usual.
+
+c     Each processor performs the following operations on a portion
+c     of the globally distributed data:
+
+c     Forward Transforms:  real data arranged in "slabs"
+c      FFT in x, FFT in y, swap data and construct column, S/C transform in z
+c     Inverse Transforms:  complex data arranged in "columns"
+c      IC/S transform in z, swap data and construct slab, IFFT in y, IFFT in x
+c*****************************************************************************
+
+      subroutine transform3d (x, x_cplx, nx, ny, nz, iswitch, tswitch, itrig,
+     *                       trigx, trigy, trigz, wn, ifax, ifay, ifaz,
+     *                       num_dims,work,scratch,xt,myid,numprocs,locnx,locnz,
+     *                       comm,twoslice,subslice)
+
+C---------------------------------------------------------------------
+C
+C   transform3d.f - This FORTRAN subroutine accepts data
+c                   stored in a 3-dimensional array and performs
+c                   one of the the following transforms:
+c
+c           iswitch=1  
+c           transform real data to the complex frequency domain
+c           Fourier transforms are applied in the x and y directions
+c           sine or cosine transforms are applied in the z direction
+c           tswitch='s' for sine transform, 'c' for cosine
+c
+c           iswitch=-1  
+c           transform complex frequency domain data to real physical space data
+c           Inverse Fourier transforms are applied in the x and y directions
+c           sine or cosine transforms are applied in the z direction
+c           N.B. sine/cosine transforms are thei own inverses
+c           tswitch='s' for sine transform, 'c' for cosine 
+c
+c           This subroutine makes use of the Temperton FFT package
+c           cfft99.f along with the subroutines five.f, six.f and
+c           seven.f 
+c
+c           when num_dims=3, the minimum values for nx,ny and nz are(8,8,8)
+c           when num_dims=2, the minimum values for nx,ny and nz are(8,1,8)
+c           and ny=0 so that nyp1=ny+1=1
+
+c
+c   code written by Kraig Winters  June 30, 1997
+c   this is a modified version of the Bryan Johns/KW code
+c   extended to allow the cases FFS/FFC/FFF in 2 or 3 dimensions
+c   extended for MPI parallel execution KW 8/18/00
+c
+
+c
+c   inputs:
+c
+c   nx,ny,nz   integers defining (base) array sizes
+c   num_dims   integer specifying 2 (x-z) or 3 (xyz) dimensional problem (z="up")
+c   x          real array of size (nx+2,ny+1,nz+1)          for iswitch=1 or
+c              complex array of size (nx/2+1,ny+1,nz+1)     for iswitch=-1
+c              by convention first index ==> x direction, second ==> y, third ==> z
+c   iswitch    integer specifying transform direction     +1==> forward transform
+c   tswitch    character*1 specifying symmetry of z transform 'c'/'s'/'f'
+c              for cosine/sine/fourier transforms in the vertical direction
+c   itrig      integer flag specifying whether trig setup calculations need to be
+c              done. itrig=1 specifies tables need to be computed.
+c              N.B. if itrig=1, tables will be computed and then itrig set to 0.
+c
+c   The following arrays must be dimensioned and passed but values are
+c   determined within transform3d.f when itrig=1. These arrays should not be
+c   overwritten if subsequent calls with itrig=0 are made to transform3d.f.
+c
+c  trigx  real array of size 3*(nx+2)/2+1  contains trig tables for x transforms
+c  trigy  real array of size 2*(ny+1)      contains trig tables for y transforms
+c  trigz  real array of size 2*nz          contains trig tables for z transforms
+c  wn     complex array of size nz/4 + 1   auxilliary trig info for sine/cosine
+c  ifax       integer array of size 13         factorization tables for FFTs
+c  ifay       integer array of size 13         factorization tables for FFTs
+c  ifaz       integer array of size 13         factorization tables for FFTs
+c
+c  Scratch space:
+c  work       real scratch array dimensioned in variable_declarations.h
+c  xt         complex array of size (nx+2,nz/2+1)
+c
+c  Output:
+c
+c  x_cplx      complex array of frequency data for iswitch=1
+c  x           real array of physical space data for iswitch=-1
+c
+c N.B.         Global real data "x" has size (nx+2,ny+1,nz+1) 
+c              of which (nx,ny,nz+1)
+c              elements define the periodic sequences on the spatial grid.
+c              Complex data "x_cplx" has global size (nx/2+1,ny+1,nz+1) 
+c              Each processor stores a portion of the input and
+c              output arrays. See real and complex data maps.
+c
+c$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
+      implicit none
+      integer i,j,k,kend,myid,numprocs,locnx,locnz
+      integer comm,twoslice,subslice,ierr
+      integer num_dims,plane,npz,nx,ny,nz,nxp2,nyp1   
+      integer ifax(13),ifay(13),ifaz(13),iswitch,isign,itrig,nyplanes
+      integer lotx,loty,lotz,incx,incy,incz,jumpx,jumpy,jumpz
+      real trigx(3*(nx+2)/2+1),trigy(2*(ny+1)),trigz(2*nz),pi,xnorm
+      real x(nx+2,ny+1,locnz+1),work(1)
+      complex arg ,wn(nz/4+1),xt(nx+2,nz/2+1)
+      complex x_cplx(locnx,ny+1,nz+1)
+      complex scratch(locnx,ny+1,nz+1)
+      character*1 tswitch
+c
+c
+      pi = 4.*atan(1.)
+      nxp2 = nx + 2
+      nyp1 = ny + 1  ! note nyp1=0+1=1 for 2d problem
+      npz = nz/2
+
+c
+c   Initialize trig arrays for the ffts. This code executes only if itrig=1.
+c   After execution, the results are passed back to the calling routine and
+c   remain usable if the arrays are not overwritten. itrig is then set to 0
+c   so that trig initialization is only performed once.
+c
+      if( itrig .eq. 1 ) then
+       call fftfax (nx,ifax,trigx)
+       if( num_dims .eq. 3 ) call cftfax (ny,ifay,trigy)
+       if( tswitch .eq. 's' .or. tswitch .eq. 'c' ) then
+        call cftfax (npz,ifaz,trigz)  ! for sin/cos transforms via 5&6&7
+        do i = 1, nz/4+1
+         arg = pi * (i-1)/(nz/2.0)
+         wn(i) = cos(arg) + (0.0,1.0)*sin(arg)
+        enddo
+       elseif( tswitch .eq. 'f' .or. tswitch .eq. 'F' ) then
+        call cftfax (nz,ifaz,trigz) ! for complex vertical fourier transforms
+       endif
+       if( myid .eq. 0 ) then
+        write(6,*) 'trig tables set up '
+       endif
+       itrig = 0    ! flag indicating that setup calculations have been done
+      endif
+
+      if (iswitch .le. 0) go to 60   ! i.e. do inverse transform
+
+
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+c   Forward transforms: (real data to frequency components)
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+
+c     Number of horizontal planes in each slab
+      if( myid .eq. numprocs-1 ) then
+       kend=locnz+1
+      else
+       kend=locnz
+      endif
+
+      if( num_dims .eq. 3 ) then
+c     For 3d problems do x then y transforms for each xy plane:
+c
+c                      ! real to complex x transforms
+      isign = -1       ! forward transform flag for Temperton package
+      incx = 1         ! words between adjacent elements in a transform
+      jumpx = nxp2     ! real words between successive first elements
+      lotx = ny        ! number of x transforms to do
+      do k = 1,kend    ! Fourier transform in x for each horizontal plane 
+       call fft991 (x(1,1,k),work,trigx,ifax,incx,jumpx,nx,lotx,isign)
+      enddo
+c
+c     complex to complex transforms in the y direction
+c
+       incy = nxp2/2    ! complex words between successive elements
+       jumpy = 1        ! complex words between adjacent elements in a transform
+       loty = nxp2/2    ! number of complex y transforms to do
+       do k = 1,kend    ! Fourier transform in y
+        call cfft99 (x(1,1,k),work,trigy,ifay,incy,jumpy,ny,loty,isign)
+       enddo
+      elseif( num_dims .eq. 2 ) then  ! do all x transforms in a single call
+c                                     ! no y transforms required
+c                       ! Do real to complex transforms in x direction
+       isign = -1       ! forward transform flag for Temperton package
+       incx = 1         ! words between adjacent elements in a transform
+       jumpx = nxp2     ! real words between successive first elements
+       lotx = kend      ! number of x transforms to do
+       do j = 1,1       ! Fourier transform in x for each j(xz) plane 
+        call fft991 (x(1,j,1),work,trigx,ifax,incx,jumpx,nx,lotx,isign)
+       enddo
+      
+      endif 
+
+c
+c    z transforms in xz plane -- determine number of planes
+c      
+      if( num_dims .eq. 3 ) then 
+       nyplanes=ny
+      elseif( num_dims .eq. 2) then
+       nyplanes=1
+      endif
+
+
+c  *****    EXCHANGE DATA BETWEEN PROCESSORS SO THAT EACH  ***************
+c           PROCESSOR HOLDS A "COLUMN" OF DATA RATHER THAN A "SLAB"
+      call slabs_to_columns(x,x_cplx,nx,ny,nz,locnx,locnz,numprocs,
+     *                      myid,comm,twoslice,subslice,work)
+c*************************************************************************
+ 
+
+c Do sine/cosine/fourier transforms in z direction, sine and cosine transforms 
+c are their own inverses and use isign=+1 by convention
+c
+      
+      if ((tswitch .eq. 'C') .or. (tswitch .eq. 'c')) then
+       isign = +1
+       incz = 2*locnx      ! words between adjacent elements in a transform
+       jumpz = 1           ! real words between successive first elements
+       lotz = 2*locnx      ! number of z transforms to do  
+       do  j = 1,nyplanes   ! for each x-z plane of data
+        plane = j		! cosine transform in z
+        call six (x_cplx, 2*locnx, ny, nz, plane, wn, xt, work,
+     *            trigz, ifaz, incz, jumpz, npz, lotz, isign)
+       enddo
+      elseif((tswitch .eq. 'S') .or. (tswitch .eq. 's')) then
+       isign = +1
+       incz = 2*locnx      ! words between adjacent elements in a transform
+       jumpz = 1           ! real words between successive first elements
+       lotz = 2*locnx      ! number of z transforms to do  
+       do j = 1, nyplanes
+        plane = j 		! sine transform in z
+        call seven (x_cplx, 2*locnx, ny, nz, plane, wn, xt, 
+     *             work, trigz, ifaz, incz, jumpz, npz, lotz, isign)
+        enddo
+      elseif((tswitch .eq. 'F') .or. (tswitch .eq. 'f')) then  ! Fourier transform
+       isign=-1
+       incz = locnx*(ny+1)      ! words between adjacent elements in a transform
+       jumpz = 1                ! words between successive first elements
+       lotz = locnx             ! number of z transforms to do  
+       do j = 1, nyplanes   ! Complex Fourier transform in z
+        call cfft99 (x_cplx(1,j,1),work,trigz,ifaz,incz,jumpz,nz,lotz,isign)
+       enddo
+      endif
+
+c
+c  Normalize the results
+c 
+      if( num_dims .eq. 3 ) then
+       if( tswitch .eq. 's' ) xnorm = float(nz)/(2.*ny)
+       if( tswitch .eq. 'c' ) xnorm = float(nz)/(2.*ny)
+       if( tswitch .eq. 'f' ) xnorm = 1./float(ny*nz)    
+      elseif( num_dims .eq. 2 ) then
+       if( tswitch .eq. 's' ) xnorm = float(nz)/2.
+       if( tswitch .eq. 'c' ) xnorm = float(nz)/2.       
+       if( tswitch .eq. 'f' ) xnorm = 1./float(nz) 
+      endif
+      
+      do k = 1, nz+1	
+       do j = 1,nyp1    ! nyp1=1 for 2d problem
+        do i = 1,locnx
+         x_cplx(i,j,k) = x_cplx(i,j,k)*xnorm
+        enddo
+       enddo
+      enddo
+      
+      return
+
+
+ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+c   Perform the inverse transform (frequency components to real data)
+ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+60      continue
+ 
+c    inverse z transforms in xz plane -- determine number of planes
+        
+      if( num_dims .eq. 3 ) then 
+       nyplanes=ny
+      elseif( num_dims .eq. 2) then
+       nyplanes=1
+      endif
+
+c    make a copy of the input data so it can be left unaltered
+      do k=1,nz+1
+       do j=1,nyplanes
+        do i=1,locnx
+         scratch(i,j,k)=x_cplx(i,j,k)
+        enddo
+       enddo
+      enddo
+
+c
+c Do inverse sin/cos/fourier transforms in z direction, 
+c sine and cosine transforms 
+c are their own inverses and use isign=+1 by convention
+c
+      if ((tswitch .eq. 'C') .or. (tswitch .eq. 'c')) then
+       isign = +1
+       incz = 2*locnx      ! words between adjacent elements in a transform
+       jumpz = 1           ! real words between successive first elements
+       lotz = 2*locnx      ! number of z transforms to do 
+        do j = 1,nyplanes       ! for each x-z plane of frequency data
+         plane = j		       ! inverse cosine transform in z
+         call six (scratch, 2*locnx, ny, nz, plane, wn, xt, work,
+     *             trigz, ifaz, incz, jumpz, npz, lotz, isign)
+        enddo
+      elseif ((tswitch .eq. 'S') .or. (tswitch .eq. 's')) then
+       isign = +1
+       incz = 2*locnx      ! words between adjacent elements in a transform
+       jumpz = 1           ! real words between successive first elements
+       lotz = 2*locnx      ! number of z transforms to do 
+        do j = 1,nyplanes
+         plane = j 		       ! inverse sine transform in Z  
+         call seven (scratch, 2*locnx, ny, nz, plane, wn, xt, 
+     *              work, trigz, ifaz, incz, jumpz, npz, lotz, isign)
+        enddo
+      elseif ((tswitch .eq. 'F') .or. (tswitch .eq. 'f')) then
+       isign = +1
+       incz = locnx*(ny+1)      ! words between adjacent elements in a transform
+       jumpz = 1                ! real words between successive first elements
+       lotz = locnx             ! number of z transforms to do 
+       do j = 1, nyplanes   ! Complex Fourier transform in z
+        call cfft99 (scratch(1,j,1),work,trigz,ifaz,incz,jumpz,nz,lotz,isign)
+       enddo
+      endif
+
+c  *****    EXCHANGE DATA BETWEEN PROCESSORS SO THAT EACH  ***************
+c           PROCESSOR HOLDS A "SLAB" OF DATA RATHER THAN A "COLUMN"
+      call columns_to_slabs(x,scratch,nx,ny,nz,locnx,locnz,numprocs,
+     *                      myid,comm,twoslice,subslice,work)
+c*************************************************************************
+ 
+c     Number of horizontal planes in each slab
+      if( myid .eq. numprocs-1 ) then
+       kend=locnz+1
+      else
+       kend=locnz
+      endif
+
+c   zero out the k nyquist positions prior to inverse transforming
+      do i=nx+1,nx+2
+       do j=1,nyplanes
+        do k=1,kend
+         x(i,j,k)=0.0
+        enddo
+       enddo
+      enddo
+
+c   inverse Fourier transform in y if num_dims=3
+c
+      if( num_dims .eq. 3 ) then   ! inverse transform in y then x
+       isign = +1
+       incy = nxp2/2  ! complex words between successive first elements
+       jumpy = 1      ! complex words between adjacent elements in a transform
+       loty = nxp2/2  ! number of complex y transforms to do
+       do k = 1,kend  ! inverse Fourier transform in y for each horiz. plane
+        call cfft99 (x(1,1,k),work,trigy,ifay,incy,jumpy,ny,loty,isign)
+       enddo
+c
+c     inverse Fourier transform in x
+c
+       isign=+1
+       incx = 1        ! real words between adjacent elements in a transform
+       jumpx = nxp2    ! real words between successive first elements
+       lotx = ny       ! number of x transforms to do
+       do k = 1,kend   ! inverse Fourier transform in x for each horiz. plane
+        call fft991 (x(1,1,k),work,trigx,ifax,incx,jumpx,nx,lotx,isign)
+       enddo
+      elseif( num_dims .eq. 2 ) then  ! do all x transforms in a single call
+c                                     ! no y transforms required
+c                     ! Do real to complex transforms in x direction
+       isign = +1     ! inverse transform flag for Temperton package
+       incx = 1       ! words between adjacent elements in a transform
+       jumpx = nxp2   ! real words between successive first elements
+       lotx = kend    ! number of x transforms to do
+       do j = 1,1     ! Fourier transform in x for each j(xz) plane 
+        call fft991 (x(1,j,1),work,trigx,ifax,incx,jumpx,nx,lotx,isign)
+       enddo
+      endif
+c
+      return
+      end
+	
+	
+      subroutine five (c, nsets, n, wn, work, trig, ifa,
+     *                 inc, jump, np, lot, isign)
+
+C-----------------------------------------------------------------------------
+C
+C five.f - This FORTRAN subroutine computes the inverse Fourier Transform
+C          of a number of sets of conjugate even data. Input consists of 
+C          nsets vectors of n+1 complex elements of conjugate even data.
+C          Output consists of nsets vectors of n complex  elements containing
+C          the results of the inverse transform.  Since the input data is
+C          conjugate even, the results from the transform are real.  Actually,
+C          these "real" results are stored in alternating real and imaginary 
+C          components of the output vectors.
+C
+C	       Note that the inverse transform in this routine utilizes
+C          the Temperton FFT package.
+C
+C          Procedure Five: as discussed in
+C	       Cooley's paper in the Journal of Sound Vibration (1970), 12(3),
+C          pg. 315-337.
+C
+c	code written by Kraig Winters July 1 1990
+c   this is a modified version of Bryan Johns/KW code
+C
+C	input: c (complex array of nsets by n+1) - contains the sets of
+C             input conjugate even data
+C              nsets (integer) - number of sets of data to be inverse transformed
+C              n (integer) - number of elements resulting from the inverse
+C                                       transform
+C              wn (complex array of n/2+1) - contains the complex exponential
+C                                               tables required by this routine
+C	           work (real array) - work array required by the Temperton package
+C              trig (real array of np) - contains trig tables required by the
+C                                                      Temperton package
+C              ifa (integer array of 13) - contains factorization tables
+C                                          required by the Temperton package 
+C              inc (integer) - indicates direction of inverse transform
+C              jump (integer) - distance to next data sets in the input array
+C              np (integer) - number of data in each data set
+C              lot (integer) - number of data sets to be inverse transformed
+C              isign (integer) - indicates forward or inverse transform
+C                     (for this routine, should be inverse: isign = +1)
+C
+C	output: c (complex array of nsets by n+1) - contains the results
+C                                of the inverse transform
+C 			(NOTE: only nsets by n elements are used in output)
+C------------------------------------------------------------------------------
+
+      integer nsets, n, np 
+      complex c(nsets,n+1), wn(n/2+1), a1, a2
+      real work(1), trig(np) 
+      integer ifa(13), i, k
+      integer inc, jump, lot, isign, npt, nb2, nb2p1
+
+      npt = n
+      nb2 = npt/2
+      nb2p1 = nb2+1
+
+c
+c  Compute the input to the inverse Fourier transform "c"
+c
+
+	do i = 1, nsets
+         a1 = c(i,1) + conjg(c(i,npt+1))
+         a2 = (c(i,1) - conjg(c(i,npt+1))) * wn(1)
+         c(i,1) = a1 + (0.0,1.0)*a2
+          do k = 2, nb2
+           a1 = c(i,k) + conjg(c(i,npt+2-k))
+           a2 = (c(i,k) - conjg(c(i,npt+2-k))) * wn(k)
+           c(i,k) = a1 + (0.0,1.0)*a2
+           c(i,npt+2-k) = conjg(a1 - (0.0,1.0)*a2)
+          enddo
+         a1 = c(i,nb2p1) + conjg(c(i,nb2p1))
+         a2 = (c(i,nb2p1) - conjg(c(i,nb2p1))) * wn(nb2p1)
+         c(i,nb2p1) = a1 + (0.0,1.0)*a2
+        enddo
+
+c
+c   Inverse Fourier transform the array "c"
+c
+	call cfft99 (c, work, trig, ifa, inc, jump, np, lot, isign)
+
+	return
+	end 
+
+
+
+      subroutine six (x, nxp2, ny, nz, plane, wn, xt, work,
+     *                trigz, ifaz, incz, jumpz, npz, lotz, isign) 
+
+C------------------------------------------------------------------------------
+C
+C six.f - This FORTRAN subroutine computes the Fourier cosine transform
+C         in the z direction of a number of sets of data in a particular 
+C         x-z plane of 3-D data.  
+C
+C         Input consists of nxp2 vectors of data of length nz+1 in the plane.
+C         Output are npx2 vectors of length nz+1 containing the coefficients of
+C         the cosine transform for each vector of data in the plane.  The
+C         coefficients are overwritten onto the input data.
+C
+C         This routine is an implementation of 
+C         Procedure Six as described in Cooley's paper in the Journal of
+C         Sound Vibration, (1970) 12(3), pg. 315-337.  
+C         This procedure allows a cosine transform to be performed via 
+C         a Fourier transform routine but using only 1/4 of the input data.
+C
+C         This routine utilizes the Temperton FFT package to perform the
+C         required Fourier transforms.
+C
+C   N.B.: This routine must be linked to five.f and the Temperton FFT package. 
+C          
+C
+c	code written by Kraig Winters July 1 1990
+c       this is a modified version of Bryan Johns/KW code
+C
+C	input: x (real array of nxp2 by ny+1 by nz+1) - contains input data
+C          nxp2 (integer) - number of vectors in the plane to be transformed
+C          ny (integer) - number of x-z planes in x array
+C          nz (integer) - length of each vector in the z direction
+C 	       plane (integer) - indicates which x-z plane in x to transform
+C          wn (complex array of nz/4+1) - contains complex exponential table
+C	       xt (complex array of nxp2 by nz/2+1) - work array containing 
+C          x tilda terms required as input to Procedure five
+C          work (real array of nxp2*(ny+1)*nz) - work array required by
+C                Temperton FFT package
+C          trigz (real array of npz) - contains trig tables in z direction
+C                           required by Temperton package
+C          ifaz (integer array of 13) - contains factorization tables
+C                           required by Temperton package
+C          incz (integer) - indicates direction of cosine transform in
+C                               the array x
+C          jumpz (integer) - distance between vectors in the plane
+C          npz (integer) - number of data in each vector
+C          lotz (integer) - number of vectors of data in the plane
+C          isign (integer) - indicates forward or inverse transform
+C                                     (should be inverse : isign = +1) 
+C 
+C 	output: x - contains cosine coefficients of input data
+C
+C-------------------------------------------------------------------------------
+
+	integer nxp2, ny, nz, plane, incz, jumpz, npz, lotz, isign
+	integer ifaz(13)
+	real x(nxp2, ny+1, nz+1), work(1), trigz(npz)
+	real a1, a2, sum, pi
+	complex xt(nxp2,nz/2+1)
+	complex wn(nz/4+1)
+	integer i,k,n
+
+	n = nz/2
+        pi = 4.*atan(1.)
+
+C+
+C  Compute a complex conjugate even sequence for each real vector of data
+C    (in Cooley's paper, these are the x tilda / N terms)
+C    (NOTE: we only need to form the first nz/2+1 of them because of symmetry)
+C-
+      do i = 1, nxp2
+       xt(i,1) = cmplx(x(i,plane,1)/nz, 0.0)
+        do k = 2, n   
+         xt(i,k) = cmplx(x(i,plane,2*k-1)/nz,
+     *                  (x(i,plane,2*k-2) - x(i,plane,2*k))/nz)
+        enddo
+       xt(i,n+1) = cmplx(x(i,plane,nz+1)/nz,0.0)
+      enddo
+C+
+C  Inverse transform the conjugate even sequence into a real sequence using 
+C       Procedure Five as outlined in Cooley's paper
+C-
+      call five (xt, nxp2, n, wn, work, trigz, ifaz, incz,
+     *           jumpz, npz, lotz, isign)
+
+C+
+C  Post-process the results to form the cosine coefficients
+C          (see Cooley's Paper for the details here)
+C-
+       do 100 i = 1, nxp2
+	    a1 = real(xt(i,1))
+	    sum = 0.0
+	    do 20 k = 2, nz, 2
+		 sum = sum + x(i,plane,k)
+20      continue
+	    a2 = 2.0*sum/nz
+	    x(i,plane,1) = a1 + a2
+	    x(i,plane,nz+1) = a1 - a2
+	    do 30 k = 2, nz-2, 2
+                  x(i,plane,k) = 0.5 * ((aimag(xt(i,k/2)) + 
+     &                       aimag(xt(i,(nz+2-k)/2))) -
+     &                   (aimag(xt(i,k/2)) - aimag(xt(i,(nz+2-k)/2))) /
+     &                            (2.0*sin((k-1)*pi/nz)))
+	x(i,plane,k+1) = 0.5 * ((real(xt(i,k/2+1)) + 
+     &                           real(xt(i,(nz+1-k)/2+1))) -
+     &                 (real(xt(i,k/2+1)) - real(xt(i,(nz+1-k)/2+1))) /
+     &                          (2.0*sin(k*pi/nz))) 
+30	    continue
+	    x(i,plane,nz) = 0.5 * ((aimag(xt(i,nz/2)) + aimag(xt(i,1))) -
+     &                           (aimag(xt(i,nz/2)) - aimag(xt(i,1))) /
+     &                            (2.0*sin((nz-1)*pi/nz)))
+100 	continue
+	
+	return
+	end
+
+
+	subroutine seven (x, nxp2, ny, nz, plane, wn, xt, work,
+     &                  trigz, ifaz, incz, jumpz, npz, lotz, isign) 
+
+C------------------------------------------------------------------------------
+C
+C seven.f - This FORTRAN subroutine computes the Fourier sine transform
+C         in the z direction of a number of sets of data in a particular 
+C         x-z plane of 3-D data.  
+C
+C         Input consists of nxp2 vectors of data of length nz+1 in the plane.
+C         Output are npx2 vectors of length nz+1 containing the coefficients of
+C         the sine transform for each vector of data in the plane.  The
+C         coefficients are overwritten onto the input data.
+C
+C         This routine is an implementation of 
+C         Procedure Seven as described in Cooley's paper in the Journal of
+C         Sound Vibration, (1970) 12(3), pg. 315-337.  
+C         This procedure allows a sine transform to be performed via 
+C         a Fourier transform routine but using only 1/4 of the input data.
+C
+C         This routine employs the Temperton FFT package to perform the
+C         required Fourier transforms.
+C
+C   N.B. This routine must be linked to five.f and the Temperton FFT package. 
+C
+c	code written by Kraig Winters July 1 1990
+c   this is a modified version of Bryan Johns/KW code
+
+C
+C	input: x (real array of nxp2 by ny+1 by nz+1) - contains input data
+C          nxp2 (integer) - number of vectors in the plane to be transformed
+C          ny (integer) - number of x-z planes in x array
+C          nz (integer) - length of each vector in the z direction
+C 	       plane (integer) - indicates which x-z plane in x to transform
+C          wn (complex array of nz/4+1) - contains complex exponential table
+C	       xt (complex array of nxp2 by nz/2+1) - work array containing 
+C          x tilda terms required as input to Procedure five
+C          work (real array of nxp2*(ny+1)*nz) - work array required by
+C                           Temperton FFT package
+C          trigz (real array of npz) - contains trig tables in z direction
+C                           required by Temperton package
+C          ifaz (integer array of 13) - contains factorization tables
+C                           required by Temperton package
+C          incz (integer) - indicates direction of sine transform in
+C                               the array xt
+C          jumpz (integer) - distance between vectors in the plane
+C          npz (integer) - number of data in each vector
+C          lotz (integer) - number of vectors of data in the plane
+C          isign (integer) - indicates forward or inverse transform
+C                                     (should be inverse : isign = +1) 
+C 
+C 	output: x - contains sine coefficients of input data
+C
+C----------------------------------------------------------------------------
+
+	integer nxp2, ny, nz, plane, incz, jumpz, npz, lotz, isign
+	integer ifaz(13)
+	real x(nxp2, ny+1, nz+1), work(1), trigz(npz)
+	real pi
+	complex xt(nxp2,nz/2+1)
+	complex wn(nz/4+1)
+	integer i,k,n
+
+	n = nz/2
+        pi = 4.*atan(1.)
+
+C+
+C  Compute a complex conjugate even sequence for each real vector of data
+C    (in Cooley's paper, these are the x tilda / N terms)
+C    (NOTE: we only need to form the first nz/2+1 of them because of symmetry)
+C-
+      do i = 1, nxp2
+       xt(i,1) = cmplx(-2.0*x(i,plane,2)/nz, 0.0) 
+       do k = 2, n   
+        xt(i,k) = 
+     *            cmplx ((x(i,plane,2*k-2) - x(i,plane,2*k))/nz,
+     *              -x(i,plane,2*k-1)/nz)
+       enddo
+	   xt(i,n+1) = cmplx(2.0*x(i,plane,nz)/nz,0.0)
+      enddo
+
+C+
+C  Inverse transform the conjugate even sequence into a real sequence using 
+C       Procedure Five as outlined in Cooley's paper
+C-
+      call five (xt, nxp2, n, wn, work, trigz, ifaz, incz,
+     *           jumpz, npz, lotz, isign)
+
+C+
+C  Post-process the results to form the sine coefficients
+C          (see Cooley's Paper for the details here)
+C-
+	do 100 i = 1, nxp2
+  	    x(i,plane,1) = 0.0 
+	    x(i,plane,nz+1) = 0.0
+	    do 30 k = 2, nz-2, 2
+                  x(i,plane,k) = 0.5 * ((aimag(xt(i,k/2)) - 
+     &                       aimag(xt(i,(nz+2-k)/2))) -
+     &                  (aimag(xt(i,k/2)) + aimag(xt(i,(nz+2-k)/2))) /
+     &                            (2.0*sin((k-1)*pi/nz)))
+	x(i,plane,k+1) = 0.5 * ((real(xt(i,k/2+1)) - 
+     &                           real(xt(i,(nz+1-k)/2+1))) -
+     &                 (real(xt(i,k/2+1)) + real(xt(i,(nz+1-k)/2+1))) /
+     &                          (2.0*sin(k*pi/nz))) 
+30	    continue
+	    x(i,plane,nz) = 0.5 * ((aimag(xt(i,nz/2)) - aimag(xt(i,1))) -
+     &                           (aimag(xt(i,nz/2)) + aimag(xt(i,1))) /
+     &                            (2.0*sin((nz-1)*pi/nz)))
+100 	continue
+	
+	return
+	end
+
Index: /trunk/SpectralModelF90/PROJECTS/trivial/user_defined_forcing.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/user_defined_forcing.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/user_defined_forcing.f	(revision 6)
@@ -0,0 +1,39 @@
+      subroutine user_defined_forcing(x,y,z,t,F1,F2,F3,F4,F5,Lx,Ly,Lz,f,g,rho_0)
+
+c********************************************************************************************
+c     User defined subroutine to add time/space dependent forcing to the 
+c     equations of motion. Inputs and outputs for this routine are all
+c     DIMENSIONAL.
+c
+
+c     inputs:
+c            x,y,z       spatial location at which forcing is to be defined, [m]
+c                t       time at which forcing is to be defined              [s]
+c            f,g,rho_0   Coriolis parameter, gravity, reference density [1/s,m/s2,kg/m3]
+
+c     outputs:
+c            F1-3        acceleration at x,y,z & t in x,y,z directions       [m/s2]
+c            F4          rhs of perturbation scalar (s1) eqn                 [(deg C)/s]
+c            F5          rhs of perturbation scalar (s2) eqn                 [(psu)/s]
+c                        careful with F4,F5 you must take into account what you are
+c                        using for s1_bar & s2_bar when you define this term
+c********************************************************************************************
+
+      implicit none
+      real x,y,z,t,F1,F2,F3,F4,F5
+      real Lx,Ly,Lz,f,g,rho_0
+      
+
+c     declare local variables here:
+
+
+c     Define rhs values for evolution equations.
+
+      F1=0.0
+      F2=0.0
+      F3=0.0
+      F4=0.0
+      F5=0.0
+
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/user_defined_ics.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/user_defined_ics.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/user_defined_ics.f	(revision 6)
@@ -0,0 +1,34 @@
+      subroutine user_defined_ics(x,y,z,Lx,Ly,Lz,u,v,w,s1,s2)
+c
+c     inputs 
+c              x,y,z     positions in spatial domain           [m]
+c              Lx,Ly,Lz  domain lengths in x,y,z               [m]
+c     outputs
+c              u,v,w     speeds in x,y,z directions at (x,y,z) [m/s] 
+c              s1        perturbation temperature              [deg C]
+c              s2        perturbation salinity                 [psu]
+c     note:
+c              s1 and s2 are defined relative to the ambient profiles
+c              s1_bar and s2_bar defined in s1_bar_func.f & s2_bar_func.f
+c              There are corresponding quantities rho_bar and perturbation
+c              density pd that are computed via equation_of_state.f and
+c              used internally in the algorithm. They need not be set here.
+
+      implicit none
+      real x,y,z,Lx,Ly,Lz,u,v,w,s1,s2
+c**************************************************************************
+c**user declares any additional local variables needed here
+c**************************************************************************
+
+
+c     Stationary stratified fluid w/ no perturbations
+c     in either scalar variable (s1->T), (s2->S)
+
+      u=0.0
+      v=0.0
+      w=0.0
+      s1=0.0
+      s2=0.0
+
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/variable_declarations.h
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/variable_declarations.h	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/variable_declarations.h	(revision 6)
@@ -0,0 +1,90 @@
+c===============================================================
+c     ARRAY ALLOCATION AND VARIABLE DECLARATIONS
+c===============================================================
+
+#include "mpif.h"
+      integer locnx,locnz,nwork
+      parameter(locnz=nz/numprocs,locnx=(nx/2)/numprocs)
+      parameter(nwork=(nx+2)*(ny+1)*(locnz+1))   
+
+c     Physical space dependent variables: time t_n
+      real u(nx+2,ny+1,locnz+1),v(nx+2,ny+1,locnz+1)
+      real w(nx+2,ny+1,locnz+1),pd(nx+2,ny+1,locnz+1)
+      real s1(nx+2,ny+1,locnz+1),s2(nx+2,ny+1,locnz+1)
+      real ambient_density(nx+2,ny+1,locnz+1)
+ 
+c     Wavenumber space dependent variables: times t_n, t_n-1
+      complex u_cplx(locnx,ny+1,nz+1,2),v_cplx(locnx,ny+1,nz+1,2)
+      complex w_cplx(locnx,ny+1,nz+1,2),s1_cplx(locnx,ny+1,nz+1,2)
+      complex s2_cplx(locnx,ny+1,nz+1,2)
+ 
+c     3 copies of transfer terms: t_n, t_n-1, t_n-2
+      complex Tr1(locnx,ny+1,nz+1,3),Tr2(locnx,ny+1,nz+1,3)
+      complex Tr3(locnx,ny+1,nz+1,3),Tr4(locnx,ny+1,nz+1,3)
+      complex Tr5(locnx,ny+1,nz+1,3)
+ 
+c     Fourier amplitudes of forcing waves (if force_flag=yesFourier)
+      complex force_cplx(locnx,ny+1,nz+1)
+
+c     Scratch arrays for temporary storage
+      real work(nx+2,ny+1,locnz+1,14)
+      complex work_cplx(locnx,ny+1,nz+1,14)
+      real scratch(nwork)
+
+c     Wavenumber arrays and integrating factors
+      real wnx(locnx),wny(ny+1),wnz(nz+1)
+      real amp(locnx,ny+1,nz+1,3)
+ 
+c     Trigonometric and FFT related auxilliary arrays/variables 
+      real trigx(3*(nx+2)/2+1),trigy(2*(ny+1)),trigz(2*nz)
+      complex wn(nz/4+1),xt(nx+2, nz/2+1)
+      integer ifax(13),ifay(13),ifaz(13),itrig
+      character tswitch
+
+c     Storage for float variables    
+c     1-3: x,y,z  4: T_float  5: rho_lagrangian  6: rho_float
+      integer nsensors,nfloatparameters,num_dims
+      parameter(nsensors=7)
+      parameter(nfloatparameters=4)
+      real float_variables(6,nfloats)
+ 
+c     Data from float sensors
+      real sensor_data(nsensors,nfloats)
+ 
+c     Parameters describing float properties
+      real float_parameters(nfloatparameters,nfloats)
+      real z_close,z_offset,delta_w
+ 
+c     Work space for RK4 method
+      real k_rk4(5,nfloats,4)  ! 5 variables governed by odes, 4th order
+ 
+c     Dimensionless parameters appearing in scaled eqns of motion
+      real Rot,Ri,Re,Pr_1,Pr_2
+
+c     Misc. real-valued scalars
+      real Lx,Ly,Lz,dx,dy,dz,U0,DGRAD,s1_scale,s2_scale,rho_0,f,g,kappa_1,kappa_2,nu,kmax
+      real pi,xlat,xOmega,bfreq,dt,t_start,t_end
+      real t_write_selective,t_stat,t_floats_on
+      real time,time_scale,delta_u,delta_rho,z_0,h_0,k_0,a,b,c
+      real x0,y0,z0,interp_val,efactor,T_diss
+
+c     Misc. integer-valued scalars
+      integer i,j,k,istep,nyplanes,istart_floats,N,NM1,M,MM1,MM2
+      integer istart,iend,i_all,i_selective,i_stat,tmp,j_float_time
+      integer subslice,twoslice,comm,status,myid,iproc,nprocs,ierr,p,iswitch
+
+c     Character variables
+      character*80 bc_flag,step_flag,prelim_flag,fcs_flag
+      character*80 diss_flag,pressure_flag,force_flag
+      character*3  vort_flag
+      character*32 rootname 
+      character*80 netcdf_file
+      character*2 scalars       ! TS, TP, RP, R0, PP
+
+      integer start3D(3),count3D(3)
+
+      pi=4.*atan(1.)
+
+c=================================================================
+c		END OF VARIABLE DECLARATIONS
+c=================================================================
Index: /trunk/SpectralModelF90/PROJECTS/trivial/vort_fcs.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/vort_fcs.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/vort_fcs.f	(revision 6)
@@ -0,0 +1,100 @@
+      subroutine vort_fcs (u, v, w, locnx, nx, ny, nz, wnx, wny, wnz, 
+     *                     vorti, vortj, vortk, num_dims, bc_flag)
+
+C---------------------------------------------------------------------
+C
+C  vort_fcs - This FORTRAN subroutine computes the frequency domain
+C             representation of vorticity given 3-D velocities which have
+C             been previously transformed to the wavenumber domain.
+C             This routine assumes that the form of the transform is
+C             F/F/C  u,v,rho and F/F/S for w  when bc_flag = 'zslip'
+C             and F/F/F for all variables when bc_flag = 'zperiodic'.  
+
+C
+C	      Input are three arrays corresponding to the u, v, and w
+C             velocity data that have been transformed previously by
+C             the routine transform3d.  The form of the transforms in
+C             the x/y/z directions are known via bc_flag.             
+C 
+C             Output are three arrays that 
+C             are the 3d transforms of the i, j, and k 
+C             components of vorticity.  
+c
+c   code written by Kraig Winters  June 30, 1997
+c   this is a modified version of the Bryan Johns/KW code
+c   extended to allow the cases FFS/FFC/FFF in 2 or 3 dimensions
+c   modified for parallel execution, KW 8/18/00
+c
+C
+C	input: u, v, w (complex arrays of locnx by ny+1 by nz+1)
+C			- contains the u, v, w 3d transforms
+C	       nx, ny, nz (integers) - indicates the global number of data 
+C                         elements in the x, y, z directions 
+C  	       wnx, wny, wnz wavenumber vectors of sizes locnx, ny+1, nz,
+c                   (only local portion of wnx is stored on each processor)
+C	    
+C   output: vorti, vortj, vortk (complex arrays of size
+C                        locnx by ny+1, by nz+1) - contains the
+C                        local portion of the 3d transforms of the i, j, k
+C                        components of vorticity
+C
+c N.B.   derivative operators in transform space
+c
+c    fourier directions:  i * wavenumber  i.e. d/dx --> i k
+c    z derivative of w :                       d/dz --> +m
+c    z derivative of u,v:                      d/dz --> -m
+C--------------------------------------------------------------------------
+
+      implicit none
+      integer i,j,k,locnx,nx,ny,nz,num_dims,nyplanes
+      character*80 bc_flag
+      complex u(locnx, ny+1, nz+1), v(locnx, ny+1, nz+1)
+      complex w(locnx, ny+1, nz+1), vorti(locnx, ny+1, nz+1)
+      complex vortj(locnx, ny+1, nz+1)
+      complex vortk(locnx, ny+1, nz+1),cmplxi
+      real wnx(locnx), wny(ny+1), wnz(nz+1)
+
+      cmplxi=(0.0,1.0)
+c
+c   Determine number of y planes to work with
+c
+      if( num_dims .eq. 3 ) then
+       nyplanes=ny
+      elseif( num_dims .eq. 2 ) then
+       nyplanes=1
+      endif
+    
+      if( bc_flag .eq. 'zslip' ) then  ! use sin/cos logic in z      
+       do k = 1, nz
+        do j = 1, nyplanes
+	 do i = 1, locnx
+          vorti(i,j,k) = cmplxi*wny(j)*w(i,j,k) - (-wnz(k)*v(i,j,k))
+          vortj(i,j,k) = -wnz(k)*u(i,j,k) - cmplxi*wnx(i)*w(i,j,k)
+	  vortk(i,j,k) = cmplxi*(wnx(i)*v(i,j,k) - wny(j)*u(i,j,k))
+         enddo
+        enddo
+       enddo
+      elseif( bc_flag .eq. 'zperiodic') then   ! use triply fourier logic
+       do k = 1, nz 
+        do j = 1, nyplanes
+	 do i = 1,locnx
+          vorti(i,j,k) = cmplxi*(wny(j)*w(i,j,k) - wnz(k)*v(i,j,k))
+          vortj(i,j,k) = cmplxi*(wnz(k)*u(i,j,k) - wnx(i)*w(i,j,k))
+	  vortk(i,j,k) = cmplxi*(wnx(i)*v(i,j,k) - wny(j)*u(i,j,k)) 
+         enddo
+        enddo
+       enddo
+      endif
+ 
+c     zero out nyquist in z     
+      k=nz+1
+      do j=1,nyplanes
+       do i=1,locnx
+          vorti(i,j,k) = 0.0
+          vortj(i,j,k) = 0.0
+          vortk(i,j,k) = 0.0
+       enddo
+      enddo
+
+      return
+      end   
Index: /trunk/SpectralModelF90/PROJECTS/trivial/write_floats_nc3.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/write_floats_nc3.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/write_floats_nc3.f	(revision 6)
@@ -0,0 +1,490 @@
+      subroutine write_floats_nc(time,istep,nfloats,nsensors,Lz,s1_scale,s2_scale,U0,
+     *                           float_variables,sensor_data,j_float_time,
+     *                           float_parameters,nfloatparams,prelim_flag)
+
+      implicit none
+#include "netcdf.inc"
+
+
+      integer i,j,istep,nfloats,nsensors,nfloatparams,j_float_time
+      integer istart,icount,jstart,jcount
+      real time,Lz,s1_scale,s2_scale,U0,float_parameters(nfloatparams,nfloats)
+      real float_variables(6,nfloats),sensor_data(nsensors,nfloats)
+      character*80 prelim_flag
+      real TSCALE
+      character*80 filename
+      integer ncid, rcode    
+
+C Dimensions and dimension variables
+
+      integer iid, jid	! Dimension ids 
+ 
+      integer idimensionID,             ! float id dimension
+     @        jdimensionID              ! time dimension
+
+      integer idimensionSIZE(1),        ! 1D arrays for  dimension sizes
+     @        jdimensionSIZE(1) 
+      
+
+C 2D Variables
+
+c     float variables and sensor data
+      integer All2DVarSIZE(2),start2D(2),count2D(2)
+      real  data(nfloats)
+      integer xVarID,yVarID,zVarID              ! 2D Variable ids
+      integer FTVarID,Ls1VarID,Es1VarID
+      integer Es2VarID,Es1_upVarID,Es2_upVarID,FDVarID ! idimension x jdimension
+      integer u_upVarID,v_upVarID,w_upVarID
+
+c     float parameters
+      integer fvolVarID                         ! idimension
+      integer z_closeVarID                      ! idimension
+      integer delta_wVarID                      ! idimension
+      integer z_offsetVarID                     ! idimension
+      
+c
+c     float data netcdf filename     
+      filename='output/floatdata_nc'     
+
+      IF( prelim_flag .eq. 'yes' ) THEN   ! preliminaries, i.e. setup stuff executed only
+c                               ! during the first call to write_floats_nc 
+
+CCC
+C Open a new netcdf file
+CCC
+
+      rcode = NF_CREATE(filename, NF_NOCLOBBER, ncid) 
+      if(rcode.ne.NF_NOERR) print *,'ERROR OPENING NETCDF FILE'
+      write(0,*) ' floatdata_nc:  file opened successfully'
+
+CCC
+C Dimensions Definition
+CCC
+
+      rcode = NF_DEF_DIM(ncid, 'idimension', nfloats, iid)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+
+      rcode = NF_DEF_DIM(ncid, 'jdimension', NF_UNLIMITED, jid)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+
+      write(0,*) ' floatdata_nc:  dimensions defined successfully'
+
+c  Initialize size arrays for dimensions
+
+      idimensionSIZE(1) = iid
+      jdimensionSIZE(1) = jid
+
+c  Define dimension variables
+
+      rcode = NF_DEF_VAR(ncid,'idimension',NF_FLOAT,1,idimensionSIZE,idimensionID)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,idimensionID,'long_name',8,'float_id')
+      rcode=NF_PUT_ATT_TEXT(ncid,idimensionID,'units',3,'[1]')
+
+      rcode = NF_DEF_VAR(ncid,'jdimension',NF_FLOAT,1,jdimensionSIZE,jdimensionID)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,jdimensionID,'long_name',4,'time')
+      rcode=NF_PUT_ATT_TEXT(ncid,jdimensionID,'units',7,'seconds')
+
+      write(0,*)
+     &  ' floatdata_nc:  dimension variables defined successfully'
+
+CCC
+C Define 1D variables:  BEGIN FLOAT PARAMETER DEFINITIONS
+CCC
+
+CCC
+C float volume = fvolVar
+CCC
+
+      rcode=NF_DEF_VAR(ncid,'fvolVar',NF_FLOAT,1,idimensionSIZE,fvolVarID) 
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,fvolVarID,'long_name',16,'float_volume')
+      rcode=NF_PUT_ATT_TEXT(ncid,fvolVarID,'units',3,'m^3')
+
+      rcode=NF_DEF_VAR(ncid,'z_closeVar',NF_FLOAT,1,idimensionSIZE,z_closeVarID) 
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,z_closeVarID,'long_name',19,
+     &                      'min. dist to bdries')
+      rcode=NF_PUT_ATT_TEXT(ncid,z_closeVarID,'units',1,'m')
+
+      rcode=NF_DEF_VAR(ncid,'delta_wVar',NF_FLOAT,1,idimensionSIZE,delta_wVarID) 
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,delta_wVarID,'long_name',22,
+     &                      'res. vertical velocity')
+      rcode=NF_PUT_ATT_TEXT(ncid,delta_wVarID,'units',3,'m/s')
+
+      rcode=NF_DEF_VAR(ncid,'z_offsetVar',NF_FLOAT,1,idimensionSIZE,z_offsetVarID) 
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,z_offsetVarID,'long_name',23,
+     &                      'z offset for 2nd sensor')
+      rcode=NF_PUT_ATT_TEXT(ncid,z_offsetVarID,'units',1,'m')
+
+CCC
+C **********************END FLOAT PARAMETER DEFINITIONS
+CCC
+
+CCC
+C Define 2D variables:    BEGIN FLOAT VARIABLE DEFINITIONS
+CCC
+
+c   Initialize size arrays for time varying variables
+
+      All2DVarSIZE(1) = iid
+      All2DVarSIZE(2) = jid
+
+CCC
+C x float position = xVar
+CCC
+      rcode = NF_DEF_VAR(ncid,'xVar',NF_FLOAT,2,All2DVarSIZE,xVarID)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,xVarID,'long_name',16,
+     &                      'x float position')
+      rcode=NF_PUT_ATT_TEXT(ncid,xVarID,'units',1,'m')
+
+CCC
+C y float position = yVar
+CCC
+      rcode = NF_DEF_VAR(ncid,'yVar',NF_FLOAT,2,All2DVarSIZE,yVarID)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,yVarID,'long_name',16,
+     &                      'y float position')
+      rcode=NF_PUT_ATT_TEXT(ncid,yVarID,'units',1,'m')
+
+CCC
+C z float position = zVar
+CCC
+      rcode = NF_DEF_VAR(ncid,'zVar',NF_FLOAT,2,All2DVarSIZE,zVarID)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,zVarID,'long_name',16,
+     &                      'z float position')
+      rcode=NF_PUT_ATT_TEXT(ncid,zVarID,'units',1,'m')
+
+CCC
+C Lagrangian scalar 1 = Ls1Var
+CCC
+      rcode = NF_DEF_VAR(ncid,'Ls1Var',NF_FLOAT,2,All2DVarSIZE,Ls1VarID)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,Ls1VarID,'long_name',13,
+     &                      'Lagrangian s1')
+      rcode=NF_PUT_ATT_TEXT(ncid,Ls1VarID,'units',5,'-----')
+
+CCC
+C *************  END FLOAT VARIABLE DEFINITIONS
+CCC
+
+CCC
+C Eulerian s1 = Es1Var  ****  BEGIN SENSOR DATA DEFINITIONS
+CCC
+      rcode = NF_DEF_VAR(ncid,'Es1Var',NF_FLOAT,2,All2DVarSIZE,Es1VarID)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,Es1VarID,'long_name',11,
+     &                      'Eulerian s1')
+      rcode=NF_PUT_ATT_TEXT(ncid,Es1VarID,'units',5,'-----')
+
+      rcode = NF_DEF_VAR(ncid,'Es1_upVar',NF_FLOAT,2,All2DVarSIZE,Es1_upVarID)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,Es1_upVarID,'long_name',34,
+     &                      'Eulerian density offset vertically')
+      rcode=NF_PUT_ATT_TEXT(ncid,Es1_upVarID,'units',5,'kg/m3')
+
+      rcode = NF_DEF_VAR(ncid,'Es2Var',NF_FLOAT,2,All2DVarSIZE,Es2VarID)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,Es2VarID,'long_name',19,
+     &                      'Eulerian scalar (1)')
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,Es2VarID,'units',5,'-----')
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+
+      rcode = NF_DEF_VAR(ncid,'Es2_upVar',NF_FLOAT,2,All2DVarSIZE,Es2_upVarID)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,Es2_upVarID,'long_name',37,
+     &                      'Eulerian scalar (1) offset vertically')
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,Es2_upVarID,'units',5,'-----')
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+
+      rcode = NF_DEF_VAR(ncid,'u_upVar',NF_FLOAT,2,All2DVarSIZE,u_upVarID)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,u_upVarID,'long_name',14,
+     &                      'u: offset in z')
+      rcode=NF_PUT_ATT_TEXT(ncid,u_upVarID,'units',3,'m/s')
+
+      rcode = NF_DEF_VAR(ncid,'v_upVar',NF_FLOAT,2,All2DVarSIZE,v_upVarID)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,v_upVarID,'long_name',14,
+     &                      'v: offset in z')
+      rcode=NF_PUT_ATT_TEXT(ncid,v_upVarID,'units',3,'m/s')
+
+      rcode = NF_DEF_VAR(ncid,'w_upVar',NF_FLOAT,2,All2DVarSIZE,w_upVarID)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+      rcode=NF_PUT_ATT_TEXT(ncid,w_upVarID,'long_name',14,
+     &                      'w: offset in z')
+      rcode=NF_PUT_ATT_TEXT(ncid,w_upVarID,'units',3,'m/s')
+
+CCC
+C   ***************************  END SENSOR DATA DEFINITIONS
+CCC
+
+     
+CCC
+C End define mode
+CCC
+      rcode=NF_ENDDEF(ncid)
+      write(0,*) 'floatdata_nc:  variables defined successfully'
+      if(rcode.ne.NF_NOERR) print *,'ERROR  LEAVING DEFINE MODE'
+
+CCC
+C Write out dimension variable float_id
+CCC
+
+c  store values in temp array
+      
+      do i = 1,nfloats
+        data(i) = float(i)  ! float_id as a real
+      enddo
+
+c  Put idimension data, i.e. float_id, into netcdf file
+
+      istart = 1
+      icount = nfloats
+      rcode=NF_PUT_VARA_REAL(ncid,idimensionID,istart,icount,data)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+
+CCC
+C **************  BEGIN WRITE FLOAT PARAMETERS AT INITIAL TIME
+CCC
+
+c  write float volumes into netcdf file
+
+      do i = 1,nfloats
+        data(i) = float_parameters(1,i)
+      enddo
+
+      istart = 1
+      icount = nfloats
+      rcode=NF_PUT_VARA_REAL(ncid,fvolVarID,istart,icount,data)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+
+      do i = 1,nfloats
+        data(i) = float_parameters(2,i)*Lz
+      enddo
+
+      istart = 1
+      icount = nfloats
+      rcode=NF_PUT_VARA_REAL(ncid,z_closeVarID,istart,icount,data)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+
+      do i = 1,nfloats
+        data(i) = float_parameters(4,i)*Lz
+      enddo
+
+      istart = 1
+      icount = nfloats
+      rcode=NF_PUT_VARA_REAL(ncid,z_offsetVarID,istart,icount,data)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+
+      do i = 1,nfloats
+        data(i) = float_parameters(3,i)*U0
+      enddo
+
+      istart = 1
+      icount = nfloats
+      rcode=NF_PUT_VARA_REAL(ncid,delta_wVarID,istart,icount,data)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+CCC
+C **************  END WRITE FLOAT PARAMETERS AT INITIAL TIME
+CCC
+
+CCC
+C Close netcdf file
+CCC
+       rcode=NF_CLOSE(ncid)
+       if(rcode.ne.NF_NOERR) print *,'ERROR CLOSING NETCDF FILE'
+
+       j_float_time = 1   ! set for first slice
+
+       write(0,*)
+     &  ' floatdata_nc : file closed after completion of preliminaries'
+      ENDIF  ! end preliminaries
+c************************************************************************************
+c************************************************************************************
+c************************************************************************************
+c************************************************************************************
+CC
+C Open the previously created netcdf data file
+CCC
+      rcode=NF_OPEN(filename,NF_WRITE,ncid)
+      if(rcode.ne.NF_NOERR) print *,'ERROR OPENING NETCDF FILE: ',filename
+
+CCC
+C Write out current value of dimension variable time
+CCC
+
+c  Put jdimension data, i.e. time, into netcdf file
+
+      jstart = j_float_time
+      jcount = 1
+      rcode=NF_INQ_VARID(ncid,'jdimension',jdimensionID)
+      rcode=NF_PUT_VARA_REAL(ncid,jdimensionID,jstart,jcount,time)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+
+CCC
+C Write 2D data to netcdf file
+CCC
+
+      ! Initialize size arrays
+
+      start2D(1) = 1
+      start2D(2) = j_float_time
+      count2D(1) = nfloats
+      count2D(2) = 1
+
+CCC
+C *************   BEGIN WRITING FLOAT VARIABLE DATA
+CCC
+
+c     Store x float position variable xVar
+      do  i=1,nfloats
+       data(i) = float_variables(1,i)*Lz
+      enddo
+
+c  Write variable to netcdf file
+      rcode=NF_INQ_VARID(ncid,'xVar',xVarID)
+      rcode=NF_PUT_VARA_REAL(ncid,xVarID,start2D,count2D,data)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+
+c     Store y float position variable yVar
+      do  i=1,nfloats
+       data(i) = float_variables(2,i)*Lz
+      enddo
+
+c  Write variable to netcdf file
+      rcode=NF_INQ_VARID(ncid,'yVar',yVarID)
+      rcode=NF_PUT_VARA_REAL(ncid,yVarID,start2D,count2D,data)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+
+c     Store z float position variable zVar
+      do  i=1,nfloats
+       data(i) = float_variables(3,i)*Lz
+      enddo
+
+c  Write variable to netcdf file
+      rcode=NF_INQ_VARID(ncid,'zVar',zVarID)
+      rcode=NF_PUT_VARA_REAL(ncid,zVarID,start2D,count2D,data)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+
+c  Lagrangian s1
+      do  i=1,nfloats
+       data(i) = float_variables(5,i)*s1_scale
+      enddo
+
+c  Write variable to netcdf file
+      rcode=NF_INQ_VARID(ncid,'Ls1Var',Ls1VarID)
+      rcode=NF_PUT_VARA_REAL(ncid,Ls1VarID,start2D,count2D,data)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+
+CCC
+C *************   END WRITING FLOAT VARIABLE DATA
+CCC
+
+
+CCC
+C *************   BEGIN WRITING SENSOR DATA
+CCC
+c     Store  Eulerian s1 variable Es1Var
+c     i.e. eulerian s1 at float position
+      do  i=1,nfloats
+       data(i) = sensor_data(1,i)*s1_scale
+      enddo
+
+c  Write variable to netcdf file
+      rcode=NF_INQ_VARID(ncid,'Es1Var',Es1VarID)
+      rcode=NF_PUT_VARA_REAL(ncid,Es1VarID,start2D,count2D,data)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+
+c     Store  Eulerian s1 variable Es1_upVar
+c     i.e. eulerian s1 just above float position
+      do  i=1,nfloats
+       data(i) = sensor_data(2,i)*s1_scale
+      enddo
+
+c  Write variable to netcdf file
+      rcode=NF_INQ_VARID(ncid,'Es1_upVar',Es1_upVarID)
+      rcode=NF_PUT_VARA_REAL(ncid,Es1_upVarID,start2D,count2D,data)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+
+c     Store  Eulerian scalar (2) variable Es2Var
+c     i.e. eulerian s2 at float position
+      do  i=1,nfloats
+       data(i) = sensor_data(6,i)*s2_scale
+      enddo
+
+c  Write variable to netcdf file
+      rcode=NF_INQ_VARID(ncid,'Es2Var',Es2VarID)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+      rcode=NF_PUT_VARA_REAL(ncid,Es2VarID,start2D,count2D,data)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+
+c     Store  Eulerian scalar (1) variable Es2_upVar
+c     i.e. eulerian scalar (1) just above float position
+      do  i=1,nfloats
+       data(i) = sensor_data(7,i)*s2_scale
+      enddo
+
+c  Write variable to netcdf file
+      rcode=NF_INQ_VARID(ncid,'Es2_upVar',Es2_upVarID)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+      rcode=NF_PUT_VARA_REAL(ncid,Es2_upVarID,start2D,count2D,data)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+
+c     Store  offset u variable u_upVar
+c     i.e. eulerian u just above float position
+      do  i=1,nfloats
+       data(i) = sensor_data(3,i)*U0
+      enddo
+
+c  Write variable to netcdf file
+      rcode=NF_INQ_VARID(ncid,'u_upVar',u_upVarID)
+      rcode=NF_PUT_VARA_REAL(ncid,u_upVarID,start2D,count2D,data)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+
+c     Store  offset v variable v_upVar
+c     i.e. eulerian v just above float position
+      do  i=1,nfloats
+       data(i) = sensor_data(4,i)*U0
+      enddo
+
+c  Write variable to netcdf file
+      rcode=NF_INQ_VARID(ncid,'v_upVar',v_upVarID)
+      rcode=NF_PUT_VARA_REAL(ncid,v_upVarID,start2D,count2D,data)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+
+c     Store  offset w variable w_upVar
+c     i.e. eulerian w just above float position
+      do  i=1,nfloats
+       data(i) = sensor_data(5,i)*U0
+      enddo
+
+c  Write variable to netcdf file
+      rcode=NF_INQ_VARID(ncid,'w_upVar',w_upVarID)
+      rcode=NF_PUT_VARA_REAL(ncid,w_upVarID,start2D,count2D,data)
+      if(rcode.ne.NF_NOERR) print *,'NetCDF ERROR: ',rcode
+
+CCC
+C *************   END WRITING SENSOR DATA
+CCC
+
+CCC
+C Close netcdf file
+CCC
+      rcode=NF_CLOSE(ncid)
+      if(rcode.ne.0) print *,'ERROR CLOSING NETCDF FILE'
+
+c
+c     increment integer time index
+c       
+      j_float_time = j_float_time + 1 
+
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/write_netcdf.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/write_netcdf.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/write_netcdf.f	(revision 6)
@@ -0,0 +1,416 @@
+      subroutine write_netcdf(start3D,count3D,u,v,w,s1,s2,hold3D,
+     *            vort_x,vort_y,vort_z,Lx,Ly,length_scale,
+     *            nx,ny,nyplanes,nz,locnx,locnz,myid,numprocs,istep,
+     *            velocity_scale,s1_scale,s2_scale,rho_0,bc_flag,vort_flag,
+     *            pressure_flag,rootname)
+ 
+c     if pressure_flag = 'do_pressure_only' then the u field actually
+c     contains dimensionless pressure, otherwise ignore pressure
+
+      implicit none
+#include "netcdf.inc"
+
+      integer nx,ny,nz,locnx,locnz,myid,numprocs,istep
+      real velocity_scale,density_scale,Lx,Ly,length_scale,rho_0
+      real u(nx+2,ny+1,locnz+1),v(nx+2,ny+1,locnz+1),w(nx+2,ny+1,locnz+1)
+      real s1(nx+2,ny+1,locnz+1)
+      real s2(nx+2,ny+1,locnz+1)
+      real vort_x(nx+2,ny+1,locnz+1),vort_y(nx+2,ny+1,locnz+1)
+      real vort_z(nx+2,ny+1,locnz+1)
+      character*80 bc_flag,pressure_flag
+      character*80 err_msg
+      character*32 rootname
+ 
+c Define local variables
+      integer i,j,k,b1,nyplanes,nycount
+      character*6 cnum
+      character*3 cid,vort_flag
+      character*80 filename
+      integer ncid,rcode   
+      real dx,dy,dz,x,y,z,Lz
+
+c 4D Variables    (3 space + time)
+      integer s1VarID,s2VarID,uVarID,vVarID,pVarID
+      integer vort_xVarID,vort_yVarID,vort_zVarID
+      integer wVarID                 ! 4D Variable ids
+      integer start4D(4),count4D(4),netcdf4D(4)  ! 4D arrays containing variables size
+      integer start3D(3),count3D(3)
+
+c Arrays for holding data
+c     real hold3D(nx,nyplanes,locnz+1)  ! 3D tmp array
+       real hold3D(count3D(1),count3D(2),count3D(3)+1)  ! 3D tmp array
+      real s1_bar,s2_bar,junk
+      real s1_scale, s2_scale
+
+      integer dim_count, counter
+      character c_dim_count
+
+      integer data_start, data_stop, data_count, slice_start, slice_stop
+      integer l,m,n,o
+
+c Determine number of y planes
+      if( ny .eq. 0 ) then
+       nycount=1
+      else
+       nycount=count3D(2)
+      endif
+
+
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+c brens code for figuring out where data reporting begins and ends 
+c with respect to the current data slice in the z direction.
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+c determine number of z grid points
+      data_start = start3D(3)
+      data_stop = start3D(3) + count3D(3) - 1
+      
+      slice_start = myid * locnz + 1
+      slice_stop = ((myid + 1) * locnz)
+
+      if(bc_flag .eq. 'zslip' .and. myid .eq. numprocs-1) slice_stop = slice_stop + 1
+
+c	cases: "Excluded above" and "Excluded below". No data to be printed
+c	from this slice.
+      if((data_start .gt. slice_stop) .or. (data_stop .lt. slice_start))
+     &  return
+
+      if(data_start .ge. slice_start) then
+
+c	case: "contained within"
+        if(data_stop .le. slice_stop) then
+c	  do nothing in this case. data_start and data_stop are already
+c	  exactly what they should be.
+
+c	case: "start inside"
+        else
+          data_stop = slice_stop
+        endif
+      else
+
+c	case: "ends inside"
+        if(data_stop .le. slice_stop) then
+          data_start = slice_start
+
+c	case: "includes"
+        else
+          data_start = slice_start
+          data_stop = slice_stop
+        endif
+      endif
+
+      data_count = data_stop - (data_start - 1)
+
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+
+      Lz=length_scale
+      dx=Lx/float(nx)
+      dy=Ly/float(nyplanes)
+      dz=Lz/float(nz)
+
+        dim_count  =  0
+        do i = 1, 3
+            if(count3D(i) .gt. 1) then
+                dim_count = dim_count + 1
+            endif
+        enddo
+
+c       Create the filename
+        write(unit = cnum, fmt = 100) istep
+100         format(I6.6)
+        write(unit = cid, fmt = 101) myid
+101         format(I3.3)
+        write(unit = c_dim_count, fmt = 102) dim_count
+102         format(I1.1)
+
+        counter = 0
+        do i = 1, 32
+          if(rootname(i:i) .eq. ' ')then
+            exit
+          endif
+            counter = counter + 1
+        enddo
+
+        if(numprocs .gt. 1) then
+            filename = 'output/'//c_dim_count//'D/'//rootname(1:counter)
+     &                 //'_'//cnum//'_'//cid
+	else
+            filename = 'output/'//c_dim_count//'D/'//rootname(1:counter)
+     &                 //'_'//cnum
+        endif
+
+
+c Each processor opens netcdf file and gets variable id's.
+      if( myid .eq. 0 .and. pressure_flag .ne. 'do_pressure_only' ) then
+       write(0,*)'Writing simulation data to file: ' , filename
+      endif
+
+      rcode=NF_OPEN(filename,NF_WRITE,ncid)
+      if(rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR OPENING FILE in write3D_mpi_netcdf: ',rcode,filename
+
+      if( pressure_flag .ne. 'do_pressure_only' ) then
+
+       rcode=NF_INQ_VARID(ncid,'s1Var',s1VarID)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR INQ_VARID -> s1Var: ',rcode
+
+       rcode=NF_INQ_VARID(ncid,'s2Var',s2VarID)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR INQ_VARID -> s2Var: ',rcode
+
+       rcode=NF_INQ_VARID(ncid,'uVar',uVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR INQ_VARID -> uVar: ',rcode
+
+       rcode=NF_INQ_VARID(ncid,'vVar',vVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR INQ_VARID -> vVar: ',rcode
+
+       rcode=NF_INQ_VARID(ncid,'wVar',wVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR INQ_VARID -> wVar: ',rcode
+ 
+       if( vort_flag .eq. 'yes' ) then       
+        rcode=NF_INQ_VARID(ncid,'vort_xVar',vort_xVarID)
+        if (rcode.ne.NF_NOERR) print *,myid,
+     &    'NetCDF ERROR INQ_VARID -> vort_xVar: ',rcode
+        
+        rcode=NF_INQ_VARID(ncid,'vort_yVar',vort_yVarID)
+        if (rcode.ne.NF_NOERR) print *,myid,
+     &    'NetCDF ERROR INQ_VARID -> vort_yVar: ',rcode
+        
+        rcode=NF_INQ_VARID(ncid,'vort_zVar',vort_zVarID)
+        if (rcode.ne.NF_NOERR) print *,myid,
+     &    'NetCDF ERROR INQ_VARID -> vort_zVar: ',rcode
+       endif
+        
+      elseif( pressure_flag .eq. 'do_pressure_only' ) then
+
+       rcode=NF_INQ_VARID(ncid,'pVar',pVarID)
+       if (rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR INQ_VARID -> pVar: ',rcode
+
+      endif
+ 
+c     Write 4D data to netcdf file. *******************************
+
+c     Specify start and endpoints for each processor's local data.
+      start4D(1) = start3D(1)
+      start4D(2) = start3D(2)
+      start4D(3) = data_start
+      start4D(4) = 1
+      count4D(1) = count3D(1)
+      count4D(2) = nycount
+      count4D(3) = data_count
+      count4D(4) = 1
+
+      netcdf4D(1) = 1
+      netcdf4D(2) = 1
+      netcdf4D(3) = 1
+      netcdf4D(4) = 1
+
+      if( pressure_flag .ne. 'do_pressure_only' ) then
+
+c     Scalar 1 (Temp.) in dimensional units.
+       do i=start4D(1), start4D(1) + count4D(1) - 1
+        x=(i-1.)*dx/length_scale
+        do j=start4D(2), start4D(2) + count4D(2) - 1
+         y=(j-1.)*dy/length_scale
+         do k=start4D(3), start4D(3) + count4D(3) - 1
+          z=(k-1.)*dz/length_scale
+          call s1_bar_func(x,y,z,s1_bar,junk,junk,junk,junk,
+     &                      Lz,s1_scale)
+          l = i - start4D(1) + 1
+          m = j - start4D(2) + 1
+          n = k - start4D(3) + 1
+          o = k - slice_start + 1
+          hold3D(l,m,n) = (s1(i,j,o)+s1_bar)*s1_scale
+         enddo
+        enddo
+       enddo
+
+c      Each processor writes its local data to 
+c      the appropriate locations in the netcdf file.
+       rcode=NF_PUT_VARA_REAL(ncid,s1VarID,netcdf4D,count4D,hold3D)
+       if(rcode.ne.NF_NOERR) then
+        print *,myid,'NetCDF ERROR: PUT_VARA_REAL scalar (1)',rcode
+        err_msg=NF_STRERROR(rcode)
+        print*,myid, err_msg
+       endif
+
+c     Scalar 2  (Salinity) in dimensional units.
+       do i=start4D(1), start4D(1) + count4D(1) - 1
+        x=(i-1.)*dx/length_scale
+        do j=start4D(2), start4D(2) + count4D(2) - 1
+         y=(j-1.)*dy/length_scale
+         do k=start4D(3), start4D(3) + count4D(3) - 1
+          z=(k-1.)*dz/length_scale
+          call s2_bar_func(x,y,z,s2_bar,junk,junk,junk,junk,
+     &                      Lz,s2_scale)
+          l = i - start4D(1) + 1
+          m = j - start4D(2) + 1
+          n = k - start4D(3) + 1
+          o = k - slice_start + 1
+          hold3D(l,m,n) = (s2(i,j,o)+s2_bar)*s2_scale
+         enddo
+        enddo
+       enddo
+
+c      Each processor writes its local data to 
+c      the appropriate locations in the netcdf file.
+       rcode=NF_PUT_VARA_REAL(ncid,s2VarID,netcdf4D,count4D,hold3D)
+       if(rcode.ne.NF_NOERR) then
+        print *,myid,'NetCDF ERROR: PUT_VARA_REAL scalar (2)',rcode
+        err_msg=NF_STRERROR(rcode)
+        print*,myid, err_msg
+       endif
+
+c     u velocity component in dimensional units.
+       do i=start4D(1), start4D(1) + count4D(1) - 1
+        do j=start4D(2), start4D(2) + count4D(2) - 1
+         do k=start4D(3), start4D(3) + count4D(3) - 1
+          l = i - start4D(1) + 1
+          m = j - start4D(2) + 1
+          n = k - start4D(3) + 1
+          o = k - slice_start + 1
+          hold3D(l,m,n) = (u(i,j,o))*velocity_scale
+         enddo
+        enddo
+       enddo
+
+c      Each processor writes its local data to 
+c      the appropriate locations in the netcdf file.
+       rcode=NF_PUT_VARA_REAL(ncid,uVarID,netcdf4D,count4D,hold3D)
+       if(rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR: PUT_VARA_REAL u',rcode
+
+c      v velocity component in dimensional units.
+       do i=start4D(1), start4D(1) + count4D(1) - 1
+        do j=start4D(2), start4D(2) + count4D(2) - 1
+         do k=start4D(3), start4D(3) + count4D(3) - 1
+          l = i - start4D(1) + 1
+          m = j - start4D(2) + 1
+          n = k - start4D(3) + 1
+          o = k - slice_start + 1
+          hold3D(l,m,n) = (v(i,j,o))*velocity_scale
+         enddo
+        enddo
+       enddo
+
+c      Each processor writes its local data to 
+c      the appropriate locations in the netcdf file.
+       rcode=NF_PUT_VARA_REAL(ncid,vVarID,netcdf4D,count4D,hold3D)
+       if(rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR: PUT_VARA_REAL v',rcode
+
+c      w velocity component in dimensional units.
+       do i=start4D(1), start4D(1) + count4D(1) - 1
+        do j=start4D(2), start4D(2) + count4D(2) - 1
+         do k=start4D(3), start4D(3) + count4D(3) - 1
+          l = i - start4D(1) + 1
+          m = j - start4D(2) + 1
+          n = k - start4D(3) + 1
+          o = k - slice_start + 1
+          hold3D(l,m,n) = (w(i,j,o))*velocity_scale
+         enddo
+        enddo
+       enddo
+
+c      Each processor writes its local data to 
+c      the appropriate locations in the netcdf file.
+       rcode=NF_PUT_VARA_REAL(ncid,wVarID,netcdf4D,count4D,hold3D)
+       if(rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR PUT_VARA_REAL: w ',rcode
+
+
+      if( vort_flag .eq. 'yes' ) then       
+c      x vorticity in dimensional units.
+       do i=start4D(1), start4D(1) + count4D(1) - 1
+        do j=start4D(2), start4D(2) + count4D(2) - 1
+         do k=start4D(3), start4D(3) + count4D(3) - 1
+          l = i - start4D(1) + 1
+          m = j - start4D(2) + 1
+          n = k - start4D(3) + 1
+          o = k - slice_start + 1
+          hold3D(l,m,n) = (vort_x(i,j,o))*velocity_scale/length_scale
+         enddo
+        enddo
+       enddo
+
+c      Each processor writes its local data to 
+c      the appropriate locations in the netcdf file.
+       rcode=NF_PUT_VARA_REAL(ncid,vort_xVarID,netcdf4D,count4D,hold3D)
+       if(rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR PUT_VARA_REAL: vort_x ',rcode
+
+
+c      y vorticity in dimensional units.
+       do i=start4D(1), start4D(1) + count4D(1) - 1
+        do j=start4D(2), start4D(2) + count4D(2) - 1
+         do k=start4D(3), start4D(3) + count4D(3) - 1
+          l = i - start4D(1) + 1
+          m = j - start4D(2) + 1
+          n = k - start4D(3) + 1
+          o = k - slice_start + 1
+          hold3D(l,m,n) = (vort_y(i,j,o))*velocity_scale/length_scale
+         enddo
+        enddo
+       enddo
+
+c      Each processor writes its local data to 
+c      the appropriate locations in the netcdf file.
+       rcode=NF_PUT_VARA_REAL(ncid,vort_yVarID,netcdf4D,count4D,hold3D)
+       if(rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR PUT_VARA_REAL: vort_y ',rcode
+
+c      z vorticity in dimensional units.
+       do i=start4D(1), start4D(1) + count4D(1) - 1
+        do j=start4D(2), start4D(2) + count4D(2) - 1
+         do k=start4D(3), start4D(3) + count4D(3) - 1
+          l = i - start4D(1) + 1
+          m = j - start4D(2) + 1
+          n = k - start4D(3) + 1
+          o = k - slice_start + 1
+          hold3D(l,m,n) = (vort_z(i,j,o))*velocity_scale/length_scale
+         enddo
+        enddo
+       enddo
+
+c      Each processor writes its local data to 
+c      the appropriate locations in the netcdf file.
+       rcode=NF_PUT_VARA_REAL(ncid,vort_zVarID,netcdf4D,count4D,hold3D)
+       if(rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR PUT_VARA_REAL: vort_z ',rcode
+      endif ! end vort_flag = 'yes' logic
+
+      elseif( pressure_flag .eq. 'do_pressure_only' ) then
+
+c      pressure in dimensional units. ( pressure stored in u array )
+       do i=start4D(1), start4D(1) + count4D(1) - 1
+        do j=start4D(2), start4D(2) + count4D(2) - 1
+         do k=start4D(3), start4D(3) + count4D(3) - 1
+          l = i - start4D(1) + 1
+          m = j - start4D(2) + 1
+          n = k - start4D(3) + 1
+          o = k - slice_start + 1
+          hold3D(l,m,n) = (u(i,j,o))*rho_0*velocity_scale**2
+         enddo
+        enddo
+       enddo
+
+c      Each processor writes its local data to 
+c      the appropriate locations in the netcdf file.
+       rcode=NF_PUT_VARA_REAL(ncid,pVarID,netcdf4D,count4D,hold3D)
+       if(rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR PUT_VARA_REAL: pressure ',rcode
+
+      endif
+
+
+c      Each processor closes the netcdf file.
+       rcode=NF_CLOSE(ncid)
+       if(rcode.ne.NF_NOERR) print *,myid,
+     &   'NetCDF ERROR: closing file in write3D_mpi_netcdf',rcode
+
+      return
+      end
Index: /trunk/SpectralModelF90/PROJECTS/trivial/zufall.f
===================================================================
--- /trunk/SpectralModelF90/PROJECTS/trivial/zufall.f	(revision 6)
+++ /trunk/SpectralModelF90/PROJECTS/trivial/zufall.f	(revision 6)
@@ -0,0 +1,547 @@
+* README for zufall random number package
+* ------ --- ------ ------ ------ -------
+* This package contains a portable random number generator set
+* for: uniform (u in [0,1)), normal (<g> = 0, <g^2> = 1), and
+* Poisson distributions. The basic module, the uniform generator,
+* uses a lagged Fibonacci series generator:
+* 
+*               t    = u(n-273) + u(n-607)
+*               u(n) = t - float(int(t))
+* 
+* where each number generated, u(k), is floating point. Since
+* the numbers are floating point, the left end boundary of the
+* range contains zero. This package is nearly portable except
+* for the following. (1) It is written in lower case, (2) the
+* test package contains a timer (second) which is not portable,
+* and (3) there are cycle times (in seconds) in data statements 
+* for NEC SX-3, Fujitsu VP2200, and Cray Y-MP. Select your 
+* favorite and comment out the others. Replacement functions 
+* for 'second' are included - comment out the others. Otherwise 
+* the package is portable and returns the same set of floating 
+* point numbers up to word precision on any machine. There are 
+* compiler directives ($cdir for Cray, *vdir for SX-3, and VOCL 
+* for Fujitsu VP2200) which should be otherwise ignored.
+* 
+* To compile this beast, note that all floating point numbers
+* are declared 'double precision'. On Cray X-MP, Y-MP, and C-90
+* machines, use the cft77 (cf77) option -dp to run this in 64
+* bit mode (not 128 bit double).
+* 
+* External documentation, "Lagged Fibonacci Random Number Generators
+* for the NEC SX-3," is to be published in the International
+* Journal of High Speed Computing (1994). Otherwise, ask the
+* author: 
+* 
+*          W. P. Petersen 
+*          IPS, RZ F-5
+*          ETHZ
+*          CH 8092, Zurich
+*          Switzerland
+* 
+* e-mail:  wpp@ips.ethz.ch.
+* 
+* The package contains the following routines:
+* 
+* ------------------------------------------------------
+* UNIFORM generator routines:
+* 
+*       subroutine zufalli(seed)
+*       integer seed
+* c initializes common block containing seeds. if seed=0,
+* c the default value is 1802.
+* 
+*       subroutine zufall(n,u)
+*       integer n
+*       double precision u(n)
+* c returns set of n uniforms u(1), ..., u(n).
+* 
+*       subroutine zufallsv(zusave)
+*       double precision zusave(608)
+* c saves buffer and pointer in zusave, for later restarts
+* 
+*       subroutine zufallrs(zusave)
+*       double precision zusave(608)
+* c restores seed buffer and pointer from zusave
+* ------------------------------------------------------
+* 
+* NORMAL generator routines:
+* 
+*       subroutine normalen(n,g)
+*       integer n
+*       double precision g(n)
+* c returns set of n normals g(1), ..., g(n) such that
+* c mean <g> = 0, and variance <g**2> = 1.
+* 
+*       subroutine normalsv(normsv)
+*       double precision normsv(1634)
+* c saves zufall seed buffer and pointer in normsv
+* c buffer/pointer for normalen restart also in normsv
+* 
+*       subroutine normalrs(normsv)
+*       double precision normsv(1634)
+* c restores zufall seed buffer/pointer and 
+* c buffer/pointer for normalen restart from normsv
+* ------------------------------------------------------
+* 
+* POISSON generator routine:
+* 
+*       subroutine fische(n,mu,q)
+*       integer n,q(n)
+*       double precision mu
+* c returns set of n integers q, with poisson
+* c distribution, density p(q,mu) = exp(-mu) mu**q/q!
+* c 
+* c USE zufallsv and zufallrs for stop/restart sequence
+* c
+      subroutine zufall(n,a)
+      implicit none
+c
+c portable lagged Fibonacci series uniform random number
+c generator with "lags" -273 und -607:
+c
+c       t    = u(i-273)+buff(i-607)  (floating pt.)
+c       u(i) = t - float(int(t))
+c
+c W.P. Petersen, IPS, ETH Zuerich, 19 Mar. 92
+c
+      double precision a(*)
+      double precision buff(607)
+      double precision t
+      integer i,k,ptr,VL,k273,k607
+      integer buffsz,nn,n,left,q,qq
+      integer aptr,aptr0,bptr
+c
+      common /klotz0/buff,ptr
+      data buffsz/607/
+c
+      aptr = 0
+      nn   = n
+c
+1     continue
+c
+      if(nn .le. 0) return
+c
+c factor nn = q*607 + r
+c
+      q    = (nn-1)/607
+      left = buffsz - ptr
+c
+      if(q .le. 1) then
+c
+c only one or fewer full segments
+c
+         if(nn .lt. left) then
+            do 2 i=1,nn
+               a(i+aptr) = buff(ptr+i)
+2           continue
+            ptr  = ptr + nn
+            return
+         else
+            do 3 i=1,left
+               a(i+aptr) = buff(ptr+i)
+3           continue
+            ptr  = 0
+            aptr = aptr + left
+            nn   = nn - left
+c  buff -> buff case
+            VL   = 273
+            k273 = 334
+            k607 = 0
+            do 4 k=1,3
+cdir$ ivdep
+*vdir nodep
+*VOCL LOOP, TEMP(t), NOVREC(buff)
+               do 5 i=1,VL
+                  t            = buff(k273+i) + buff(k607+i)
+                  buff(k607+i) = t - float(int(t))
+5              continue
+               k607 = k607 + VL
+               k273 = k273 + VL
+               VL   = 167
+               if(k.eq.1) k273 = 0
+4           continue
+c
+            goto 1
+         endif
+      else
+c
+c more than 1 full segment
+c 
+          do 6 i=1,left
+             a(i+aptr) = buff(ptr+i)
+6         continue
+          nn   = nn - left
+          ptr  = 0
+          aptr = aptr+left
+c 
+c buff -> a(aptr0)
+c 
+          VL   = 273
+          k273 = 334
+          k607 = 0
+          do 7 k=1,3
+             if(k.eq.1)then
+*VOCL LOOP, TEMP(t)
+                do 8 i=1,VL
+                   t         = buff(k273+i) + buff(k607+i)
+                   a(aptr+i) = t - float(int(t))
+8               continue
+                k273 = aptr
+                k607 = k607 + VL
+                aptr = aptr + VL
+                VL   = 167
+             else
+cdir$ ivdep
+*vdir nodep
+*VOCL LOOP, TEMP(t)
+                do 9 i=1,VL
+                   t         = a(k273+i) + buff(k607+i)
+                   a(aptr+i) = t - float(int(t))
+9               continue
+                k607 = k607 + VL
+                k273 = k273 + VL
+                aptr = aptr + VL
+             endif
+7         continue
+          nn = nn - 607
+c
+c a(aptr-607) -> a(aptr) for last of the q-1 segments
+c
+          aptr0 = aptr - 607
+          VL    = 607
+c
+*vdir novector
+          do 10 qq=1,q-2
+             k273 = 334 + aptr0
+cdir$ ivdep
+*vdir nodep
+*VOCL LOOP, TEMP(t), NOVREC(a)
+             do 11 i=1,VL
+                t         = a(k273+i) + a(aptr0+i)
+                a(aptr+i) = t - float(int(t))
+11           continue
+             nn    = nn - 607
+             aptr  = aptr + VL
+             aptr0 = aptr0 + VL
+10        continue
+c
+c a(aptr0) -> buff, last segment before residual
+c
+          VL   = 273
+          k273 = 334 + aptr0
+          k607 = aptr0
+          bptr = 0
+          do 12 k=1,3
+             if(k.eq.1) then
+*VOCL LOOP, TEMP(t)
+                do 13 i=1,VL
+                   t            = a(k273+i) + a(k607+i)
+                   buff(bptr+i) = t - float(int(t))
+13              continue
+                k273 = 0
+                k607 = k607 + VL
+                bptr = bptr + VL
+                VL   = 167
+             else
+cdir$ ivdep
+*vdir nodep
+*VOCL LOOP, TEMP(t), NOVREC(buff)
+                do 14 i=1,VL
+                   t            = buff(k273+i) + a(k607+i)
+                   buff(bptr+i) = t - float(int(t))
+14              continue
+                k607 = k607 + VL
+                k273 = k273 + VL
+                bptr = bptr + VL
+             endif
+12        continue
+          goto 1
+      endif
+      end
+c
+      subroutine zufalli(seed)
+      implicit none
+c
+c  generates initial seed buffer by linear congruential
+c  method. Taken from Marsaglia, FSU report FSU-SCRI-87-50
+c  variable seed should be 0 < seed <31328
+c
+      integer seed
+      integer ptr
+      double precision s,t
+      double precision buff(607)
+      integer ij,kl,i,ii,j,jj,k,l,m
+      common /klotz0/buff,ptr
+      data ij/1802/,kl/9373/
+c
+      if(seed.ne.0) ij = seed
+c
+      i = mod(ij/177,177) + 2
+      j = mod(ij,177) + 2
+      k = mod(kl/169,178) + 1
+      l = mod(kl,169)
+      do 1 ii=1,607
+         s = 0.0
+         t = 0.5
+         do 2 jj=1,24
+            m = mod(mod(i*j,179)*k,179)
+            i = j
+            j = k
+            k = m
+            l = mod(53*l+1,169)
+            if(mod(l*m,64).ge.32) s = s+t
+            t = .5*t
+2        continue
+         buff(ii) = s
+1     continue
+      return
+      end
+c
+      subroutine zufallsv(svblk)
+      implicit none
+c
+c  saves common blocks klotz0, containing seeds and 
+c  pointer to position in seed block. IMPORTANT: svblk must be
+c  dimensioned at least 608 in driver. The entire contents
+c  of klotz0 (pointer in buff, and buff) must be saved.
+c
+      double precision buff(607)
+      integer ptr,i
+      double precision svblk(*)
+      common /klotz0/buff,ptr
+c
+      svblk(1) = ptr
+      do 1 i=1,607
+         svblk(i+1) = buff(i)
+1     continue
+c
+      return
+      end
+      subroutine zufallrs(svblk)
+      implicit none
+c
+c  restores common block klotz0, containing seeds and pointer
+c  to position in seed block. IMPORTANT: svblk must be
+c  dimensioned at least 608 in driver. The entire contents
+c  of klotz0 must be restored.
+c
+      double precision buff(607)
+      integer i,ptr
+      double precision svblk(*)
+      common /klotz0/buff,ptr
+c
+      ptr = svblk(1)
+      do 1 i=1,607
+         buff(i) = svblk(i+1)
+1     continue
+c
+      return
+      end
+      subroutine normalen(n,x)
+      implicit none
+c
+c Box-Muller method for Gaussian random numbers
+c
+      double precision x(*)
+      double precision xbuff(1024)
+      integer i,ptr,xptr,first
+      integer buffsz,nn,n,left 
+      common /klotz1/xbuff,first,xptr
+      data buffsz/1024/
+c
+      nn   = n
+      if(nn .le. 0) return
+      if(first.eq.0)then
+         call normal00
+         first = 1
+      endif
+      ptr = 0
+c
+1     continue
+      left = buffsz - xptr
+      if(nn .lt. left) then
+         do 2 i=1,nn
+            x(i+ptr) = xbuff(xptr+i)
+2        continue
+         xptr = xptr + nn
+         return
+      else
+         do 3 i=1,left
+            x(i+ptr) = xbuff(xptr+i)
+3        continue
+         xptr = 0
+         ptr  = ptr+left
+         nn   = nn - left
+         call normal00
+         goto 1
+      endif
+      end
+      subroutine normal00
+      implicit none
+      double precision pi,twopi
+      parameter(pi=3.141592653589793)
+      double precision xbuff(1024),r1,r2,t1,t2
+      integer first,xptr,i
+      common /klotz1/xbuff,first,xptr
+c
+      twopi = 2.*pi
+      call zufall(1024,xbuff)
+*VOCL LOOP, TEMP(r1,r2,t1,t2), NOVREC(xbuff)
+      do 1 i=1,1024,2
+         r1         = twopi*xbuff(i)
+         t1         = cos(r1)
+         t2         = sin(r1)
+         r2         = sqrt(-2.*log(1.-xbuff(i+1)))
+         xbuff(i)   = t1*r2
+         xbuff(i+1) = t2*r2
+1     continue
+c
+      return
+      end
+      subroutine normalsv(svbox)
+      implicit none
+c
+c  saves common block klotz0 containing buffers
+c  and pointers. IMPORTANT: svbox must be dimensioned at 
+c  least 1634 in driver. The entire contents of blocks 
+c  klotz0 (via zufallsv) and klotz1 must be saved.
+c
+      double precision buff(607)
+      integer i,k,ptr
+      double precision xbuff(1024)
+      integer xptr,first
+      double precision svbox(*)
+      common /klotz0/buff,ptr
+      common /klotz1/xbuff,first,xptr
+c
+      if(first.eq.0)then
+         print *,' ERROR in normalsv, save of unitialized block'
+      endif
+c
+c  save zufall block klotz0
+c
+      call zufallsv(svbox)
+c
+      svbox(609) = first
+      svbox(610) = xptr
+      k = 610
+      do 1 i=1,1024
+         svbox(i+k) = xbuff(i)
+1     continue
+c
+      return
+      end
+      subroutine normalrs(svbox)
+      implicit none
+c
+c  restores common blocks klotz0, klotz1 containing buffers
+c  and pointers. IMPORTANT: svbox must be dimensioned at 
+c  least 1634 in driver. The entire contents
+c  of klotz0 and klotz1 must be restored.
+c
+      double precision buff(607)
+      integer ptr
+      double precision xbuff(1024)
+      integer i,k,xptr,first
+      double precision svbox(*)
+      common /klotz0/buff,ptr
+      common /klotz1/xbuff,first,xptr
+c
+c restore zufall blocks klotz0 and klotz1
+c
+      call zufallrs(svbox)
+      first = svbox(609)
+      if(first.eq.0)then
+         print *,' ERROR in normalsv, restoration of unitialized block'
+      endif
+      xptr  = svbox(610)
+      k = 610
+      do 1 i=1,1024
+         xbuff(i) = svbox(i+k)
+1     continue
+c
+      return
+      end
+      subroutine fische(n,mu,p)
+      implicit none
+      integer p(*)
+      integer indx(1024)
+      integer n,i,ii,jj,k,left,nl0,nsegs,p0
+      double precision u(1024),q(1024)
+      double precision q0,pmu,mu
+c
+c Poisson generator for distribution function of p's:
+c
+c    q(mu,p) = exp(-mu) mu**p/p!
+c
+c initialize arrays, pointers
+c
+      if (n.le.0) return
+c
+      pmu = exp(-mu)
+      p0  = 0
+c
+      nsegs = (n-1)/1024 
+      left  = n - nsegs*1024
+      nsegs = nsegs + 1
+      nl0   = left
+c
+      do 2 k = 1,nsegs
+c
+         do 3 i=1,left
+            indx(i)    = i
+            p(p0+i)    = 0
+            q(i)       = 1.0
+3        continue
+c
+c Begin iterative loop on segment of p's
+c
+1        continue
+c
+c Get the needed uniforms
+c
+         call zufall(left,u)
+c
+         jj = 0
+c
+cdir$ ivdep
+*vdir nodep
+*VOCL LOOP, TEMP(ii,q0), NOVREC(indx,p,q)
+         do 4 i=1,left
+            ii    = indx(i)
+            q0    = q(ii)*u(i)
+            q(ii) = q0
+            if( q0.gt.pmu ) then
+               jj       = jj + 1
+               indx(jj) = ii
+               p(p0+ii) = p(p0+ii) + 1
+            endif
+4        continue
+c
+c any left in this segment?
+c
+         left = jj
+         if(left.gt.0)then
+            goto 1
+         endif
+c
+         p0    = p0 + nl0
+         nl0   = 1024
+         left  = 1024
+c
+2     continue
+c
+      return
+      end
+c
+      block data
+      implicit none
+c
+c globally accessable, compile-time initialized data
+c
+      integer ptr,xptr,first
+      double precision buff(607),xbuff(1024)
+      common /klotz0/buff,ptr
+      common /klotz1/xbuff,first,xptr
+      data ptr/0/,xptr/0/,first/0/
+      end
Index: /trunk/SpectralModelF90/kwmk.sh
===================================================================
--- /trunk/SpectralModelF90/kwmk.sh	(revision 6)
+++ /trunk/SpectralModelF90/kwmk.sh	(revision 6)
@@ -0,0 +1,7 @@
+#!/bin/sh -x
+set -x
+cd source
+pwd
+touch write_init_netcdf.h
+make flow_solve.x
+cd ..
Index: /trunk/SpectralModelF90/setup
===================================================================
--- /trunk/SpectralModelF90/setup	(revision 6)
+++ /trunk/SpectralModelF90/setup	(revision 6)
@@ -0,0 +1,903 @@
+#!/usr/bin/perl -w
+################################################################################
+#
+# setup		bren@ucsd.edu		10/28/2002
+#
+# setup configures the spectral_model code to build according to
+# the end users particular test specifications.
+# It generates several files:
+#	run
+#	output/
+#	output/codes_etc/
+#	source/sources.mk
+#
+# When done running setup, the appropriate directory structure for
+# the output should exist, and the program "run" should exist and
+# be ready. Either run "run", or queue "run" into you're queuing 
+# system.
+#
+# Run "./setup --help" to see the usage statement.
+#
+# Code written by bren of CFD/IOD/SIO/UCSD fame. It is released to the general public
+# under a beer-ware license:
+#
+# ----------------------------------------------------------------------------
+# "THE BEER-WARE LICENSE" (Revision 42):
+# <bren@ucsd.edu> wrote this file. As long as you retain this notice you
+# can do whatever you want with this stuff. If we meet some day, and you think
+# this stuff is worth it, you can buy me a beer in return. 
+# ----------------------------------------------------------------------------
+
+use strict;
+use Getopt::Long;
+
+my $SIZEOF_REAL = 4;
+my $SIZEOF_INTEGER = 4;
+my $SIZEOF_COMPLEX = 8;
+my $SIZEOF_CHARACTER = 1;
+
+# main()
+{	
+
+	my ($np, $ndims);	
+	my ($nx, $ny, $nz);
+	my ($nfloats, $nsensors, $nfloatparameters);
+
+#	command line switch variables
+	my $output_dir;
+	my $help;
+	my $sizeof_real;
+	my $project;
+	my $clean;
+	my $matlab;
+	my $no_report;
+
+#	Parse command line options.
+	GetOptions(
+			"output_dir=s" => \$output_dir,
+			"project=s" => \$project,
+			"help" => \$help,
+			"clean" => \$clean,
+			"sizeof_real=i" => \$sizeof_real,
+			"no_report" => \$no_report,
+			"matlab" => \$matlab
+		  );
+
+
+#	if help was requested, print out the usage statement and exit.
+	if($help){
+		usage();
+	}
+
+#	clean up after a build
+	if($clean){
+		clean();
+		exit;
+	}
+
+#	routine added so that you can change $SIZEOF_REAL on the fly for 64 bit machines.
+	if($sizeof_real){
+		$SIZEOF_REAL = $sizeof_real;
+		$SIZEOF_COMPLEX = 2 * $sizeof_real;
+	}
+
+#	identify the appropriate projects directory.
+	if(!$project){
+		$project = "trivial";
+	}
+
+	chomp(my @projects = `ls projects`);
+	foreach (@projects){
+		if(/$project/){
+			$project = "projects/$project";
+		}
+	}
+
+#	check to see if this is a fresh run. 
+#	If so, setup the source dir
+#	If not, check that the previous run was the same project.
+#	If so, copy over only the files that have been changed since the last build.
+#	If not, clean out source and setup source dir fresh.
+	my @runtime_variables_h;
+	if(-e "source/runtime_variables.h"){
+		open(RUNTIME_VARIABLES_H_IN, "source/runtime_variables.h")
+			or die "source/runtime_variables.h: $!\n";
+		chomp(@runtime_variables_h = <RUNTIME_VARIABLES_H_IN>);
+		close(RUNTIME_VARIABLES_H_IN);
+
+		if($runtime_variables_h[0] eq "c $project"){
+			chomp(my @filename = `ls $project`);
+			foreach(@filename){
+				if(/runtime_variables\.h/ || -M "$project/$_" < -M "source/$_"){
+					`cp $project/$_ source/`;
+				}
+			}
+		}else{
+			clean();
+			@runtime_variables_h = @{populate($project)};
+		}
+	}else{
+		@runtime_variables_h = @{populate($project)};
+	}
+		
+#	find np, nx, ny, nz, and some others in this file
+	foreach (@runtime_variables_h){
+		if(/numprocs\s*=\s*(\d+)/i){
+			$np = $1;
+		}
+		if(/nx\s*=\s*(\d+)/i){
+			$nx = $1;
+		}
+		if(/ny\s*=\s*(\d+)/i){
+			$ny = $1;
+		}
+		if(/nz\s*=\s*(\d+)/i){
+			$nz = $1;
+		}
+		if(/nfloats\s*=\s*(\d+)/i){
+			$nfloats = $1;
+		}
+		if(/nsensors\s*=\s*(\d+)/i){
+			$nsensors = $1;
+		}
+		if(/nfloatparameters\s*=\s*(\d+)/i){
+			$nfloatparameters = $1;
+		}
+	}
+
+#	These switches are required.
+	if(!($np && $nx && defined($ny) && $nz)){
+		usage();
+	}	
+
+#	set the default output directory to "output".
+	if(!$output_dir){
+		$output_dir = "output";
+	}
+
+#	$ndims must be either 2 or 3
+	if(!$ny){$ndims = 2;}else{$ndims=3;}
+
+#	$nx, $ny, and $nz must all be divisible by 2, 3, or 5
+	check_powers($nx, "-nx");
+	check_powers($ny, "-ny");
+	check_powers($nz, "-nz");
+
+#	Both (nx/2) and nz must be divisable by np!
+	if(($nx/2) % $np){
+		print STDERR "(nx/2) must by divisible by np.\n";
+		exit(-1);
+	}
+	if($nz % $np){
+		print STDERR "nz must be divisible by np.\n";
+		exit(-1);
+	}
+
+#	prepare for compilation
+	configure($np, $ndims, $nx, $ny, $nz, $output_dir, $nfloats, $nsensors,
+			$nfloatparameters);
+
+#	create the matlab data file, remebering one of its data members for use later.
+	my %problem_params_h_variables =
+		%{create_matlab_data($np, $ndims, $nx, $ny, $nz, $output_dir, $matlab)};	
+
+#	generate float_positions.dat
+#       KW  I changed the location to from input to source so I could remove input altogether
+	if($nfloats){
+		open(NFLOATS_OUT, ">source/float_positions.dat") or die "source/float_positions.dat: $!\n";
+		for(my $i = 0; $i < $nfloats; $i++){
+			print NFLOATS_OUT "".($i + 1)." ".
+				int(rand()*eval($problem_params_h_variables{"Lx"}))." ".
+				int(rand()*eval($problem_params_h_variables{"Ly"}))." ".
+				int(rand()*eval($problem_params_h_variables{"Lz"})).
+				"\n";
+		}
+		close(NFLOATS_OUT);
+	}	
+
+#	XXX This is set until we fix reporting based on the new netcdf output code. XXX
+	$no_report = 1;
+
+#	report the memory requirements for this build
+	if(!$no_report){
+		report_memory($np, $ndims, $nx, $ny, $nz, $output_dir);
+	}
+
+#	report the anticipated disk usage for this build
+	my $ny_disk;
+	if(!$ny){$ny_disk = 1;}else{$ny_disk = $ny;}
+	if(!$no_report){
+		report_disk_allocation($np, $ndims, $nx, $ny_disk, $nz, $output_dir, \%problem_params_h_variables);
+	}
+
+	code_gen($nx, $ny, $nz, \%problem_params_h_variables);
+
+#	build binaries and finish up.
+#	make();	
+        system("sh kwmk.sh");
+}
+
+################################################################################
+# usage()
+#
+# Print the usage information and exit.
+################################################################################
+sub usage{
+	print STDERR "usage: setup.pl  [-output_dir OUTPUT_DIR]\n";
+	print STDERR "                 [-project PROJECT_NAME]\n";
+	print STDERR "                 [-no_report]\n";
+	print STDERR "                 [-matlab]\n";
+	print STDERR "                 [-clean]\n";
+	print STDERR "                 [-help]\n";
+	print STDERR "  OUPUT_DIR -> The name of the directory to use for output.\n";
+	print STDERR "  PROJECT_NAME -> The name of the directory where the current project is located.\n";
+	print STDERR "  All switches are optional.\n";
+	print STDERR "\n";
+	exit(-1);
+}
+
+
+################################################################################
+# configure()
+#
+# Do the general configuration. 
+# setup the output directory structure, backup the data 
+# peritnant to this run, generate the appropriate source files
+################################################################################
+sub configure{
+	my $np = $_[0];
+	my $ndims = $_[1];
+	my $nx = $_[2];
+	my $ny = $_[3];
+	my $nz = $_[4];
+	my $output_dir = $_[5];
+	my $nfloats = $_[6];
+	my $nsensors = $_[7];
+	my $nfloatparameters = $_[8];
+
+#	configure the output directory structures.
+	if(-e "output" && -l "output"){
+		`rm -f $ENV{PWD}/output`;
+	}	
+	if(-e "output" && $output_dir ne "output"){
+		print STDERR "Cannot link $output_dir to output/. Remove output/ and try again.";
+		exit(-1);
+	}
+		print STDERR "OUTPUT DIRECTORY ". $output_dir ." \n"; 
+	if(! -e "$output_dir"){
+		#mkdir "$output_dir";
+		system("mkdir $output_dir");
+	}
+	if(! -e "$output_dir/codes_etc"){
+		#mkdir "$output_dir/codes_etc";
+		system("mkdir $output_dir/codes_etc");
+	}
+	if(! -e "$output_dir/3D"){
+		#mkdir "$output_dir/3D";
+		system("mkdir $output_dir/3D");
+	}
+	if(! -e "$output_dir/2D"){
+		#mkdir "$output_dir/2D";
+		system("mkdir $output_dir/2D");
+	}
+	if(! -e "$output_dir/1D"){
+		#mkdir "$output_dir/1D";
+		system("mkdir $output_dir/1D");
+	}
+	if(! -e "$output_dir/0D"){
+		#mkdir "$output_dir/0D";
+		system("mkdir $output_dir/0D");
+	}
+	if($output_dir ne "output"){
+		`ln -s $output_dir $ENV{PWD}/output`;
+	}
+
+	for(my $i = 0; $i <= 3; $i++){
+		my $dirname = $i."D";
+		opendir(OUTPUT_DIR, "$output_dir/$dirname");
+		my @dir_contents = readdir(OUTPUT_DIR);
+
+		foreach (@dir_contents){
+			if(! (/^\.$/ || /^\.\.$/)){
+				print STDERR "$output_dir/$dirname is not empty!\n";
+				exit(-1);
+			}
+		}
+		closedir(OUTPUT_DIR);
+	}
+
+#	archive this run's setup info.
+	`cp -f source/*.f $output_dir/codes_etc/ 2>/dev/null`;
+	`cp -f source/*.h $output_dir/codes_etc/ 2>/dev/null`;
+	`cp system.conf $output_dir/codes_etc/ 2>/dev/null`;
+
+#	build sources.mk for the Makefile from definitions in system.conf
+	open(SYSTEM_CONF_IN, "system.conf") or die "system.conf: $!\n";
+	chomp(my @system_conf = <SYSTEM_CONF_IN>);
+	close(SYSTEM_CONF_IN);
+
+	my $fflags;
+	my $fc;
+	my $flibs;
+	my $run_command;
+
+	my $previous_line = "";
+	foreach (@system_conf){
+		chomp;
+		s/(.*)\#.*/$1/;
+		if(/\\$/){
+			s/\\$//;
+			$previous_line = $_;
+			next;
+		}
+		else{
+			$_ = $previous_line.$_;
+			$previous_line = "";
+		}
+		s/^\s+//;
+		s/\s+$//;
+		s/OUTPUT_DIR/$output_dir/g;
+		s/NUMPROCS/$np/g;
+
+		if($_){
+			if(/^FFLAGS/){$fflags = $_;}
+			elsif(/^FLIBS/){$flibs = $_;}
+			elsif(/^FC/){$fc = $_;}
+			elsif(/^RUN_COMMAND/){
+				$run_command = $_;
+				if(/machfile/){
+					if($np > 32){
+						print STDERR "source/machfile_0-15 does not contain enough entries."
+							." You must create your own machfile!\n";}
+					else{
+						open(MACHFILE_IN, "source/machfile_0-15") or die "source/machfile_0-15: $!\n";
+						chomp(my @machfile = <MACHFILE_IN>);
+						close(MACHFILE_IN);
+						open(MACHFILE_OUT, ">machfile") or die "machfile: $!\n";
+						for(my $i = 0; $i < $np; $i++){
+							print MACHFILE_OUT "$machfile[$i]\n";
+						}
+						close(MACHFILE_OUT);
+						`cp machfile $output_dir/codes_etc/`;
+					}
+				}
+			}
+		}
+	}
+
+#	Tell the makefile which files are where.
+	open SYSTEM_MK_OUT, ">source/system.mk" or die "source/system.mk: $!\n";
+
+	print SYSTEM_MK_OUT "$fc\n";
+	print SYSTEM_MK_OUT "$fflags\n";
+	print SYSTEM_MK_OUT "$flibs\n";
+
+	close(SYSTEM_MK_OUT);
+
+#	make the run script
+	$run_command =~ s/^RUN_COMMAND\s*=\s*//;
+	open(RUN_OUT, ">run") or die "run: $!\n";
+	print RUN_OUT "#!/bin/sh\n$run_command\n";
+	close(RUN_OUT);
+
+	`cp run $output_dir/codes_etc/ 2>/dev/null`;
+	`chmod 750 run`;
+}
+
+
+################################################################################
+# code_gen()
+################################################################################
+sub code_gen{
+	my $nx = $_[0];
+	my $ny = $_[1];
+	my $nz = $_[2];
+	my %problem_params_h = %{$_[3]};
+
+	my $init_write_netcdf_h = 
+"c      Output u,v,w,s1 and s2 on full grid to netcdf files cfd3D_xxxxxx\n".
+"c      where xxxxxx corresponds to the value of istep.\n".
+"       if( mod(istep,i_all) .eq. 0 ) then\n".
+"        call MPI_BARRIER(comm,ierr)   \n".
+"        pressure_flag='no_pressure'    ! pressure not yet computed, don't write it out\n".
+"        call init_netcdf(start3D,count3D,scalars,nx,ny,nyplanes,nz,locnz,istep,\n".
+"     &                   Lx,Ly,Lz,DGRAD,bc_flag,vort_flag,\n".
+"     &                   time,work_cplx(1,1,1,8),myid,numprocs,rootname)\n".
+"        call write_netcdf(start3D,count3D,work(1,1,1,4),work(1,1,1,5),work(1,1,1,6),\n".
+"     &                            work(1,1,1,7),work(1,1,1,9),work(1,1,1,8),\n".
+"     &                            work(1,1,1,1),work(1,1,1,2),work(1,1,1,3),\n".
+"     &                            Lx,Ly,Lz,nx,ny,nyplanes,nz,locnx,locnz,myid,numprocs,istep,\n".
+"     &                            U0,s1_scale,s2_scale,rho_0,bc_flag,\n".
+"     &                            vort_flag,pressure_flag,rootname)\n".
+"       endif\n";
+
+
+	my $trans_write_netcdf_h = 
+"c      At output steps only, inverse transform pressure and add\n".
+"c      the physical space values to the current netcdf file.\n".
+"       if( mod(istep,i_all) .eq. 0 ) then\n".
+"c        inverse transform work_cplx(:,:,:,8) to get spatial representation\n".
+"c        store physical space result in work(:,:,:,1)\n".
+"        if( bc_flag .eq. 'zperiodic' ) then\n".
+"         tswitch='f'\n".
+"        elseif( bc_flag .eq. 'zslip' ) then\n".
+"         tswitch='c'\n".
+"        endif\n".
+"        iswitch=-1\n".
+"        itrig=0\n".
+"        call transform3d(work(1,1,1,1),work_cplx(1,1,1,8),nx,ny,nz,\n".
+"     &                   iswitch,tswitch,itrig,\n".
+"     &                   trigx,trigy,trigz,wn,ifax,ifay,ifaz,\n".
+"     &                   num_dims,work(1,1,1,2),work(1,1,1,4),xt,myid,\n".
+"     &                   numprocs,locnx,locnz,\n".
+"     &                   comm,twoslice,subslice)\n".
+"        pressure_flag='do_pressure_only'\n".
+"         call write_netcdf(start3D,count3D,work(1,1,1,1),work(1,1,1,8),work(1,1,1,8),\n".
+"     &                            work(1,1,1,8),work(1,1,1,8),work(1,1,1,8),\n".
+"     &                            work(1,1,1,8),work(1,1,1,8),work(1,1,1,8),\n".
+"     &                            Lx,Ly,Lz,nx,ny,nyplanes,nz,locnx,locnz,myid,numprocs,istep,\n".
+"     &                            U0,s1_scale,s2_scale,rho_0,bc_flag,\n".
+"     &                            vort_flag,pressure_flag,rootname)\n".
+"       endif  ! end of block for transforming/writing pressure\n";
+
+
+	open(OUTPUT_CONTROL_IN, "source/output_control") or die "source/output_control: $!\n";
+	chomp(my @output_control = <OUTPUT_CONTROL_IN>);
+	close(OUTPUT_CONTROL_IN);
+
+
+	open(INIT_WRITE_NETCDF_H_OUT, ">source/init_write_netcdf.h") or die "source/init_write_netcdf.h: $!\n";
+	open(TRANS_WRITE_NETCDF_H_OUT, ">source/trans_write_netcdf.h") or die "source/trans_write_netcdf.h: $!\n";
+	
+	print TRANS_WRITE_NETCDF_H_OUT "c XXX  This code is auto-generated by the setup script! XXX\n";
+	print TRANS_WRITE_NETCDF_H_OUT "c XXX  Any changes by you will be overwriten the next time you run setup!! XXX\n";
+	print INIT_WRITE_NETCDF_H_OUT "c XXX  This code is auto-generated by the setup script! XXX\n";
+	print INIT_WRITE_NETCDF_H_OUT "c XXX  Any changes by you will be overwriten the next time you run setup!! XXX\n";
+
+	my $counter = 1;
+	foreach (@output_control){
+		s/#.*//;
+		s/\s//g;
+		s/\(//g;
+		s/\)//g;
+		if($_){
+			my @tmp = split /,/;
+
+			# nx
+			if($tmp[0] eq "*"){ 
+				print TRANS_WRITE_NETCDF_H_OUT "        start3D(1) = 1\n";	
+				print TRANS_WRITE_NETCDF_H_OUT "        count3D(1) = $nx\n";	
+				print INIT_WRITE_NETCDF_H_OUT "        start3D(1) = 1\n";	
+				print INIT_WRITE_NETCDF_H_OUT "        count3D(1) = $nx\n";	
+			}elsif($tmp[0] =~ /\:/){
+				my @tmp2 = split /\:/, $tmp[0];
+				if($tmp2[1] > $nx){
+					print STDERR "output_control line $counter: $tmp2[1] greater than nx\n";
+					exit(-1);
+				}	
+				my $count = $tmp2[1] - $tmp2[0] + 1;
+				print TRANS_WRITE_NETCDF_H_OUT "        start3D(1) = $tmp2[0]\n";	
+				print TRANS_WRITE_NETCDF_H_OUT "        count3D(1) = $count\n";	
+				print INIT_WRITE_NETCDF_H_OUT "        start3D(1) = $tmp2[0]\n";	
+				print INIT_WRITE_NETCDF_H_OUT "        count3D(1) = $count\n";	
+			}else{
+				if($tmp[0] > $nx){
+					print STDERR "output_control line $counter: $tmp[0] greater than nx\n";
+					exit(-1);
+				}	
+				print TRANS_WRITE_NETCDF_H_OUT "        start3D(1) = $tmp[0]\n";	
+				print TRANS_WRITE_NETCDF_H_OUT "        count3D(1) = 1\n";	
+				print INIT_WRITE_NETCDF_H_OUT "        start3D(1) = $tmp[0]\n";	
+				print INIT_WRITE_NETCDF_H_OUT "        count3D(1) = 1\n";	
+			}
+
+			# ny
+			if($tmp[1] eq "*"){ 
+				print TRANS_WRITE_NETCDF_H_OUT "        start3D(2) = 1\n";	
+				print INIT_WRITE_NETCDF_H_OUT "        start3D(2) = 1\n";	
+				if($ny == 0){
+					print TRANS_WRITE_NETCDF_H_OUT "        count3D(2) = 1\n";
+					print INIT_WRITE_NETCDF_H_OUT "        count3D(2) = 1\n";
+				}else{
+					print TRANS_WRITE_NETCDF_H_OUT "        count3D(2) = $ny\n";
+					print INIT_WRITE_NETCDF_H_OUT "        count3D(2) = $ny\n";
+				}
+			}elsif($tmp[1] =~ /\:/){
+				my @tmp2 = split /\:/, $tmp[1];
+				if($ny != 0 && $tmp2[1] > $ny){
+					print STDERR "output_control line $counter: $tmp2[1] greater than ny\n";
+					exit(-1);
+				}
+				my $count = $tmp2[1] - $tmp2[0] + 1;
+				print TRANS_WRITE_NETCDF_H_OUT "        start3D(2) = $tmp2[0]\n";	
+				print TRANS_WRITE_NETCDF_H_OUT "        count3D(2) = $count\n";	
+				print INIT_WRITE_NETCDF_H_OUT "        start3D(2) = $tmp2[0]\n";	
+				print INIT_WRITE_NETCDF_H_OUT "        count3D(2) = $count\n";	
+			}else{
+				if($ny != 0 && $tmp[1] > $ny){
+					print STDERR "output_control line $counter: $tmp[1] greater than ny\n";
+					exit(-1);
+				}	
+				print TRANS_WRITE_NETCDF_H_OUT "        start3D(2) = $tmp[1]\n";	
+				print TRANS_WRITE_NETCDF_H_OUT "        count3D(2) = 1\n";	
+				print INIT_WRITE_NETCDF_H_OUT "        start3D(2) = $tmp[1]\n";	
+				print INIT_WRITE_NETCDF_H_OUT "        count3D(2) = 1\n";	
+			}
+
+# nz  SOMETIMES COUNT=NZ , if bc_flag='zslip' there is good data in the nz+1 plane
+			if($tmp[2] eq "*"){ 
+				print TRANS_WRITE_NETCDF_H_OUT "        start3D(3) = 1\n";	
+				print INIT_WRITE_NETCDF_H_OUT "        start3D(3) = 1\n";	
+				if($problem_params_h{"bc_flag"} eq "\'zslip\'"){
+					print TRANS_WRITE_NETCDF_H_OUT "        count3D(3) = $nz + 1\n";	
+					print INIT_WRITE_NETCDF_H_OUT "        count3D(3) = $nz + 1\n";	
+				}else{
+					print TRANS_WRITE_NETCDF_H_OUT "        count3D(3) = $nz\n";	
+					print INIT_WRITE_NETCDF_H_OUT "        count3D(3) = $nz\n";	
+				}
+			}elsif($tmp[2] =~ /\:/){
+				my @tmp2 = split /\:/, $tmp[2];
+				if($tmp2[1] > $nz){
+					print STDERR "output_control line $counter: $tmp2[1] greater than nz\n";
+					exit(-1);
+				}	
+				my $count = $tmp2[1] - $tmp2[0] + 1;
+				print TRANS_WRITE_NETCDF_H_OUT "        start3D(3) = $tmp2[0]\n";
+				print TRANS_WRITE_NETCDF_H_OUT "        count3D(3) = $count\n";	
+				print INIT_WRITE_NETCDF_H_OUT "        start3D(3) = $tmp2[0]\n";
+				print INIT_WRITE_NETCDF_H_OUT "        count3D(3) = $count\n";	
+			}else{
+				if($tmp[2] > $nz+1){
+					print STDERR "output_control line $counter: $tmp[2] greater than nz+1\n";
+					exit(-1);
+				}	
+				print TRANS_WRITE_NETCDF_H_OUT "        start3D(3) = $tmp[2]\n";	
+				print TRANS_WRITE_NETCDF_H_OUT "        count3D(3) = 1\n";	
+				print INIT_WRITE_NETCDF_H_OUT "        start3D(3) = $tmp[2]\n";	
+				print INIT_WRITE_NETCDF_H_OUT "        count3D(3) = 1\n";	
+			}
+
+			print TRANS_WRITE_NETCDF_H_OUT "        rootname = '$tmp[4]'\n";
+			print INIT_WRITE_NETCDF_H_OUT "        rootname = '$tmp[4]'\n";
+
+			print TRANS_WRITE_NETCDF_H_OUT "        i_all = $tmp[3]/dt\n";
+			print INIT_WRITE_NETCDF_H_OUT "        i_all = $tmp[3]/dt\n";
+
+			print TRANS_WRITE_NETCDF_H_OUT "$trans_write_netcdf_h";
+			print INIT_WRITE_NETCDF_H_OUT "$init_write_netcdf_h";
+
+			print TRANS_WRITE_NETCDF_H_OUT "\n\n";
+			print INIT_WRITE_NETCDF_H_OUT "\n\n";
+		}
+		$counter++;
+	}	
+}	
+
+
+################################################################################
+# make()
+# 
+# Build the binaries.
+################################################################################
+sub make{
+
+        print " coucou make\n"; 
+	if(! system("cd source && make flow_solve.x")){
+		print "Finished building. Type \"./run\" to begin.\n";
+	}	
+}
+
+################################################################################
+# report_memory()
+#
+# Reports the memory requirements of this particular build.
+################################################################################
+sub report_memory{	
+
+	my $number_of_integers = 0;
+	my $number_of_reals = 0;
+	my $number_of_complexs = 0;
+	my $number_of_characters = 0;
+
+#       integer numprocs,num_dims,nx,ny,nz,locnx,locnz,nwork
+	$number_of_integers += 8;
+
+#       character*80 netcdf_file
+	$number_of_characters += 80;
+
+#       parameter(numprocs=2)         ! must match specification (-np) in run.sh 
+#       parameter(num_dims=3)         ! num_dims and ny must be consistent
+#       parameter(nx=32,ny=32,nz=32)  ! ny=0 for 2d problems
+#       parameter(locnz=nz/numprocs,locnx=(nx/2)/numprocs)
+#       parameter(nwork=2*(nx)*(nz+1))   ! max of [nx*(nz+1),nx*ny]
+	my $numprocs = $_[0];
+	my $ndims = $_[1];
+	my $nx = $_[2];
+	my $ny = $_[3];
+	my $nz = $_[4];
+	my $locnz = $nz / $numprocs;
+	my $locnx = ($nx/2) / $numprocs;
+	my $nwork = 2 * $nx * ($nz + 1);
+
+#       integer nfloats,nsensors,nfloatparameters
+#       parameter(nfloats=0,nsensors=7,nfloatparameters=4)
+	$number_of_integers += 3;
+	my $nfloats = 0; 
+	my $nsensors = 7;
+	my $nfloatparameters = 4;
+
+#       real rho_bar(locnz+1),ddz(locnz+1),d2dz2(locnz+1)
+	$number_of_reals += 3 * ($locnz + 1);
+
+#       real u(nx+2,ny+1,locnz+1),v(nx+2,ny+1,locnz+1)
+#       real w(nx+2,ny+1,locnz+1),pd(nx+2,ny+1,locnz+1)
+#       real ps1(nx+2,ny+1,locnz+1)
+	$number_of_reals += 5 * (($nx + 2) * ($ny + 1) * ($locnz + 1));
+
+#       complex u_cplx(locnx,ny+1,nz+1,2),v_cplx(locnx,ny+1,nz+1,2)
+#       complex w_cplx(locnx,ny+1,nz+1,2),pd_cplx(locnx,ny+1,nz+1,2)
+#       ps1_cplx(locnx,ny+1,nz+1,2)
+	$number_of_complexs += 5 * ($locnx * ($ny + 1) * ($nz + 1) * 2);
+
+#       complex Tr1(locnx,ny+1,nz+1,3),Tr2(locnx,ny+1,nz+1,3)
+#       complex Tr3(locnx,ny+1,nz+1,3),Tr4(locnx,ny+1,nz+1,3)
+#       complex Tr5(locnx,ny+1,nz+1,3)
+	$number_of_complexs += 5 * ($locnx * ($ny + 1) * ($nz + 1) * 3);
+
+#       real work(nx+2,ny+1,locnz+1,13)
+#       complex work_cplx(locnx,ny+1,nz+1,13)
+#       real scratch(nwork)
+	$number_of_reals += ($nx + 2) * ($ny + 1) * ($locnz + 1) * 13;
+	$number_of_complexs += $locnx * ($ny + 1) * ($nz + 1) * 13;
+	$number_of_reals += $nwork;
+
+#       real wnx(locnx),wny(ny+1),wnz(nz+1)
+#       real amp(locnx,ny+1,nz+1,2)
+	$number_of_reals += $locnx + ($ny + 1) + ($nz + 1);
+	$number_of_reals += $locnx * ($ny + 1) * ($nz + 1) * 2;
+
+#       real trigx(3*(nx+2)/2+1),trigy(2*(ny+1)),trigz(2*nz)
+#       complex wn(nz/4+1),xt(nx+2, nz/2+1)
+#       integer ifax(13),ifay(13),ifaz(13),itrig
+#       character tswitch
+	$number_of_reals += (3 * ($nx + 2) / 2 + 1) + (2 * ($ny + 1)) + (2 * $nz);
+	$number_of_complexs += ($nz / 4 + 1) + (($nx + 2) * ($nz / 2 + 1));
+	$number_of_integers += 13 + 13 + 13 + 1;
+	$number_of_characters += 1;
+
+#       real float_variables(6,nfloats)
+	$number_of_reals += 6 * $nfloats;
+
+#       real sensor_data(nsensors,nfloats)
+	$number_of_reals += $nsensors * $nfloats;
+
+#       real float_parameters(nfloatparameters,nfloats)
+#       real z_close,z_offset,delta_w
+	$number_of_reals += $nfloatparameters * $nfloats;
+	$number_of_reals += 3;
+
+#       real k_rk4(5,nfloats,4)
+	$number_of_reals += 5 * $nfloats * 4;
+
+#       real Rot,Ri,Re,Pr
+	$number_of_reals += 4;
+
+#       real Lx,Ly,Lz,dx,dy,dz,U0,DGRAD,rho_0,f,g,kappa,nu,kmax
+#       real pi,xlat,xOmega,bfreq,dt,t_start,t_end,t_write_all
+#       real t_write_selective,t_stat,t_floats_on
+#       real time,time_scale,delta_u,delta_rho,z_0,h_0,k_0,a,b,c
+#       real x0,y0,z0,interp_val,efactor,T_diss
+#	real S1GRAD,delta_s1
+	$number_of_reals += 14 + 8 + 3 + 10 + 6 + 2;
+
+#       integer i,j,k,istep,nyplanes,istart_floats,N,NM1,M,MM1,MM2
+#       integer istart,iend,i_all,i_selective,i_stat,tmp,j_float_time
+#       integer subslice,twoslice,comm,status,myid,iproc,nprocs,ierr,p
+	$number_of_integers += 11 + 7 + 9;
+
+#       character*80 bc_flag,float_switch,step_flag,prelim_flag,fcs_flag
+#       character*80 diss_flag
+#       character*3  vort_flag,force_flag	
+	$number_of_characters += 80 * (6) + 3 * 2;
+
+	my $memory = ((($number_of_integers * $SIZEOF_INTEGER)
+				+ ($number_of_reals * $SIZEOF_REAL)
+				+ ($number_of_complexs * $SIZEOF_COMPLEX)
+				+ ($number_of_characters * $SIZEOF_CHARACTER))
+			/ 1000000);
+
+	print "\nMemory requirements: \n";
+	print "   Memory required (total) -> $memory MB's\n";
+	print "   Memory required (per processor) -> ".($memory/$numprocs)." MB's\n";
+
+	print "\nMemory statistics for local machine: \n";
+	system("free -mto");
+	print "\n";
+}
+
+################################################################################
+# report_disk_allocation() 
+#
+# report the anticipated disk usage for this build.
+################################################################################
+sub report_disk_allocation{
+
+	my $numprocs = $_[0];
+	my $ndims = $_[1];
+	my $nx = $_[2];
+	my $ny = $_[3];
+	my $nz = $_[4];
+	my $output_dir = $_[5];
+	my $locnz = $nz / $numprocs;
+
+	my %problem_params_h_variables = %{$_[6]};
+
+	my $t_start = eval($problem_params_h_variables{"t_start"});
+	my $t_end = eval($problem_params_h_variables{"t_end"});
+	my $t_write_all = eval($problem_params_h_variables{"t_write_all"});
+	my $dt = eval($problem_params_h_variables{"dt"});
+	my $vort_flag = eval($problem_params_h_variables{"vort_flag"});
+
+	my $num_outputs = int(($t_end - $t_start)/$t_write_all) + 1;
+
+	my $num_variables = 6;
+	if($vort_flag =~ /yes/i){
+		$num_variables = 8;
+	}
+
+	my $base_case = ($numprocs * $num_outputs) - $num_outputs;
+
+	my $result1 = $base_case * $num_variables * $SIZEOF_REAL * $nx * $ny * $locnz;
+	my $result2 = $num_outputs * $num_variables * $SIZEOF_REAL * $nx * $ny * ($locnz + 1);
+	my $result = ($result1 + $result2) / 1000000;
+
+	print "\nApproximate disk space allocation anticipated: $result MB's\n";
+
+	print "\nDisk statistics for $ENV{\"PWD\"}/$output_dir: \n";
+	system("df -m $output_dir");
+	print "\n";
+}
+
+################################################################################
+# create_matlab_data
+#
+# creates the output/codes_etc/data.m file.
+################################################################################
+sub create_matlab_data{
+	my $np = $_[0];
+	my $ndims = $_[1];
+	my $nx = $_[2];
+	my $ny = $_[3];
+	my $nz = $_[4];
+	my $output_dir = $_[5];
+	my $matlab = $_[6];
+
+	my %problem_params_h_variables;
+
+	open(IN_FILE_IN, "source/problem_params.h") or die "source/problem_params.h: $!\n";
+	chomp(my @in_file = <IN_FILE_IN>);
+	close(IN_FILE_IN);
+
+	for(my $i = 0; $i <= $#in_file; $i++){
+#		deal with the case where long lines of fortran are continued on
+#		the next line.
+LINE_WRAP:	if($i != $#in_file && $in_file[$i+1] =~ /^\s{5}\S/){
+			$in_file[$i+1] =~ s/^\s{5}\S//;
+			$in_file[$i] .= $in_file[$i+1];
+			splice(@in_file, $i+1, 1);
+			$i--;
+			goto LINE_WRAP;
+		}
+
+		$_ = $in_file[$i];
+		s/^c.*//;
+		s/\s//g;
+		s/(.*)\!.*/$1/;
+
+#		if there is still data on this line, then grab any variables and
+#		store thier value in the resultant hash.
+		if(/\=/){
+			my @tmp = split /=/;
+			my $tmp = $tmp[1];
+
+#			grab any tokens and see if they contain valid data in any of
+#			the existing hash's.
+			while($tmp =~ /([a-zA-Z]\w*)/){
+				my $foo = $1;
+				if(exists($problem_params_h_variables{$foo})){
+					$tmp[1] =~ s/$foo/$problem_params_h_variables{$foo}/;
+				}
+				$tmp =~ s/$foo//;
+			}
+			$tmp[1] =~ s/\*\*/^/g;
+			$problem_params_h_variables{$tmp[0]} = $tmp[1];
+		}	
+	}
+
+	if($matlab){
+		open(DATA_M_OUT, ">output/codes_etc/data.m") or die "output/codes_etc/data.m: $!\n";
+		print DATA_M_OUT "nx=$nx;\n";
+		print DATA_M_OUT "ny=$ny;\n";
+		print DATA_M_OUT "nz=$nz;\n";
+		print DATA_M_OUT "Lx=$problem_params_h_variables{\"Lx\"};\n";
+		print DATA_M_OUT "Ly=$problem_params_h_variables{\"Ly\"};\n";
+		print DATA_M_OUT "Lz=$problem_params_h_variables{\"Lz\"};\n";
+		print DATA_M_OUT "f=$problem_params_h_variables{\"f\"};\n";
+		print DATA_M_OUT "g=$problem_params_h_variables{\"g\"};\n";
+		print DATA_M_OUT "rho_0=$problem_params_h_variables{\"rho_0\"};\n";
+		print DATA_M_OUT "bfreq=$problem_params_h_variables{\"bfreq\"};\n";
+
+		print DATA_M_OUT "force_flag=$problem_params_h_variables{\"force_flag\"};\n";
+	}
+
+#	save this to use again later.
+	\%problem_params_h_variables;
+}
+
+################################################################################
+# check_powers()
+#
+# checks the input to make sure it is only divisible by 2, 3, or 5.
+################################################################################
+sub check_powers{
+	my $number = $_[0];
+	if(!$number){return;}
+
+	while($number != 1){
+		if(!($number % 2)){$number /= 2;}
+		elsif(!($number % 3)){$number /= 3;}
+		elsif(!($number % 5)){$number /= 5;}
+		else{
+			print STDERR "$_[1] can only be divisible by 2, 3, or 5.\n";
+			exit(-1);
+		}
+	}
+}
+
+########################################################################
+# atan()
+#
+# Wraper for perls native atan2 so perl can eval fortran atan calls.
+########################################################################
+sub atan{
+	atan2($_[0],1);
+}
+
+########################################################################
+# clean()
+#
+# a couple of lines that clean out the source tree. 
+########################################################################
+sub clean{
+	`cd source && rm * 2>/dev/null`;
+	`rm flow_solve.x 2>/dev/null`;
+	`rm run 2>/dev/null`;
+}
+
+########################################################################
+# populate()
+#
+# Populates the source tree and properly mangles runtime_variables.h
+########################################################################
+sub populate{
+	my $project = $_[0];
+	my @runtime_variables_h;
+
+	`cp projects/trivial/\* source/ 2>/dev/null`;
+	`cp $project/\* source/ 2>/dev/null`;
+
+	open(RUNTIME_VARIABLES_H_IN, "source/runtime_variables.h")
+		or die "source/runtime_variables.h: $!\n";
+	chomp(@runtime_variables_h = <RUNTIME_VARIABLES_H_IN>);
+	close(RUNTIME_VARIABLES_H_IN);
+
+	open(RUNTIME_VARIABLES_H_OUT, ">source/runtime_variables.h")
+		or die "source/runtime_variables.h: $!\n";
+	splice(@runtime_variables_h, 0, 0, "c $project");
+	foreach(@runtime_variables_h){
+		print RUNTIME_VARIABLES_H_OUT "$_\n";
+	} 
+	close(RUNTIME_VARIABLES_H_OUT);
+
+	\@runtime_variables_h;
+}
