Skip to content

17. Special step

*Step, TYPE=ModelUpdating

hfAnalyzer supports model updating using sensor-measured data to determine the material properties of the analysis model.

*Step, Type=ModelUpdating,Static|Modal|Bayesian, Name=name[, PREV=prevStep]
  maxIter, tol, ...
*Activate, Type=Element
 elset1, elset2, ...
*Activate, TYPE=Constraint
 ....
*Activate, TYPE=Load
 ....
*SensorPair, MeasuredData=csvFile[,Generate]
 sensor-id, sesnor-fromId:toId, sensor-fromId:toId:spacing...
 ...
*DesignVariable
 {stiff|mass}, firstDesignVarElset1, firstDesignVarElset2,...
 {stiff|mass}, secondDesignVarElset1, secondDesignVarElset2, ...
 ...
Optional First dataline
*Step, Type=ModelUpdating,Static, Name=name[, PREV=prevStep]
 maxIter, ftol, dtol, degree                     
 ...

*Step, Type=ModelUpdating,Modal, Name=name[, PREV=prevStep]
 maxIter, ftol, dtol, degree, modePairing, weightFactor, regulationFactor 
 ...

*Step, Type=ModelUpdating,BModal, Name=name[, PREV=prevStep]
 maxIter, ftol, dtol, stdeq, a, b, c  
 ...              
First dataline
  • maxIter: Maximum iteration number. Default is 300. If set to zero, the default value is used.
  • ftol: Convergence tolerance for residuals, default is 1E-8.
  • dtol: Convergence tolerance for design variables, default is 1E-8.
  • degree: Degree of the design variable during internal computation. The degree should be 1 or 2, with the default being 1.
  • modePairing: Specifies the method for selecting modes to compare. Options are Frequency or Shape, with the default being Frequency.
  • weightingFactor: Characteristic value used in the weighting matrix. If set to 0, the weighting matrix is not used; otherwise, it is used as a weight (default is 0).
  • regularizationFactor: Regularization coefficient between 0 and 0.3. If set to 0, regularization is not used (default is 0).
  • stdeq: Standard deviation for equation error. If set to zero, it is estimated using the default method.
  • a, b: Parameters of covariance for design variable error. Default is zero. If set to zero, they are estimated using the default method.
  • c: Parameters of covariance for residual error. Default is 0.01. If set to zero, the default is used.

Model updating is targeted at linear systems and consists of the following two forms:

▪ Static Model Updating Determines the stiffness ratio that closely matches the measured data from the given analysis model using data obtained from strain gauges or displacement gauges under static load conditions.

▪ Model Updating Using Modal Identification Results Determines the stiffness or mass ratio of the analysis model using dynamic data obtained from strain gauges or accelerometers processed through modal identification techniques.

*Step, Type=ModelUpdating, Static refers to static model updating, while *Step, Type=ModelUpdating, Modal and *Step, TYPE=ModelUpdating, Bayesian refer to model updating using modal identification results. Since these model updates target linear systems, they are limited to elements using the Isoelasticity material model. The applicable materials and sections are as follows.

*Material, TYPE=IsoElasticity
*Section, TYPE=ElasticBeam
*Section, TYPE=Shell
*Section, TYPE=Solid
*Section, TYPE=MCK  
  → Only Spring, EarthSpring, and PointMass are allowed (adjusting the coefficients of the actual MCK section while keeping the connected material unchanged).
*Section, TYPE=Tendon

The *SensorPair command is used to specify sensor measurement points for comparison with results from the analysis. The MeasuredDat=csvFile specifies the CSV file containing the measured mode results in the following format. The sensors specified must be ordered correctly.

▪ For Static Cases: The ModePairing is ignored, and the csvFile should be provided in the following format.

# *Step, TYPE=ModelUpdating, Static
# sensor1, sensor2, ...
  -1.8E-6, -3.26E-6, ...

▪ For Modal Cases: You can specify the method for selecting modes to compare using ModePairing=Frequency|Shape. The default is Frequency. The csvFile should be provided in the following format.

# *Step, TYPE=ModelUpdating,Modal
# mode_no, naturalFreq, damping, sensor1, sensor2, ...
          1,    2.08, 0.05, 0, -1.8E-6, -3.26E-6, ...
           ,    6.15, 0.05
           ,    9.01, 0.05, 3.35E-16, -1.63E-14, 1.7E-6, ...
The constraints are as follows:

  • The natural frequencies must be provided and sorted in ascending order.
  • When mode numbers are given, the modes obtained from the analysis are matched to those numbers.
  • If mode numbers are not provided, mode matching is done by using the closest natural frequency when Frequency is given, and to achieve a MAC index close to 1 when Shape is given.
  • When mode matching is based on Shape, the mode shapes must be provided.
  • When performing optimization on matched modes, both the natural frequencies and shapes (when provided) are used.
  • The damping ratio is ignored (reserved).

▪ For Bayesian Cases: The csvFile should be provided in the following format.

Mode numbers and damping ratios are ignored, and the natural frequencies and shapes must always be specified simultaneously.

# *Step, TYPE=ModelUpdating,Bayesian
# mode_no, naturalFreq, damping, sensor1, sensor2, ...
          1,    2.08, 0.05, 0, -1.8E-6, -3.26E-6, ...
          2,    6.15, 0.05, 0, -2.1E-6, -4.1E-6, ...
          3,    9.01, 0.05, 3.35E-16, -1.63E-14, 1.7E-6, ...
The constraints are as follows:

  • The natural frequencies must be provided and sorted in ascending order.
  • The natural modes must be provided.
  • Mode numbers are ignored.
  • The damping ratio is ignored (reserved).

Each line of the *DesignVariable data specifies the elset corresponding to the design variable. If "stiff" is specified at the beginning of each line, it sets the stiffness ratio as the design variable; if "mass" is specified, it sets the mass ratio. The degree specifies the order of the design variable during internal calculations, and can be either 1 or 2, with the default being 1. In Bayesian cases, this is ignored.

When model updating is performed, the results correspond to the SPF (Stiffness Proportional Factor) and MPF (Mass Proportional Factor) for the elsets specified in *DesignVariable. These field values are output to the hdb file corresponding to each element. Additionally, a new input value reflecting these values will be generated. For example, consider the following case where updating is performed in the model.inp file.

...
*Step, TYPE=ModelUpdating,Modal, Name=update
...
*DesignVarible
 stiff, left
 stiff, center
 mass, right

The results files generated will include the HDB file(.hdb) and a new input file(.inp).

▪ HDB file(.hdb): This file will contain the corresponding ODBStep for the update, including SPF, MPF, and other relevant data under *Result.

...
*ODBStep, Name=update
...
*Frame
*Result, Name=SPF
1, ...
...

▪ New Input File Reflecting SPF and MPF: This file will include materials, sections, and elsets adjusted according to the SPF and MPF values. The file will be named update.inp.

# ###############################################
# Generation from update step from model.inp
# Main Results
#  stiff, left, 1.23
#  stiff, center, 1.5
#  mass, right, 0.8
# ###############################################

*Material, TYPE=IsoElasticity, Name=conc
 2.5e+10, 0.2, 0, 2000  # E, nu, alpha, density

...
  • Note

  • In *Step, TYPE=ModelUpdating, Modal|esian, let ns be the number of sensor points, nd be the number of design variables, and nm be the number of data entries (number of rows in the data file). The following conditions must be satisfied:

  • If only Frequency is provided: nm >= nd
  • If both Frequency and mode shape are provided: ns * nm >= nd

  • When specifying the Generate option in *SensorPair, MeasuredData=dataFile, Generate, a test dataFile will be created. In the case of *Step, TYPE=ModelUpdating, Static, the current analysis results with the applied load condition will be generated as a data file (1 row). In the case of *Step, TYPE=ModelUpdating, Modal|Bayesian, a minimum number of rows satisfying the first condition will be written to the data file.

Example
*Construction, Type=Spline, Name=spline
 0,  0,  0
 10, 0.8,0
 20, 0,  0

*Sensor, Type=Line, Name=lineSensor1, HostElset=girder, Field=E, Spline=spline, startId=1
 0, 1, 2, 5, 
 3@3         # 8, 11, 14

# NOTE. Generate 1 .hdb file + 2 input files

*Step, TYPE=ModelUpdating,Static Name=update1
*Activate, TYPE=Element
 ALL
*SensorPair, MeasuredData=data.txt
 lineSensor-1, lineSensor-2, ...
*DeisgnVariable
 stiff, left, center   

*Step, TYPE=ModelUpdating,Modal Name=update2
*Activate, TYPE=Element
 ALL
*SensorPair, MeasuredData=data.txt
 lineSensor-1, lineSensor-2, ...
*DeisgnVariable
 stiff, left, center   
 mass, right

*Step, TYPE=ShapeEstimation

hfAnalyzer can estimate the deformed shape of the analysis model using data measured from sensors (Deformed Shape Estimation).

*Step, Type=ShapeEstimation,  Name=name[, PREV=prevStep]
 MAC, mac, nmode | modeNumber, ... 
*Activate, Type=Element
 elset1, elset2, ...
*Activate, TYPE=Constraint
 ....
*Activate, TYPE=Load
 ....
*SensorPair, MeasuredData=csvFile[,Generate]
 sensor-id, sesnor-fromId:toId, sensor-fromId:toId:spacing...
 ...
*Output[, ELSET=elset1, elset2, ..., Constraint=constraint1, constraint2, ..., Frequency=freqeuncy]
 field|sensorName,...
 ...
*Print[, Frequency=frequency, File=file 
 field@target|sensorName...
 ...
First dataline
  • MAC, mac, nmode: Remove the close modes at the given mac value from the sensor units and use the lower-order modes specified by nmode.
  • modeNumber, ...: Eigenmode numbers or mode number patterns used. The mode number pattern is in the form of start:end:spacing, and spacing can be omitted if it is 1. If the first line is absent, 1:4 is automatically assigned.

Deformed shape estimation involves estimating the deformed shape from sensor data and recording the results in the HDB file(.hdb) as the deformed shape. It assumes a linear system and estimates the deformed shape through the superposition of sensor mode shapes calculated from eigenvalue analysis. The modes used for this estimation are selected through two methods:

(1) Excluding close sensor modes using the MAC index

This is when inputting something like MAC, 0.95, 3 in the first data line. A total of 3 sensor modes are used for deformed shape estimation. Among the calculated modes, if the MAC index between them is 0.95 or higher, they are considered the same mode at the sensor mode level, and only the lower-order modes are selected. Internally, six (twice the number of required modes) modes are calculated, and those with a MAC index of 0.95 or higher are grouped together. Within the same group, the lower-order modes are selected; for instance, if the MAC index between modes 1 and 3 is 0.95 or higher, then modes 1, 2, and 4 will be selected.

(2) Forcing the user to specify sensor modes

This is when the user specifies the sensor modes using numbers in the first data line, such as 1, 2, 3 or 1, 3, 5:7. There may be cases where the sensor modes do not possess linear independence, which can lead to the algorithm failing.

The input file follows the same format as that used in *Step, Type=ModelUpdating, Static.

# *Step, TYPE=DeformedShapeEstimation
# sensor1, sensor2, ...
  -1.8E-6, -3.26E-6, ...
  ...
Example
*Construction, Type=Spline, Name=spline
 0,  0,  0
 10, 0.8,0
 20, 0,  0

*Sensor, Type=Line, Name=lineSensor1, HostElset=girder, Field=E, Spline=spline, startId=1
 0, 1, 2, 5, 
 3@3         # 8, 11, 14

*Step, TYPE=ShapeEstimation, Name=update1
  1, 3, 5:7
*Activate, TYPE=Element
 ALL
*SensorPair, MeasuredData=data.txt
 lineSensor-1, lineSensor-2, ...

*Step, TYPE=ShapeEstimation, Name=update1
 MAC, 0.95,10
*Activate, TYPE=Element
 ALL
*SensorPair, MeasuredData=data.txt
 lineSensor-1, lineSensor-2, ...

*Step, TYPE=PerformanceEvaluation

The system provides a Performance Evaluation feature.

*Step, TYPE=PerformanceEvaluation, Name=name
  USD, phi, gd, gl | ASD
*TargetElements
 elset, ...
*Capacity  
 elset, negCapacity, posCapacity
 ...
*ImpactFactor
 elset, i_code, i_mea
 ...
*Demand 
 elset, dd_frame, ll_min_frame, ll_max_frame, C=SSF.Mx|SSF.My|BSF.Mx|BSF.My          [for USD]
 elset, dd_frame, ll_min_frame, ll_max_frame, C=y1,z1,y2,z2,...                      [for ASD]
 ...
*Deflection   
 elset, org_frame[, upd_frame]
 ...
First dataline
  • USD, phi, gd, gl: Assign ultimate strength design, with strength reduction factor, load factor for dead load an live load.
  • ASD: Assign allowable stress design

The rules are as follows:

  • For ASD, only beam elements can be applied (B2D2H, B2D2MH, B3D2H, B3D2MH).
  • For USD, both beam and shell elements can be applied (S4F, S3F, S4, S3).
  • To use ASD, the target beam elements must output BSE and do not consider the effects of temperature.
  • To use USD, the target beam elements must output BSF, and shell elements must output SSF.
  • The output fields are as follows:

    • PE_IMC, PE_IMM: Element-level fields given in *ImpactFactor.
    • PE_MNNEG, PE_MNPOS: Nominal moments provided in *Capacity for USD.
    • PE_EANEG, PE_EAPOS: Allowable strains provided in *Capacity for ASD.
    • PE_MDD, PE_MLLMIN, PE_MLLMAX: Calculated at the integration point for USD in *Demand, these represent the moment, scalar values.
    • PE_EDD, PE_ELLMIN, PE_ELLMAX: Calculated at the integration point for ASD in *Demand, defined at the given points within the integration points.
PE_EDD= [PE_DD.1, PE_DD.2, ...]  
PE_ELLMIN = [PE_ELLMIN.1, PE_ELLMIN.2, ...]  
PE_ELLMAX = [PE_ELLMAX.1, PE_ELLMAX.2, ...]  
- PE_SF: Element-level SF (average of SF calculated at the integration points).
- PE_RF: Element-level RF (average of RF calculated at the integration points).
- PE_SRF: Element-level SRF (average of SRF calculated at the integration points). This will not be output if `*Deflection` is given without upd.

The implemented performance evaluation is conducted by balancing internal capabilities with external requirements.

  • USD: Nominal moments and design moments for beam and shell elements.
  • ASD: Allowable strains and design strains for beam elements.

For the elements given in *TargetElements, the information provided in *Capacity, *ImpactFactor, *Demand, and *Deflection is read to calculate SF, RF, and CRF at each integration point of the target elements.

The example below performs a performance evaluation for two elsets: elem-deck and elem-beam.

*Step, TYPE=PerformanceEvaluation, Name=myEval
 USD, 0.85, 1.3, 2.15  # phi, gd, gl
*TargetElements
 elem-deck, elem-beam 
*Capacity
 elem-pos, -1,676.56, 1676.56   # elset, Mn_neg, Mn_pos
 elem-neg, -2,647.43, 2647.43
*ImpactFactor
 elem-pos1, 0.275229358, 0.275229358   # elset, i_code, i_mea
 elem-pos2, 0.267857143, 0.267857143
 elem-neg1, 0.275229358, 0.275229358
 elem-neg2, 0.271493213, 0.271493213
*Demand 
 elem-deck1, step-DD.LAST@org1.h5.hdb, step-LL-min.LAST@org1.h5.hdb, step-LL-max.LAST@org1.h5.hdb, C=SSF.Mx
 elem-deck2, step-DD.LAST@org2.h5.hdb, step-LL-min.LAST@org2.h5.hdb, step-LL-max.LAST@org2.h5.hdb, C=SSF.Mx
 elem-beam1, step-DD.LAST@org1.h5.hdb, step-LL-min.LAST@org1.h5.hdb, step-LL-max.LAST@org1.h5.hdb, C=BSF.Mx
 elem-beam2, step-DD.LAST@org2.h5.hdb, step-LL-min.LAST@org2.h5.hdb, step-LL-max.LAST@org2.h5.hdb, C=BSF.Mx
*Deflection 
 elem-deck3, step-resp.LAST@org3.h5.hdb, step-resp.LAST@upd.h5.hdb
 elem-deck4, step-resp.LAST@org4.h5.hdb, step-resp.LAST@upd.h5.hdb
 elem-beam3, step-resp.LAST@org3.h5.hdb, step-resp.LAST@upd.h5.hdb
 elem-beam4, step-resp.LAST@org4.h5.hdb, step-resp.LAST@upd.h5.hdb
*TargetElements specifies the set of target elements, and *Capacity, *ImpactFactor, *Demand designate the nominal moment capacity, impact factor, and design moment, respectively. *Deflection is used to calculate the correction factor K for the CRF. When using *Deflection, if the upd_frame is not specified, only the SF and RF fields will be calculated.

The elsets used in *TargetElements, *NominalMoment, *ImpactFactor, *Demand, and *Deflection must be predefined in the model section of the input file where *Step, TYPE=PerformanceEvaluation is specified. These elsets have the following constraints:

  • The sets specified in *Demand must be the same as those specified in *TargetElements (target elements = elements for design moment).
  • When performing calculations on the *TargetElements, the values must be specified for *NominalMoment and *ImpactFactor since they are referenced against the *TargetElements (target elements < elements for nominal moments, impact factor).

Additionally, external HDB files(.hdb) can be used in *Demand, *Deflection, etc., in the format step.frame@hdbFile. The frame can be a number from 1 to the maximum frame number of that step, and 'last' can be used in place of the last frame number. If the hdb file exists, the same finite element model must be used. Therefore, the following should be verified:

  • Construct the TargetNodes from the elements specified in *TargetElements.
  • Check that the coordinate information of the TargetNodes and the degree of freedom information based on the element connections are the same across all used HDB files(.hdb).
  • Ensure that the elements of *TargetElements are identical in terms of element number, element type, and node connectivity information across all used HDB files(.hdb). However, the connected section information may differ.
Example
*Step, TYPE=PerformanceEvaluation, Name=myEval
 USD, 0.85, 1.3, 2.15 
*TargetElements
 deck
*Capacity
 deck-pos, -1676.56, 1676.56  
 deck-neg, -2647.43, 2647.43
*ImpactFactor
 deck-pos1, 0.275229358, 0.275229358  
 deck-pos2, 0.267857143, 0.267857143
 deck-neg1, 0.275229358, 0.275229358
 deck-neg2, 0.271493213, 0.271493213
*Demand 
 deck, step-DD.LAST@org1.h5.hdb, step-LL-min.LAST@org1.h5.hdb, step-LL-max.LAST@org1.h5.hdb, C=SSF.Mx
*Deflection 
 deck, step-resp.LAST@org3.h5.hdb, step-resp.LAST@upd.h5.hdb


*Step, TYPE=PerformanceEvaluation, Name=step-performance
  ASD
*TargetElements
  elem-girder
*Capacity
  # elset, C_min, C_max
  elem-girder, -140e6/200e9, 140e6/200e9  # -140e6, 140e6  # for t < 40 mm, SM400
*ImpactFactor
  # elset, i_code, i_mea
  elem-girder, 0.1875, 0.1875
*Demand
  # elset, DD, LL-min, LL-max
  elem-girder, step-DD.LAST, step-LL.1, step-LL.2, C=1.5,1.65, 1.5,-0.65, -1.5,1.65, -1.5,-0.65
*Deflection
  # elset, resp_data
  elem-girder, step-resp.LAST