<p><b>dwj07@fsu.edu</b> 2012-06-14 15:36:50 -0600 (Thu, 14 Jun 2012)</p><p><br>
        -- BRANCH COMMIT --<br>
<br>
        Adding python/bash scripts to perform automated study of various parameters.<br>
</p><hr noshade><pre><font color="gray">Added: branches/ocean_projects/ocean_test_cases_staging/ocean/parameter_study/explored_parameters.py
===================================================================
--- branches/ocean_projects/ocean_test_cases_staging/ocean/parameter_study/explored_parameters.py         (rev 0)
+++ branches/ocean_projects/ocean_test_cases_staging/ocean/parameter_study/explored_parameters.py        2012-06-14 21:36:50 UTC (rev 1981)
@@ -0,0 +1,29 @@
+#!/usr/bin/pyton
+explored_parameters["config_time_integration"].append("'RK4'")
+explored_parameters["config_time_integration"].append("'split_explicit'")
+explored_parameters["config_h_mom_eddy_visc2"].append("1.0")
+explored_parameters["config_h_mom_eddy_visc4"].append("0.0")
+explored_parameters["config_visc_vorticity_term"].append(".false.")
+explored_parameters["config_visc_vorticity_term"].append(".true.")
+explored_parameters["config_visc_vorticity_visc4_scale"].append("10.0")
+explored_parameters["config_visc_vorticity_visc4_scale"].append("0.0")
+explored_parameters["config_h_tracer_eddy_diff4"].append("10.0")
+explored_parameters["config_h_tracer_eddy_diff4"].append("0.0")
+explored_parameters["config_vert_visc_type"].append("'const'")
+explored_parameters["config_vert_visc_type"].append("'rich'")
+explored_parameters["config_vert_diff_type"].append("'const'")
+explored_parameters["config_vert_diff_type"].append("'rich'")
+explored_parameters["config_implicit_vertical_mix"].append(".false.")
+explored_parameters["config_implicit_vertical_mix"].append(".true.")
+explored_parameters["config_eos_type"].append("'linear'")
+explored_parameters["config_eos_type"].append("'jm'")
+explored_parameters["config_vert_tracer_adv"].append("'stencil'")
+explored_parameters["config_horiz_tracer_adv_order"].append("2")
+explored_parameters["config_horiz_tracer_adv_order"].append("3")
+explored_parameters["config_horiz_tracer_adv_order"].append("4")
+explored_parameters["config_thickness_adv_order"].append("2")
+explored_parameters["config_thickness_adv_order"].append("3")
+explored_parameters["config_thickness_adv_order"].append("4")
+explored_parameters["config_coef_3rd_order"].append("0.25")
+explored_parameters["config_monotonic"].append(".false.")
+explored_parameters["config_monotonic"].append(".true.")
Property changes on: branches/ocean_projects/ocean_test_cases_staging/ocean/parameter_study/explored_parameters.py
___________________________________________________________________
Added: svn:executable
+ *
Added: branches/ocean_projects/ocean_test_cases_staging/ocean/parameter_study/sortNamelistParameters.sh
===================================================================
--- branches/ocean_projects/ocean_test_cases_staging/ocean/parameter_study/sortNamelistParameters.sh         (rev 0)
+++ branches/ocean_projects/ocean_test_cases_staging/ocean/parameter_study/sortNamelistParameters.sh        2012-06-14 21:36:50 UTC (rev 1981)
@@ -0,0 +1,29 @@
+#!/bin/bash
+REGISTRY_PATH=/path/to/src/core_ocean/Registry
+NAMELIST_PATH=/path/to/default/namelist.input
+
+cat $NAMELIST_PATH | grep "config_" | awk '{print $1}' > params
+PARAMS=`cat params`
+
+rm -f parameter_groups.py group_order.py
+LASTGROUP=""
+
+for PARAM in ${PARAMS}
+do
+        NLGROUP=`grep " $PARAM " ${REGISTRY_PATH} | awk '{print $3}'`
+
+        echo 'namelist_groups["'${NLGROUP}'"].append("'${PARAM}'");' >> parameter_groups.py
+        if [ "$NLGROUP" != "$LASTGROUP" ]; then
+                echo 'group_order.append("'$NLGROUP'");' >> group_order.py
+        fi
+
+        LASTGROUP=$NLGROUP
+done
+
+chmod a+x parameter_groups.py
+rm -f params groups.params
+
+rm -f default_parameters.py
+cat ${NAMELIST_PATH} | grep "config_" | awk '{print "default_parameters[\""$1"\"].append(\""$3"\")"}' >> default_parameters.py
+chmod a+x default_parameters.py
+
Property changes on: branches/ocean_projects/ocean_test_cases_staging/ocean/parameter_study/sortNamelistParameters.sh
___________________________________________________________________
Added: svn:executable
+ *
Added: branches/ocean_projects/ocean_test_cases_staging/ocean/parameter_study/studyParameters.py
===================================================================
--- branches/ocean_projects/ocean_test_cases_staging/ocean/parameter_study/studyParameters.py         (rev 0)
+++ branches/ocean_projects/ocean_test_cases_staging/ocean/parameter_study/studyParameters.py        2012-06-14 21:36:50 UTC (rev 1981)
@@ -0,0 +1,131 @@
+#!/usr/bin/python
+import sys, os, glob, shutil, numpy
+from subprocess import call
+from collections import defaultdict
+
+sys.path.append('/path/to/python/netcdf4/module')
+
+from netCDF4 import *
+from netCDF4 import Dataset as NetCDFFile
+from pylab import *
+
+from optparse import OptionParser
+
+def rms(field):
+        try:
+                f1 = NetCDFFile('1proc.1block.nc','r')
+        except:
+                return float('NaN')
+
+        try:
+                f2 = NetCDFFile('2proc.2block.nc','r')
+        except:
+                return float('NaN')
+
+        nCells = len(f1.dimensions['nCells'])
+        nEdges = len(f1.dimensions['nEdges'])
+        nVertices = len(f1.dimensions['nVertices'])
+        vert_levs = len(f1.dimensions['nVertLevels'])
+
+        times = f1.variables['xtime']
+        dcedge = f1.variables['dcEdge']
+
+        field1 = f1.variables[field][:]
+        field2 = f2.variables[field][:]
+
+        junk = dcedge[:]
+        resolution = junk.max()
+
+        del dcedge
+        del junk
+
+        time_length = times.shape[0]
+
+        field_size = size(field1)
+
+        if field_size == nCells * vert_levs * time_length:
+                second_dim = nCells * vert_levs
+
+        elif field_size == nEdges * vert_levs * time_length:
+                second_dim = nEdges * vert_levs
+
+        elif field_size == nVertices * vert_levs * time_length:
+                second_dim = nVertices * vert_levs
+
+        else:
+                print "Field doesn't have the right dimensions. Quitting."
+                quit()
+
+        field1_reshaped = field1.reshape(time_length, second_dim)
+        field2_reshaped = field2.reshape(time_length, second_dim)
+
+        for t in range( time_length-1, time_length):
+                diff = field1_reshaped[t,:] - field2_reshaped[t,:]
+                diff = diff * diff
+                rms = sum(diff)
+                rms = rms/(second_dim)
+                rms = math.sqrt(rms)
+
+        return rms
+
+namelist_groups = defaultdict(list)
+explored_parameters = defaultdict(list)
+default_parameters = defaultdict(list)
+group_order = list()
+
+execfile("group_order.py")
+execfile("parameter_groups.py")
+execfile("default_parameters.py")
+execfile("explored_parameters.py")
+
+results = open('results.out','w+')
+
+for param in explored_parameters:
+        for value in explored_parameters[param]:
+                print 'EXPLORING PARAMETER: ', param, value
+                filename = 'namelist.input'
+                f = open(filename, 'w+')
+                for i in group_order:
+                        added = 0
+                        for j in namelist_groups[i]:
+                                if(j == param):
+                                        if(added == 0):
+                                                output = '&%s</font>
<font color="blue">'%(i)
+                                                f.write(output)
+                                                added = 1
+
+                                        output = '\t%s = %s</font>
<font color="blue">'%(param,value)
+                                        f.write(output)
+
+                                elif(len(default_parameters[j]) > 0):
+                                        if(added == 0):
+                                                output = '&%s</font>
<font color="blue">'%(i)
+                                                f.write(output)
+                                                added = 1
+
+                                        output = '\t%s = '%(j)
+                                        f.write(output)
+                                        for k in default_parameters[j]:
+                                                f.write(k)
+                                        f.write('</font>
<font color="blue">')
+                        if(added == 1):
+                                f.write('/</font>
<font color="blue">')
+                f.close()
+                call("mpirun -n 1 ./ocean_model.exe 1> /dev/null 2> /dev/null", shell=True)
+                call("mv output.0000-01-01_00.00.00.nc 1proc.1block.nc 1> /dev/null 2> /dev/null", shell=True)
+                call("mpirun -n 2 ./ocean_model.exe 1> /dev/null 2> /dev/null", shell=True)
+                call("mv output.0000-01-01_00.00.00.nc 2proc.2block.nc 1> /dev/null 2> /dev/null", shell=True)
+                
+                t_rms = rms('temperature')
+                u_rms = rms('u')
+                if(t_rms < 1e-12 and u_rms < 1e-12):
+                        output = " [PASS]\t***\t%e %e\t***\t%s = %s</font>
<font color="blue">"%(u_rms, t_rms, param, value)
+                else:
+                        output = " [FAIL]\t***\t%e %e\t***\t%s = %s</font>
<font color="blue">"%(u_rms, t_rms, param, value)
+                results.write(output)
+
+                call("rm 1proc.1block.nc 1> /dev/null 2> /dev/null", shell=True)
+                call("rm 2proc.2block.nc 1> /dev/null 2> /dev/null", shell=True)
+
+results.close()
+
Property changes on: branches/ocean_projects/ocean_test_cases_staging/ocean/parameter_study/studyParameters.py
___________________________________________________________________
Added: svn:executable
+ *
</font>
</pre>