CMS-Flow:Features: Difference between revisions
m (Created page with '= Boundary Conditions = CMS-Flow has multiple types of boundary conditions which are listed and discussed below. All CMS-Flow boundary conditions are forced at the edges of the …') |
mNo edit summary |
||
(312 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
= | = Hot Start = | ||
The term Hot start refers to starting a simulation with an initial condition other zero (cold start). Hot starts are used for specifying initial conditions or restarting simulations at intermediate times. The hot start controls are set in the ''Flow'' tab of the ''CMS-Flow Model Control'' window. | |||
== | ==Hot Start File == | ||
[[Image:Hot_Start_HDFView.png|thumb|right|500px| Figure 1. HDFView showing the structure of the CMS Hot Start File. ]] | |||
The CMS hot start feature CMS lets the user restart simulations that have been stopped due to electric outages, hardware malfunctions, or model crashes. In the case of a model crash the user, may restart the model using larger solver iterations and/or time steps to stabilize the simulation. The user has the option to specify a hot start output time or an interval for outputting a recurring hot start file. Every time the hot start file is written, it overwrites the previous information. The CMS Hot Start file saves information on the water elevation (pressure), and current velocities. If the sediment transport is active, then the water depth and sediment concentrations are also saved for each size class. Only the very last record of information is preserved (no starting from earlier intervals). | |||
The CMS hot start files are written as binary XMDF files by default. Depending on the type of hot start (single file or recurring), the names are as follows are saved in the directory of the CMS-Flow files: | |||
* SingleHotStart.h5 | |||
* AutoHotStart.h5 | |||
After saving a CMS Hot Start file, it is a good idea to rename the file with a different name before using it as an initial conditions file. This way, the file will not be overwritten in future simulations. | |||
== | '''Table 1. Hot Start CMS-Flow Cards''' | ||
{| class=wikitable border="1" | |||
! Card !! Arguments !! Default !! Range !! Description | |||
|- | |||
| HOT_START_TIME || REAL || none || none || Single time after start at which to output a single hot start file. | |||
|- | |||
| AUTO_HOT_START_INTERVAL || REAL || none || none || Sets the recurring hot start output interval . | |||
|} | |||
= | <br style="clear:both" /> | ||
== | ==Initial Conditions File== | ||
[[Image:Hot_Start_XMDFView_Initial_Condition.png|thumb|right|300px| Figure 2. Dataset Toolbox showing a time step sample of the water elevation and current velocity datasets for use in a hot start (initial condition) file.]] | |||
== | There are several situations where it is desired to specify a user-defined hot start file from which to start a simulation. If the user has previously specified a hot start file be written either at a specific time or at a recurring interval, they can simply indicate to start from that hot start as an initial condition from the SMS interface, or by adding a card to the parameter file. The card name and format are shown below. | ||
* Water | |||
* Current Velocity | <br style="clear:both" /> | ||
'''Table 2. CMS-Flow card for specifying the initial condition file.''' | |||
{| class=wikitable border="1" | |||
! Card !! Arguments !! Default !! Range !! Description | |||
|- | |||
| INITIAL_STARTUP_FILE <nowiki>|</nowiki> INITIAL_CONDITION_FILE || CHARACTER || none || none || Hot start filename that contains the information for a Hot Start. | |||
|} | |||
Sometimes, the user may forget to set up the model output a hot start file or may have been running steady-state conditions. In these cases, a hot start file can easily be created and exported by the user from the SMS interface. The model requires records for water levels, current velocities, concentrations, and water depths and datasets that are missing from the initial file. | |||
Note: It is important that the names and paths of the initial condition datasets are written correctly. | |||
'''Table 3. Path and name for initial condition file variables.''' | |||
{| class=wikitable border="1" | |||
! Variable !! Path and Name | |||
|- | |||
| Water surface elevation || Datasets\Water_Elevation | |||
|- | |||
| Current velocity || Datasets\Current_Velocity | |||
|- | |||
| Sediment concentrations || Datasets\Concentration | |||
|- | |||
| Salinity concentrations || Datasets\Salinity | |||
|} | |||
<br style="clear:both" /> | |||
One example showing the steps for creating a user-defined hot start or initial condition file from a CMS-Flow solution file is outlined below. | |||
:1. Import CMS-Flow grid and solution file. | |||
:2. Sample a time step of the solution datasets for use in the initial condition | |||
::* Click on ''Data'' | ''Data Set Toolbox'' | |||
:::* Under the ''Tools'' section, select ''Sample time steps''. | |||
:::* Under the ''Datasets'' section, click on the ''Water Elevation'' | |||
:3. Export the initial condition datasets to an XMDF file | |||
More to come about the process above. | |||
[[Image:Hot_Start_Sample.png|thumb|left|500px| Figure 3. Dataset Toolbox showing a time step sample of the water elevation and current velocity datasets for use in a hot start (initial condition) file.]] | |||
[[Image:Hot_Explorting_User_Defined_Arrows.png|thumb|right|500px| Figure 4. Dataset Toolbox showing a time step sample of the water elevation and current velocity datasets for use in a hot start (initial condition) file.]] | |||
<br style="clear:both" /> | |||
= Global Output = | |||
[[image:Output_Tab.png|thumb|right|400px| Figure 1. ''Output'' tab in SMS 11.0 ]] | |||
Global output refers to the variables that are output on every active cell on the grid. The global output options are specified in ''Output'' tab of the ''CMS-Flow Model Control'' window. More information on the global output variables, groups and CMS-Flow cards is provided in the sections below. | |||
<br clear="all"> | |||
== Output Datasets == | |||
A description of the CMS-Flow cards used to specify the global output variable datasets is provided below. | |||
'''Table 4. Output datasets.''' | |||
{| class=wikitable style="text-align: center; border: 1px solid black;" | |||
! Output Dataset !! Group !! Description !! <span style="color: red">Scalar</span>/<span style="color: darkblue">Vector</span> !! Units | |||
|- style="border-bottom: 1px solid red;" | |||
| Water_Elevation || Water surface elevation|| Cell-centered water surface elevation || <span style="color: red">'''Scalar'''</span> || <math>m</math> | |||
|- | |||
| Current_Velocity || Velocity || Depth-averaged and cell-centered current velocity '''Vector''' dataset and with respect to local grid coordinates || <span style="color: darkblue">'''Vector'''</span> || <math>m/s</math> | |||
|- | |||
| Current_Magnitude || Velocity || Depth-averaged and cell-centered current velocity magnitude dataset || <span style="color: red">'''Scalar'''</span> || <math>m/s</math> | |||
|- | |||
| Eddy_Viscosity || Eddy viscosity || Cell-centered horizontal eddy viscosity || <span style="color: red">'''Scalar'''</span> || <math>m^2/s</math> | |||
|- | |||
| Concentration || Sediment|| Depth-averaged and cell-centered sediment concentration || <span style="color: red">'''Scalar'''</span> || <math>kg/m^3</math> | |||
|- | |||
| Capacity || Sediment || Depth-averaged and cell-centered sediment concentration capacity || <span style="color: red">'''Scalar'''</span> || <math>kg/m^3</math> | |||
|- | |||
| Total_Sediment_Transport || Sediment || Depth-averaged and cell-centered total-load sediment transport || <span style="color: darkblue">'''Vector'''</span> || <math>kg/m/s</math> | |||
|- | |||
| Morphology_Change || Morphology || Cell-centered morphology (bed) change. Positive is accretion and negative is erosion || <span style="color: red">'''Scalar'''</span> || <math>m</math> | |||
|- | |||
| Depth || Morphology || Cell-centered still water depth || <span style="color: red">'''Scalar'''</span> || <math>m</math> | |||
|- | |||
| Salinity || Salinity Transport || Depth-averaged and cell-centered sediment concentration capacity || <span style="color: red">'''Scalar'''</span> || <math>ppt</math> | |||
|- | |||
| Wave_Height || Waves || Cell-centered significant wave height || <span style="color: red">'''Scalar'''</span> || <math>m</math> | |||
|- | |||
| Wave_Height_Vec || Waves || Cell-centered significant wave height '''Vector''' || <span style="color: darkblue">'''Vector'''</span> || <math>m</math> | |||
|- | |||
| Wave_Period || Waves || Cell-centered peak wave period || <span style="color: red">'''Scalar'''</span> || <math>s</math> | |||
|- | |||
| Wind_Magnitude || Wind || Cell-centered wind speed || <span style="color: red">'''Scalar'''</span> || <math>m/s</math> | |||
|- | |||
| Wind_Velocity || Wind || Cell-centered wind velocity '''Vector''' dataset with respect to local grid coordinates || <span style="color: darkblue">'''Vector'''</span> || <math>m/s</math> | |||
|- | |||
| Atm_Pressure || Wind || Cell-centered atmospheric pressure || <span style="color: red">'''Scalar'''</span> || <math>Pa</math> | |||
|- | |||
| Atm_Pressure_GradX || Wind || Cell-centered atmospheric pressure gradients in the X direction || <span style="color: red">'''Scalar'''</span> || <math>Pa/m</math> | |||
|- | |||
| Atm_Pressure_GradY || Wind || Cell-centered atmospheric pressure gradients in the Y direction || <span style="color: red">'''Scalar'''</span> || <math>Pa/m</math> | |||
|} | |||
== Output Time Series and Lists == | |||
The times at which each group is output is determined by the selecting one of four user defined output time series or lists. In SMS versions 10.1 and earlier, the output time series were used. However, because the output time series can become very large for long-term simulations, the time series have been replaced by lists in which the output times are specifying a list of starting, ending and increments. This option is more compact and also makes it easier to manually change the output options in the cmcards file. | |||
'''Table 5. Time series and List Cards.''' | |||
{| class=wikitable border="1" | |||
! Card !! Aguments/Format !! Default value !! Description | |||
|- | |||
| TIME_SERIES_1 || [length of list 1] [output times for list 1] || 0 || Output time series for list 1 in hours. | |||
|- | |||
| TIME_SERIES_2 || [length of list 2] [output times for list 2] || 0 || Output time series for list 2 in hours. | |||
|- | |||
| TIME_SERIES_3 || [length of list 3] [output times for list 3] || 0 || Output time series for list 3 in hours. | |||
|- | |||
| TIME_SERIES_4 || [length of list 4] [output times for list 4] || 0 || Output time series for list 4 in hours. | |||
|- | |||
| TIME_LIST_1 || [number of sublists] [sublist 1: start, end, increment] [sublist 2: start, end, increment]...|| 0 || Sublist(s) for output time series 1. For each sublist, the arguments are starting time, end time and increment in hours. | |||
|- | |||
| TIME_LIST_2 || [number of sublist] [sublist 1: start, end, increment] [sublist 2: start, end, increment]...|| 0 || Sublist(s) for output time series 2. For each sublist, the arguments are starting time, end time and increment in hours. | |||
|- | |||
| TIME_LIST_3 || [number of sublist] [sublist 1: start, end, increment] [sublist 2: start, end, increment]...|| 0 || Sublist(s) for output time series 3. For each sublist, the arguments are starting time, end time and increment in hours. | |||
|- | |||
| TIME_LIST_4 || [number of sublist] [sublist 1: start, end, increment] [sublist 2: start, end, increment]...|| 0 || Sublist(s) for output time series 4. For each sublist, the arguments are starting time, end time and increment in hours.. | |||
|} | |||
'''Table 6. Cards used to specify the output time series or list for each output group or dataset.''' | |||
{| class=wikitable border="1" | |||
! Card !! Arguments !! Default value !! Description | |||
|- | |||
| WSE_OUT_TIMES_LIST || INTEGER || 0 || Output time series id for the water surface elevation in m. | |||
|- | |||
| VEL_OUT_TIMES_LIST || INTEGER || 0 || Output time series id for currentvelocity and magnitude in m/s. | |||
|- | |||
| MORPH_OUT_TIMES_LIST || INTEGER || 0 || Output time series id for the water depth and morphology (bed) change in m. | |||
|- | |||
| TRANS_OUT_TIMES_LIST || INTEGER || 0 || Output time series id for sediment transport rates, concentations, and salinity. | |||
|- | |||
| WAVES_OUT_TIMES_LIST || INTEGER || 0 || Output time series id for the wave height in m, period in sec, and wave vectors. | |||
|- | |||
| EDDY_VISCOSITY_OUT_TIMES_LIST || INTEGER || 0 || Output time series id for the eddy viscosity in m^2/s. | |||
|- | |||
| VISC_OUT_TIMES_LIST || INTEGER || 0 || Output time series id for the eddy viscosity in m^2/s. | |||
|- | |||
| WIND_OUT_TIMES_LIST || INTEGER || 0 || Output time series id for wind velocity and magnitude in m/s. | |||
|- | |||
| STRESS_OUT_TIMES_LIST || INTEGER || 0 || Output time series id for mean bed shear stress in Pa. | |||
|- | |||
| WAVE_OUTPUT_DETAILS || ON <nowiki>|</nowiki> OFF || OFF || Outputs additional wave variables including wave direction, radiation stresses, breaking dissipation and roller energy. | |||
|} | |||
== XMDF Output == | |||
The default option in CMS 4.2 and previous was to have all output information stored in one single XMDF file (*_sol.h5). That was fine, but this file could end up being really large and would take a long time to read into the SMS. Starting in CMS version 5.0 and later is to output all output groups to the same individual XMDF files with according to information type (*_wse.h5, *_vel.h5, etc.). | |||
=== Multiple Output Files === | |||
In the recent versions of CMS, all solution output is broken into multiple files. If you want some of the output placed into the same file, you must specify cards in the CMCARDS file to change from the default. The following cards should be Advanced card section of the SMS interface or manually added to the parameter file. | |||
Any of the following cards can be added to put only those datasets into one solution file. Other datasets not specified will still go into separate files. The cards needed are as follows: | |||
WSE_OUT_FILE project_sol.h5 | |||
VEL_OUT_FILE project_sol.h5 | |||
VISC_OUT_FILE project_sol.h5 | |||
TRANS_OUT_FILE project_sol.h5 | |||
MORPH_OUT_FILE project_sol.h5 | |||
WAVES_OUT_FILE project_sol.h5 | |||
WIND_OUT_FILE project_sol.h5 | |||
To put all output into a single file, one simple card can be added (shown below). In SMS 12.3+ (CMS Version 5.1+), a simpler way has been created. There is an option in the interface named 'Use single XMDF solution file (_sol.h5)'. | |||
USE_COMMON_SOLUTION_FILE ON | |||
=== File Compression === | |||
The standard CMS-Flow output is written to an XMDF file with the name <Case Name>_sol.h5. The binary file may be written in compressed format using the card described in the table below. An option exists in the SMS named 'XMDF file compression' that enables this from the interface. | |||
'''Table 7. CMS-Flow card for compressing the XMDF output file''' | |||
{| class=wikitable border="1" | |||
! Card !! Arguments !! Default value !! Description | |||
|- | |||
| XMDF_COMPRESSION || ON <nowiki>|</nowiki> OFF || OFF || Compresses the h5 file by a factor of about 7 | |||
|} | |||
== ASCII Output == | |||
In addition to the XMDF output file, CMS-Flow provides the output two types of ASCII output files: | |||
# Tecplot snap shot (*.dat), and history files (*.his) | |||
# SMS Super ASCII files (*.sup, *.xy, *.dat) | |||
The CMS-Flow cards used for outputting these two types of files are described in the Table below. | |||
'''Table 8. CMS-Flow cards used to output Tecplot and SMS Super ASCII files.''' | |||
{| class=wikitable border="1" | |||
! Card !! Arguments !! Description !! Default value | |||
|- | |||
| GLOBAL_TECPLOT_FILES || ON <nowiki>|</nowiki> OFF || Outputs Tecplot ASCII files || OFF | |||
|- | |||
| GLOBAL_SUPER_FILES || ON <nowiki>|</nowiki> OFF || Outputs general ASCII solution files || OFF | |||
|} | |||
= Statistics = | |||
CMS V4.0 has the option to calculate statistics over the whole model domain for a user-specified time period. This option is accessed using the advanced cardss. The starting time, end time, and time interval should be specified in hours with respect to the model start time. The time interval should be larger or equal to the hydrodynamic time step. When activated the global statistics will be output in the same solution file within a subfolder named ''stats''. | |||
This option outputs the statistics for hydrodynamics, sediment and salinity transport. If only the statistics for one group | |||
* '''Hydrodynamics:''' | |||
:# Maximum current velocity | |||
:# Maximum water level | |||
:# Residual currents (vectors and magnitude) | |||
:# Hydroperiod | |||
:# Maximum spatial gradient for water levels | |||
:# Maximum spatial gradient for current magnitude | |||
* '''Sediment Transport and Morphology Change''': | |||
:# Maximum total load transport rate, m^2/s | |||
:# Net total load sediment transport rates, m^2/s | |||
:# Average total load sediment transport rates, m^2/s | |||
:# Gross total load sediment transport rates, m^2/s | |||
:# Positive and negative total load transport rates (in x and y directions), m^2/s | |||
:# Maximum spatial gradient of bathymetry | |||
* '''Salinity Statistics''': | |||
:# Mean Salinity | |||
'''Table 9. CMS-Flow cards related to output statistics''' | |||
{| class=wikitable border="1" | |||
! Card !! Arguments !! Description !! Default value !! Notes | |||
|- | |||
| GLOBAL_STATISTICS || [t0] [tn] [dt] || Calculates global statistics if specified || none || [start] [end] [increment] | |||
|- | |||
| FLOW_STATISTICS || [t0] [tn] [dt] || Calculates flow statistics if specified || none || [start] [end] [increment] | |||
|- | |||
| SEDIMENT_STATISTICS || [t0] [tn] [dt] || Calculates sediment statistics if specified || none || [start] [end] [increment] | |||
|- | |||
| SALINITY_STATISTICS || [t0] [tn] [dt] || Calculates salinity statistics if specified || none || [start] [end] [increment] | |||
|} | |||
=Numerical Methods= | |||
== Solution Scheme == | |||
This refers to the temporal discritization of the hydrodynamic, sediment and salinity transport equations. There are two options in CMS: | |||
1. Implicit - First order backward Euler scheme. Uses a time step on the order of 5-15 minutes. Appropriate for cases which can be simulated with large computational time steps such as long term morphology change at inlets. | |||
2. Explicit - First order forward Euler scheme. Uses a time step on the order of 0.5-1.0 second. Appropriate for cases that vary quickly in time such as flooding or barrier island breaching. | |||
{| class=wikitable border="1" | |||
! Card !! Arguments !! Default !! Range !! Description | |||
|- | |||
| SOLUTION_SCHEME || CHARACTER || EXPLICIT || EXPLICIT <nowiki>|</nowiki> IMPLICIT || Determines the solution scheme used in CMS-Flow. | |||
|} | |||
== Solver Options == | |||
The four different solvers implemented in the implicit solution scheme are the Gauss-Seidel, Gauss-Seidel with Successive-Over-Relaxation, BICGSTAB, and GMRES. The same solver is applied to flow, sediment and salinity. The default solver is the GMRES. The solver may be changed using the advanced card in the table below. | |||
{| class=wikitable border="1" | |||
! Card !! Arguments !! Default !! Range !! Description | |||
|- | |||
| MATRIX_SOLVER || CHARACTER || GMRES || GAUSS-SEIDEL <nowiki>|</nowiki> GAUSS-SEIDEL-SOR <nowiki>|</nowiki> BICGSTAB <nowiki>|</nowiki> GMRES || Selects the matrix solver for flow, sediment and salinity. | |||
|- | |||
| HYDRO_MAX_ITERATIONS || INTEGER || Function of grid size || >0 || Sets the maximum number of iterations for the flow (hydro) solver (outer loop). Typical range: 30-50 for GAUSS-SEIDEL and GAUSS-SEIDEL-SOR, and 20-30 for BICGSTAB and GMRES. | |||
|- | |||
| PRESSURE_ITERATIONS || INTEGER || Depends on Solver || >0 || Sets the number of solver iterations for the pressure equation (inner loop). Typical range: 80-100 for GAUSS-SEIDEL and GAUSS-SEIDEL-SOR, and 15-25 for BICGSTAB and GMRES. | |||
|- | |||
| VELOCITY_ITERATIONS || INTEGER || Depends on Solver || >0 || Sets the number of solver iterations for the velocity or momentum equations (inner loop). Typical range: 20-30 for GAUSS-SEIDEL and GAUSS-SEIDEL-SOR, and 5-10 for BICGSTAB and GMRES. | |||
|- | |||
| SEDIMENT_MAX_ITERATIONS || integer || 20 || >0 || Maximum number of iterations (outer loop) for the sediment transport | |||
|- | |||
| SALINITY_MAX_ITERATIONS || integer || 20 || >0|| Maximum number of iterations (outer loop) for the salinity transport | |||
|} | |||
== Advection scheme == | |||
As in the case of the implicit solution scheme, the same advection scheme is applied for the flow, sediment and salinity transport equations. There are three choices for advection schemes with upwinding in the implicit model: hybrid, exponential and HLPA. The hybrid scheme is fast but is the most diffusive. The exponential scheme is based on the 1D analytical solution to an advection-diffusion equation and produces very stable results. The HLPA is very stable and non-diffusive, but requires slightly more computational time. For most applications, the exponential scheme is recommended and is set as the default. The advection scheme may be change using the advanced card | |||
'''Table 10. CMS-Flow cards related to numerical methods.''' | |||
{| class=wikitable border="1" | |||
! Card !! Arguments !! Default !! Range !! Description | |||
|- | |||
| ADVECTION_SCHEME || CHARACTER || EXPONENTIAL || NONE <nowiki>|</nowiki> HYBRID <nowiki>|</nowiki> EXPONENTIAL <nowiki>|</nowiki> HLPA || Sets the advection scheme for flow, sediment and salinity. | |||
|} | |||
== Wetting and Drying == | |||
'''Table 11. CMS-Flow cards related to numerical methods.''' | |||
{| class=wikitable border="1" | |||
|- | |||
| DRYING_DEPTH || REAL || Calculated based on solution scheme and courant number || none || Sets to the time step for hydrodynamics in seconds. | |||
|- | |||
| WATER_PONDING || CHARACTER || OFF || ON <nowiki>|</nowiki> OFF || Turns ''On'' or ''Off'' water ponding. If water ponding is ''Off'', isolated bodies of water will become dry. | |||
|- | |||
| ONE_CELL_WIDE_CHANNELS || CHARACTER || ON || ON <nowiki>|</nowiki> OFF|| Limits wetting and drying to areas with at least 3 cells wide. When turned off, the model stability is improved. | |||
|} | |||
== Parallelization with OpenMP == | |||
Both Intel and AMD processors now are shipping chips with multiple cores/processors (henceforth referred to as "processors") available. CMS-Flow is now configured to make use of these extra processes that are available on newer machines. | |||
Additional information on using Multiple Processors with CMS-Flow can be found [[CMS-Flow:Multiple_Processor_Capability|'''here''']]. | |||
'''Table 12. CMS-Flow cards related to numerical methods.''' | |||
{| class=wikitable border="1" style="text-align:center" | |||
! Card !! Arguments !! Default !! Solver Range !! Description | |||
|- | |||
| NUM_THREADS | |||
|| INTEGER || 1 | |||
|width="230px"| '''Explicit''' - 1 to number of threads<br>'''Implicit''' - 1 to 4 | |||
|| Determines the number of threads used for parallel processing. | |||
|} | |||
= Scripting = | |||
Scipting refers to the automation of running multiple CMS runs with different parameters, without manually having to create and edit each alternative. The scripting process can include the following steps: | |||
# Setting up alternatives | |||
# Creating batch file | |||
# Plotting and analyzing results | |||
Scripting can be done using a variety of software programs. The examples shown here were written in Matlab becase it is widely used, easy to read and convenient for plotting and analyzing results. | |||
== Setting Up Alternatives == | |||
[[Image:Scripting_Explorer.png|thumb|right|700px|Figure 1. Example of scripting showing the files used.]] | |||
<br clear="all"> | |||
In this example, 4 cases or alterantives are setup using the Matlab script below. The script copies the base setup files into subfolders and then modifies specific CMS-Flow cards in the *.cmcards file. The settings for each case are setup using a structure variable with field names corresponding to each CMS-Flow card (e.g. TIME_SERIES_INCREMENT). Separating each case into its own subfolder keeps the input and output separate and also allows for the different cases to be run at the same time. | |||
<br style="clear:both" /> | |||
<font size=2> | |||
<font color=green>% Matlab Script: setup_cases.m</font> | |||
clear <font color=magenta>all</font> | |||
flow = <font color=magenta>'Flow_Shark'</font>; | |||
wave = <font color=magenta>'Wave_Shark'</font>; | |||
ncases = 4; <font color=green>%Number of cases or alternatives</font> | |||
r(1).MANNINGS_N_DATASET = <font color=magenta>'"Manning_Alt1.h5" "Flow_Shark/Datasets/ManningsN"'</font>; | |||
r(1).WAVE_CURRENT_MEAN_STRESS = <font color=magenta>'W09'</font>; | |||
r(1).TIME_SERIES_INCREMENT = 1800; | |||
r(2).MANNINGS_N_DATASET = <font color=magenta>'"Manning_Alt1.h5" "Flow_Shark/Datasets/ManningsN"'</font>; | |||
r(2).WAVE_CURRENT_MEAN_STRESS = <font color=magenta>'DATA2'</font>; | |||
r(2).TIME_SERIES_INCREMENT = 900; | |||
r(3).MANNINGS_N_DATASET = <font color=magenta>'"Manning_Alt2.h5" "Flow_Shark/Datasets/ManningsN"'</font>; | |||
r(3).WAVE_CURRENT_MEAN_STRESS = <font color=magenta>'W09'</font>; | |||
r(3).TIME_SERIES_INCREMENT = 900; | |||
r(4).MANNINGS_N_DATASET = <font color=magenta>'"Manning_Alt2.h5" "Flow_Shark/Datasets/ManningsN"'</font>; | |||
r(4).WAVE_CURRENT_MEAN_STRESS = <font color=magenta>'DATA2'</font>; | |||
r(4).TIME_SERIES_INCREMENT = 600; | |||
<font color=blue>for</font> i=1:ncases | |||
d = [<font color=magenta>'Case'</font>,int2str(i)]; | |||
<font color=blue>if</font> ~exist(d,<font color=magenta>'dir'</font>) | |||
mkdir(d) | |||
<font color=blue>end</font> | |||
copyfile([wave,<font color=magenta>'.*'</font>],d) | |||
copyfile([flow,<font color=magenta>'.*'</font>],d) | |||
copyfile([flow,<font color=magenta>'_mp.h5'</font>],d); | |||
copyfile([flow,<font color=magenta>'_grid.h5'</font>],d) | |||
cards = fieldnames(r(i)); | |||
file = [<font color=magenta>'.\'</font>,d,<font color=magenta>'\'</font>,flow,<font color=magenta>'.cmcards'</font>]; | |||
<font color=blue>for</font>k=1:length(cards) | |||
setcard(file,cards{k},r(i).(cards{k})); | |||
<font color=blue>end</font> | |||
<font color=blue>end</font> | |||
<font color=blue>return</font> | |||
</font> | |||
The script above requires the subroutine below. | |||
<font size=2> | |||
<font color=blue>function</font> setcard(cmcardsfile,card,value) | |||
<font color=green>% setcard(file,card,value)</font> | |||
<font color=green>% Overwrites or appends a CMS-Flow card</font> | |||
<font color=green>% in the *.cmcards file</font> | |||
copyfile(cmcardsfile,<font color=magenta>'temp'</font>) | |||
fid=fopen(<font color=magenta>'temp'</font>,<font color=magenta>'r'</font>); | |||
fid2=fopen(cmcardsfile,<font color=magenta>'w'</font>); | |||
nc=length(card); | |||
ok = false(1); | |||
<font color=blue>if </font>~ischar(value) | |||
value = num2str(value); | |||
<font color=blue>end</font> | |||
<font color=blue>while</font> 1 | |||
tline = fgets(fid); | |||
<font color=blue>if</font> ~ischar(tline), <font color=blue>break</font>, <font color=blue>end</font> | |||
<font color=blue>if</font> strncmp(card,tline,nc) | |||
fprintf(fid2,<font color=magenta>'%s %s %s'</font> ,card,value,tline(end)); | |||
ok = true(1); | |||
<font color=blue>continue </font> | |||
<font color=blue>end</font> | |||
nline = length(tline); | |||
<font color=blue>if</font> (~ok && strcmp(tline(1:min(nline,14)),<font color=magenta>'END_PARAMETERS'</font>)) | |||
fprintf(fid2,<font color=magenta>'%s %s %s'</font>,card,value,tline(end)); | |||
fprintf(fid2,<font color=magenta>'%s'</font> ,tline); | |||
<font color=blue>break</font> | |||
<font color=blue>end</font> | |||
fprintf(fid2,<font color=magenta>'%s'</font> ,tline); | |||
<font color=blue>end</font> | |||
fclose(fid); | |||
fclose(fid2); | |||
delete(<font color=magenta>'temp'</font>) | |||
<font color=blue>return</font> | |||
</font> | |||
== Batch File == | |||
Although it is possible to launch CMS from Matlab a batch file is preferable to use a batch file because it allows running all of the cases without opening Matlab. | |||
<font size=2> | |||
<font color=green>% Matlab Script: create_bat.m</font> | |||
cmsexe = <font color=magenta>'cms2d_v4b42_x64p.exe'</font>; <font color=green>%CMS-Flow executable</font> | |||
batfile = <font color=magenta>'run_cases.bat'</font>; <font color=green>%Output batch file</font> | |||
fid = fopen(batfile,<font color=magenta>'w'</font>); | |||
<font color=blue>for</font> i=1:ncases | |||
cmcards = [<font color=magenta>'.\Case'</font>,int2str(i),<font color=magenta>'\'</font>,flow,<font color=magenta>'.cmcards'</font>]; <font color=green>%CMS-Flow cmcards file</font> | |||
fprintf(fid,<font color=magenta>'START %s %s %s'</font>,cmsexe,cmcards,char(10)); | |||
<font color=blue>end</font> | |||
fclose(fid); | |||
<font color=blue>return</font> | |||
</font> | |||
The following text shows what the resulting batch file (*.bat) looks like | |||
<font size=2> | |||
START cms2d_v4b42_x64p.exe .\Case1\Flow_Shark.cmcards | |||
START cms2d_v4b42_x64p.exe .\Case2\Flow_Shark.cmcards | |||
START cms2d_v4b42_x64p.exe .\Case3\Flow_Shark.cmcards | |||
START cms2d_v4b42_x64p.exe .\Case4\Flow_Shark.cmcards | |||
</font> | |||
To run the batch file, simply double click on the file and each case will launch separately in its own MS-DOS window. | |||
== Plotting == | |||
The following example reads the Observation Point time series output file (*_eta.txt) and plots the 3rd | |||
---- | |||
<font size=2> | |||
<font color=green>% Matlab Script: plot_cases.m</font> | |||
close <font color=magenta>all</font> | |||
eta = cell(ncases,1); | |||
<font color=blue>for</font> i=1:ncases | |||
etafile = [<font color=magenta>'.\Case'</font> ,int2str(i),<font color=magenta>'\'</font>,flow,<font color=magenta>'_eta.txt'</font> ]; <font color=green>%Water elevation</font> | |||
eta{i} = load(etafile); | |||
<font color=blue>end</font> | |||
figure | |||
hold on | |||
<font color=blue>for</font> i=1:ncases | |||
h = plot(eta{i}(:,1),eta{i}(:,3),'-'); <font color=green>%3 is the index is the observation point index</font> | |||
<font color=blue>end</font> | |||
ylabel(<font color=magenta>'Water elevation, m'</font>) | |||
xlabel(<font color=magenta>'Elapsed Time, hr'</font>) | |||
<font color=blue>return</font> | |||
</font> | |||
---- | |||
=Units of Measurement= | |||
{| class=wikitable border="1" | |||
! Variable !! Units !! Symbol | |||
|- | |||
| Water Surface Elevation || meters || <math>m</math> | |||
|- | |||
| Current Velocity || meters per second || <math>m/sec</math> | |||
|- | |||
| Flow Rate || cubic meters per second || <math> m^3/sec </math> | |||
|- | |||
| Salinity Concentration || parts per thousand || <math>ppt</math> | |||
|- | |||
| Sediment Concentration || kilogram per meter cubed || <math>kg/m^3</math> | |||
|- | |||
| Sediment Transport || kilogram per meter per second || <math>kg/m/sec</math> | |||
|- | |||
| Bed Shear Stress || kilogram per meter per second squared (Pascals) || <math>Pa</math> | |||
|} | |||
--------------------------------- | |||
[[CMS-Flow]] |
Latest revision as of 14:55, 7 April 2022
Hot Start
The term Hot start refers to starting a simulation with an initial condition other zero (cold start). Hot starts are used for specifying initial conditions or restarting simulations at intermediate times. The hot start controls are set in the Flow tab of the CMS-Flow Model Control window.
Hot Start File
The CMS hot start feature CMS lets the user restart simulations that have been stopped due to electric outages, hardware malfunctions, or model crashes. In the case of a model crash the user, may restart the model using larger solver iterations and/or time steps to stabilize the simulation. The user has the option to specify a hot start output time or an interval for outputting a recurring hot start file. Every time the hot start file is written, it overwrites the previous information. The CMS Hot Start file saves information on the water elevation (pressure), and current velocities. If the sediment transport is active, then the water depth and sediment concentrations are also saved for each size class. Only the very last record of information is preserved (no starting from earlier intervals).
The CMS hot start files are written as binary XMDF files by default. Depending on the type of hot start (single file or recurring), the names are as follows are saved in the directory of the CMS-Flow files:
- SingleHotStart.h5
- AutoHotStart.h5
After saving a CMS Hot Start file, it is a good idea to rename the file with a different name before using it as an initial conditions file. This way, the file will not be overwritten in future simulations.
Table 1. Hot Start CMS-Flow Cards
Card | Arguments | Default | Range | Description |
---|---|---|---|---|
HOT_START_TIME | REAL | none | none | Single time after start at which to output a single hot start file. |
AUTO_HOT_START_INTERVAL | REAL | none | none | Sets the recurring hot start output interval . |
Initial Conditions File
There are several situations where it is desired to specify a user-defined hot start file from which to start a simulation. If the user has previously specified a hot start file be written either at a specific time or at a recurring interval, they can simply indicate to start from that hot start as an initial condition from the SMS interface, or by adding a card to the parameter file. The card name and format are shown below.
Table 2. CMS-Flow card for specifying the initial condition file.
Card | Arguments | Default | Range | Description |
---|---|---|---|---|
INITIAL_STARTUP_FILE | INITIAL_CONDITION_FILE | CHARACTER | none | none | Hot start filename that contains the information for a Hot Start. |
Sometimes, the user may forget to set up the model output a hot start file or may have been running steady-state conditions. In these cases, a hot start file can easily be created and exported by the user from the SMS interface. The model requires records for water levels, current velocities, concentrations, and water depths and datasets that are missing from the initial file.
Note: It is important that the names and paths of the initial condition datasets are written correctly.
Table 3. Path and name for initial condition file variables.
Variable | Path and Name |
---|---|
Water surface elevation | Datasets\Water_Elevation |
Current velocity | Datasets\Current_Velocity |
Sediment concentrations | Datasets\Concentration |
Salinity concentrations | Datasets\Salinity |
One example showing the steps for creating a user-defined hot start or initial condition file from a CMS-Flow solution file is outlined below.
- 1. Import CMS-Flow grid and solution file.
- 2. Sample a time step of the solution datasets for use in the initial condition
- Click on Data | Data Set Toolbox
- Under the Tools section, select Sample time steps.
- Under the Datasets section, click on the Water Elevation
- 3. Export the initial condition datasets to an XMDF file
More to come about the process above.
Global Output
Global output refers to the variables that are output on every active cell on the grid. The global output options are specified in Output tab of the CMS-Flow Model Control window. More information on the global output variables, groups and CMS-Flow cards is provided in the sections below.
Output Datasets
A description of the CMS-Flow cards used to specify the global output variable datasets is provided below.
Table 4. Output datasets.
Output Dataset | Group | Description | Scalar/Vector | Units |
---|---|---|---|---|
Water_Elevation | Water surface elevation | Cell-centered water surface elevation | Scalar | |
Current_Velocity | Velocity | Depth-averaged and cell-centered current velocity Vector dataset and with respect to local grid coordinates | Vector | |
Current_Magnitude | Velocity | Depth-averaged and cell-centered current velocity magnitude dataset | Scalar | |
Eddy_Viscosity | Eddy viscosity | Cell-centered horizontal eddy viscosity | Scalar | |
Concentration | Sediment | Depth-averaged and cell-centered sediment concentration | Scalar | |
Capacity | Sediment | Depth-averaged and cell-centered sediment concentration capacity | Scalar | |
Total_Sediment_Transport | Sediment | Depth-averaged and cell-centered total-load sediment transport | Vector | |
Morphology_Change | Morphology | Cell-centered morphology (bed) change. Positive is accretion and negative is erosion | Scalar | |
Depth | Morphology | Cell-centered still water depth | Scalar | |
Salinity | Salinity Transport | Depth-averaged and cell-centered sediment concentration capacity | Scalar | |
Wave_Height | Waves | Cell-centered significant wave height | Scalar | |
Wave_Height_Vec | Waves | Cell-centered significant wave height Vector | Vector | |
Wave_Period | Waves | Cell-centered peak wave period | Scalar | |
Wind_Magnitude | Wind | Cell-centered wind speed | Scalar | |
Wind_Velocity | Wind | Cell-centered wind velocity Vector dataset with respect to local grid coordinates | Vector | |
Atm_Pressure | Wind | Cell-centered atmospheric pressure | Scalar | |
Atm_Pressure_GradX | Wind | Cell-centered atmospheric pressure gradients in the X direction | Scalar | |
Atm_Pressure_GradY | Wind | Cell-centered atmospheric pressure gradients in the Y direction | Scalar |
Output Time Series and Lists
The times at which each group is output is determined by the selecting one of four user defined output time series or lists. In SMS versions 10.1 and earlier, the output time series were used. However, because the output time series can become very large for long-term simulations, the time series have been replaced by lists in which the output times are specifying a list of starting, ending and increments. This option is more compact and also makes it easier to manually change the output options in the cmcards file.
Table 5. Time series and List Cards.
Card | Aguments/Format | Default value | Description |
---|---|---|---|
TIME_SERIES_1 | [length of list 1] [output times for list 1] | 0 | Output time series for list 1 in hours. |
TIME_SERIES_2 | [length of list 2] [output times for list 2] | 0 | Output time series for list 2 in hours. |
TIME_SERIES_3 | [length of list 3] [output times for list 3] | 0 | Output time series for list 3 in hours. |
TIME_SERIES_4 | [length of list 4] [output times for list 4] | 0 | Output time series for list 4 in hours. |
TIME_LIST_1 | [number of sublists] [sublist 1: start, end, increment] [sublist 2: start, end, increment]... | 0 | Sublist(s) for output time series 1. For each sublist, the arguments are starting time, end time and increment in hours. |
TIME_LIST_2 | [number of sublist] [sublist 1: start, end, increment] [sublist 2: start, end, increment]... | 0 | Sublist(s) for output time series 2. For each sublist, the arguments are starting time, end time and increment in hours. |
TIME_LIST_3 | [number of sublist] [sublist 1: start, end, increment] [sublist 2: start, end, increment]... | 0 | Sublist(s) for output time series 3. For each sublist, the arguments are starting time, end time and increment in hours. |
TIME_LIST_4 | [number of sublist] [sublist 1: start, end, increment] [sublist 2: start, end, increment]... | 0 | Sublist(s) for output time series 4. For each sublist, the arguments are starting time, end time and increment in hours.. |
Table 6. Cards used to specify the output time series or list for each output group or dataset.
Card | Arguments | Default value | Description |
---|---|---|---|
WSE_OUT_TIMES_LIST | INTEGER | 0 | Output time series id for the water surface elevation in m. |
VEL_OUT_TIMES_LIST | INTEGER | 0 | Output time series id for currentvelocity and magnitude in m/s. |
MORPH_OUT_TIMES_LIST | INTEGER | 0 | Output time series id for the water depth and morphology (bed) change in m. |
TRANS_OUT_TIMES_LIST | INTEGER | 0 | Output time series id for sediment transport rates, concentations, and salinity. |
WAVES_OUT_TIMES_LIST | INTEGER | 0 | Output time series id for the wave height in m, period in sec, and wave vectors. |
EDDY_VISCOSITY_OUT_TIMES_LIST | INTEGER | 0 | Output time series id for the eddy viscosity in m^2/s. |
VISC_OUT_TIMES_LIST | INTEGER | 0 | Output time series id for the eddy viscosity in m^2/s. |
WIND_OUT_TIMES_LIST | INTEGER | 0 | Output time series id for wind velocity and magnitude in m/s. |
STRESS_OUT_TIMES_LIST | INTEGER | 0 | Output time series id for mean bed shear stress in Pa. |
WAVE_OUTPUT_DETAILS | ON | OFF | OFF | Outputs additional wave variables including wave direction, radiation stresses, breaking dissipation and roller energy. |
XMDF Output
The default option in CMS 4.2 and previous was to have all output information stored in one single XMDF file (*_sol.h5). That was fine, but this file could end up being really large and would take a long time to read into the SMS. Starting in CMS version 5.0 and later is to output all output groups to the same individual XMDF files with according to information type (*_wse.h5, *_vel.h5, etc.).
Multiple Output Files
In the recent versions of CMS, all solution output is broken into multiple files. If you want some of the output placed into the same file, you must specify cards in the CMCARDS file to change from the default. The following cards should be Advanced card section of the SMS interface or manually added to the parameter file.
Any of the following cards can be added to put only those datasets into one solution file. Other datasets not specified will still go into separate files. The cards needed are as follows:
WSE_OUT_FILE project_sol.h5 VEL_OUT_FILE project_sol.h5 VISC_OUT_FILE project_sol.h5 TRANS_OUT_FILE project_sol.h5 MORPH_OUT_FILE project_sol.h5 WAVES_OUT_FILE project_sol.h5 WIND_OUT_FILE project_sol.h5
To put all output into a single file, one simple card can be added (shown below). In SMS 12.3+ (CMS Version 5.1+), a simpler way has been created. There is an option in the interface named 'Use single XMDF solution file (_sol.h5)'.
USE_COMMON_SOLUTION_FILE ON
File Compression
The standard CMS-Flow output is written to an XMDF file with the name <Case Name>_sol.h5. The binary file may be written in compressed format using the card described in the table below. An option exists in the SMS named 'XMDF file compression' that enables this from the interface.
Table 7. CMS-Flow card for compressing the XMDF output file
Card | Arguments | Default value | Description |
---|---|---|---|
XMDF_COMPRESSION | ON | OFF | OFF | Compresses the h5 file by a factor of about 7 |
ASCII Output
In addition to the XMDF output file, CMS-Flow provides the output two types of ASCII output files:
- Tecplot snap shot (*.dat), and history files (*.his)
- SMS Super ASCII files (*.sup, *.xy, *.dat)
The CMS-Flow cards used for outputting these two types of files are described in the Table below.
Table 8. CMS-Flow cards used to output Tecplot and SMS Super ASCII files.
Card | Arguments | Description | Default value |
---|---|---|---|
GLOBAL_TECPLOT_FILES | ON | OFF | Outputs Tecplot ASCII files | OFF |
GLOBAL_SUPER_FILES | ON | OFF | Outputs general ASCII solution files | OFF |
Statistics
CMS V4.0 has the option to calculate statistics over the whole model domain for a user-specified time period. This option is accessed using the advanced cardss. The starting time, end time, and time interval should be specified in hours with respect to the model start time. The time interval should be larger or equal to the hydrodynamic time step. When activated the global statistics will be output in the same solution file within a subfolder named stats.
This option outputs the statistics for hydrodynamics, sediment and salinity transport. If only the statistics for one group
- Hydrodynamics:
- Maximum current velocity
- Maximum water level
- Residual currents (vectors and magnitude)
- Hydroperiod
- Maximum spatial gradient for water levels
- Maximum spatial gradient for current magnitude
- Sediment Transport and Morphology Change:
- Maximum total load transport rate, m^2/s
- Net total load sediment transport rates, m^2/s
- Average total load sediment transport rates, m^2/s
- Gross total load sediment transport rates, m^2/s
- Positive and negative total load transport rates (in x and y directions), m^2/s
- Maximum spatial gradient of bathymetry
- Salinity Statistics:
- Mean Salinity
Table 9. CMS-Flow cards related to output statistics
Card | Arguments | Description | Default value | Notes |
---|---|---|---|---|
GLOBAL_STATISTICS | [t0] [tn] [dt] | Calculates global statistics if specified | none | [start] [end] [increment] |
FLOW_STATISTICS | [t0] [tn] [dt] | Calculates flow statistics if specified | none | [start] [end] [increment] |
SEDIMENT_STATISTICS | [t0] [tn] [dt] | Calculates sediment statistics if specified | none | [start] [end] [increment] |
SALINITY_STATISTICS | [t0] [tn] [dt] | Calculates salinity statistics if specified | none | [start] [end] [increment] |
Numerical Methods
Solution Scheme
This refers to the temporal discritization of the hydrodynamic, sediment and salinity transport equations. There are two options in CMS: 1. Implicit - First order backward Euler scheme. Uses a time step on the order of 5-15 minutes. Appropriate for cases which can be simulated with large computational time steps such as long term morphology change at inlets. 2. Explicit - First order forward Euler scheme. Uses a time step on the order of 0.5-1.0 second. Appropriate for cases that vary quickly in time such as flooding or barrier island breaching.
Card | Arguments | Default | Range | Description |
---|---|---|---|---|
SOLUTION_SCHEME | CHARACTER | EXPLICIT | EXPLICIT | IMPLICIT | Determines the solution scheme used in CMS-Flow. |
Solver Options
The four different solvers implemented in the implicit solution scheme are the Gauss-Seidel, Gauss-Seidel with Successive-Over-Relaxation, BICGSTAB, and GMRES. The same solver is applied to flow, sediment and salinity. The default solver is the GMRES. The solver may be changed using the advanced card in the table below.
Card | Arguments | Default | Range | Description |
---|---|---|---|---|
MATRIX_SOLVER | CHARACTER | GMRES | GAUSS-SEIDEL | GAUSS-SEIDEL-SOR | BICGSTAB | GMRES | Selects the matrix solver for flow, sediment and salinity. |
HYDRO_MAX_ITERATIONS | INTEGER | Function of grid size | >0 | Sets the maximum number of iterations for the flow (hydro) solver (outer loop). Typical range: 30-50 for GAUSS-SEIDEL and GAUSS-SEIDEL-SOR, and 20-30 for BICGSTAB and GMRES. |
PRESSURE_ITERATIONS | INTEGER | Depends on Solver | >0 | Sets the number of solver iterations for the pressure equation (inner loop). Typical range: 80-100 for GAUSS-SEIDEL and GAUSS-SEIDEL-SOR, and 15-25 for BICGSTAB and GMRES. |
VELOCITY_ITERATIONS | INTEGER | Depends on Solver | >0 | Sets the number of solver iterations for the velocity or momentum equations (inner loop). Typical range: 20-30 for GAUSS-SEIDEL and GAUSS-SEIDEL-SOR, and 5-10 for BICGSTAB and GMRES. |
SEDIMENT_MAX_ITERATIONS | integer | 20 | >0 | Maximum number of iterations (outer loop) for the sediment transport |
SALINITY_MAX_ITERATIONS | integer | 20 | >0 | Maximum number of iterations (outer loop) for the salinity transport |
Advection scheme
As in the case of the implicit solution scheme, the same advection scheme is applied for the flow, sediment and salinity transport equations. There are three choices for advection schemes with upwinding in the implicit model: hybrid, exponential and HLPA. The hybrid scheme is fast but is the most diffusive. The exponential scheme is based on the 1D analytical solution to an advection-diffusion equation and produces very stable results. The HLPA is very stable and non-diffusive, but requires slightly more computational time. For most applications, the exponential scheme is recommended and is set as the default. The advection scheme may be change using the advanced card
Table 10. CMS-Flow cards related to numerical methods.
Card | Arguments | Default | Range | Description |
---|---|---|---|---|
ADVECTION_SCHEME | CHARACTER | EXPONENTIAL | NONE | HYBRID | EXPONENTIAL | HLPA | Sets the advection scheme for flow, sediment and salinity. |
Wetting and Drying
Table 11. CMS-Flow cards related to numerical methods.
DRYING_DEPTH | REAL | Calculated based on solution scheme and courant number | none | Sets to the time step for hydrodynamics in seconds. |
WATER_PONDING | CHARACTER | OFF | ON | OFF | Turns On or Off water ponding. If water ponding is Off, isolated bodies of water will become dry. |
ONE_CELL_WIDE_CHANNELS | CHARACTER | ON | ON | OFF | Limits wetting and drying to areas with at least 3 cells wide. When turned off, the model stability is improved. |
Parallelization with OpenMP
Both Intel and AMD processors now are shipping chips with multiple cores/processors (henceforth referred to as "processors") available. CMS-Flow is now configured to make use of these extra processes that are available on newer machines.
Additional information on using Multiple Processors with CMS-Flow can be found here.
Table 12. CMS-Flow cards related to numerical methods.
Card | Arguments | Default | Solver Range | Description |
---|---|---|---|---|
NUM_THREADS | INTEGER | 1 | Explicit - 1 to number of threads Implicit - 1 to 4 |
Determines the number of threads used for parallel processing. |
Scripting
Scipting refers to the automation of running multiple CMS runs with different parameters, without manually having to create and edit each alternative. The scripting process can include the following steps:
- Setting up alternatives
- Creating batch file
- Plotting and analyzing results
Scripting can be done using a variety of software programs. The examples shown here were written in Matlab becase it is widely used, easy to read and convenient for plotting and analyzing results.
Setting Up Alternatives
In this example, 4 cases or alterantives are setup using the Matlab script below. The script copies the base setup files into subfolders and then modifies specific CMS-Flow cards in the *.cmcards file. The settings for each case are setup using a structure variable with field names corresponding to each CMS-Flow card (e.g. TIME_SERIES_INCREMENT). Separating each case into its own subfolder keeps the input and output separate and also allows for the different cases to be run at the same time.
% Matlab Script: setup_cases.m clear all flow = 'Flow_Shark'; wave = 'Wave_Shark'; ncases = 4; %Number of cases or alternatives r(1).MANNINGS_N_DATASET = '"Manning_Alt1.h5" "Flow_Shark/Datasets/ManningsN"'; r(1).WAVE_CURRENT_MEAN_STRESS = 'W09'; r(1).TIME_SERIES_INCREMENT = 1800; r(2).MANNINGS_N_DATASET = '"Manning_Alt1.h5" "Flow_Shark/Datasets/ManningsN"'; r(2).WAVE_CURRENT_MEAN_STRESS = 'DATA2'; r(2).TIME_SERIES_INCREMENT = 900; r(3).MANNINGS_N_DATASET = '"Manning_Alt2.h5" "Flow_Shark/Datasets/ManningsN"'; r(3).WAVE_CURRENT_MEAN_STRESS = 'W09'; r(3).TIME_SERIES_INCREMENT = 900; r(4).MANNINGS_N_DATASET = '"Manning_Alt2.h5" "Flow_Shark/Datasets/ManningsN"'; r(4).WAVE_CURRENT_MEAN_STRESS = 'DATA2'; r(4).TIME_SERIES_INCREMENT = 600; for i=1:ncases d = ['Case',int2str(i)]; if ~exist(d,'dir') mkdir(d) end copyfile([wave,'.*'],d) copyfile([flow,'.*'],d) copyfile([flow,'_mp.h5'],d); copyfile([flow,'_grid.h5'],d) cards = fieldnames(r(i)); file = ['.\',d,'\',flow,'.cmcards']; fork=1:length(cards) setcard(file,cards{k},r(i).(cards{k})); end end return
The script above requires the subroutine below.
function setcard(cmcardsfile,card,value) % setcard(file,card,value) % Overwrites or appends a CMS-Flow card % in the *.cmcards file copyfile(cmcardsfile,'temp') fid=fopen('temp','r'); fid2=fopen(cmcardsfile,'w'); nc=length(card); ok = false(1); if ~ischar(value) value = num2str(value); end while 1 tline = fgets(fid); if ~ischar(tline), break, end if strncmp(card,tline,nc) fprintf(fid2,'%s %s %s' ,card,value,tline(end)); ok = true(1); continue end nline = length(tline); if (~ok && strcmp(tline(1:min(nline,14)),'END_PARAMETERS')) fprintf(fid2,'%s %s %s',card,value,tline(end)); fprintf(fid2,'%s' ,tline); break end fprintf(fid2,'%s' ,tline); end fclose(fid); fclose(fid2); delete('temp') return
Batch File
Although it is possible to launch CMS from Matlab a batch file is preferable to use a batch file because it allows running all of the cases without opening Matlab.
% Matlab Script: create_bat.m cmsexe = 'cms2d_v4b42_x64p.exe'; %CMS-Flow executable batfile = 'run_cases.bat'; %Output batch file fid = fopen(batfile,'w'); for i=1:ncases cmcards = ['.\Case',int2str(i),'\',flow,'.cmcards']; %CMS-Flow cmcards file fprintf(fid,'START %s %s %s',cmsexe,cmcards,char(10)); end fclose(fid); return
The following text shows what the resulting batch file (*.bat) looks like
START cms2d_v4b42_x64p.exe .\Case1\Flow_Shark.cmcards START cms2d_v4b42_x64p.exe .\Case2\Flow_Shark.cmcards START cms2d_v4b42_x64p.exe .\Case3\Flow_Shark.cmcards START cms2d_v4b42_x64p.exe .\Case4\Flow_Shark.cmcards
To run the batch file, simply double click on the file and each case will launch separately in its own MS-DOS window.
Plotting
The following example reads the Observation Point time series output file (*_eta.txt) and plots the 3rd
% Matlab Script: plot_cases.m close all eta = cell(ncases,1); for i=1:ncases etafile = ['.\Case' ,int2str(i),'\',flow,'_eta.txt' ]; %Water elevation eta{i} = load(etafile); end figure hold on for i=1:ncases h = plot(eta{i}(:,1),eta{i}(:,3),'-'); %3 is the index is the observation point index end ylabel('Water elevation, m') xlabel('Elapsed Time, hr') return
Units of Measurement
Variable | Units | Symbol |
---|---|---|
Water Surface Elevation | meters | |
Current Velocity | meters per second | |
Flow Rate | cubic meters per second | |
Salinity Concentration | parts per thousand | |
Sediment Concentration | kilogram per meter cubed | |
Sediment Transport | kilogram per meter per second | |
Bed Shear Stress | kilogram per meter per second squared (Pascals) |