typVol2Vol
Description
Vol2Vol interpolates the wave fields and return wave properties at given time and position. It has the multiple Surf2Vol classes and interpolation class. The Vol2Vol class structure is described in Fig. 3. The reconstructed HOS wave fields (snapshot of wave field) retrieved from Surf2Vol are used to construct interpolation data.
HOS result file holds modes amplitudes time series for the whole HOS simulation time. If we construct HOS wave fields and interpolation data structure for the whole HOS simulation time, not only the computation time is long but also a huge memory is demanded. Grid2Grid aims for construction of demanding wave fields for relatively short period and domain, it is not necessary to construct the whole HOS wave fields and interpolation data structure. Therefore revolving algorithm is applied just to update HOS wave fields adjucent to simulation time and constuct small interpolation data structure for efficient computation time and memory.
Fig. 3 Vol2Vol class structure
When Vol2Vol initialised, the Surf2Vol class array is allocated and initialise multiple Surf2Vol and connect those Surf2Vol class array with the revolving algorithm. The revolving algorithm determines which Surf2Vol should be updated and the order of Surf2Vol array for the efficient generation of interpolation data.
The subroutine correct with input \(t\) first determine HOS Surf2Vol correction index and Surf2Vol order based on input \(t\) and previous HOS time index. By using correction index and order, only necessary HOS Surf2Vol is updated and re-ordered to constructed for interpolation data. After interpolation data is constructed, it is delivered to the interpolation class. The interpolation class communicates with the bspline-Fortran module and constructs the interpolation data structure.
The subroutine getEta, getU, getPd and getFlow return interpolated values for given space and time from the constructed interpolation data structure.
Class (Type)
Class: Vol2Vol
Data:
nInterp_: Interpolation order (2: Linear, 3: Quadratic, 4: Cubic, … )nSaveT_: Number of Surf2Vol wave fields (nSaveT_\(>\)nInterp_)HOSs2v_(:): Array ofSurf2Volclassitp2D_: Interpolation class for 2D wavesitp3D_: Interpolation class for 3D waves
Functionality:
initialize: Initialise HOS Vol2Vol class with HOS type, result file path, …correct: Update HOS wave fields with real-timegetEta: Get interpolated wave elevationgetU: Get interpolated wave velocitygetPd: Get interpolated dynamic pressuregetFlow: Get flow informationdestroy: Class destroyer
How to use
Initialise
Vol2Vol
Call hosV2V%initialize(hosType, filePath, zMin, zMax, nZmin, nZmax, zMinRatio, zMaxRatio, iflag)
! hosV2V : Vol2vol Class (Type)
! hosType : HOS Type (Ocean or NWT)
! filePath : HOS result file path (modes_HOS_SWENS.dat)
! zMin, zMax : HOS grid z-minimum and z-maximul (vertical domain)
! nZmin, nZmax : Number of z-directional Grid
!
! zMinRatio, zMaxRatio (Optional)
! : Ratio of maximum and minimum height of grid (default=3)
!
! iflag : Wriging option (iflag = 1, write Grid2Grid information)
! or
Call hosV2V%initialize(dict)
! hosV2V : Vol2vol Class (Type)
! dict : HOS dictionary to initialize HOS vol2vol (Type)
Correct
Vol2Vol
Call hosV2V%correct(simulTime)
! hosV2V : Vol2vol Class (Type)
! simulTime : Simulation time (real time value)
Get wave elevation from
Vol2Vol
eta = hosV2V%getEta(x, y, simulTime, iflag)
! hosV2V : Vol2vol Class (Type)
! x, y : x and y position
! simulTime : Simulation time (real time value)
!
! eta : Wave elevation
!
! iflag (Optional)
! : if iflag = 1, nondimensional x and y can be given (default = 0).
Get wave velocity from
Vol2Vol
Call hosV2V%getU(x, y, z, simulTime, u, v, w, iflag)
! hosV2V : Vol2vol Class (Type)
! x, y, z : x, y and z position
! simulTime : Simulation time (real time value)
!
! u, v, z : Wave velocity ( x, y, z )
!
! iflag (Optional)
! : if iflag = 1, nondimensional x and y can be given (default = 0).
Get dynamic pressure from
Vol2Vol
pd = hosV2V%getPd(x, y, z, simulTime, iflag)
! hosV2V : Vol2vol Class (Type)
! x, y, z : x, y and z position
! simulTime : Simulation time (real time value)
!
! pd : Dynamic velocity (pd = p - rho * g * z)
!
! iflag (Optional)
! : if iflag = 1, nondimensional x and y can be given (default = 0).
Get flow information from
Vol2Vol
Call hosV2V%getFlow(x, y, z, simulTime, eta, u, v, w, pd, iflag)
! hosV2V : Vol2vol Class (Type)
! x, y, z : x, y and z position
! simulTime : Simulation time (real time value)
!
! eta : Wave elevation
! u, v, z : Wave velocity ( x, y, z )
! pd : Dynamic velocity (pd = p - rho * g * z)
!
! iflag (Optional)
! : if iflag = 1, nondimensional x and y can be given (default = 0).
Destroy
Vol2Vol
Call hosV2V%destroy()