VE-Suite Documentation


2011.01.04


Table of Contents

Introduction to VE-Suite
I. User's Guide
1. Installation and Setup
Support
Windows Installation
Unix Installation
Macintosh OS Installation
Setting the Runtime Environment
Setting Menus, Icons, and Filetypes on Linux
2. Starting VE-Suite
Starting VE-Suite
3. Creating Content in VE-Suite
Loading Data and Connecting
Geometry In Depth
Loading Objects and Assemblies
Transforming Geometric Objects
Toggling Geometric Objects
Materials and Shaders
Coloring Geometric Objects
Using Assemblies
Navigation
Xplorer Window
Navigation Pane
Wands
Keyboard/Mouse Navigation Scheme
Viewpoints Pane
Xplorer Displays
Quitting VE-Suite
4. Using Physics in VE-Suite
Working with an Example
Creating Physics Data Step by Step
5. Manipulation Tools
Using Manipulation Tools in VE-Suite
6. GIS Tools
Using GIS Tools in VE-Suite
7. Ephemeris Tools
Using Ephemeris Tools in VE-Suite
8. Visualizations
Setup
Datasets
Using Visualizations
Scalar Contours
Vectors
Streamlines
Isosurfaces
Texture-Based Datasets
Polydata
9. Troubleshooting Guide
Launching
Tracking
Sync
Flex Configurations
General VE-Suite Help
II. CAVE Tools
10. Design Review Tool
Overview
Using the Virtual Camera
Using the CAD Selection Tool
Using the Virtual Pointer
11. Vehicle Design Review Tools
Dynamic Vehicle Simulator Tool
Configuring the Simulator
Configuring the Graphics
Registration Tools
Using the Registration Tools
III. Developer Information
12. Code Guidelines
Introduction
Names
Class Names
Function Names
Variable Names
Classes
Functions
Function Arguments
Variables
Namespace
Headers
Logic Style
Const
#include organization
Conditionals
Type Casting
Assertions
Switch Statements
goto Statements
Globals and Statics
Preprocessor Macros
Compiler and Linker Warnings
Array Indexing
Parens () with Keywords and Function Policy
Comment Format
Braces
Text Formatting
Comments
DocBook Documentation
Typefaces
Referring to VE-Suite's Versions
13. Building VE-Suite
UNIX/Linux Build Instructions
Windows Build Instructions
Building VE-Suite
Debugging VE-Xplorer
Running VE-Suite from a CD
14. Launcher
Introduction
Starting VE-Launcher
Setting VE-Launcher's Dependencies
The Basics
Launcher Menus
Mode Settings
Edit Configuration List
Unix Clusters
Windows Clusters
VE-Launcher Command Line Arguments
Example
15. VE-Builder
Introduction
Launching VE-Builder
Importing Files
Importing from StarCD
Preparing the StarCD files
Converting from StarCD to .vtu
Importing from Fluent (.avs)
Converting from Fluent (.cas) to .vtu
Displaying FEA Data
Creating Preprocessed Data
Specify Cutting Planes in a .txt File
Creating Texture-Based Datasets
Building Files from StarCD
16. Dependencies
Development Dependency Guidelines
Building Dependencies on Windows
VE-Suite Component Dependencies
Other Requirements
17. Setting the Environment
18. Description of the Engines
Graphical User Interface (VE-Conductor)
Multi-Platform Support
Detachable/Location Transparency
Extensibility
Unified Control
Computational Engine (VE-CE)
Plant Configuration
Data Handling
Error Handling
Relationship to Detachable UI
Scheduling
Relationship to Models
Graphical Engine (VE-Xplorer)
19. Software Development Documents
20. Software Development Tools
21. Testing Matrix
Installation/Download
VE-Launcher
Conductor
VE-Xplorer
VE-Builder
22. VE-Suite Beginner's Guide
Getting Started
23. Documentation Notes
Ground Rules
24. Using Doxygen
Download/Install
Generate Documentation
Web References
25. DocBook Information
Using DocBook and XMLmind
IV. Other Tools
26. Using Okino's Polytrans Software
Translating with Modeling in Pro/E
Assembly-level cuts
Family tables
Coloration
Missing parts
Importing hoses and cables
Translating with Bentley Software
Translating with AutoCAD Software
Translating with JT Files
Translating with 3DS/Max Files
27. Running VE-Suite from the Command Line
Xplorer from the Command Line
28. Using VE-PSI
A. Object-Centered Engineering
Introduction
Implementing Object-Centered Engineering in VE-Suite
VE-Conductor
VE-CE
Computational Unit
B. Quickstart Guide
Getting Started with VE-Suite
Loading Data and Connecting

List of Figures

8.1. Transform the geometry file's dimensions
8.2. Selecting a dataset
14.1. Click the Edit Configuration List button [RUN VE-SUITE TO CHECK THIS]
14.2. Example (a)
14.3. Example (b)
14.4. Example (c)
14.5. Example (d)
14.6. Example (e)
14.7. Example (f)
14.8. Example (g)
14.9. Example (h)
18.1. Two-dimensional GUI
28.1. Aspen operation name
28.2. Parameters dialog
28.3. Parameters dialog: inputs
28.4. Parameters dialog: results

List of Tables

3.1. Axes
3.2. Modifier Keys
3.3. Keyboard Commands
3.4. Mouse Commands
3.5. Keyboard Commands
3.6. Mouse Commands
4.1. Keyboard Commands
4.2. Mouse Commands
8.1. Required filetypes
16.1. Component Dependencies
21.1. All Directories Extracted Correctly
21.2. Initialization
21.3. Desktop Shortcuts
21.4. Configurations
21.5. Launching
21.6. Shutting Down VE-Suite
21.7. Initial Material
21.8. CAD (Geom Config Dialog)
21.9. Dataset (Dataset Dialog)
21.10. Navigation
21.11. Record Scene
21.12. Attributes
21.13. Viewpoints
21.14. User Preferences (these are accessed by going to the File menu, then selecting Preferences, then Xplorer Settings)
21.15. Simple Dataset (located at $INSTALL_DIR/share/vesuite/examples/simple)
21.16. Texture Based Datasets
21.17. Engine (located at /home/vr/Applications/TSVEG/Test_Data/EngineTest)
21.18. Simple Datasets (located at /home/vr/Applications/TSVEG/Test_Data)
21.19. Builder Utilities

Introduction to VE-Suite

VE-Suite is an open source virtual engineering software toolkit. The toolkit enables the user to simultaneously interact with engineering analyses and graphical models to create a virtual decision-making environment.

In nearly all aspects of the engineering process-design, manufacturing, and maintenance-the tools employed at each phase rely on virtual models (e.g., software tools) to reduce cost and shorten development time. This results in a wider variety of software tools being used across a wide range of vendors and engineering firms. In this environment, engineers are required to manually move information from one software package to another. Thus, the process does not support real-time, collaborative design in which the engineer establishes the dynamic thinking process needed to obtain an intuitive feel for the performance of a product. It also does not permit the real-time exploration of questions raised by other engineers, designers, or managers. This working arrangement significantly lessens the number of alternatives that can be investigated, limits the essential creative design process, and discourages "what if" questions that allow breakthroughs in design. The result of this situation is that the engineer ends up shifting his or her focus from engineering to manual integration of information. To allow engineers to focus on engineering, a new workflow and paradigm is needed. This new workflow is described within a new enabling technology called virtual engineering and is implemented via VE-Suite. Using VE-Suite to implement virtual engineering reduces the design cycle time to allow new technologies to reach production and operation more quickly than previously possible.

Engineering tools and information need to be integrated throughout each engineering project. That is, information from the design phase needs to be available to design and manufacturing contractors without manual reentry or other hassles. Currently, for a variety of reasons (e.g., budgetary constraints, inter-company politics), no commercial software package has the capability to integrate information from the complete product design team from economists and numerical modelers to design and manufacturing firms. VE-Suite addresses this constraint by creating a tool with open interfaces that allows other commercial and open-source packages to exchange data in a comprehensive design environment. In this environment, all the data and tools necessary to make a particular engineering decision are available to the stakeholder trying to move the engineering process forward.

VE-Suite is intended to be used in the engineering process, whether for business model investigation or training. VE-Suite is used in a diverse set of engineering applications to allow engineers and other project stakeholders to gain insight into complex engineering problems.

Part I. User's Guide

Chapter 1. Installation and Setup

Support

Support is provided at the following locations:

Installation of VE-Suite is fairly straightforward. Visit the Downloads section and locate your operating system.

Windows: Two installers are provided for Windows. Each installer will guide you through the process of selecting various options. One installer, vesuite#.#.#_####.exe, contains the core VE-Suite binaries and .dll files. The dependencies installer, vesuite_deps#.#.#.exe, contains the binaries and .dll files of VE-Suite's dependencies, arranged to include bin, lib, and share subdirectories.

Unix: A tar.gz file of the current release of VE-Suite is provided. You can extract the VE-Suite.#.#.# directory from it. Instead of one central dependencies directory, we provide the dependencies' rpm files. Be sure to install the necessary dependencies before running VE-Suite.

Macintosh: One installer is provided for Macintosh OS: VE-Suite Installer 20xx-xx-xx.pkg. It contains the core VE-Sute binaries and .dll files as well as the binaries and .dll files of VE-Suite's dependencies.

Windows Installation

Installing VE-Suite and its dependencies follows the same procedures as other installations. The user chooses which components to install, their locations, their Start Menu folder, and whether to add an icon to the desktop.

One important consideration is which components to install. In large setups, certain computers will run the NameServer while others will handle VE-Conductor and VE-Xplorer. To run VE-Suite on a single desktop, leave all of the checkboxes checked to install everything.

Go through the same process for VE-Suite's dependencies.

Unix Installation

On Unix, the installers are compressed tar.gz files. Open them using these commands:

  • Using GNU tar: gtar xvzf vesuite_#.#.#_RHEL_4.tar.gz

  • Using gzip: gunzip < vesuite_#.#.#_RHEL_4.tar.gz | tar xvf –

NOTE: These examples use vesuite_#.#.# as a general placeholder for any version of VE-Suite. Be sure to change the version number to the specific version you are installing.

Macintosh OS Installation

One installer is provided for Macintosh OS. Just double-click the install file to run it and follow the directions.

Setting the Runtime Environment

In previous versions, VE-Suite's runtime environment was set through text scripts. Now it uses VE-Launcher to set up the environment. Most of it is automated, but you should be aware of two important variables it sets: VE-Suite's directory and VE-Suite's dependencies directory.

VE-Launcher automatically determines VE-Suite's directory from the current working directory. Moving VE-Launcher out of VE-Suite's directory or starting it from a different directory will pass the wrong value to VE-Suite, causing errors.

On Windows and UNIX/Linux, the dependencies directory needs to be set manually. The first time you start VE-Launcher, you will be asked to find the dependencies directory. On Windows, the dependencies directory is VE_Suite.#.#.#_Dependencies.

On UNIX/Linux, multiple dependencies can be chosen. The only one that needs to be specifically selected is VR Juggler's directory.

If you are upgrading from an earlier version of VE-Suite, the dependencies' directories can be changed by selecting the dependency and clicking the Delete button, or clicking the Add button and selecting a new directory.

On Macintosh OS, the dependencies directory does not need to be manually set. The first time you start VE-Launcher, it is already set.

Setting Menus, Icons, and Filetypes on Linux

VE-Suite comes with a vesuiteConfig.sh script to set up menus, icons, and filetypes for VE-Suite on Linux desktop systems. The script works for Gnome 2.8+ and KDE.

To run it, go to its directory and enter ./vesuiteConfig.sh, followed by the arguments. The script accepts these arguments:

  1. --gnome or --kde: Sets Gnome or KDE as a primary desktop. If you do not provide either argument, Gnome will be chosen as the default primary desktop.

  2. --both: Installs on both Gnome and KDE. --gnome or --kde still needs to be provided to set the primary desktop, because on most dual-desktop systems, one desktop inherits some preferences from the other.

  3. --user or --global: Sets the installations to either user-only or all-users. If you do not provide either argument, all-users will be chosen if you have root access. Otherwise, only the current user (user-only) is chosen.

  4. --uninstall: Uninstalls the setup defined by the other arguments on the command line. For example, --gnome --global --uninstall would uninstall the setup created by providing --gnome --global.

Chapter 2. Starting VE-Suite

Table of Contents

Starting VE-Suite

VE-Suite contains three programs that users can run:

  • Name Service, which allows users to connect to the computational engine (VE-CE)

  • VE-Conductor, which provides the controls

  • VE-Xplorer, which displays the scene

All three can be launched from VE-Launcher in a synchronized manner to make running VE-Suite easier for the user.

Starting VE-Suite

VE-Launcher is the gateway to VE-Suite. To open VE-Launcher, Windows users can double-click on the VE-Suite desktop icon or on velauncher.exe in the VE-Suite/bin directory. UNIX/Linux users should navigate by terminal into VE-Suite’s /bin directory and enter python velauncher.py.

If this is the first time VE-Launcher has been run after installation, you will be asked for the dependencies directory (see Chapter 1.5, Setting the Runtime Environment) before you are shown the main window.

VE-Launcher's more advanced commands are discussed in Chapter 12, Launcher. For now, make sure Desktop Mode is selected and click the Launch button. VE-Launcher will launch the Name Service, VE-Conductor, and VE-Xplorer in Desktop Mode.

For more information about VE-Launcher, read Chapter 12.

Chapter 3. Creating Content in VE-Suite

Loading Data and Connecting

VE-Suite loads objects through plugins. This section describes how to load a geometry file through a plugin. Other data files may be loaded in the same manner.

Plugins are set up through the Available Objects window. Click on the New Document button to make sure the design space is clear.

To create a new plugin, double-click on the DefaultPlugin directory, which is in the Available Plugins directory in the VE-Conductor Network window.

Right-click on the gray DefaultPlugin box that appears in the pane on the right side of the window to access the plugin's menu, and select the Geometry Config option.

A new window, the CADTree Manager, will open. This holds the objects that are inserted into the plugin. To select a geometry file, right-click on the Model_Geometry icon and select Add Node..., then Load CAD file...

In the dialog box that opens, choose the appropriate file type, then select the file (e.g., Surface0.75.stl) and click the Open button. Name the object you loaded, then click the OK button to insert it into the plugin. Click Close on the CADTree Manager.

To load the information for the plugin's node into the rest of VE-Suite, click on the Connection menu and select Submit Job. The starting logo in Xplorer should be replaced by the objects in the plugins you submitted.

If the object is not initially visible in the Xplorer window, it may be outside the viewing region. Hold down the right mouse button and drag up in the Xplorer window to pull back the camera. Continue doing so until the scene is visible in the Xplorer window.

Geometry In Depth

In addition to allowing users to load multiple geometry objects, VE-Suite also allows objects to be transformed, shaded, and textured.

Loading Objects and Assemblies

To load multiple geometry objects in VE-Suite, continue adding CAD file nodes in the same way that you loaded a single CAD file.

If you want to load multiple instances of the same object, its CAD file can be loaded multiple times. However, that wastes memory. A better way to load multiple instances of the same object is to load the object into the scene one time, then clone the other instances from it to save memory. To clone an object, right-click on it and select Clone Node…

New assemblies can also be created for grouping geometry objects. Right-click the appropriate assembly, then select Add Node..., then Create New Assembly...

To quickly populate an assembly, the entire geometry object tree can be loaded from another project. First, select the appropriate geometry tree in the CADTree Manger, then click the Save As... button to save it as a .veg file.

Next, open the geometry tree where the first geometry tree is to be moved, right-click the assembly where it is to be moved, then select Add Node, then Load VEG file.

For more information about tranlating CAD data into a format that VE-Suite can read, see Chapter 26, Using Okino's Polytrans Software.

Transforming Geometric Objects

Geometric objects can be moved, rotated, and scaled in the scene by using the Transformation dialog. To open the Transformation dialog, open the CADTree Manager, right-click on the object to be transformed, and select Properties. This will open the CAD Properties window. The Transformation dialog is the first tab in the CAD Properties window.

When you edit the Transform properties, the scene is updated in real time. Once the object's size and placement are satisfactory, click OK.

An assembly's transform properties can also be edited, but keep in mind that an assembly’s transformation also affects its members. See the Chapter 3.2.1, Loading Objects and Assemblies, for more information on assemblies.

Toggling Geometric Objects

You can toggle the visibility of geometric objects on and off. To do so, right-click the object in the CADTree Manager and select Toggle Node, then On or Off.

Materials and Shaders

You can apply custom materials and shaders to geometric objects. Right-click the object and select Properties. When the CAD Properties window opens, select the Attributes tab. Choose Materials or Shaders, then click Add....

If you choose Materials, you will be asked to name the material. Once it is in the list, you can apply it to the object by left-clicking it. To change a material's properties, right-click its name. A menu will appear with options to change its lighting, shininess, opacity, and how the lighting and material are applied to the object.

If you choose Shaders, you will be asked to load a shader . Example shaders can be found in the VE-Suite_x.x.x\share\vesuite\shaders directory. You can apply a shader by clicking on its name, the clicking the Open button.

A material and a shader cannot both be added to an object at the same time. To remove a material or shader from an object, click Restore Defaults. To remove a material or shader from the Available Attributes list, select its name and click the Remove... button.

Coloring Geometric Objects

The geometry's color is determined by its Material attribute. To change the Material attribute, open the geometry's Properties, go to the Attributes tab, and right-click the Material attribute to be changed.

In a Windows color dialog box, color can be chosen from the Basic colors palette, or the color map and luminosity slider can help you create custom colors. Custom colors do not need to be added to the Custom colors palette. They will be forgotten once the dialog is closed.

When creating a custom color, make sure to check the luminosity slider as well as the Color/Solid preview box next to the Hue/Sat/Lum values. The color will appear as black or white if the luminosity slider is set too high or too low.

Click OK to set the new color.

In a non-Windows color dialog box, a color can be chosen from the Palette, or the color ring and triangle can be used to create a custom color. The bar below the color ring shows the current color on the left and the new color on the right.

To make a custom color, choose its hue by clicking in the color ring, then choose its saturation and value by clicking in the color triangle. Click OK to set the new color.

Using Assemblies

Assemblies group geometric objects together so they can all be modified at once. An assembly's properties are passed to its members and can change its members in the following ways:

  • Transformation: Member translations are relative to their assembly's axes, not the world's axes. Member scalings are relative to their assembly's scalings (e.g., if you double the scale of a member whose assembly is already double-scaled, the member will be scaled to four times the original size). Assemblies rotate around the assembly's origin point, not members' origin points.

  • Materials and Shaders: Materials and shaders applied to assemblies are applied to its members. If a member is assigned a material or shader as well, the member's material or shader overrides its assembly's material or shader.

  • Toggle node: Toggling an assembly Off hides all of its members. Toggling an assembly On shows any members that are toggled On. If a member is toggled Off, togging its assembly On will not reveal that member.

Navigation

There are two ways to manipulate VE-Suite's view using just the mouse: dragging in the Xplorer window itself or using the Navigation Pane. A RemotePoint RF wand can also be used to navigate VE-Suite.

Xplorer Window

A three-button mouse will enable a user to do every translation and rotation within the Xplorer window itself.

To rotate the scene, drag along the screen while holding the left button. To rotate along the X- and Z-axes, drag in the center of the screen. To rotate along the Y-axis, drag along the border of the screen.

The right mouse button handles Y-axis translations. Hold the right button and drag the mouse up or down to push the scene away or pull it closer.

The mouse wheel button handles the other translations. Hold it down to drag the scene left, right, up, or down across the screen.

NOTE: Returning to the original orientation after rotating the scene may be difficult. This is because the mouse controls rotate around an arbitrary axis that allows rotation in all three dimensions, but it can be difficult to return to a previous orientation. To return to a standard orientation, select the View submenu under the VE-Xplorer menu, then click on either Reset or Frame All.

Navigation Pane

To open the Navigation Pane, select it from the VE-Xplorer menu.

Experiment with the movement buttons (the ones with arrows on them) to see how they change the scene. Note that they move the camera, not the object. Clicking the X-axis button, for example, will move the camera left, making the object shift right.

Most of the other controls modify how the movement buttons act:

  • The Step Size sliders control the speed of translations and rotations. The farther to the right they are, the faster translations and rotations occur.

  • The Rotate About Users Head checkbox controls how the camera reacts to Yaw Rotation commands. If it is checked, the camera rotates in place. If it is not, the camera rotates around the environment center, like roll and pitch rotations.

  • The Rest Nav Position button resets the camera to its initial position.

  • The Lower Limit checkbox sets whether movement in the z-direction can be negative.

  • The Store Start Position button allows an initial position to be stored for the model.

Wands

With the proper Juggler configuration, wands can be used to navigate VE-Suite. Once the wand is set up, pressing the Nav button and holding the wand moves you in that direction. Holding down the Left Shoulder button and pointing to the left will rotate the camera to its left.

Keyboard/Mouse Navigation Scheme

A keyboard/mouse navigation scheme can also be used to navigate in VE-Suite.

Table 3.1. Axes

x-axisleft to right
y-axisnear to far
z-axisbottom to top

Table 3.2. Modifier Keys

NoneYes
ShiftYes
CtrlNo
AltNo

Trackball Mode:

Table 3.3. Keyboard Commands

RReset the center point and camera transform
FFrame all geometry within the current viewing frustum
Anot currently used
Snot currently used
Wnot currently used
Dnot currently used
Cnot currently used
Space Barnot currently used
KSkyCam() function
Up ArrowPositive zoom in the yz-axes 45 degrees
Down ArrowNegative zoom in the yz-axes 45 degrees
Left ArrowNegative pan in the x-axis
Right ArrowPositive pan in the x-axis

Table 3.4. Mouse Commands

Left mouse button - mod:noneRotate about the xz-axes
Left mouse button - mod:none; on edges of windowTwist about the y-axis
Middle mouse button - Scroll Upnot currently used
Middle mouse buttonPan in the xz-axes
Middle mouse button - Scroll Downnot currently used
Right mouse buttonZoom in/out along the y-axis

Character Mode (1st- and 3rd-person views):

Table 3.5. Keyboard Commands

AStrafe left
SWalk/Run backward
WWalk/Run forward
DStrafe right
CFly down (not implemented)
Space BarJump/Fly up (not implemented)

Table 3.6. Mouse Commands

Left mouse buttonRotate the camera about the xz-axes
Left mouse button - mod:shiftPhysics picking using Bullet p2p constraint
Middle mouse button - Scroll UpZoom in to the character
Middle mouse buttonnot currently used
Middle mouse button - Scroll DownZoom out from the character
Right mouse buttonRotate the camera and the character about the xz-axes

Viewpoints Pane

To store multiple viewpoints and switch between them, use the Viewpoints Pane under the VE-Xplorer menu.

When the Viewpoints Pane starts, no viewpoints are loaded. As the user adds them to the pane, they appear in the Move to a Viewpoint dropdown menu, which can be used to select the viewpoint the user wants to switch to.

To add a viewpoint, position the camera the way you want it in the viewpoint, then click the Add Location button. The viewpoint will be added to the dropdown menu.

Viewpoints can be deleted by clicking the Delete Location(s) button, selecting the appropriate viewpoint from the window that opens, and clicking OK.

Once a viewpoint is added, the stored_viewpts_flythroughs.vel file in the working directory is updated. It is automatically updated when a viewpoint is added or deleted. Saved viewpoints can be restored later by clicking the Load button.

To move to a viewpoint, select it from the dropdown menu in the Flythrough Control section of the Viewpoints Pane. The camera will fly to that viewpoint at the speed set in the speed scroller.

Viewpoints can also be cycled through a flythrough. Click on the Start button below Automate Flythrough to begin a flythrough between each viewpoint in successive order. The flythrough will start at the first viewpoint, then hit each successive viewpoint, going at the speed specified by the speed scroller. When it reaches the last viewpoint, it will go back to the first one and repeat the flythrough. To stop the flythrough at any time, click the Stop button.

Xplorer Displays

A frames-per-second (FPS) counter and a coordinate compass can be displayed in the VE-Xplorer window.

To display the FPS counter, go to the VE-Xplorer menu and select Display, then Frame Rate. VE-Xplorer will display the FPS in the lower right corner of its window.

To display the coordinate compass, go to the VE-Xplorer menu and select Display, then Coord System. VE-Xplorer will display the coordinate compass in the upper left corner of its window.

Quitting VE-Suite

Ending a VE-Suite session requires two steps:

  1. Select Quit from VE-Conductor's File menu. This quits VE-Conductor and VE-Xplorer.

  2. Select the shell window running the Name Server. Click the Shutdown Name Server button or press Ctrl+C to close the program.

Chapter 4. Using Physics in VE-Suite

Working with an Example

VE-Suite's physics functionality makes representations of interactions in VE-Suite more realistic.

To use VE-Suite's physics functionality, start VE-Suite as described in Chapter 3, Creating Content in VE-Suite. In VE-Conductor, go to the File menu and click Open ...

Navigate to the directory where your file is located and, in Files of Type, select *.ves. Select the appropriate file (to demonstrate the physics functionality, we use simple_physics_boxes.ves, which is located in the share/vesuite/examples/simple directory) and click Open.

The visualization will open in the VE-Xplorer window. Use the Frame All and other keyboard and mouse commands to change the view (see Chapter 3.3 for navigation instructions).

For each new file that is loaded in VE-Suite, the physics must be enabled. To do this, right-click on the plugin and click on Enable Physics.

The physics functionality must also be turned on in VE-Conductor. To do this, click on the Physics On/Off button in the VE-Conductor toolbar.

In addition to the Physics On/Off button, there are five more buttons in the Conductor toolbar that can be used to manipulate a visualization. The Start Simulation button starts the simulation.

The toolbar also allows you to view the simulation step by step rather than all at once. To view one step of the simulation at a time, click the Step Simulation button.

To reset the simulation to its original position, click the Reset Simulation button.

When running longer simulations, you might want to pause the simulation while it is running. To do so, click the Pause Simulation button.

The physics capability in VE-Suite also includes a Character Controller. To demonstrate the Character Controller, we will use the character_demo.ves file (also located in the share/vesuite/examples/simple directory).

After loading the character_demo.ves file, click on the Character Controller button in Conductor.

Use the Frame All and other keyboard and mouse commands to change the view (see Chapter 3.3 for navigation instructions).

The tables below provide keyboard and mouse commands for interacting with the visualization in character mode.

Table 4.1. Keyboard Commands

AStrafe left
SWalk/Run backward
WWalk/Run forward
DStrafe right
CFly down (not implemented)
Space BarJump/Fly up (not implemented)


Table 4.2. Mouse Commands

Left mouse buttonRotate the camera about the xz-axes
Left mouse button - mod:shiftPhysics picking using Bullet p2p constraint
Middle mouse button - Scroll UpZoom in to the character
Middle mouse buttonnot currently used
Middle mouse button - Scroll DownZoom out from the character
Right mouse buttonRotate the camera and the character about the xz-axes


Creating Physics Data Step by Step

This section will describe how to create physics data in VE-Suite using a simple example.

First, load simple.ves in the same way you loaded simple_physics_boxes.ves in the previous section of this chapter. Right-click on DefaultPlugin in the VE-Conductor Network window and click on Geometry Config. This will open the CADTree Manager.

Expand the Model_Geometry tree by clicking on the arrow. In this example, you should see three nodes: eightCorners, Surface0.75, and Surface0.75_cloned. Each node corresponds to a different part of the visualization: eightCorners corresponds to the bounding box, while Surface0.75 and Surface0.75_cloned each correponds to one of the white polygonal objects.

Initialize physics on a node by right-clicking on it and selecting Initialize Physics. The CADTree Manager will open. Click on the Physics tab to set the Physics Properties (Mass, Friction, Restitution), Motion Type, LOD Type, Mesh Type, and Mesh Decimation). Each node must be initialized before physics can be run.

Once you have initialized physics, the Initialize Physics option will no longer be available when you right-click on a node. To edit the physics properties of a node, right-click and select Properties... This will open the CADTree Manager with the Physics tab, where you can edit your previously set physics properties.

Note: You must reset the simulation before editing a node's physics properties.

Initializing physics on a node also enables you to pick up individual parts of a visualization and move them. Simply hold down the Shift key and left-click on the object to drag it within the plane of the screen.

Chapter 5. Manipulation Tools

Using Manipulation Tools in VE-Suite

To use VE-Suite's manipulation tools, load your ves file and click the Transform Manipulator On/Off button in the toolbar. The four manipulation mode buttons will be activated. To select a manipulator, point it. When it turns yellow, click on it. The manipulator modes are described below.

  1. Translate Manipulator Mode

    Allows planar manipulation in the XY plane (blue planar manipulator), YZ plane (red planar manipulator), or XZ plane (green planar manipulator), or in the view plane (white circular manipulator)

  2. Rotate Manipulator Mode

    Allows rotation around the X axis (red axial manipulator), Y axis (green axial manipulator), Z axis (blue axial manipulator), or around the view plane (white circular manipulator)

  3. Scale Manipulator Mode

    This mode is not currently implemented, but in the future it will allow scaling of objects

  4. Combo Manipulator Mode

    Displays both translation and rotation manipulators

Chapter 6. GIS Tools

Using GIS Tools in VE-Suite

To use VE-Suite's GIS tools:

  1. Load a .ves file

  2. In the VE-Xplorer menu, point to GIS

  3. To add a planet, click Add Planet

  4. To remove a planet, click Remove Planet

  5. To add layers to a planet, click Configure Layers

    1. To add a layer from a file, click Add file... and select the appropriate file

    2. To add a layer from WMS, click Add From WMS...

      1. Enter the Server, Layers, and Styles

      2. Select the appropriate image format

      3. If you would like the layer to be transparent, check the box next to Transparent

      4. Click OK

    3. To remove a layer, select the appropriate layer and click Remove

    4. When you are finished configuring layers, click OK

A visualization's latitude and longitude can also be changed in VE-Suite. In the CADTree Manager, right-click on the appropriate node and click Properties...

In the CAD Properties window, select the Geographic tab, enter the appropriate longitude and latitude, and click OK. You can also enter a location in the text box and click Geocode to have VE-Suite automatically find the longitude and latitude data.

Chapter 7. Ephemeris Tools

Using Ephemeris Tools in VE-Suite

To use VE-Suite's ephemeris tools:

  1. Load your visualization

  2. In the VE-Xplorer menu, click Ephemeris Data

  3. In the Date and Time tab, select the correct date and time and ensure that the box next to Display Ephemeris Data is checked

  4. In the Latitude and Longitude tab, set the location by setting the latitude and longitude or by loading a location

  5. To save a location:

    1. Set the longitude and latitude

    2. Click Save location

    3. Enter the new locations' name and click OK. That location will now be available to load in the future.

Chapter 8. Visualizations

This chapter describes how to make visualizations using the VE-Suite toolkit and a sample dataset. To follow this example, download and unzip the PrISUm car dataset: PrISUm.zip (57MB).

Setup

Although visualizations only require a dataset file (which models the technical data), users may want to add a geometry file to the scene to view the physical object as well. Once the scene is set, visualization can be used to analyze the data. This chapter uses the PrISUm car example to demonstrate visualization.

Load the geometry file. To do this, open VE-Launcher and set the Working Directory to the project's PrISUm directory. Next, use VE-Launcher to open VE-Suite in Desktop Mode. Load the geometry file, PrISUmblend.obj.

Keep the CADTree Manager open. Right-click on the Model_Geometry directory and choose Properties. A CAD Properties window will open. This can be used to transform the file's dimensions. To fit PrISUm's geometry file with its dataset file, set the following values in the Transform tab:

Figure 8.1. Transform the geometry file's dimensions

Transform the geometry file's dimensions

Once the parameters are entered, close the CAD Properties and CADTree Manager window. Next, you will need to load the datasets, the primary files for visualization.

Datasets

The dataset contains the technical data about the model, such as pressure and airflow. Visualization turns that data into a map for easier viewing. Datasets are loaded similar to the geometry configuration file.

This figure shows the dialog box for loading datasets:

Figure 8.2. Selecting a dataset

Selecting a dataset

The following matrix outlines which filetypes are required for each type of dataset:

Table 8.1. Required filetypes

FiletypeRequired files, column ARequired files, column B
VTK  
StarCD*.param*.cel, *.vrt, *.usr
EnSight*.case*.flo, variable name
MFIX*.mfix 
Fluent*.cas*.dat
AVS*.avs 
Dicom*.dcm 

The required files in column A reference the required files in column B. All files in columns A and B are required for loading the filetype in that row.

To load a dataset in VE-Suite, right-click on the gray plugin box and click on Data Set Config.

Click Add Dataset to create a new dataset and name it, then click Open under DataSet Filename and choose your dataset file (in this case, prisum.vtk). If you are just loading the PrISUm dataset, nothing else needs to be loaded, so click OK to load the dataset.

If you need to load more information, you can do so through other fields. The Precomputed Data Directory and Surface Data Directory fields take data files created by the VE-Builder preprocessor to speed up calculations. The Volumetric Data Directories field takes texture-based data files.

NOTE: VE-Suite expects each type of precomputed data to be stored in a separate folder. Storing all of the precomputed data in one folder, or storing any of it in the Working Directory, will cause problems in the dataset.

Finally, the dataset may need to be transformed to match up with the geometry data. The Transform button brings up a Transformation window, like the one used to transform the geometry data.

The dataset does not need to be adjusted because the geometry objects were adjusted to fit it, so the Transform Input Window can be closed.

Once the dataset files have been selected, click OK in the DataSetLoader window, then choose Submit Job from the Connection menu to display the PrISUm car. Use the navigation pane, the mouse, or the VE-Xplorer-->View-->Frame All command to adjust the camera until the view is satisfactory.

Using Visualizations

To use visualizations, go to the File menu in VE-Conductor, click Open, and select the appropriate .ves file. You might need to clear the design space by clicking on the New button in VE-Conductor.

NOTE: Make sure to save your work before clearning the design space.

To bring up the visualization interface, right-click on the plugin to access the menu and select Visualization. The Visualization window will open.

Scalar Contours

In the Visualization window, click on the Scalar Contours button to bring up the Contours interface.

Set the direction (x, y, z, or By Wand) and choose the appropriate settings for Multiple Planes and Single Plane. Set the plane's position either using the text box or the slider.

Click the Advanced... button to set further controls, including:

  • Warped Contour Scale opacity

  • Contour LOD detail level

  • Contour Type

  • Warp Option, if applicable

Click Close when you are finished setting the advanced controls.

When you are finished making the appropriate settings, click the Add Plane button, or click Close to go back to the Visualization interface.

Vectors

In the Visualization window, click the Vectors button to bring up the Vectors interface.

Set the direction (x, y, z, By Wand, or All) and choose the appropriate settings for Multiple Planes and Single Plane. Select Use GPU Tools if applicable. Set the plane's position either using the text box or the slider.

Click the Advanced... button to set further controls, including:

  • Vector Threshold

  • Vector Scale

  • Vector Ratio

  • Scale by Vector Magnitude, if applicable

Click Close when you are finished setting the advanced controls.

When you are finished making the appropriate settings, click the Add Plane button, or click Close to go back to the Visualization interface.

Streamlines

To show streamlines, click the Streamlines button in the Visualization interface. Set the integration direction and enable GPU tools if necessary.

Click the Seed Points button to set seed point controls (X bounds, Y bounds, and Z bounds; X-Plane, Y-Plane, and Z-Plane). Click Close when you are finished setting seed point controls.

Click the Advanced... button to set further controls, including:

  • Propogation Time

  • Integration Step size

  • Sphere/Arrow/Particle Size

  • Line Diameter

  • Fade Time

  • Animation Speed

You can also use the checkboxes to use the last seed point, stream arrows or ribbon, or animate particles. Click Close when you are finished setting the advanced controls.

When you are finished making the appropriate settings, click the Compute Streamline button, or click Close to go back to the Visualization interface.

Isosurfaces

To show isosurfaces, click the Isosurfaces button in the Visualization interface. Set the isosurfaces pressure.

Click the Advanced... button to set further controls, including:

  • Scalar to Color Isosurface

  • Scalar Range

Click Close when you are finished setting the advanced controls.

When you are finished making the appropriate settings, click the Compute Isosurface button, or click Close to go back to the Visualization interface.

Texture-Based Datasets

Texture-based data can be viewed by clicking the Texture Based button in the Visualization interface. The Texture-Based Tools interface offers the following options:

  • Scalar Data Tools: In the Scalar Tools window, set the type of scalar, number of slice planes, isosurface, and scalar range. Click Enable Isosurface if applicable and set the range. The Advanced... isosurface button is currently disabled.

  • Vector Data Tools: There is currently no data available to use with these tools.

  • Edit Region of Interest: In the Volume Clipping Bounds interface, set X Bounds, Y Bounds, and Z Bounds.

  • Edit Transfer Functions: In the Transfer Functions interface, set the Base Look-Up Table and select Enable Phong Shading if applicable.

  • Transient: From the Transient Controls interface, you can play or stop the time steps or go forward or backward one frame at a time.

Click OK to go back to the Visualization interface.

Polydata

Polydata can be viewed by clicking on the Polydata button in the Visualization interface. In the Polydata interface, you can:

  • Select Use Warped Surface if applicable

  • Set the Scale Factor

  • Select Use GPU Tools and Two Sided Lighting if applicable

  • Set the level of Scalar Control

  • Set the Opacity

Click the Advanced... button to select the scalar to color polydata, and click OK to save your setting or Cancel to go back to the Polydata interface without changing the setting.

When you are finished making the appropriate settings, click the Update button, or click Close to go back to the Visualization interface.

Chapter 9. Troubleshooting Guide

Launching

  1. VE-Conductor comes up but I don't see graphics on any of the displays.

    1. Ensure that you correctly entered your password, when prompted, after launching on the master node.

    2. Ensure that Xplorer is selected on the Custom page of VE-Launcher.

    3. Ensure that "Cluster" is selected on the Custom page of VE-Launcher in the Xplorer Mode box.

    4. Ensure that all of the nodes launched. If you see any errors in the Conductor log stating "Unable to connect to VES Server" , one or more of the nodes did not connect properly. Kill all project_tao_osg_vep processes on all nodes and restart velauncher.py.

    5. Ensure that the correct IP addresses are listed on the Cluster Nodes dialog of VE-Launcher. Also ensure that the correct name is listed for the master (cavehead) in the MASTER field of the Cluster Nodes dialog.

  2. I see the error message "Error: can't open display on device":

    1. Issue the xhost + command on all the nodes of the cluster. For example, from the command line type ssh drone1, then type xhost + (Note the space between xhost and +)

    2. Ensure that you have read permissions on the graphics card by typing ls -ltr /dev/nvidia*. If you do not have read permissions, ask the system admininstrator to enable read permissions.

  3. I see the error message "Could not connect to the Name Server..."

    1. Ensure that the correct IP address is listed on the CE name of the VE-Launcher dialog (currently 10.10.20.241)

  4. velauncher.py is not available in my shell

    1. This probably means that the environment for your account has not been setup properly. Ask the system admininstrator to check the configuration of the user account environment.

Tracking

  1. I don't see the head and the wand on the display of the master window

    1. Ensure that the Intersense tracker base station is turned on. In the cave, you should see blue light flashing on the above fixtures as you move the tracked glasses and/or the wand around.

    2. Ensure that trackd is NOT running. Check your processes to see if trackd is listed by typing ps -ef |grep trackd. If you see it running, try to kill the process by typing killall trackd. If trackd is still running, ask the system administrator to issue the killall trackd command.

    3. Ensure that you have read permissions on the tracking device by typing ls -ltr /dev/ttyS2. If you do not have permission, ask the system administrator to change the permissions on the device: chmod 777 /dev/ttyS2

  2. I see the head and wand models in the display of the master, but the graphics are not responding to my movements.

    1. Ensure that the wand and head tracking power switches are turned on. You should see a green light.

    2. Ensure that the devices are in range, indicated by the orange light on each device.

  3. My wand navigation is too slow/fast.

    1. Change the translation and/or rotation step size on the Navigation pane on VE-Condutor. From the VE-Conductor menu, go to the VE-Xplorer menu and select Navigation Pane. Adjust the Translation and/or Rotation Step size slider(s) until the desired navigation speeds are achieved.

  4. Rotations are around an arbitrary axis.

    1. Change the rotations to be about the user's head. On the VE-Conductor main menu, go to the VE-Xplorer menu and select the Navigation pane. Ensure that the check box marked Rotate About User's Head is checked.

Sync

  1. My visualizations are not synced across walls of the cave.

    1. Have the system administrator ensure that frame locking is enabled in the nvidia-settings panel.

  2. My logo animation is frozen until I mouse over the display on the master node.

    1. Frame locking is not set up properly. Ensure that the master node is NOT listed in the list of nodes to be frame locked.

Flex Configurations

  1. Objects are skewed on the left and right wall.

    1. Make sure you are using the proper configuration files for your configuration. Currently there are three config files: acenet_closed_tracked, acenet_45_tracked, and acenet_3_wide_tracked. These are the configuration files for running your cave in a specific instance: with the cave closed (acenet_closed_tracked), open to 45 degrees (acenet_45_tracked), and fully open (acenet_3_wide_tracked). The files are located at /opt/vesuite/ in directories acenet_configs/ (closed), acenet_configs_45 (open 45 degrees) and acenet_configs_3_wide (fully open).

General VE-Suite Help

Part II. CAVE Tools

Chapter 10. Design Review Tool

Overview

NOTE: This tool can only be used in a CAVE.

The Design Review Tool is a collection of features that facilitate capturing design suggestions during the review process and enable users to interrogate the product under review.

The Design Review Tool allows a user to:

  • Capture an image of the user's current view. This is essentially a virtual camera that is tied to the user's head position.

  • Toggle parts of the CAD model on and off.

  • Add a pointer to the scene to highlight a specific area of interest.

Using the Virtual Camera

The virtual camera allows you to take a picture of a scene. To turn on the virutal camera:

  • Turn on the Camera Manager

  • Turn on Picture Mode

  • Turn off the Camera Window

To change the resolution of the image that is taken as well as the size of your view angle, select the appropriate resolution on the Aspect Ratio choice dialog on the Camera tab.

Ensure that the Auto Computer Near/Far Plane is selected to ensure that you are capturing the image you intend to.

Use Button 1 to take your picture. When you press Button 1, the view frustum is displayed. The picture is taken when you release Button 1.

Choose the the appropriate image directory to save the image.

Using the CAD Selection Tool

The ability to turn components on and off is controlled through the Conductor preferences pane, The CAD Selection check box is located under the Xplorer Settings tab. You should no longer be required to check and uncheck this box whenever you launch VE-Suite. The preferences should now be sent on the fly when VE-Suite is launched.

Button 0 toggles the selected CAD off.

Button 4 toggles the previously selected CAD back on.

Using the Virtual Pointer

To use the Virtual Pointer, go to the Xplorer menu, choose Devices, and select Pointer. This will display an arrow that is tied to the configured device VESPointer.

Chapter 11. Vehicle Design Review Tools

NOTE: These tools can only be used in a CAVE.

Dynamic Vehicle Simulator Tool

The Dynamic Vehicle Simulator Tool is a plugin to VE-Xplorer and VE-Conductor that enables mapping global positioning data to user-selected CAD.

Configuring the Simulator

Coming soon

Configuring the Graphics

Coming Soon

Registration Tools

The Registration Tools enable users to position a vehicle buck in a tracked environment for the purpose of registering a digital CAD representation of the vehicle buck to the physical buck.

Information users should know before using the Registration Tools:

  1. The CAD should be pointed forward in the environment. NOTE: This is only applicable if the user is not going to also use the Dynamic Vehicle Simulator Tool.

  2. The CAD needs to be scaled to feet.

  3. The tracking markers only need to be present on the buck during the registration process. Once the buck is registered, the markers can be removed and used for other purposes.

  4. The Seat Index Position (SIP) measurement is the distance from the origin of the CAD model to the SIP in the model. The coordinate system for this measurement is Y toward the front of the vehicle, X to the right of the vehicle, and Z to the top of the vehicle. This is typically measured in a CAD package or in a review tool like TeamCenter.

    Example code for the tracking marker configuration file:

    # The measurements are in mm

    # The coords are x to the rear, y up, z to the left

    # The order is Front, Left Rear, Right Rear

    VJHead -1048.1 686.8 13.3

    VJWand 597.8 792.5 421.4

    VESPointer 600.9 792.4 -421.4

Using the Registration Tools

Follow these steps to use the Registration Tools:

  1. Place the tracking markers in the appropriate locations on the vehicle buck.

  2. Update the tracking marker configuration file with the measured data for the location of the tracking markers to the SIP.

  3. Update the tracking marker configuration file with the bird locations on the buck as follows:

    1. The first listed marker is the front of the buck

    2. The second listed marker is the left rear of the buck

    3. The third listed marker is the right rear of the buck

  4. Load the CAD and position and scale it appropriately based on the assumptions listed above.

  5. Choose the file button and select the tracking marker configuration file.

  6. Press the registration button.

At this point, the CAD should be aligned with the vehicle buck.

Part III. Developer Information

Table of Contents

12. Code Guidelines
Introduction
Names
Class Names
Function Names
Variable Names
Classes
Functions
Function Arguments
Variables
Namespace
Headers
Logic Style
Const
#include organization
Conditionals
Type Casting
Assertions
Switch Statements
goto Statements
Globals and Statics
Preprocessor Macros
Compiler and Linker Warnings
Array Indexing
Parens () with Keywords and Function Policy
Comment Format
Braces
Text Formatting
Comments
DocBook Documentation
Typefaces
Referring to VE-Suite's Versions
13. Building VE-Suite
UNIX/Linux Build Instructions
Windows Build Instructions
Building VE-Suite
Debugging VE-Xplorer
Running VE-Suite from a CD
14. Launcher
Introduction
Starting VE-Launcher
Setting VE-Launcher's Dependencies
The Basics
Launcher Menus
Mode Settings
Edit Configuration List
Unix Clusters
Windows Clusters
VE-Launcher Command Line Arguments
Example
15. VE-Builder
Introduction
Launching VE-Builder
Importing Files
Importing from StarCD
Preparing the StarCD files
Converting from StarCD to .vtu
Importing from Fluent (.avs)
Converting from Fluent (.cas) to .vtu
Displaying FEA Data
Creating Preprocessed Data
Specify Cutting Planes in a .txt File
Creating Texture-Based Datasets
Building Files from StarCD
16. Dependencies
Development Dependency Guidelines
Building Dependencies on Windows
VE-Suite Component Dependencies
Other Requirements
17. Setting the Environment
18. Description of the Engines
Graphical User Interface (VE-Conductor)
Multi-Platform Support
Detachable/Location Transparency
Extensibility
Unified Control
Computational Engine (VE-CE)
Plant Configuration
Data Handling
Error Handling
Relationship to Detachable UI
Scheduling
Relationship to Models
Graphical Engine (VE-Xplorer)
19. Software Development Documents
20. Software Development Tools
21. Testing Matrix
Installation/Download
VE-Launcher
Conductor
VE-Xplorer
VE-Builder
22. VE-Suite Beginner's Guide
Getting Started
23. Documentation Notes
Ground Rules
24. Using Doxygen
Download/Install
Generate Documentation
Web References
25. DocBook Information
Using DocBook and XMLmind

Chapter 12. Code Guidelines

Introduction

There is an inherent trade-off between robust, readable code and optimum performance. These coding conventions are designed to maximize code robustness and readability, possibly at the expense of optimal performance.

Names

This section contains general rules that apply to class, variable, function, and namespace names.

Select names that are clear and easy to understand. Keep in mind that your code will likely be viewed and maintained by several developers after you leave the project.

Use standard or commonplace acronyms. For example, CreateOSGCamera() is an acceptable name for a function that creates an OpenSceneGraph Camera object. Using highly descriptive names can help tremendously. Names like CheckForErrors and DumpDataToFile are much more descriptive than ErrorCheck or DataFile. In the second case one may need to check the implementation of the function to be confident in knowing exactly what it means.

When the name includes a natural abbreviation such as OpenGL, keep the abbreviation and capitalize the abbreviated letters. Never create new acronyms or abbreviations. For example, name a function SetRasterFontRange() instead of SetRFR().

Use only alphanumeric characters in names (A-Z, a-z, 0-9). For example, name a variable exteriorSurface rather than exterior_Surface.

Use underscores only as follows:

  • As part of any local variable names (e.g., my_var)

  • Embedded in C Preprocessor macro and identifier names (e.g., DEGREES_TO_RADIANS())

  • For use in member variable names.

Use capitalization to indicate words within a name (CamelCase). For example, you could call a class VectorTopologyFilter.

Use the keyword "this" inside of methods even though C++ does not require you to. This really seems to make the code more readable because it disambiguates between instance variables and local or global variables. It also disambiguates between member functions and other functions.

Class Names

Class names are nouns and usually start with "cfd" and follow the CamelCase convention.

A class name should reflect what the class is. Do not tag the derived type onto the class. It should be able to stand on its own or be properly reflected in the namespace it resides. All classes should be declared (and defined) within an appropriate namespace. Never place publicly accessible classes in the global namespace.

Function Names

Function names are verbs (e.g., SetRasterFontRange), start with a capital letter, and follow the CamelCase convention.

Use common suffixes and prefixes to make the project's code more cohesive. For example, some common prefixes may be Is, Get, or Set. When overriding a base class member function declared as virtual, declare the derived class member function virtual as well to avoid confusion.

Variable Names

Variable names are nouns and should begin iwth a lower case character. Words should be separated by an underscore. Variables should be declared where they are first used.

Member variable names should use the prefix m_ (lower-case m). A lower-case letter should follow the underscors. An example of a valid member variable name is m_viewMatrix. If it is a static variable then use the prefix s (lower-case s).

Never use single character variable names. A lower-case I variable (i.e., i) is often mistaken for the numeral one (1) or the lower-case letter L (l). Single-character variable names also inhibit quick text searches. Consider using a more descriptive name for array index variables, such as index rather than i.

Classes

Only one public class is allowed per file. Every class name, macro, etc. starts with either cfd or CFD to avoid name clashes with other libraries. Classes should all start with cfd and macros. Constants can start with either. Class names and file names are the same (e.g., cfdContours class is declared in cfdContours.h and implemented in cfdContours.cpp). This makes it easier to find the correct file for a specific class. Similarly, .cxx and .h file pairs should declare and define only one public class.

Declare classes in header (.h) files. Define all member functions in source (.cxx) files. Never place source code in header files, which prevents other developers from easily finding the source code.

Do not nest classes within other classes. It is difficult to move a nested class out of the owning class at a future date because all code using the fully qualified nested class name must be fixed. Nesting classes also causes them to be more difficult to locate.

Each class must support a copy constructor and an operator=() member function.

When declaring a class intended for use as a base class, declare the destructor as virtual to ensure that derived class destructors execute. This helps guard against memory leaks in derived classes.

When the base class has a virtual destructor, derived classes should also declare their destructors as virtual.

Functions

Always declare a function return type. Never allow the computer to default to type int.

Use const on any member function that does not change any data. It enforces the purpose of a function and allows for better compiler optimizations.

When overriding a base class member function declared as virtual, declare the derived class member function virtual as well to avoid confusion.

If a class implementation needs a local function, include that function in the class declaration as protected or private. Avoid declaring the function locally in the implementation, which limits code reusability. If the local function could be generalized consider making or adding it to a small utility library.

Function Arguments

Function argument names are nouns and should begin with a lower case character and then follow the CamelCase convention. Try to always use two words to describe the argument (e.g., tmpValue).

Always declare function arguments as const if the function does not change their value.

If a function does not take arguments, place the left and right parentheses adjacent to each other in both the function declaration and definition. Do not use the keyword void to indicate that there are no parameters.

Always name a parameter. For example:

// Use this:

void SetFoo( int tmpValue )

// Do not use this:

//void SetFoo( int )

Variables

Always initialize member variables in the constructor. All instance variables are declared as protected. The user and application developer should access instance variables through Set/Get methods.

Declare variables where they are first used. C++ lifted this restriction from C for a reason. It makes code more modular and easier to understand, modify, and debug.

Always declare member variables as protected or private. Add public accessor methods to allow external access to the member variable. Initialize all member variables in the class constructor. Make sure to include the unit the variable represents as a suffix.

Namespace

Never place a using statement at global scope in a header file. This pollutes the namespace of any code that includes that header, and can cause runtime issues and invisible conflicts that are difficult to debug and hard to track. Restrict using statements to implementation files (if at all).

Always use the fully qualified name for methods outside of the class, so for standard namespace keywords (cout, cin, cerr, endl, vector, string), you must std::cout, etc. Alternately, use using for specific functions or variables rather than global namespace inclusion. For example, if you only require the string class from the std namespace and it will appear frequently, use using std::string; instead of using std;

Headers

Header files are for declarations only. It is difficult to read and find code if source is in the declarations.

The header file of the class should include only the superclass header file. If you need any other include statements, add comments at each one describing why it should be included.

Forward declare classes when possible to avoid including unnecessary header files in a class header file.

Never place a using statement in a header file. This pollutes the namespace of any code that includes that header, and can cause runtime issues that are difficult to debug. Restrict using statements to implementation files.

Header files should use guards to prevent multiple inclusion. These guards should be defined in the style FILENAME_H, which is the filename written in all upper case with punctuation such as dots (.) replaced by underscores.

#ifdef CFDHEADER_H

#define CFDHEADER_H

...

#endif // CFDHEADER_H

You can also use the C Preprocessor to protect against multiple inclusions. Create a unique C Preprocessor identifier using the namespace, module, subdirectory, and file name. For example, given a file named Contours.h in the VE-Suite namespace in the Framework subdirectory of the Conductor module

#ifdef VES_CONDUCTOR_FRAMEWORK_CONTOURS_H

#define VES_CONDUCTOR_FRAMEWORK_CONTOURS_H

...

#endif // VES_CONDUCTOR_FRAMEWORK_CONTOURS_H

Comment the end of every #endif, as shown above. Nested #ifdef can be difficult to follow.

A new line after the last #endif is required by some compilers.

Logic Style

Const

Use const on any member function that does not change any data. It enforces the purpose of a function and allows for better compiler optimizations.

Always pass strings by const reference unless you are intentionally modifying it for use by the calling function.

void setName ( const std::string& name )

{

mName = name;

}

Always pass an object by const reference if you are not intentionally modifying any part of it. Always mark the function const if it does not change any intentional state of the class.

void printComparison( const NameObject& name ) const

{

std::cout << mOurNameObject->getFoo() << " : " << name->getFoo() << std::endl;

}

When following the above statements, do not pass plain old data types (POD) like float, int, or double by reference. Just mark them const.

void printDouble ( const double myDouble )

{

std::cout << myDouble << std::endl;

}

#include organization

Place all #include statements at the start of the file following the standard copyright/disclaimer comment block. Never use #include statements midway through a file following other source code.

Organize #include statements at the top of each file by module, third party, and then system includes.

Conditionals

Never use the shorthand ?/: conditional syntax, which inhibits readability. Always use the if/else syntax. Example:

// Use this:

int clamped_value;

if( newValue > mMaxValue )

{

clamped_value=mMaxValue;

}

else

{

clamped_value=newValue;

}

// Don't use this:

//int clamped_value=newValue > mMaxValue ? mMaxValue : newValue;

Don't use single-line conditions. For example:

// Use this:

if( tmp_value == 0 )

{

return;

}

// Don’t use this:

//if( tmp_value == 0 ) return;

Type Casting

Always use the C++-style static_cast syntax rather than C-style type casting. This improves robustness by forcing you to place parentheses around the source data. Example:

void Resize( int canvasWidth, int canvasHeight )

{

double aspect_ratio = static_cast< double >( canvasWidth ) /

static_cast< double >( canvasHeight );

}

Assertions

Place assertions before code segments that would fail catastrophically if the assertion condition is false. Calls to assert() are only executed in unoptimized builds, so there is no performance risk in production builds with liberal assertion usage. If the assertion is potentially confusing, precede it with a comment explaining why the assertion must be true. Include <cassert> rather than <assert.h>. Example:

#include <cassert>

void FunctionName( int* indexAddress )

{

assert( indexAddress != NULL );

int index = *indexAddress;

...

Switch Statements

Wrap each case section with curly braces.

If you intend one case to fall through to the next, place a plainly visible comment at the end of the first case stating that the fall through is intentional and explain why. Otherwise, always use a break statement at the end of each case section.

Include a default section at the end of each switch statement.

goto Statements

Never use goto statements or labels.

Globals and Statics

Never use global variables. Consider using a singleton design pattern instead of a global variable.

Avoid using static variables. An obvious exception is the instance pointer in a singleton object.

Preprocessor Macros

Overuse of the C Preprocessor can inhibit debugging. Avoid using the C Preprocessor where possible. Always use a standard function definition instead of a C Preprocessor macro for complex code segments. Never use a C Preprocessor macro as a shorthand mechanism for repeating code blocks. Here are some examples of appropriate use of the C Preprocessor:

#define PI_OVER_4 0.7853981633974483096156

#define DEGREES_TO_RADIANS(DEGREES)( DEGREES * 0.01745329251994329576923 )

Use the C Preprocessor to protect against multiple inclusions of header files.

Also, use the C Preprocessor to embed multiple implementations, such as in a stack-based factory design pattern implementation. For example:

float maximum( float input0, float input1 )

{

#ifdef WINDOWS

return __max( input0, input 1 )

#else

return std::max<float>( input0, input1 );

#endif

}

Compiler and Linker Warnings

All code should compile cleanly at the maximum warning level. This eliminates clutter in the compiler output stream and improves the visibility of any new warnings inadvertently introduced in the development process.

As an exception, third party code is allowed to generate compiler warnings.

During development, compile code with the -pedantic or -Wall compiler options to maximize warning verbosity.

Compilers generate different warnings for 32- versus 64-bit compilations and debuggable versus optimized compilations. Test all compilation configurations to ensure your code does not introduce new warnings under any conditions.

Array Indexing

Single-character variable names can be easily mistaken for numbers ("I", for example, can sometimes look a lot like "1"). Make the array stand out with whitespace:

array[ i ] = 0.0;

array[ 1 ] = 0.0;

array[ 2 ] = 0.0;

Parens () with Keywords and Function Policy

Do not put parens next to keywords. Put a space between keywords and parens.

Do not use parens in return statements when it is not necessary.

Do put parens next to function names.

Example:

if ( condition ) while ( condition )

{ {

... ...

} }

strcpy( s, s1 ); return 1;

Overuse parenthesis to clarify and clearly denote operator precedence in Boolean and algebraic formulas. For example:

// Use this:

if( ( x_index == 0 ) && ( y_index == 0 ) )

// Don’t use this:

// if( x_index == 0 && y_index == 0 )

Comment Format

Braces

Use braces for all if, while, switch, case, for, and do statements even if there is only a single statement within the braces.

Place braces under and inline with keywords. For example:

if ( condition ) while ( condition )

{ // Note: curly brace is under and aligned with the ‘if’

...

}

Use curly braces to limit variable scope. This improves readability by clearly defining the section of code that is affected by a given variable, and allows the compiler to more efficiently allocate hardware registers to variables. This is especially important when dealing with scoped locks. Put braces around the part where you need to hold on to the lock so the lock can go out of scope and release the lock.

Text Formatting

Limit lines to 80 characters.

Three-space indentation: Set your editor to insert three spaces every time you hit the tab key.

Insert white space for readability. This means that one blank line should occur between function definitions or between different blocks of code.

For specific details on writing Doxygen-compliant and standardized comments, see Chapter 21, Documentation Notes.

Comments

Comments should tell why something is coded the way it is. At every point where you choose between different options, insert a comment describing which choice you made and why. Comments need to be formatted for compatibility with Doxygen. See Chapter 9, Troubleshooting Guide, for further detail.

Use a standard copyright/disclaimer comment block at the top of each source file.

DocBook Documentation

The following sections provide guidelines for editing the VE-Suite documentation using DocBook.

Typefaces

When referring to filenames, file extensions, directory names, commands, or strings of code, use the code tag to differentiate the typeface from the text around it.

Entering this:

Go to VE-Suite's <code>bin</code> directory and type <code>python velauncher.py</code>.

yields this in the DocBook output:

Go to VE-Suite's bin directory and type python velauncher.py.

To draw users' attention to an important piece of information, type NOTE: and tag it with the DocBook emphasis role bold. That is, enter this:

<emphasis role="bold">NOTE:</emphasis>

to yield this:

NOTE:

Referring to VE-Suite's Versions

When referring to a general version of VE-Suite or any application within VE-Suite, such as in a command, use x.x.x to refer to the version number rather than a number so the reference does not become outdated with future release versions. For example, in the following sentence, vesuite.x.x.x.exe and vesuite_deps.x.x.x.exe refer to the version of VE-Suite being used, and the user would change x.x.x to the appropriate version number. In addition, be sure to include the build number in the version as well. The build number is available in VE-Conductor under the About menu option.

One installer, vesuite.x.x.x.exe, contains the core VE-Suite binaries and .dll files, while vesuite_deps.x.x.x.exe contains the binaries and .dll files of the dependencies for the current release of VE-Suite.

In some cases, you might need to refer to a specific version of VE-Suite as the following example shows:

Starting VE-Suite was simplified with the release of version 1.0.0 via VE-Launcher.

Chapter 13. Building VE-Suite

Before attempting to build VE-Suite, be sure to build/install the dependencies (see Chapter 14, Dependencies) and set the environment variables (see Chapter 15, Setting the Environment).

UNIX/Linux Build Instructions

VE-Suite, as well as its dependencies, is currently being bested on a broad range of UNIX/Linux platforms including IRIX 6.5, SuSE, and RedHat Enterprise.

Set the environment variables (see Chapter 15, Setting the Environment) and source the setup file included with the VE-Suite project: $(VE_SUITE_HOME)/VE_Installer/setup. {.sh,tsh}. Once this file has been properly edited, type gmake. The UNIX build system is based on Doozer, which is included with VR Juggler.

Supported base configurations available:

  1. tao_osg_dbg - OpenSceneGraph based application supporting released features

  2. tao_osg_vep_dbg - OpenSceneGraph based application supporting released and new features from current research

There are also cluster variants of each of the above configurations:

  1. tao_osg_cluster_dbg

  2. tao_osg_vep_cluster_dbg

To change any of the configurations described above, open the setup file and set SCENE_GRAPH, CLUSTER_APP, VE_PATENTED accordingly.

Windows Build Instructions

VE-Suite, as well as its dependencies, is currently built and tested using Visual Studio 7.1(2003).

Building VE-Suite

Set the environment variables (see Chapter 15, Setting the Environment) and launch a session of Visual Studio with the VE-Suite project loaded, then run the batch file:

$(VE_SUITE_HOME)VE_Installerbuild.bat

Supported base configurations available:

  1. tao_osg_dbg - OpenSceneGraph based application supporting released features

  2. tao_osg_vep_dbg - OpenSceneGraph based application supporting released and new features from current research

There are also cluster variants of each of the above configurations:

  1. # tao_osg_cluster_dbg

  2. # tao_osg_vep_cluster_dbg

Debugging VE-Xplorer

To run VE-Xplorer from within the Visual Studio debugger, change the working directory in the Configuration Properties tab to point to the directory where your VE-Suite parameter file is located (for example, change the working directory to $VE_SUITE_HOME)VE_TestSuite).

You will also need to pass in your VR Juggler config files as command arguments on the configuration properties tab. With the two projects still open, right-click on the VE_Xplorer project file and select Properties. For simulation mode, add the following to your command arguments section:

$(VJ_BASE_DIR)sharevrjugglerdataconfigFiles sim.base.jconf

$(VJ_BASE_DIR)sharevrjugglerdataconfigFiles sim.wand.mixin.jconf

After you enter a parameter file name and the scene loads, double click on $(VE_SUITE_HOME)bin runWinClient.bat to bring up the gui.

Running VE-Suite from a CD

You can build a working version of VE-Suite you can run from a CD by following these instructions:

  1. Create a folder to hold the CD's contents. We will call this the CD folder.

  2. Build VE-Suite and its dependencies. Make sure you build them without library or header files; these optional files will make VE-Suite too large to fit on a CD. Once they are built, copy them to the CD folder.

  3. Add the autorun.inf and VE_icon.ico files (found in the VE_Installer/installer/StandAloneCDreate directory) to the CD folder. (NOTE: Make sure the path to VE-Launcher listed in autorun.inf matches the path in your version of VE-Suite.)

  4. Add the models you want to include on the CD to the CD folder. We recommend putting them in VE_Suite.1.0.3/share/exampleDatasets with the sample datasets.

  5. Write the contents of the CD folder to the CD.

Reminders:

  • Make sure the contents of the CD folder will fit on the CD before you write it

  • While running VE-Suite from a CD, make sure the dependencies directories and working directory are located on the CD. Otherwise, the program will not run properly. Also, you can only use the .ves (model) files located on the CD itself.

Chapter 14. Launcher

Introduction

VE-Launcher is a quick and easy way to launch any configuration of VE-Suite. It helps users save configurations, choose which programs to run, and launch them without entering text commands. Because so many options and configurations are available, choosing the necessary one can take some work. This chapter explains how to use VE-Launcher and includes an example setup.

Starting VE-Launcher

VE-Launcher is started differently on Windows and Unix installs. On Windows, double-click the VE-Launcher executable. On a Unix-based install, VE-Launcher is a Python program. Go to VE-Suite’s /bin directory and run velauncher.py. Specifically, from the command line, enter the /bin directory and type python velauncher.py to run VE-Launcher.

For both the Windows and Unix-based development versions, VE-Launcher is a Python program. Run it in the same way as the Unix-based install. In development mode, VE-Launcher does not require dependencies to be set and it looks for stereo desktop configuration files in their build location, not their install location.

Preset Environmental Variables: Certain values, such as the VPR_DEBUG_LEVEL, can be automatically entered into VE-Launcher from the environment when VE-Launcher starts. If they are set in the environment, they overwrite the values saved from previous VE-Launcher sessions. These variables include:

  • VE_DEPS_DIR (dependencies directory, Windows only)

    This is the base directory in which the VE-Suite dependencies installer places the associated files during a Windows install

  • VJ_BASE_DIR (VR Juggler directory, Unix only)

    This is the base directory in which VR Juggler is installed during a Unix install

  • VE_WORKING_DIR (working directory)

    This is the location of a desired application

  • TAO_MACHINE (TAO machine)

    This is the computer on which VE-CE is being run. In Desktop Mode, this is set to the local machine and cannot connect to another computer. In other modes (i.e., Cluster Mode), the TAO_MACHINE is run on a single computer and the other nodes communicate with this computer.

  • TAO_PORT (TAO port)

    This is the port number on the TAO machine through which the communication is being passed

  • OSGNOTIFYLEVEL (OSG debug level)

    This is a numeric value that assigns how much debug output is displayed for OpenSceneGraph (the scene graph that VE-Xplorer uses)

  • VPR_DEBUG_ENABLE (VPR debug)

    This is a yes/no value that assigns how much debug output is displayed for VR Juggler

  • VPR_DEBUG_NFY_LEVEL (VPR debug level)

    This is a yes/no value that assigns how much debug output is displayed for VR Juggler

Setting VE-Launcher's Dependencies

Before VE-Suite can be run, VE-Launcher must be pointed to its dependencies. The process for doing this depends on whether VE-Suite is being run on a Windows- or Unix-based system.

Pointing to the dependencies is bypassed completely in development mode because VE-Launcher assumes the enviromental variables have been set.

Windows: VE-Launcher needs to find the VE-Suite dependencies directory that was installed along with VE-Suite. The first time VE-Launcher is started, the user is prompted to choose the dependencies directory for it. This directory should be named VE_Suite.#.#_Dependencies.

If necessary, you can change the dependencies directory by selecting Choose Dependencies from the Options menu in VE-Launcher.

UNIX: VE-Launcher supports dependencies spread across multiple directories. The first time VE-Launcher is run, you will be asked to choose the directory for its dependencies. Each dependency's directory should be added to the list.

The only exception is VR Juggler's dependency directory. Since it sets multiple variables, it needs to be chosen separately from the other dependencies.

If necessary, you can change the the dependencies directory by selecting Choose Dependencies from the Options menu in VE-Launcher.

Once the dependencies have been selected, VE-Launcher's main window displays.

Development mode: VE-Launcher does not require dependencies in development mode. It assumes that the necessary environmental variables have already been set.

The Basics

VE-Launcher's main window displays the basic choices that need to be made before running VE-Suite. Here is a breakdown of what can be done from the main window:

  • Working Directory: You can either type in the directory that contains the files you want to load, or you can browse the file system with the Choose Working Directoy button

  • CE (computational engine) Name and CE Port: Enter the computer and port you want to connect to

  • Launch Mode: Select the desired mode. There are six options:

    1. Desktop Mode launches VE-Conductor, Name Server, and VE-Xplorer in a synchronized manner for the convenience of using VE-Suite on a personal computer

    2. Tablet Mode launches VE-Conductor and is designed for use on tablets

    3. Computation Mode launches the Name Server and is designed for use on computational engines

    4. Visualization Mode launches VE-Xplorer and is designed for viewing projects

    5. Shell Mode lets the user work in a new shell with the VE-Suite environment set up. If Shell Mode is selected, you will be asked whether you want the shell to run VE-Builder. If you click Yes, the selected VE-Builder directory will be added to the path. On Windows, launching in Shell Mode creates the shell in a window. Simply close the window to exit the shell.

      On Unix, launching in Shell Mode makes the shell a child of your current terminal. Type exit to return to your original shell.

    6. Custom Mode lets the user choose the settings.

The settings for every mode can be viewed and changed by clicking the Mode Settings button. Once you have chosen the appropriate settings, click Launch VE Suite to close VE-Launcher and start VE-Suite.

Launcher Menus

VE-Launcher's main window has a menu bar with the following menus:

  • File menu

    • Open....: Pick a ves or script shell file to launch

    • Open Recent File: Pick a recently launched ves file or script shell file to launch

    • Preferences: If necessary, select a default working directory rather than using the directory that was in use during the previous session

    • Close File: Remove any ves file or script shell

    • Quit: Quit VE-Launcher

  • Configurations menu

    • Load: Load a previously saved VE-Launcher configuration. VE-Launcher configurations store information such as mode settings, VE-Xplorer configurations, and cluster settings

    • Save: Save the current VE-Launcher configuration

    • Delete: Delete a previously saved VE-Launcher configuration

  • Options menu

    • Choose Dependencies: Change the location of dependencies based on where the user has installed them

    • Choose Builder Folder: Change the Builder directory (Windows only)

    • Set Debug Levels: Display the varying amounts of debug output for VR Juggler and OpenSceneGraph

    • Auto-Launch Passed Files: If checked, files passed as arguments to VE-Launcher are instantly launched. If unchecked, files passed as arguments are opened in VE-Launcher for the user to launch manually

    • Cluster Wait Times: Customizes the time VE-Suite waits between starting the master node and its slave, and the time VE-Suite waits between starting individual slaves

  • Help menu

Mode Settings

Click the Mode Settings button to view and change settings. The Desktop, Tablet, and Computation Modes display their settings in read-only mode. Visualization Mode allows Xplorer Configuration Mode and Cluster Settings (when Cluster Mode is selected) to be changed. Custom Mode allows every setting to be changed. Choices are displayed in read-only mode if they cannot be changed, or if changing them would not have any effect. For example, Xplorer Configuration Mode cannot be selected if VE-Xplorer is not being run.

Options that can be set include:

  • which VR Juggler configuration to use from the dropdown menu. Users can edit the list by clicking Edit Configuration List in the Xplorer Configuration Mode area of the Custom Mode Settings window. The configuration list will be discussed in more detail in the next section.

  • which programs to run. Users can choose to run any combination of Name Server, Conductor, and Xplorer. At least one must be selected or VE-Suite will not launch.

  • whether to run Conductor and Xplorer in Desktop Mode. This checkbox is disabled if neither is being launched.

  • which mode to run Xplorer in. Users can choose between Non-Cluster Mode (single computer) or Cluster Mode. This radio list is disabled if Xplorer is not being launched.

Edit Configuration List

Figure 14.1. Click the Edit Configuration List button [RUN VE-SUITE TO CHECK THIS]

Click the Edit Configuration List button [RUN VE-SUITE TO CHECK THIS]

Click the Edit Configuration List button. VE-Suite has multiple configuration files available. To help users keep track of them, VE-Launcher keeps a list of the configuration files used. Entries in this list can be added, renamed, or deleted. The path to the currently selected entry is listed in the field at the bottom of the window so you can tell which name stands for which file.

When a new configuration is added to the list, its initial name is the same as its file name. The configuration should be renamed to be more descriptive.

Unix Clusters

VE-Launcher can run VE-Suite from one computer across a cluster. To use VE-Launcher's cluster functions on Unix, the cluster must satisfy these requirements:

  1. The path to VE-Suite, its dependencies, and the working directory must be the same on every cluster node

  2. VE-Launcher's user must have permission to ssh to each mode

  3. The user must manually ssh into each node and authenticate its host

Once all the nodes have been authenticated, the cluster can be run from VE-Launcher:

  1. If NameServer and Conductor are running on a certain node, open VE-Launcher from that node. (VE-Launcher runs NameServer and Conductor from the same computer VE-Launcher is running on.)

  2. Set the settings and select the Cluster Xplorer Mode. The Cluster Settings button will then be enabled.

  3. Click Cluster Settings. A window will open displaying master and slave lists. Type in the master’s name, add each slave’s name to the list, then click Ok.

  4. Click the Launch button to launch VE-Suite. VE-Suite will start on the cluster computers.

NOTE: There is a slight delay between each node launched because simultaneous launching causes erratic behavior in clusters. The delay can be changed by selecting Cluster Wait Times from the Options menu. If sync or unconnected nodes cause problems using VE-Launcher, try lengthening the delays. If launching the cluster takes too long, try shortening them.

Windows Clusters

VE-Launcher can start VE-Suite across a Windows cluster through PsExec.

To use the cluster functions of VE-Launcher on Windows, the cluster must satisfy these requirements:

  1. The path to VE-Suite, its dependencies, and the working directory are the same on every cluster node

  2. PsExec is installed on the computer that is running VE-Launcher

To launch the cluster:

  1. If NameServer and Conductor are running on a particular computer, open VE-Launcher from that computer (VE-Launcher runs NameServer and Conductor from the current computer)

  2. Choose the appropriate settings. Set Xplorer Configuration to Cluster Mode. This causes the Cluster Settings button to be enabled.

  3. Click Cluster Settings. A window will open displaying the master and slave lists, plus an optional User name field. Type in the master’s name, then add each slave's name to the list.

    Some clusters might require the user to connect with a certain user name. If so, enter that user name into the User name field. The user name's domain may need to be included as well, depending on the cluster's setup. If you provide your user name, you will have to manually enter your password in each Psexec window as it launches. VE-Suite does not send passwords for security reasons.

    Extra variables can also be passed to cluster computers. Click on the Pass Extra Vars button and list any extra variables that you would like to pass, then click OK.

  4. Launch VE-Suite by clicking Launch. The cluster computers will start up VE-Suite.

NOTE: There is a slight delay between each node launched because simultaneous launching causes erratic behavior in clusters. The delay can be changed by selecting Cluster Wait Times from the Options menu. If sync or unconnected nodes cause problems using VE-Launcher, try lengthening the delays. If launching the cluster takes too long, try shortening them.

The cluster template: If your cluster needs extra code to launch (for example, a net use command to set up a remote drive), the code can be entered into the clusterTemplate.txt file. Any terminal code in the clusterTemplate.txt file will run on the cluster’s other computer before VE-Xplorer is launched. Please read the comments in clusterTemplate.txt for more details.

VE-Launcher Command Line Arguments

Once VE-Launcher is set up, VE-Suite can be quickly started by passing arguments from the command line. Some arguments pass values to VE-Launcher while others bypass VE-Launcher completely and auto-launch VE-Suite. Arguments that auto-launch VE-Suite use the previously saved settings for any fields they do not change.

  • <file>: Passes a .ves file or shell script named <file?> to VE-Launcher. Auto-launches VE-Suite if Auto-Launch Passed Files has been selected in VE-Suite. Otherwise, VE-Launcher starts with the file loaded.

  • -q, --quick: Auto-launches VE-Suite with its most recent settings

  • -g<config>, --config=<config>: Loads the VE-Launcher configuration named <config>

  • -d, --dev: Starts VE-Launcher in Development mode

  • -w<dir>, --dir=<dir>: Auto-launches VE-Suite with the working directory set to <dir>

  • -t<name>, --taomachine=<name>: Auto-launches VE-Suite with TAOMACHINE set to <name>

  • -p<port>, --port=<port>: Auto-launches VE-Suite with port set to <port>

  • -j<file>, --jconf=<file>: Auto-launches VE-Suite using <file> as VE-Xplorer's Juggler configuration

  • -l<boolean>, --cluster=<boolean>: If <boolean>==True, auto-launches VE-Suite in Cluster Mode. If <boolean>==False, auto-launches VE-Suite in Non-Cluster Mode.

  • -b, --debug: Auto-launches VE-Suite and debugs the launch

  • Program arguments set certain parts of VE-Suite to run. They auto-launch VE-Suite, running the programs specified. Note that only the programs specified in the arguments are run. For example, if a user only passes -x -n, only VE-Xplorer and the computational engine will run, even if the default settings usually run VE-Conductor as well.

    The program arguments are:

    • -n, --nameserver: Runs the computational engine

    • -c, --conductor: Runs VE-Conductor

    • -x, -xplorer: Runs VE-Xplorer

    • -s, -shell: Runs a shell with VE-Suite's environment set

Example

John Doe wants to set up VE-Suite to look at a virtual power plant design. He needs to start it in Visualization Mode, using the VR Juggler configuration "standalone". He also needs VE-Suite to connect to computer kiwi on port 1239.

When John starts VE-Launcher, he sees this:

Figure 14.2. Example (a)

Example (a)

First, John types the path to the plant design data directory in the Working Directory field. He could also use the Choose Working Directory button to find it.

Figure 14.3. Example (b)

Example (b)

John needs to change the computational engine (CE) name, but he cannot because VE-Launcher is currently in Desktop Mode, which automatically sets the CE name to localhost. To unlock the CE name, he switches to Visualization Mode. Remember that any mode besides Desktop Mode will allow users to change the CE name.

Figure 14.4. Example (c)

Example (c)

Switching modes unlocks the CE name and sets it to the last user-input value. Now John can change the CE name and port.

Figure 14.5. Example (d)

Example (d)

To finish setting up VE-Launcher, John must change the mode's settings. He clicks the Mode Settings button to bring up the Settings window.

Figure 14.6. Example (e)

Example (e)

Visualization Mode sets most of the options, and the Non-Cluster Xplorer Configuration Mode is already selected. That leaves changing the Xplorer Configuration. However, the configuration that John needs is not on the list. He clicks the Edit Configuration List button.

Figure 14.7. Example (f)

Example (f)

John clicks the Add button, which opens the configFiles directory. He selects the appropriate file and clicks Open.

Figure 14.8. Example (g)

Example (g)

The configuration is added to the list with the same filename that it had in the configFiles directory. In this case, that name is standalone.jconf. John clicks the Rename button to rename it "Plant Design" so he can remember which project it is for.

Figure 14.9. Example (h)

Example (h)

Now that he has finished editing the list, John exits the Xplorer Configurations window. Because Plant Design was selected when he exited, it is automatically set as his current configuration file. With everything set up appropriately, John can now click the Launch VE-Suite button to look at the design.

Chapter 15. VE-Builder

Introduction

VE-Builder is a set of tools for modifying three-dimensional data files for VE-Suite.

Launching VE-Builder

A VE-Suite shell environment is necessary to run VE-Builder. To run VE-Builder tools from VE-Launcher, select the Shell Mode.

Importing Files

The loaderToVtkd program transforms prepared three-dimensional data files from other programs into VE-Suite files. First, prepare the environment for it by launching a Builder shell from VE-Launcher, as described in the previous section. Then the loaderToVtkd can be used to import files into VE-Suite formats. The general syntax of the program is:

loaderToVtkd -singleFile <input filename> -loader <loader type>

-o <full path to the output directory> -w file COMMAND FOR THE NAME OF THE OUTPUT FILE

To see loaderToVtkd options, type in loaderToVtkd. loaderToVtkd supports the following loader types:

  • REI (BANFDB)

  • AVS (avs)

  • Dicom (dcm)

  • EnSight (ens)

  • MFIX (mfix)

  • StarCD (star)

It also supports Plot3D, but with this syntax:

loaderToVtkd -geometryFileXYZ [input filename] -dataFileQ [input filename2]

-o [full path to the output directory] -multiGrid Flag [0:1] -iblankFlag [0:1] -numberofDimensions [0:1]

-outFileName [output file] -loader xyz -w file

The following sections include detailed instructions for preparing and importing data files from StarCD (Section 9.4) and Fluent (AVS) (Section 9.5).

Importing from StarCD

Preparing the StarCD files

First, get the star.cel, star.vrt, and star.usr files from StarCD. Instructions for doing this can be found in Building Files from StarCD, Section 9.10 (below).

Next, make a star.param file to point to the star.cel, star.vrt, and star.usr files. Save the template to the working directory and follow these instructions to modify it for your data.

Set these points to the appropriate .cel, .vrt, and .usr files:

STARCEL=/your_directory/star.cel // a *.cel file is required

STARVRT=/your_directory/star.vrt // a *.vrt file is required

STARUSR=/your_directory/star.usr // a *.usr file is required

Change these lines to their respective scalars:

VECTORNAME=Velocity // the columns of the *.usr file must be labeled

SCALARNAME=scalar1 // the columns of the *.usr file must be labeled

SCALARNAME=scalar2 // the columns of the *.usr file must be labeled

SCALARNAME=scalar3 // the columns of the *.usr file must be labeled

SCALEINDEX=1 // optional: uses integer indices defined in translateToVtk.cpp to set scale factor

Enter an integer option on the SCALEINDEX:

  • 0: No scale, corresponding to a scale of 1.0

  • 1: Custom scale, indicating that the SCALEFACTOR tag will be used to specify a scale factor

  • 2: Meters to feet, corresponding to a scale factor of 3.28

  • 3: Millimeters to feet, corresponding to a scale factor of 3.28e-3

  • 4: Inches to feet, corresponding to a scale factor of 1.0/12.0

  • 5: Meters (1:12) scale to feet, corresponding to a scale factor of 12.0*3.28

SCALEFACTOR=.083333333 // optional: the scale factor (default = 1, unless SCALEINDEX >1)

VR space is always in feet, so the scale factor tag must be in feet. If using a SCALEINDEX of 0 or 1, comment out this line:

WRITEOPTION=1 // optional: 0=let vtk write the file(default), 1=directly write ascii to disk

The Writeoption is no longer needed. Set it to 0 or remove it.

Converting from StarCD to .vtu

Use VE-Launcher to start a Builder shell. Set the working directory to the directory where star.param is located, then enter the following code:

loaderToVtkd -singleFile star.param -loader star -o [full path to the output directory] -w file COMMAND TO SET FILE IN COMMAND LINE OR STAR.PARAM FILE

After the code executes, it will dump a .vtu file of the data into the specified directory.

Importing from Fluent (.avs)

First, write out an .avs file for the post-processed data from Fluent and place it into the working directory. Use VE-Launcher to open a Builder shell (see Section 9.2), making sure to set the working directory to the directory where the .avs file is located. Use this command to convert it.

loaderToVtkd –singleFile [AVS filename] –loader avs –o [working directory] –w file

Converting from Fluent (.cas) to .vtu

You will need to write out a .cas file for the post-processed data from Fluent. Place it into your working directory. Open a Builder shell from VE-Launcher. Be sure to set the working directory to the .cas file's directory. You can convert the fluent output file to a .vtu file with this command:

loaderToVtkd -singleFile [CAS filename] -o [working directory] -outFileName [name of output filename] -loader cas -w file

Displaying FEA Data

VE-Suite has the capability to display FEA datasets in the virtual environment, much like CFD datasets. However, the FEA data is primarily displayed as a surface on the object(s) of interest.

To display FEA data from an FEA dataset, select the Polydata icon and select the desired scalar for the FEA data.

Creating Preprocessed Data

You will need a .vtu file to create preprocessed data. Start a Builder shell from VE-Launcher, being sure to set the working directory to the .vtu file's directory. Verify that there is a directory called POST_DATA in the same directory as the .vtu file. If there is not, create one. Once the POST_DATA directory is ready, type in preprocessor. The first prompt will ask for a filename. Type in the .vtu file's name. The second prompt will ask for a directory to dump the data into. Type in the full path to the directory where you want to put the preprocessed data. The program will then ask you what you want to process. Your choices include:

  • Decompose Octrees:

  • Extract Surfaces:

  • Extract Isosurfaces:

  • Extract Cutting Planes:

Once you have made your choices, the program will execute and produce your preprocessed data.

Specify Cutting Planes in a .txt File

If you want to extract cutting planes, you can specify the planes in a .txt file instead of manually typing them in each time. First, create a .txt file in the same directory as the .vtu file and write your cutting planes in it using this format:

1 //Number of x cuts

0.0 //X cuts

1 //Number of y cuts

0.0 //Y cuts

4 //Number of z cuts

3.26 3.39 3.42 3.73 //Z cuts

When you run the preprocessor, enter (1)Yes to extract cutting planes. You will be asked how to set the number of cuts. Select (2)Specify text file, then enter the name of your .txt file. The preprocessor will pull the values for the cutting planes from it.

Creating Texture-Based Datasets

Launch a Builder shell from VE-Launcher. In the VE-Launcher Shell window, enter the following:

vtkTo3DTexture

This will launch the translator interface. Select the desired parameters from the GUI and click Translate. Input parameters include:

  • Input directory: Directory containing the input .vtk dataset files

  • Output directory: Directory to write out the texture data and the texture description files

  • Texture dimension: The resolution (~sampling rate) of the output textures

  • Grid type: Input .vtk dataset grid structure

A progress dialog will appear as the input .vtk files are translated to three-dimensional texture data files that are usable in VE-Suite.

Batch Mode

The translator can also be run in a batch mode. To run in batch mode, enter this on the command line:

vtkTo3DTexture -i /home/users/mcdoe/LTN/3D_Jets_Test/vtk -o / home/users/mcdoe/LTN/3D_Jets_Test/jets_vti -x 32 -y 64 -z 32 / home/users/mcdoe/LTN/3D_Jets_Test/Jets_Data

where:

  • -i specifies the vtk/vtu files' input directory

  • -o specifies the output directory for the three-dimensional vti texture files

  • -x is the x resolution for the texture

  • -y is the y resolution for the texture

  • -z is the z resolution for the texture

  • The last argument is the data input directory for vt(u,k,s) files

The batch mode also supports parallel processing (MPI), which is convenient for large transient datasets. To run in batch mode with MPI, you must first install the MPI library. We recommend LAM/MPI. This is available for most Linux platforms. To run with LAM/MPI, a script should be created similar to:

#/bin/tcsh

setenv VE_SUITE_HOME /home/users/mcdoe/svn_VE_Suite/VE_Suite && source $VE_SUITE_HOME/VE_Installer/setup.tsh

vtkTo3DTextureMPI -i /home/users/mcdoe/LTN/3D_Jets_Test/vtk -o / home/users/mcdoe/LTN/3D_Jets_Test/jets_vti -x 32 -y 64 -z 32 / home/users/mcdoe/LTN/3D_Jets_Test/Jets_Data

which should then be executed as follows:

mpirun -np 2 ./

Building Files from StarCD

If you need to write out star.cel, star.vrt, and star.usr files from StarCD, follow these instructions:

  1. Launch StarCD

  2. Ensure that a *.vrt and *.cel file are written of the region of interest. This region can either be a complete CFD model or a subsection of the model

  3. Analyze data

  4. Post-processing-->Load data

    1. In the "File(s)" tab, click "open post file"

    2. In the "Data" tab:

      1. Scalar Data-->Turb Kinetic Energy

      2. Vector Data-->Velocity Components UVW

  5. Click Get Data

  6. Click View Post Registers

  7. To add other scalar values to store:

    1. Click Operate at the bottom of the Post Registers window

    2. Function-->Load vertex data-->turbulent energy (Registers 1-3 must contain vector data. Registers 4-6 must contain scalar data.)

    3. Select register

      NOTE:Although it is necessary to use vertex data rather than cell data, using vertex data might return an error. To solve this problem, copy the previous command line and add the register number (e.g., enter oper, getv, te, 5,)

    4. Ensure that "using relative values" is selected

    5. Click Apply to put data in an empty register

    6. Click Update list

    7. Repeat the previous steps to add data to registers 5 and 6 (pressure and viscosity)

  8. The data is now stored. In the pro-STAR window:

    1. Post-->save user data

    2. Registers: all

    3. File type: coded

    4. Range: all vertices

    5. Click Apply

    6. Click Close

  9. Manually close file (enter close *.usr)

  10. File-->save as coded

  11. Unclick boundary file

  12. Click Apply

    NOTE: Checked files are written out

  13. Enter Close All

Chapter 16. Dependencies

The following is a list of links for the VE-Suite dependencies. Dependencies can be downloaded and built by the user from the following links or the pre-compiled binaries can be installed from the download page.

OpenSceneGraph (OSG) is used to manage the scenegraph (verson 1.2+)

VTK is used to render the visualization objects (version 5.0+)

CMake is needed to build the VTK

VR Juggler is used for management of the virtual environment (version 2.0.1+)

The dependencies are best installed in the following order:

  1. CMake

  2. VR Juggler

  3. OpenSceneGraph

  4. VTK

VR Juggler dependencies zip file

VR Juggler has its own set of dependencies if you are building it yourself:

  • GMTL 0.4.12+

  • Boost 1.33 1+

  • Cppdom 0.6.6+

  • openAL 0.0.8+

  • omniORB 4.1.0+

  • VRPN 0.7.03+

Java 2 SDK is needed for Juggler's java-based VRJconfig program.

wxWidgets is used to compile and run the GUI. (Click "download" on the left side menu to get to the files.) (version 2.6.2+)

Xerces is used to read and write XML. (Download xerces-c-current) (version 2.7.0+)

ACE/TAO is used for cross-platform communications. (ACE version 5.5+, TAO version 1.5+)

APR is used to generate the GUIDs. (version 1.2.8)

OPAL (Open Physics Abstraction Layer) is used as a wrapper to ODE for physics integration. (version 0.4.0)

ODE (Open Dynamics Engine) is used for physics integration. (version 0.7)

VE-Launcher was coded using Python. It can run in Python2.3 or higher. If you are running it from Python, you need to install these extensions for Python as well:

Windows: VE-Launcher requires these Win32 extensions if you are running it in Python for Windows.

VE-Launcher requires wxPython 2.6.3.3 if you are running it in Python.

Development Dependency Guidelines

To avoid dependencies problems during development, we have provided guidelines for using dependencies with VE-Suite. These are the guidelines the main VE-Suite development group follows and are provided as suggestions for other users.

Windows:

  1. The developer must either download all the installers for a particular windows IDE and OS, or build all the dependencies for VE-Suite themselves.

  2. The VE-Suite development team will maintain certain installers for all dependencies so that the external developers will have easier access to the current development tools.

  3. The development libraries will be kept in the native directory structure for a respective library. This ensures that a developer is able to swap libraries as necessary for research purposes without having to change the build system.

Linux:

  1. The developer must either download all of the dependencies' rpms, use their platform's respective package management system, or build all of the dependencies for VE-Suite themselves.

  2. The VE-Suite development team will maintain rpm files for all dependencies so that the external developers will have easier access to the current development tools.

  3. On Linux platforms, the dependency directory structure will be assumed to be include, bin, lib, and share as is the case for most libraries when the install target is used on a build system.

Building Dependencies on Windows

It is best to read the specific installation/build instructions for each dependency before attempting to build. The information provided includes specific details to allow VE-Suite to build/run correctly.

VE-Suite and its dependencies are currently built and tested using Visual Studio 8.0(2005).

You can find the development libraries at http://www.vesuite.org/external/deps/non-admin/.

Notes on installing dependencies:

  • TortoiseSVN - Used to check out and update VE-Suite from ISU's code repository.

  • After TortoiseSVN is installed, you can check out the code if you have an account registered with ISU's repository. Create a VE-Suite directory. Right-click on the VE-Suite directory and choose "Checkout..."

  • Alternately, if you get the VE-Suite source code as a compressed tarball, some unzip utilities may not maintain the correct directory structure. This can be fixed by unzipping the files on a Unix-based system and then moving the files to the Windows machine.

  • While the default locations for installations will work, we recommend creating a directory in the root (C:) directory to minimize the path lengths and the accompanying potential for typos when configuring environment settings.

VE-Suite Component Dependencies

If you are installing individual components of VE-Suite on different desktops, it is only necessary to install the dependencies for that specific component. Below is a table listing the individual components and their specific dependencies.

Table 16.1. Component Dependencies

Computational EngineACE/TAO, xerces-c
VE-Conductor (GUI)ACE/TAO, xerces-c, wxWidgets
VE-XplorerACE/TAO, OpenSceneGraph, VTK, VR Juggler

Other Requirements

Computers running VE-Suite must be able to run all of the dependencies listed above. They must also have shader support. VE-Suite will not run properly without shader support.

Chapter 17. Setting the Environment

To specify the build/run environment, perform a one-time edit of the environment variables that are defined in the setup file, setup.bat on Windows and setup.tsh/setup.sh on UNIX/Linux platforms. If the paths of your environment variables contain spaces, you need to put the directory containing the spaces in quotation marks.

Example:

set VTK_HOME=C:/"Documents and Settings"/user/Desktop/vtk

Important variables include:

  • VE_SUITE_HOME : The location of the top-level VE-Suite directory

  • VJ_BASE_DIR : The location of VR Juggler

  • VJ_DEPS_DIR : The location of VR Juggler's dependencies

  • VTK_HOME : Visualization ToolKit (VTK) directory

  • WX_HOME : The wxWidgets install

  • XERCESROOT : The location of the xerces build

  • WX_ROOT : The location of wxWidgets install (should be same as WX_HOME)

  • OSGHOME : The location of OpenSceneGraph (if OSG version is built)

  • ACE_HOME : The location of the ACE_wrappers directory

  • TAO_HOME : TAO location within ACE/TAO

Important variables for UNIX/Linux platforms only:

  • SCENE_GRAPH : Always set to OSG. Defines which scene graph to build for VE-Xplorer

  • TAO_BUILD : Always set to TRUE. In the future this flag can be sued to support other CORBA ORBs as well

  • CLUSTER_APP : Set to TRUE if VE-Xplorer will be used on a graphics cluster

Chapter 18. Description of the Engines

VE-Suite is composed of three main software engines that coordinate the flow of data from the engineer to the virtual components being designed. The following sections will detail the design of each of these engines and describe how they contribute to the overall framework functionality.

Graphical User Interface (VE-Conductor)

To achieve the goals outlined for the project, a powerful and flexible user interface (UI) was implemented. Key features of the VE-Suite two-dimensional UI (VE-Conductor) are described in the following sections.

Multi-Platform Support

The UI makes use of platform independent libraries to enable the software to run on a wide range of computer hardware and operating systems. These platforms range from UNIX workstations to Pocket PCs and PDAs. This functionality is ideal for the virtual engineering-based system since users will frequently make use of handheld computing devices inside of immersive environments (e.g., cave-like systems at ISU-VRAC and NETL).

After reviewing a number of different UI libraries, WxWidgets was chosen. WxWidgets is one of the best cross-platform GUI packages available. It is well-maintained, has a large user base, and has ports for Windows, UNIX/X11, UNIX/Motif, OS2, Mac, and GTK. It also has an alpha version of a Windows CE port, which is under active development. This ensures that the user interface will run on all major platforms and even on Pocket PC-based PDAs.

Detachable/Location Transparency

The UI exists independently from the computational engine as a separate CORBA component. This functionality allows the UI to be attached and detached from an active simulation from any compatible computer on the network. As an example, this would allow a user to build and start a simulation and then detach from the computational engine. The user could then go to a different location, re-attach to the simulation, and regain monitoring and control functions.

To accomplish this functionality a CORBA IDL interface between the UI and the computational engine was defined. This CORBA interface provides all the necessary communication mechanisms between these components. The communication link is bidirectional and handles items such as model parameters passed to the computational engine and receives items such as execution status and results from the computational engine.

Another advantage of this design is the ability for multiple UIs to be attached to the same computational engine, allowing multiple users to monitor a simulation from different locations. A locking mechanism is used so that only one UI (controller) can change the design and inputs of the simulation. The UI also has the ability to connect to the graphical environment and control what graphical representations are shown for high fidelity data (i.e., contour planes, vector planes, streamlines, iso-surfaces) or for low fidelity data (i.e., gauges showing scalar information about plant performance, costing data, or emissions data).

Extensibility

Another important consideration for the UI design is extensibility. The UI is able to dynamically discover, identify, and load UI elements for new component models. This capability keeps the level of difficulty involved in integrating new component models to a minimum since it eliminates the need for modifications to the core interface when new models are added.

The dynamic discover and load capability is accomplished by loading user developed module UIs from dynamic link libraries (DLL in Windows) or shared libraries (SO lib in Linux/UNIX). A plugin C++ base class defining this UI-module interface is provided to all module developers. Developers can inherit from this class to create their own module UIs and then compile the resulting code into a DLL/shared library. The UI framework’s plug loader code will recognize the new module and bring that into its user-module library. By this mechanism, the core UI can plug in the third-party module-specific UI directly from binaries.

Unified Control

Another feature of the UI is unified control for all user interaction. This ensures that the user is not burdened with moving between different UIs to perform operations. There is a single UI with the ability to: 1) construct, specify, execute and monitor simulations; and 2) provide complete control of the three-dimensional virtual environment.

To provide this functionality, the UI is designed to communicate via CORBA to not only the computational engine, but also to the graphical engine. As was discussed for the UI-to-computational engine link, the use of CORBA with an appropriate IDL provides a flexible, detachable, and platform independent communication mechanism for this link as well.

The following figure shows the two-dimensional GUI. A list of available modules is maintained in a tree structure on the left side of the window, while the main canvas area shows the current simulation network.

Figure 18.1. Two-dimensional GUI

Two-dimensional GUI

Computational Engine (VE-CE)

The computational engine (VE-CE) is the core of the framework. Its duties are to construct, coordinate, schedule, and monitor plant simulation runs. It is capable of running a simulation containing a multitude of different types of models, each accepting and generating a myriad of data types. The computational engine is able to analyze a plant configuration, determine execution order, marshal system resources to create model instances, and coordinate the flow of data through the simulation framework. Tasks that require specific knowledge about a data type or model are relegated to either a detachable UI or to a specific model, thus keeping the computational engine generalized at a high level.

Important functions that the computational engine controls can be broken down into several pieces for explanation: plant configuration, data handling, error handling, relationship to detachable UI, scheduling, and relationship to models. Each of these is described in detail in the following sections.

Plant Configuration

The configuration of the plant, provided by a detachable UI, is the primary data structure used by the computational engine. Nearly all algorithms utilized, such as proper data flow, scheduling, and resource allocation depend on this topology.

Data Handling

Since there is an unlimited number of possible models capable of being integrated into the framework (with each model having a different input/output set), the computational engine operates with generalized datatypes. To address this requirement, we have designed the CORBA IDL interfaces between the computational engine and the component models to use mapped string blocks in combination with common dimensions of array data.

Error Handling

With the computational engine being the centralized intelligence behind a simulation run, all errors that occur while performing this task (whether originating within its own structure or on an attached model) must be properly handled within the context of this overriding structure. Thus, the computational engine has sophisticated error handling routines and messaging facilities to alert attached users. To fit into the detached UI paradigm, any errors that occur on an attached UI are handled locally.

Relationship to Detachable UI

The computational engine is a CORBA server into which a detachable UI client can connect. This detachable UI is where the user is able to create a plant configuration, set model inputs, start and stop execution of simulation, and view simulation results. Once a client-server connection is made, the engine is able to send results, messages, updates, and communications from other attached UIs in real time. The computational engine does not require a connection to a UI during a simulation run. Users can connect/disconnect at will to configure, modify, or monitor the simulation of a given plant configuration.

Scheduling

The computational engine makes use of advanced scheduling algorithms. The scheduler, at minimum, will be capable of handling single and embedded feedback loops, iterative solves and, eventually, transient simulation runs.

Relationship to Models

The computational engine, with its CORBA interface, is able to connect to the various component models available for a simulation. Information passed through this connection includes inputs (user supplied and stream data), outputs, results, and general messages. The importance of the CORBA interface being used for this purpose is discussed in detail in the Model Integration section below.

Graphical Engine (VE-Xplorer)

The graphical engine (VE-Xplorer) provides the core functionality for the virtual engineering aspect of the framework. VE-Xplorer enables the engineering analysis and design process to take place in a virtual environment. For maximum graphical performance on multiple operating systems, it is built upon VR Juggler, OpenGL Performer, and Kitware's Visualization ToolKit. This visual interface, controlled by the UI and the computational engine, is a graphical representation of the simulation under review.

The graphical engine is generalized to load data not only from comprehensive models, but also from other engineering sources, including results generated from the CMU Vision 21 planner software and other generalized datasets (e.g., experimental data from a test rig). The engine is also being modified to make use of the high level CORBA interface specifications used throughout the software framework. This interface allows the visualization engine to communicate directly with the component models, computational engine, and UI. To communicate with the graphical engine there is an external socket connection that is made between individual component models and the respective graphical objects. This connection allows large high fidelity datasets to be transferred to the graphical environment without interrupting the overall communication network.

The graphical engine is also designed to allow graphics objects to be added to the virtual environment just like the objects are added in the GUI. This allows the graphical environment to be a direct representation of the system being designed by the engineer. In much the same way that the GUI auto-discovers the plugins for use by the engineer, the graphical engine also dynamically discovers plugins. Unlike the GUI, the graphical engine is controlled by the network string that is created by the GUI. This represents a significant capability since the graphical engine has no a priori knowledge of the system under interrogation.

Chapter 19. Software Development Documents

The Department of Energy is funding a collaborative effort to develop new computer simulation tools that are capable of modeling advanced, next-generation power plants. As part of this effort, Reaction Engineering International, Iowa State University, and Carnegie Mellon University have begun developing a virtual engineering-based computational framework to facilitate these demanding modeling efforts.

This new, open source framework provides significant features and capabilities including:

  • Distributed computing capabilities

  • Platform independence

  • Extensibility for component models

  • Modern user interface

  • Support for a hierarchy of component models (from detailed to simple)

  • Comprehensive graphics capabilities including support for immersive facilities

  • Component architecture software design

The VE-Suite framework provides capabilities to fundamentally alter the traditional simulation process. Instead of engineers working with a number of disparate computational models, it is now possible to have a tightly integrated modeling environment where models interact in a seamless manner. A sophisticated user interface provides easy user interaction, and comprehensive two-dimensional and three-dimensional graphics capabilities exist for viewing plant configurations and simulation results.

VE-Suite’s extensible software design allows users to easily incorporate component models and corresponding two-dimensional and three-dimensional graphical representations to create new, plug-and-play framework components. By design, the framework components can be distributed across computational resources (different computers connected to the internet or a local area network) to make the most efficient use of resources.

Additional details about VE-Suite are available in:

Swensen, D.A., Maguire, M., Yang, C., and Bockelie, M.J., "Computational Frameworks for Practical, Engineering Applications," presented at the SIAM Computational Sciences and Engineering Conference 2005, Orlando, Florida, USA, February 12-15, 2005.

Bockelie, M., Swensen, D.A., Denison, M.K., Maguire, M., Yang, C., Chen, Z., Sadler, B., Senior, C.L., Sarofim, A.F. "A Computational Workbench Environment for Virtual Power Plant Simulation", Contract DE-FC26-00NT41047, Final Report, December, 2004.

Huang, G., Bryden, K. M., and McCorkle, D. S., "Interactive Design using CFD and Virtual Engineering," In the Proceedings of the 10th AIAA/ISSMO Multidisciplinary Analysis and Optimization Conference, AIAA-2004-4364, September 2004.

Bryden, K. M., Ashlock, D. A., Corns, S. M.. Graph based evolutionary algorithms. submitted to the IEEE Trans Evol Comput.

Bryden, K. M., and McCorkle, D. S., "Virtual Engineering," in preparation to submit to the Journal of Computing and Information Science in Engineering.

Bryden, K. M. and McCorkle, D. S., "VE-Suite: A Foundation for Building Virtual Engineering Models of High Performance, Low Emission Power Plants," 29th International Technical Conference on Coal Utilization & Fuel Systems, Clearwater, Florida, 38-46 (2004).

McCorkle, D. S., Bryden, K. M., and Kirstukas, S. J.., "Building a Foundation for Power Plant Virtual Engineering," 28th International Technical Conference on Coal Utilization & Fuel Systems, Clearwater, Florida, 63-71 (2003).

McCorkle, D. S., Bryden, K. M., and Ashlock, D. A., "Planned Tournament Selection," Intelligent Engineering Systems Through Artificial Neural Networks - Proceedings of the Artificial Neural Networks in Engineering Conference, 13: pp 385-390 (2003).

McCorkle, D. S., Bryden, K. M., and Swensen, D. A., "Using Virtual Engineering Tools to Reduce NOx Emissions," in the Proceedings of ASME Power 2004, POWER2004-52021, pp 441-446, March 2004.

Chapter 20. Software Development Tools

subversion

svn tortoise

trac

bugzilla

phpBB

docbook

visual studio

gnu tools

ddd D

ialogBlocks

Valgrind

openGL debuggers

py2exe

freeze

inno setup

rpm

dmg builder

Chapter 21. Testing Matrix

Installation/Download

Please set environment var on Linux to limit coredump size to 10000000000

Table 21.1. All Directories Extracted Correctly

 WindowsRHEL_4SuSE_32SuSE_64
bin    
lib    
share    
include    

VE-Launcher

Table 21.2. Initialization

 WindowsRHEL_4SuSE_32SuSE_64
Display all imagery correctly similar to documentation    

Table 21.3. Desktop Shortcuts

 WindowsRHEL_4SuSE_32SuSE_64
Creates Launcher in Start menu after running scripts    
Creates desktop icons n/an/an/a

Table 21.4. Configurations

 WindowsRHEL_4SuSE_32SuSE_64
Allows setting of dependencies    
Allows multiple dependency settingsn/a   
Saves configurations    
Load configurations    

Table 21.5. Launching

 WindowsRHEL_4SuSE_32SuSE_64
Choose any working directory    
Loads simple .ves file from share/examples directory    
Stores file name in recent file menu    
Loads file stored in recent file menu    
[Shell option correctly sets the environment] Launch shell    
[Shell option correctly sets the environment] at command prompt type: whatIsScalarRange    
[Modes] Desktop launches all component    
[Modes] Tablet launches ONLY Conductor    
[Modes] Visualization launches only Xplorer    
[Modes] Computation launches only CE    
[Modes][Custom] Under mode settings check Xplorer and NameServer only.    
[Modes][Custom] Launch Xplorer and NameServer    
[Modes][Cluster Mode] Able to launch in cluster mode  n/an/a

Table 21.6. Shutting Down VE-Suite

 WindowsRHEL_4SuSE_32SuSE_64
Desktop Mode-File->Quit closes Conductor and Xplorer    
VE-Xplorer->Shutdown Xplorer closes Xplorer    
All Windows dialogs close    

Conductor

Table 21.7. Initial Material

 WindowsRHEL_4SuSE_32SuSE_64
Open/Load share/exampleDatasets/simple.ves file    
Create New network    
Add Default Plugin to Design Canvas    
Submit Job (under dropdown menu and icon)    
Recent file menu updated correctly    
Close and repeat file opening with icons    

Table 21.8. CAD (Geom Config Dialog)

 WindowsRHEL_4SuSE_32SuSE_64
Add Geometry Surface.0.75.stl    
Clone Geometry Surface.0.75.stl    
Rotate Clone (40,40,0)    
Translate Clone (-4,0,0)    
Add Brick Shader to Clone    
Add eightCorners.stl    
Add Material (red) to eightCorners.stl    
Toggle each geometry on and off    
Create assembly with any of these CAD files    
Translate assembly    
Add chrome shader to assembly    
Toggle assembly on and off    

Table 21.9. Dataset (Dataset Dialog)

 WindowsRHEL_4SuSE_32SuSE_64
Add Steady State Data    
Add Dataset 3scl.vtu    
Load dataset    
Translate, rotate and scale dataset    

Table 21.10. Navigation

 WindowsRHEL_4SuSE_32SuSE_64
Translate along all three axes    
Rotate along three axes    
Translation step size slider varies    
Rotation slider varies    
Alternate rotate about users head    
Reset navigation position    

Table 21.11. Record Scene

 WindowsRHEL_4SuSE_32SuSE_64
Create stored scene    
See if it updates the list    
Load stored scene    

Table 21.12. Attributes

 WindowsRHEL_4SuSE_32SuSE_64
Add material to any geometry    
Add shader to geometry    
Change color to geometry    
Change background color    

Table 21.13. Viewpoints

 WindowsRHEL_4SuSE_32SuSE_64
Create 3-6 viewpoints    
Fly to viewpoint    
Save viewpoint    
Load viewpoint    
Delete viewpoint    
Create a flythrough with viewpoints    
Start flythrough    
Change movement speed control    
Stop flythrough    
Delete flythrough    

Table 21.14. User Preferences (these are accessed by going to the File menu, then selecting Preferences, then Xplorer Settings)

 WindowsRHEL_4SuSE_32SuSE_64
Ability to set a preference to have navigation pane open when launched    
Reopen with navigation pane on when launched, with .ves file    
Repeat with changing background color    
Repeat with Shut Down Xplorer option    

VE-Xplorer

Table 21.15. Simple Dataset (located at $INSTALL_DIR/share/vesuite/examples/simple)

 WindowsRHEL_4SuSE_32SuSE_64
Open simple.ves    
Open Visualization Tab    
Select first-scalar    
[Select Scalar Contour Generate] Contour at 45 in X direction    
[Select Scalar Contour Generate] Generate Contour at 45 in Y direction    
[Select Scalar Contour Generate] Generate Contour at 45 in Z direction    
Select steve's_vector    
[Select Vector Contour] Select Advanced    
[Select Vector Contour] Make the vectors more "Dense"    
[Select Vector Contour]    
[Select Vector Contour] Generate Vector at 50 in X direction    
[Select Vector Contour] Generate Vector at 50 in Y direction    
[Select Vector Contour] Generate Contour at 20 in Z direction    
[Select 200_to_1000] Select Isosurface    
[Select 200_to_1000] Select Advanced    
[Select 200_to_1000] Select first-scalar    
[Select 200_to_1000] Compute an isosurface at 35    
[Select Streamlines] Select Seed Points    
[Select Streamlines] Change number of seed points in each direction    
[Select Streamlines] Compute Streamlines    
[Select Streamlines] Select Advanced    
[Select Streamlines] Change the Line Diameter    
[Select Streamlines] Compute Streamlines    
Polydata Datasets    
[Mouse Navigation (Desktop configuration)] Pan    
[Mouse Navigation (Desktop configuration)] Rotate    
[Mouse Navigation (Desktop configuration)] Zoom    
[Mouse Navigation (Desktop configuration)] Display polydata dataset    
Free of coredumps (Check in working dir)    

Table 21.16. Texture Based Datasets

 WindowsRHEL_4SuSE_32SuSE_64
Open sample texture based dataset    
Bring up scalar tools window    
Display with texture scalar range of 41 to 92    
Enable isosurface    
Test timesteps    

Table 21.17. Engine (located at /home/vr/Applications/TSVEG/Test_Data/EngineTest)

 WindowsRHEL_4SuSE_32SuSE_64
Open the EngineTest.ves file    
Open Visualization Tab    
Select Velocity Magnitude scalar    
[Select Scalar Contour] Generate Contour at 45 in X direction    
[Select Scalar Contour] Generate Contour at 45 in Y direction    
[Select Scalar Contour] Generate Contour at 45 in Z direction    
Select Velocity Vector    
[Select Vector] Select Advanced    
[Select Vector] Make the vectors more "Dense"    
[Select Vector]    
[Select Vector] Generate Vector at 50 in X direction    
[Select Vector] Generate Vector at 50 in Y direction    
[Select Vector] Generate Contour at 20 in Z direction    
[Select Streamlines] Select Seed Points    
[Select Streamlines] Change number of seed points in each direction    
[Select Streamlines] Compute Streamlines    
[Select Streamlines] Select Advanced    
[Select Streamlines] Change the Line Diameter    
[Select Streamlines] Compute Streamlines    
[Re-create the EngineTest.ves file on your own](Base this upon the engine.param file)    
[Re-create the EngineTest.ves file on your own] Load in all geometry (translate and scale)    
[Re-create the EngineTest.ves file on your own] Translate and rotate geometry properly    
[Re-create the EngineTest.ves file on your own] Load in dataset    
[Re-create the EngineTest.ves file on your own] Translate and rotate dataset properly    
[Re-create the EngineTest.ves file on your own] Save your created file as [user].ves    
[Re-create the EngineTest.ves file on your own] Exit VE-Suite and re-open with new ves file    
Free of coredumps (Check in working dir)    

VE-Builder

Table 21.18. Simple Datasets (located at /home/vr/Applications/TSVEG/Test_Data)

 WindowsRHEL_4SuSE_32SuSE_64
[StarCD 4.* Dataset] Translate dataset    
[StarCD 4.* Dataset] Preprocess cutting planes    
[StarCD 3.2* Dataset] Translate dataset    
[StarCD 3.2* Dataset] Preprocess cutting planes    
[Fluent (AVS) Dataset] Translate dataset    
[Fluent (AVS) Dataset] Preprocess cutting planes    
[Ensight (ens)] Translate dataset    
[Ensight (ens)] Preprocess cutting planes    
[Ansys Dataset] Translate dataset    
[Ansys Dataset] Preprocess cutting planes    
[Texture Based Dataset] Translate dataset    
[Texture Based Dataset] Preprocess cutting planes    
[REI (BANFDB)] Translate dataset    
[REI (BANFDB)] Preprocess cutting planes    
[Dicom (dcm)] Translate dataset    
[Dicom (dcm)] Preprocess cutting planes    
[MFIX (mfix)] Translate dataset    
[MFIX (mfix)] Preprocess cutting planes    
[Plot3D] Translate dataset    
[Plot3D] Preprocess cutting planes    

Table 21.19. Builder Utilities

 WindowsRHEL_4SuSE_32SuSE_64
These should be tested    
whatIsScalarRange    
vtkTo3DTexture    
removeVtkPointData    
removeVtkCellsOutsideBox    
meshViewer    
mergeVertices    
makeVtkSurface    
createMiniFlowData    
convertVTK2Binary    
convertVTK2Ascii    
convertSurfaceFileToStl    
compareScalars    
combineFluentParticleFile    
appendVTK    
addNormals2Poly    
May still be in use (but do not know what data to test with)    
appendVTK    
combineFluentParticleFile    
Outdated (but keep in build)    
moveFieldToPointData    
convertCellDataToPointData    

Chapter 22. VE-Suite Beginner's Guide

Table of Contents

Getting Started

Getting Started

There are four programs that have to be built and installed to run VE-Suite. Consult Chapter 1, Installation and Setup, for the current version requirements. In order of install they are:

We recommend reading the README files before compiling these programs.

Raw code files for UNIX will generally be in the .tar format. A .tar file has to be unpacked after it is downloaded. For help with this process, refer to the instructions in the VR Juggler tutorial "Getting Started". There is a section on .tar files that lists several different possible commands for the command line invocation. The two most common commands are:

  • gunzip filename.tar.gz

    tar -xvf filename.tar

  • bunzip2 filename.tar.bz2

    tar -xvf filename.tar

You might be asked to download into a source folder but actually install the program into a separate folder. There is a special command that is appended to the compile command that will do this:

--prefix=/directory/to/save/to

The basic compile command itself may be slightly different for various programs.

Once the TAR file has been downloaded and unpacked, you can find which dependencies are already on your system by using the command rpm -qa | grep -i [package] where package is the program name you are looking for.

When you encounter a dependency you do not have, you will have to download, unpack, and install it using the same process as for the earlier programs.

Many installs involve CMAKE, which has its own set of steps.

  1. Go to the code directory

  2. Create a child file

  3. Go in to that child file and type ccmake ../ to compile the file

  4. Type make

  5. Type make install

Some downloads may not be available as compressed files. Occasionally you will have to download code from an SVN server. There is a continuously updated online book that is useful for this.

Chapter 23. Documentation Notes

Table of Contents

Ground Rules

Ground Rules

  • Line length should be limited to 80 characters.

  • Do not use tabs to structure the code. Use 3-4 spaces for each indentation.

  • Always leave one empty line before each comment.

  • Always keep methods in the same order in the header and implementation files.

The commenting style below is designed to allow for automatic generation of documentation using Doxygen, while also maintaining readability. There are different places in code that comments can appear and for each there is a different style. Every method in the header (.h) file must have at least a brief comment; detailed comments are optional. Both brief and detailed comments are described below. Comments will appear in the doxygen-generated HTML files. Documentation in the implementation (.cxx/.cpp) file is primarily for human comprehension.

  • Brief comments

    Brief comments are a single line and are not separated by white space from the code they describe, but are separated by white space if they appear before a detailed comment. For clarity, keep the brief descriptive comment that is written in the header file above each method in the implementation file as well.

    //!A brief comment about this code

    code-code-code-code-code

    //!A brief comment above a detailed comment

    ///////////////////////////////////////////

  • Detailed comments

    Detailed comments are more than a single line and are separated by whitespace above and below.

    //!The method's brief comment

    //////////////////////////////////////////

    /// Detailed comments refer to code below them

    /// may include parameter declarations

    /// may also include lists

    /// ended with more slashes

    //////////////////////////////////////////

    code-code-code-code-code

  • Inner-method comments

    Inner-method comments are any non-code text within a method implementation. Since style dictates that code should not be implemented within the header (.h) file, Inner-method commenting should only appear in the .cpp/.cxx etc. files.

    • Brief inner-method

      As with brief comments, brief inner-method comments should have a line of whitespace before and no whitespace separating them from the code they refer to.

      //Brief Inner-method comment, only a single line

      code-code-code-code-code

    • Detailed inner-method

      As with detailed comments, detailed inner-method comments should have leading and trailing lines of whitespace.

      code-code-code-code-code

      /****************************************************************************//*

      * Detailed inner-method comment, always multiple lines

      * no requirements regarding content

      * also separated by whitespace

      *******************************************************************************/

      code-code-code-code-code

  • Documentation commands

    Documentation commands are generally preceeded with a \ or @ and give doxygen extra information about that particular comment or line. For this format, commands will only appear in detailed comments. There is a complete listing of these commands at the doxygen website. Some of the commonly used commands are:

    • \param --starts a description of a function parameter

    • \return --starts a return value description for a function

    • \class <name> --indicates a comment block contains documentation for a class of "name"

    • \exception <exception-name> --starts a description for a named exception

    • \warning --starts a paragraph where one or more warning messages may be entered

    • \bug --starts a paragraph where one or more bugs may be described

    • \arg --simple one line description of an argument

    • \defgroup <name> (group title) --indicates that a comment block contains documentation for a group of classes, files, or namespaces

    • \ingroup(<groupname>[<groupname><groupname>]) --if the command is place in the comment block of a class, file, or namespace, then it will be added to the group or groups identified by "groupname"

    • \addtogroup <name> [(title)] --defines a group just like \defgroup but in contrast to that command, using the same "name" more than once will not result in a warning, but will cause merged documentation and the first title found in any of the commands. The title is optional, so this command can be used to add a number of entities to an existing group using @{ and @}

    • \weakgroup <name> [(title)] --can be used exactly like \addtogroup but has a lower priority when it comes to resolving grouping definitions

    • \b <word> --displays the word using a bold font

    • \c <word> --displays the word using a typewriter font

    • \e <word> --displays the word in italics

    • \p <word> --displays the word using a typewriter font

    • \code --starts a block of code. It is interpreted as C/C++ code.

    • \endcode --ends a block of code

    • \&, \$,\#,\<,\>,\%,\@,\\ --escape characters to display &,$,#,<,>,%,@,and \ respectvely.

Chapter 24. Using Doxygen

Download/Install

The best information regarding downloading and installing Doxygen can be found here.

Generate Documentation

***For the time being, this applies only to Linux builds*** In your OS terminal, navigate within VE-Suite to the file named doxygen, which will contain all of its doxygen files. The initial part of the filepath will depend on your install, but the end of it will be: <VeSuite filename>/share/docs/doxygen. To make sure that the configuration file exists, type doxygen -g, then type doxygen Doxyfile. This will generate documentation using the default settings. If you wish to create a differently named file to contain documentation settings, this can be accomplished with doxygen -g <filename> and doxygen <filename>. The default in VE-Suite is Doxyfile.

Open the html folder inside doxygen. Find the index.html file. You can click on it to open it in a browser and if you have run doxygen Doxyfile. It will display a hierarchy of documentation for all your generated files.

To edit the settings for the type of documentation that will be created when doxygen is run, read through the Doxyfile. Each variable is commented, and you can edit the values given to those variables in the Doxyfile.

Web References

This website contains a more detailed explanation for creating the configuration file (Doxyfile) and running Doxygen: http://www.stack.nl/~dimitri/doxygen/starting.html

Chapter 25. DocBook Information

Table of Contents

Using DocBook and XMLmind

Using DocBook and XMLmind

This documentation was created using DocBook and the XML editor XMLmind. To use XMLmind:

  1. If Java is already installed on your system, download and install the standard edition of XMLmind free of charge here. If you do not have Java, you can download the standard edition bundled with Java.

  2. Start XMLmind.

  3. Go to the File menu and select New...

The VE-Suite documentation was created as a modular DocBook v5+ document separated by chapter. To create a new chapter, choose Chapter from the DocBook v5+ template list.

User guides and online help for XMLmind can be found here.

The following DocBook manuals are also available free of charge online:

http://www.oreilly.com/catalog/docbook/chapter/book/docbook.html

http://www.sagehill.net/docbookxsl/

See Chapter 10.10, DocBook Documentation, for more DocBook coding guidelines specific to this document.

Part IV. Other Tools

Chapter 26. Using Okino's Polytrans Software

Translating with Modeling in Pro/E

Assembly-level cuts

Features added at the assembly level of the model tree that affect parts' appearance do not translate through PolyTrans. This includes cuts, holes, and welds made at the assembly. The following workarounds are available:

  • Open the affected parts individually and apply the operation necessary to transform the part at the part level

  • Activate the parts and use references in the assembly to cut the parts individually. This method better follows the design intent of the assembly-level operations, but it can cause circular references if it is implemented improperly.

Family tables

Family tables can be used in Pro/E to define parts with repeated features and to define parts in different locations in the same assembly. This can simplify the creation of a large assembly, but problems can arise when the assembly is translated through PolyTrans.

Part appearance

If the appearance if individual parts is dictated by a family table (e.g., a spring's length and compressions are determined by a family table), parts appear in the generic instance in the translation.

A workaround for this problem is to save a copy to a different location and change the name of every part. This strips the family table information from the parts. A backup of the model does not strip the family tables and will not fix the translation problem.

Assembly location

Items can be assembled in location using a family table. This can show two or more locations for an individual item (e.g., a stored location and a use location).

A workaround for this is to open the instance that will be translated and make a backup of this assembly. If two different locations are desired in the translation, make two different backups, one of each location.

Coloration

There are two separate issues with coloration:

  • Items that seem to be colored in Pro/E appear without color in the translation

  • Colors within Pro/E do not appear to match colors within PolyTrans or colors within VE-Suite

No colors within VE-Suite (blinding whiteness)

This is usually a result of coloring at the assembly level. Most models that have this problem do not exhibit whiteness throughout the entire model; they only have a few parts with blinding whiteness.

To fix this, clear all surfaces at the assembly level after saving any colors that you want from the model. Then create a map-key that colors, saves, and closes a part. After the map-key is created, you can color the model by opening each part and activating the map-key.

Colors in Pro/E

Colors in Pro/E do not appear to match the colors within PolyTrans and VE-Suite because the lighting scheme in each program is different. The lighting scheme in Pro/E is relatively easy to change, but there is no known way to save the changes to apply automatically between sessions of Pro/E or to new windows that are opened. Changing the lighting within VE-Suite is much more difficult.

Missing parts

If you have missing parts in your Pro/E assembly, the following steps should solve the problem.

  1. On the Hierarchy Optimizer, press the Option...

  2. Disable the "Delete hidden objects" checkbox

  3. After import, select "Unhide all" from the Edit menu of the "Selector Window" menu. Those items will be on blanked layers according to Granite terminology.

Importing hoses and cables

To import Pro/E hoses or cables, first save the data in the Pro/E neutral format. This format will preserve the hose and cable surfaces so they can be imported into PolyTrans and then into VE-Suite. During the import of the neutral format, choose a fine-grained tessellation so the hoses and cables have a realistic appearance.

Translating with Bentley Software

The best way to import data from Bentley software is to use the u3d file format. This will preserve the hierarchy in the CAD assembly and preserve the BIM data potentially in the Bentley exported data.

Translating with AutoCAD Software

The best file format for working with AutoCAD is the 3D AutoCAD format, or the DWF format. When importing data, uncheck the "import text" option under the Options dialog.

If you do need text imported from the AutoCAD file, choose to export it as text in the osgPTExporter rather than as 3D data.

Translating with JT Files

Always import PMI (Production Manufacturing Information) and use the highest level LOD for most cases. If you need to preserve the CAD hierarchy, do not optimize the hierarchy during import.

Translating with 3DS/Max Files

Be sure to regenerate the normals for the model once it is imported. The lights, animations, and other non-polygonal data will not be exported to OSG, so there is no need to be concerned with importing it.

Chapter 27. Running VE-Suite from the Command Line

Xplorer from the Command Line

Users who want to customize how Xplorer starts can launch it from the command line. Here is how the command should be set up:

  1. ves_xplorer : Executable call. The name may vary, depending on how VE-Suite was built.

  2. -ORBInitRefNameService=corbaloc:iiop:localhost:1239/NameService : CORBA arguments. Xplorer accepts any CORBA arguments passed to it.

  3. /home/users/mgroves/VE-Suite1.0.3/RHEL_4/share/stereo_desktop/desktop.jconf : Juggler configuration files. If a file is passed to Xplorer, it is read as a Juggler configuration file.

  4. -VESDesktop 1280 1024 : Two flags can be set for Xplorer:

    1. -VESDesktop [height][width]: Runs Xplorer in Desktop Mode. [height] and [width] are the screen's dimensions.

    2. -VESCluster [master computer name]: Runs Xplorer in cluster mode. [master computer name] should be the computer name of the master in the graphics cluster.

This method of launching Xplorer is only needed in rare cases.

Chapter 28. Using VE-PSI

The new tools created to integrate VE-Suite will be described in this document. The assumptions are that users have access to Aspen and that they are familiar with general VE-Suite operations.

First, use the instructions outlined in Chapter 3, Creating Content in VE-Suite to launch VE-Suite.

In VE-Conductor, go to the File menu and click on Run ..

Navigate to VE-Suite's bin directory. In Files of type, select Executable files (*.exe), click on ves_psi.exe, and click Open.

In the VE-PSI dialog box that opens, click Start.

VE-Conductor will will display "Successfully registered ASPENUNIT" if everything performed correctly

In the VE-Conductor window, double-click on the Aspen Unit icon to create a plugin.

Right-click on the APPlugin icon, go to Aspen, and click Open.

Ensure that both a .apw and .bkp file have been created, then use the dialog box to load the Aspen Plus project.

Once the project has been chosen, you will see a network diagram of the Aspen flowsheet similar to what you see in Aspen. The Aspen flowsheet will also be displayed and available.

Once you have loaded the Aspen flowsheet, you will be able to work with Aspen through the VE-Suite right-click menus.

The Aspen operation name is shown below.

Figure 28.1. Aspen operation name

Aspen operation name

When you choose to investigate input variables, the parameters dialog allows any variable to be viewed for a specific unit operation and modified. This is also true for the results, except that the user is unable to change the results.

Figure 28.2. Parameters dialog

Parameters dialog

Inputs:

Figure 28.3. Parameters dialog: inputs

Parameters dialog: inputs

Results:

Figure 28.4. Parameters dialog: results

Parameters dialog: results

Once you change an input, the flowsheet can be run in Aspen by right-clicking on the APPlugin in the VE-Conductor network window, selecting Aspen, and clicking Run.

In addition to being able to run the Aspen flowsheet in traditional modes, there is also a three-dimensional mode that can be viewed by going to the VE-Xplorer menu in VE-Conductor, selecting Graphical View, and clicking on Network.

Appendix A. Object-Centered Engineering

Introduction

In object-centered engineering, objects carry with them context and meaning as well as the ability to be modified by the user and should be able to change the way they are represented at run time by manipulating the information they contain. Most of all, an engineering object must have the ability to self-discover and adapt to other objects that may need to exchange information with that particular instance of the object. Information that is exchanged with other objects must be able to be managed internal to an engineering object without outside assistance from the user.

Engineering objects help manage complexity because they manage information in an object-oriented method in that information is grouped based on its physical counterpart. Within engineering objects, even if information is stored within disparate software packages, the user interface into the object is through a single engineering object interface. In addition, the user can decide at what level of immersion he or she wishes to interact with the engineering object.

Implementing Object-Centered Engineering in VE-Suite

Creating an advanced engineering framework based on engineering objects requires the following three tasks to be implemented:

  • Transparent interfaces. A transparent interface results in data independent methods being exposed to the user to enable data from any domain to be passed through the interface. The goal of transparent interfaces is to avoid strong typed methods that are attached to a specific problem domain.

  • Implementation of object-oriented principles. To enable virtualized systems to be created, the methods that enable the objects to be created for this engineering framework will include modularity, hierarchy, abstraction, and design patterns to be utilized with engineering objects. These qualities will be exhibited in the engineering objects constructed here and will be supported by the engineering framework. Through the use of transparent interfaces, modularity, hierarchy, abstraction, and design, patterns can be implicit in terms of the capability that the framework can support.

  • Emergent behavior. TThe engineering framework will enable emergent behavior in two ways. First, the structure of the information that is received by the computational units and by the core engines will provide key reference data so that UIs can be constructed, three-dimensional graphical representations can be constructed, and computational units can gain information about what is upstream or downstream of them without user intervention. Second, any computational unit will be able to query the rest of the virtual environment for data if the respective unit requires other inputs to perform its tasks. This querying capability also occurs without user input and enables the computational unit to exhibit some autonomous behavior.

The core components of VE-Suite require several changes to support these tasks. These needs will be met through the extension of the current VE-Open CORBA interface, implementation of an XML Schema and respective API, and extension of VE-Xplorer to support the display of engineering objects in a virtual world. Other changes will be made to VE-Conductor and VE-CE.

XML schemas provide the basic structure by which information can be transferred within the VE-Suite engineering framework. While the ontology provides the broad framework that computers use to classify information sources without human input, the schema provides the means by which the data can be packaged to hold the information provided by a particular source. For example, the ontology defines an object that can be a human or an information provider. These objects, when broken down into an XML document, would be composed of veDataValuePairs and other veXMLObjects, described below. An example of such a document will be illustrated below, but first the basic XML elements that compose the description of an object will be described.

The schema is composed of a few key XML element types. The first type is the veXMLObject element:

<xs:complexType name="veXMLObject"> 
      <xs:attribute name="objectType" type="xs:string" use="optional" /> 
      <xs:attribute name="id" type="xs:ID" use="optional" /> 
</xs:complexType>

This element type is the basis for all other elements within the VE-Open schema, enabling any other element type within the schema to be embedded or referenced in a generalized manner. This enables abstraction, hierarchy, and modularity to be embedded in the schema and is the enabling factor for these qualities to be present in the objects that the XML schema describes. Although a formality, this element type enables the logic to be complete when embedding and referencing derived veXMLObjects in other element types. The functionality that veXMLObject enables will be illustrated below in veCommand. The veCommand is the element type that is passed in the Query functions described earlier.

The second element type is the veDataValuePair:

 <xs:complexType name="vecommand"> 
    <xs:complexContent> 
       <xs:extension base="veXMLObject"> 
          <xs:sequence> 
             <xs:element name="command" type="xs:string" /> 
             <xs:element name="parameter" type="veDataValuePair" minOccurs="0" maxOccurs="unbounded" /> 
          </xs:sequence> 
       </xs:extension> 
   </xs:complexContent> 
</xs:complexType>

The veDataValuePair type holds a descriptive name about the data it contains as well as a veXMLObject or raw xs:anyType. This flexibility enables veDataValuePair to be a generic container element that holds any form of data being processed by a particular object. Note that a veDataValuePair is a complete extension of a veXMLObject. This extension permits a veDataValuePair to be embedded within another veDataValuePair.

The third element type is veCommand:

 <xs:complexType name="vecommand"> 
    <xs:complexContent> 
       <xs:extension base="veXMLObject"> 
          <xs:sequence> 
             <xs:element name="command" type="xs:string" /> 
             <xs:element name="parameter" type="veDataValuePair" minOccurs="0" maxOccurs="unbounded" /> 
          </xs:sequence> 
       </xs:extension> 
    </xs:complexContent> 
 </xs:complexType>

This element type contains a descriptive name for the command in addition to an xs:sequence of veDataValuePairs. The command is constructed to enable any object to request or send a series of veDataValuePairs with information about the potential application of the data contained within. Because a veDataValuePair can contain any veXMLObject that is derived for the VE-Open XML schema, a veCommand can be used as the overall container to transmit information about objects and the attributes used to describe them. This information is transferred in the Query methods and the SetNetwork functions.

The previous three elements described (i.e., veXMLObject, veDataValuePair, veCommand) are the core building blocks of the VE-Open XML schema. Each of the following elements described will use the key elements in the construction of the descriptors for an object. veParameterBlock is a general component that contains information about general information sources within VE-Suite:

<xs:complexType name="veParameterBlock"> 
    <xs:complexContent> 
       <xs:extension base="veXMLObject"> 
          <xs:sequence> 
             <xs:element name="blockID" type="xs:unsignedInt" maxOccurs="1" minOccurs="1" /> 
             <xs:element name="blockName" type="xs:string" /> 
             <xs:element name="transform" type="veTransform" minOccurs="0" maxOccurs="1" /> 
             <xs:element name="properties" type="veDataValuePair" minOccurs="0" maxOccurs="unbounded" /> 
          </xs:sequence> 
       </xs:extension> 
    </xs:complexContent> 
 </xs:complexType>

An example of a parameter block would be a reference to a VTK dataset. The property element is configured to maintain a list of custom elements for describing a particular information source. This list of elements may also contain a list of hardware specifications for a sensor array or for a CFD solver configuration.

CADNode describes the geometrical representations that are stored for a particular object.

<xs:complexType name="CADNode">
    <xs:complexContent>
      <xs:extension base="veXMLObject">
        <xs:sequence>
          <xs:element name="parent" type="CADAssembly" maxOccurs="1" minOccurs="0" />
          <xs:element name="transform" type="veTransform" minOccurs="1" maxOccurs="1" />
          <xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1" default="Assembly" />
          <xs:element name="type" type="xs:string" />
          <xs:element name="attribute" type="CADAttribute" maxOccurs="unbounded" minOccurs="0" />
          <xs:element name="activeAttributeName" type="xs:string" />
          <xs:element name="animation" type="CADNodeAnimation" />
        </xs:sequence>
        <xs:attribute name="visiblility" type="xs:boolean" />
        <xs:attribute name="physics" type="xs:boolean" />
        <xs:attribute name="opacity" type="xs:double" use="optional" default="1.0" />
        <xs:attribute name="makeTransparentOnVis" type="xs:boolean" default="true" />
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

The CADNode contains two unique features. First, the CADNode does not maintain its own geometrical information, but references a file that contains this information. Second, the element can contain information about how to apply high-fidelity lighting capabilities. These are stored in the attribute element. This element contains a CADAttribute, which maintains a GLSL program embedded in the CADAttribute.

The following veXMLObjects will be described to provide context for the XSLT example that follows. These elements are used to construct the connectivity between virtual objects that are modeled in a system. The first element examined is a vePoint:

<xs:complexType name="vePoint">
    <xs:complexContent>
      <xs:extension base="veXMLObject">
        <xs:attribute name="xLocation" type="xs:unsignedInt" use="required"/>
        <xs:attribute name="yLocation" type="xs:unsignedInt" use="required"/>      
      </xs:extension>
    </xs:complexContent>
</xs:complexType>

A vePoint is primarily used by the software within VE-Suite that renders graphical representations of the network schematic for the system under review. vePoint is composed of two unsigned integers representing the X and Y locations of the point. Data types for a point are unsigned integers so that graphical widgets libraries can easily render the point location. Graphical widgets libraries typically work in whole numbers rather than decimal values. The second element utilizes vePoint and is a veLink:

<xs:complexType name="veLink">
    <xs:complexContent>
      <xs:extension base="veXMLObject">
        <xs:sequence>
          <xs:element name="fromModule" type="veDataValuePair"/>
          <xs:element name="toModule" type="veDataValuePair"/>
          <xs:element name="fromPort" type="xs:unsignedInt"/>
          <xs:element name="toPort" type="xs:unsignedInt"/>
          <xs:element maxOccurs="unbounded" minOccurs="2" name="linkPoints" type="vePoint"/>
        </xs:sequence>
        <xs:attribute name="name" type="xs:string" use="required"/>
        <xs:attribute use="optional" type="xs:string" name="type"/> 
      </xs:extension>
    </xs:complexContent>
</xs:complexType>

A veLink is composed of the necessary components to link one system component to another. The descriptors for the two modules that the link couples are fully described in addition to the necessary information to draw the link. This choice was made so that, upon obtaining the link, the software would not only be able to describe the information in the link, but would also be able to draw it.

The third element for a network description in VE-Suite is the veNetwork:

<xs:complexType name="veNetwork">
    <xs:complexContent>
      <xs:extension base="veXMLObject">
        <xs:sequence>
          <xs:element maxOccurs="unbounded" minOccurs="0" name="link" type="veLink"/>
          <xs:element maxOccurs="6" minOccurs="6" name="conductorState" type="veDataValuePair"/>
          <xs:element maxOccurs="unbounded" minOccurs="0" name="tag" type="veTag"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

It should be noted that the veNetwork element is relatively simple, but builds on the previous two elements for full description. A series of links composes veNetwork and provides information about how the network should be rendered by VE-Suite’s rendering software. veNetwork is essentially a graph composed of edges (e.g., veLinks) and vertices (e.g., veModels). The representation of veNetwork follows closely on that defined by the DOT language utilized by GraphViz. While the DOT language is not utilized internally by VE-Suite, this task remains as future work to leverage the DOT language in addition to the use of the Boost Graph Language. These tools enable VE-Suite to use graph decomposition algorithms and detection algorithms to determine disconnected and feedback sections of graphs.

As noted previously, the veModel represents the nodes on the graph. The veModel builds on all of the previous elements and has the main responsibility for containing the inputs, outputs, CAD, and raw stream data for a particular model representation. The veModel is the data container for an object. In reference to the classification of objects, the veModel contains the raw data that would tell other objects about itself. In addition to containing the object’s raw representational data, the veModel can also contain a veSystem, which will be described later. The purpose of this embedded element is to provide the user with the ability to:

  • Create a hierarchical assembly of complex objects

  • Embed a third-party solver into a broader simulation

This capability provides one of the main components that enable the core VE-Suite software framework to support a broad range of problem domains.

  <xs:complexType name="veModel">
    <xs:complexContent>
      <xs:extension base="veXMLObject">
        <xs:sequence>
          <xs:element maxOccurs="unbounded" minOccurs="0" name="ports" type="vePort"/>
          <xs:element maxOccurs="1" minOccurs="1" name="iconLocation" type="vePoint"/>
          <xs:element maxOccurs="1" minOccurs="0" name="icon" type="xs:string"/>
          <xs:element maxOccurs="unbounded" minOccurs="0" name="results" type="vecommand"/>
          <xs:element maxOccurs="unbounded" minOccurs="0" name="inputs" type="vecommand"/>
          <xs:element maxOccurs="unbounded" minOccurs="0" name="informationPackets"
            type="veParameterBlock"/>
          <xs:element name="geometry" type="CADNode"/>
          <xs:element maxOccurs="1" minOccurs="0" name="modelAttributes" type="vecommand"/>
          <xs:element maxOccurs="1" minOccurs="0" name="modelSubSytem" type="veSystem"/>
        </xs:sequence>
        <xs:attribute name="vendorID" type="xs:string" use="required"/>
        <xs:attribute name="name" type="xs:string" use="required"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

The key components in the veModel element are the veParameterBlock, CADNode, vecommand, and veSystem elements. These elements provide the necessary information for each core software engine in VE-Suite to produce the proper representation for the object. For example:

  • If an object does not have CAD data, then nothing is rendered for the object.

  • If the object does not have outputs, then other objects will not be able to gather data from it.

The attribute element within the veModel contains the classification data for other objects to determine how to handle data from a particular object. Currently, the classification data is limited and further implementation is left for future research.

The veSystem element is the overall element that links the disparate veModel and veNetwork elements. It is also the main element that is saved when writing out a ves file (i.e., the DOMDocument storing all of the objects) from VE-Suite. In addition to establishing a relationship between veNetwork and veModel, it also enables systems to be embedded within models. This element provides the capability to construct complex engineering objects within VE-Suite.

<xs:complexType name="veSystem">
    <xs:complexContent>
      <xs:extension base="veXMLObject">
        <xs:sequence>
          <xs:element type="veModel" maxOccurs="unbounded" minOccurs="1" name="model"> </xs:element>
          <xs:element type="veNetwork" minOccurs="1" maxOccurs="1" name="network"> </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

The veSystem element also provides the foundation to link multiple third-party solvers together. For example, when integrating an Aspen Plus flowsheet with another solver, the Aspen Plus solver and the other solver each looks like a single system to the VE-CE. Within each of the systems may reside complex subsystems, which are handled by their respective solvers. Any subsystem corresponds to a single computational unit connected to the VE-CE, which does not mean that subsystems cannot be broken in terms of information transfer across subsystem boundaries.

VE-Conductor

The changes in VE-Conductor enable real-time information retrieval and queries from the computational units connected to VE-CE. Because of these changes, the user can query a unit for subsystem information from a third-party embedded network solver. The user can query for input and result parameters from any computational unit attached to VE-CE. The results and input data are provided in a browser-like user interface to handle display and editing for query-enabled units. A developer can override this base functionality with a specific plugin to handle the respective query-enabled unit. As noted previously, the unit-specific data is all accessed in real time by the user. This enables the user to edit and interact with the system under investigation in the three-dimensional environment created through VE-Suite while simultaneously interacting with a computational unit to make low-level changes to the flowsheet. This workflow is possible through the implementation of the query interfaces in VE-Suite.

VE-CE

The changes to VE-CE have turned it into a data proxy that is responsible for scheduling the execution of various units and the transfer of information and queries between units. This enables VE-CE to be run on a low-powered gateway computer, even when the network data is large and must be passed through the VE-CE interfaces. This design is beneficial because it enables the computational units and VE-Conductor to be run anywhere on the Internet and to interact transparently through a firewall. In addition, it enables VE-CE to promote emergent behavior within the computational units by proxying the data without encumbering the user with those requests. When operating with a process simulator as one of the units in the VE-Suite framework, VE-CE passes commands from the user through to the respective unit. The unit is then responsible for sending the information on to the respective software package.

As revised, VE-CE will not store unit input parameters as it did before; rather, VE-CE only parses the top-level system. Subsystem elements are assumed to be subsystems that will be managed by their respective units. This design enables VE-CE to scale as the subnetworks within a simulation expand. However, there is still not a direct link between VE-Conductor and the computational unit. VE-CE is the proxy for all calls.

Computational Unit

The changes to the computational unit support a command-driven software interface through the implementation of unit wrappers to accept an XML-formatted command through the query interface:

string Query(in string commands) 

The computational unit parses the XML command sent from the VE-CE and extracts the command element to determine what is needed by the engineer. For each predefined command, a command handler is implemented to perform the specified action. Following is a list of current predefined commands supported by computational units. This list will expand as needed in the future.

  • "getNetwork" retrieves the flowsheet information from a third-party solver so VE-Suite can draw the network and enable the user to query individual unit operations for results information

  • "getModuleParamList" returns the list of available parameters for a given unit operation

  • Once the user has chosen a specific parameter, the properties for that variable are queried via the "getParamProperties" command and displayed to the engineer

Appendix B. Quickstart Guide

Getting Started with VE-Suite

To install VE-Suite:

  1. Run the dependencies installer (vesuite_deps1.1.7.exe) and make a note of the folder

  2. Run the VE-Suite installer (vesuite1.1.7_11671.exe) and make a note of the folder location

Note: You will need to know the folder locations later, so be sure to remember them or write them down.

To start VE-Launcher:

  1. Double-click on the VE-Suite shortcut, which will be located on the desktop after VE-Suite is installed

  2. Point VE-Launcher to its dependencies. This directory should be named VE_Suite.#.#_Dependencies

  3. Once you have set the dependencies directory, click OK to open the VE-Suite Launcher window

  4. Click the Launch VE-Suite ubtton to start VE-Suite

Note: You can find more information about VE-Launcher's settings in Chapter 12 of the VE-Suite documentation.

To view sample data in VE-Suite:

  1. Click on the File menu, then click Open ...

  2. Navigate to the VE-Suite install location, then to the share/vesuite/examples/simple directory

  3. Click on simple.ves to select it, then click Open to load it in VE-Suite. If the scene is not initially visible, hold down the right mouse button and drag up in the VE-Xplorer window to pull the camera back.

Loading Data and Connecting

To create a new plugin:

  1. Use VE-Launcher to start VE-Suite, or click on the New Document button to clear the design space

  2. Double-click on the Available Plugins folder in the VE-Conductor Network window

  3. Double-click on the DefaultPlugin folder that appears below the Available Plugins folder

  4. Right-click on the gray DefaultPlugin box that appears in the pane on the right side of the Available Objects window to access the plugin's menu, and select the Geometry Config option

  5. A new window, the CADTree Manager, will open on the design canvas. To select a geometry file, right-click on the Model_Geometry icon in the canvas and select Add Node..., then Load CAD file...

  6. Another window will open. Choose the file type, then select the file and click Open

  7. Name the object you loaded, then click OK to insert it into the plugin

  8. Click Close on the CADTree Manager

  9. To load the information for the plugin's node into the rest of VE-Suite, click on the Connection menu and then on Submit Job

The starting logo in VE-Xplorer should be replaced by the objects in the plugins you submitted. If you cannot see the objects you loaded, hold down the right mouse button and drag up inside the VE-Xplorer window to pull back the camera. Continue doing so until you can see the scene.