!-------------------------------------- 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 SUALOBSB(KULOUT) 2 ! use modmask, only : lmaskpp_in, lmaskpp_out,lmasksf_in,lmasksf_out ! use modmask, only : lmask,lmaskto,lmaskgo,lmaskro,lmaskzp,ldiagpp ! use modmask, only : ldiagsf, ldiag #if defined (DOC) * ***s/r SUALOBS - Memory allocation for obs. related arrays * *Author : P. Gauthier *ARMA/AES June 9, 1992 *Revision: Bin HE *ARMA/MRB Oct. 2009 * - Implemented MPI to 3DVAR * *Arguments * i KULOUT: unit used for optional printing * #endif C IMPLICIT NONE *implicits #include "comdim.cdk"
#include "comcva.cdk"
#include "comdimo.cdk"
#include "comoahdr.cdk"
#include "comoabdy.cdk"
#include "commvo.cdk"
#include "commvo1.cdk"
#include "commvog.cdk"
#include "comoba.cdk"
#include "comstate.cdk"
* INTEGER KULOUT, IERR INTEGER ILEN, ILENU, ilen8 INTEGER iloc, jvar EXTERNAL HPALLOC C WRITE(KULOUT,FMT='(//,6(" ***********"))') WRITE(KULOUT,*)' SUALOBSB: Memory allocation of the', S ' observation arrays' WRITE(KULOUT,FMT='(6(" ***********"))') C C* 1. Model state at observation stations C . ----------------------------------- C 100 CONTINUE call hpalloc( ptmtag,max(nmxobs,1),ierr,0) call hpalloc( ptpexy,max(nmxobs,1),ierr,0) ILEN = NFLEV*NOBTOT CALL HPALLOC( PTPPOBS,MAX(ILEN,1),IERR,8) ILEN = NKGDIMO*NOBTOT CALL HPALLOC( PTMTHOBS,MAX(NMXOBS,1),IERR,8) CALL HPALLOC( PTMTMOBS,MAX(NMXOBS,1),IERR,8) CALL HPALLOC( PTMOBS,MAX(ILEN,1),IERR,8) CALL HPALLOC(PTMOBS1,MAX(ILEN,1),IERR,8) CALL HPALLOC(PTMOBSG,MAX(ILEN,1),IERR,8) ilen = nflev*nobtot*2 call hpalloc(ptltv,max(ilen,1),IERR,8) ilen = nflev*nobtot call hpalloc(pttapfac,max(ilen,1),IERR,8) if(chum.eq.'ES') then ilen = nflev*nobtot call hpalloc(ptestdg,max(ilen,1),IERR,8) call hpalloc(ptdlnesg,max(ilen,1),IERR,8) call hpalloc(ptrqgfac,max(ilen,1),IERR,8) else ilen = nflev*nobtot*3 call hpalloc(ptlq2es,max(ilen,1),IERR,8) endif C PTOMU = -1 PTOMU1 = -1 PTOMUG = -1 C PTOMV = -1 PTOMV1 = -1 PTOMVG = -1 C PTOMT = -1 PTOMT1 = -1 PTOMTG = -1 C PTOMQ = -1 PTOMQ1 = -1 PTOMQG = -1 C PTOMGZ = -1 PTOMGZ1 = -1 PTOMGZG = -1 C PTOMOZ = -1 PTOMOZ1 = -1 PTOMOZG = -1 C PTOMTR = -1 PTOMTR1 = -1 PTOMTRG = -1 c ptomes = -1 ptomes1 = -1 PTOMESG = -1 C PTOMPS = -1 PTOMPS1 = -1 PTOMPSG = -1 C PTOMTGR = -1 PTOMTGR1 = -1 PTOMTGRG = -1 C iloc = 1 do jvar = 1,jpnvarmax if(jvar .eq. nouu) then NMVOPOSIT(nouu) = iloc if(NMVOEXIST(nouu).eq.1) then PTOMU = LOC(GOMOBS(iloc,1)) PTOMU1 = LOC(GOMOBS1(iloc,1)) PTOMUG = LOC(GOMOBSG(iloc,1)) iloc = iloc + nflev end if elseif(jvar .eq. novv) then NMVOPOSIT(novv) = iloc if(NMVOEXIST(novv).eq.1) then PTOMV = LOC(GOMOBS(iloc,1)) PTOMV1 = LOC(GOMOBS1(iloc,1)) PTOMVG = LOC(GOMOBSG(iloc,1)) iloc = iloc + nflev end if elseif(jvar .eq. nogz) then NMVOPOSIT(nogz) = iloc if(NMVOEXIST(nogz).eq.1) then PTOMGZ = LOC(GOMOBS(iloc,1)) PTOMGZ1 = LOC(GOMOBS1(iloc,1)) PTOMGZG = LOC(GOMOBSG(iloc,1)) iloc = iloc + nflev end if elseif(jvar .eq. noq) then NMVOPOSIT(noq) = iloc if(NMVOEXIST(noq).eq.1) then PTOMQ = LOC(GOMOBS(iloc,1)) PTOMQ1 = LOC(GOMOBS1(iloc,1)) PTOMQG = LOC(GOMOBSG(iloc,1)) iloc = iloc + nflev end if elseif(jvar .eq. nott) then NMVOPOSIT(nott) = iloc if(NMVOEXIST(nott).eq.1) then PTOMT = LOC(GOMOBS(iloc,1)) PTOMT1 = LOC(GOMOBS1(iloc,1)) PTOMTG = LOC(GOMOBSG(iloc,1)) iloc = iloc + nflev end if elseif(jvar .eq. nooz) then NMVOPOSIT(nooz) = iloc if(NMVOEXIST(nooz).eq.1) then PTOMOZ = LOC(GOMOBS(iloc,1)) PTOMOZ1 = LOC(GOMOBS1(iloc,1)) PTOMOZG = LOC(GOMOBSG(iloc,1)) iloc = iloc + nflev end if elseif(jvar .eq. notr) then NMVOPOSIT(notr) = iloc if(NMVOEXIST(notr).eq.1) then PTOMTR = LOC(GOMOBS(iloc,1)) PTOMTR1 = LOC(GOMOBS1(iloc,1)) PTOMTRG = LOC(GOMOBSG(iloc,1)) iloc = iloc + nflev end if elseif(jvar .eq. noes) then NMVOPOSIT(noes) = iloc if(NMVOEXIST(noes).eq.1) then PTOMES = LOC(GOMOBS(iloc,1)) PTOMES1 = LOC(GOMOBS1(iloc,1)) PTOMESG = LOC(GOMOBSG(iloc,1)) iloc = iloc + nflev end if elseif(jvar .eq. nops) then NMVOPOSIT(nops) = iloc if(NMVOEXIST(nops).eq.1) then PTOMPS = LOC(GOMOBS(iloc,1)) PTOMPS1 = LOC(GOMOBS1(iloc,1)) PTOMPSG = LOC(GOMOBSG(iloc,1)) iloc = iloc + 1 end if elseif(jvar .eq. notg) then NMVOPOSIT(notg) = iloc if(NMVOEXIST(notg).eq.1) then PTOMTGR = LOC(GOMOBS(iloc,1)) PTOMTGR1 = LOC(GOMOBS1(iloc,1)) PTOMTGRG = LOC(GOMOBSG(iloc,1)) iloc = iloc + 1 end if endif enddo C C* . 1.1 Auxiliary state C . --------------- C 110 CONTINUE C ILENU = NMXOBS*NFLEV WRITE(KULOUT,FMT='(/,"Arrays in COMMVO (COMMVO1) are allocated", S " the following space:")') WRITE(KULOUT,FMT=9100)ILEN,ILENU, NMXOBS 9100 FORMAT(" GOMOBS :",I6,10x S ," (GOMU, GOMV,GOMGZ,GOMQ):",I10 S ," (GOMPS,GOMTGR):",I10) C RETURN END