<p><b>dwj07@fsu.edu</b> 2012-12-05 15:05:44 -0700 (Wed, 05 Dec 2012)</p><p><br>
        -- TRUNK COMMIT --<br>
<br>
        Merging branches/ocean_projects/cesm_coupling to trunk.<br>
<br>
        This involves several changes that are required to make MPAS-O compatible with CESM.<br>
        It also involves changes that allow building MPAS (any core) in a library format as opposed to an executable.<br>
<br>
        CESM Drivers are now housed in a separate (ocean_cesm_driver) directory, on a per-core basis.<br>
</p><hr noshade><pre><font color="gray">Index: trunk/mpas
===================================================================
--- trunk/mpas        2012-12-05 20:35:42 UTC (rev 2344)
+++ trunk/mpas        2012-12-05 22:05:44 UTC (rev 2345)

Property changes on: trunk/mpas
___________________________________________________________________
Modified: svn:mergeinfo
## -3,6 +3,7 ##
 /branches/ocean_projects/ale_split_exp:1437-1483
 /branches/ocean_projects/ale_vert_coord:1225-1383
 /branches/ocean_projects/ale_vert_coord_new:1387-1428
+/branches/ocean_projects/cesm_coupling:2147-2344
 /branches/ocean_projects/gmvar:1214-1514,1517-1738
 /branches/ocean_projects/imp_vert_mix_error:1847-1887
 /branches/ocean_projects/imp_vert_mix_mrp:754-986
\ No newline at end of property
Modified: trunk/mpas/src/Makefile
===================================================================
--- trunk/mpas/src/Makefile        2012-12-05 20:35:42 UTC (rev 2344)
+++ trunk/mpas/src/Makefile        2012-12-05 22:05:44 UTC (rev 2345)
@@ -1,34 +1,45 @@
 .SUFFIXES: .F .c .o
 
+ifeq &quot;$(CESM)&quot; &quot;true&quot;
+
+ifeq &quot;$(CORE)&quot; &quot;ocean&quot;
+include Makefile.in.CESM_OCN
+endif
+
+else
+
 all: mpas
 
+
 mpas: reg_includes externals frame ops dycore drver
         $(LINKER) $(LDFLAGS) -o $(CORE)_model.exe driver/*.o -L. -ldycore -lops -lframework $(LIBS) -I./external/esmf_time_f90 -L./external/esmf_time_f90 -lesmf_time
 
+externals: reg_includes
+        ( cd external; $(MAKE) FC=&quot;$(FC)&quot; SFC=&quot;$(SFC)&quot; CC=&quot;$(CC)&quot; SCC=&quot;$(SCC)&quot; FFLAGS=&quot;$(FFLAGS)&quot; CFLAGS=&quot;$(CFLAGS)&quot; CPP=&quot;$(CPP)&quot; NETCDF=&quot;$(NETCDF)&quot; CORE=&quot;$(CORE)&quot; )
+
+drver:  reg_includes externals frame ops dycore
+        ( cd driver; $(MAKE) CPPFLAGS=&quot;$(CPPFLAGS)&quot; CPPINCLUDES=&quot;$(CPPINCLUDES)&quot; all ) 
+endif
+
 reg_includes: 
         ( cd registry; $(MAKE) CC=&quot;$(SCC)&quot; )
         ( cd inc; $(CPP) ../core_$(CORE)/Registry | ../registry/parse &gt; Registry.processed)
 
-externals: reg_includes
-        ( cd external; $(MAKE) FC=&quot;$(FC)&quot; SFC=&quot;$(SFC)&quot; CC=&quot;$(CC)&quot; SCC=&quot;$(SCC)&quot; FFLAGS=&quot;$(FFLAGS)&quot; CFLAGS=&quot;$(CFLAGS)&quot; CPP=&quot;$(CPP)&quot; NETCDF=&quot;$(NETCDF)&quot; CORE=&quot;$(CORE)&quot; )
-
 frame: reg_includes externals
-        ( cd framework; $(MAKE) all ) 
+        ( cd framework; $(MAKE) CPPFLAGS=&quot;$(CPPFLAGS)&quot; CPPINCLUDES=&quot;$(CPPINCLUDES)&quot; all ) 
         ln -sf framework/libframework.a libframework.a
 
 ops: reg_includes externals frame
-        ( cd operators; $(MAKE) all ) 
+        ( cd operators; $(MAKE) CPPFLAGS=&quot;$(CPPFLAGS)&quot; CPPINCLUDES=&quot;$(CPPINCLUDES)&quot; all ) 
         ln -sf operators/libops.a libops.a
 
 dycore: reg_includes externals frame ops
-        ( cd core_$(CORE); $(MAKE) all ) 
+        ( cd core_$(CORE); $(MAKE) CPPFLAGS=&quot;$(CPPFLAGS)&quot; CPPINCLUDES=&quot;$(CPPINCLUDES)&quot; all ) 
         ln -sf core_$(CORE)/libdycore.a libdycore.a
 
-drver:  reg_includes externals frame ops dycore
-        ( cd driver; $(MAKE) all ) 
 
 clean:
-        $(RM) $(CORE)_model.exe libframework.a libops.a libdycore.a
+        $(RM) $(CORE)_model.exe libframework.a libops.a libdycore.a lib$(CORE).a *.o
         ( cd registry; $(MAKE) clean )
         ( cd external; $(MAKE) clean )
         ( cd framework; $(MAKE) clean )

Copied: trunk/mpas/src/Makefile.in.CESM_OCN (from rev 2344, branches/ocean_projects/cesm_coupling/src/Makefile.in.CESM_OCN)
===================================================================
--- trunk/mpas/src/Makefile.in.CESM_OCN                                (rev 0)
+++ trunk/mpas/src/Makefile.in.CESM_OCN        2012-12-05 22:05:44 UTC (rev 2345)
@@ -0,0 +1,32 @@
+include $(CASEROOT)/Macros
+RM = rm -f
+CPP = cpp -C -P -traditional
+FC=$(MPIFC)
+CC=$(MPICC)
+NETCDF=$(NETCDF_PATH)
+PNETCDF=$(PNETCDF_PATH)
+PIO=$(EXEROOT)/pio
+FILE_OFFSET = -DOFFSET64BIT
+CPPFLAGS += $(MODEL_FORMULATION) $(FILE_OFFSET) $(ZOLTAN_DEFINE) -DMPAS_CESM -D_MPI# -DUNDERSCORE
+CPPINCLUDES += -I$(EXEROOT)/ocn/source/inc -I$(NETCDF)/include -I$(PIO) -I$(PNETCDF)/include
+FCINCLUDES += -I$(EXEROOT)/ocn/source/inc -I$(EXEROOT)/csm_share -I$(EXEROOT)/gptl -I$(NETCDF)/include -I$(PIO) -I$(PNETCDF)/include
+LIBS += -L$(PIO) -L$(PNETCDF)/lib -L$(NETCDF)/lib -lpio -lpnetcdf -lnetcdf
+
+all:
+        @echo $(CPPINCLUDES)
+        @echo $(FCINCLUDES)
+        ( $(MAKE) mpas RM=&quot;$(RM)&quot; CPP=&quot;$(CPP)&quot; NETCDF=&quot;$(NETCDF)&quot; PNETCDF=&quot;$(PNETCDF)&quot; \
+          PIO=&quot;$(PIO)&quot; FC=&quot;$(FC)&quot; CC=&quot;$(CC)&quot; SFC=&quot;$(SFC)&quot; SCC=&quot;$(SCC)&quot; \
+          CPPFLAGS=&quot;$(CPPFLAGS)&quot; CPPINCLUDES=&quot;$(CPPINCLUDES)&quot; FCINCLUDES=&quot;$(FCINCLUDES)&quot; )
+
+mpas: reg_includes externals frame ops dycore drver
+        ar ru lib$(CORE).a framework/*.o
+        ar ru lib$(CORE).a operators/*.o
+        ar ru lib$(CORE).a core_$(CORE)/*.o
+        ar ru lib$(CORE).a $(CORE)_cesm_driver/*.o
+
+externals: 
+
+drver:  reg_includes externals frame ops dycore
+        ( cd $(CORE)_cesm_driver; $(MAKE) CPPFLAGS=&quot;$(CPPFLAGS)&quot; CPPINCLUDES=&quot;$(CPPINCLUDES)&quot; all ) 
+

Index: trunk/mpas/src/core_ocean
===================================================================
--- trunk/mpas/src/core_ocean        2012-12-05 20:35:42 UTC (rev 2344)
+++ trunk/mpas/src/core_ocean        2012-12-05 22:05:44 UTC (rev 2345)

Property changes on: trunk/mpas/src/core_ocean
___________________________________________________________________
Modified: svn:mergeinfo
## -3,6 +3,7 ##
 /branches/ocean_projects/ale_split_exp/src/core_ocean:1437-1483
 /branches/ocean_projects/ale_vert_coord/src/core_ocean:1225-1383
 /branches/ocean_projects/ale_vert_coord_new/src/core_ocean:1387-1428
+/branches/ocean_projects/cesm_coupling/src/core_ocean:2147-2344
 /branches/ocean_projects/gmvar/src/core_ocean:1214-1514,1517-1738
 /branches/ocean_projects/imp_vert_mix_error/src/core_ocean:1847-1887
 /branches/ocean_projects/imp_vert_mix_mrp/src/core_ocean:754-986
\ No newline at end of property
Modified: trunk/mpas/src/core_ocean/Registry
===================================================================
--- trunk/mpas/src/core_ocean/Registry        2012-12-05 20:35:42 UTC (rev 2344)
+++ trunk/mpas/src/core_ocean/Registry        2012-12-05 22:05:44 UTC (rev 2345)
@@ -14,6 +14,7 @@
 namelist logical   sw_model config_prescribe_velocity  false
 namelist logical   sw_model config_prescribe_thickness false
 namelist integer   sw_model config_num_halos           3
+namelist integer   sw_model config_ncouple_per_day     1
 namelist character io       config_input_name          grid.nc
 namelist character io       config_output_name         output.nc
 namelist character io       config_restart_name        restart.nc
@@ -239,7 +240,7 @@
 var persistent real    tend_tracer1 ( nVertLevels nCells Time ) 1 - tracer1 tend tracers testing
 
 % state variables for Split Explicit timesplitting
-var persistent real   uBtr ( nEdges Time )         2 ir uBtr state - -
+var persistent real   uBtr ( nEdges Time )         2 r uBtr state - -
 var persistent real   ssh ( nCells Time )          2 o  ssh state - - 
 var persistent real   uBtrSubcycle ( nEdges Time ) 2 -  uBtrSubcycle state - -
 var persistent real   sshSubcycle ( nCells Time )  2 -  sshSubcycle state - - 

Modified: trunk/mpas/src/core_ocean/mpas_ocn_global_diagnostics.F
===================================================================
--- trunk/mpas/src/core_ocean/mpas_ocn_global_diagnostics.F        2012-12-05 20:35:42 UTC (rev 2344)
+++ trunk/mpas/src/core_ocean/mpas_ocn_global_diagnostics.F        2012-12-05 22:05:44 UTC (rev 2345)
@@ -421,27 +421,27 @@
       ! write out the data to files
       if (dminfo % my_proc_id == IO_NODE) then
          fileID = getFreeUnit()
-         open(fileID,file='stats_min.txt',ACCESS='append')
+         open(fileID,file='stats_min.txt',STATUS='UNKNOWN', POSITION='append')
             write (fileID,'(100es24.14)') mins(1:nVariables)
          close (fileID)
-         open(fileID,file='stats_max.txt',ACCESS='append')
+         open(fileID,file='stats_max.txt',STATUS='UNKNOWN', POSITION='append')
             write (fileID,'(100es24.14)') maxes(1:nVariables)
          close (fileID)
-         open(fileID,file='stats_sum.txt',ACCESS='append')
+         open(fileID,file='stats_sum.txt',STATUS='UNKNOWN', POSITION='append')
             write (fileID,'(100es24.14)') sums(1:nVariables)
          close (fileID)
-         open(fileID,file='stats_avg.txt',ACCESS='append')
+         open(fileID,file='stats_avg.txt',STATUS='UNKNOWN', POSITION='append')
             write (fileID,'(100es24.14)') averages(1:nVariables)
          close (fileID)
-         open(fileID,file='stats_time.txt',ACCESS='append')
+         open(fileID,file='stats_time.txt',STATUS='UNKNOWN', POSITION='append')
             write (fileID,'(i10,10x,a,100es24.14)') timeIndex, &amp;
                state % xtime % scalar, dt, &amp;
                CFLNumberGlobal
          close (fileID)
-         open(fileID,file='stats_colmin.txt',ACCESS='append')
+         open(fileID,file='stats_colmin.txt',STATUS='UNKNOWN', POSITION='append')
             write (fileID,'(100es24.14)') verticalSumMins(1:nVariables)
          close (fileID)
-         open(fileID,file='stats_colmax.txt',ACCESS='append')
+         open(fileID,file='stats_colmax.txt',STATUS='UNKNOWN', POSITION='append')
             write (fileID,'(100es24.14)') verticalSumMaxes(1:nVariables)
          close (fileID)
       end if

Modified: trunk/mpas/src/core_ocean/mpas_ocn_mpas_core.F
===================================================================
--- trunk/mpas/src/core_ocean/mpas_ocn_mpas_core.F        2012-12-05 20:35:42 UTC (rev 2344)
+++ trunk/mpas/src/core_ocean/mpas_ocn_mpas_core.F        2012-12-05 22:05:44 UTC (rev 2345)
@@ -116,7 +116,7 @@
 
       if (.not.config_do_restart) call ocn_init_split_timestep(domain)
 
-      write (0,'(a,a10)'), ' Vertical grid type is: ',config_vert_grid_type
+      write (0,'(a,a10)') ' Vertical grid type is: ',config_vert_grid_type
 
       if (config_vert_grid_type.ne.'isopycnal'.and. &amp;
           config_vert_grid_type.ne.'zlevel'.and. &amp;
@@ -127,7 +127,7 @@
          call mpas_dmpar_abort(dminfo)
       endif
 
-      write (0,'(a,a10)'), ' Pressure type is: ',config_pressure_type
+      write (0,'(a,a10)') ' Pressure type is: ',config_pressure_type
       if (config_pressure_type.ne.'pressure'.and. &amp;
           config_pressure_type.ne.'MontgomeryPotential') then
          write (0,*) ' Incorrect choice of config_pressure_type.'

Modified: trunk/mpas/src/core_ocean/mpas_ocn_time_average.F
===================================================================
--- trunk/mpas/src/core_ocean/mpas_ocn_time_average.F        2012-12-05 20:35:42 UTC (rev 2344)
+++ trunk/mpas/src/core_ocean/mpas_ocn_time_average.F        2012-12-05 22:05:44 UTC (rev 2345)
@@ -11,7 +11,7 @@
     subroutine ocn_time_average_init(state)!{{{
         type (state_type), intent(inout) :: state
 
-        real, pointer :: nAccumulate
+        real (kind=RKIND), pointer :: nAccumulate
 
         real (kind=RKIND), dimension(:), pointer :: acc_ssh, acc_sshVar
         real (kind=RKIND), dimension(:,:), pointer :: acc_uReconstructZonal, acc_uReconstructMeridional, acc_uReconstructZonalVar, acc_uReconstructMeridionalVar
@@ -45,7 +45,7 @@
         type (state_type), intent(inout) :: state
         type (state_type), intent(in) :: old_state
 
-        real, pointer :: nAccumulate, old_nAccumulate
+        real (kind=RKIND), pointer :: nAccumulate, old_nAccumulate
 
         real (kind=RKIND), dimension(:), pointer :: ssh
         real (kind=RKIND), dimension(:,:), pointer :: uReconstructZonal, uReconstructMeridional, u
@@ -99,7 +99,7 @@
     subroutine ocn_time_average_normalize(state)!{{{
         type (state_type), intent(inout) :: state
 
-        real, pointer :: nAccumulate
+        real (kind=RKIND), pointer :: nAccumulate
 
         real (kind=RKIND), dimension(:), pointer :: acc_ssh, acc_sshVar
         real (kind=RKIND), dimension(:,:), pointer :: acc_uReconstructZonal, acc_uReconstructMeridional, acc_uReconstructZonalVar, acc_uReconstructMeridionalVar

Modified: trunk/mpas/src/core_ocean/mpas_ocn_time_integration.F
===================================================================
--- trunk/mpas/src/core_ocean/mpas_ocn_time_integration.F        2012-12-05 20:35:42 UTC (rev 2344)
+++ trunk/mpas/src/core_ocean/mpas_ocn_time_integration.F        2012-12-05 22:05:44 UTC (rev 2345)
@@ -85,6 +85,8 @@
       real (kind=RKIND), intent(in) :: dt
       character(len=*), intent(in) :: timeStamp
 
+      real (kind=RKIND) :: nanCheck
+
       type (dm_info) :: dminfo
       type (block_type), pointer :: block
 
@@ -98,7 +100,9 @@
      do while (associated(block))
         block % state % time_levs(2) % state % xtime % scalar = timeStamp
 
-        if (isNaN(sum(block % state % time_levs(2) % state % u % array))) then
+        nanCheck = sum(block % state % time_levs(2) % state % u % array)
+
+        if (nanCheck /= nanCheck) then
            write(0,*) 'Abort: NaN detected'
            call mpas_dmpar_abort(dminfo)
         endif

Modified: trunk/mpas/src/core_ocean/mpas_ocn_tracer_advection_mono.F
===================================================================
--- trunk/mpas/src/core_ocean/mpas_ocn_tracer_advection_mono.F        2012-12-05 20:35:42 UTC (rev 2344)
+++ trunk/mpas/src/core_ocean/mpas_ocn_tracer_advection_mono.F        2012-12-05 22:05:44 UTC (rev 2345)
@@ -199,7 +199,7 @@
             iCell = advCellsForEdge(i,iEdge)
             do k = 1, maxLevelCell(iCell)
               tracer_weight = lowOrderAdvectionMask(k, iEdge) * adv_coefs_2nd(i,iEdge) &amp; 
-                            + highOrderAdvectionMask(k, iEdge) * (adv_coefs(i,iEdge) + coef_3rd_order*sign(1.,uh(k,iEdge))*adv_coefs_3rd(i,iEdge))
+                            + highOrderAdvectionMask(k, iEdge) * (adv_coefs(i,iEdge) + coef_3rd_order*sign(1.0_RKIND,uh(k,iEdge))*adv_coefs_3rd(i,iEdge))
 
               tracer_weight = uh(k,iEdge)*tracer_weight
               high_order_horiz_flux(k,iEdge) = high_order_horiz_flux(k,iEdge) + tracer_weight* tracer_cur(k,iCell)
@@ -214,8 +214,8 @@
         do iCell = 1, nCells
           do k = 2, maxLevelCell(iCell)
             ! dwj 02/03/12 Ocean and Atmosphere are different in vertical
-!           flux_upwind = max(0.,w(k,iCell))*tracer_cur(k-1,iCell) + min(0.,w(k,iCell))*tracer_cur(k,iCell)
-            flux_upwind = min(0.,w(k,iCell))*tracer_cur(k-1,iCell) + max(0.,w(k,iCell))*tracer_cur(k,iCell)
+!           flux_upwind = max(0.0_RKIND,w(k,iCell))*tracer_cur(k-1,iCell) + min(0.0_RKIND,w(k,iCell))*tracer_cur(k,iCell)
+            flux_upwind = min(0.0_RKIND,w(k,iCell))*tracer_cur(k-1,iCell) + max(0.0_RKIND,w(k,iCell))*tracer_cur(k,iCell)
             upwind_tendency(k-1,iCell) = upwind_tendency(k-1,iCell) + flux_upwind
             upwind_tendency(k  ,iCell) = upwind_tendency(k  ,iCell) - flux_upwind
             high_order_vert_flux(k,iCell) = high_order_vert_flux(k,iCell) - flux_upwind
@@ -227,8 +227,8 @@
           !           it is negative
           do k = 1, maxLevelCell(iCell)
             ! dwj 02/03/12 Ocean and Atmosphere are different in vertical
-!           flux_incoming (k,iCell) = -(min(0.,high_order_vert_flux(k+1,iCell))-max(0.,high_order_vert_flux(k,iCell)))
-!           flux_outgoing(k,iCell) = -(max(0.,high_order_vert_flux(k+1,iCell))-min(0.,high_order_vert_flux(k,iCell)))
+!           flux_incoming (k,iCell) = -(min(0.0_RKIND,high_order_vert_flux(k+1,iCell))-max(0.0_RKIND,high_order_vert_flux(k,iCell)))
+!           flux_outgoing(k,iCell) = -(max(0.0_RKIND,high_order_vert_flux(k+1,iCell))-min(0.0_RKIND,high_order_vert_flux(k,iCell)))
 
             flux_incoming (k, iCell) = max(0.0_RKIND, high_order_vert_flux(k+1, iCell)) - min(0.0_RKIND, high_order_vert_flux(k, iCell))
             flux_outgoing(k, iCell) = min(0.0_RKIND, high_order_vert_flux(k+1, iCell)) - max(0.0_RKIND, high_order_vert_flux(k, iCell))
@@ -247,7 +247,7 @@
           invAreaCell2 = 1.0 / areaCell(cell2)
 
           do k = 1, maxLevelEdgeTop(iEdge)
-            flux_upwind = dvEdge(iEdge) * (max(0.,uh(k,iEdge))*tracer_cur(k,cell1) + min(0.,uh(k,iEdge))*tracer_cur(k,cell2))
+            flux_upwind = dvEdge(iEdge) * (max(0.0_RKIND,uh(k,iEdge))*tracer_cur(k,cell1) + min(0.0_RKIND,uh(k,iEdge))*tracer_cur(k,cell2))
             high_order_horiz_flux(k,iEdge) = high_order_horiz_flux(k,iEdge) - flux_upwind
           end do ! k loop
         end do ! iEdge loop
@@ -280,10 +280,10 @@
             tracer_upwind_new = (tracer_cur(k,iCell)*h(k,iCell) + dt*upwind_tendency(k,iCell)) * inv_h_new(k,iCell)
            
             scale_factor = (tracer_max(k,iCell)-tracer_upwind_new)/(tracer_max_new-tracer_upwind_new+eps)
-            flux_incoming(k,iCell) = min( 1.0, max( 0.0, scale_factor) )
+            flux_incoming(k,iCell) = min( 1.0_RKIND, max( 0.0_RKIND, scale_factor) )
 
             scale_factor = (tracer_upwind_new-tracer_min(k,iCell))/(tracer_upwind_new-tracer_min_new+eps)
-            flux_outgoing(k,iCell) = min( 1.0, max( 0.0, scale_factor) )
+            flux_outgoing(k,iCell) = min( 1.0_RKIND, max( 0.0_RKIND, scale_factor) )
           end do ! k loop
         end do ! iCell loop
 
@@ -293,8 +293,8 @@
           cell2 = cellsOnEdge(2,iEdge)
           do k = 1, maxLevelEdgeTop(iEdge)
             flux = high_order_horiz_flux(k,iEdge)
-            flux = max(0.,flux) * min(flux_outgoing(k,cell1), flux_incoming(k,cell2)) &amp;
-                 + min(0.,flux) * min(flux_incoming(k,cell1), flux_outgoing(k,cell2))
+            flux = max(0.0_RKIND,flux) * min(flux_outgoing(k,cell1), flux_incoming(k,cell2)) &amp;
+                 + min(0.0_RKIND,flux) * min(flux_incoming(k,cell1), flux_outgoing(k,cell2))
             high_order_horiz_flux(k,iEdge) = flux
           end do ! k loop
         end do ! iEdge loop
@@ -304,10 +304,10 @@
           do k = 2, maxLevelCell(iCell)
             flux =  high_order_vert_flux(k,iCell)
             ! dwj 02/03/12 Ocean and Atmosphere are different in vertical.
-!           flux = max(0.,flux) * min(flux_outgoing(k-1,iCell), flux_incoming(k  ,iCell)) &amp;
-!                + min(0.,flux) * min(flux_outgoing(k  ,iCell), flux_incoming(k-1,iCell))
-            flux = max(0.,flux) * min(flux_outgoing(k  ,iCell), flux_incoming(k-1,iCell)) &amp;
-                 + min(0.,flux) * min(flux_outgoing(k-1,iCell), flux_incoming(k  ,iCell))
+!           flux = max(0.0_RKIND,flux) * min(flux_outgoing(k-1,iCell), flux_incoming(k  ,iCell)) &amp;
+!                + min(0.0_RKIND,flux) * min(flux_outgoing(k  ,iCell), flux_incoming(k-1,iCell))
+            flux = max(0.0_RKIND,flux) * min(flux_outgoing(k  ,iCell), flux_incoming(k-1,iCell)) &amp;
+                 + min(0.0_RKIND,flux) * min(flux_outgoing(k-1,iCell), flux_incoming(k  ,iCell))
             high_order_vert_flux(k,iCell) = flux
           end do ! k loop
         end do ! iCell loop

Modified: trunk/mpas/src/core_ocean/mpas_ocn_tracer_advection_std_hadv.F
===================================================================
--- trunk/mpas/src/core_ocean/mpas_ocn_tracer_advection_std_hadv.F        2012-12-05 20:35:42 UTC (rev 2344)
+++ trunk/mpas/src/core_ocean/mpas_ocn_tracer_advection_std_hadv.F        2012-12-05 22:05:44 UTC (rev 2345)
@@ -91,7 +91,7 @@
               iCell = advCellsForEdge(i,iEdge)
               do k=1,grid % nVertLevels
               tracer_weight = lowOrderAdvectionMask(k, iEdge) * adv_coefs_2nd(i,iEdge) &amp; 
-                            + highOrderAdvectionMask(k, iEdge) * (adv_coefs(i,iEdge) + coef_3rd_order*sign(1.,uh(k,iEdge))*adv_coefs_3rd(i,iEdge))
+                            + highOrderAdvectionMask(k, iEdge) * (adv_coefs(i,iEdge) + coef_3rd_order*sign(1.0_RKIND,uh(k,iEdge))*adv_coefs_3rd(i,iEdge))
                 do iTracer=1,num_tracers
                   flux_arr(iTracer,k) = flux_arr(iTracer,k) + tracer_weight* tracers(iTracer,k,iCell)
                 end do

Modified: trunk/mpas/src/framework/mpas_configure.F
===================================================================
--- trunk/mpas/src/framework/mpas_configure.F        2012-12-05 20:35:42 UTC (rev 2344)
+++ trunk/mpas/src/framework/mpas_configure.F        2012-12-05 22:05:44 UTC (rev 2345)
@@ -7,11 +7,12 @@
    contains
 
 
-   subroutine mpas_read_namelist(dminfo)
+   subroutine mpas_read_namelist(dminfo, nml_filename)
 
       implicit none
 
       type (dm_info), intent(in) :: dminfo
+      character (len=*), optional :: nml_filename
 
       integer :: funit, ierr
 
@@ -23,8 +24,13 @@
 #include &quot;config_set_defaults.inc&quot;
 
       if (dminfo % my_proc_id == IO_NODE) then
-         write(0,*) 'Reading namelist.input'
-         open(funit,file='namelist.input',status='old',form='formatted')
+         if (present(nml_filename)) then
+            write(0,*) 'Reading ', trim(nml_filename)
+            open(funit,file=trim(nml_filename),status='old',form='formatted')
+         else
+            write(0,*) 'Reading namelist.input'
+            open(funit,file='namelist.input',status='old',form='formatted')
+         end if
 
 #include &quot;config_namelist_reads.inc&quot;
          close(funit)

Modified: trunk/mpas/src/framework/mpas_dmpar.F
===================================================================
--- trunk/mpas/src/framework/mpas_dmpar.F        2012-12-05 20:35:42 UTC (rev 2344)
+++ trunk/mpas/src/framework/mpas_dmpar.F        2012-12-05 22:05:44 UTC (rev 2345)
@@ -98,7 +98,9 @@
       write(0,'(a,i5,a,i5,a)') 'task ', mpi_rank, ' of ', mpi_size, &amp;
         ' is running'
 
+#ifndef MPAS_CESM
       call open_streams(dminfo % my_proc_id)
+#endif
 
       dminfo % info = MPI_INFO_NULL
 #else

Modified: trunk/mpas/src/framework/mpas_framework.F
===================================================================
--- trunk/mpas/src/framework/mpas_framework.F        2012-12-05 20:35:42 UTC (rev 2344)
+++ trunk/mpas/src/framework/mpas_framework.F        2012-12-05 22:05:44 UTC (rev 2345)
@@ -13,7 +13,7 @@
    contains
 
    
-   subroutine mpas_framework_init(dminfo, domain, mpi_comm)
+   subroutine mpas_framework_init(dminfo, domain, mpi_comm, nml_filename, io_system)
 
       implicit none
 
@@ -21,13 +21,16 @@
       type (domain_type), pointer :: domain
       integer, intent(in), optional :: mpi_comm
 
+      character (len=*), optional :: nml_filename
+      type (iosystem_desc_t), optional, pointer :: io_system
+
       integer :: pio_num_iotasks
       integer :: pio_stride
 
       allocate(dminfo)
       call mpas_dmpar_init(dminfo, mpi_comm)
 
-      call mpas_read_namelist(dminfo)
+      call mpas_read_namelist(dminfo, nml_filename)
 
       call mpas_allocate_domain(domain, dminfo)
       
@@ -38,19 +41,20 @@
       if (pio_num_iotasks == 0) then
          pio_num_iotasks = domain % dminfo % nprocs
       end if
-      call MPAS_io_init(dminfo, pio_num_iotasks, pio_stride)
+      call MPAS_io_init(dminfo, pio_num_iotasks, pio_stride, io_system)
 
    end subroutine mpas_framework_init
 
    
-   subroutine mpas_framework_finalize(dminfo, domain)
+   subroutine mpas_framework_finalize(dminfo, domain, io_system)
   
       implicit none
 
       type (dm_info), pointer :: dminfo
       type (domain_type), pointer :: domain
+      type (iosystem_desc_t), optional, pointer :: io_system
 
-      call MPAS_io_finalize()
+      call MPAS_io_finalize(io_system)
 
       call mpas_deallocate_domain(domain)
 

Modified: trunk/mpas/src/framework/mpas_io.F
===================================================================
--- trunk/mpas/src/framework/mpas_io.F        2012-12-05 20:35:42 UTC (rev 2344)
+++ trunk/mpas/src/framework/mpas_io.F        2012-12-05 22:05:44 UTC (rev 2345)
@@ -176,21 +176,21 @@
       type (fieldlist_type), pointer :: next =&gt; null()
    end type fieldlist_type
 
-   type (iosystem_desc_t), private, save :: pio_iosystem
+   type (iosystem_desc_t), pointer, private, save :: pio_iosystem
    type (decomplist_type), pointer, private :: decomp_list =&gt; null()
    type (dm_info), private :: local_dminfo
 
 
    contains
 
+   subroutine MPAS_io_init(dminfo, io_task_count, io_task_stride, io_system, ierr)
 
-   subroutine MPAS_io_init(dminfo, io_task_count, io_task_stride, ierr)
-
       implicit none
 
       type (dm_info), intent(in) :: dminfo
       integer, intent(in) :: io_task_count
       integer, intent(in) :: io_task_stride
+      type (iosystem_desc_t), optional, pointer :: io_system
       integer, intent(out), optional :: ierr
 
 !      write(0,*) 'Called MPAS_io_init()'
@@ -198,17 +198,22 @@
 
       local_dminfo = dminfo
 
+      if(present(io_system)) then
+        pio_iosystem =&gt; io_system
+      else
 !write(0,*) 'MGD PIO_init'
-      call PIO_init(local_dminfo % my_proc_id, &amp;     ! comp_rank
-                    local_dminfo % comm,       &amp;     ! comp_comm
-                    io_task_count,             &amp;     ! num_iotasks
-                    0,                         &amp;     ! num_aggregator
-                    io_task_stride,            &amp;     ! stride
-                    PIO_rearr_box,             &amp;     ! rearr
-                    pio_iosystem)                    ! iosystem
+        allocate(pio_iosystem)
+        call PIO_init(local_dminfo % my_proc_id, &amp;     ! comp_rank
+                      local_dminfo % comm,       &amp;     ! comp_comm
+                      io_task_count,             &amp;     ! num_iotasks
+                      0,                         &amp;     ! num_aggregator
+                      io_task_stride,            &amp;     ! stride
+                      PIO_rearr_box,             &amp;     ! rearr
+                      pio_iosystem)                    ! iosystem
+  
+        call pio_seterrorhandling(pio_iosystem, PIO_BCAST_ERROR)
+      end if
 
-      call pio_seterrorhandling(pio_iosystem, PIO_BCAST_ERROR)
-
    end subroutine MPAS_io_init
 
    
@@ -931,8 +936,6 @@
       end if
 
 !      write(0,*) 'Assigning ', size(indices), ' indices for ', trim(fieldname)
-
-
       !  
       ! Check whether the field has been defined
       !
@@ -1047,7 +1050,7 @@
          pio_type = PIO_int
       else if (field_cursor % fieldhandle % field_type == MPAS_IO_CHAR) then
          pio_type = PIO_char
-!!!!!!!! PIO DOES NOT SUPPORT LOGICAL !!!!!!!!
+ !!!!!!! PIO DOES NOT SUPPORT LOGICAL !!!!!!!!
       end if
 
       allocate(dimlist(ndims))
@@ -3388,10 +3391,11 @@
    end subroutine MPAS_io_close
 
 
-   subroutine MPAS_io_finalize(ierr)
+   subroutine MPAS_io_finalize(io_system, ierr)
 
       implicit none
 
+      type (iosystem_desc_t), optional, pointer :: io_system
       integer, intent(out), optional :: ierr
 
       integer :: pio_ierr
@@ -3414,10 +3418,13 @@
       end do
 
 !write(0,*) 'MGD PIO_finalize'
-      call PIO_finalize(pio_iosystem, pio_ierr)
-      if (pio_ierr /= PIO_noerr) then
-         if (present(ierr)) ierr = MPAS_IO_ERR_PIO
-         return
+      if(.not.present(io_system)) then
+        call PIO_finalize(pio_iosystem, pio_ierr)
+        if (pio_ierr /= PIO_noerr) then
+           if (present(ierr)) ierr = MPAS_IO_ERR_PIO
+           return
+        end if
+        deallocate(pio_iosystem)
       end if
 
    end subroutine MPAS_io_finalize

Modified: trunk/mpas/src/framework/mpas_timekeeping.F
===================================================================
--- trunk/mpas/src/framework/mpas_timekeeping.F        2012-12-05 20:35:42 UTC (rev 2344)
+++ trunk/mpas/src/framework/mpas_timekeeping.F        2012-12-05 22:05:44 UTC (rev 2345)
@@ -116,6 +116,9 @@
 
       character (len=*), intent(in) :: calendar 
 
+#ifdef MPAS_CESM
+      TheCalendar = defaultCal % Type % caltype - 1
+#else
       if (trim(calendar) == 'gregorian') then
          TheCalendar = MPAS_GREGORIAN
          call ESMF_Initialize(defaultCalendar=ESMF_CAL_GREGORIAN)
@@ -128,6 +131,7 @@
       else
          write(0,*) 'ERROR: mpas_timekeeping_init: Invalid calendar type'
       end if
+#endif
 
    end subroutine mpas_timekeeping_init
 
@@ -136,7 +140,9 @@
 
       implicit none
 
+#ifndef MPAS_CESM      
       call ESMF_Finalize()
+#endif
 
    end subroutine mpas_timekeeping_finalize
 

</font>
</pre>