# Inputs GEBT has a build-in 1D finite element mesh generator, hence it is very easy to prepare the input file for a beam assembly. For users to understand the meaning of the input data, we explain each data entry line by line here. The first line lists three analysis control parameters arranged as: ``` analysis_flag niter nstep ``` where `analysis_flag` can be 0, 1, 2, 3. If `analysis_flag` is 0, GEBT will carry out a static analysis. If `analysis_flag` is 1, GEBT will carry out a steady state analysis (i.e., neglecting the time derivatives in the formulation). If `analysis_flag` is 2, GEBT will carry out a time marching to obtain the transient time history of the dynamic response. If `analysis_flag` is 3, GEBT will carry out an eigenvalue analysis to obtain the frequencies and mode shapes. `niter` is the maximum number of iterations for the nonlinear analysis. If `niter` is equal to 1, GEBT will compute results corresponding to a linear theory. `nstep` is the number of steps. For static analysis, it can be used to increase the load gradually to help the convergence. For dynamic analysis, it is the number of time steps. If `analysis_flag` is not equal to 0, the next two lines will be used to provide the angular velocity of the global frame a and the linear velocity of the starting pointing of the first member, and their corresponding time functions. They are arranged as: ``` w1 w2 w3 tf_w1 tf_w2 tf_w3 v1 v2 v3 tf_v1 tf_v2 tf_v3 ``` where `w1`, `w2`, `w3`, `v1`, `v2`, `v3` are real numbers denoting the magnitude, while `tf_w1`, `tf_w2`, `tf_w3`, `tf_v1`, `tf_v2`, `tf_v3` are integer numbers denoting the number of the corresponding time functions. The values of these velocities are equal to the magnitude multiplied by values evaluated by the corresponding time function. The unit of angular velocity will be rad/second. If inch if chosen as the unit of length, the unit of linear velocity will be inch/second. If `analysis_flag` is equal to 3, the next line will be used to provide an integer `nev` for the total number of frequencies and corresponding mode shapes to be extracted from the eigenvalue analysis. The next line lists nine integers arranged as: ``` nkp nmemb ncond_pt nmate nframe ncond_mb ndistr ntimefun ncurv ``` where - `nkp` is the total number of key points, - `nmemb` the total number of members, - `ncond_pt` the total number of points having prescribed conditions (including boundary conditions), - `nmate` the total number of cross-sections, - `nframe` the total number of frames, - `ncond_mb` the total number of members having prescribed, distributed loadings, - `ndistr` the total number of functions used to approximate the distributed loads, - `ntimefun` the total number of time functions, `ncurv` total number of initial curvature/twist sets including $\boldsymbol { k } _ { 1 } , \boldsymbol { k } _ { 2 } , \boldsymbol { k } _ { 3 }$ The next nkp lines are the coordinates for each key point arranged as: ``` kp_no x1 x2 x3 ``` where `kp_no` is an integer representing the unique number assigned to each key point and `x1`, `x2`, `x3` are three real numbers describing the location $( x _ { 1 } , x _ { 2 } , x _ { 3 } )$ of the point. Although the arrangement of `kp_no` is not necessary to be consecutive, every point starting from 1 to `nkp` should be present. The next `nmemb` lines list eight integers for each member. They are arranged as: ``` memb_no kp_1 kp_2 mate_no1 mate_no2 frame_no ndiv curv_no ``` where `memb_no` is the number of member and `kp_1` is the starting point and `kp_2` is the ending point of the member. `mate_no1` is the cross-section number of the starting point of the member, `mate_no2` is the cross-section number of the ending point of the member. If the member has a uniform cross-section, these two numbers will be the same. Two different cross-sections can be assigned to one member, which implicitly assumes that the sectional properties are linearly varying along the length. `frame_no` is the frame number of the starting point of the member. If it is set to be 0, then the frame is the same as the global frame, i.e., $b_i = a_i$. `ndiv` is the total number of elements you want to divide this member (the element is uniformly divided into `ndiv` segments), `curv_no` is the initial curvature/twist set number (0 means a straight member). Although the arrangement of `memb_no` is not necessary to be consecutive, every member starting from 1 to `nmemb` should be present. The next `ncond_pt` blocks define the point conditions of prescribed displacements, rotations, forces, or moments. They are arranged as: ``` kp_no dof_1 dof_2 dof_3 dof_4 dof_5 dof_6 val_1 val_2 val_3 val_4 val_5 val_6 tf_1 tf_2 tf_3 tf_4 tf_5 tf_6 ff_1 ff_2 ff_3 ff_4 ff_5 ff_6 ``` where `kp_no` is the key point where the prescribed condition is applied, `dof_i` (`i` = 1, 2, ..., 6) are the prescribed degrees of freedom and they are six integers with values ranging from 1 to 12. `val_i` (`i` = 1, 2, ..., 6) are six real numbers for the prescribed values for the corresponding degree of freedom. `tf_i` (`i` = 1, 2, ..., 6) are six integer numbers for the corresponding number of the time function. `ff_i` (`i` = 1, 2, ..., 6) are six integer numbers (could be either 0 or 1) indicating whether the corresponding prescribed quantity is a follower quantity or not. If it is a follower, then the flag is set to be 1. Otherwise, it is 0. We assume that only forces/moments can be follower quantities and if there is a follower component at the point, GEBT assumes that the first three prescribed degrees of freedom can only be either 7, 8, 9 or 10, 11, 12. If the assumption is too restrictive, please let the author know. The prescribed value is calculated as val i multiplying the corresponding time function value. For example if at point 2, we applied follower forces and dead moments with forces are constant with respect to time and moments are prescribed by time function 1 (defined later), then we have the following ``` 2 7 8 9 10 11 12 F1 F2 F3 M1 M2 M3 0 0 0 1 1 1 1 1 1 0 0 0 ``` where `F1`, `F2`, `F3`, `M1`, `M2`, `M3` are corresponding prescribed values, which could be zero, implying no external forces applied at this point. In a beam assembly, the key points can be further classified as boundary points or connection points. If a point is connected to only one member, it is a boundary point and six boundary conditions must be applied to this point. If a point is connected to more than one member, it is a connection point. The displacements/rotations of this point can be prescribed. Concentrated forces/moments can also be applied to the connection point. The next `nmate` blocks provide the structural and inertial properties for each cross-section. First for the flexibility matrix, described using 36 real numbers arranged as: ``` mate_no S_11 S_12 S_13 S_14 S_15 S_16 S_12 S_22 S_23 S_24 S_25 S_26 S_13 S_23 S_33 S_34 S_35 S_36 S_14 S_24 S_34 S_44 S_45 S_46 S_15 S_25 S_35 S_45 S_55 S_56 S_16 S_26 S_36 S_46 S_56 S_66 ``` These values are defined in Eq. (3) and can be directly copied from VABS output file. If one wants to input stiffness matrix instead, the user needs to use `preprocess.stiff.f90` to replace `preprocess.f90` and recompile the code. If `analysis_flag` is not equal to 0, we also need to provide inertial properties represented by the mass matrix which is arranged as: ``` m_11 m_12 m_13 m_14 m_15 m_16 m_12 m_22 m_23 m_24 m_25 m_26 m_13 m_23 m_33 m_34 m_35 m_36 m_14 m_24 m_34 m_44 m_45 m_46 m_15 m_25 m_35 m_45 m_55 m_56 m_16 m_26 m_36 m_46 m_56 m_66 ``` These values are defined in Eq. (4) and can be directly copied from VABS output file. If `nframe` > 0, the next nframe blocks provide the direction cosine matrix for each member, which are described using nine real numbers arranged as: ``` frame_no C11 C12 C13 C21 C22 C23 C31 C32 C33 ``` These values are defined in Eq. (1). If `ncond_mb` > 0, the next `ncond_mb` blocks define members having prescribed loads. They are arranged as: ``` memb_no dn_1 dn_2 dn_3 dn_4 dn_5 dn_6 val_1 val_2 val_3 val_4 val_5 val_6 tf_1 tf_2 tf_3 tf_4 tf_5 tf_6 ff_1 ff_2 ff_3 ff_4 ff_5 ff_6 ``` where - `memb_no` is the member where the prescribed condition is applied, - `dn_i` (`i` = 1, 2, ..., 6) are the corresponding number of distributed functions. - `val_i` (`i` = 1, 2, ..., 6) are six real numbers for the prescribed values arranged corresponding to $f _ { 1 }$, $f _ { 2 }$, $f _ { 3 }$, $m _ { 1 }$, $m _ { 2 }$, $m _ { 3 }$ with $f _ { 1 }$, $f _ { 2 }$, $f _ { 3 }$ as three components of the distribution force and $m _ { 1 }$, $m _ { 2 }$, $m _ { 3 }$ as three moments of the distribution moment. - `tf_i` (`i` = 1, 2, ..., 6) are six integer numbers for the corresponding number of the time function. - `ff_i` (`i` = 1, 2, ..., 6) are six integer numbers (could be either 0 or 1) indicating whether the corresponding prescribed quantity is a follower quantity or not. If it is a follower, then the flag is set to be 1. Otherwise, it is 0. The prescribed value is calculated as `val_i` multiplying the corresponding time function value and multiplying the corresponding distribution function value. If `ndistr`> 0, the next `ndistr` blocks provide the distributed load functions. They are arranged as: ``` fun_no c0 c1 c2 c3 c4 c5 ``` where `c_i` (`i` = 0, ..., 5) corresponds to the first five coefficients of the Chebychev polynomials used to approximate the given load function. The function is calculated as $f(s) = \sum_{i=0}^{5} c_{i} T_{i}(s)$, where $s$ is the length along the member and $T _ { 0 } = 1$, $T _ { 1 } = s$, $T _ { 2 } = 2 s ^ { 2 } - 1$, $T _ { 3 } = 4 s ^ { 3 } - 3 s$, $T _ { 4 } = 8 s ^ { 4 } - 8 s ^ { 2 } + 1$, $T _ { 5 } = 16 s ^ { 5 } - 20 s ^ { 3 } + 5 s$. For example, for a linearly distributed load $f ( s ) = 1000 + 500s$, we need to provide the input as `1000 500 0 0 0 0`. Here GEBT assumes all given functions can be approximated by the Chebychev polynomials up to the fifth order. If `ncurv`> 0, the next `ncurv` blocks provide the initial curvatures and twist. They are arranged as: ``` curv_no k1 k2 k3 ``` where `k1` is the initial twist, `k2` is the initial curvature around $x _ { 2 }$ direction, and `k3` is the initial curvature around $x _ { 3 }$ direction. If `ntimefun`> 0 or `analysis_flag`=2, the next line lists two numbers for the simulation range arranged as: ``` starting_time ending_time ``` and the next `ntimefun` blocks define the time functions which are arranged as follows: ``` fun_no fun_type ts te [fun_block] ``` where - `fun_no` is the time function number, - `fun_type` is the time function type, and - `ts`, `te` are the starting and ending time of function definition specifically. Currently, user can define two types of time functions. If `fun_type` is 0, it is a user defined as piecewise linear function based on functional values provided for different time instances. The `[fun_block]` is arranged as follows: ``` n t1 f1 t2 f2 ... tn fn ``` where `n` is the number of entries needed for this time function. The time entries $t _ { i }$ is arranged in an increasing fashion. That is, we have $t _ { 2 } > t _ { 1 }$, $t _ { 3 } > t _ { 2 }$, and etc. The time function is assumed to be piecewise linear defined by $t _ { i }$ and $f _ { i }$. If $t < t _ { 1 }$, the function will remain the same as $f _ { 1 }$. If $t > t _ { n }$, the function will remain the same as $f _ { n }$. Note this type of time functions, simulation time, and load steps can be used to control the load increment in static analysis. If `fun_type` is 1, the time function is defined as a summation of a series of harmonics as follows $$ f ( t ) = \sum _ { i = 1 } ^ { N } h _ { i } ( t ) = \sum _ { i = 1 } ^ { N } a _ { i } \sin 2 \pi ( t / T _ { i } + \phi _ { i } )\tag{5} $$ The `fun_block` is arranged as follows: ``` n a_1 T_1 phi_1 a_2 T_2 phi_2 ... a_n T_n phi_n ``` where - `a_i` is the magnitude, - `T_i` is the period, and - `phi_i` is the phase. The input file should be ended with a blank line to avoid any possible incompatibility of different computer systems. The input file can be given any name as long as the total number of the characters of the name including extension is not more than 256. You are suggested to use a unique extension say get for you to identify such files with GEBT. For the convenience of the user to identify mistakes in the input file, all the inputs are echoed in a file named `input_file_name.ech`. Error messages are also written at the end of `input_file_name.ech`. If `analysis_flag`=2, a file named `input_file_name.ini` should also exist in the same directory. If there are a total of `nelem` elements in the structure, this file contains 2 × `nelem` lines with the first `nelem` lines providing the initial positions and rotations $( u _ { 1 } \quad u _ { 2 } \quad u _ { 3 } \quad \theta _ { 1 } \quad \theta _ { 2 } \quad \theta _ { 3 } )$ for each element and the next `nelem` lines providing the corresponding derivatives $( { \dot { u } } _ { 1 } { \dot { u } } _ { 2 } { \dot { u } } _ { 3 } { \dot { \theta } } _ { 1 } { \dot { \theta } } _ { 2 } { \dot { \theta } } _ { 3 } )$ for each element.