File indexing completed on 2018-03-02 18:41:06 UTC
view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
8e4c181d69 Jean*0001 # include "GAD_OPTIONS.h"
0002
0003 SUBROUTINE GAD_PQM_HAT_X(bi,bj,kk,iy,
0004 & method,mask,fbar,edge,
0005 & ohat,fhat,myThid)
0006
0007
0008
0009
0010 implicit none
0011
0012
0013 # include "SIZE.h"
0014 # include "GRID.h"
0015 # include "GAD.h"
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034 integer bi,bj,kk,iy
0035 integer method
0036 _RL mask(1-OLx:sNx+OLx)
0037 _RL fbar(1-OLx:sNx+OLx)
0038 _RL edge(1:2,
0039 & 1-OLx:sNx+OLx)
0040 _RL ohat(1:2,
0041 & 1-OLx:sNx+OLx)
0042 _RL fhat(1:5,
0043 & 1-OLx:sNx+OLx)
0044 integer myThid
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059 integer ii,ix
0060 _RL ff00
0061 _RL ffll,ffrr
0062 _RL xhat
0063 _RL fell,ferr
0064 _RL dell,derr
0065 _RL dfds(-1:+1)
0066 _RL uhat(+1:+5)
0067 _RL lhat(+1:+5)
0068 _RL scal(+1:+2)
0069 _RL fmag,fdel
0070 integer mono
0071
0072 do ix = 1-OLx+3, sNx+OLx-3
0073
0074 if (mask(ix) .gt. 0. _d 0) then
0075
0076
0077 xhat = dxF(ix,iy,bi,bj) * 0.5 _d 0
0078
0079
0080 ff00 = fbar(ix+0)
0081 ffll = ff00
0082 & + mask(ix-1)*(fbar(ix-1)-ff00)
0083 ffrr = ff00
0084 & + mask(ix+1)*(fbar(ix+1)-ff00)
0085
0086 fell = edge(+1,ix-0)
0087 ferr = edge(+1,ix+1)
0088
0089 dell = edge(+2,ix-0)
0090 derr = edge(+2,ix+1)
0091
0092 dell = dell * xhat
0093 derr = derr * xhat
0094
0095
0096
0097 if ( method.eq.ENUM_PQM_NULL_LIMIT ) then
0098
0099 CALL GAD_PQM_FUN_NULL ( ff00,
0100 & fell,ferr,dell,derr,lhat,mono)
0101
0102
0103 elseif ( method.eq.ENUM_PQM_MONO_LIMIT ) then
0104
0105 CALL GAD_PLM_FUN_U(ffll,ff00,ffrr,dfds)
0106
0107 CALL GAD_PQM_FUN_MONO ( ff00,ffll,ffrr,
0108 & fell,ferr,dell,derr,dfds,lhat,
0109 & mono)
0110
0111
0112 elseif ( method.eq.ENUM_PQM_WENO_LIMIT ) then
0113
0114 CALL GAD_PLM_FUN_U(ffll,ff00,ffrr,dfds)
0115
0116 CALL GAD_PQM_FUN_NULL ( ff00,
0117 & fell,ferr,dell,derr,uhat,mono)
0118
0119 CALL GAD_PQM_FUN_MONO ( ff00,ffll,ffrr,
0120 & fell,ferr,dell,derr,dfds,lhat,
0121 & mono)
0122
0123 if ( mono .gt. 0) then
0124
0125
0126 fdel = abs(ffrr-ff00)+abs(ff00-ffll)
0127 fmag = abs(ffll)+abs(ff00)+abs(ffrr)
0128
0129 if (fdel .gt. 1. _d -6 * fmag) then
0130
0131
0132 CALL GAD_OSC_MUL_X(ix,+2,mask,
0133 & ohat,scal)
0134
0135 do ii = +1, +5
0136
0137 lhat(ii) = scal(1) * uhat(ii)
0138 & + scal(2) * lhat(ii)
0139 end do
0140
0141 end if
0142
0143 end if
0144
0145
0146 endif
0147
0148 do ii = +1, +5
0149
0150 fhat(ii,ix) = lhat(ii)
0151 end do
0152
0153 else
0154
0155 do ii = +1, +5
0156 fhat(ii,ix) = 0.0 _d 0
0157 end do
0158
0159 end if
0160
0161 end do
0162
0163 return
0164
0165
0166 end