2.6. Subroutines for Customizing Loads

Activate these subroutines via USRCAL.

2.6.1. Subroutine usrefl (Changing Scalar Fields to User-Defined Values)

*deck,usrefl                      USERDISTRIB
      subroutine usrefl (key,iel,ielc,nnod,nodes,time,defalt,nd,dat)
c *** primary function:  change the scalar fields (temperatures, fluences,
c                  heat generation, etc.) to what user desires.
c *** secondary functions: none
c
c         in order to activate this user programmable feature,
c         the user must enter the usrcal command.
c
c         this routine is called at each substep of each load step
c         for which element or nodal temperatures(etc) are used.
c         it is called for each equilibrium iteration.
c         the call to get the standard ansys input element or nodal values
c         is made just before entering this routine.
c
c         *** Copyright ANSYS.  All Rights Reserved.
c         *** ansys, inc.
c
c *** Notice - This file contains ANSYS Confidential information ***
c
c     typ=int,dp,log,chr,dcp   siz=sc,ar(n)   intent=in,out,inout
c
c  input arguments:
c     variable (typ,siz,intent)    description
c     key      (int,sc,in)       - type of data desired
c                                  = 1 temperatures
c                                  = 2 fluences
c                                  = 3 heat generation rates
c                                  = 4 moisture contents
c                                  = 5 magnetic virtual displacements
c     iel      (int,sc,in)       - element number
c     ielc   (int,ar(IELCSZ),in) - array of element type characteristics
c     nnod     (int,sc,in)       - number of nodes
c     nodes    (int,ar(nnod),in) - list of nodes
c     time     (dp,sc,in)        - time of current substep
c     defalt   (dp,sc,in)        - default value (e.g. tunif)
c     nd       (int,sc,in)       - size of dat array
c     dat      (dp,ar(nd),inout) - array of data as normally computed by element
c                                  as selected by key
c
c  output arguments:
c     variable (typ,siz,intent)    description
c     dat      (dp,ar(nd),inout) - array of data passed back to element
c                                    this data represents values at the end
c                                    of the load step
c
c        the input argument dat may be used in one of three ways:
c            1.  it may be simply passed thru
c            2.  it may be used as a flag(e.g. if dat(1) = -3.0, use
c                                   a certain set of logic)
c            3.  it may be completely ignored and instead defined with new logic
c

2.6.2. Subroutine userpr (Changing Element Pressure Information)

*deck,userpr                      USERDISTRIB
      subroutine userpr (ielc,elem,time,ndat,dat)
c *** primary function:    change element pressure information.

c         *** Copyright ANSYS.  All Rights Reserved.
c         *** ansys, inc.

c         in order to activate this user programmable feature,
c         the user must enter the 'usrcal,userpr' command.

c         this routine is called at each substep of each load step for which
c         pressures are used. it is called for each equilibrium iteration.
c         it is called once per element.
c         the call to get the standard ansys input pressures is made just before
c         entering this routine.

c     input arguments:
c        variable (typ,siz,intent)    description
c        ielc   (int,ar(IELCSZ),in) - array of element type characteristics
c        elem     (int,sc,in)       - element number for operation.
c        time     (dp,sc,in)        - time of current substep
c        ndat     (int,sc,in)       - number of pressure items for this element
c        dat      (dp,ar(ndat,2),inout) - the element pressure vector
c                                      (has input values for each corner
c                                      of each face)


c     output arguments:
c        variable (typ,siz,intent)    description
c        dat      (dp,ar(ndat,2),inout) - the element pressure vector
c                                      (defines input values for each corner
c                                      of each face)
c                                      dat(1:ndat,1) - real pressures
c                                      dat(1:ndat,2) - complex pressures
c                                                      (surface elements only)


c        the input array  dat  may be used in one of three ways:
c          1.  it may be simply passed thru
c          2.  it may be used as a flag(e.g. if dat(1) = -3.0, use
c                 a certain set of logic)
c          3.  it may be completely ignored and instead defined with new logic


2.6.3. Subroutine usercv (Changing Element Face Convection Surface Information)

*deck,usercv                      USERDISTRIB
      subroutine usercv (elem,ielc,time,nr,u, ndat,hc,tb)
c *** primary function: change element face convection surface info
c
c         *** Copyright ANSYS.  All Rights Reserved.
c         *** ansys, inc.
c
c         in order to activate this user programmable feature,
c         the user must enter the 'usrcal,usercv' command.
c
c        the input arguments hc and tb may be used in one of three ways:
c            1.  they may be simply passed thru.
c            2.  they may be used as a flag(e.g. if hc(2) = -3.0, use
c                                   a certain set of logic).
c            3.  they may be completely ignored.
c                                    and instead redefined with new logic

c         this routine is called during each substep of each load step.
c         it is called for each equilibrium iteration.
c         it is called once per element.  it is called only during the heat
c         flow load vector formulation stage, and not during the heat flow
c         evaluation stage.
c         the call to get the standard ansys input convection surfaces
c         is made just before entering this routine, so this information is
c         available to be modified, if desired.
c
c         velocity-dependent film coefficients can be computed by inputting the
c         velocity as the input film coefficient or bulk temperature or
c         by inputting the velocity as a function of location in space.  this
c         routine could then compute the effective film coefficient.


c
c     input arguments:
c        variable (typ,siz,intent)    description
c        elem     (int,sc,in)       - element number for operation.
c        ielc   (int,ar(IELCSZ),in) - array of element type characteristics
c        time     (dp,sc,in)        - time of current substep
c        nr       (int,sc,in)       - number of nodal temperatures
c                                         of the element
c        u        (dp,ar(nr),in)    - vector of most recent values of the
c                                      temperatures
c        ndat     (int,sc,in)       - number of data points per element
c                                      for example, for solid70, ndat = 24 = 6*4
c                                      where 6 = faces per element
c                                            4 = corners per face
c        hc     (dp,ar(ndat),inout) - film coefficients
c                                      (has input values for each corner
c                                      of each face)
c        tb     (dp,ar(ndat),inout) - bulk temperature
c                                      (has input values for each corner
c                                      of each face)
c
c     output arguments:
c        variable (typ,siz,intent)    description
c        hc     (dp,ar(ndat),inout) - film coefficients
c                                      (defines input values for each corner
c                                      of each face)
c        tb     (dp,ar(ndat),inout) - bulk temperature
c                                      (defines input values for each corner
c                                      of each face)
c

2.6.4. Subroutine userfx (Changing Element Face Heat Flux Surface Information)

*deck,userfx                      USERDISTRIB
      subroutine userfx (ielc,elem,time,nr,u, ndat,dat)
c *** primary function: change element face heat flux surface info
c
c         *** Copyright ANSYS.  All Rights Reserved.
c         *** ansys, inc.
c
c         in order to activate this user programmable feature,
c         the user must enter the 'usrcal,userfx' command.
c
c         this routine is called during each substep of each load step.
c         it is called for each equilibrium iteration.
c         it is called once per element.  it is called only during the heat
c         flow load vector formulation stage, and not during the heat flow
c         evaluation stage.
c         the call to get the standard ansys input heat flux surfaces
c         is made just before entering this routine, so this information is
c         available to be modified, if desired.
c
c     input arguments:
c        variable (typ,siz,intent)    description
c        ielc   (int,ar(IELCSZ),in) - array of element type characteristics
c        elem     (int,sc,in)       - element number for operation.
c        time     (dp,sc,in)        - time of current substep
c        nr       (int,sc,in)       - number of nodal temperatures
c                                         of the element
c        u        (dp,ar(nr),in)    - vector of most recent values of the
c                                      temperatures
c        ndat     (int,sc,in)       - number of data points per element
c                                      for example, for solid70, ndat = 24 = 6*4
c                                      where 6 = faces per element
c                                            4 = corners per face
c        dat    (dp,ar(ndat),inout) - fluxes
c                                      (has input values for each corner
c                                      of each face)

c
c     output arguments:
c        variable (typ,siz,intent)    description
c        dat    (dp,ar(ndat),inout) - fluxes
c                                      (defines input values for each corner
c                                      of each face)
c

2.6.5. Subroutine userch (Changing Element Face Charge Density Surface Information)

*deck,userch                      USERDISTRIB
      subroutine userch (ielc,ielem,time,nr,u, ndat,dat)
c *** primary function: change element face charge density surface info
c
c         in order to activate this user programmable feature,
c         the user must enter the usrcal command.
c
c         this routine is called during each substep of each load step.
c         it is called once per element.  it is called only during the heat
c         flow load vector formulation stage, and not during the heat flow
c         evaluation stage.
c         the call to get the standard ansys input charge densities of surfaces
c         is made just before entering this routine, so this information is
c         available to be modified, if desired.
c
c         *** Copyright ANSYS.  All Rights Reserved.
c         *** ansys, inc.
c
c     input arguments:
c        variable (typ,siz,intent)    description
c        ielc   (int,ar(IELCSZ),in) - array of element type characteristics
c        ielem    (int,sc,in)       - element number for operation.
c        time     (dp,sc,in)        - time of current substep
c        nr       (int,sc,in)       - number of nodal temperatures
c                                         of the element
c        u        (dp,ar(nr),in)    - vector of most recent values of the
c                                      temperatures
c        ndat     (int,sc,in)       - number of data points per element
c        dat    (dp,ar(ndat),inout) - fluxes
c
c     output arguments:
c        variable (typ,siz,intent)    description
c        dat    (dp,ar(ndat),inout) - fluxes
c
c        the input argument dat may be used in one of three ways:
c            1.  they may be simply passed thru.
c            2.  they may be used as a flag(e.g. if dat(2) = -3.0, use
c                                   a certain set of logic).
c            3.  they may be completely ignored.
c                                    and instead redefined with new logic
c

2.6.6. Subroutine userfd (Calculating the Complex Load Vector for Frequency Domain Logic)

*deck,userfd                      USERDISTRIB
      subroutine userfd (nr,kcbrm,kpfor,ktrsur,isur,
     x cb,do,doext,aread,alenv,denswat,faclen,conac,fluidt,visc,
     x watbas,watcur,watwav,xyzup,tr,accel,puvel,u,zass,
     x forl,zsc,zsc2,pdyn,holdwv)
c *** primary function:  compute complex load vector for frequency domain logic
c                        for pipe59
c *** secondary functions: none
c     -- accessed with keyopt(12) = 2
c
c         *** Copyright ANSYS.  All Rights Reserved.
c         *** ansys, inc.
c *** Notice - This file contains ANSYS Confidential information ***
c
c  input arguments:
c     nr       (int,sc,in)       - matrix size
c     kcbrm    (int,sc,in)       - key for reduced matrices/cable option
c     kpfor    (int,sc,in)       - keyopt for hydrodynamic printout
c     ktrsur   (int,sc,in)       - keyopt for surface treatment(unfinished)
c     isur     (int,sc,in)       - surface flag
c     cb       (dp,sc,in)        - buoyancy coefficient (real constant)
c     do       (dp,sc,in)        - outside diameter of pipe
c     doext    (dp,sc,in)        - outside diameter of insulation
c     aread    (dp,sc,in)        - area of displaced water
c     alenv    (dp,sc,in)        - length of element
c     denswat  (dp,sc,in)        - water density
c     faclen   (dp,sc,in)        - wetted fraction of pipe
c     conac    (dp,sc,in)        - added mass per unit length
c     fluidt   (dp,sc,in)        - fluid temperature
c     visc     (dp,sc,in)        - viscosity
c     watbas   (dp,ar(*),in      - water basic table
c     watcur   (dp,ar(*),in      - water current table
c     watwav   (dp,ar(*),in      - water wave table
c     xyzup    (dp,ar(3,2),in)   - updated coordinates
c     tr       (dp,ar(3,3),in)   - local to global transformation matrix
c     accel    (dp,ar(3),in)     - acceleration vector
c     puvel    (int,sc,in)       - index for velocities in u matrix
c     u        (dp,ar(nr,5),in   - displacements and velocities
c     zass     (dp,ar(nr,nr),in) - mass matrix
c     forl     (dp,ar(12),inout) - force vector in element coordinates
c     zsc      (dp,ar(nr),inout) - real load vector for frequency domain
c     zsc2     (dp,ar(nr),inout) - complex load vector for frequency domain
c
c  output arguments:
c     forl     (dp,ar(12),inout) - force vector in element coordinates
c     zsc      (dp,ar(nr),inout) - real load vector for frequency domain
c     zsc2     (dp,ar(nr),inout) - complex load vector for frequency domain
c     pdyn     (dp,ar(2),out)    - dynamic pressure
c     holdwv   (dp,ar(60),out)   - wave information held for printout
c

2.6.7. Function userpe (Calculating Rotation Caused by Internal Pressure)

*deck,userpe                      USERDISTRIB
      function userpe (prs,rvrp,angle,ex,nuxy)

c primary function:    calculate the rotation caused by internal pressure
c                      on an elbow element
c                      This function is only called by el18(pipe18)
c                                              if keyopt(5) = 1

c *** Notice - This file contains ANSYS Confidential information ***

c         *** Copyright ANSYS.  All Rights Reserved.
c         *** ansys, inc.
                                                                     
c     typ=int,dp,log,chr,dcp   siz=sc,ar(n)   intent=in,out,inout
                                                                 
c  input arguments:
c     variable (typ,siz,intent)    description
c     prs      (dp,ar(5),in)     - pressure vector
c     rvrp     (dp,ar(11),in)    - real constants(see elements manual)
c     angle    (dp,sc,in)        - subtended angle
c     ex       (dp,sc,in)        - Young's modulus
c     nuxy     (dp,sc,in)        - Poisson's ratio

c  output arguments:
c     variable (typ,siz,intent)    description
c     userpe   (dp,sc,out)       -  rotation caused by internal pressure on the 
c                                     elbow element
                                             

2.6.8. Subroutine usrsurf116 (Modifying SURF151 and SURF152 Film Coefficients and Bulk Temperatures)

*deck,usrsurf116                      USERDISTRIB
      subroutine usrsurf116 (elem,ielc,center,jdim,kaxis,time,nr,u,
     x                omeg,ndat,temvel,hc,tb,temfluid,mdot,key)
c *** primary function: change element convection surface info
c     for surf151 and/or surf152 based on information from fluid116.
c     It is called by el151 and el152.
c
c         in order to activate this user programmable feature,
c         the user must have used fluid116 with keyopt(2) = 1.
c         Further, surf151 and/or surf152 must have keyopt(5) = 1 or 2
c         (include extra node).  Finally, for this routine to do anything,
c         key(1) and/or key(2) must be reset in this routine to a 
c         nonzero number.  There is no usrcal control over this routine.
c
c         *** Copyright ANSYS.  All Rights Reserved.
c         *** ansys, inc.
c *** Notice - This file contains ANSYS Confidential information ***
c
c     input arguments:
c        variable (typ,siz,intent)    description
c        elem   (int,sc,in)         - element number for operation.
c        ielc   (int,ar(IELCSZ),in) - array of element type characteristics
c        center (dp,ar(3),in)       - coordinates of center of surface element
c        jdim   (int,sc,in)         - dimensionality key
c                                        1 = 2d
c                                        2 = axisymmetric
c                                        3 = 3d
c        kaxis  (int,sc,in)         - axis of rotation (keyopt(3) for el152)
c                                       (see getv116 for definition)
c        time   (dp,sc,in)          - time of current substep
c        nr     (int,sc,in)         - number of nodal temperatures
c                                         of the element
c        u      (dp,ar(nr),in)      - vector of most recent values of the
c                                      temperatures
c        omeg   (dp,sc,in)          - spin real constant (may be from table)
c        ndat   (int,sc,in)         - number of data points per element
c        hc     (dp,ar(ndat),inout) - film coefficients
c                                      (has input values for each corner
c                                      of element) 
c        tb     (dp,ar(ndat),in) - bulk temperature
c                                      (has input values for each corner
c                                      of element)
c        temfluid (dp,sc,in)        - temp of fluid at surf151/152 centroid
c                                   - when using kyop5 = 1 or 2
c        mdot (dp,sc,in)            - mass flow rate of fluid when using
c                                   - kyop5 = 2 ( 0 otherwise )
c
c     output arguments:
c        variable (typ,siz,intent)    description
c        temvel (dp,sc,out)         - user defined bulk temperature in excess of
c                                      fluid node temperature
c        hc     (dp,ar(ndat),inout) - film coefficients
c                                      (defines input values for each corner
c                                      of element)
c        key    (int,ar(2),out)     - key if to use this logic
c                                      key(1) = 0 = no new film coefficient
c                                      key(1) = 1 = define new film coefficient
c                                      key(2) = 0 do not use any temvel
c                                             = 1 use constant temvel
c                                             = 2 use bilinear variation
c                                                 of temvel by
c                                                 redefining tb array
c
c         this routine is called during each substep of each load step.
c         it is called for each equilibrium iteration.
c         it is called once per element.  it is called only during the heat
c         flow load vector formulation stage, and not during the heat flow
c         evaluation stage.
c         the call to get the standard ansys input convection surfaces
c         is made just before entering this routine, so this information is
c         available to be modified, if desired.
c
c         This routine may be thought of as a specialized version of usercv.
c         Indeed, el151 and el152 also call usercv.  Either (or both, rarely)
c         could be used.
c
c         velocity-dependent film coefficients and bulk temperatures can
c         be computed by using the velocities and other information from
c         fluid116.
c         Details of this procedure are:
c            -- SURF151 or SURF152 are 'pasted' onto the actual solid model.
c            -- flow rate is input to or is computed by FLUID116,
c                 with KEYOPT(2) = 1
c            -- flow rate may be a function of time
c            -- the user defines nodes on the FLUID116 network to be the same
c                 nodes as the 'extra' nodes of SURF151 or SURF152.  If more
c                 than one FLUID116 element is attached to one of these nodes,
c                 the velocities are averaged.
c            -- SURF151 or SURF152 calls this routine, indirectly, to compute
c                 the film coefficient and bulk temperature.  This routine,
c                 in turn, gets the average velocity at the 'extra' node
c                 using 'getv116', as shown below.  Other quantities brought
c                 in by getv116 are also averaged.


2.6.9. Subroutine User116Cond (Calculating the Conductance Coefficient for FLUID116)

*deck,User116Cond                      USERDISTRIB
      subroutine User116Cond(elem,prop,rvr,aleng,re,fric,uptot,uttot, 
     x    bco)
c primary function:  compute bc for conductance coefficient for fluid116 
                                       
c *** Notice - This file contains ANSYS Confidential information ***
c
c         *** Copyright ANSYS.  All Rights Reserved.
c         *** ansys, inc.
                                                                     
c  input arguments:
c     elem     (int,sc,in)       - element number
c     prop     (dp,ar(4),in)     - material property vector
c                                    order is:  dens,visc,kxx,c
c     rvr      (dp,ar(24),in)    - real constant vector
c     aleng    (dp,sc,in)        - element length
c     re       (dp,sc,in)        - reynold's number
c     fric     (dp,sc,in)        - friction factor
c     uptot    (dp,ar(2),in      - nodal pressure values from previous iteration
c     uttot    (dp,ar(4),in      - nodal temperature values from prev iteration
c     bco      (dp,sc,inout)     - the conductance coefficient from TB,fcon
                                             
c  output arguments:
c     bco      (dp,sc,inout)     - the desired conductance coefficient
                                             

2.6.10. Subroutine User116Hf (Calculating the Film Coefficient for FLUID116)

*deck,User116Hf                      USERDISTRIB
      subroutine User116Hf (elem,prop,rvr,aleng,re,uptot,uttot,hf)
c primary function:  compute hf for film coefficient for fluid116 
                                       
c *** Notice - This file contains ANSYS Confidential information ***
c
c         *** Copyright ANSYS.  All Rights Reserved.
c         *** ansys, inc.
                                                                     
c  input arguments:
c     elem     (int,sc,in)       - element number
c     prop     (dp,ar(4),inout)  - material property vector
c                                    order is:  dens,visc,kxx,c
c     rvr      (dp,ar(18),in)    - real constant vector 
c     aleng    (dp,sc,in)        - element length
c     re       (dp,sc,in)        - reynold's number
c     uptot    (dp,ar(2),in      - nodal pressure values from previous iteration
c     uttot    (dp,ar(4),in      - nodal temperature values from prevs iteration
c     hf       (dp,sc,inout)     - the film coefficient from TB,hflm
c                                - as a function of temp and velocity
                                             
c  output arguments:
c     hf       (dp,sc,inout)     - the desired film coefficient
                                             

2.6.11. Subroutine userPartVelAcc (Calculating Particle Velocities and Accelerations of Ocean Waves)

The userPartVelAcc subroutine is the primary component of the API for inputting your own wave and current information. The API supports the hydrodynamic capability available with line elements (such as LINK180, BEAM188, BEAM189, PIPE288, and PIPE289). The userPartVelAcc subroutine works with the following subroutines:

For your convenience, two I/O service subroutines are called by the userPartVelAcc subroutine: wvhybl and wvargu .

*deck,userPartVelAcc                      USERDISTRIB
      subroutine userPartVelAcc (elemId,domInt,xyzg,doIns,depth,denswat,
     x                           ncm, pCur,watcur, 
     x                           nw,  pWav,watwav, timval,
     x                           argu,eta,vxyz,axyz,ar,pdynam)
c        ---- accessed only if kwav .ge. 101 -----
c   ***** primary function:  compute particle velocities and accelerations
c                            due to waves and current
c   ***** secondary function:  compute dynamic pressures 
c
c         *** Copyright ANSYS.  All Rights Reserved.
c         *** ansys, inc.
c *** Notice - This file contains ANSYS Confidential information ***
c
c  input arguments:
c     elemId   (int,sc,in)       - element id
c     domInt   (int,sc,in)       - integration point number
c     xyzg     (dp,ar(3),in)     - coordinates of point of interest
c     doIns    (dp,sc,in)        - outside diameter with insulation
c     depth    (dp,sc,in)        - water depth
c     denswat  (dp,sc,in)        - water density
c     ncm      (int,sc,in)       - number of current measurements
c     pCur     (int,sc,in)       - pointer in current table (= 30 at 12.0)
c                                     i.e. first item is at watcur(pCur+1)
c     watcur   (dp,ar(*),in)     - water current table
c                                           ic = current reading number
c                                   watcur( 6) = ncm = number of current measurements
c                                   watcur(pCur + (ic-1)*6 + 1) = Z Coor
c                                   watcur(pCur + (ic-1)*6 + 2) = Velocity
c                                   watcur(pCur + (ic-1)*6 + 3) = Angle
c                                   watcur(pCur + (ic-1)*6 + 4) = Temperature
c                                   watcur(pCur + (ic-1)*6 + 5) = Spare
c                                   watcur(pCur + (ic-1)*6 + 6) = Spare
c     nw       (dp,sc,in)        - number of wave components
c     pWav     (int,sc,in)       - pointer to wave table (= 30 at 12.0)
c     watwav   (dp,ar(*),in)     - water wave table
c                                   watwav( 6) = nw = number of wave components
c                                   watwav(11) = KWAVE  (kwav)
c                                   watwav(12) = THETA
c                                   watwav(13) = WAVLOC (kpeak)
c                                   watwav(14) = KCRC
c                                   watwav(15) = KMF
c                                   watwav(16) = PRKEY
c                                           iw = wave number
c                                   watwav(pWav + (iw-1)*6 + 1) = Wave Height
c                                   watwav(pWav + (iw-1)*6 + 2) = Period
c                                   watwav(pWav + (iw-1)*6 + 3) = Phase Shift
c                                   watwav(pWav + (iw-1)*6 + 4) = Wave Length
c                                   watwav(pWav + (iw-1)*6 + 5) = Spare
c                                   watwav(pWav + (iw-1)*6 + 6) = Spare
c     timval   (dp,sc,in)        - current time value
c
c  output arguments:
c       While the below 7 arguments are output, they can also
c       be used as input, based on other ANSYS input.
c     argu     (dp,sc,out)       - position in wave (radians) (passed out only for output)
c     eta      (dp,sc,out)       - total wave height
c     vxyz     (dp,ar(3),out)    - particle velocities
c     axyz     (dp,ar(3),out)    - particle accelerations
c     ar       (dp,sc,out)       - radial particle acceleration
c     pdynam   (dp,sc,out)       - dynamic pressure head
c
c  local variable
c     phead    (dp,sc,out)       - pressure head
c

2.6.11.1. Subroutine userPartVelAccSetup (Initializing Data for Use by the userPartVelAcc Subroutine)

This subroutine initializes the data for the userPartVelAcc subroutine.

*deck,userPartVelAccSetup                      USERDISTRIB
      subroutine userPartVelAccSetup ( kch,ptr_Ocean,
     x                                 nsize,nsizec,nsizew,
     x                                 dWork,dWorkC,dWorkW,
     x                                 rkd,wvmax )
c        ---- accessed only if kwav .ge. 101 -----
c *** primary function: set up and checking of user wave (and current) theory
c *** secondary functions: none
c *** Notice - This file contains ANSYS Confidential information ***
c Copyright ANSYS.  All Rights Reserved.
c
c
c  input arguments:
c     kch      (int,sc,in)       - key for checking or defaulting (not used by PIPE288)
c     ptr_Ocean (int,sc,in)      - storage offset
c     nsize    (int,sc,in)       - size of ocean basic data
c     nsizec   (int,sc,in)       - size of ocean current data
c     nsizew   (int,sc,in)       - size of ocean wave data
c     dWork    (dp,ar(*),inout)  - raw ocean basic data (dWork = watbas)
c                                   watbas( 6) = nReN = number of Reynold's numbers
c                                   watbas(11) = DEPTH
c                                   watbas(12) = MATOC
c                                   watbas(13) = KFLOOD
c                                   watbas(14) = Ci
c                                   watbas(15) = Cb
c                                         pBas = 30 (at Rev 12.0) (to be added to argument list)
c                                           ir = Reynold's number number
c                                   watbas(pBas + (ir-1)*9 + 1) = RE
c                                   watbas(pBas + (ir-1)*9 + 2) = CDy
c                                   watbas(pBas + (ir-1)*9 + 3) = CDz
c                                   watbas(pBas + (ir-1)*9 + 4) = CT
c                                   watbas(pBas + (ir-1)*9 + 5) = CMy
c                                   watbas(pBas + (ir-1)*9 + 6) = CMz
c     dWorkC   (dp,ar(*),inout)  - raw ocean current data (dWorkC = watcur)
c     dWorkW   (dp,ar(*),inout)  - raw ocean wave    data (dworkW = watwav) 
c                                     - see userPartVelAcc.F for details for watcur and watwav
c
c  output arguments:
c     dWork    (dp,ar(*),inout)  - adjusted ocean basic data
c     dWorkC   (dp,ar(*),inout)  - adjusted ocean current data
c     dWorkW   (dp,ar(*),inout)  - adjusted ocean wave data
c     rkd      (dp,sc,out)       - value of k*d
c     wvmax    (dp,sc,out)       - total wave height


2.6.11.2. Subroutine userWavHt

The userWavHt subroutine calculates the wave height of a user-defined wave for the userPartVelAcc subroutine.

*deck,userWavHt                      USERDISTRIB
      subroutine userWavHt (xyzg,doext,depth,nw,pWav,watwav,timval,
     &                      eta,etadot)
c        ---- accessed only if kwave .ge. 101 -----
c     *** primary function: calculate wave height for user wave
c     ***                       over point at xyzg of the element
c     *** secondary functions:  none
c
c *** Notice - This file contains ANSYS Confidential information ***
c Copyright ANSYS.  All Rights Reserved.
c
c  input arguments:
c     xyzg     (dp,ar(3),in)       - updated coordinates of point of interest in
c     doext    (dp,sc,in)          - outside diameter with insulation
c                                    if timval<0.0, argu = doext
c     depth    (dp,sc,in)          - water depth
c     nw       (int,sc,in)         - number of waves
c     pWav     (int,sc,in)         - pointer to wave table
c     watwav   (dp,ar(*),in)       - water wave table
c     timval   (dp,sc,in)          - current time value
c                                    if timval < 0.0  
c                                       pass directly in doext position 
c                                       (used for stream function only)
c                                    else compute value in wvargu           
c
c  output arguments:
c     eta      (dp,sc,out)         - wave height
c     etadot   (dp,sc,out)         - time derivative of wave height
c

2.6.11.3. Subroutine wvhybl

The wvhybl subroutine computes the ratio of two hyperbolic functions and is intended for use with wave loading. It is a utility subroutine called by the userPartVelAcc subroutine.

*deck,wvhybl
      function wvhybl (kclass,x,y)
c *** primary function: to compute the ratio of two hyperbolic functions,
c                         specialized to the needs of wave loading.
c                         The options are as given with kclass below.
c                         Further, only positive values of x and y are used
c
c *** secondary functions: none
c
c *** Notice - This file contains ANSYS Confidential information ***
c
c  input arguments:
c     variable (typ,siz,intent)    description
c     kclass   (int,sc,in)       - 0 - cosh(x)/cosh(y)
c                                - 1 - sinh(x)/cosh(y)
c                                - 2 - cosh(x)/sinh(y)
c                                - 3 - sinh(x)/sinh(y)
c     x        (dp,sc,in)        - argument of numerator
c     y        (dp,sc,in)        - argument of denominator
c
c  output arguments:
c     variable (typ,siz,intent)    description
c     wvhybl   (dp,sc,out)       - resulting fraction
c

2.6.11.4. Subroutine wvargu

The wvargu subroutine computes the appropriate position with regard to the wave. It is a utility subroutine called by the userPartVelAcc subroutine.

*deck,wvargu
      function wvargu (kpeak,kmf,wavdat,timval,r,doext)
c     *** primary function: to find appropriate position wrt wave
c     *** secondary functions:  none
c
c *** Notice - This file contains ANSYS Confidential information ***
c
c  input arguments:
c     kpeak    (int,sc,in)       - keyopt for when peak effect occurs
c     kmf      (int,sc,in)       - key for maccamy-fuchs adjustment
c     wavdat   (dp,ar(6),in)     - wave data (from water wave table)
c                                       wavdat(1) = wave height(not used)
c                                       wavdat(2) = period
c                                       wavdat(3) = phase shift
c                                       wavdat(4) = wave length
c     timval   (dp,sc,in)        - current time value
c     r        (dp,sc,in)        - radial location of point of interest
c     doext    (dp,sc,in)        - effective outside diameter of pipe
c
c  output arguments:
c     wvargu   (dp,sc,out)       - wave position(as determined by the argument)
c                                  output in radians
c

2.6.12. Subroutine userPanelHydFor (Calculating Panel Loads Caused by Ocean Loading)

The userPanelHydFor subroutine applies loads and other effects onto SURF154 surface elements. This capability is accessed via KEYOPT(8) of SURF154, together with data read in via the userOceanRead subroutine.

*deck,userPanelHydFor                      USERDISTRIB
      subroutine userPanelHydFor (kPOcean, elemId, intPnt,
     x depth, denswat,
     x ncm, pCur, watcur,
     x nw , pWav, watwav,
     x xyzupp, vn,
     x presoc,admsoc)

c        ---- accessed only if kwave on the OCDATA command .ge. 101 -----
c primary function:    Get pressure loading on panel
c secondary functions: Get hydrodynamic mass on panel
c       load is applied on SURF154 with keyopt(8)

c *** Notice - This file contains ANSYS Confidential information ***
c Copyright ANSYS.  All Rights Reserved.

c  parameter definition include files:

2.6.12.1. Subroutine userOceanRead

The userOceanRead subroutine reads in ocean data to be used by the userPanelHydFor subroutine.

*deck,userOceanRead                      USERDISTRIB

      subroutine userOceanRead (iott,kpr,fUnitNo,iOption,
     x                            pdWaveData,lenWavDat)

c        ---- accessed only if kwave on the OCDATA command .ge. 101 -----
c Primary Function: read in ocean file for later use
c Secondary Functions: 
c                      
c -----------------
c Notice: 
c ------
C    This routine contains ANSYS, Inc. confidential information 
c Copyright ANSYS.  All Rights Reserved.
c -----------------
c  input arguments:
c     iott         (int,sc,in)     output unit number, based on then /OUT command
c     kpr          (log,sc,in)     print flag, based on the /NOPR command
c     fUnitNo      (int,sc,in)     file unit number, based on the command
c                                  OCREAD,file,ext,dir
c     iOption      (int,sc,in)     integer from the command line, based on
c                                  OCREAD,file,ext,dir,iOption
c     pdWaveData   (ptr,sc,out)    pointer to wave data array
c     lenWavDat    (int,sc,out)    length of wave data
c                                  0 = an error, no wave data is stored