MODULE mgrid USE mkinds USE mconstants IMPLICIT NONE ! public module variables INTEGER(i4),PUBLIC :: nx INTEGER(i4),PUBLIC :: ny INTEGER(i4),PUBLIC :: nz INTEGER(i4),ALLOCATABLE :: imask(:,:) REAL(r4), ALLOCATABLE :: mlon(:,:) REAL(r4), ALLOCATABLE :: mlat(:,:) REAL(r4), ALLOCATABLE :: mlayer(:) REAL(r4), ALLOCATABLE :: mdepth(:,:) REAL(r4), ALLOCATABLE :: dp0k(:) REAL(r4), ALLOCATABLE :: ds0k(:) integer(i4) :: nsigma integer(i4) :: nhybrd real(r4) :: dp00 real(r4) :: dp00x real(r4) :: dp00f real(r4) :: ds00 real(r4) :: ds00x real(r4) :: ds00f real(r4) :: dp00i real(r4) :: thkmin REAL(r4) :: thref REAL(r4) :: pref REAL(r4) :: thbase INTEGER(i4) :: thflag INTEGER(i4) :: kapref INTEGER(i4) :: sigver INTEGER(i4) :: ilspec REAL(r4) :: lnmn REAL(r4) :: lnmx REAL(r4) :: ltmn REAL(r4) :: ltmx REAL(r4) :: timebnds(3),lonbnds(2),latbnds(2) integer(i4),dimension(3) :: start,ens_start integer(i4),dimension(3) :: count,ens_count integer(i4) :: js,je REAL(r4), ALLOCATABLE :: isosigma(:,:,:) INTERFACE initialize_analysis_grid module procedure initFullGrid END INTERFACE CONTAINS SUBROUTINE getGridDims(nx,ny,nz) USE mkinds USE mncio IMPLICIT NONE integer(i4) :: nx integer(i4) :: ny integer(i4) :: nz integer(i4) :: fid character(:), allocatable :: fileName fileName="gridinfo.nc" CALL nciopn(filename,fid) CALL ncioin(filename,fid,"xc",nx) CALL ncioin(filename,fid,"yc",ny) CALL ncioin(filename,fid,"zc",nz) CALL nciocl(filename,fid) END SUBROUTINE SUBROUTINE initFullGrid() USE mkinds USE mncio IMPLICIT NONE character(:), allocatable :: fileName INTEGER(i4) :: fid fileName="gridinfo.nc" CALL nciopn(filename,fid) CALL ncioin(filename,fid,"xc",nx) CALL ncioin(filename,fid,"yc",ny) CALL ncioin(filename,fid,"zc",nz) start =[1,1,1] count =[nx,ny,nz] allocate(mlon(nx,ny)) allocate(mlat(nx,ny)) allocate(mlayer(nz)) allocate(dp0k(nz)) allocate(mdepth(nx,ny)) allocate(imask(nx,ny)) allocate(isosigma(nx,ny,nz)) CALL nciopn(filename,fid) CALL nciorv(filename,fid,"mplon",mlon) CALL nciorv(filename,fid,"mplat",mlat) CALL nciorv(filename,fid,"target_densities",mlayer) CALL nciorv(filename,fid,"hybrid_minimum_thickness",dp0k) CALL nciorv(filename,fid,"mdepth",mdepth) CALL nciorv(filename,fid,"isosigma",isosigma) CALL nciora(filename,fid,"nhybrd",nhybrd) CALL nciora(filename,fid,"nsigma",nsigma) allocate(ds0k(nsigma)) CALL nciorv(filename,fid,"shallow_hybrid_minimum_thickness",ds0k,[1],[nsigma]) CALL nciora(filename,fid,"dp00",dp00) CALL nciora(filename,fid,"dp00x",dp00x) CALL nciora(filename,fid,"dp00f",dp00f) CALL nciora(filename,fid,"ds00",ds00) CALL nciora(filename,fid,"ds00x",ds00x) CALL nciora(filename,fid,"ds00f",ds00f) CALL nciora(filename,fid,"dp00i",dp00i) CALL nciora(filename,fid,"thbase",thbase) CALL nciora(filename,fid,"ilspec",ilspec) CALL nciora(filename,fid,"thflag",thflag) CALL nciora(filename,fid,"kapref",kapref) CALL nciocl(filename,fid) where(mlon>180.0) mlon=mlon-360.0 imask=1 where(mdepth>=2.00**100) imask=0 IF(thflag==0) then pref=0.0 thref=1.0e-3 ! sigver=1 ELSE IF(thflag==2) THEN pref=2000.0*9806. thref=1.0e-3 ! sigver=2 ENDIF END SUBROUTINE END MODULE