User Subroutine Interface
subroutine vwave( C Write only - 1 fWaveSurf, fUnsteadyVel, fFluidAcc, 2 fUnsteadyPress, fUnsteadyDPressDZ, C Read/Write - 1 ScaleSteady, ScaleUnsteady, C Read only - 1 kStep, kInc, 2 nblock, ndim, nprops, naquaconst, nwindconst, 3 nstatevar, nfieldvar, iElemType, iLoadType, sname, 4 lUpdFluidVar, Coord, Velocity, StateVar, FieldVar, 5 DirVec, AquaSteadyConstants, WindConstants, 6 fSteadyVel, Props, dt, timeTotal, timeStep) C include 'vaba_param.inc' C parameter ( j_upd_FreeSurf = 0, 1 j_upd_FluidVarBuoyancy = 1, 2 j_upd_FluidVarDrag = 2, 3 j_upd_FluidVarInertia = 3, C The types of distributed loads: 1 j_lcr_PB = 51, 2 j_lcr_DragFDD = 53, j_lcr_DragWDD = 54, 3 j_lcr_DragFDT = 55, j_lcr_DragFI = 56, 4 j_lcr_DragFD1 = 57, j_lcr_DragFD2 = 58, 5 j_lcr_DragWD1 = 59, j_lcr_DragWD2 = 60, 6 j_lcr_DragFI1 = 61, j_lcr_DragFI2 = 62, C The types of concentrated loads: 1 j_ccr_TSB = 1002, j_ccr_DragTFD = 1004, 2 j_ccr_DragTWD = 1005, j_ccr_DragTSI = 1006 ) C dimension Props(nProps), Coord(nblock,ndim), 1 Velocity(nblock,ndim), StateVar(nblock,nstatevar), 2 FieldVar(nblock,nfieldvar), DirVec(nblock,ndim), 3 fWaveSurf(nblock), fFluidAcc(nblock,ndim), 4 fUnsteadyVel(nblock,ndim), fUnsteadyPress(nblock), 5 fUnsteadyDPressDZ(nblock), fSteadyVel(nblock,ndim), 6 AquaSteadyConstants(naquaconst), WindConstants(nwindconst) C character*80 sname C C The following if test and do loop structure illustrates C proper usage of this user subroutine. C if (lUpdFluidVar .eq. j_upd_FreeSurf) then C This part is executed at the first call. C do kn = 1,nblock C User coding to update fWaveSurf C optionally update StateVar end do C else C This part is executed at the second call. C if (lUpdFluidVar .eq. j_upd_FluidVarBuoyancy) then C Update variables for buoyancy loads (PB, TSB): do kn = 1,nblock C user coding to update fUnsteadyPress, fUnsteadyDPressDZ end do C optionally update multipliers ScaleSteady, ScaleUnsteady else if (lUpdFluidVar .eq. j_upd_FluidVarDrag) then C Update variables for drag loads (FDD, FDT, FD1, FD2, TFD): do kn = 1, nblock C User coding to update fUnsteadyVel end do C optionally update multipliers ScaleSteady, ScaleUnsteady else if (lUpdFluidVar .eq. j_upd_FluidVarInertia) then C Update variables for inertia loads (FI, FI1, FI2, TSI): do kn = 1, nblock C User coding to update fFluidAcc end do C optionally update multipliers ScaleSteady, ScaleUnsteady end if C end if C return end