SeismicAnalysisClass Module



Variables

Type Visibility Attributes Name Initial
integer(kind=int32), public :: WAVE_DISP = 1
integer(kind=int32), public :: WAVE_VELOCITY = 2
integer(kind=int32), public :: WAVE_ACCEL = 3

Derived Types

type, public ::  SeismicAnalysis_

Components

Type Visibility Attributes Name Initial
type(FEMDomain_), public, pointer :: femdomain
type(FEMSolver_), public :: femsolver
type(CRS_), public :: M_matrix
type(CRS_), public :: K_matrix
type(ModalAnalysis_), public :: modal
real(kind=real64), public, allocatable :: da(:)
real(kind=real64), public, allocatable :: a_ext(:)
real(kind=real64), public, allocatable :: a_ext_n(:)
real(kind=real64), public, allocatable :: a(:)
real(kind=real64), public, allocatable :: a_half(:)
real(kind=real64), public, allocatable :: a_n(:)
real(kind=real64), public, allocatable :: v(:)
real(kind=real64), public, allocatable :: v_half(:)
real(kind=real64), public, allocatable :: v_n(:)
real(kind=real64), public, allocatable :: u(:)
real(kind=real64), public, allocatable :: u_n(:)
complex(kind=real64), public, allocatable :: u_p(:)
complex(kind=real64), public, allocatable :: u_m(:)
real(kind=real64), public, allocatable :: du(:)
real(kind=real64), public, allocatable :: wave(:,:)
real(kind=real64), public, allocatable :: dwave(:,:)
real(kind=real64), public, allocatable :: Density(:)
real(kind=real64), public, allocatable :: YoungModulus(:)
real(kind=real64), public, allocatable :: PoissonRatio(:)
real(kind=real64), public :: MaxA(3) = 0.0d0
real(kind=real64), public :: MaxV(3) = 0.0d0
real(kind=real64), public :: MaxU(3) = 0.0d0
integer(kind=int32), public, allocatable :: WaveNodeList(:)
integer(kind=int32), public, allocatable :: FixNodeList_x(:)
integer(kind=int32), public, allocatable :: FixNodeList_y(:)
integer(kind=int32), public, allocatable :: FixNodeList_z(:)
real(kind=real64), public, allocatable :: FixNodeList_Disp_x(:)
real(kind=real64), public, allocatable :: FixNodeList_Disp_y(:)
real(kind=real64), public, allocatable :: FixNodeList_Disp_z(:)
real(kind=real64), public, allocatable :: FixNodeList_Disp(:)
integer(kind=int32), public, allocatable :: num_nodes_in_domains(:)
real(kind=real64), public, allocatable :: Traction(:)
integer(kind=int32), public, allocatable :: absorbingBoundary_x(:)
integer(kind=int32), public, allocatable :: absorbingBoundary_y(:)
integer(kind=int32), public, allocatable :: absorbingBoundary_z(:)
integer(kind=int32), public, allocatable :: absorbingBoundary_xyz(:)
real(kind=real64), public :: absorbingBoundary_elasticity = 0.0d0
real(kind=real64), public :: absorbingBoundary_viscosity = 0.0d0
real(kind=real64), public, allocatable :: Frequency(:)
real(kind=real64), public, allocatable :: ModeVectors(:,:)
integer(kind=int32), public, allocatable :: NodeID_range(:,:)
integer(kind=int32), public, allocatable :: ElementID_range(:,:)
character(len=1), public :: wavedirection = "z"
integer(kind=int32), public :: wavetype = 0
real(kind=real64), public :: dt = 1.0d0
real(kind=real64), public :: error = dble(1.0e-14)
real(kind=real64), public :: tolerance = dble(1.0e-14)
real(kind=real64), public :: t = 0.0d0
integer(kind=int32), public :: step = 0
real(kind=real64), public :: alpha = 0.52400d0
real(kind=real64), public :: beta = 0.00129d0
real(kind=real64), public :: damping_ratio_h = 0.010d0
real(kind=real64), public :: Newmark_beta = 0.250d0
real(kind=real64), public :: Newmark_gamma = 0.50d0
real(kind=real64), public :: boundary_dumping_ratio = 1.0d0
logical, public :: restart = .False.
logical, public :: debug = .False.
logical, public :: multi_domain_mode = .false.
real(kind=real64), public :: overset_penalty = 1000.0d0*1000.0d0

Type-Bound Procedures

procedure, public :: init => initSeismicAnalysis
procedure, public :: setMaterial => setMaterialSeismicAnalysis
procedure, public :: setBoundary => setBoundarySeismicAnalysis
procedure, public :: setSolverParameters => setSolverParametersSeismicAnalysis
procedure, public, pass :: runSeismicAnalysis_user_function
procedure, public, pass :: runSeismicAnalysis
generic, public :: solve => runSeismicAnalysis, runSeismicAnalysis_user_function
procedure, public :: loadWave => loadWaveSeismicAnalysis
procedure, public :: fixDisplacement => fixDisplacementSeismicAnalysis
procedure, public :: updateWave => updateWaveSeismicAnalysis
generic, public :: run => runSeismicAnalysis, runSeismicAnalysis_user_function
procedure, public :: LinearReyleighNewmark => LinearReyleighNewmarkSeismicAnalysis
procedure, public :: recordMaxValues => recordMaxValuesSeismicAnalysis
procedure, public :: save => saveSeismicAnalysis
procedure, public :: getNewmarkBetaMatrix => getNewmarkBetaMatrixSeismicAnalysis
procedure, public :: getNewmarkBetaVector => getNewmarkBetaVectorSeismicAnalysis
procedure, public :: updateVelocityNewmarkBeta => updateVelocityNewmarkBetaSeismicAnalysis
procedure, public :: updateAccelNewmarkBeta => updateAccelNewmarkBetaSeismicAnalysis
procedure, public :: remove => removeSeismicAnalysis
procedure, public :: absorbingBoundary => absorbingBoundarySeismicAnalysis
procedure, public :: getAbsorbingBoundaryForce => getAbsorbingBoundaryForceSeismicAnalysis
procedure, public :: velocity => velocitySeismicAnalysis
procedure, public, pass :: modalAnalysisSeismicAnalysis_single_domain
procedure, public, pass :: modalAnalysisSeismicAnalysis_multi_domain
generic, public :: modalAnalysis => modalAnalysisSeismicAnalysis_single_domain, modalAnalysisSeismicAnalysis_multi_domain
procedure, public :: getModeVector => getModeVectorSeismicAnalysis
procedure, public :: exportModeShape => exportModeShapeSeismicAnalysis
procedure, public :: vtk => vtkSeismicAnalysis

Functions

public function getNewmarkBetaMatrixSeismicAnalysis(obj, M, C, K, beta, gamma, dt) result(ret)

Arguments

Type IntentOptional Attributes Name
class(SeismicAnalysis_), intent(in) :: obj
real(kind=real64), intent(in) :: M(:,:)
real(kind=real64), intent(in) :: C(:,:)
real(kind=real64), intent(in) :: K(:,:)
real(kind=real64), intent(in) :: beta
real(kind=real64), intent(in) :: gamma
real(kind=real64), intent(in) :: dt

Return Value real(kind=real64), allocatable, (:,:)

public function getNewmarkBetaVectorSeismicAnalysis(obj, u_n, v_n, a_n, force, beta, gamma, M, C, dt) result(ret)

Arguments

Type IntentOptional Attributes Name
class(SeismicAnalysis_), intent(in) :: obj
real(kind=real64), intent(in) :: u_n(:)
real(kind=real64), intent(in) :: v_n(:)
real(kind=real64), intent(in) :: a_n(:)
real(kind=real64), intent(in) :: force(:)
real(kind=real64), intent(in) :: beta
real(kind=real64), intent(in) :: gamma
real(kind=real64), intent(in) :: M(:,:)
real(kind=real64), intent(in) :: C(:,:)
real(kind=real64), intent(in) :: dt

Return Value real(kind=real64), allocatable, (:)

public function updateVelocityNewmarkBetaSeismicAnalysis(obj, u, u_n, v_n, a_n, gamma, beta, dt) result(ret)

Arguments

Type IntentOptional Attributes Name
class(SeismicAnalysis_), intent(in) :: obj
real(kind=real64), intent(in) :: u(:)
real(kind=real64), intent(in) :: u_n(:)
real(kind=real64), intent(in) :: v_n(:)
real(kind=real64), intent(in) :: a_n(:)
real(kind=real64), intent(in) :: gamma
real(kind=real64), intent(in) :: beta
real(kind=real64), intent(in) :: dt

Return Value real(kind=real64), allocatable, (:)

public function updateAccelNewmarkBetaSeismicAnalysis(obj, u, u_n, v_n, a_n, gamma, beta, dt) result(ret)

Arguments

Type IntentOptional Attributes Name
class(SeismicAnalysis_), intent(in) :: obj
real(kind=real64), intent(in) :: u(:)
real(kind=real64), intent(in) :: u_n(:)
real(kind=real64), intent(in) :: v_n(:)
real(kind=real64), intent(in) :: a_n(:)
real(kind=real64), intent(in) :: gamma
real(kind=real64), intent(in) :: beta
real(kind=real64), intent(in) :: dt

Return Value real(kind=real64), allocatable, (:)

public pure function getAbsorbingBoundaryForceSeismicAnalysis(obj) result(force)

Arguments

Type IntentOptional Attributes Name
class(SeismicAnalysis_), intent(in) :: obj

Return Value real(kind=real64), allocatable, (:)

public function velocitySeismicAnalysis(this, DomainID, Direction) result(v)

Arguments

Type IntentOptional Attributes Name
class(SeismicAnalysis_), intent(in) :: this
integer(kind=int32), intent(in) :: DomainID
integer(kind=int32), intent(in) :: Direction

Return Value real(kind=real64), allocatable, (:)

public function getModeVectorSeismicAnalysis(this, domainID, ModeID) result(mode_vector)

Arguments

Type IntentOptional Attributes Name
class(SeismicAnalysis_), intent(in) :: this
integer(kind=int32), intent(in) :: domainID
integer(kind=int32), intent(in) :: ModeID

Return Value real(kind=real64), allocatable, (:)


Subroutines

public subroutine initSeismicAnalysis(obj, femdomains)

Arguments

Type IntentOptional Attributes Name
class(SeismicAnalysis_), intent(inout) :: obj
type(FEMDomain_), intent(in), optional :: femdomains(:)

public subroutine setMaterialSeismicAnalysis(this, DomainID, Density, YoungModulus, PoissonRatio)

Arguments

Type IntentOptional Attributes Name
class(SeismicAnalysis_), intent(inout) :: this
integer(kind=int32), intent(in) :: DomainID
real(kind=real64), intent(in) :: Density(:)
real(kind=real64), intent(in) :: YoungModulus(:)
real(kind=real64), intent(in) :: PoissonRatio(:)

public subroutine setBoundarySeismicAnalysis(this, DomainID, NodeList, condition, boundaryValue, overwrite)

Arguments

Type IntentOptional Attributes Name
class(SeismicAnalysis_), intent(inout) :: this
integer(kind=int32), intent(in) :: DomainID
integer(kind=int32), intent(in) :: NodeList(:)
character(len=*), intent(in) :: condition
real(kind=real64), intent(in) :: boundaryValue(:)
logical, intent(in), optional :: overwrite

public subroutine saveSeismicAnalysis(obj, name, ratio)

Arguments

Type IntentOptional Attributes Name
class(SeismicAnalysis_), intent(inout) :: obj
character(len=*), intent(in) :: name
real(kind=real64), intent(in), optional :: ratio

public subroutine loadWaveSeismicAnalysis(obj, x_min, x_max, y_min, y_max, z_min, z_max, direction, wavetype)

Arguments

Type IntentOptional Attributes Name
class(SeismicAnalysis_), intent(inout) :: obj
real(kind=real64), intent(in), optional :: x_min
real(kind=real64), intent(in), optional :: x_max
real(kind=real64), intent(in), optional :: y_min
real(kind=real64), intent(in), optional :: y_max
real(kind=real64), intent(in), optional :: z_min
real(kind=real64), intent(in), optional :: z_max
character(len=1), intent(in), optional :: direction
integer(kind=int32), intent(in) :: wavetype

public subroutine fixDisplacementSeismicAnalysis(obj, x_min, x_max, y_min, y_max, z_min, z_max, displacement, direction, release)

Arguments

Type IntentOptional Attributes Name
class(SeismicAnalysis_), intent(inout) :: obj
real(kind=real64), intent(in), optional :: x_min
real(kind=real64), intent(in), optional :: x_max
real(kind=real64), intent(in), optional :: y_min
real(kind=real64), intent(in), optional :: y_max
real(kind=real64), intent(in), optional :: z_min
real(kind=real64), intent(in), optional :: z_max
real(kind=real64), intent(in), optional :: displacement
character(len=*), intent(in), optional :: direction
character(len=*), intent(in), optional :: release

public subroutine updateWaveSeismicAnalysis(obj, timestep, direction)

Arguments

Type IntentOptional Attributes Name
class(SeismicAnalysis_), intent(inout) :: obj
integer(kind=int32), intent(in) :: timestep
character(len=1), intent(in), optional :: direction

public subroutine runSeismicAnalysis(obj, t0, timestep, wave, AccelLimit, disp_magnify_ratio, use_same_stiffness, dt, timeIntegral, use_same_matrix, preconditioning)

Arguments

Type IntentOptional Attributes Name
class(SeismicAnalysis_), intent(inout) :: obj
real(kind=real64), intent(in), optional :: t0
integer(kind=int32), intent(in), optional :: timestep(2)
real(kind=real64), intent(in), optional :: wave(:,:)
real(kind=real64), intent(in), optional :: AccelLimit
real(kind=real64), intent(in), optional :: disp_magnify_ratio
logical, intent(in), optional :: use_same_stiffness
real(kind=real64), intent(in), optional :: dt
character(len=*), intent(in) :: timeIntegral
logical, intent(in), optional :: use_same_matrix
character(len=*), intent(in), optional :: preconditioning

public subroutine runSeismicAnalysis_user_function(obj, t0, timestep, wave, AccelLimit, disp_magnify_ratio, use_same_stiffness, dt, timeIntegral, use_same_matrix, LinearSolver)

Arguments

Type IntentOptional Attributes Name
class(SeismicAnalysis_), intent(inout) :: obj
real(kind=real64), intent(in), optional :: t0
integer(kind=int32), intent(in), optional :: timestep(2)
real(kind=real64), intent(in), optional :: wave(:,:)
real(kind=real64), intent(in), optional :: AccelLimit
real(kind=real64), intent(in), optional :: disp_magnify_ratio
logical, intent(in), optional :: use_same_stiffness
real(kind=real64), intent(in), optional :: dt
character(len=*), intent(in) :: timeIntegral
logical, intent(in), optional :: use_same_matrix
public subroutine LinearSolver(row_ptr, col_idx, val, rhs, x)
Arguments
Type IntentOptional Attributes Name
integer(kind=int64), intent(in) :: row_ptr(:)
integer(kind=int32), intent(in) :: col_idx(:)
real(kind=real64), intent(in) :: val(:)
real(kind=real64), intent(in) :: rhs(:)
real(kind=real64), intent(inout) :: x(:)

public subroutine LinearReyleighNewmarkSeismicAnalysis(obj, TOL)

Arguments

Type IntentOptional Attributes Name
class(SeismicAnalysis_), intent(inout) :: obj
real(kind=real64), intent(in), optional :: TOL

public subroutine recordMaxValuesSeismicAnalysis(Obj)

Arguments

Type IntentOptional Attributes Name
class(SeismicAnalysis_), intent(inout) :: Obj

public subroutine removeSeismicAnalysis(obj)

Arguments

Type IntentOptional Attributes Name
class(SeismicAnalysis_), intent(inout) :: obj

public subroutine absorbingBoundarySeismicAnalysis(obj, x_min, x_max, y_min, y_max, z_min, z_max, direction, dumping_ratio)

Arguments

Type IntentOptional Attributes Name
class(SeismicAnalysis_), intent(inout) :: obj
real(kind=real64), intent(in), optional :: x_min
real(kind=real64), intent(in), optional :: x_max
real(kind=real64), intent(in), optional :: y_min
real(kind=real64), intent(in), optional :: y_max
real(kind=real64), intent(in), optional :: z_min
real(kind=real64), intent(in), optional :: z_max
character(len=1) :: direction
real(kind=real64), intent(in), optional :: dumping_ratio

public subroutine modalAnalysisSeismicAnalysis_single_domain(this, femdomain, YoungModulus, PoissonRatio, Density, fix_node_list_x, fix_node_list_y, fix_node_list_z)

Arguments

Type IntentOptional Attributes Name
class(SeismicAnalysis_), intent(inout) :: this
type(FEMDomain_), intent(inout), target :: femdomain
real(kind=real64), intent(in) :: YoungModulus(:)
real(kind=real64), intent(in) :: PoissonRatio(:)
real(kind=real64), intent(in) :: Density(:)
integer(kind=int32), intent(in), optional, allocatable :: fix_node_list_x(:)
integer(kind=int32), intent(in), optional, allocatable :: fix_node_list_y(:)
integer(kind=int32), intent(in), optional, allocatable :: fix_node_list_z(:)

public subroutine modalAnalysisSeismicAnalysis_multi_domain(this, femdomains, connectivity, YoungModulus, PoissonRatio, Density, fix_node_list_x, fix_node_list_y, fix_node_list_z, overset_algorithm, penalty)

Arguments

Type IntentOptional Attributes Name
class(SeismicAnalysis_), intent(inout) :: this
type(FEMDomain_), intent(inout) :: femdomains(:)
integer(kind=int32), intent(in) :: connectivity(:,:)
real(kind=real64), intent(in) :: YoungModulus(:)
real(kind=real64), intent(in) :: PoissonRatio(:)
real(kind=real64), intent(in) :: Density(:)
integer(kind=int32), intent(in), optional :: fix_node_list_x(:)
integer(kind=int32), intent(in), optional :: fix_node_list_y(:)
integer(kind=int32), intent(in), optional :: fix_node_list_z(:)
integer(kind=int32), intent(in) :: overset_algorithm
real(kind=real64), intent(in), optional :: penalty

public subroutine vtkSeismicAnalysis(this, name, num_mode, amp, scalar_field, with_stress)

Arguments

Type IntentOptional Attributes Name
class(SeismicAnalysis_), intent(in) :: this
character(len=*), intent(in) :: name
integer(kind=int32), intent(in) :: num_mode
real(kind=real64), intent(in) :: amp
real(kind=real64), intent(in), optional :: scalar_field(:)
integer(kind=int32), intent(in), optional :: with_stress(1:2)

public subroutine setSolverParametersSeismicAnalysis(this, error, debug)

Arguments

Type IntentOptional Attributes Name
class(SeismicAnalysis_), intent(inout) :: this
real(kind=real64), intent(in), optional :: error
logical, intent(in), optional :: debug

public subroutine exportModeShapeSeismicAnalysis(this, domainID, femdomain, name, MAX_MODE_NUM, amp)

Arguments

Type IntentOptional Attributes Name
class(SeismicAnalysis_), intent(in) :: this
integer(kind=int32), intent(in) :: domainID
type(FEMDomain_), intent(inout) :: femdomain
character(len=*), intent(in) :: name
integer(kind=int32), intent(in), optional :: MAX_MODE_NUM
real(kind=real64), intent(in), optional :: amp