!-------------------------------------- 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 SUDIM(KULOUT) 1,19
#if defined (DOC)
*
***s/r SUDIM * - Setting up of the dimensions
* --------
*
*Author: Based on a subroutine written by
* Mats Hamrud and Philippe Courtier *ECMWF*
* P. Gauthier *ARMA/AES June 9, 1992
*Revision:
* . P. Gauthier *ARMA/AES May 25,1993: -Dimensions for specific humidity
* . and surface pressure
* . 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).
* . S. Pellerin *ARMA/SMC May 2000
* . Introduction of nconf 141
* . M. Buehner *ARMA/MSC April 2002
* . Read NAMSV and adjust NVADIM to include space for SVs
* . M. Tanguay *ARMN/MSC Jan. 2005
* . Introduction of minimizer N1CG1
* . M. Buehner *ARMA May 2008
* . Added namelist variables for vertical localization of
* correlations and using multiple latitude bands
* of correlations and new approach for PtoT and
* localized Tb correlations (NANALVAR=4)
* . L.Fillion - ARMA/MSC - 10 Jul 05: Upgrade to v10_0_0 Apr 06
* . Added maxconvpt; i.e. maximum allowed convective points on the minimization grid.
* . L.Fillion - ARMA/MSC - 15 Jan 06: Upgrade to v10_0_0 Apr 06
* . Relocated (nimla,njmla) in namgrd.cdk as new parameters (miobsbuf,mjobsbif).
* . L.Fillion - ARMA/MSC - 17 Jan 06: Upgrade to v10_0_0 Apr 06
* . Add lsimulcor option to use simulated Horizontal correlations
* . L.Fillion - ARMA/EC - 15 Aug 2007 - Update lam4d to v_10_0_3.
* . L.Fillion - ARMA/EC - 25 Mar 2008 - Include Shallow-Water option.
* . L.Fillion - ARMA/EC - 22 Apr 2008 - Introduce nbandmax.
* . L.Fillion - ARMA/EC - 11 Jul 2008 - Introduce use of Gaussian horizontal error correlations if lgauscor
* . L.Fillion - ARMA/EC - 3 Oct 2008 - Introduce lunitptot : Useful for testing purposes.
* . L.Fillion - ARMA/EC - 3 Nov 2008 - Introduce mbal_order : Order of dynamical balance imposed on anal incr.
* . L.Fillion - ARMA/EC - 12 Jan 2009 - Upgrade lam4d to v_10_1_2 of 3dvar.
* . L.Fillion - ARMA/EC - 15 May 2009 - Upgrade lam4d to v_10_2_2 of 3dvar and introduction of nitlap,nfldlap.
* . L.Fillion - ARMA/EC - Sept 2009 - Include here the call to sugrd_param. Improve printout of parameters.
* . L.Fillion - ARMA/EC - 26 Oct 2009 - Initialize nila,njla also when grd_roule = .true.
* . L.Fillion - ARMA/EC - 12 Nov 2009 - Introduce lcva_3db to perform 3dvar fgat using TL-INMI.
* . L.Fillion - ARMA/EC - 19 Nov 2009 - Enforce grd_roule = .false. for nconf.ne.141 until further development of bgcheck.
* . L.Fillion - ARMA/EC - 30 Nov 2009 - Read NAMGRD to get grd_dx, grd_dy to set max. nb. of bi-fourier bands.
* also: use ntrunc to define the spectral dimensions used.
* . Bin He - ARMA/EC - Oct. 2009
* - Implemented MPI to 3DVAR
* . L.Fillion - ARMA/EC - 4 May 2010 - Upgrade on v_11_01_2b.
* . L.Fillion - ARMA/EC - 13 May 2010 - Introduce Hemispheric spectral transform.
* . L.Fillion - ARMA/EC - 20 May 2010 - Correct weakness no mni_mach,mnj_mach specification. Lower bounds now ensured.
* . L.Fillion - ARMA/EC - 21 Feb 2011 - Add lcva_analysis option to
* produce or not the output of high-resolution analysis increments and analysis fields.
* Default is .false.
*---------------
*
* Purpose: initialize COMDIM and read the namelist NAMDIM
*
*Arguments:
* i: KULOUT (logical unit for optional printing i.e. debugging)
* o: comdim.cdk (COMDECK containing the dimensions of the model
*
#endif
C
use modstag
, only: nj_s, njlath_s, level2_staggrid, lstagwinds
USE procs_topo
USE spect_mpi
IMPLICIT NONE
#include "pardim.cdk"
#include "comdim.cdk"
#include "comlun.cdk"
#include "comct0.cdk"
#include "comcva.cdk"
#include "comsv.cdk"
#include "comstate.cdk"
#include "comfftla.cdk"
#include "comgem.cdk"
!cluc#include "namgem.cdk"
#include "comgrd_param.cdk"
#include "comcse1.cdk"
INTEGER KULOUT, IAL1, IAL2, IERR, ILEN
integer jfi,jfj,ila
real*8 zdx,zdy,zlx,zly,zd,zkmax,zk2,zk
C
C
C* 1. SET DEFAULT VALUES AND MODIFY THEM.
C -----------------------------------
C
100 CONTINUE
C
C* 1.1 Default values
C --------------
110 CONTINUE
C
N1GC = 3
NVAMAJ = 6
NIMPRES = 5
NITERMAX = 400
RDF1FAC = 0.25d0
NITERJOB = -1
NSIMMAX = 500
NGRTEST = 0
NGRANGE = 10
NCNTVAR = 2
NEVALJ = 1
mni_mach = 10
mnj_mach = 10
mbal_order = 1
grd_typ = 'GU'
grd_roule = .false.
multi_grd = 0
lcva_hsp=.false.
lcva_hemis=.false.
lcva_euclid=.false.
lcva_helm=.true.
lcva_3db=.false.
lcva_analysis=.false.
lcornsmin=.false.
lsimulcor=.false.
lsetcross=.true.
lcorloc =.false.
lgauscor=.false.
lgausvercor=.false.
lsw =.false.
l1obs =.false.
lunitptot=.false.
lwrthess =.true.
lsdevsim =.false.
lfgsim =.false.
LINMI = .false.
LDIABATIC= .false.
lobsclip = .true.
lxbar = .true.
ltlmend = .false.
LTSTSP = .FALSE.
LTSTCVA = .FALSE.
LNONSEP = .TRUE.
REPSG = 1e-3
LRSTART = .FALSE.
LSTAT = .TRUE.
RSIGGZ = 0.0
RSIGOZ = 1.0
RSIGTR = 1.0
RSIGPS = 1.0
RSIGTG = 1.5
RSIGQ = 1.0
RNU2 = 0.0
RSIGUU = 2.92
RSIGTT = 0.0
NANALVAR = 3
RPORVO = 6000.E3
RPORDI = 6000.E3
RPORTT = 3000.E3
RPORQ = 3000.E3
RPORPS = 3000.E3
RPORTG = 500.E3
RPORGZ = 1200000.
RPOROZ = 1200000.
RPORTR = 1200000.
CIMP = 'G'
CFG = 'F'
CCOV = 'H'
CSCAL = 'P'
CFGERR = 'G'
CHUM = 'LQ'
CPTOT = 'GD'
EPSNEG = 1e-6
SELECT0 = 0
BFGSB = 2
IMODE3 = 0
NTUNESTATS = 0
LPERTOBS = .FALSE.
NFLEVPTOT = -999
RSCALEPTOT = 1.0
LHBHT1 = .FALSE.
LUSE3DSTD = .FALSE.
NTRUNC3DSTD = 0
LCOPYPTOT = .FALSE.
CFLTUNEOBS= 'none'
CFLTUNEBG = 'none'
RVLOCBALT = 0.0
RVLOCPSI = 0.0
RVLOCCHI = 0.0
RVLOCUNBALT = 0.0
RVLOCLQ = 0.0
RVLOCPSITT = 0.0
NLATMIN1 = 40
NLATMAX1 = 50
NLATMIN2 = 71
NLATMAX2 = 81
!
WRITE(UNIT=KULOUT,FMT='(//," Modification of the dimensions:"
S ," of the control variable",/,10x
S ,"- reading the namelist NAMCVA in SUDIM")')
C
CALL READNML
('NAMCVA',IERR)
if(grd_typ.eq.'LU') then
CALL READNML
('NAMGRD',IERR) ! to get grd_dx, grd_dy for setting maximal nb. of bi-fourier bands
endif
!
level2_staggrid = .false.
!
if(lcva_3db) then
linmi = .true.
write(nulout,*) 'SUDIM: lcva_3db is true so enfore LINMI = .true.'
endif
!
if(mbal_order.eq.0) then
lsetcross = .false.
write(nulout,*) 'SUDIM: mbal_order = 0, lsetcross forced to FALSE'
endif
!
NI=240
NIINC=240
NJ=120
NJINC=120
NFLEV=28
NISUR=2
NJSUR=2
NVGAUX=0
NTRUNCINC=108
NTRUNC=108
NVSAUX=0
nprecon=0
NLATBIN=1
C
120 CONTINUE
WRITE(UNIT=KULOUT,FMT='(//,'' MODIFICATION OF THE DIMENSIONS:''
S ,''- reading the namelist NAMDIM in SUDIM'')')
C
CALL READNML
('NAMDIM',IERR)
!
if(grd_roule) call sugrd_param
!
write(nulout,*) 'SUDIM: grd_typ = ',grd_typ
write(nulout,*) 'SUDIM: multi_grd = ',multi_grd
write(nulout,*) 'SUDIM: grd_roule = ',grd_roule
write(nulout,*) 'SUDIM: nanalvar = ',nanalvar
write(nulout,*) 'SUDIM: multi_grd = ',multi_grd
write(nulout,*) 'SUDIM: mbal_order = ',mbal_order
write(nulout,*) 'SUDIM: l1obs = ',l1obs
write(nulout,*) 'SUDIM: lsetcross = ',lsetcross
write(nulout,*) 'SUDIM: lsimulcor = ',lsimulcor
write(nulout,*) 'SUDIM: lgauscor = ',lgauscor
write(nulout,*) 'SUDIM: lgausvercor = ',lgausvercor
write(nulout,*) 'SUDIM: lvloc = ',lvloc
write(nulout,*) 'SUDIM: lcorloc = ',lcorloc
write(nulout,*) 'SUDIM: lsdevsim = ',lsdevsim
write(nulout,*) 'SUDIM: lunitptot = ',lunitptot
write(nulout,*) 'SUDIM: lwrthess = ',lwrthess
write(nulout,*) 'SUDIM: lcornsmin = ',lcornsmin
write(nulout,*) 'SUDIM: lobsclip = ',lobsclip
write(nulout,*) 'SUDIM: nflevptot = ',nflevptot
write(nulout,*) 'SUDIM: lcva_helm = ',lcva_helm
write(nulout,*) 'SUDIM: lcva_hsp = ',lcva_hsp
write(nulout,*) 'SUDIM: lcva_hemis = ',lcva_hemis
write(nulout,*) 'SUDIM: lcva_euclid = ',lcva_euclid
write(nulout,*) 'SUDIM: lcva_3db = ',lcva_3db
write(nulout,*) 'SUDIM: lcva_analysis = ',lcva_analysis
write(nulout,*) 'SUDIM: mni_mach = ',mni_mach
write(nulout,*) 'SUDIM: mnj_mach = ',mnj_mach
!
write(kulout,fmt='(4x,A,L3)')' LEVEL2_staggrid = ',level2_staggrid
!
if((grd_typ.eq.'LU'.or.lcva_hemis).and.nanalvar.ne.3) then
call abort3d
(nulout,'SUDIM: LAM3D/4D : NANALVAR must be 3')
endif
!
if(grd_typ.eq.'LU'.or.grd_roule) then
nila = ni
njla = nj
write(nulout,*) 'SUDIM: nila = ',nila
write(nulout,*) 'SUDIM: njla = ',njla
if(multi_grd.eq.1) then
write(nulout,*) 'SUDIM: nila2 = ',nila2 ! already set by sugrd_param
write(nulout,*) 'SUDIM: njla2 = ',njla2
endif
endif
C
C* . 1.3 Check the consistency between the number of spectral
C . and gridpoint fields
C . ----------------------------------------------------
C
IF(NFLEVPTOT.lt.0) NFLEVPTOT=NFLEV
if(grd_typ.eq.'LU') then
nflevptot = nflev
write(KULOUT,*) 'sudim: grd_typ.eq. LU, nflevptot reset to nflev !'
endif
130 CONTINUE
IF(NVGD.NE.NVSP)THEN
WRITE(NULOUT,FMT=9130)' NVGD',NVGD,' NVSP',NVSP
NVGD = NVSP
END IF
IF(NVG2D.NE.NVSP2D) THEN
WRITE(NULOUT,FMT=9130)' NVG2D',NVG2D,'NVSP2D',NVSP2D
NVG2D = NVSP2D
END IF
IF(NVGAUX.NE.NVSAUX) THEN
WRITE(NULOUT,FMT=9130)'NVGAUX',NVGAUX,'NVSAUX',NVSAUX
NVGAUX = NVSAUX
END IF
9130 FORMAT(4X,'-INCONSISTENCY IN THE NUMBER OF FIELDS: ',A6,'= ',I4
S ,4X,A6,'= ',I4,/,8X,'RESET TO THE SPECTRAL VALUES')
C
C* 2. Initialize the dimensions (dependent dimensions).
C
NI=NIINC
NJ=NJINC
NTRUNC=NTRUNCINC
!
!
! set inner (non-extended) LAM analysis grid dimensions
!
if(grd_typ.eq.'LU'.or.multi_grd.gt.0) then
if((nila.lt.30).or.(njla.lt.30)) then
call abort3d
(nulout,'SUDIM: too little grid to be acceptable')
else if(njla.eq.45) then
call abort3d
(nulout,'SUDIM: Choose njla = 40 or 48')
else if(njla.eq.75) then
call abort3d
(nulout,'SUDIM: Choose njla = 72 or 80')
else if(njla.eq.125) then
call abort3d
(nulout,'SUDIM: Choose njla = 120 or 128')
else if(njla.eq.135) then
call abort3d
(nulout,'SUDIM: Choose njla = 128 or 144')
else if(njla.eq.225) then
call abort3d
(nulout,'SUDIM: Choose njla = 216 or 240')
else if(njla.eq.243) then
call abort3d
(nulout,'SUDIM: Choose njla = 240 or 250')
else if(njla.eq.375) then
call abort3d
(nulout,'SUDIM: Choose njla = 360 or 384')
endif
!
mni_in = nila-mextendx
mnj_in = njla-mextendy
!
if(mni_mach.le.10) then
mni_mach = mni_in-2
write(kulout,*)' SUDIM: mni_mach too small... reset to ',mni_mach
endif
if(mnj_mach.le.10) then
mnj_mach = mnj_in-2
write(kulout,*)' SUDIM: mnj_mach too small... reset to ',mnj_mach
endif
!
if(multi_grd.eq.1) then
mni_in2 = nila2-mextendx2
mnj_in2 = njla2-mextendy2
if(mni_mach2.lt.0) mni_mach2 = mni_in2-2
if(mnj_mach2.lt.0) mnj_mach2 = mnj_in2-2
endif
else
mni_in = ni
mnj_in = nj
endif
!
! set maximum number of tiles for ptotla regression matix
!
maxtiles = 500
C
200 CONTINUE
C
C* . 2.1 Collocation grid dimensions.
C . ---------------------------
C
210 CONTINUE
!
if(grd_typ.ne.'LU') then
NJLATH = (NJ + 1)/2
nj_s = nj-1
njlath_s = nj/2
NJBEG = - NJSUR + 1
NJEND = NJ + NJSUR
IF(MOD(NJ,2).EQ.0) THEN
NJMAX = NJ+1
ELSE
NJMAX = NJ
END IF
C
NIBEG = 0
NIEND = NI + NISUR
else if(grd_typ.eq.'LU') then
NIBEG = 0
NIEND = NI + 1
NJBEG = 0
NJEND = NJ + 1
write(nulout,*) ' '
write(nulout,*) '*******************************************************'
write(nulout,*) 'sudim: nisur and njsur not used in LAM4D: see sudim.ftn'
write(nulout,*) '*******************************************************'
write(nulout,*) ' '
endif
C
WRITE(KULOUT,*)' DIMENSIONS IN GRID SPACE ------:'
WRITE(UNIT=KULOUT,FMT=9210)
S NJ ,NJLATH, NJSUR,NJBEG ,NJEND ,NI ,NISUR, NIBEG
S , NIEND,NFLEV
9210 FORMAT(4X,
S ' NJ =',I6,' NJLATH =',I6,
S ' NJSUR =',I6,' NJBEG =',I6,' NJEND =',I6,/,4X,
S ' NI =',I6,' NISUR =',I6,' NIBEG =',I6,
S ' NIEND =',I6,' NFLEV = ',I6)
write(kulout,fmt='(4x,A,i6,A,i6)')'NJ_S = ',nj_s,' NJLATH_S = ',njlath_s
IF(NLATBD.GT.NJLATH) THEN
NLATBD = NJLATH
WRITE(NULOUT,9211)NLATBD, NJLATH
END IF
9211 FORMAT(6X,'Width of latitudinal band is too wide. In SUDIM'
S ,' NLATBD is reset to NJLATH',/10X,'NLATBD = ',I3,4X
S ,'NJLATH = ',I3)
C
C* . 2.2 Spectral dimensions
C . -------------------
C
if (grd_typ.eq.'LU') then
lrpnfft=.true.
nfi=nila/2+1 ! for Limited-Area (LA) config
nfi = min(nfi,ntrunc)
if(lrpnfft) then
nfj=njla/2+1 ! for Limited-Area (LA) config
nfj = min(nfj,ntrunc)
mlen1d=2*nila+2 ! A enlever quand dft1d se fera avec RPN dans les operateurs
else
nfj=njla ! NCAR DFT
mlen1d=2*nila+2 ! for 1D DFT
mlen2d=2*nila+2*njla ! for 2D DFT
endif
!
if(multi_grd.eq.1) then
lrpnfft=.true.
nfi2=nila2/2+1 ! for Limited-Area (LA) config
if(lrpnfft) then
nfj2=njla2/2+1 ! for Limited-Area (LA) config
!cluc mlen1d2=2*njla2+2 ! A enlever quand dft1d se fera avec RPN dans les operateurs
else
nfj2=njla2 ! NCAR DFT
! mlen1d2=2*nila2+2 ! for 1D DFT
! mlen2d2=2*nila2+2*njla2 ! for 2D DFT
endif
endif
rwvband=0.5
!
zdx=grd_dx*111.0 ! grd_dx,grd_dy already initialized by sugeom.ftn called by su0yoma.ftn
zdy=grd_dy*111.0
zlx=(nila-1)*zdx
zly=(njla-1)*zdy
zd=max(zlx,zly)
zkmax=sqrt(real(nfi**2+nfj**2))
write(nulout,*) 'sudim: nila,njla,zlx,zly=',nila,njla,zlx,zly
zk2=(zkmax/zlx)**2+(zkmax/zly)**2
zk=zd*sqrt(zk2)
nbimax=nint(zk)
write(nulout,*) 'sudim: nbimax = ',nbimax
nbandmax = nint(zkmax)
write(nulout,*) 'sudim: nbandmax = ',nbandmax
!
if(lrpnfft) then ! the following spectral count is for RPN 2D FFT (see suwvnb_rpn.ftn)
nla=(2*ntrunc+2)*(2*ntrunc+2)
!cluc nla=(ni+2)*(nj+2)
nla_la = nla
else
nla = nfi*nfj ! NCAR FFT2D
endif
write(nulout,*) 'sudim: grd_typ =',grd_typ
write(nulout,*) 'sudim: nfi,nfj=',nfi,nfj
write(nulout,*) 'sudim: nla=',nla
else
NLA = (NTRUNC + 1)*(NTRUNC +2)/2
nla_glb = nla
NLARH = (NTRUNC+1)*(NTRUNC+1)
IF(MOD(NTRUNC+1,2).EQ.0) THEN
NTRUNCMX = NTRUNC + 1
ELSE
NTRUNCMX = NTRUNC
END IF
IF(MOD(NLA,2).EQ.0) THEN
NLADIM = NLA+1
ELSE
NLADIM = NLA
END IF
!
nband = ntrunc +1
write(nulout,*) 'sudim: nband = ',nband
C
WRITE(KULOUT,*)' DIMENSIONS IN SPECTRAL SPACE ------:'
WRITE(UNIT=KULOUT,FMT=9220)NTRUNC, NTRUNCMX, NLA, NLADIM, NLARH
9220 FORMAT(/,' Triangular truncation of order '
S ,'NTRUNC =',I4,' NTRUNCMX: ',I4,' NLA:',I8,' NLADIM:',I8
S ,' NLARH:',I8)
C
C* . 2.3 Check for aliasing.
C . ------------------
C
IAL1=3*NTRUNC - (2*NJ-1)
IF (IAL1 .GT. 0) THEN
WRITE(UNIT=KULOUT,
S FMT='('' ******* ALIASING FOR PRODUCTS OF FIELDS ''
S ,'' IN THE N-S DIRECTION ******** '')')
*
IAL1=2*NTRUNC - (2*NJ-1)
IF (IAL1 .GT. 0) THEN
WRITE(UNIT=KULOUT,
S FMT='('' ******* ALIASING FOR SPECTRAL TRANSFORMS ''
S ,'' IN THE N-S DIRECTION ******** '')')
ENDIF
ENDIF
*
IAL2=3*NTRUNC - (NI-1)
IF (IAL2 .GT. 0) THEN
WRITE(UNIT=KULOUT,
S FMT='('' ******* ALIASING FOR PRODUCTS OF FIELDS ''
S ,'' IN THE E-W DIRECTION ******** '')')
*
IAL2=2*NTRUNC - (NI-1)
IF (IAL2 .GT. 0) THEN
WRITE(UNIT=KULOUT,
S FMT='('' ******* ALIASING FOR SPECTRAL TRANSFORMS ''
S ,'' IN THE E-W DIRECTION ******** '')')
ENDIF
ENDIF
endif
C
C* 3. Initialize the number of fields.
C -----------------------------------
300 CONTINUE
C
C* . 3.1 Total number of 2D fields in grid space
C . ---------------------------------------
C
310 CONTINUE
C
NKGDIM = (NVGD+ NVGAUX)* NFLEV + NVG2D
C
WRITE(UNIT=KULOUT,FMT=9310)
S NVGD,NVGAUX,NVG2D,NKGDIM
9310 FORMAT(/,5X,'Number of variables in grid',
S ' space',/,
S ' NVGD =',I6,' NVGAUX =',I6,
S ' NVG2D =',I6,' NKGDIM =',I6)
C
C
C* . 3.2 Total number of spectral fields
C . -------------------------------
C
nksdim = (NVSP + NVSAUX)*NFLEV + NVSP2D
!
if(grd_typ.eq.'LU') then
if(nanalvar.eq.4) then
nksdim2 = nksdim+nflev
else
nksdim2 = nksdim
endif
write(nulout,*) 'sudim: nksdim,nksdim2 = ',nksdim,nksdim2
else
if(nconf.ne.300.and.nconf.ne.800.and.nconf.ne.801.and.nconf.ne.500.and.nanalvar.eq.4) then
NKSDIM2 = NKSDIM+NFLEV
else
NKSDIM2 = NKSDIM
endif
endif
C
WRITE(UNIT=KULOUT,FMT='(/,5X,''Number of variables in SPECTRAL'',
S '' space'',/,
S '' NVSP ='',I6,'' NVSAUX ='',I6,
S '' NVSP2D ='',I6,'' NKSDIM ='',I6)')
S NVSP,NVSAUX,NVSP2D,NKSDIM
C 3.x Create process topology and carry out domain decomposition.
CALL procstopo
(NIBEG,NIEND,NJBEG,NJEND,NKSDIM,NTRUNC,NJSUR)
C
C* 4. Dimension of the control variable
C . ---------------------------------
C
400 CONTINUE
C
C Read NAMSV and adjust adjust NVADIM, if necessary, for incorporating SVs into B
CSVNORM='E'
NSV=0
NUMSEG=1
NSVMODE=0
IF(NINT(NCONF/100.0).EQ.6) CALL READNML
('NAMSV',IERR)
ILEN = NSV
IF(NSVMODE.eq.1) THEN
NVADIM = ILEN
ELSEIF(NSVMODE.eq.2) THEN
NVADIM = NKSDIM*(2*NLA - NTRUNC -1) + ILEN
ELSE
if(grd_typ.ne.'LU') then
NVADIM = NKSDIM*(2*NLA - NTRUNC -1)
else
NVADIM = NKSDIM*2*NLA
endif
ENDIF
cbue
cbue NVADIM=NVADIM+NFLEV*(2*NLA - NTRUNC -1)
C
NVADIM=NVADIM*NLATBIN
C
IF(N1GC.EQ.2) THEN
NMTRA = 3*NVADIM + NVAMAJ*(2*NVADIM + 1)
ELSE IF(N1GC.EQ.3)THEN
write(nulout,*) 'sudim: NVADIM=',NVADIM
write(nulout,*) 'sudim: NVAMAJ=',NVAMAJ
write(nulout,*) 'sudim: 4*NVADIM=',4*NVADIM
write(nulout,*) 'sudim: NVAMAJ*(2*NVADIM + 1)=',NVAMAJ*(2*NVADIM + 1)
write(nulout,*) 'sudim: NMTRA=',4*NVADIM + NVAMAJ*(2*NVADIM + 1)
NMTRA = 4*NVADIM + NVAMAJ*(2*NVADIM + 1)
ELSE IF(N1GC.EQ.4)THEN
NMTRA = 1 + NVAMAJ*(2*NVADIM + 1)
NWORK = 5*NVADIM + NVAMAJ
ELSE
NMTRA = NVADIM*2
END IF
WRITE(KULOUT,9401)N1GC, NVAMAJ,NVADIM,NMTRA
9401 FORMAT(4X,'N1GC = ',I2,4X,'NVAMAJ = ',I3
S ,/5X,"NVADIM =",1x,I14,3X,"NMTRA =",1X,I14)
IF(N1GC.EQ.4) THEN
WRITE(KULOUT,9402)NWORK
9402 FORMAT(4X,'FOR N1CG1:',4X,'NWORK = ',I9)
ENDIF
!
if(nmtra.le.0.) then
call abort3d
(nulout,'SUDIM: LAM3D/4D : Wrong dimension for NMTRA')
endif
C
C* 5. Some dimensions for fields related to physical processes
C --------------------------------------------------------
C
maxconvpt = 0.1*(mni_in*mnj_in)
C
C* 6. For Poisson solver
C --------------------------------------------------------
C
nitlap = 2
nfldlap = 2
C
write(nulout,*) 'sudim: nitlap = ',nitlap
C
RETURN
END