<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 @@
&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.
/
&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 => grid % boundaryEdge % array
+ boundaryCell => 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, &
circulation, vorticity, ke, pv_edge, pv_vertex, pv_cell, gradPVn, gradPVt, divergence, &
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 => grid % boundaryEdge % array
+ boundaryCell => 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>