# gmtflexure¶

Compute flexural deformation of 2-D loads, forces, and bending moments

## Synopsis¶

**gmt flexure** **-D***rm*/*rl*[/*ri*]/*rw*
**-E***Te*[**k**]|*D*|*file*
**-Q***args*
[ **-A**[**l**|**r**]*bc*[/*args*] ]
[ **-C****p**|**y***value* ]
[ **-F***force* ]
[ **-L** ]
[ **-M**[**x**][**z**] ]
[ **-S** ]
[ **-T***wfile*]
[ **-V**[*level*] ]
[ **-W***wd*[**k**]]
[ **-Z***zm*[**k**]]
[ **-bi**binary ]
[ **-bo**binary ]
[ **-d**[**+c***col*]nodata ]
[ **-e**regexp ]
[ **-h**headers ]
[ **-i**flags ]
[ **-o**flags ]
[ **--PAR**=*value* ]

**Note:** No space is allowed between the option flag and the associated arguments.

## Description¶

**flexure** computes the flexural response to 2-D loads using a range
of user-selectable options, such as boundary conditions, pre-existing
deformations, variable rigidity and restoring force, and more. The solutions
are obtained using finite difference approximations to the differential
equations.

## Required Arguments¶

**-D***rm*/*rl*[/*ri*]/*rw*Sets density for mantle, load, infill (optionally, otherwise it is assumed to equal the load density), and water. If

*ri*is not given then it defaults to*rl*.

**-E***Te*[**k**]|*D*|*file*Sets the elastic plate thickness (in meter); append

**k**for km. If the elastic thickness exceeds 1e10 it will be interpreted as a flexural rigidity*D*instead (by default*D*is computed from*Te*, Young’s modulus, and Poisson’s ratio; see**-C**to change these values). Alternatively, supply a*file*with variable plate thicknesses or rigidities. The file must be co-registered with any file given via**-Q**.

**-Qn**|**q**|**t**[*args*]Sets the vertical load specification. Choose among these three options:

**-Qn**means there is no input load file and that any deformation is simply driven by the boundary conditions set via**-A**. If no rigidity or elastic thickness file is given via**-E**then you must also append arguments to create the locations used for the calculations; for details on array creation, see Generate 1D Array.**-Qq**[*loadfile*] is a file (or stdin if not given) with (x,load in Pa) for all equidistant data locations. Finally,**-Qt**[*topofile*] is a file (or stdin if not given) with (x,load in m or km, positive up); see**-M**for topography unit used [m].

## Optional Arguments¶

**-A**[**l**|**r**]*bc*[/*args*]Sets the boundary conditions at the

**l**eft and**r**ight boundary. The*bc*can be one of four codes: 0 selects the infinity condition, were both the deflection and its slope are set to zero. 1 selects the periodic condition where both the first and third derivatives of the deflection are set to zero. 2 selects the clamped condition where*args*(if given) sets the deflection value [0] (and its first derivative is set to zero), while 3 selects the free condition where*args*is given as*moment*/*force*which specify the end bending moment and vertical shear force [0/0]. Use SI units for any optional arguments.

**-C****p**|**y***value*Append

**p**or**y**to change the current value of Poisson’s ratio [0.25] or Young’s modulus [7.0e10 N/m^2], respectively.

**-F***force*Set a constant horizontal in-plane force, in Pa m [0].

**-L**Use a variable restoring force that depends on sign of the flexure [constant].

**-M**[**x**][**z**]Optionally append one or both of

**x**and**z**: Use**x**to indicated that all x-distances are in km [meters] and**z**to indicate that all z-deflections are in km [meters].

**-S**Compute the curvature along with the deflections and report them via the third output column [none].

**-T***wfile*Supply a file with pre-existing deformations [undeformed surface].

**-V**[*level*]Select verbosity level [

**w**]. (See full description) (See cookbook information).

**-W***wd*[**k**]Specify water depth in m; append

**k**for km. Must be positive [0]. Any subaerial topography will be scaled via the densities set in**-D**to compensate for the larger density contrast with air.

**-Z***zm*[**k**]Specify reference depth to flexed surface in m; append

**k**for km. Must be positive [0]. We add this value to the flexed surface before output.

**-bi***record*[**+b**|**l**] (more …)Select native binary format for primary table input.

**-bo***record*[**+b**|**l**] (more …)Select native binary format for table output.

**-d**[**i**|**o**][**+c***col*]*nodata*(more …)Replace input columns that equal

*nodata*with NaN and do the reverse on output.

**-e**[**~**]*“pattern”*|**-e**[**~**]/*regexp*/[**i**] (more …)Only accept data records that match the given pattern.

**-h**[**i**|**o**][*n*][**+c**][**+d**][**+m***segheader*][**+r***remark*][**+t***title*] (more …)Skip or produce header record(s).

**-i***cols*[**+l**][**+d***divisor*][**+s***scale*|**d**|**k**][**+o***offset*][,*…*][,**t**[*word*]] (more …)Select input columns and transformations (0 is first column,

**t**is trailing text, append*word*to read one word only).

**-o***cols*[,…][,**t**[*word*]] (more …)Select output columns (0 is first column;

**t**is trailing text, append*word*to write one word only).

**-^**or just**-**Print a short message about the syntax of the command, then exit (NOTE: on Windows just use

**-**).**-+**or just**+**Print an extensive usage (help) message, including the explanation of any module-specific option (but not the GMT common options), then exit.

**-?**or no argumentsPrint a complete usage (help) message, including the explanation of all options, then exit.

**--PAR**=*value*Temporarily override a GMT default setting; repeatable. See gmt.conf for parameters.

## Generate 1D Array¶

We will demonstrate the use of options for creating 1-D arrays via gmtmath.
Make an evenly spaced coordinate array from *min* to *max* in steps of *inc*, e.g.,:

```
gmt math -o0 -T3.1/4.2/0.1 T =
3.1
3.2
3.3
3.4
3.5
3.6
3.7
```

Append **+b** if we should take log2 of *min* and *max*, get their nearest integers,
build an equidistant log2-array using *inc* integer increments in log2, then undo
the log2 conversion. E.g., **-T**3/20/1**+b** will produce this sequence:

```
gmt math -o0 -T3/20/1+b T =
4
8
16
```

Append **+l** if we should take log10 of *min* and *max* and build an
array where *inc* can be 1 (every magnitude), 2, (1, 2, 5 times magnitude) or 3
(1-9 times magnitude). E.g., **-T**7/135/2**+l** will produce this sequence:

```
gmt math -o0 -T7/135/2+l T =
10
20
50
100
```

For output values less frequently than every magnitude, use a negative integer *inc*:

```
gmt math -o0 -T1e-4/1e4/-2+l T =
0.0001
0.01
1
100
10000
```

Append **+i** if *inc* is a fractional number and it is cleaner to give its reciprocal
value instead. To set up times for a 24-frames per second animation lasting 1 minute, run:

```
gmt math -o0 -T0/60/24+i T =
0
0.0416666666667
0.0833333333333
0.125
0.166666666667
...
```

Append **+n** if *inc* is meant to indicate the *number* of equidistant coordinates
instead. To have exactly 5 equidistant values from 3.44 and 7.82, run:

```
gmt math -o0 -T3.44/7.82/5+n T =
3.44
4.535
5.63
6.725
7.82
```

Alternatively, let *inc* be a *file* with output coordinates in the first column,
or provide a comma-separated *list* of specific coordinates, such as the first 6
Fibonacci numbers:

```
gmt math -o0 -T0,1,1,2,3,5 T =
0
1
1
2
3
5
```

**Note**: Should you need to ensure that the coordinates are unique and sorted (in case the
*file* or *list* are not sorted or have duplicates) then supply the **+u** modifier.

If you only want a *single* value
then you must append a comma to distinguish the list from the setting of an increment.

If the module allows you to set up an absolute time series, append a valid time unit from the list
**y**ear, m**o**nth, **d**ay, **h**our, **m**inute, and **s**econd
to the given increment; add **+t** to ensure time column (or use **-f**). **Note**: The internal time
unit is still controlled independently by TIME_UNIT. The first 7 days of March 2020:

```
gmt math -o0 -T2020-03-01T/2020-03-07T/1d T =
2020-03-01T00:00:00
2020-03-02T00:00:00
2020-03-03T00:00:00
2020-03-04T00:00:00
2020-03-05T00:00:00
2020-03-06T00:00:00
2020-03-07T00:00:00
```

A few modules allow for **+a** which will paste the coordinate array to the output table.

Likewise, if the module allows you to set up a spatial distance series (with distances computed
from the first two data columns), specify a new increment as *inc* with a geospatial distance unit from the list
**d**egree (arc), **m**inute (arc), **s**econd (arc), m**e**ter, **f**oot, **k**ilometer,
**M**iles (statute), **n**autical miles, or s**u**rvey foot; see **-j** for calculation mode.
To interpolate Cartesian distances instead, you must use the special unit **c**.

Finally, if you are only providing an increment and will obtain *min* and *max* from the data, then it is
possible (*max* - *min*)/*inc* is not an integer, as required. If so, then *inc* will be adjusted to fit the range.
Alternatively, append **+e** to keep *inc* exact and adjust *max* instead (keeping *min* fixed).

## Note on Units¶

The **-M** option controls the units used in all input and output files.
However, this option does *not* control values given on the command line
to the **-E**, **-W**, and **-Z** options. These are assumed to be in
meters unless an optional **k** for km is appended.

## Plate Flexure Notes¶

We solve for plate flexure using a finite difference approach. This method can accommodate situations such as variable rigidity, restoring force that depends on the deflection being positive or negative, pre-existing deformation, and different boundary conditions.

## Examples¶

To compute elastic plate flexure from the topography load in *topo.txt*,
for a 10 km thick plate with typical densities, try

gmt flexure -Qttopo.txt -E10k -D2700/3300/1035 > flex.txt

## References¶

Bodine, J. H., 1980, *Numerical computation of plate flexure in marine geophysics*,
Tech. Rep. CU-1-80, Columbia University.