Forked from
agnumpde / dune-tectonic
140 commits ahead of the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
2d-event-writer.R 2.51 KiB
source('tools/support/findQuakes.R')
finalTime <- 1000 # s
convergenceVelocity <- 5e-5 # m/s
criticalVelocity <- 1000e-6 + convergenceVelocity
paste. <- function(...) paste(..., sep='.')
pasteColon<- function(...) paste(..., sep=':')
directories <- ini::read.ini('config.ini')$directories
dir.create(directories[['output']], recursive=TRUE, showWarnings=FALSE)
for (basedir in c("rfpitol=100e-7")) {
dir <- file.path(directories[['simulation']],
'2d-lab-fpi-tolerance', basedir)
h5file <- h5::h5file(file.path(dir, 'output.h5'), 'r')
relativeTime <- h5file['relativeTime'][]
realTime <- finalTime * relativeTime
velocityProxy<- h5file['/frictionalBoundary/velocity']
quakes <- findQuakes(criticalVelocity, velocityProxy,
indices = 1:dim(velocityProxy)[1], 1)
basalCoordinates <- h5file['/frictionalBoundary/coordinates'][]
maximumVelocities<- maxVelocity(velocityProxy[,,1])
displacement <- h5file['/frictionalBoundary/displacement']
numVertices <- dim(displacement)[[2]]
for (quakeID in seq(nrow(quakes))) {
qb <- quakes[[quakeID,'beginningIndex']]
qe <- quakes[[quakeID,'endingIndex']]
localSlippingTimes <- abs(velocityProxy[qb:qe,,1][,,1]) > criticalVelocity
qd <- displacement[qb:qe,,1]
slip <- vector(mode='numeric', length=numVertices)
for (i in seq(numVertices)) {
if (any(localSlippingTimes[,i])) {
begs <- positiveStarts(localSlippingTimes[,i])
ends <- negativeStarts(localSlippingTimes[,i])
slip[i]<- sum(qd[ends,i,] - qd[begs,i,])
}
}
quakes[quakeID,'peakSlip'] <- max(abs(slip))
quakes[quakeID,'peakSlipRate'] <- max(maximumVelocities[qb:qe])
maxRuptureWidth <- 0
for (ts in seq(dim(localSlippingTimes)[[1]])) {
st <- localSlippingTimes[ts,]
if (!any(st))
next;
slippingCoordinates <- basalCoordinates[st,1] # x-coordinate only
maxRuptureWidth <- max(maxRuptureWidth, diff(range(slippingCoordinates)))
}
quakes[quakeID,'ruptureWidth'] <- maxRuptureWidth
}
h5::h5close(h5file)
quakes$beginning <- realTime[quakes$beginningIndex]
quakes$ending <- realTime[quakes$endingIndex]
write.csv(quakes[c('beginning','ending',
'peakSlip','peakSlipRate',
'ruptureWidth')],
row.names = FALSE, quote = FALSE,
file = file.path(directories[['output']],
paste.(pasteColon('events', basedir), 'csv')))
}