xref: /phasta/converterIO/create_IO_N2O_input.sh (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen#!/bin/bash
2*59599516SKenneth E. Jansen
3*59599516SKenneth E. Jansennargs=3  # Arguments of the script:
4*59599516SKenneth E. Jansen         #  time step
5*59599516SKenneth E. Jansen         #  number parts
6*59599516SKenneth E. Jansen         #  number of syncio files wanted
7*59599516SKenneth E. Jansen
8*59599516SKenneth E. Jansen### Function die called when there is a problem
9*59599516SKenneth E. Jansenfunction die() {
10*59599516SKenneth E. Jansen        echo -e "${1}"
11*59599516SKenneth E. Jansen        exit 1
12*59599516SKenneth E. Jansen}
13*59599516SKenneth E. Jansen
14*59599516SKenneth E. Jansen
15*59599516SKenneth E. Jansen#####################################################################
16*59599516SKenneth E. Jansen### End of functions - Beginning of the script
17*59599516SKenneth E. Jansen#####################################################################
18*59599516SKenneth E. Jansen
19*59599516SKenneth E. Jansen
20*59599516SKenneth E. Jansen### Check that user entered proper number of args
21*59599516SKenneth E. Jansenif [ "${#}" -lt "$nargs" ] || [ "$1" == "-h" ]; then
22*59599516SKenneth E. Jansen        die "\n Check usage: \n  $0\n\n \$1: <time step>\n \$2: <number of parts>\n \$3: <number of SyncIO files>\n\n"
23*59599516SKenneth E. Jansenfi
24*59599516SKenneth E. Jansen
25*59599516SKenneth E. Jansen
26*59599516SKenneth E. Jansen### Read arguments of the script
27*59599516SKenneth E. JansenN_steps=$1
28*59599516SKenneth E. JansenN_parts=$2
29*59599516SKenneth E. JansenN_files=$3
30*59599516SKenneth E. Jansen
31*59599516SKenneth E. Jansenecho "Time step: $N_steps"
32*59599516SKenneth E. Jansenecho "Number of parts: $N_parts"
33*59599516SKenneth E. Jansenecho "Number of SyncIO files: $N_files"
34*59599516SKenneth E. Jansenecho ""
35*59599516SKenneth E. Jansen
36*59599516SKenneth E. Jansendir=$N_parts-procs_case
37*59599516SKenneth E. Jansen
38*59599516SKenneth E. Jansen
39*59599516SKenneth E. Jansen### Do a couple of sanity check on the input parameters of the script
40*59599516SKenneth E. Jansenif [ ! -d $dir ]; then
41*59599516SKenneth E. Jansen	die "$N_parts-procs_case does not exist\n Aborting"
42*59599516SKenneth E. Jansenfi
43*59599516SKenneth E. Jansen
44*59599516SKenneth E. Jansenif [ ! -e $dir/restart-dat.$N_steps.1 ]; then
45*59599516SKenneth E. Jansen        die "Time step $N_steps does not exist in $N_parts-procs_case\n Aborting"
46*59599516SKenneth E. Jansenfi
47*59599516SKenneth E. Jansen
48*59599516SKenneth E. Jansennsynciofiles=`ls $dir/restart-dat.$N_steps.* | wc -l`
49*59599516SKenneth E. Jansenif [ "$nsynciofiles" -ne "$N_files" ]; then
50*59599516SKenneth E. Jansen	die "The number of SyncIO files requested does not match with what is found in the procs_case directory: $nsynciofiles - $N_files"
51*59599516SKenneth E. Jansenfi
52*59599516SKenneth E. Jansen
53*59599516SKenneth E. Jansenresmodulo=$(($N_parts % $N_files))
54*59599516SKenneth E. Jansenif [ "$resmodulo" -ne "0" ]; then
55*59599516SKenneth E. Jansen        die "The number of SyncIO files requested $N_files is not a multiple of the number of parts $N_parts\n Aborting"
56*59599516SKenneth E. Jansenfi
57*59599516SKenneth E. Jansen
58*59599516SKenneth E. Jansen
59*59599516SKenneth E. Jansen### First, count the number of fields (blocks) in the restart files and list them
60*59599516SKenneth E. Jansenlist_restart_fields=list_restart_fields.dat
61*59599516SKenneth E. Jansengrep -a ' : < ' $dir/restart-dat.$N_steps.1 | grep -v '< 0 >' | awk -F @ '{print $1}' | uniq -c > $list_restart_fields
62*59599516SKenneth E. Jansenrestart_fields=`cat $list_restart_fields | wc -l`
63*59599516SKenneth E. Jansenecho "There are $restart_fields different block fields in the restart files:"
64*59599516SKenneth E. Jansencat $list_restart_fields
65*59599516SKenneth E. Jansenecho ""
66*59599516SKenneth E. Jansen
67*59599516SKenneth E. Jansen### Start to write now IO.N2O.input
68*59599516SKenneth E. Jansenfile=IO.N2O.input
69*59599516SKenneth E. Jansenif [ -e $file ]; then
70*59599516SKenneth E. Jansen	rm $file
71*59599516SKenneth E. Jansenfi
72*59599516SKenneth E. Jansen
73*59599516SKenneth E. Jansen# By default, the geombc files already exist under the posix format so no need to deconvert them.
74*59599516SKenneth E. Jansen# Focuss only on the restart files, which should by default only contain double blocks.
75*59599516SKenneth E. Jansen# In what follows, any single header with no block (characterized by '< 0 >') are also ignored.
76*59599516SKenneth E. JansenN_geombc_fields_double=0
77*59599516SKenneth E. JansenN_geombc_fields_integer=0
78*59599516SKenneth E. JansenN_restart_fields_double=$restart_fields
79*59599516SKenneth E. JansenN_restart_fields_integer=0
80*59599516SKenneth E. Jansen
81*59599516SKenneth E. Jansenecho "N-geombc-fields-double: $N_geombc_fields_double;" >> $file
82*59599516SKenneth E. Jansenecho "N-geombc-fields-integer: $N_geombc_fields_integer;" >> $file
83*59599516SKenneth E. Jansenecho "N-restart-fields-double: $N_restart_fields_double;" >> $file
84*59599516SKenneth E. Jansenecho "N-restart-fields-integer: $N_restart_fields_integer;" >> $file
85*59599516SKenneth E. Jansenecho "N-steps: $N_steps;" >> $file
86*59599516SKenneth E. Jansenecho "N-parts: $N_parts;" >> $file
87*59599516SKenneth E. Jansenecho "N-files: $N_files;" >> $file
88*59599516SKenneth E. Jansen
89*59599516SKenneth E. Jansen# Now add all the fields found in the restart files.
90*59599516SKenneth E. Jansen# Asumption always verified so far: all the fields in the restart files are double and their header includes 3 integer.
91*59599516SKenneth E. Jansen# If this is not the case any more, then more complex verifications should be added like in the other script.
92*59599516SKenneth E. Jansen
93*59599516SKenneth E. Jansenecho "By default, they will all be specified in $file in order to be deconverted but this can be manually modified"
94*59599516SKenneth E. Jansenecho "This script also assumes that all blocks listed are double"
95*59599516SKenneth E. Jansenwhile read line
96*59599516SKenneth E. Jansendo
97*59599516SKenneth E. Jansen        field=`echo $line | awk '{$1="";print $0}' |  sed -e 's/  */ /g' | sed -e 's/^[ \t]*//g' | sed -e 's/[ \t]*$//g'`
98*59599516SKenneth E. Jansen	echo "restart, $field, double, block, 3;" >> $file
99*59599516SKenneth E. Jansendone <  $list_restart_fields
100*59599516SKenneth E. Jansen
101*59599516SKenneth E. Jansen### Some cleaning
102*59599516SKenneth E. Jansenrm $list_restart_fields
103*59599516SKenneth E. Jansen
104*59599516SKenneth E. Jansenecho "$file generated for the converter"
105*59599516SKenneth E. Jansen
106