#! /bin/bash
#
# This is a script to generate FORTRAN code from registry
#
# A. Spiga - 17/03/08
#


#
#
#
echo AUTOMATIC FILE GENERATION
grep '#SAVEMARS2' Registry.EM | grep 'rhd' > fromregistry2
grep '#SAVEMARS3' Registry.EM | grep 'rhd' > fromregistry3
yeah2=$(awk 'END {print NR}' fromregistry2)
yeah3=$(awk 'END {print NR}' fromregistry3)
echo save ${yeah2} 2D arrays
echo save ${yeah3} 3D arrays


#
#
#
\rm wrf_output_2d.h 2> /dev/null
touch wrf_output_2d.h

echo '!-------------------' >> test_include
echo '! INCLUDE 'wrf_output_2d.h'' >> test_include
echo '!-------------------' >> test_include
if [ ${yeah2} -ne 0 ]
then
awk '{print "      INTEGER, PARAMETER :: ind_"$3" = " NR}' fromregistry2 >> test_include
awk 'END {print "      INTEGER, PARAMETER :: n2d = " NR}' fromregistry2 >> test_include
mv test_include wrf_output_2d.h
else
echo '           INTEGER, PARAMETER :: n2d = 1' >> test_include
mv test_include wrf_output_2d.h
fi

\rm wrf_output_3d.h 2> /dev/null
touch wrf_output_3d.h

echo '!-------------------' >> test_include
echo '! INCLUDE 'wrf_output_3d.h'' >> test_include
echo '!-------------------' >> test_include
if [ ${yeah3} -ne 0 ]
then
awk '{print "      INTEGER, PARAMETER :: ind_"$3" = " NR}' fromregistry3 >> test_include
awk 'END {print "      INTEGER, PARAMETER :: n3d = " NR}' fromregistry3 >> test_include
mv test_include wrf_output_3d.h
else
echo '           INTEGER, PARAMETER :: n3d = 1' >> test_include
mv test_include wrf_output_3d.h
fi


#
#
#
\rm fill_save_2d.F90 2> /dev/null
if [ ${yeah2} -ne 0 ]
then
echo 'SUBROUTINE fill_save_2d( &' >> test_subroutine
awk '{print $NF ",&"}' fromregistry2 >> test_subroutine
echo 'ngrid,&' >> test_subroutine
echo 'output_tab2d)' >> test_subroutine
echo '   ' >> test_subroutine
echo 'IMPLICIT NONE' >> test_subroutine
echo '   ' >> test_subroutine
echo 'include "wrf_output_2d.h"' >> test_subroutine
#echo 'include "dimension.h"' >> test_subroutine
echo '   ' >> test_subroutine
echo 'INTEGER :: ngrid' >> test_subroutine
awk '{print "REAL, DIMENSION(ngrid) :: " $NF}' fromregistry2 >> test_subroutine
echo 'REAL, DIMENSION(ngrid,n2d) :: output_tab2d' >> test_subroutine
echo '   ' >> test_subroutine
awk '{print "output_tab2d(:,ind_"$3")="$NF"(:)"}' fromregistry2 >> test_subroutine
echo '   ' >> test_subroutine
echo 'END SUBROUTINE fill_save_2d' >> test_subroutine
mv test_subroutine fill_save_2d.F90
fi

\rm fill_save_3d.F90 2> /dev/null
if [ ${yeah3} -ne 0 ]
then
echo 'SUBROUTINE fill_save_3d( &' >> test_subroutine
awk '{print $NF ",&"}' fromregistry3 >> test_subroutine
echo 'ngrid,&' >> test_subroutine
echo 'nlayer,&' >> test_subroutine
echo 'output_tab3d)' >> test_subroutine
echo '   ' >> test_subroutine
echo 'IMPLICIT NONE' >> test_subroutine
echo '   ' >> test_subroutine
echo 'include "wrf_output_3d.h"' >> test_subroutine
#echo 'include "dimension.h"' >> test_subroutine
echo '   ' >> test_subroutine
echo 'INTEGER :: ngrid' >> test_subroutine
echo 'INTEGER :: nlayer' >> test_subroutine
awk '{print "REAL, DIMENSION(ngrid,nlayer) :: " $NF}' fromregistry3 >> test_subroutine
echo 'REAL, DIMENSION(ngrid,nlayer,n3d) :: output_tab3d' >> test_subroutine
echo '   ' >> test_subroutine
awk '{print "output_tab3d(:,:,ind_"$3")="$NF"(:,:)"}' fromregistry3 >> test_subroutine
echo '   ' >> test_subroutine
echo 'END SUBROUTINE fill_save_3d' >> test_subroutine
mv test_subroutine fill_save_3d.F90
fi


#
#
#
\rm fill_save.inc 2> /dev/null

if [ ${yeah2} -ne 0 ]
then
echo '      CALL fill_save_2d(' >> fill_save.inc
awk '{print "     . "$NF ","}' fromregistry2 >> fill_save.inc
echo '     . ngrid,' >> fill_save.inc
echo '     . output_tab2d)' >> fill_save.inc
fi

if [ ${yeah3} -ne 0 ]
then
echo '      CALL fill_save_3d(' >> fill_save.inc
awk '{print "     . "$NF ","}' fromregistry3 >> fill_save.inc
echo '     . ngrid,' >> fill_save.inc
echo '     . nlayer,' >> fill_save.inc
echo '     . output_tab3d)' >> fill_save.inc
fi



#
#
#
\rm module_lmd_driver_output1.inc 2> /dev/null
touch module_lmd_driver_output1.inc
\rm module_lmd_driver_output2.inc 2> /dev/null
touch module_lmd_driver_output2.inc
\rm module_lmd_driver_output3.inc 2> /dev/null
touch module_lmd_driver_output3.inc

echo 'REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT)  :: &' >> module_lmd_driver_output2.inc

if [ ${yeah2} -ne 0 ]
then
awk '{print "       " $3 ",&"}' fromregistry2 >> module_lmd_driver_output1.inc
more module_lmd_driver_output1.inc >> module_lmd_driver_output2.inc
awk '{print $3"(i,j) = output_tab2d(subs,ind_"$3")"}' fromregistry2 >> module_lmd_driver_output3.inc
fi

echo '   PSFC,TSK' >> module_lmd_driver_output2.inc
echo 'REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(OUT)  :: &' >> module_lmd_driver_output2.inc

if [ ${yeah3} -ne 0 ]
then
awk '{print "        " $3 ",&"}' fromregistry3 >> module_lmd_driver_output1.inc
awk '{print "        " $3 ",&"}' fromregistry3 >> module_lmd_driver_output2.inc
echo 'DO k = kps,kpe' >> module_lmd_driver_output3.inc
awk '{print $3"(i,k,j) = output_tab3d(subs,k,ind_"$3")"}' fromregistry3 >> module_lmd_driver_output3.inc
echo 'ENDDO' >> module_lmd_driver_output3.inc
fi

echo '   RTHBLTEN,RUBLTEN,RVBLTEN' >> module_lmd_driver_output2.inc



#
#
#
\rm module_lmd_driver_output4.inc 2> /dev/null
touch module_lmd_driver_output4.inc
awk '{print "  &    ,"$3"=grid%"$3"   &"}' fromregistry2 >> module_lmd_driver_output4.inc
awk '{print "  &    ,"$3"=grid%"$3"   &"}' fromregistry3 >> module_lmd_driver_output4.inc



#
#
#
\rm fromregistry2
\rm fromregistry3
mv module_lmd_driver_output?.inc ../inc/
\rm ../mars_lmd/libf/phymars/fill_save_?d.F90 2> /dev/null
\rm ../mars_lmd/libf/phymars/wrf_output_?d.h 2> /dev/null
mv fill_save.inc fill_save_?d.F90 wrf_output_?d.h ../mars_lmd/libf/phymars/

#
#
#
echo END of AUTOMATIC FILE GENERATION
echo I guess you modified 'Registry.EM' ... 
echo ... so remove the file 'Registry' and recompile the model
