!-------------------------------------- LICENCE BEGIN ------------------------------------
!Environment Canada - Atmospheric Science and Technology License/Disclaimer,
! version 3; Last Modified: May 7, 2008.
!This is free but copyrighted software; you can use/redistribute/modify it under the terms
!of the Environment Canada - Atmospheric Science and Technology License/Disclaimer
!version 3 or (at your option) any later version that should be found at:
!http://collaboration.cmc.ec.gc.ca/science/rpn.comm/license.html
!
!This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
!without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
!See the above mentioned License/Disclaimer for more details.
!You should have received a copy of the License/Disclaimer along with this software;
!if not, you can write to: EC-RPN COMM Group, 2121 TransCanada, suite 500, Dorval (Quebec),
!CANADA, H9P 1J3; or send e-mail to service.rpn@ec.gc.ca
!-------------------------------------- LICENCE END --------------------------------------
!
SUBROUTINE INITRND(CDCTL) 15,1
#if defined (DOC)
*
***s/r SPGD - Initialisation of spectral or grid model state
* . with random fields for testing purposes
*
*Author : P. Gauthier *ARMA/AES June 9, 1992
*Revision:
* L. Fillion *RPN/AES Jan 93 - Observation state option added
* P. Gauthier *ARMA/AES May 25, 1993:
* . Initialization for specific humidity and surface
* . pressure (all model states)
* L. Fillion *ARMA/AES Sep 1994: Ensure zero value of (0,0) spectral
* component of vorticity and divergence fields.
* S. Pellerin *ARMA/AES Sept 97.
* - Control of the different model state of the 3Dvar
* through COMSTATE, COMSTATEC and COMSTNUM common
* blocks variables (comstate.cdk).
*
* P. Gauthier *ARMA/MSC Aug. 2002
* . - revision of scaling options and correct the call to the random
* . number generator
*
* Purpose: creates a state with a random number generator
*Arguments
* i : CDCTL : = 'G' initialisation of COMGD0
* i : CDCTL : = 'S' initialisation of COMSP
* i : CDCTL : = 'M' initialisation of COMMVO
* o : comsp.cdk (array SP(NLA,2,NKSDIM))
* o : comgd0.cdk (array GD(NIBEG:NIEND,NKGDIM,NJBEG:NJEND))
* o : commvo.cdk (array GOMOBS(NKGDIMO,NOBTOT)
* -------------------
* The COMDECK "com2ini.cdk" is used to define the scales of the different
* variables
*
** Method: uses a random number generator to fill the fields
*
#endif
IMPLICIT NONE
*implicits
#include "pardim.cdk"
#include "comdim.cdk"
#include "comdimo.cdk"
#include "comlun.cdk"
#include "comgd0.cdk"
#include "comgem.cdk"
#include "comsp.cdk"
#include "commvo.cdk"
#include "com2ini.cdk"
#include "comstate.cdk"
*
C
CHARACTER*1 CDCTL
REAL*8 ZVS, ZGS, ZQS,ZRND, ZSCVOR, ZSCDIV, ZSCGZ
S ,ZSCQ, ZSCPS, ZPSURFACE, ZTT, ZSCTT
S ,RANF
INTEGER JGL, JLEV, JLON, JLA, JOBS, INI
C
ZPSURFACE = 0.
C
WRITE(NULOUT,FMT=9000)
9000 FORMAT(/,4X,'-INITRND: random initialization of the model state'
S ,' done in ')
C
SELECT CASE (CDCTL)
C
C * 1. Initialisation of the grid point model state
C . --------------------------------------------
*
CASE('G')
C
ZVS = GINUU*1.E-6
ZGS = GINGZ*1.
ZTT = GINTT
ZQS = GINQ*0.001
ZSCPS = GINPS*1.
C
WRITE(NULOUT,FMT=9100)ZVS,ZGS,ZQS,ZSCPS
9100 FORMAT(8X,'Grid Space. The following scales have been used:'
S ,/,8x,'(UU,VV):',G12.6
S ,2x,'GZ: ',G12.6,2X
S ,'Q: ',G12.6,2X
S ,'Ps: ',G12.6)
C
DO JLEV =1, NFLEV
DO JGL = 1, NJ
INI = NILON(JGL)
DO JLON = 1, INI
CALL RANDOM_NUMBER(ZRND)
UT0(JLON,JLEV,JGL) = ZVS * (ZRND - 0.5D0)
CALL RANDOM_NUMBER(ZRND)
VT0(JLON,JLEV,JGL) = ZTT * (ZRND - 0.5D0)
CALL RANDOM_NUMBER(ZRND)
TT0(JLON,JLEV,JGL) = ZGS * (ZRND - 0.5D0)
end do
end do
end do
C
C * . 1.1 Specific humidity (optional)
C . ----------------------------
C
IF(ngexist(ngq).eq.1) THEN
DO JLEV = 1, NFLEV
DO JGL = 1, NJ
INI = NILON(JGL)
DO JLON = 1, INI
CALL RANDOM_NUMBER(ZRND)
Q0(JLON,JLEV,JGL) = ZQS*ZRND
end do
end do
end do
END IF
C
C * . 1.2 Surface pressure (optional)
C . ----------------------------
C
IF(NGEXIST(ngps).eq.1) THEN
DO JGL = 1, NJ
INI = NILON(JGL)
DO JLON = 1, INI
CALL RANDOM_NUMBER(ZRND)
GPS0(JLON,1,JGL) = ZSCPS* (ZRND- 0.5) + ZPSURFACE
end do
end do
END IF
C
C * 2. Initialisation of the model spectral state
C . ------------------------------------------
C
case('S')
C
ZSCVOR = SINVOR * 1.E-6
ZSCDIV = SINDIV * 1.E-6
ZSCGZ = SINGZ * 1.
ZSCTT = SINTT
ZSCQ = SINQ *0.001
ZSCPS = SINPS*1.
C
WRITE(NULOUT,FMT=9200)ZSCVOR,ZSCDIV,ZSCGZ,ZSCQ,ZSCPS
9200 FORMAT(8X,'Spectral Space. The following scales'
S ,' have been used:',/,8X,'VOR: ',G12.6
S ,2X,'DIV: ',G12.6,2X
S ,'GZ: ',G12.6,2X
S ,'Q: ',G12.6,2X
S ,'Ps: ',G12.6)
C
DO JLEV = 1,NFLEV
DO JLA = 1, NLA
CALL RANDOM_NUMBER(ZRND)
SPVOR(JLA,1,JLEV) = ZSCVOR * (ZRND - 0.5D0)
CALL RANDOM_NUMBER(ZRND)
SPVOR(JLA,2,JLEV) = ZSCVOR * (ZRND - 0.5D0)
C
ZRND = RANF
() - 0.5
SPDIV(JLA,1,JLEV) = ZSCDIV * (ZRND - 0.5D0)
CALL RANDOM_NUMBER(ZRND)
SPDIV(JLA,2,JLEV) = ZSCDIV * (ZRND - 0.5D0)
C
CALL RANDOM_NUMBER(ZRND)
SPTT(JLA,1,JLEV) = ZSCTT * (ZRND - 0.5D0)
CALL RANDOM_NUMBER(ZRND)
SPTT(JLA,2,JLEV) = ZSCTT * (ZRND - 0.5D0)
end do
spvor(1,:,jlev) = 0.
spdiv(1,:,jlev) = 0.
end do
C
C * . 2.1 Specific humidity (optional)
C . ----------------------------
C
IF(NSEXIST(nsq).eq.1) THEN
DO JLEV = 1, NFLEV
DO JLA = 1, NLA
CALL RANDOM_NUMBER(ZRND)
SPQ(JLA,1,JLEV) = ZSCQ*ZRND
CALL RANDOM_NUMBER(ZRND)
SPQ(JLA,2,JLEV) = ZSCQ*ZRND
end do
end do
END IF
C
C * . 2.2 Surface pressure (optional)
C . ----------------------------
C
IF(nsexist(nsps).eq.1) THEN
DO JLA = 1, NLA
CALL RANDOM_NUMBER(ZRND)
SPPS(JLA,1,1) = ZSCPS*ZRND + ZPSURFACE
CALL RANDOM_NUMBER(ZRND)
SPPS(JLA,2,1) = ZSCPS*ZRND + ZPSURFACE
end do
END IF
C
C 3. Initialisation of the model variables at the observation
C . points
C
case('M')
C
ZVS = GINUU
ZGS = GINGZ
ZQS = GINQ *0.001
ZSCPS = GINPS*40.
C
WRITE(NULOUT,FMT=9300)ZVS,ZGS,ZQS,ZSCPS
9300 FORMAT(8X,'Observation Space. The following'
S ,' scales have been used:',/,8x,'(UU,VV):',G12.6
S ,2x,'GZ: ',G12.6,2X
S ,'Q: ',G12.6,2X
S ,'Ps: ',G12.6)
DO JLEV = 1, NFLEV
DO JOBS =1, NOBTOT
CALL RANDOM_NUMBER(ZRND)
GOMU(JLEV,JOBS) = ZVS * (ZRND - 0.5D0)
CALL RANDOM_NUMBER(ZRND)
GOMV(JLEV,JOBS) = ZVS * (ZRND - 0.5D0)
CALL RANDOM_NUMBER(ZRND)
GOMT(JLEV,JOBS) = ZGS * (ZRND - 0.5D0)
end do
end do
C
C * . 3.1 Specific humidity (optional)
C . ----------------------------
C
IF(nmvoexist(noq).eq.1) THEN
ZQS = GINQ *0.001
DO JLEV = 1, NFLEV
DO JOBS =1, NOBTOT
CALL RANDOM_NUMBER(ZRND)
GOMQ(JLEV,JOBS) = ZQS * (ZRND - 0.5D0)
end do
end do
END IF
C
C * . 3.2 Surface pressure (optional)
C . ----------------------------
C
IF(NMVOEXIST(nops).eq.1) THEN
ZSCPS = GINPS*40.
DO JOBS = 1, NOBTOT
CALL RANDOM_NUMBER(ZRND)
GOMPS(1,JOBS) = ZSCPS * (ZRND - 0.5D0) + ZPSURFACE
end do
END IF
*
END select
C
RETURN
END SUBROUTINE INITRND