<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[&quot;config_time_integration&quot;].append(&quot;'RK4'&quot;)
+explored_parameters[&quot;config_time_integration&quot;].append(&quot;'split_explicit'&quot;)
+explored_parameters[&quot;config_h_mom_eddy_visc2&quot;].append(&quot;1.0&quot;)
+explored_parameters[&quot;config_h_mom_eddy_visc4&quot;].append(&quot;0.0&quot;)
+explored_parameters[&quot;config_visc_vorticity_term&quot;].append(&quot;.false.&quot;)
+explored_parameters[&quot;config_visc_vorticity_term&quot;].append(&quot;.true.&quot;)
+explored_parameters[&quot;config_visc_vorticity_visc4_scale&quot;].append(&quot;10.0&quot;)
+explored_parameters[&quot;config_visc_vorticity_visc4_scale&quot;].append(&quot;0.0&quot;)
+explored_parameters[&quot;config_h_tracer_eddy_diff4&quot;].append(&quot;10.0&quot;)
+explored_parameters[&quot;config_h_tracer_eddy_diff4&quot;].append(&quot;0.0&quot;)
+explored_parameters[&quot;config_vert_visc_type&quot;].append(&quot;'const'&quot;)
+explored_parameters[&quot;config_vert_visc_type&quot;].append(&quot;'rich'&quot;)
+explored_parameters[&quot;config_vert_diff_type&quot;].append(&quot;'const'&quot;)
+explored_parameters[&quot;config_vert_diff_type&quot;].append(&quot;'rich'&quot;)
+explored_parameters[&quot;config_implicit_vertical_mix&quot;].append(&quot;.false.&quot;)
+explored_parameters[&quot;config_implicit_vertical_mix&quot;].append(&quot;.true.&quot;)
+explored_parameters[&quot;config_eos_type&quot;].append(&quot;'linear'&quot;)
+explored_parameters[&quot;config_eos_type&quot;].append(&quot;'jm'&quot;)
+explored_parameters[&quot;config_vert_tracer_adv&quot;].append(&quot;'stencil'&quot;)
+explored_parameters[&quot;config_horiz_tracer_adv_order&quot;].append(&quot;2&quot;)
+explored_parameters[&quot;config_horiz_tracer_adv_order&quot;].append(&quot;3&quot;)
+explored_parameters[&quot;config_horiz_tracer_adv_order&quot;].append(&quot;4&quot;)
+explored_parameters[&quot;config_thickness_adv_order&quot;].append(&quot;2&quot;)
+explored_parameters[&quot;config_thickness_adv_order&quot;].append(&quot;3&quot;)
+explored_parameters[&quot;config_thickness_adv_order&quot;].append(&quot;4&quot;)
+explored_parameters[&quot;config_coef_3rd_order&quot;].append(&quot;0.25&quot;)
+explored_parameters[&quot;config_monotonic&quot;].append(&quot;.false.&quot;)
+explored_parameters[&quot;config_monotonic&quot;].append(&quot;.true.&quot;)


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 &quot;config_&quot; | awk '{print $1}' &gt; params
+PARAMS=`cat params`
+
+rm -f parameter_groups.py group_order.py
+LASTGROUP=&quot;&quot;
+
+for PARAM in ${PARAMS}
+do
+        NLGROUP=`grep &quot; $PARAM &quot; ${REGISTRY_PATH} | awk '{print $3}'`
+
+        echo 'namelist_groups[&quot;'${NLGROUP}'&quot;].append(&quot;'${PARAM}'&quot;);' &gt;&gt; parameter_groups.py
+        if [ &quot;$NLGROUP&quot; != &quot;$LASTGROUP&quot; ]; then
+                echo 'group_order.append(&quot;'$NLGROUP'&quot;);' &gt;&gt; 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 &quot;config_&quot; | awk '{print &quot;default_parameters[\&quot;&quot;$1&quot;\&quot;].append(\&quot;&quot;$3&quot;\&quot;)&quot;}' &gt;&gt; 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 &quot;Field doesn't have the right dimensions. Quitting.&quot;
+                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(&quot;group_order.py&quot;)
+execfile(&quot;parameter_groups.py&quot;)
+execfile(&quot;default_parameters.py&quot;)
+execfile(&quot;explored_parameters.py&quot;)
+
+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 = '&amp;%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]) &gt; 0):
+                                        if(added == 0):
+                                                output = '&amp;%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(&quot;mpirun -n 1 ./ocean_model.exe 1&gt; /dev/null 2&gt; /dev/null&quot;, shell=True)
+                call(&quot;mv output.0000-01-01_00.00.00.nc 1proc.1block.nc 1&gt; /dev/null 2&gt; /dev/null&quot;, shell=True)
+                call(&quot;mpirun -n 2 ./ocean_model.exe 1&gt; /dev/null 2&gt; /dev/null&quot;, shell=True)
+                call(&quot;mv output.0000-01-01_00.00.00.nc 2proc.2block.nc 1&gt; /dev/null 2&gt; /dev/null&quot;, shell=True)
+                
+                t_rms = rms('temperature')
+                u_rms = rms('u')
+                if(t_rms &lt; 1e-12 and u_rms &lt; 1e-12):
+                        output = &quot; [PASS]\t***\t%e %e\t***\t%s = %s</font>
<font color="blue">&quot;%(u_rms, t_rms, param, value)
+                else:
+                        output = &quot; [FAIL]\t***\t%e %e\t***\t%s = %s</font>
<font color="blue">&quot;%(u_rms, t_rms, param, value)
+                results.write(output)
+
+                call(&quot;rm 1proc.1block.nc 1&gt; /dev/null 2&gt; /dev/null&quot;, shell=True)
+                call(&quot;rm 2proc.2block.nc 1&gt; /dev/null 2&gt; /dev/null&quot;, shell=True)
+
+results.close()
+


Property changes on: branches/ocean_projects/ocean_test_cases_staging/ocean/parameter_study/studyParameters.py
___________________________________________________________________
Added: svn:executable
   + *

</font>
</pre>