Files
2018-08-28 00:46:26 -04:00

75 lines
3.2 KiB
Fortran

! $Id: setmodel.f,v 1.1 2009/06/09 21:51:51 daven Exp $
SUBROUTINE SETMODEL
!
!******************************************************************************
! Subroutine SETMODEL computes the number of grid blocks that are needed.
! (M. Jacobson 1997; bdf, bmy, 4/18/03)
!
! NOTES:
! (1 ) Originally, this routine also computed other meteorological parameters
! such as horizontal & vertical coordinates, sun angles, etc. These
! are now computed elsewhere in GEOS-CHEM so this code has now been
! removed. The only code left is the code which determines the number
! of grid blocks used for the parallelization. Now force double-
! precision with the "D" exponent. (bdf, bmy, 4/18/03)
!******************************************************************************
!
IMPLICIT NONE
# include "CMN_SIZE" ! Size parameters
# include "comode.h" ! SMVGEAR II arrays
C
C *********************************************************************
C ************ WRITTEN BY MARK JACOBSON (1993-4) ************
C *** (C) COPYRIGHT, 1993-4 BY MARK Z. JACOBSON ***
C *** EXCEPT FOR DENOTED EXCERPTED PORTIONS ***
C *** (650) 650-6836 ***
C *********************************************************************
C
C SSSSSSS EEEEEEE TTTTTTT M M OOOOOOO DDDDDD EEEEEEE L
C S E T M M M M O O D D E L
C SSSSSSS EEEEEEE T M M M O O D D EEEEEEE L
C S E T M M O O D D E L
C SSSSSSS EEEEEEE T M M OOOOOOO DDDDDD EEEEEEE LLLLLLL
C
C *********************************************************************
C * THIS SUBROUTINE INITIALIZES METEOROLOGICAL PARAMETERS *
C *********************************************************************
C
! Local variables
INTEGER :: IAVBLOK, IAVGSIZE, IREMAIN, JADD
C
C *********************************************************************
C * DETERMINE HOW MANY BLOCKS OF GRID POINTS ARE NEEDED *
C *********************************************************************
C
KULOOP = MIN(KULOOP,KBLOOP,NTLOOP)
NBLOCKS = 1 + NTTLOOP / (KULOOP + 0.0001d0)
IAVBLOK = 1 + NTTLOOP / (NBLOCKS + 0.0001d0)
IAVGSIZE = MIN0(IAVBLOK,KULOOP)
JLOOPLO = 0
IREMAIN = NTTLOOP
C
DO 260 KBLK = 1, NBLOCKS
JADD = MIN0(IAVGSIZE,IREMAIN)
JLOFIXED(KBLK) = JLOOPLO
JHIFIXED(KBLK) = JADD
IREMAIN = IREMAIN - JADD
JLOOPLO = JLOOPLO + JADD
260 CONTINUE
C
C MAKE SURE MXBLOCK IS SUFFICIENTLY LARGE SINCE NBLOCKUSE CHANGES IN
C PHYSPROC.F
C
IF (NBLOCKS+15.GT.MXBLOCK) THEN
WRITE(6,*)'READER: NBLOCKS+15>MXBLOCKS ',NBLOCKS+15, MXBLOCK
STOP
ENDIF
C
C *********************************************************************
C ******************** END OF SUBROUTINE SETMODEL.F *******************
C *********************************************************************
C
RETURN
END SUBROUTINE SETMODEL