!-------------------------------------- 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 STDDALL 7,1
#if defined (DOC)
*
***s/r STDDALL - allocate space for stats calculation
*
*Author : R. Sarrazin, Septembre 1998
*Revision:
*
*Arguments NONE
*
#endif
*
IMPLICIT NONE
*
#include "comdim.cdk"
#include "comstdd.cdk"
#include "comgd0.cdk"
#include "comstate.cdk"
#include "comlun.cdk"
*
INTEGER ILEN, IERR, ICORR, ILOC
*
C CHECK IF THE FIELDS IN GD WERE ALLOCATED
C
IF ( (PTUT0 .EQ. -1) .OR. (PTVT0 .EQ. -1) .OR.
+ (PTT0 .EQ. -1) .OR. (PTQ0 .EQ. -1) .OR.
+ (PTGPS0 .EQ. -1) )
+ CALL ABORT3D
(NULOUT,'STDDALL: NO ALLOC DONE')
C
C ALLOCATE COPIES OF GD
C
ILEN = (NIEND-NIBEG+1)*(NKGDIM+2*NFLEV)*(NJEND-NJBEG+1)
CALL HPALLOC(PTRMGD,MAX(1,ILEN),IERR,8)
CALL HPALLOC(PTRSGD,MAX(1,ILEN),IERR,8)
C
C SETUP OF POINTERS
C
ICORR = LOC(GD(1,2,1)) - LOC(GD(1,1,1))
C
ILOC = ((LOC(UT0(NIBEG,1,NJBEG)) - LOC(GD(NIBEG,1,NJBEG)))/ICORR) + 1
PTRMUU = LOC(XMGD(NIBEG,ILOC,NJBEG))
PTRSUU = LOC(SGD(NIBEG,ILOC,NJBEG))
C
ILOC = ((LOC(VT0(NIBEG,1,NJBEG)) - LOC(GD(NIBEG,1,NJBEG)))/ICORR) + 1
PTRMVV = LOC(XMGD(NIBEG,ILOC,NJBEG))
PTRSVV = LOC(SGD(NIBEG,ILOC,NJBEG))
C
ILOC = ((LOC(TT0(NIBEG,1,NJBEG)) - LOC(GD(NIBEG,1,NJBEG)))/ICORR) + 1
PTRMTT = LOC(XMGD(NIBEG,ILOC,NJBEG))
PTRSTT = LOC(SGD(NIBEG,ILOC,NJBEG))
C
ILOC = ((LOC(Q0(NIBEG,1,NJBEG)) - LOC(GD(NIBEG,1,NJBEG)))/ICORR) + 1
PTRMLQ = LOC(XMGD(NIBEG,ILOC,NJBEG))
PTRSLQ = LOC(SGD(NIBEG,ILOC,NJBEG))
C
ILOC = ((LOC(GPS0(NIBEG,1,NJBEG)) - LOC(GD(NIBEG,1,NJBEG)))/ICORR) + 1
PTRMP0 = LOC(XMGD(NIBEG,ILOC,NJBEG))
PTRSP0 = LOC(SGD(NIBEG,ILOC,NJBEG))
C
IF(NGEXIST(NGTG).eq.1) THEN
ILOC = ((LOC(GTG0(NIBEG,1,NJBEG)) - LOC(GD(NIBEG,1,NJBEG)))/ICORR) + 1
write(6,*) 'ILOC IN STDDALL=',iloc
call flush(6)
PTRMTG = LOC(XMGD(NIBEG,ILOC,NJBEG))
PTRSTG = LOC(SGD(NIBEG,ILOC,NJBEG))
ENDIF
C
PTRMPP = LOC(XMGD(NIBEG,NKGDIM+1,NJBEG))
PTRMCC = LOC(XMGD(NIBEG,NKGDIM+1+NFLEV,NJBEG))
PTRSPP = LOC(SGD(NIBEG,NKGDIM+1,NJBEG))
PTRSCC = LOC(SGD(NIBEG,NKGDIM+1+NFLEV,NJBEG))
C
C ADDITIONAL MEMORY SPACE FOR VARIANCES CALCULATION
C
ILEN = NFLEV*NJ
CALL HPALLOC(PTRUU,MAX(1,ILEN),IERR,8)
CALL HPALLOC(PTRVV,MAX(1,ILEN),IERR,8)
CALL HPALLOC(PTRTT,MAX(1,ILEN),IERR,8)
CALL HPALLOC(PTRLQ,MAX(1,ILEN),IERR,8)
CALL HPALLOC(PTRPP,MAX(1,ILEN),IERR,8)
CALL HPALLOC(PTRCC,MAX(1,ILEN),IERR,8)
CALL HPALLOC(PTRP0,MAX(1,NJ),IERR,8)
IF(NGEXIST(NGTG).eq.1) THEN
CALL HPALLOC(PTRTG,MAX(1,NJ),IERR,8)
ENDIF
C ALSO FOR GLOBALLY AVERAGED STD DEV
ILEN = NFLEV
CALL HPALLOC(PTRUUG,MAX(1,ILEN),IERR,8)
CALL HPALLOC(PTRVVG,MAX(1,ILEN),IERR,8)
CALL HPALLOC(PTRTTG,MAX(1,ILEN),IERR,8)
CALL HPALLOC(PTRLQG,MAX(1,ILEN),IERR,8)
CALL HPALLOC(PTRPPG,MAX(1,ILEN),IERR,8)
CALL HPALLOC(PTRCCG,MAX(1,ILEN),IERR,8)
C
RETURN
END