Outputs
All SCHISM outputs (except system outputs) can be found in outputs/
directory.
Run info output (mirror.out)¶
This is a mirror image of now-defunct screen output and is useful for diagnosis. Below is a sample:
Barotropic model without ST calculation
# of tracers in each module: 1 1 0
0 0 0 0 0 0 0
Total # of tracers= 2
Index ranges of each module: 1 1 2
2 3 2 3 2 3
2 3 2 3 2 3
2 3 2 3 2
# of global outputs= 27
done reading param.in; s2_mxnbt in param.in = 3.000000000000000
lhas_quad= T
mnei, mnei_p = 4 9
lhas_quad= T
Global Grid Size (ne,np,ns,nvrt): 108 130 237 2
**********Augmented Subdomain Sizes**********
rank nea ne neg nea2 neg2 npa np npg npa2 npg2 nsa ns nsg nsa2 nsg2
0 30 14 16 40 10 43 24 19 43 0 72 37 35 72 0
1 28 14 14 38 10 40 23 17 40 0 67 36 31 67 0
2 26 13 13 32 6 38 23 15 38 0 63 35 28 63 0
3 23 13 10 30 7 34 22 12 34 0 56 34 22 56 0
4 23 13 10 30 7 34 22 12 34 0 56 34 22 56 0
5 28 14 14 38 10 40 23 17 40 0 67 36 31 67 0
6 26 13 13 32 6 38 23 15 38 0 63 35 28 63 0
7 30 14 16 40 10 43 24 19 43 0 72 37 35 72 0
**********Global Boundary Sizes**********
nope neta nland nvel
1 13 1 31
**********Augmented Subdomain Boundary Sizes**********
rank nope neta nland nvel
0 0 0 1 7
1 0 0 1 7
2 0 0 1 10
3 0 0 1 10
4 1 4 1 7
5 1 7 0 0
6 1 5 1 6
7 1 7 0 0
Max. & min. sidelength= 19934.91537849107 7973.938973963872
done init (1)...
done init. tracers..
done initializing cold start
Done initializing variables
Done initializing outputs
done computing initial vgrid...
done computing initial nodal vel...
done computing initial density...
time stepping begins... 1 1440
done adjusting wind stress ...
done flow b.c.
done hvis...
done backtracking
done 1st preparation
done 2nd preparation
done solver; etatot= 3.1245774014922456E-002 ; average |eta|= 4.553235604713400E-005
done solving momentum eq...
done solving w
done solving transport equation
done recomputing levels...
done density calculation...
TIME STEP= 1; TIME= 300.000000
….
Notes
The ‘average |eta|’ above can be used as a quick and easy way to check if the run is progressing smoothly; it is the average of the absolute value of surface elevation at all nodes. If it’s too large or NaN, you have a problem.
Global output¶
SCHISM netcdf4 outputs are emitted in a directory called outputs/. This directory must exist or you will get an immediate crash from the model.
Depending on whether or not you turned on OLDIO, the global netcdf outputs will look different.
1) Scribed I/O (OLDIO is OFF) Under this mode, the netcdf outputs are global (combined) outputs, and you can visualize or process thm using latest FORTRAN (e.g., read_output10*), matlab or python scripts, or the latest VisIT plugins.
All 2D variables (e.g. elevation
, sigWaveHeight
etc) as well as static information such as geometry
and connectivity info are grouped into out2d_*.nc
. On the other hand, each 3D variable has its own
output, and vector variables have X and Y components in separate outputs (e.g. horizontalVelX_*.nc
and
horizontalVelY_*.nc
).
2) Old I/O (OLDIO is ON)
Under this mode, each MPI process will dump its own output and a post-processing script (combin_output*.f90
)
will need to be used to combine these into global netcdf outputs.
An example output file name is outputs/schout_000000_2.nc
. More generally, the file name is: schout_[processor_no]_[time_block /stack #].nc
Processor number
The mpi_processor number starts at 0 and represents the MPI processor ID from the task that wrote the output.
Time block
The time blocks (‘stack’) start from 1 and are sequential. The model buffers and writes data occasionally. Every ihfskip
time steps it opens a new stack. For instance, if the time step is 120 seconds and ihfskip = 10080
, each stack will be 14-day long.
- "Neat" time lengths that will make meaningful analysis (e.g. daily, 10 days etc) are usually easiest later when you post-process;
- Some of the post-processing scripts will run a lot better if the length of your simulation is an even multiple of ihfskip. This can be done by altering ihfskip or the simulation length - at the risk of lengthening the simulation a bit, the latter often produces a neater result.
- If your simulation length is not an even multiple of the time block length, the last time block will be truncated on the last block. This will cause some minor errors and warnings in the post-processing tools. In addition, if you then restart the run it is best to repeat and overwrite the truncated block - the post-processing tools do not work well with blocks that grow and shrink in the middle of the run.
- If the output blocks match the end of the simulation very neatly, the model (at the time of writing) will open a new block that is very small in size. This is useful for the
autocombine_MPI_elfe.pl
, as the latter always waits until a new block to come out before starting to combine the previous block (and so it'd hang if the last empty block were not written out).
Variable names
The variables inside .nc correspond to 3D grid and state variables info at each output time step. The state variables (arrays) may have different centerings, e.g. at node/element/side. At the moment, most variables are centered around nodes (and most post-processing FORTRAN scripts also work on node-centered variables).
Combine outputs
The per-processor outputs need to be gathered into combined nc4 outputs first before you can visualize or post-process them. The script that does this is called combine_output11.f90
(a simple perl script autocombine_MPI_elfe.pl
exists to combine all available outputs transparently; you just need to update the path to the compiled combine_output11
inside the script, and it can be launched before or after a run is done). See the header of combine_output11.f90
on sample compilation commands and usage. Once you are done combining, you should have nc4 files called something like schout_2.nc
etc. Note that the stack # remains but the MPI process number is gone. There is no utility for gathering the outputs in stack/time; instead most post-processing tools are able to work with multiple stacks.
Note that under OLDIO, SCHISM allows users to easily add more customized outputs, using the routine writeout_nc() inside schism_step. The combine scripts will automatically combine the additional outputs.
You can visualize the combined nc4 outputs using VisIT (with SCHISM plug-ins). More info can be found in Visualization
Special care for elevation outputs
The elevation outputs from SCHISM are 'raw' outputs, which means users usually need to do post-processing to weed out dry instances themselves. This is a very common mistake from users. Always compare the elevation against local bottom elevation; if the total depth is less than h0
(as specified in param.nml
) you should not take the elevation outputs at face value - they should be instead NaN. For example, if the local depth is 2m, an elevation value of -3m or -1000m is the same: the node at this time instance is dry.
Other global outputs
The user may be interested in some maximum quantities. At the moment, SCHISM outputs two max files for elevation and depth-averaged velocity (outputs/maxelev_*
and outputs/maxdahv_*
). These files can be combined using Utility/Combining_Scripts/combine_gr3.f90
to generate maxelev.gr3
and maxdahv.gr3
. However, please exercise caution with maxelev.gr3
calculated this way because it may contain transient responses from cold start that should be disgarded. We recommend using Utility/Post-Processing-Fortran/read_output10_allnodes.f90
, which gives you more controls. Also see above for the general comments on elevation outputs.
Another type of global outputs are hotstart outputs, which must be combined (using combine_hotstart7.f90
) to generate a restart input.
Station outputs¶
These outputs are invoked with iout_sta=1
, and are found in outputs/staout_[1..,9]
, corresponding respectively to elev, air pressure, wind u, wind v, T, S, u, v, w. Each output has a simple ASCII format:
Warning and fatal messages¶
Warning message (nonfatal_*
) contains non-fatal warnings, while fatal message file (fatal.error
) contains fatal errors. In addition, you’d also check the system error outputs from your parallel job.