<p><b>ringler@lanl.gov</b> 2010-08-24 22:23:04 -0600 (Tue, 24 Aug 2010)</p><p><br>
add namespace for high-order advection<br>
add config parameters to registry and namelist<br>
add boundaryCell array that is (1,0) is cell has an edge (on/not on) the boundary<br>
</p><hr noshade><pre><font color="gray">Modified: branches/ocean_projects/advection/namelist.input.ocean
===================================================================
--- branches/ocean_projects/advection/namelist.input.ocean        2010-08-25 03:56:12 UTC (rev 480)
+++ branches/ocean_projects/advection/namelist.input.ocean        2010-08-25 04:23:04 UTC (rev 481)
@@ -42,4 +42,8 @@
 &amp;advection
    config_hor_tracer_adv = 'upwind'
    config_vert_tracer_adv = 'upwind'
+   config_tracer_adv_order = 2
+   config_thickness_adv_order = 2
+   config_positive_definite = .false.
+   config_monotonic = .false.
 /

Modified: branches/ocean_projects/advection/namelist.input.sw
===================================================================
--- branches/ocean_projects/advection/namelist.input.sw        2010-08-25 03:56:12 UTC (rev 480)
+++ branches/ocean_projects/advection/namelist.input.sw        2010-08-25 04:23:04 UTC (rev 481)
@@ -5,6 +5,9 @@
    config_ntimesteps = 7500
    config_output_interval = 500
    config_visc  = 0.0
+   config_tracer_adv_order = 2
+   config_positive_definite = .false.
+   config_monotonic = .false.
 /
 
 &amp;io

Modified: branches/ocean_projects/advection/src/core_ocean/Registry
===================================================================
--- branches/ocean_projects/advection/src/core_ocean/Registry        2010-08-25 03:56:12 UTC (rev 480)
+++ branches/ocean_projects/advection/src/core_ocean/Registry        2010-08-25 04:23:04 UTC (rev 481)
@@ -1,36 +1,39 @@
 #
 # namelist  type  namelist_record  name  default_value
 #
-namelist integer   sw_model config_test_case         5
-namelist character sw_model config_time_integration  RK4
-namelist real      sw_model config_dt                172.8
-namelist integer   sw_model config_ntimesteps        7500
-namelist integer   sw_model config_output_interval   500
-namelist integer   sw_model config_stats_interval    100
-namelist real      sw_model config_visc              0.0
-namelist character io       config_input_name        grid.nc
-namelist character io       config_output_name       output.nc
-namelist character io       config_restart_name      restart.nc
-namelist integer   restart  config_restart_interval  0
-namelist logical   restart  config_do_restart        false
-namelist real      restart  config_restart_time      172800.0
-namelist character grid     config_vert_grid_type    isopycnal
-namelist real      grid     config_rho0              1028
-namelist real      hmix     config_hor_diffusion     2000.0
-namelist character vmix     config_vert_visc_type    const
-namelist character vmix     config_vert_diff_type    const
-namelist real      vmix     config_vert_viscosity    2.5e-4
-namelist real      vmix     config_vert_diffusion    2.5e-5
-namelist real      vmix     config_vmixTanhViscMax   2.5e-1
-namelist real      vmix     config_vmixTanhViscMin   1.0e-4
-namelist real      vmix     config_vmixTanhDiffMax   2.5e-2
-namelist real      vmix     config_vmixTanhDiffMin   1.0e-5
-namelist real      vmix     config_vmixTanhZMid      -100
-namelist real      vmix     config_vmixTanhZWidth    100
-namelist character advection  config_hor_tracer_adv  'centered'
-namelist character advection  config_vert_tracer_adv 'centered'
+namelist integer   sw_model  config_test_case         5
+namelist character sw_model  config_time_integration  RK4
+namelist real      sw_model  config_dt                172.8
+namelist integer   sw_model  config_ntimesteps        7500
+namelist integer   sw_model  config_output_interval   500
+namelist integer   sw_model  config_stats_interval    100
+namelist real      sw_model  config_visc              0.0
+namelist character io        config_input_name        grid.nc
+namelist character io        config_output_name       output.nc
+namelist character io        config_restart_name      restart.nc
+namelist integer   restart   config_restart_interval  0
+namelist logical   restart   config_do_restart        false
+namelist real      restart   config_restart_time      172800.0
+namelist character grid      config_vert_grid_type    isopycnal
+namelist real      grid      config_rho0              1028
+namelist real      hmix      config_hor_diffusion     2000.0
+namelist character vmix      config_vert_visc_type    const
+namelist character vmix      config_vert_diff_type    const
+namelist real      vmix      config_vert_viscosity    2.5e-4
+namelist real      vmix      config_vert_diffusion    2.5e-5
+namelist real      vmix      config_vmixTanhViscMax   2.5e-1
+namelist real      vmix      config_vmixTanhViscMin   1.0e-4
+namelist real      vmix      config_vmixTanhDiffMax   2.5e-2
+namelist real      vmix      config_vmixTanhDiffMin   1.0e-5
+namelist real      vmix      config_vmixTanhZMid      -100
+namelist real      vmix      config_vmixTanhZWidth    100
+namelist character advection config_hor_tracer_adv  'centered'
+namelist character advection config_vert_tracer_adv 'centered'
+namelist integer   advection config_tracer_adv_order     2
+namelist integer   advection config_thickness_adv_order     2
+namelist logical   advection config_positive_definite    false
+namelist logical   advection config_monotonic            false
 
-
 #
 # dim  type  name_in_file  name_in_code
 #
@@ -41,6 +44,8 @@
 dim nVertices nVertices
 dim TWO 2
 dim R3 3
+dim FIFTEEN 15
+dim TWENTYONE 21
 dim vertexDegree vertexDegree
 dim nVertLevels nVertLevels
 dim nVertLevelsP1 nVertLevels+1
@@ -98,6 +103,10 @@
 var real    fVertex ( nVertices ) iro fVertex - -
 var real    h_s ( nCells ) iro h_s - -
 
+# Space needed for advection
+var real    deriv_two ( FIFTEEN TWO nEdges ) o deriv_two - -
+var integer advCells ( TWENTYONE nCells ) - advCells - -
+
 # Arrays required for reconstruction of velocity field
 var real    coeffs_reconstruct ( R3 maxEdges nCells ) - coeffs_reconstruct - -
 
@@ -111,6 +120,7 @@
 # Boundary conditions: read from input, saved in restart and written to output
 var integer boundaryEdge ( nVertLevels nEdges ) iro boundaryEdge - -
 var integer boundaryVertex ( nVertLevels nVertices ) iro boundaryVertex - -
+var integer boundaryCell ( nVertLevels nCells ) iro boundaryCell - - 
 var real    u_src ( nVertLevels nEdges ) iro u_src - -
 
 # Prognostic variables: read from input, saved in restart, and written to output

Modified: branches/ocean_projects/advection/src/core_ocean/module_time_integration.F
===================================================================
--- branches/ocean_projects/advection/src/core_ocean/module_time_integration.F        2010-08-25 03:56:12 UTC (rev 480)
+++ branches/ocean_projects/advection/src/core_ocean/module_time_integration.F        2010-08-25 04:23:04 UTC (rev 481)
@@ -833,7 +833,7 @@
       real (kind=RKIND), dimension(:,:), allocatable:: div_u
       character :: c1*6
 
-      integer, dimension(:,:), pointer :: cellsOnEdge, cellsOnVertex, verticesOnEdge, edgesOnCell, edgesOnEdge, edgesOnVertex, boundaryEdge
+      integer, dimension(:,:), pointer :: cellsOnEdge, cellsOnVertex, verticesOnEdge, edgesOnCell, edgesOnEdge, edgesOnVertex, boundaryEdge, boundaryCell
       integer, dimension(:), pointer :: nEdgesOnCell, nEdgesOnEdge
       real (kind=RKIND) :: r, h1, h2
 
@@ -890,8 +890,24 @@
       nVertLevels = grid % nVertLevels
 
       boundaryEdge =&gt; grid % boundaryEdge % array
+      boundaryCell =&gt; grid % boundaryCell % array
 
       !
+      ! Find those cells that have an edge on the boundary
+      !
+      boundaryCell(:,:) = 0
+      do iEdge=1,nEdges
+       do k=1,nVertLevels
+         if(boundaryEdge(k,iEdge).eq.1) then
+           cell1 = cellsOnEdge(1,iEdge)
+           cell2 = cellsOnEdge(2,iEdge)
+           boundaryCell(k,cell1) = 1
+           boundaryCell(k,cell2) = 1
+         endif
+       enddo
+      enddo
+
+      !
       ! Compute height on cell edges at velocity locations
       !
       do iEdge=1,nEdges

Modified: branches/ocean_projects/advection/src/core_sw/Registry
===================================================================
--- branches/ocean_projects/advection/src/core_sw/Registry        2010-08-25 03:56:12 UTC (rev 480)
+++ branches/ocean_projects/advection/src/core_sw/Registry        2010-08-25 04:23:04 UTC (rev 481)
@@ -8,6 +8,9 @@
 namelist integer   sw_model config_output_interval   500
 namelist integer   sw_model config_stats_interval    100
 namelist real      sw_model config_visc              0.0
+namelist integer   sw_model config_tracer_adv_order     2
+namelist logical   sw_model config_positive_definite    false
+namelist logical   sw_model config_monotonic            false
 namelist character io       config_input_name        grid.nc
 namelist character io       config_output_name       output.nc
 namelist character io       config_restart_name      restart.nc
@@ -25,6 +28,8 @@
 dim nVertices nVertices
 dim TWO 2
 dim R3 3
+dim FIFTEEN 15
+dim TWENTYONE 21
 dim vertexDegree vertexDegree
 dim nVertLevels nVertLevels
 dim nTracers nTracers
@@ -83,12 +88,17 @@
 var real    fCell ( nCells ) iro fCell - -
 var real    h_s ( nCells ) iro h_s - -
 
+# Space needed for advection
+var real    deriv_two ( FIFTEEN TWO nEdges ) o deriv_two - -
+var integer advCells ( TWENTYONE nCells ) - advCells - -
+
 # Arrays required for reconstruction of velocity field
 var real    coeffs_reconstruct ( R3 maxEdges nCells ) - coeffs_reconstruct - -
 
 # Boundary conditions: read from input, saved in restart and written to output
 var integer boundaryEdge ( nVertLevels nEdges ) iro boundaryEdge - -
 var integer boundaryVertex ( nVertLevels nVertices ) iro boundaryVertex - -
+var integer boundaryCell ( nVertLevels nCells ) iro boundaryCell - - 
 
 # Prognostic variables: read from input, saved in restart, and written to output
 var real    u ( nVertLevels nEdges Time ) iro u - -

Modified: branches/ocean_projects/advection/src/core_sw/module_time_integration.F
===================================================================
--- branches/ocean_projects/advection/src/core_sw/module_time_integration.F        2010-08-25 03:56:12 UTC (rev 480)
+++ branches/ocean_projects/advection/src/core_sw/module_time_integration.F        2010-08-25 04:23:04 UTC (rev 481)
@@ -452,7 +452,7 @@
       real (kind=RKIND), dimension(:,:), pointer :: vh, weightsOnEdge, kiteAreasOnVertex, h_edge, h, u, v, tend_h, tend_u, &amp;
                                                     circulation, vorticity, ke, pv_edge, pv_vertex, pv_cell, gradPVn, gradPVt, divergence, &amp;
                                                     h_vertex, vorticity_cell
-      integer, dimension(:,:), pointer :: cellsOnEdge, cellsOnVertex, verticesOnEdge, edgesOnCell, edgesOnEdge, edgesOnVertex, boundaryEdge
+      integer, dimension(:,:), pointer :: cellsOnEdge, cellsOnVertex, verticesOnEdge, edgesOnCell, edgesOnEdge, edgesOnVertex, boundaryEdge, boundaryCell
       integer, dimension(:), pointer :: nEdgesOnCell, nEdgesOnEdge
       real (kind=RKIND) :: r, h1, h2
 
@@ -500,8 +500,24 @@
       nVertLevels = grid % nVertLevels
 
       boundaryEdge =&gt; grid % boundaryEdge % array
+      boundaryCell =&gt; grid % boundaryCell % array
 
       !
+      ! Find those cells that have an edge on the boundary
+      !
+      boundaryCell(:,:) = 0
+      do iEdge=1,nEdges
+       do k=1,nVertLevels
+         if(boundaryEdge(k,iEdge).eq.1) then
+           cell1 = cellsOnEdge(1,iEdge)
+           cell2 = cellsOnEdge(2,iEdge)
+           boundaryCell(k,cell1) = 1
+           boundaryCell(k,cell2) = 1
+         endif
+       enddo
+      enddo
+
+      !
       ! Compute height on cell edges at velocity locations
       !
       do iEdge=1,nEdges

</font>
</pre>