C $Header: /u/gcmpack/MITgcm/pkg/ebm/ebm_wind_perturb.F,v 1.3 2009/04/28 18:11:51 jmc Exp $
C $Name: $
#include "EBM_OPTIONS.h"
CStartOfInterface
SUBROUTINE EBM_WIND_PERTURB( myTime, myIter, myThid )
C |==========================================================|
C | S/R EBM_WIND_PERTURB |
C | o Calculated random wind perturbations. |
C |==========================================================|
IMPLICIT NONE
C == Global data ==
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "GRID.h"
#include "DYNVARS.h"
#include "FFIELDS.h"
#ifdef ALLOW_EBM
# include "EBM.h"
#endif
C == Routine arguments ==
_RL myTime
INTEGER myIter
INTEGER myThid
CEndOfInterface
#ifdef ALLOW_EBM
# ifdef EBM_WIND_PERT
C == Local variables ==
C Loop counters
INTEGER i, j, bi, bj
_RS ya(1-OLy:sNy+OLy), ya2(1-OLy:sNy+OLy)
_RS xa(1-OLx:sNx+OLx), xa2(1-OLx:sNx+OLx)
_RS y(1-OLy:sNy+OLy), x(1-OLx:sNx+OLx)
_RS temp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
_RS temp2(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
_RS stdev(1-OLy:sNy+OLy)
_RS std(1:40)
data std /0.030, 0.035, 0.045, 0.053, 0.059, 0.060, 0.056,
& 0.048, 0.041, 0.038, 0.034, 0.029, 0.023, 0.018,
& 0.016, 0.015, 0.013, 0.011, 0.008, 0.005, 0.005,
& 0.005, 0.008, 0.011, 0.014, 0.014, 0.017, 0.019,
& 0.023, 0.029, 0.032, 0.038, 0.048, 0.058, 0.065,
& 0.067, 0.063, 0.060, 0.062, 0.064 /
DO bj=myByLo(myThid),myByHi(myThid)
DO bi=myBxLo(myThid),myBxHi(myThid)
DO j = 1-OLy, sNy+OLy
y(j) = 0.0
ya(j) = 0.0
ya2(j) = 0.0
stdev(j) = 0.0
ENDDO
DO i = 1-OLx, sNx+OLx
x(i) = 0.0
xa(i) = 0.0
xa2(i) = 0.0
ENDDO
DO i = 1-OLx, sNx+OLx
DO j = 1-OLy, sNy+OLy
temp(i,j) = 0.0
temp2(i,j) = 0.0
ENDDO
ENDDO
DO j = 1, sNy
stdev(j) = std(j)
ENDDO
cph Generate random numbers
cph Need to get this from somewhere!
call RANDOM_NUMBER (temp)
C interpolation in first dimension
C scaling to get a process with a standard deviation of 1
DO j = jMin, jMax
DO i = iMin, iMax
temp(i,j) = 1.73*(2.0*temp(i,j) - 1.0)
ENDDO
ENDDO
DO j = jMin, jMax
DO i = iMin, iMax
x(i) = i
xa(i) = x(i) - MOD(x(i),10.0)
xa2(i) = xa(i)+10.0
if ( xa2(i) .gt. sNx+Olx ) then
xa2(i) = 0.0
endif
temp2(i,j) = 0.1*( (x(i)-xa(i))*temp(INT(xa2(i)),j)+
& (10.0-x(i)+xa(i))*temp(INT(xa(i)),j) )
ENDDO
ENDDO
C interpolation in second dimension
C multiplication with observation zonal wind stress standard deviation
C add AR1 process
DO i = iMin, iMax
DO j = jMin, jMax
y(j) = j
ya(j) = y(j) - MOD(y(j),6.0)
ya2(j) = ya(j)+6.0
if ( ya2(j) .gt. sNy+Oly ) then
ya2(j) = 0.0
endif
c time lag correlation coefficient, use 0.75 for temperature timescale,
c 0.98 for the momentum timescale.
winPert(i,j,bi,bj) = maskW(i,j,k,bi,bj)*
& (1.0/1.66)*(0.75*winPert(i,j,bi,bj) +
& stdev(j)*(1.0/6.0)*
& ((y(j)-ya(j))*temp2(i,INT(ya2(j)))+
& (6.0-y(j)+ya(j))*temp2(i,INT(ya(j)))))
ENDDO
ENDDO
ENDDO
ENDDO
C CALL PLOT_FIELD_XYRS( winPert, 'winPert',1,myThid)
_EXCH_XY_RS(winPert , myThid )
# endif /* EBM_WIND_PERT */
#endif /* ALLOW_EBM */
end