<p><b>mpetersen@lanl.gov</b> 2011-11-08 07:33:59 -0700 (Tue, 08 Nov 2011)</p><p>Remove implicit barotropic momentum decay and barotropic viscous damping. These worked correctly, but never really helped improve the barotropic solver.<br>
</p><hr noshade><pre><font color="gray">
Property changes on: branches/ocean_projects/split_explicit_mrp
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/ocean_projects/imp_vert_mix_mrp:754-986
/branches/ocean_projects/split_explicit_timestepping:1044-1097
/branches/ocean_projects/vert_adv_mrp:704-745
/branches/source_renaming:1082-1113
/branches/time_manager:924-962
+ /branches/ocean_projects/imp_vert_mix_mrp:754-986
/branches/ocean_projects/split_explicit_timestepping:1044-1097
/branches/ocean_projects/vert_adv_mrp:704-745
/branches/source_renaming:1082-1113
/branches/time_manager:924-962
/trunk/mpas:1134-1178
Modified: branches/ocean_projects/split_explicit_mrp/Makefile
===================================================================
--- branches/ocean_projects/split_explicit_mrp/Makefile        2011-11-07 22:52:37 UTC (rev 1178)
+++ branches/ocean_projects/split_explicit_mrp/Makefile        2011-11-08 14:33:59 UTC (rev 1179)
@@ -1,6 +1,7 @@
#MODEL_FORMULATION = -DNCAR_FORMULATION
MODEL_FORMULATION = -DLANL_FORMULATION
+# This flag must be off for nersc hopper:
FILE_OFFSET = -DOFFSET64BIT
#########################
@@ -56,6 +57,18 @@
        "CORE = $(CORE)" \
        "CPPFLAGS = -DRKIND=8 $(MODEL_FORMULATION) -D_MPI -DUNDERSCORE $(FILE_OFFSET) $(ZOLTAN_DEFINE)" )
+pgi-nersc:
+        ( make all \
+        "FC = ftn" \
+        "CC = cc" \
+        "SFC = ftn" \
+        "SCC = cc" \
+        "FFLAGS = -r8 -O3 -byteswapio -Mfree" \
+        "CFLAGS = -O3" \
+        "LDFLAGS = -O3" \
+        "CORE = $(CORE)" \
+        "CPPFLAGS = -DRKIND=8 $(MODEL_FORMULATION) -D_MPI -DUNDERSCORE $(FILE_OFFSET) $(ZOLTAN_DEFINE)" )
+
pgi-llnl:
        ( make all \
        "FC = mpipgf90" \
@@ -178,7 +191,42 @@
        "CORE = $(CORE)" \
        "CPPFLAGS = -DRKIND=8 $(MODEL_FORMULATION) -DUNDERSCORE $(FILE_OFFSET) $(ZOLTAN_DEFINE)" )
+pathscale-nersc:
+        ( make all \
+        "FC = ftn" \
+        "CC = cc" \
+        "SFC = ftn" \
+        "SCC = cc" \
+        "FFLAGS = -r8 -O3 -freeform -extend-source" \
+        "CFLAGS = -O3" \
+        "LDFLAGS = -O3" \
+        "CORE = $(CORE)" \
+        "CPPFLAGS = -DRKIND=8 $(MODEL_FORMULATION) -D_MPI -DUNDERSCORE $(FILE_OFFSET) $(ZOLTAN_DEFINE)" )
+cray-nersc:
+        ( make all \
+        "FC = ftn" \
+        "CC = cc" \
+        "SFC = ftn" \
+        "SCC = cc" \
+        "FFLAGS = -default64 -O3 -f free" \
+        "CFLAGS = -O3" \
+        "LDFLAGS = -O3" \
+        "CORE = $(CORE)" \
+        "CPPFLAGS = -DRKIND=8 $(MODEL_FORMULATION) -D_MPI -DUNDERSCORE $(FILE_OFFSET) $(ZOLTAN_DEFINE)" )
+
+intel-nersc:
+        ( make all \
+        "FC = ftn" \
+        "CC = cc" \
+        "SFC = ftn" \
+        "SCC = cc" \
+        "FFLAGS = -real-size 64 -O3 -FR" \
+        "CFLAGS = -O3" \
+        "LDFLAGS = -O3" \
+        "CORE = $(CORE)" \
+        "CPPFLAGS = -DRKIND=8 $(MODEL_FORMULATION) -D_MPI -DUNDERSCORE $(FILE_OFFSET) $(ZOLTAN_DEFINE)" )
+
CPPINCLUDES = -I../inc -I$(NETCDF)/include -I$(PAPI)/include
FCINCLUDES = -I../inc -I$(NETCDF)/include -I$(PAPI)/include
LIBS = -L$(NETCDF)/lib -lnetcdf $(PAPILIBS)
Modified: branches/ocean_projects/split_explicit_mrp/namelist.input.ocean
===================================================================
--- branches/ocean_projects/split_explicit_mrp/namelist.input.ocean        2011-11-07 22:52:37 UTC (rev 1178)
+++ branches/ocean_projects/split_explicit_mrp/namelist.input.ocean        2011-11-08 14:33:59 UTC (rev 1179)
@@ -31,9 +31,6 @@
config_n_btr_cor_iter = 2
config_u_correction = .true.
config_filter_btr_mode = .false.
- config_btr_mom_decay = .false.
- config_btr_mom_decay_time = 3600.0
- config_btr_mom_eddy_visc2 = 0.0
config_btr_subcycle_loop_factor = 2
config_SSH_from = 'avg_flux'
config_new_btr_variables_from = 'btr_avg'
Modified: branches/ocean_projects/split_explicit_mrp/namelist.input.sw
===================================================================
--- branches/ocean_projects/split_explicit_mrp/namelist.input.sw        2011-11-07 22:52:37 UTC (rev 1178)
+++ branches/ocean_projects/split_explicit_mrp/namelist.input.sw        2011-11-08 14:33:59 UTC (rev 1179)
@@ -1,9 +1,9 @@
&sw_model
config_test_case = 5
config_time_integration = 'RK4'
- config_dt = 200.0
+ config_dt = 172.8
config_start_time = '0000-01-01_00:00:00'
- config_run_duration = '00_05:00:00'
+ config_run_duration = '15_00:00:00'
config_stats_interval = 0
config_h_ScaleWithMesh = .false.
config_h_mom_eddy_visc2 = 0.0
@@ -23,7 +23,7 @@
config_input_name = 'grid.nc'
config_output_name = 'output.nc'
config_restart_name = 'restart.nc'
- config_output_interval = '0_01:00:00'
+ config_output_interval = '1_00:00:00'
config_frames_per_outfile = 0
/
Modified: branches/ocean_projects/split_explicit_mrp/src/core_hyd_atmos/mpas_atmh_mpas_core.F
===================================================================
--- branches/ocean_projects/split_explicit_mrp/src/core_hyd_atmos/mpas_atmh_mpas_core.F        2011-11-07 22:52:37 UTC (rev 1178)
+++ branches/ocean_projects/split_explicit_mrp/src/core_hyd_atmos/mpas_atmh_mpas_core.F        2011-11-08 14:33:59 UTC (rev 1179)
@@ -4,7 +4,6 @@
use mpas_timekeeping
type (io_output_object) :: restart_obj
- integer :: restart_frame
integer :: current_outfile_frames
@@ -48,7 +47,6 @@
block => block % next
end do
- restart_frame = 1
current_outfile_frames = 0
end subroutine mpas_core_init
@@ -108,9 +106,11 @@
if (mpas_is_alarm_ringing(clock, restartAlarmID, ierr=ierr)) then
call mpas_reset_clock_alarm(clock, restartAlarmID, ierr=ierr)
- if (restart_frame == 1) call mpas_output_state_init(restart_obj, domain, "RESTART")
- call mpas_output_state_for_domain(restart_obj, domain, restart_frame)
- restart_frame = restart_frame + 1
+
+ ! Write one restart time per file
+ call mpas_output_state_init(restart_obj, domain, "RESTART", trim(timeStamp))
+ call mpas_output_state_for_domain(restart_obj, domain, 1)
+ call mpas_output_state_finalize(restart_obj, domain % dminfo)
end if
end do
@@ -124,12 +124,9 @@
implicit none
+ type (domain_type), intent(inout) :: domain
integer :: ierr
- type (domain_type), intent(inout) :: domain
-
- if (restart_frame > 1) call mpas_output_state_finalize(restart_obj, domain % dminfo)
-
call mpas_destroy_clock(clock, ierr)
end subroutine mpas_core_finalize
Modified: branches/ocean_projects/split_explicit_mrp/src/core_ocean/Registry
===================================================================
--- branches/ocean_projects/split_explicit_mrp/src/core_ocean/Registry        2011-11-07 22:52:37 UTC (rev 1178)
+++ branches/ocean_projects/split_explicit_mrp/src/core_ocean/Registry        2011-11-08 14:33:59 UTC (rev 1179)
@@ -21,16 +21,13 @@
namelist character grid config_vert_grid_type isopycnal
namelist real grid config_rho0 1028
namelist integer split_explicit_ts config_n_ts_iter 2
-namelist integer split_explicit_ts config_n_bcl_iter_beg 4
-namelist integer split_explicit_ts config_n_bcl_iter_mid 4
-namelist integer split_explicit_ts config_n_bcl_iter_end 4
-namelist integer split_explicit_ts config_n_btr_subcycles 10
-namelist integer split_explicit_ts config_n_btr_cor_iter 1
+namelist integer split_explicit_ts config_n_bcl_iter_beg 2
+namelist integer split_explicit_ts config_n_bcl_iter_mid 2
+namelist integer split_explicit_ts config_n_bcl_iter_end 2
+namelist integer split_explicit_ts config_n_btr_subcycles 20
+namelist integer split_explicit_ts config_n_btr_cor_iter 2
namelist logical split_explicit_ts config_u_correction true
namelist logical split_explicit_ts config_filter_btr_mode false
-namelist logical split_explicit_ts config_btr_mom_decay false
-namelist real split_explicit_ts config_btr_mom_decay_time 3600.0
-namelist real split_explicit_ts config_btr_mom_eddy_visc2 0.0
namelist integer split_explicit_ts config_btr_subcycle_loop_factor 2
namelist character split_explicit_ts config_SSH_from avg_flux
namelist character split_explicit_ts config_new_btr_variables_from btr_avg
@@ -44,6 +41,7 @@
namelist logical hmix config_visc_vorticity_term true
namelist real hmix config_visc_vorticity_visc2_scale 1.0
namelist real hmix config_visc_vorticity_visc4_scale 1.0
+namelist logical hmix config_include_KE_vertex false
namelist real hmix config_h_tracer_eddy_diff2 0.0
namelist real hmix config_h_tracer_eddy_diff4 0.0
namelist real hmix config_apvm_upwinding 0.5
@@ -224,6 +222,8 @@
var persistent real h_edge ( nVertLevels nEdges Time ) 2 - h_edge state - -
var persistent real h_vertex ( nVertLevels nVertices Time ) 2 - h_vertex state - -
var persistent real ke ( nVertLevels nCells Time ) 2 o ke state - -
+var persistent real kev ( nVertLevels nVertices Time ) 2 o kev state - -
+var persistent real kevc ( nVertLevels nCells Time ) 2 o kevc state - -
var persistent real ke_edge ( nVertLevels nEdges Time ) 2 - ke_edge state - -
var persistent real pv_vertex ( nVertLevels nVertices Time ) 2 - pv_vertex state - -
var persistent real pv_cell ( nVertLevels nCells Time ) 2 - pv_cell state - -
Modified: branches/ocean_projects/split_explicit_mrp/src/core_ocean/mpas_ocn_mpas_core.F
===================================================================
--- branches/ocean_projects/split_explicit_mrp/src/core_ocean/mpas_ocn_mpas_core.F        2011-11-07 22:52:37 UTC (rev 1178)
+++ branches/ocean_projects/split_explicit_mrp/src/core_ocean/mpas_ocn_mpas_core.F        2011-11-08 14:33:59 UTC (rev 1179)
@@ -24,7 +24,6 @@
use ocn_vmix
type (io_output_object) :: restart_obj
- integer :: restart_frame
integer :: current_outfile_frames
@@ -80,7 +79,7 @@
call ocn_equation_of_state_init(err_tmp)
err = err .or. err_tmp
- if(err) then
+ if(err.eq.1) then
call mpas_dmpar_abort(dminfo)
endif
@@ -133,7 +132,6 @@
! call mpas_output_state_init(output_obj, domain, "OUTPUT")
! call write_output_frame(output_obj, domain)
- restart_frame = 1
current_outfile_frames = 0
end subroutine mpas_core_init!}}}
@@ -330,9 +328,11 @@
if (mpas_is_alarm_ringing(clock, restartAlarmID, ierr=ierr)) then
call mpas_reset_clock_alarm(clock, restartAlarmID, ierr=ierr)
- if (restart_frame == 1) call mpas_output_state_init(restart_obj, domain, "RESTART")
- call mpas_output_state_for_domain(restart_obj, domain, restart_frame)
- restart_frame = restart_frame + 1
+
+ ! Write one restart time per file
+ call mpas_output_state_init(restart_obj, domain, "RESTART", trim(timeStamp))
+ call mpas_output_state_for_domain(restart_obj, domain, 1)
+ call mpas_output_state_finalize(restart_obj, domain % dminfo)
end if
end do
@@ -749,12 +749,9 @@
implicit none
+ type (domain_type), intent(inout) :: domain
integer :: ierr
- type (domain_type), intent(inout) :: domain
-
- if (restart_frame > 1) call mpas_output_state_finalize(restart_obj, domain % dminfo)
-
call mpas_destroy_clock(clock, ierr)
end subroutine mpas_core_finalize!}}}
Modified: branches/ocean_projects/split_explicit_mrp/src/core_ocean/mpas_ocn_tendency.F
===================================================================
--- branches/ocean_projects/split_explicit_mrp/src/core_ocean/mpas_ocn_tendency.F        2011-11-07 22:52:37 UTC (rev 1178)
+++ branches/ocean_projects/split_explicit_mrp/src/core_ocean/mpas_ocn_tendency.F        2011-11-08 14:33:59 UTC (rev 1179)
@@ -620,7 +620,7 @@
weightsOnEdge, kiteAreasOnVertex, h_edge, h, u, v, w, pressure,&
circulation, vorticity, ke, ke_edge, MontPot, wTop, &
pv_edge, pv_vertex, pv_cell, gradPVn, gradPVt, divergence, &
- rho, temperature, salinity
+ rho, temperature, salinity, kev, kevc
real (kind=RKIND), dimension(:,:,:), pointer :: tracers
real (kind=RKIND), dimension(:), allocatable:: pTop
real (kind=RKIND), dimension(:,:), allocatable:: div_u
@@ -648,6 +648,8 @@
vorticity => s % vorticity % array
divergence => s % divergence % array
ke => s % ke % array
+ kev => s % kev % array
+ kevc => s % kevc % array
ke_edge => s % ke_edge % array
pv_edge => s % pv_edge % array
pv_vertex => s % pv_vertex % array
@@ -880,6 +882,41 @@
enddo
!
+ ! Compute kinetic energy in each vertex
+ !
+ kev(:,:) = 0.0; kevc(:,:) = 0.0
+ do iEdge=1,nEdges
+ do k=1,nVertLevels
+ kev(k,verticesOnEdge(1,iEdge)) = kev(k,verticesOnEdge(1,iEdge)) + dcEdge(iEdge) * dvEdge(iEdge) * u(k,iEdge)**2
+ kev(k,verticesOnEdge(2,iEdge)) = kev(k,verticesOnEdge(2,iEdge)) + dcEdge(iEdge) * dvEdge(iEdge) * u(k,iEdge)**2
+ end do
+ end do
+ do iVertex = 1,nVertices
+ do k=1,nVertLevels
+ kev(k,iVertex) = kev(k,iVertex) / areaTriangle(iVertex) / 4.0
+ enddo
+ enddo
+ do iVertex = 1, nVertices
+ do i=1,grid % vertexDegree
+ iCell = cellsOnVertex(i,iVertex)
+ do k=1,nVertLevels
+ kevc(k,iCell) = kevc(k,iCell) + kiteAreasOnVertex(i, iVertex) * kev(k, iVertex) / areaCell(iCell)
+ enddo
+ enddo
+ enddo
+
+ !
+ ! Compute kinetic energy in each cell by blending ke and kevc
+ !
+ if(config_include_KE_vertex) then
+ do iCell=1,nCells
+ do k=1,nVertLevels
+ ke(k,iCell) = 5.0/8.0*ke(k,iCell) + 3.0/8.0*kevc(k,iCell)
+ end do
+ end do
+ endif
+
+ !
! Compute v (tangential) velocities
!
v(:,:) = 0.0
Modified: branches/ocean_projects/split_explicit_mrp/src/core_ocean/mpas_ocn_test_cases.F
===================================================================
--- branches/ocean_projects/split_explicit_mrp/src/core_ocean/mpas_ocn_test_cases.F        2011-11-07 22:52:37 UTC (rev 1178)
+++ branches/ocean_projects/split_explicit_mrp/src/core_ocean/mpas_ocn_test_cases.F        2011-11-08 14:33:59 UTC (rev 1179)
@@ -483,7 +483,7 @@
real (kind=RKIND), intent(in) :: theta
aa = 0.5 * w * (2.0 * omega + w) * cos(theta)**2.0 + &
- 0.25 * K**2.0 * cos(theta)**(2.0*R) * ((R+1.0)*cos(theta)**2.0 + 2.0*R**2.0 - R - 2.0 - 2.0*R**2*cos(theta)**-2.0)
+ 0.25 * K**2.0 * cos(theta)**(2.0*R) * ((R+1.0)*cos(theta)**2.0 + 2.0*R**2.0 - R - 2.0 - 2.0*R**2*cos(theta)**(-2.0))
end function aa
Modified: branches/ocean_projects/split_explicit_mrp/src/core_ocean/mpas_ocn_time_integration_split.F
===================================================================
--- branches/ocean_projects/split_explicit_mrp/src/core_ocean/mpas_ocn_time_integration_split.F        2011-11-07 22:52:37 UTC (rev 1178)
+++ branches/ocean_projects/split_explicit_mrp/src/core_ocean/mpas_ocn_time_integration_split.F        2011-11-08 14:33:59 UTC (rev 1179)
@@ -390,24 +390,6 @@
end do
- ! Implicit solve for barotropic momentum decay
- if ( config_btr_mom_decay) then
- !
- ! Add term to RHS of momentum equation: -1/gamma u
- !
- ! This changes the solve to:
- ! u^{n+1} = u_provis^{n+1}/(1+dt/gamma)
- !
- coef = 1.0/(1.0 + dt/config_n_btr_subcycles/config_btr_mom_decay_time)
- do iEdge=1,block % mesh % nEdges
- block % state % time_levs(newBtrSubcycleTime) % state % uBtrSubcycle % array(iEdge) &
- = block % state % time_levs(newBtrSubcycleTime) % state % uBtrSubcycle % array(iEdge) &
- * coef
- end do
-
- endif
-
-
block => block % next
end do ! block
@@ -501,86 +483,7 @@
end do ! block
-! mrp 110801 begin
-! This whole section, bounded by 'mrp 110801', may be deleted later if it is found
-! that barotropic del2 is not useful.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- ! Barotropic subcycle: compute btr_divergence and btr_vorticity for del2(u_btr)
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- block => domain % blocklist
- do while (associated(block))
- block % state % time_levs(1) % state % u_diffusionBtr % array(:) = 0.0
- if ( config_btr_mom_eddy_visc2 > 0.0 ) then
- !
- ! Compute circulation and relative vorticity at each vertex
- !
- block % state % time_levs(1) % state % circulationBtr % array(:) = 0.0
- do iEdge=1,block % mesh % nEdges
- vertex1 = block % mesh % verticesOnEdge % array(1,iEdge)
- vertex2 = block % mesh % verticesOnEdge % array(2,iEdge)
- block % state % time_levs(1) % state % circulationBtr % array(vertex1) &
- = block % state % time_levs(1) % state % circulationBtr % array(vertex1) &
- - block % mesh % dcEdge % array (iEdge) &
- *block % state % time_levs(oldBtrSubcycleTime) % state % uBtrSubcycle % array(iEdge)
-
- block % state % time_levs(1) % state % circulationBtr % array(vertex2) &
- = block % state % time_levs(1) % state % circulationBtr % array(vertex2) &
- + block % mesh % dcEdge % array (iEdge) &
- *block % state % time_levs(oldBtrSubcycleTime) % state % uBtrSubcycle % array(iEdge)
- end do
- do iVertex=1,block % mesh % nVertices
- block % state % time_levs(1) % state % vorticityBtr % array(iVertex) &
- = block % state % time_levs(1) % state % circulationBtr % array(iVertex) / block % mesh % areaTriangle % array (iVertex)
- end do
-
- !
- ! Compute the divergence at each cell center
- !
- block % state % time_levs(1) % state % divergenceBtr % array(:) = 0.0
- do iEdge=1,block % mesh % nEdges
- cell1 = block % mesh % cellsOnEdge % array(1,iEdge)
- cell2 = block % mesh % cellsOnEdge % array(2,iEdge)
- block % state % time_levs(1) % state % divergenceBtr % array (cell1) &
- = block % state % time_levs(1) % state % divergenceBtr % array (cell1) &
- + block % state % time_levs(oldBtrSubcycleTime) % state % uBtrSubcycle % array(iEdge) &
- *block % mesh % dvEdge % array(iEdge)
-
- block % state % time_levs(1) % state % divergenceBtr % array (cell2) &
- = block % state % time_levs(1) % state % divergenceBtr % array (cell2) &
- - block % state % time_levs(oldBtrSubcycleTime) % state % uBtrSubcycle % array(iEdge) &
- *block % mesh % dvEdge % array(iEdge)
- end do
- do iCell = 1,block % mesh % nCells
- block % state % time_levs(1) % state % divergenceBtr % array(iCell) &
- = block % state % time_levs(1) % state % divergenceBtr % array(iCell) &
- /block % mesh % areaCell % array(iCell)
- enddo
-
- !
- ! Compute Btr diffusion
- !
- do iEdge=1,block % mesh % nEdgesSolve
- cell1 = block % mesh % cellsOnEdge % array(1,iEdge)
- cell2 = block % mesh % cellsOnEdge % array(2,iEdge)
- vertex1 = block % mesh % verticesOnEdge % array(1,iEdge)
- vertex2 = block % mesh % verticesOnEdge % array(2,iEdge)
-
- ! Here -( vorticityBtr(vertex2) - vorticityBtr(vertex1) ) / dvEdge % array (iEdge)
- ! is - </font>
<font color="red">abla vorticity pointing from vertex 2 to vertex 1, or equivalently
- ! + k \times </font>
<font color="gray">abla vorticity pointing from cell1 to cell2.
-
- block % state % time_levs(1) % state % u_diffusionBtr % array(iEdge) = block % mesh % meshScalingDel2 % array (iEdge) * config_btr_mom_eddy_visc2 * &
- (( block % state % time_levs(1) % state % divergenceBtr % array(cell2) - block % state % time_levs(1) % state % divergenceBtr % array(cell1) ) / block % mesh % dcEdge % array (iEdge) &
- -( block % state % time_levs(1) % state % vorticityBtr % array(vertex2) - block % state % time_levs(1) % state % vorticityBtr % array(vertex1) ) / block % mesh % dvEdge % array (iEdge))
-
- end do
- end if
- block => block % next
- end do ! block
-! mrp 110801 end
-
-
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Barotropic subcycle: Final solve for velocity. Iterate for Coriolis term.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -636,22 +539,6 @@
end do
- ! Implicit solve for barotropic momentum decay
- if ( config_btr_mom_decay) then
- ! Add term to RHS of momentum equation: -1/gamma u
- !
- ! This changes the solve to:
- ! u^{n+1} = u_provis^{n+1}/(1+dt/gamma)
- !
- coef = 1.0/(1.0 + dt/config_n_btr_subcycles/config_btr_mom_decay_time)
- do iEdge=1,block % mesh % nEdges
- block % state % time_levs(newBtrSubcycleTime) % state % uBtrSubcycle % array(iEdge) &
- = block % state % time_levs(newBtrSubcycleTime) % state % uBtrSubcycle % array(iEdge) &
- * coef
- end do
-
- endif
-
block => block % next
end do ! block
Modified: branches/ocean_projects/split_explicit_mrp/src/core_sw/mpas_sw_mpas_core.F
===================================================================
--- branches/ocean_projects/split_explicit_mrp/src/core_sw/mpas_sw_mpas_core.F        2011-11-07 22:52:37 UTC (rev 1178)
+++ branches/ocean_projects/split_explicit_mrp/src/core_sw/mpas_sw_mpas_core.F        2011-11-08 14:33:59 UTC (rev 1179)
@@ -4,7 +4,6 @@
use mpas_timekeeping
type (io_output_object) :: restart_obj
- integer :: restart_frame
integer :: current_outfile_frames
type (MPAS_Clock_type) :: clock
@@ -46,7 +45,6 @@
block => block % next
end do
- restart_frame = 1
current_outfile_frames = 0
end subroutine mpas_core_init
@@ -200,9 +198,11 @@
if (mpas_is_alarm_ringing(clock, restartAlarmID, ierr=ierr)) then
call mpas_reset_clock_alarm(clock, restartAlarmID, ierr=ierr)
- if (restart_frame == 1) call mpas_output_state_init(restart_obj, domain, "RESTART")
- call mpas_output_state_for_domain(restart_obj, domain, restart_frame)
- restart_frame = restart_frame + 1
+
+ ! Write one restart time per file
+ call mpas_output_state_init(restart_obj, domain, "RESTART", trim(timeStamp))
+ call mpas_output_state_for_domain(restart_obj, domain, 1)
+ call mpas_output_state_finalize(restart_obj, domain % dminfo)
end if
end do
@@ -337,14 +337,11 @@
implicit none
+ type (domain_type), intent(inout) :: domain
integer :: ierr
+
+ call mpas_destroy_clock(clock, ierr)
- type (domain_type), intent(inout) :: domain
-
- if (restart_frame > 1) call mpas_output_state_finalize(restart_obj, domain % dminfo)
-
- call mpas_destroy_clock(clock, ierr)
-
end subroutine mpas_core_finalize
Modified: branches/ocean_projects/split_explicit_mrp/src/framework/mpas_io_input.F
===================================================================
--- branches/ocean_projects/split_explicit_mrp/src/framework/mpas_io_input.F        2011-11-07 22:52:37 UTC (rev 1178)
+++ branches/ocean_projects/split_explicit_mrp/src/framework/mpas_io_input.F        2011-11-08 14:33:59 UTC (rev 1179)
@@ -128,9 +128,17 @@
type (MPAS_TimeInterval_type) :: timeDiff
type (MPAS_TimeInterval_type) :: minTimeDiff
character(len=32) :: timeStamp
+ character(len=1024) :: filename
if (config_do_restart) then
- input_obj % filename = trim(config_restart_name)
+
+ ! this get followed by set is to ensure that the time is in standard format
+ call mpas_set_time(curr_time=startTime, dateTimeString=config_start_time)
+ call mpas_get_time(curr_time=startTime, dateTimeString=timeStamp)
+
+ call mpas_insert_string_suffix(trim(config_restart_name), timeStamp, filename)
+
+ input_obj % filename = trim(filename)
input_obj % stream = STREAM_RESTART
else
input_obj % filename = trim(config_input_name)
@@ -772,6 +780,12 @@
end if
end do
+ ! require restart time to exactly match start time (this error should never be reached as we have by this point opened the restart file with a name containing the startTime)
+ if(sliceTime /= startTime) then
+ write(0,*) "Error: restart file ", filename, " did not contain time ", config_start_time
+ call mpas_dmpar_abort(domain % dminfo)
+ end if
+
timeStamp = xtime % array(input_obj % time)
deallocate(xtime % ioinfo)
@@ -1004,6 +1018,29 @@
end subroutine mpas_input_state_for_domain
+ !CR:TODO: an identical subroutine is found in module_io_output - merge
+ subroutine mpas_insert_string_suffix(stream, suffix, filename)
+
+ implicit none
+
+ character (len=*), intent(in) :: stream
+ character (len=*), intent(in) :: suffix
+ character (len=*), intent(out) :: filename
+ integer :: length, i
+
+ filename = trim(stream) // '.' // trim(suffix)
+
+ length = len_trim(stream)
+ do i=length-1,1,-1
+ if(stream(i:i) == '.') then
+ filename = trim(stream(:i)) // trim(suffix) // trim(stream(i:))
+ exit
+ end if
+ end do
+
+ end subroutine mpas_insert_string_suffix
+
+
subroutine mpas_read_and_distribute_fields(dminfo, input_obj, block, &
readCellsStart, readCellsCount, &
readEdgesStart, readEdgesCount, &
Modified: branches/ocean_projects/split_explicit_mrp/src/framework/mpas_io_output.F
===================================================================
--- branches/ocean_projects/split_explicit_mrp/src/framework/mpas_io_output.F        2011-11-07 22:52:37 UTC (rev 1178)
+++ branches/ocean_projects/split_explicit_mrp/src/framework/mpas_io_output.F        2011-11-08 14:33:59 UTC (rev 1179)
@@ -94,7 +94,12 @@
output_obj % filename = trim(tempfilename)
output_obj % stream = OUTPUT
else if (trim(stream) == 'RESTART') then
- output_obj % filename = trim(config_restart_name)
+ if(present(outputSuffix)) then
+ call mpas_insert_string_suffix(config_restart_name, outputSuffix, tempfilename)
+ else
+ tempfilename = config_restart_name
+ end if
+ output_obj % filename = trim(tempfilename)
output_obj % stream = RESTART
else if (trim(stream) == 'SFC') then
! Keep filename as whatever was set by the user
Modified: branches/ocean_projects/split_explicit_mrp/src/framework/mpas_timekeeping.F
===================================================================
--- branches/ocean_projects/split_explicit_mrp/src/framework/mpas_timekeeping.F        2011-11-07 22:52:37 UTC (rev 1178)
+++ branches/ocean_projects/split_explicit_mrp/src/framework/mpas_timekeeping.F        2011-11-08 14:33:59 UTC (rev 1179)
@@ -615,7 +615,7 @@
implicit none
type (MPAS_Clock_type), intent(in) :: clock
- type (MPAS_Alarm_type), pointer, intent(in) :: alarmPtr
+ type (MPAS_Alarm_type), pointer :: alarmPtr
type (MPAS_TimeInterval_type), intent(in), optional :: interval
integer, intent(out), optional :: ierr
Modified: branches/ocean_projects/split_explicit_mrp/src/framework/mpas_timer.F
===================================================================
--- branches/ocean_projects/split_explicit_mrp/src/framework/mpas_timer.F        2011-11-07 22:52:37 UTC (rev 1178)
+++ branches/ocean_projects/split_explicit_mrp/src/framework/mpas_timer.F        2011-11-08 14:33:59 UTC (rev 1179)
@@ -33,7 +33,7 @@
subroutine mpas_timer_start(timer_name, clear_timer, timer_ptr)!{{{
character (len=*), intent (in) :: timer_name !< Input: name of timer, stored as name of timer
logical, optional, intent(in) :: clear_timer !< Input: flag to clear timer
- type (timer_node), optional, pointer, intent(out) :: timer_ptr !< Output: pointer to store timer in module
+ type (timer_node), optional, pointer :: timer_ptr !< Output: pointer to store timer in module
logical :: timer_added, timer_found, string_equal, check_flag
type (timer_node), pointer :: current, temp
@@ -151,7 +151,7 @@
subroutine mpas_timer_stop(timer_name, timer_ptr)!{{{
character (len=*), intent(in) :: timer_name !< Input: name of timer to stop
- type (timer_node), pointer, intent(in), optional :: timer_ptr !< Input: pointer to timer, for stopping
+ type (timer_node), pointer, optional :: timer_ptr !< Input: pointer to timer, for stopping
type (timer_node), pointer :: current
@@ -219,8 +219,8 @@
end subroutine mpas_timer_stop!}}}
recursive subroutine mpas_timer_write(timer_ptr, total_ptr)!{{{
- type (timer_node), pointer, intent(inout), optional :: timer_ptr
- type (timer_node), pointer, intent(in), optional :: total_ptr
+ type (timer_node), pointer, optional :: timer_ptr
+ type (timer_node), pointer, optional :: total_ptr
character (len=10) :: tname
logical :: total_found, string_equals
</font>
</pre>