[Dart-dev] [4052] DART/trunk/models/POP: Committed after assimilating a single obs in the middle of the atlantic with
nancy at ucar.edu
nancy at ucar.edu
Wed Sep 16 14:23:15 MDT 2009
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/dart-dev/attachments/20090916/7529d888/attachment-0001.html
-------------- next part --------------
Modified: DART/trunk/models/POP/dart_pop_mod.f90
===================================================================
--- DART/trunk/models/POP/dart_pop_mod.f90 2009-09-15 20:59:18 UTC (rev 4051)
+++ DART/trunk/models/POP/dart_pop_mod.f90 2009-09-16 20:23:15 UTC (rev 4052)
@@ -72,21 +72,23 @@
character(len=100) :: log_filename, pointer_filename
logical :: lredirect_stdout, luse_pointer_files
+logical :: luse_nf_64bit_offset
integer :: num_iotasks
namelist /io_nml/ num_iotasks, lredirect_stdout, log_filename, &
- luse_pointer_files, pointer_filename
+ luse_pointer_files, pointer_filename, luse_nf_64bit_offset
!------------------------------------------------------------------
! The POP restart manager namelist variables
!------------------------------------------------------------------
character(len=100) :: restart_outfile ! length consistent with POP
-character(len= 64) :: restart_freq_opt, restart_fmt
+character(len= 64) :: restart_freq_opt, restart_start_opt, restart_fmt
logical :: leven_odd_on, pressure_correction
-integer :: restart_freq, even_odd_freq
+integer :: restart_freq, restart_start, even_odd_freq
-namelist /restart_nml/ restart_freq_opt, restart_freq, restart_outfile, &
+namelist /restart_nml/ restart_freq_opt, restart_freq, &
+ restart_start_opt, restart_start, restart_outfile, &
restart_fmt, leven_odd_on, even_odd_freq, pressure_correction
!------------------------------------------------------------------
@@ -94,9 +96,13 @@
!------------------------------------------------------------------
character(len=100) :: init_ts_file ! length consistent with POP
-character(len= 64) :: init_ts_option, init_ts_file_fmt
+character(len=100) :: init_ts_outfile
+character(len= 64) :: init_ts_option, init_ts_suboption
+character(len= 64) :: init_ts_file_fmt, init_ts_outfile_fmt
-namelist /init_ts_nml/ init_ts_option, init_ts_file, init_ts_file_fmt
+namelist /init_ts_nml/ init_ts_option, init_ts_suboption, &
+ init_ts_file, init_ts_file_fmt, &
+ init_ts_outfile, init_ts_outfile_fmt
!------------------------------------------------------------------
! The POP domain namelist
@@ -145,16 +151,21 @@
!
!------------------------------------------------------------------
-character(len=100) :: horiz_grid_file, vert_grid_file, topography_file, &
+character(len=100) :: horiz_grid_file, vert_grid_file, &
+ topography_file, topography_outfile, &
+ bathymetry_file, region_info_file, &
bottom_cell_file, region_mask_file
character(len= 64) :: horiz_grid_opt, sfc_layer_opt, vert_grid_opt, &
topography_opt
logical :: partial_bottom_cells, topo_smooth, flat_bottom, lremove_points
+integer :: kmt_kmin, n_topo_smooth
namelist /grid_nml/ horiz_grid_opt, horiz_grid_file, sfc_layer_opt, &
- vert_grid_opt, vert_grid_file, topography_opt, topography_file, &
- partial_bottom_cells, bottom_cell_file, region_mask_file, &
- topo_smooth, flat_bottom, lremove_points
+ vert_grid_opt, vert_grid_file, topography_opt, kmt_kmin, &
+ topography_file, topography_outfile, bathymetry_file, &
+ partial_bottom_cells, bottom_cell_file, n_topo_smooth, &
+ region_mask_file, topo_smooth, flat_bottom, lremove_points, &
+ region_info_file
!======================================================================
contains
@@ -174,11 +185,15 @@
read(iunit, nml = time_manager_nml, iostat = io)
call check_namelist_read(iunit, io, 'time_manager_nml')
-if ( allow_leapyear ) then
+! FIXME : Real observations are always GREGORIAN dates ...
+! but stomping on that here gets in the way of running
+! a perfect_model experiment for pre-1601 AD cases.
+
+! STOMP if ( allow_leapyear ) then
call set_calendar_type('gregorian')
-else
- call set_calendar_type('noleap')
-endif
+! STOMP else
+! STOMP call set_calendar_type('noleap')
+! STOMP endif
! Read POP I/O information (for restart file ... grid dimensions)
! Read POP initial information (for input/restart filename)
@@ -352,9 +367,12 @@
if ( trim(restart_freq_opt) == 'nday' ) then
set_model_time_step = set_time(0, restart_freq) ! (seconds, days)
+else if ( trim(restart_freq_opt) == 'nyear' ) then
+ ! FIXME ... CCSM_POP uses a bogus value for this
+ set_model_time_step = set_time(0, 1) ! (seconds, days)
else
call error_handler(E_ERR,'set_model_time_step', &
- 'restart_freq_opt must be days', source, revision, revdate)
+ 'restart_freq_opt must be nday', source, revision, revdate)
endif
end function set_model_time_step
Modified: DART/trunk/models/POP/model_mod.f90
===================================================================
--- DART/trunk/models/POP/model_mod.f90 2009-09-15 20:59:18 UTC (rev 4051)
+++ DART/trunk/models/POP/model_mod.f90 2009-09-16 20:23:15 UTC (rev 4052)
@@ -187,8 +187,8 @@
! of size num_reg_x*num_reg_y*max_reg_list_num are needed. The initialization
! fails and returns an error if max_reg_list_num is too small. A value of
! 30 is sufficient for the x3 POP grid with 180 regular lon and lat boxes
-! and a value of ??? is sufficient for for the x1 grid.
-integer, parameter :: max_reg_list_num = 30
+! and a value of 80 is sufficient for for the x1 grid.
+integer, parameter :: max_reg_list_num = 80
! The dipole interpolation keeps a list of how many and which dipole quads
! overlap each regular lon-lat box. The number for the u and t grids are stored
@@ -431,6 +431,10 @@
enddo
enddo
+! DEBUG to determine max_reg_list_num values for new grids ...
+! write(*,*)'u_dipole_num is ',maxval(u_dipole_num)
+! write(*,*)'t_dipole_num is ',maxval(t_dipole_num)
+
! Invert the temporary data structure. The total number of entries will be the sum
! of the number of dipole cells for each regular cell.
u_total = sum(u_dipole_num)
@@ -649,8 +653,8 @@
do ind_y = reg_lat_ind(1), reg_lat_ind(2)
! Make sure the list storage isn't full
- if(reg_list_num(index_x, ind_y) > max_reg_list_num) then
- msgstring = 'max_reg_list_num is too small'
+ if(reg_list_num(index_x, ind_y) >= max_reg_list_num) then
+ write(msgstring,*) 'max_reg_list_num (',max_reg_list_num,') is too small ... increase'
call error_handler(E_ERR, 'update_reg_list', msgstring, source, revision, revdate)
endif
@@ -1368,9 +1372,16 @@
! An odd number of corners should be impossible.
if(num_corners == 1 .or. num_corners == 3) then
! Put in some development error checking; shouldn't be able to hit 3 or 4 sides
- write(msgstring, *) 'Num corners in in_quad is ', num_sides, &
+ write(*,*)'xcorners = ',x_corners,';'
+ write(*,*)'ycorners = ',y_corners,';'
+ write(*,*)'lon = ',lon,';'
+ write(*,*)'lat = ',lat,';'
+ write(*,*)'intercepts = ',intercepts,';'
+ write(*,*)'exact_corner = ',exact_corner,';'
+ write(msgstring, *) 'Num corners in in_quad is ', num_corners, &
'Please contact DART development team'
- call error_handler(E_ERR, 'in_quad', msgstring, source, revision, revdate)
+ call error_handler(E_MSG, 'in_quad', msgstring, source, revision, revdate)
+ in_quad = .false. ! DEBUG FIXME TJH ... not the right thing to do.
! Four corners means we are not in;
else if(num_corners == 4) then
in_quad = .false.
@@ -1457,18 +1468,29 @@
! This can probably be made much cleaner and more efficient.
real(r8) :: slope, y_intercept, x(2), x_ray
+real(r8) :: xmin, xmax, ymin, ymax
+real(r8) :: rdummytiny, rdummyepsilon, rdummyabs, rdummyfraction
+integer :: idummydigits, idummyprecision, idummyexponent
+xmin = minval(x_in)
+xmax = maxval(x_in)
+
! May have to adjust the longitude intent in values, so copy
x = x_in
x_ray = x_ray_in
! See if the side wraps around in longitude
-if(maxval(x) - minval(x) > 180.0_r8) then
- if(x(1) < 180.0_r8) x(1) = x(1) + 360.0_r8
- if(x(2) < 180.0_r8) x(2) = x(2) + 360.0_r8
+if(xmax - xmin > 180.0_r8) then
+ if( x(1) < 180.0_r8) x(1) = x(1) + 360.0_r8
+ if( x(2) < 180.0_r8) x(2) = x(2) + 360.0_r8
if(x_ray < 180.0_r8) x_ray = x_ray + 360.0_r8
endif
+xmin = minval(x)
+xmax = maxval(x)
+ymin = minval(y)
+ymax = maxval(y)
+
! Initialize all the possible returns
cant_be_in_box = .false.
on_side = .false.
@@ -1478,8 +1500,45 @@
! First easy check, if x_ray is not between x(1) and x(2) it can't intersect
if(x_ray < minval(x) .or. x_ray > maxval(x)) return
+if((x_ray < xmin) .or. (x_ray > xmax)) then
+ write(*,*)'minval vs xmin makes a difference'
+ return
+endif
+
+!if(x(2) == x(1)) then
+! continue
+!else
+! if (x(2) - x(1) == 0.0) &
+! write(*,*)'x difference is zero', x
+! if (abs(x(2) -x(1)) < epsilon(x(1))) &
+! write(*,*)'x is almost equal', x
+!endif
+!
+!if(y(2) == y(1)) then
+! continue
+!else
+! if (y(2) - y(1) == 0.0) then
+! write(*,*)'y difference is zero', y
+! endif
+! if (abs(y(2) -y(1)) < epsilon(y(1))) then
+! write(*,*)'y is almost equal', y
+! endif
+! if (abs(y(2) -y(1)) < tiny(y(1))) then
+! write(*,*)'y is almost equal', y
+! endif
+! rdummyabs = abs(y(2) - y(1))
+! rdummytiny = tiny(y(1))
+! rdummyepsilon = epsilon(y(1))
+! idummydigits = digits(y(1))
+! idummyprecision = precision(y(1))
+! idummyexponent = exponent(rdummyabs)
+! rdummyfraction = fraction(rdummyabs)
+!endif
+
+rdummyabs = abs(x(2) - x(1))
! First subblock, slope is undefined
-if(x(2) == x(1)) then
+! if(x(2) == x(1)) then
+if(rdummyabs < 1.0E-12_r8 ) then ! near enough equal
! Check for exactly on this side
if(x_ray /= x(1)) then
! Doesn't intersect vertical line
@@ -1487,7 +1546,7 @@
else
! The ray is colinear with the side
! If y_ray is between endpoints then point is on this side
- if(y_ray <= maxval(y) .and. y_ray >= minval(y)) then
+ if(y_ray <= ymax .and. y_ray >= ymin) then
on_side = .true.
return
! If not on side but colinear with side, point cant be in quad
@@ -1499,8 +1558,13 @@
else
- ! Second possibility; slope is defined
- slope = (y(2) - y(1)) / (x(2) - x(1))
+ rdummyabs = abs(y(2) - y(1))
+ if ( rdummyabs < 1.0E-12_r8 ) then
+ slope = 0.0_r8
+ else
+ ! Second possibility; slope is defined
+ slope = (y(2) - y(1)) / (x(2) - x(1))
+ endif
! Intercept of downward ray and line through points is at x_ray and...
y_intercept = y(1) + slope * (x_ray - x(1))
@@ -1521,10 +1585,10 @@
! Slope of line is not 0 or undefined so y endpoints differ
! If intercept is on segment and is below the point
- if(y_intercept > maxval(y) .or. y_intercept < minval(y)) then
+ if(y_intercept > ymax .or. y_intercept < ymin) then
! Intersects line containing side outside of side
return
- else if(y_intercept < maxval(y) .and. y_intercept > minval(y)) then
+ else if(y_intercept < ymax .and. y_intercept > ymin) then
! Intercepts inside the side
intercepts = 1
return
Added: DART/trunk/models/POP/shell_scripts/assimilate.csh
===================================================================
--- DART/trunk/models/POP/shell_scripts/assimilate.csh (rev 0)
+++ DART/trunk/models/POP/shell_scripts/assimilate.csh 2009-09-16 20:23:15 UTC (rev 4052)
@@ -0,0 +1,206 @@
+#!/usr/local/bin/tcsh
+#
+# Data Assimilation Research Testbed -- DART
+# Copyright 2004-2009, Data Assimilation Research Section
+# University Corporation for Atmospheric Research
+# Licensed under the GPL -- www.gpl.org/licenses/gpl.html
+#
+# <next few lines under version control, do not edit>
+# $URL$
+# $Id$
+# $Revision$
+# $Date$
+
+#-----------------------------------------------------------------------------
+# assimilate.csh
+#
+#
+#
+# just see what we have to work with.
+# Check the ENVIRONMENT section of:
+# /fis01/cgd/oce/yeager/home/ccsm_runs/ccsm4.0_IE/dart.001hy/poe.stdout.921054
+#-----------------------------------------------------------------------------
+# CASE=dart.001hy
+# CASEROOT=/fis01/cgd/oce/yeager/home/ccsm_runs/ccsm4.0_IE/dart.001hy
+# CCSMROOT=/blhome/yeager/ccsm4_0_beta21ie
+# GRID=T62_gx1v6
+# CASETOOLS=/fis01/cgd/oce/yeager/home/ccsm_runs/ccsm4.0_IE/dart.001hy/Tools
+# CASEBUILD=/fis01/cgd/oce/yeager/home/ccsm_runs/ccsm4.0_IE/dart.001hy/Buildconf
+# SCRIPTSROOT=/blhome/yeager/ccsm4_0_beta21ie/scripts
+# UTILROOT=/blhome/yeager/ccsm4_0_beta21ie/scripts/ccsm_utils
+# BLDROOT=/blhome/yeager/ccsm4_0_beta21ie/scripts/ccsm_utils/Build
+# CODEROOT=/blhome/yeager/ccsm4_0_beta21ie/models
+# SHAREROOT=/blhome/yeager/ccsm4_0_beta21ie/models/csm_share
+# COMP_OCN=pop2
+# OCN_GRID=gx1v6
+# OCN_NX=320
+# OCN_NY=384
+# STOP_OPTION=ndays
+# STOP_N=5
+# STOP_DATE=-999
+# REST_OPTION=ndays
+# REST_N=5
+# REST_DATE=-999
+# RUN_TYPE=hybrid
+# RUN_STARTDATE=2000-01-01
+# RUN_REFCASE=c.b12.001
+# RUN_REFDATE=0002-01-01
+# NINST_OCN=7
+
+set ensemble_size = ${NINST_OCN}
+
+# Create temporary working directory for the assimilation
+set temp_dir = assimilate_dir.$$
+echo "temp_dir is $temp_dir"
+
+# Create a clean temporary directory and go there
+\rm -rf $temp_dir
+mkdir -p $temp_dir
+cd $temp_dir
+
+#-------------------------------------------------------------------------
+# Determine time of model state ... from file name of first member
+# of the form "./${CASE}.pop.$ensemble_member.r.2000-01-06-00000.nc"
+#-------------------------------------------------------------------------
+
+set FILE = `head -1 ../rpointer.ocn.1.restart`
+set FILE = $FILE:t
+set FILE = $FILE:r
+set OCN_DATE_EXT = `echo $FILE:e`
+set OCN_DATE_STR = `echo $FILE:e | sed -e "s#-# #g"`
+set OCN_DATE = `echo $OCN_DATE_STR`
+@ OCN_YEAR = $OCN_DATE[1]
+@ OCN_MONTH = $OCN_DATE[2]
+@ OCN_DAY = $OCN_DATE[3]
+@ OCN_SECONDS = $OCN_DATE[4]
+
+echo "valid time of model is $OCN_YEAR $OCN_MONTH $OCN_DAY $OCN_SECONDS"
+
+#-----------------------------------------------------------------------------
+# Set variables containing various directory names where we will GET things
+#-----------------------------------------------------------------------------
+
+set DARTDIR = ${HOME}/DART/models/POP/work
+
+set DART_OBS_DIR = `printf %04d%02d ${OCN_YEAR} ${OCN_MONTH}`
+set OBSDIR = /ptmp/dart/Obs_sets/GTSPP/${DART_OBS_DIR}
+
+#-------------------------------------------------------------------------
+# Populate a run-time directory with the bits needed to run DART
+# Either get them from the CCSM 'run' directory or some stock repository
+# The grid files are absolute paths ... so they need not move.
+#-------------------------------------------------------------------------
+
+foreach FILE ( input.nml filter pop_to_dart dart_to_pop )
+
+ if ( -e ../${FILE} ) then
+ cp -pv ../${FILE} .
+ else if ( -e ${DARTDIR}/${FILE} ) then
+ cp -pv ${DARTDIR}/${FILE} .
+ else
+ echo "DART required file $FILE not found ... ERROR"
+ stop
+ endif
+
+end
+
+# what about advance_time
+# move inflation info (if they exist) ...
+
+#-------------------------------------------------------------------------
+# Block 1: convert N POP restart files to DART initial conditions file(s)
+# pop_to_dart is serial code, we can do all of these at the same time
+# and just wait for them to finish IFF it were not for the fact we'd have
+# to have unique namelists for all of them.
+#
+# At the end of the block, we have DART restart files filter_ics.[1-N]
+# that came from pointer files ../rpointer.ocn.[1-N].restart
+#
+# DART namelist settings appropriate/required:
+# &filter_nml: restart_in_file_name = 'filter_ics'
+# &ensemble_manager_nml: single_restart_file_in = '.false.'
+# &pop_to_dart_nml: pop_to_dart_input_file = 'dart.ud',
+#-------------------------------------------------------------------------
+
+set member = 1
+while ( $member <= $ensemble_size )
+
+ set DART_IC_FILE = `printf filter_ics.%04d $member`
+ set OCN_RESTART_FILENAME = `head -1 ../rpointer.ocn.$member.restart`
+ ln -sf ../$OCN_RESTART_FILENAME pop.r.nc
+ ln -sf ../pop2_in.$member pop_in
+
+ ./pop_to_dart
+
+ mv dart.ud $DART_IC_FILE
+ @ member++
+end
+
+#-------------------------------------------------------------------------
+# Block 2: Actually run the assimilation.
+# Will result in a set of files : 'filter_restart.xxxx'
+#
+# DART namelist settings required:
+# &filter_nml: async = 0,
+# &filter_nml: adv_ens_command = "./no_model_advance.csh",
+# &filter_nml: restart_in_file_name = 'filter_ics'
+# &filter_nml: restart_out_file_name = 'filter_restart'
+# &filter_nml: obs_sequence_in_name = 'obs_seq.out'
+# &filter_nml: obs_sequence_out_name = 'obs_seq.final'
+# &filter_nml: init_time_days = -1,
+# &filter_nml: init_time_seconds = -1,
+# &filter_nml: first_obs_days = -1,
+# &filter_nml: first_obs_seconds = -1,
+# &filter_nml: last_obs_days = -1,
+# &filter_nml: last_obs_seconds = -1,
+# &ensemble_manager_nml: single_restart_file_in = '.false.'
+#
+#-------------------------------------------------------------------------
+
+# Determine proper observation sequence file.
+
+set OBSFNAME = `printf obs_seq.0Z.%04d%02d%02d ${OCN_YEAR} ${OCN_MONTH} ${OCN_DAY}`
+# set OBSFNAME = obs_seq.0Z.20000106.1obs
+set OBS_FILE = ${OBSDIR}/${OBSFNAME}
+
+ln -sfv ${OBS_FILE} obs_seq.out
+
+mpirun.lsf ./filter
+
+mv Prior_Diag.nc ../Prior_Diag.${OCN_DATE_EXT}.nc
+mv Posterior_Diag.nc ../Posterior_Diag.${OCN_DATE_EXT}.nc
+mv obs_seq.final ../obs_seq.${OCN_DATE_EXT}.final
+
+# move inflation info (if they exist) ...
+
+#-------------------------------------------------------------------------
+# Block 3: Update the POP restart files ... sequentially (sigh) ...
+#
+# DART namelist settings required:
+# &filter_nml: restart_out_file_name = 'filter_restart'
+# &ensemble_manager_nml: single_restart_file_in = '.false.'
+# &dart_to_pop_nml: dart_to_pop_input_file = 'dart.ic',
+# &dart_to_pop_nml: advance_time_present = .false.
+#-------------------------------------------------------------------------
+
+set member = 1
+while ( $member <= $ensemble_size )
+
+ set DART_RESTART_FILE = `printf filter_restart.%04d $member`
+ set OCN_RESTART_FILENAME = `head -1 ../rpointer.ocn.$member.restart`
+ ln -sf ../$OCN_RESTART_FILENAME pop.r.nc
+ ln -sf ../pop2_in.$member pop_in
+
+ ln -sf $DART_RESTART_FILE dart.ic
+
+ ./dart_to_pop
+
+ @ member++
+end
+
+#-------------------------------------------------------------------------
+# Cleanup
+#-------------------------------------------------------------------------
+
+ls -lrt
+
Property changes on: DART/trunk/models/POP/shell_scripts/assimilate.csh
___________________________________________________________________
Added: svn:executable
+ *
Added: mime-type
+ text/plain
Added: svn:keywords
+ Date Rev Author URL Id
Added: svn:eol-style
+ native
Modified: DART/trunk/models/POP/work/input.nml
===================================================================
--- DART/trunk/models/POP/work/input.nml 2009-09-15 20:59:18 UTC (rev 4051)
+++ DART/trunk/models/POP/work/input.nml 2009-09-16 20:23:15 UTC (rev 4052)
@@ -13,19 +13,18 @@
restart_out_file_name = "perfect_restart",
obs_seq_in_file_name = "obs_seq.in",
obs_seq_out_file_name = "obs_seq.perfect",
- adv_ens_command = "./advance_model.csh" /
+ adv_ens_command = "./advance_model.csh"
+ /
-# trace_execution = .true.,
-
&filter_nml
- async = 2,
+ async = 4,
adv_ens_command = "./advance_model.csh",
- ens_size = 10,
- start_from_restart = .false.,
+ ens_size = 7,
+ start_from_restart = .true.,
output_restart = .true.,
- obs_sequence_in_name = "obs_seq.perfect",
+ obs_sequence_in_name = "obs_seq.out",
obs_sequence_out_name = "obs_seq.final",
- restart_in_file_name = "perfect_restart",
+ restart_in_file_name = "filter_ics",
restart_out_file_name = "filter_restart",
init_time_days = -1,
init_time_seconds = -1,
@@ -33,8 +32,8 @@
first_obs_seconds = -1,
last_obs_days = -1,
last_obs_seconds = -1,
- num_output_state_members = 0,
- num_output_obs_members = 0,
+ num_output_state_members = 7,
+ num_output_obs_members = 7,
output_interval = 1,
num_groups = 1,
input_qc_threshold = 4.0,
@@ -42,6 +41,7 @@
output_forward_op_errors = .false.,
output_timestamps = .false.,
output_inflation = .true.,
+ trace_execution = .true.,
inf_flavor = 0, 0,
inf_initial_from_restart = .false., .false.,
@@ -57,14 +57,15 @@
inf_lower_bound = 1.0, 1.0,
inf_upper_bound = 1000000.0, 1000000.0,
inf_sd_lower_bound = 0.0, 0.0
-/
+ /
&smoother_nml
num_lags = 0,
start_from_restart = .false.,
output_restart = .false.,
restart_in_file_name = 'smoother_ics',
- restart_out_file_name = 'smoother_restart' /
+ restart_out_file_name = 'smoother_restart'
+ /
# cutoff of 0.03 (radians) is about 200km
&assim_tools_nml
@@ -74,32 +75,37 @@
spread_restoration = .false.,
sampling_error_correction = .false.,
adaptive_localization_threshold = -1,
- print_every_nth_obs = 0 /
+ print_every_nth_obs = 0
+ /
&ensemble_manager_nml
- single_restart_file_in = .true.,
+ single_restart_file_in = .false.,
single_restart_file_out = .false.,
- perturbation_amplitude = 0.2 /
+ perturbation_amplitude = 0.2
+ /
&cov_cutoff_nml
- select_localization = 1 /
+ select_localization = 1
+ /
®_factor_nml
select_regression = 1,
input_reg_file = "time_mean_reg",
save_reg_diagnostics = .false.,
- reg_diagnostics_file = "reg_diagnostics" /
+ reg_diagnostics_file = "reg_diagnostics"
+ /
&obs_sequence_nml
- write_binary_obs_sequence = .false. /
+ write_binary_obs_sequence = .false.
+ /
&obs_kind_nml
- assimilate_these_obs_types = 'TEMPERATURE',
- 'SALINITY',
+ assimilate_these_obs_types = 'FLOAT_TEMPERATURE',
+ 'FLOAT_SALINITY',
'U_CURRENT_COMPONENT',
'V_CURRENT_COMPONENT',
evaluate_these_obs_types = 'SEA_SURFACE_HEIGHT',
- /
+ /
# xxx_these_obs_types = 'SALINITY',
# 'TEMPERATURE',
@@ -138,10 +144,12 @@
output_obs_kind_mod_file = '../../../obs_kind/obs_kind_mod.f90',
input_obs_def_mod_file = '../../../obs_def/DEFAULT_obs_def_mod.F90',
output_obs_def_mod_file = '../../../obs_def/obs_def_mod.f90',
- input_files = '../../../obs_def/obs_def_ocean_mod.f90' /
+ input_files = '../../../obs_def/obs_def_ocean_mod.f90'
+ /
&assim_model_nml
- write_binary_restart_files = .true. /
+ write_binary_restart_files = .true.
+ /
&model_nml
assimilation_period_days = 1,
@@ -149,22 +157,16 @@
model_perturbation_amplitude = 0.2,
output_state_vector = .false.,
debug = 0,
- /
+ /
- #pop_to_dart_restart_file = 'pop.r.x1A.19000102',
- #pop_to_dart_restart_file = 'pop.r.nc',
- #pop_to_dart_restart_file = '../utils/pop.r.latlon.19000712',
-
&pop_to_dart_nml
- pop_to_dart_restart_file = 'pop.r.nc',
- pop_to_dart_output_file = 'dart.ics',
- /
+ pop_to_dart_output_file = 'dart.ud',
+ /
&dart_to_pop_nml
- dart_to_pop_input_file = 'test.ic',
- dart_to_pop_restart_file = 'pop.r.nc',
- advance_time_present = .true.
- /
+ dart_to_pop_input_file = 'dart.ic',
+ advance_time_present = .false.
+ /
&location_nml
horiz_dist_only = .true.,
@@ -174,13 +176,15 @@
approximate_distance = .false.,
nlon = 71,
nlat = 36,
- output_box_info = .true. /
+ output_box_info = .true.
+ /
&utilities_nml
TERMLEVEL = 1,
module_details = .false.,
logfilename = 'dart_log.out',
- nmlfilename = 'dart_log.nml' /
+ nmlfilename = 'dart_log.nml'
+ /
&restart_file_tool_nml
input_file_name = "filter_restart",
@@ -197,7 +201,8 @@
overwrite_advance_time = .false.,
new_advance_days = -1,
new_advance_secs = -1,
- gregorian_cal = .true. /
+ gregorian_cal = .true.
+ /
&obs_sequence_tool_nml
num_input_files = 7,
@@ -209,7 +214,8 @@
'../observations/adcp_v_pseudo.obs_seq.out',
'../observations/tmi_pseudo.obs_seq.out',
filename_out = 'obs_seq.out',
- gregorian_cal = .true. /
+ gregorian_cal = .true.
+ /
# other possible obs tool namelist items:
#
@@ -285,5 +291,26 @@
-530.2654, -618.0071, -718.9376, -834.6679, -966.8794,
-1117.289, -1287.607, -1479.480, -1694.436, -1933.820,
-2198.734, -2489.986, -2808.042, -3153.009, -3524.622,
- -3922.264, -4344.997, -4791.606, -5260.660, -5750.303 /
+ -3922.264, -4344.997, -4791.606, -5260.660, -5750.303
+ /
+&schedule_nml
+ calendar = 'Gregorian',
+ first_bin_start = 1999, 12, 31, 12, 0, 0 ,
+ first_bin_end = 2000, 1, 1, 12, 0, 0 ,
+ last_bin_end = 2000, 1, 7, 12, 0, 0 ,
+ bin_interval_days = 1,
+ bin_interval_seconds = 0,
+ max_num_bins = 1000,
+ print_table = .true.
+ /
+
+&obs_seq_to_netcdf_nml
+ obs_sequence_name = '/gpfs/ptmp/thoar/dart.001hy/run/obs_seq.2000-01-06-00000.final'
+ lonlim1 = 0.0,
+ lonlim2 = 360.0,
+ latlim1 = -90.0,
+ latlim2 = 90.0,
+ verbose = .false.
+ /
+
More information about the Dart-dev
mailing list