Defining data: Preliminary notes

 

In this page some important basic guidelines on how ParaGeo works at most basic level in terms of reading and processing data are provided.

 

 

Introduction to ParaGeo data structures and keywords

 

In ParaGeo data files the data defining the model geometry, boundary conditions, material properties, etc is organized in data structures. For example if you have a look at Nodal_data defined at the end of the data file the adopted terminology is as follows:

 

Data File


 

* Nodal_data  

 node_numbers IDM=4

    1  2  3  4

 coordinates IDM=3 JDM=4

/X/   /Y/  /Z/

 0.0   0.0  0.0 ! node 1

 1.0   0.0  0.0 ! node 2

 1.0  10.0  0.0 ! node 3

 0.0  10.0  0.0 ! node 4

 

Nodal_data is the data structure. When defining data structures in ParaGeo they should be preceded by a * and a space. In the ParaGeo Reference Manual section each of the lowest level pages describe usage of the available data structures and their corresponding keywords.

 

Node_numbers and coordinates are the defined keywords within Nodal_data data structure. In every data structure reference manual page a description of all available keywords and options to that specific data structure is provided.

 

Node_numbers is a keyword used to specify the node ID numbers and in this example it has dimension 4 (IDM=4) as four nodes/points are defined. Nodes are numbered 1, 2, 3 and 4 correspondingly.

 

Coordinates keyword is used to define the coordinate for each of the 4 previously defined nodes. It has dimensions 3x4 (IDM=3 and JDM=4) where 3 are the number of columns (corresponding to the X, Y and Z coordinates) and 4 are the number of rows (one per each node).

 

 

It should be noted that some data structure types may be required to be defined more than once and hence they should be assigned a unique ID number (otherwise the last specified will overwrite the previous ones). Note that for data structures in which ID number is not specified, it is assumed NUM=0. In the present datafile there are 4 Geometry_line data structures each one with their own ID number:

 

Data File


 

* geometry_line  NUM=1  

 line_type      1    

 points     IDM=2

   1  2  

 

* geometry_line  NUM=2

 line_type      1    

 points     IDM=2

   2  3  

 

* geometry_line  NUM=3

 line_type      1    

 points     IDM=2

   3  4  

 

* geometry_line  NUM=4

 line_type      1    

 points     IDM=2

   4  1  

 

Four lines are defined with their unique ID number 1, 2, 3 and 4 defined via NUM=1, NUM=2, NUM=3 and NUM=4.

 

If the ID number for Geometry_line NUM=2 is changed to NUM=1, line 1 data will be overwritten and there will be only 3 lines defined.

 

 

 

 

Comments in the data file

 

There are special characters which allow to introduce comments into the data file. Those comments are ignored by the code so they are not processed. Here in the manual comments appear green coloured. The characters that allow to introduce comments are:

! which defines the end of a code line and the start of the comment so that everything to the right of the ! character will be ignored

/ / which define start and end of a comment, so that everything written in between will be considered a comment and hence not processed by the code (note that everything to the right of the second / character will be processed.

 

 

 

 

Simulation stages in ParaGeo

 

In ParaGeo the data structure Control_data defines the end (and duration) of a simulation stage (in addition to allow defining data for the time step, convergence tolerances, output of plot files, etc). Hence, more than one Control_data data structure is often defined in ParaGeo data files. For example in models considering basin evolution over geological time scales every deposition / erosion event is happening in a different simulation stage and hence it should have defined its corresponding Control_data.

 

The way ParaGeo processes the data defined in the data files is as follows:

1.All the data defined before the first Control_data structure is read and processed.

2.The simulation of the first stage is performed (duration / finalisation time defined in the first Control_data).

3.Then all the data specified between the first and second Control_data data structures is read and processed.

4.The simulation continues by performing  the second stage (duration / finalisation time defined in the second Control_data).

5.Repeat steps 3 and 4 for every simulation stage until the last Control_data structure.

 

Note that data defined in a given stage will be applied in such stage and will remain active until the end of the simulation (end of last stage) unless the data is specifically deactivated or overwritten later (exceptions to this will be indicated in the corresponding manual reference pages).

 

Note that any geometry entity data in ParaGeo format defined in the data file must be defined at the end of the data file after the END DATA command, whereas data relative to defining the simulation will be defined before the END DATA command.

 

 

Data File


 

 

! Data for simulation stage 1

 

 

* Control_data

! ===================================

 Control_title   "Stage01"

 Duration              1.0

 

 

 

 

! Data for simulation stage 2

 

 

* Control_data

! ===================================

 Control_title   "Stage02"

 Duration              1.0

 

 

 

END DATA

 

 

! Definition of geometry entity data

 

 

 

Data defining geometry entities (i.e. Nodes, Lines, Surfaces and Volumes) is defined after END DATA.

 

Data relative to the simulation is defined before the END DATA command.

 

 

 

 

Overwriting data at later simulation stages

 

In a given simulation stage it is possible to overwrite data defined in previous stages (e.g. to update conditions through the simulation). This requires a given data structure type (e.g. Time_curve_data), with a given ID number and given Name to be re-defined in a later stage with the updated data (but maintaining the same ID number and Name). This is illustrated in the example below.

 

 

Data File


 

! Simulation stage 1

 

* Global_loads                     NUM=1

! ----------------------------------------

 Name                   "Displacement"

 Prescribed_displacement  IDM=2  JDM=1

  /set1/   0.0   -2.0

 Pres_displacement_geom_set  IDM=1

   "Top"

 Pres_displacement_geom_ass  IDM=1

   1

 

* Time_curve_data                NUM=1

! ----------------------------------------

 Name                   "Disp_curve"

 Time_curve   IDM=3

   0.0      1.0     2.0

 Time_factor  IDM=3

   0.0      1.0     0.8

 

 

* Control_data

! ===================================

 Termination_time              1.0

 

 

 

 

! Simulation stage 2

 

* Time_curve_data                NUM=1

! ----------------------------------------

 Name                   "Disp_curve"

 Time_curve   IDM=2

   1.0     2.0

 Time_factor  IDM=2

   1.0     5.0

 

 

* Control_data

! ===================================

 Termination_time              2.0

 

The present example considers two stages terminating at times 1.0 and 2.0 as specified in the corresponding Control_data structures (note that the rest of the data specified within Control_data structure is omitted for the sake of clarity).

 

The Global_loads data structure may define different types of boundary conditions (displacement loads, stress loads, pore pressure loads, etc). In the present example, a downward vertical displacement of 2 m is prescribed on the top surface line (which is named "Top"). Note that the negative sign indicates that the displacement will be in the downward direction.

 

Every Global_loads data structure requires definition of an associated Time_curve_data data structure which is linked by sharing the same ID number. Thus, Time_curve_data NUM=1 will be associated to Global_loads NUM=1, Time_curve_data NUM=5 to Global_loads NUM=5, etc.  Such Time_curve_data defines the timing, rate and magnitude for application of the associated load.

 

The Time_curve_data NUM=1 defined before the first Control_data (first simulation stage) specifies that the displacement load will be ramped up from t=0 to t=1 and then will be decreased to 80 % from t=1 to t=2 (note that the values in Time_curve define specific times and values in Time_factor define multiplication factors at such times for the loading defined). Therefore unless the data is overwritten in subsequent stages at t=2 the displacement would be -1.6 m.

 

In this case however Time_curve_data NUM=1 is re-specified in the second simulation stage (after the first Control_data) and hence the previously defined data will be overwritten. Consequently the current case will actually consider application of a vertical downward displacement of -2 m during the first stage (from t=0 to t=1) and the displacement will be increased from -2 m to -10 m during the second stage (from t=1 to t=2).

 

 

 

Also it should be recalled that most data structures if not overwritten or deactivated in subsequent simulation stages will remain active until the end of the simulation. Let us illustrate this scenario with an example:  

 

 

Data File


 

! Simulation stage 1

 

* Global_loads                     NUM=1

! ----------------------------------------

 Name                   "Displacement"

 Prescribed_displacement  IDM=2  JDM=1

  /set1/   0.0   -2.0

 Pres_displacement_geom_set  IDM=1

   "Top"

 Pres_displacement_geom_ass  IDM=1

   1

 

* Time_curve_data                NUM=1

! ----------------------------------------

 Name                   "Disp_curve"

 Time_curve   IDM=2

   0.0      1.0  

 Time_factor  IDM=2

   0.0      1.0      

 

 

* Control_data

! ===================================

 Termination_time              1.0

 

 

 

! Simulation stage 2

 

 

* Control_data

! ===================================

 Termination_time              2.0

 

In this case Time_curve_data NUM=1 is specified in the first stage only. This case would result in a vertical downward displacement of -2 m during the first stage (from t=0 to t=1) that will be kept constant during the second stage (from t=1 to t=2).

 

 

 

 

Support and displacements

 

As seen in the previous section Global_loads is a data structure that may be used to prescribe some boundary conditions such as displacement, stress, pore pressure or temperature loads among others. However definition of the Global_loads data structure is not sufficient to impose such conditions, definition of the following data is also required:

 

1.Load_case_control_data which is used to define which Global_loads in the data file are active during the simulation and which are not.

 

2.The corresponding Time_curve_data defining the loading rate and magnitude.

 

3.For displacements, pore pressure and temperature definition of the corresponding constraints in Support_data is also required. Support_data is a data structure which is used to define whether a degree of freedom (i. e. displacements in each direction, pore pressure and temperature) for a given geometry entity is prescribed or not. If a degree of freedom is defined prescribed in Support_data but no Global_loads data structure is defined specifying the prescribed value for such degree of freedom the prescribed value will be 0. On the other hand if a Global_loads data structure prescribing a value for a given degree of freedom is defined, the load is defined as active in Load_case_control_data but if the degree of freedom is not defined in Support_data the load will not have any effect at all.

 

Let us illustrate that with an example:

 

Data File


 

* Support_data

! ----------------------------------------

Displacement_codes  IDM=3 JDM=4

  /Set1/ 1 0 0

  /Set2/ 0 1 0

  /Set3/ 0 0 1

  /Set4/ 1 1 0

 Displacement_code_geom_set IDM=2

  "Top"

  "Left_boundary"

 Displacement_code_geom_ass IDM=2

  2  1

 

 

* Global_loads                     NUM=6

! ----------------------------------------

 Name              "Displacement_load"

 Prescribed_displacement  IDM=2  JDM=1

  /set1/   5.0   -2.0

 Pres_displacement_geom_set  IDM=1

   "Top"

 Pres_displacement_geom_ass  IDM=1

   1

 

* Time_curve_data                NUM=6

! ----------------------------------------

 Name                   "Disp_curve"

 Time_curve   IDM=2

   0.0    1.0    

 Time_factor  IDM=2

   0.0    1.0    

 

* Load_case_control_data

! ---------------------------------------

 Loadcases IDM=1

  6

 Active_load_flags IDM=1

  2

 

The Support_data structure is defined in order to define displacement constraints.

 

First the Displacement_codes keyword is use to define several combinations of displacement fixities that later can be assigned to geometry entities. Each column corresponds to each of the displacement directions X, Y and Z. A value of 1 means that displacement is prescribed in such direction whereas a value of 0 means that displacement is free. Thus the displacement code set number 4 (fourth row) for example defines that displacements in X and Y directions are prescribed whereas displacements in Z direction are unconstrained.

 

Then the Displacement_code_geom_set is used to list the geometry sets (sets or individual geometry entities) to which a displacement code set will be assigned and Displacement_code_geom_ass keyword is used to assign the displacement code set by number to each of the listed geometry sets. In this case the "Top" geometry set is assigned displacement code number 2 which constrains displacements in Y direction whereas geometry set "Left_boundary" is assigned displacement code number 1 which constrains displacements in X direction.

 

A Global_loads data structure and its corresponding Time_curve_data (both have ID number 6) are defined prescribing a displacement of 5.0 m in the X direction and a downward displacement of 2.0 m in the Y direction for the "Top" geometry set.

 

Furthermore the load number 6 is defined as active in the Load_case_control_data. The Loadcases keyword is used to list all global loads data structures (by ID number) that will be assigned a state and Active_load_flags keyword is used to assign a state via a flag to each listed global load where a flag of 0 means Inactive and a flag of 2 means active.

 

However given that for the "Top" geometry set only displacement constraints in the Y direction were defined in Support_data the 5.0 m displacement in X direction will not have any effect. Consequently the "Top" boundary will only be prescribed a downward displacement of 2.0 m in the Y direction.

 

 

As already mentioned the Time_curve_data defines the loading rate via definition of a Time - Multiplication Factor curve for the corresponding load. Hence it should be noted that the data in the two examples below on the left and right is equivalent:

 

Data File 1

Data File 2

 

* Global_loads                     NUM=1

! ----------------------------------------

 Name              "Displacement_load"

 Prescribed_displacement  IDM=2  JDM=1

  /set1/   0.0   -10.0

 Pres_displacement_geom_set  IDM=1

   "Top"

 Pres_displacement_geom_ass  IDM=1

   1

 

* Time_curve_data                NUM=1

! ----------------------------------------

 Name                   "Disp_curve"

 Time_curve   IDM=2

   0.0    1.0    

 Time_factor  IDM=2

   0.0   1.0    

 

 

* Global_loads                     NUM=1

! ----------------------------------------

 Name              "Displacement_load"

 Prescribed_displacement  IDM=2  JDM=1

  /set1/   0.0   1.0

 Pres_displacement_geom_set  IDM=1

   "Top"

 Pres_displacement_geom_ass  IDM=1

   1

 

* Time_curve_data                NUM=1

! ----------------------------------------

 Name                   "Disp_curve"

 Time_curve   IDM=2

   0.0     1.0    

 Time_factor  IDM=2

   0.0   -10.0    

 

 

The method on the right (Data file 2) is generally more convenient as it allows to define in a more straightforward way transient boundary conditions by input of the load magnitude  at each time directly on the Time_factor data. See for example the case below:

 

 

Data File


 

* Global_loads                     NUM=1

! ----------------------------------------

 Name              "Displacement_load"

 Prescribed_displacement  IDM=2  JDM=1

  /set1/   0.0   1.0

 Pres_displacement_geom_set  IDM=1

   "Top"

 Pres_displacement_geom_ass  IDM=1

   1

 

 

* Time_curve_data                NUM=1

! ----------------------------------------

 Name                   "Disp_curve"

 Time_curve   IDM=8

   0.0   0.5   0.8   1.0   1.5   2.5   3.0   5.0    

 Time_factor  IDM=8

   0.0   0.5   2.0   5.0   6.0   6.5   6.5   5.0    

 

In this case it is more convenient to define a load of 1.0 in Global_loads and define the actual displacement magnitude at every time in the Time_curve_data rather than defining a displacement magnitude of 5.0 for example and specify the percentage of such loading at every time.

Intro_003

 

 

 

After the initial guidelines provided, in the next tutorial page the data file Intro_001_Case01.dat is described.