/wrfv2_fire/dyn_em/module_wps_io_arw.F
http://github.com/jbeezley/wrf-fire · FORTRAN Legacy · 1944 lines · 1092 code · 300 blank · 552 comment · 68 complexity · 100ac757f26606a7119c8b03b77f8dce MD5 · raw file
Large files are truncated click here to view the full file
- MODULE module_wps_io_arw
- USE module_optional_input
- IMPLICIT NONE
- !! FROM MODULE_KINDS
- ! The numerical data types defined in this module are:
- ! i_byte - specification kind for byte (1-byte) integer variable
- ! i_short - specification kind for short (2-byte) integer variable
- ! i_long - specification kind for long (4-byte) integer variable
- ! i_llong - specification kind for double long (8-byte) integer variable
- ! r_single - specification kind for single precision (4-byte) real variable
- ! r_double - specification kind for double precision (8-byte) real variable
- ! r_quad - specification kind for quad precision (16-byte) real variable
- !
- ! i_kind - generic specification kind for default integer
- ! r_kind - generic specification kind for default floating point
- !
- !
- ! Integer type definitions below
- ! Integer types
- integer, parameter, public :: i_byte = selected_int_kind(1) ! byte integer
- integer, parameter, public :: i_short = selected_int_kind(4) ! short integer
- integer, parameter, public :: i_long = selected_int_kind(8) ! long integer
- integer, parameter, private :: llong_t = selected_int_kind(16) ! llong integer
- integer, parameter, public :: i_llong = max( llong_t, i_long )
- ! Expected 8-bit byte sizes of the integer kinds
- integer, parameter, public :: num_bytes_for_i_byte = 1
- integer, parameter, public :: num_bytes_for_i_short = 2
- integer, parameter, public :: num_bytes_for_i_long = 4
- integer, parameter, public :: num_bytes_for_i_llong = 8
- ! Define arrays for default definition
- integer, parameter, private :: num_i_kinds = 4
- integer, parameter, dimension( num_i_kinds ), private :: integer_types = (/ &
- i_byte, i_short, i_long, i_llong /)
- integer, parameter, dimension( num_i_kinds ), private :: integer_byte_sizes = (/ &
- num_bytes_for_i_byte, num_bytes_for_i_short, &
- num_bytes_for_i_long, num_bytes_for_i_llong /)
- ! Default values
- ! **** CHANGE THE FOLLOWING TO CHANGE THE DEFAULT INTEGER TYPE KIND ***
- integer, parameter, private :: default_integer = 2 ! 1=byte,
- ! 2=short,
- ! 3=long,
- ! 4=llong
- integer, parameter, public :: i_kind = integer_types( default_integer )
- integer, parameter, public :: num_bytes_for_i_kind = &
- integer_byte_sizes( default_integer )
- ! Real definitions below
- ! Real types
- integer, parameter, public :: r_single = selected_real_kind(6) ! single precision
- integer, parameter, public :: r_double = selected_real_kind(15) ! double precision
- integer, parameter, private :: quad_t = selected_real_kind(20) ! quad precision
- integer, parameter, public :: r_quad = max( quad_t, r_double )
- ! Expected 8-bit byte sizes of the real kinds
- integer, parameter, public :: num_bytes_for_r_single = 4
- integer, parameter, public :: num_bytes_for_r_double = 8
- integer, parameter, public :: num_bytes_for_r_quad = 16
- ! Define arrays for default definition
- integer, parameter, private :: num_r_kinds = 3
- integer, parameter, dimension( num_r_kinds ), private :: real_kinds = (/ &
- r_single, r_double, r_quad /)
- integer, parameter, dimension( num_r_kinds ), private :: real_byte_sizes = (/ &
- num_bytes_for_r_single, num_bytes_for_r_double, &
- num_bytes_for_r_quad /)
- ! Default values
- ! **** CHANGE THE FOLLOWING TO CHANGE THE DEFAULT REAL TYPE KIND ***
- integer, parameter, private :: default_real = 2 ! 1=single,
- ! 2=double,
- !! END FROM MODULE_KINDS
- ! Input 3D meteorological fields.
- REAL , DIMENSION(:,:,:) , ALLOCATABLE :: landuse_frac_input , &
- soil_top_cat_input , &
- soil_bot_cat_input
- ! Input 2D surface fields.
- REAL , DIMENSION(:,:) , ALLOCATABLE :: soilt010_input , soilt040_input , &
- soilt100_input , soilt200_input , &
- soilm010_input , soilm040_input , &
- soilm100_input , soilm200_input , &
- psfc_in,pmsl
- REAL , DIMENSION(:,:) , ALLOCATABLE :: lat_wind, lon_wind
- ! Local input arrays
- REAL,DIMENSION(:,:),ALLOCATABLE :: dum2d
- INTEGER,DIMENSION(:,:),ALLOCATABLE :: idum2d
- REAL,DIMENSION(:,:,:),ALLOCATABLE :: dum3d
- LOGICAL , SAVE :: first_time_in = .TRUE.
- INTEGER :: flag_soilt010 , flag_soilt100 , flag_soilt200 , &
- flag_soilm010 , flag_soilm100 , flag_soilm200
- ! Some constants to allow simple dimensions in the defined types
- ! given below.
- CONTAINS
- SUBROUTINE read_wps ( grid, filename, file_date_string, num_metgrid_levels )
- USE module_soil_pre
- USE module_domain
- IMPLICIT NONE
- TYPE(domain) , INTENT(INOUT) :: grid
- CHARACTER (LEN=19) , INTENT(IN) :: file_date_string
- CHARACTER (LEN=4) :: dummychar
- CHARACTER (LEN=132) :: VarName
- CHARACTER (LEN=150) :: chartemp
- CHARACTER (*) , INTENT(IN) :: filename
- INTEGER :: ids,ide,jds,jde,kds,kde &
- ,ims,ime,jms,jme,kms,kme &
- ,its,ite,jts,jte,kts,kte
- INTEGER :: i , j , k , loop, IMAX, JMAX
- INTEGER :: DATAHANDLE, num_metgrid_levels
- INTEGER :: Sysdepinfo, Status
- INTEGER :: istatus,ioutcount,iret,index,ierr
-
- integer :: nrecs,iunit, L,hor_size,hor_size_u,hor_size_v
- !!
- character*132, allocatable :: datestr_all(:)
- character*132, allocatable :: varname_all(:)
- integer, allocatable :: domainend_all(:,:)
- integer, allocatable :: start_block(:)
- integer, allocatable :: end_block(:)
- integer, allocatable :: start_byte(:)
- integer, allocatable :: end_byte(:)
- integer(kind=i_llong), allocatable :: file_offset(:)
- !!
- REAL :: dummy,tmp,garb
- REAL, ALLOCATABLE:: dumdata(:,:,:)
- REAL, ALLOCATABLE:: dumdata_u(:,:,:)
- REAL, ALLOCATABLE:: dumdata_v(:,:,:)
- REAL :: lats16(16),lons16(16)
- CHARACTER (LEN= 8) :: dummy_char
- INTEGER :: ok , map_proj , ok_open, igarb,igarb2, N
- REAL :: pt
- INTEGER :: num_veg_cat , num_soil_top_cat , num_soil_bot_cat
- #if defined(DM_PARALLEL) && !defined(STUBMPI)
- INCLUDE "mpif.h"
- SELECT CASE ( model_data_order )
- CASE ( DATA_ORDER_ZXY )
- kds = grid%sd31 ; kde = grid%ed31 ;
- ids = grid%sd32 ; ide = grid%ed32 ;
- jds = grid%sd33 ; jde = grid%ed33 ;
- kms = grid%sm31 ; kme = grid%em31 ;
- ims = grid%sm32 ; ime = grid%em32 ;
- jms = grid%sm33 ; jme = grid%em33 ;
- kts = grid%sp31 ; kte = grid%ep31 ; ! tile is entire patch
- its = grid%sp32 ; ite = grid%ep32 ; ! tile is entire patch
- jts = grid%sp33 ; jte = grid%ep33 ; ! tile is entire patch
- CASE ( DATA_ORDER_XYZ )
- ids = grid%sd31 ; ide = grid%ed31 ;
- jds = grid%sd32 ; jde = grid%ed32 ;
- kds = grid%sd33 ; kde = grid%ed33 ;
- ims = grid%sm31 ; ime = grid%em31 ;
- jms = grid%sm32 ; jme = grid%em32 ;
- kms = grid%sm33 ; kme = grid%em33 ;
- its = grid%sp31 ; ite = grid%ep31 ; ! tile is entire patch
- jts = grid%sp32 ; jte = grid%ep32 ; ! tile is entire patch
- kts = grid%sp33 ; kte = grid%ep33 ; ! tile is entire patch
- CASE ( DATA_ORDER_XZY )
- ids = grid%sd31 ; ide = grid%ed31 ;
- kds = grid%sd32 ; kde = grid%ed32 ;
- jds = grid%sd33 ; jde = grid%ed33 ;
- ims = grid%sm31 ; ime = grid%em31 ;
- kms = grid%sm32 ; kme = grid%em32 ;
- jms = grid%sm33 ; jme = grid%em33 ;
- its = grid%sp31 ; ite = grid%ep31 ; ! tile is entire patch
- kts = grid%sp32 ; kte = grid%ep32 ; ! tile is entire patch
- jts = grid%sp33 ; jte = grid%ep33 ; ! tile is entire patch
- END SELECT
- ! Initialize what soil temperature and moisture is available.
- flag_st000010 = 0
- flag_st010040 = 0
- flag_st040100 = 0
- flag_st100200 = 0
- flag_sm000010 = 0
- flag_sm010040 = 0
- flag_sm040100 = 0
- flag_sm100200 = 0
- flag_st010200 = 0
- flag_sm010200 = 0
- flag_soilt010 = 0
- flag_soilt040 = 0
- flag_soilt100 = 0
- flag_soilt200 = 0
- flag_soilm010 = 0
- flag_soilm040 = 0
- flag_soilm100 = 0
- flag_soilm200 = 0
- flag_sst = 0
- flag_toposoil = 0
- ! How many soil levels have we found? Well, right now, none.
- num_st_levels_input = 0
- num_sm_levels_input = 0
- st_levels_input = -1
- sm_levels_input = -1
- ! Get the space for the data if this is the first time here.
- IF (.NOT. ALLOCATED (pmsl) ) ALLOCATE ( pmsl(its:ite,jts:jte) )
- IF (.NOT. ALLOCATED (psfc_in) ) ALLOCATE ( psfc_in(its:ite,jts:jte) )
- !!! MPI IO
- iunit=33
- call count_recs_wrf_binary_file(iunit, trim(fileName), nrecs)
- allocate (datestr_all(nrecs))
- allocate (varname_all(nrecs))
- allocate (domainend_all(3,nrecs))
- allocate (start_block(nrecs))
- allocate (end_block(nrecs))
- allocate (start_byte(nrecs))
- allocate (end_byte(nrecs))
- allocate (file_offset(nrecs))
-
- call inventory_wrf_binary_file(iunit, trim(filename), nrecs, &
- datestr_all,varname_all,domainend_all, &
- start_block,end_block,start_byte,end_byte,file_offset)
- call mpi_file_open(mpi_comm_world, trim(filename), &
- mpi_mode_rdonly,mpi_info_null, iunit, ierr)
- if (ierr /= 0) then
- call wrf_error_fatal("Error opening file with mpi io")
- end if
- VarName='CEN_LAT'
- call retrieve_index(index,VarName,varname_all,nrecs,iret)
- if (iret /= 0) then
- print*,VarName," not found in file"
- else
- call mpi_file_read_at(iunit,file_offset(index)+5*4, &
- garb,1,mpi_real4, &
- mpi_status_ignore, ierr)
- if (ierr /= 0) then
- print*,"Error reading ", VarName," using MPIIO"
- else
- print*,VarName, ' from MPIIO READ= ',garb
- CALL nl_set_cen_lat ( grid%id , garb )
- end if
- end if
- VarName='CEN_LON'
- call retrieve_index(index,VarName,varname_all,nrecs,iret)
- call mpi_file_read_at(iunit,file_offset(index)+5*4, &
- garb,1,mpi_real4, &
- mpi_status_ignore, ierr)
- CALL nl_set_cen_lon ( grid%id , garb )
- CALL nl_set_stand_lon ( grid%id , garb )
- VarName='POLE_LAT'
- call retrieve_index(index,VarName,varname_all,nrecs,iret)
- call mpi_file_read_at(iunit,file_offset(index)+5*4, &
- garb,1,mpi_real4, &
- mpi_status_ignore, ierr)
- CALL nl_set_pole_lat ( grid%id , garb )
- VarName='TRUELAT1'
- call retrieve_index(index,VarName,varname_all,nrecs,iret)
- call mpi_file_read_at(iunit,file_offset(index)+5*4, &
- garb,1,mpi_real4, &
- mpi_status_ignore, ierr)
- CALL nl_set_truelat1 ( grid%id , garb )
- VarName='TRUELAT2'
- call retrieve_index(index,VarName,varname_all,nrecs,iret)
- call mpi_file_read_at(iunit,file_offset(index)+5*4, &
- garb,1,mpi_real4, &
- mpi_status_ignore, ierr)
- CALL nl_set_truelat2 ( grid%id , garb )
- VarName='MAP_PROJ'
- call retrieve_index(index,VarName,varname_all,nrecs,iret)
- call mpi_file_read_at(iunit,file_offset(index)+5*4, &
- igarb,1,mpi_integer4, &
- mpi_status_ignore, ierr)
- CALL nl_set_map_proj( grid%id, igarb)
- VarName='ISURBAN'
- call retrieve_index(index,VarName,varname_all,nrecs,iret)
- call mpi_file_read_at(iunit,file_offset(index)+5*4, &
- igarb,1,mpi_integer4, &
- mpi_status_ignore, ierr)
- CALL nl_set_isurban ( grid%id, igarb)
- VarName='ISWATER'
- call retrieve_index(index,VarName,varname_all,nrecs,iret)
- call mpi_file_read_at(iunit,file_offset(index)+5*4, &
- igarb,1,mpi_integer4, &
- mpi_status_ignore, ierr)
- write(0,*) 'setting iswater to be: ', igarb
- CALL nl_set_iswater (grid%id, igarb )
- VarName='ISICE'
- call retrieve_index(index,VarName,varname_all,nrecs,iret)
- call mpi_file_read_at(iunit,file_offset(index)+5*4, &
- igarb2,1,mpi_integer4, &
- mpi_status_ignore, ierr)
- write(0,*) 'setting isice to be: ', igarb2
- CALL nl_set_isice (grid%id, igarb2 )
- IF ( igarb .eq. 16 .and. igarb2 .eq. 24 ) THEN
- CALL nl_set_mminlu ( grid%id, 'USGS')
- ENDIF
- IF ( igarb .eq. 17 .and. igarb2 .eq. 15 ) THEN
- ! ambiguous
- CALL nl_set_mminlu ( grid%id, 'MODIFIED_IGBP_MODIS_NOAH')
- ! CALL nl_set_mminlu ( grid%id, 'MODIS')
- ENDIF
- IF ( igarb .eq. 15 .and. igarb2 .eq. 16 ) THEN
- CALL nl_set_mminlu ( grid%id, 'SiB')
- ENDIF
- VarName='FLAG_SNOWH'
- call retrieve_index(index,VarName,varname_all,nrecs,iret)
- call mpi_file_read_at(iunit,file_offset(index)+5*4, &
- igarb,1,mpi_integer4, &
- mpi_status_ignore, ierr)
- flag_snowh=igarb
- VarName='FLAG_SNOW'
- call retrieve_index(index,VarName,varname_all,nrecs,iret)
- call mpi_file_read_at(iunit,file_offset(index)+5*4, &
- igarb,1,mpi_integer4, &
- mpi_status_ignore, ierr)
- flag_snow=igarb
- VarName='FLAG_METGRID'
- call retrieve_index(index,VarName,varname_all,nrecs,iret)
- if (iret .eq. 0) then
- call mpi_file_read_at(iunit,file_offset(index)+5*4, &
- igarb,1,mpi_integer4, &
- mpi_status_ignore, ierr)
- flag_metgrid=igarb
- endif
- VarName='FLAG_SOILHGT'
- call retrieve_index(index,VarName,varname_all,nrecs,iret)
- if (iret .eq. 0) then
- call mpi_file_read_at(iunit,file_offset(index)+5*4, &
- igarb,1,mpi_integer4, &
- mpi_status_ignore, ierr)
- flag_soilhgt=igarb
- endif
- VarName='FLAG_PSFC'
- call retrieve_index(index,VarName,varname_all,nrecs,iret)
- if (iret .eq. 0) then
- call mpi_file_read_at(iunit,file_offset(index)+5*4, &
- igarb,1,mpi_integer4, &
- mpi_status_ignore, ierr)
- flag_psfc=igarb
- endif
- VarName='FLAG_SLP'
- call retrieve_index(index,VarName,varname_all,nrecs,iret)
- if (iret .eq. 0) then
- call mpi_file_read_at(iunit,file_offset(index)+5*4, &
- igarb,1,mpi_integer4, &
- mpi_status_ignore, ierr)
- flag_slp=igarb
- endif
- VarName='NUM_METGRID_SOIL_LEVELS'
- call retrieve_index(index,VarName,varname_all,nrecs,iret)
- call mpi_file_read_at(iunit,file_offset(index)+5*4, &
- igarb,1,mpi_integer4, &
- mpi_status_ignore, ierr)
- CALL nl_set_num_metgrid_soil_levels(grid%id, igarb)
- num_sw_levels_input=igarb
- VarName='FLAG_SOIL_LEVELS'
- call retrieve_index(index,VarName,varname_all,nrecs,iret)
- if (iret .eq. 0) then
- call mpi_file_read_at(iunit,file_offset(index)+5*4, &
- igarb,1,mpi_integer4, &
- mpi_status_ignore, ierr)
- flag_soil_levels=igarb
- endif
- VarName='FLAG_SOIL_LAYERS'
- call retrieve_index(index,VarName,varname_all,nrecs,iret)
- call mpi_file_read_at(iunit,file_offset(index)+5*4, &
- igarb,1,mpi_integer4, &
- mpi_status_ignore, ierr)
- flag_soil_layers=igarb
- VarName='ISLAKE'
- call retrieve_index(index,VarName,varname_all,nrecs,iret)
- call mpi_file_read_at(iunit,file_offset(index)+5*4, &
- igarb,1,mpi_integer4, &
- mpi_status_ignore, ierr)
- CALL nl_set_islake ( grid%id, igarb)
- VarName='ISOILWATER'
- call retrieve_index(index,VarName,varname_all,nrecs,iret)
- call mpi_file_read_at(iunit,file_offset(index)+5*4, &
- igarb,1,mpi_integer4, &
- mpi_status_ignore, ierr)
- CALL nl_set_isoilwater ( grid%id, igarb)
- VarName='MOAD_CEN_LAT'
- call retrieve_index(index,VarName,varname_all,nrecs,iret)
- call mpi_file_read_at(iunit,file_offset(index)+5*4, &
- garb,1,mpi_real4, &
- mpi_status_ignore, ierr)
- CALL nl_set_moad_cen_lat ( grid%id,garb)
- VarName='corner_lats'
- call retrieve_index(index,VarName,varname_all,nrecs,iret)
- call mpi_file_read_at(iunit,file_offset(index)+5*4, &
- lats16,16,mpi_real4, &
- mpi_status_ignore, ierr)
- VarName='corner_lons'
- call retrieve_index(index,VarName,varname_all,nrecs,iret)
- call mpi_file_read_at(iunit,file_offset(index)+5*4, &
- lons16,16,mpi_real4, &
- mpi_status_ignore, ierr)
- ! VarName='MMINLU'
- ! call retrieve_index(index,VarName,varname_all,nrecs,iret)
- ! if (iret .eq. 0) then
- ! call mpi_file_read_at(iunit,file_offset(index)+5*4, &
- ! dummychar,1,mpi_char, &
- ! mpi_status_ignore, ierr)
- ! endif
- hor_size=(IDE-IDS)*(JDE-JDS)
- hor_size_u=(IDE+1-IDS)*(JDE-JDS)
- hor_size_v=(IDE-IDS)*(JDE+1-JDS)
- varName='PRES'
- allocate(dumdata(IDS:IDE-1,JDS:JDE-1,num_metgrid_levels))
- allocate(dumdata_u(IDS:IDE,JDS:JDE-1,num_metgrid_levels))
- allocate(dumdata_v(IDS:IDE-1,JDS:JDE,num_metgrid_levels))
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size*num_metgrid_levels,mpi_real4, &
- mpi_status_ignore, ierr)
- DO K=1,num_metgrid_levels
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%p_gc(I,K,J)=dumdata(I,J,K)
- ENDDO
- ENDDO
- ENDDO
- varName='GHT'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size*num_metgrid_levels,mpi_real4, &
- mpi_status_ignore, ierr)
- DO K=1,num_metgrid_levels
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%ght_gc(I,K,J)=dumdata(I,J,K)
- ENDDO
- ENDDO
- ENDDO
- varName='VEGCAT'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%vegcat(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- ! varName='SOIL_CAT'
- ! CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- ! CALL mpi_file_read_at(iunit,file_offset(index+1), &
- ! dumdata,hor_size,mpi_real4, &
- ! mpi_status_ignore, ierr)
- ! DO J=JTS,min(JTE,JDE-1)
- ! DO I=ITS,min(ITE,IDE-1)
- ! grid%input_soil_cat(I,J)=dumdata(I,J,1)
- ! ENDDO
- ! ENDDO
- varName='CANWAT'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%canwat(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- varName='SNOW'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%snow(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- varName='SNOWH'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%snowh(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- varName='SKINTEMP'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%tsk_gc(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- varName='SOILHGT'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%toposoil(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- ! varName='SEAICE'
- ! CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- ! CALL mpi_file_read_at(iunit,file_offset(index+1), &
- ! dumdata,hor_size,mpi_real4, &
- ! mpi_status_ignore, ierr)
- ! DO J=JTS,min(JTE,JDE-1)
- ! DO I=ITS,min(ITE,IDE-1)
- ! grid%xice_gc(I,J)=dumdata(I,J,1)
- ! ENDDO
- ! ENDDO
- varName='ST100200'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%st100200(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- varName='ST040100'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%st040100(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- varName='ST010040'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%st010040(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- varName='ST000010'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%st000010(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- varName='SM100200'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%sm100200(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- varName='SM040100'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%sm040100(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- varName='SM010040'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%sm010040(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- varName='SM000010'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%sm000010(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- varName='PSFC'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- if ( ierr .eq. 0 ) flag_psfc=1
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%psfc(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- varName='RH'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size*num_metgrid_levels,mpi_real4, &
- mpi_status_ignore, ierr)
- DO K=1,num_metgrid_levels
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%rh_gc(I,K,J)=dumdata(I,J,K)
- ENDDO
- ENDDO
- ENDDO
- varName='VV'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata_v,hor_size_v*num_metgrid_levels,mpi_real4, &
- mpi_status_ignore, ierr)
- DO K=1,num_metgrid_levels
- DO J=JTS,min(JTE,JDE)
- DO I=ITS,min(ITE,IDE-1)
- grid%v_gc(I,K,J)=dumdata_v(I,J,K)
- if (grid%v_gc(I,K,J) .ne. grid%v_gc(I,K,J) .or. abs(grid%v_gc(I,K,J)) .gt. 100.) then
- write(0,*) 'bad v_gc defined: ', I,K,J,grid%v_gc(I,K,J)
- call wrf_error_fatal(" bad v_gc")
- endif
- ENDDO
- ENDDO
- ENDDO
- varName='UU'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata_u,hor_size_u*num_metgrid_levels,mpi_real4, &
- mpi_status_ignore, ierr)
- DO K=1,num_metgrid_levels
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE)
- grid%u_gc(I,K,J)=dumdata_u(I,J,K)
- if (grid%u_gc(I,K,J) .ne. grid%u_gc(I,K,J) .or. abs(grid%u_gc(I,K,J)) .gt. 100.) then
- write(0,*) 'bad u_gc defined: ', I,K,J,grid%u_gc(I,K,J)
- call wrf_error_fatal(" bad u_gc")
- endif
- ENDDO
- ENDDO
- ENDDO
- varName='TT'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size*num_metgrid_levels,mpi_real4, &
- mpi_status_ignore, ierr)
- DO K=1,num_metgrid_levels
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%t_gc(I,K,J)=dumdata(I,J,K)
- if (grid%t_gc(I,K,J) .ne. grid%t_gc(I,K,J) .or. abs(grid%t_gc(I,K,J)) .gt. 350.) then
- write(0,*) 'bad t_gc defined: ', I,K,J,grid%t_gc(I,K,J)
- call wrf_error_fatal(" bad t_gc")
- endif
- ENDDO
- ENDDO
- ENDDO
- ! varName='RWMR'
- ! CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- ! CALL mpi_file_read_at(iunit,file_offset(index+1), &
- ! dumdata,hor_size*num_metgrid_levels,mpi_real4, &
- ! mpi_status_ignore, ierr)
- ! DO K=1,num_metgrid_levels
- ! DO J=JTS,min(JTE,JDE-1)
- ! DO I=ITS,min(ITE,IDE-1)
- ! grid%nmm_rwmr_gc(I,J,K)=dumdata(I,J,K)
- ! ENDDO
- ! ENDDO
- ! ENDDO
- ! varName='SNMR'
- ! CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- ! CALL mpi_file_read_at(iunit,file_offset(index+1), &
- ! dumdata,hor_size*num_metgrid_levels,mpi_real4, &
- ! mpi_status_ignore, ierr)
- ! DO K=1,num_metgrid_levels
- ! DO J=JTS,min(JTE,JDE-1)
- ! DO I=ITS,min(ITE,IDE-1)
- ! grid%nmm_snmr_gc(I,J,K)=dumdata(I,J,K)
- ! ENDDO
- ! ENDDO
- ! ENDDO
- ! varName='CLWMR'
- ! CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- ! CALL mpi_file_read_at(iunit,file_offset(index+1), &
- ! dumdata,hor_size*num_metgrid_levels,mpi_real4, &
- ! mpi_status_ignore, ierr)
- ! DO K=1,num_metgrid_levels
- ! DO J=JTS,min(JTE,JDE-1)
- ! DO I=ITS,min(ITE,IDE-1)
- ! grid%nmm_clwmr_gc(I,J,K)=dumdata(I,J,K)
- ! ENDDO
- ! ENDDO
- ! ENDDO
- ! varName='CICE'
- ! CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- ! CALL mpi_file_read_at(iunit,file_offset(index+1), &
- ! dumdata,hor_size*num_metgrid_levels,mpi_real4, &
- ! mpi_status_ignore, ierr)
- ! DO K=1,num_metgrid_levels
- ! DO J=JTS,min(JTE,JDE-1)
- ! DO I=ITS,min(ITE,IDE-1)
- ! grid%nmm_cice_gc(I,J,K)=dumdata(I,J,K)
- ! ENDDO
- ! ENDDO
- ! ENDDO
- ! varName='FRIMEF'
- ! CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- ! CALL mpi_file_read_at(iunit,file_offset(index+1), &
- ! dumdata,hor_size*num_metgrid_levels,mpi_real4, &
- ! mpi_status_ignore, ierr)
- ! DO K=1,num_metgrid_levels
- ! DO J=JTS,min(JTE,JDE-1)
- ! DO I=ITS,min(ITE,IDE-1)
- ! grid%nmm_rimef_gc(I,J,K)=dumdata(I,J,K)
- ! ENDDO
- ! ENDDO
- ! ENDDO
- varName='PMSL'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%pslv_gc(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- varName='SLOPECAT'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%slopecat(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- varName='SNOALB'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%snoalb(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- num_veg_cat = SIZE ( grid%landusef , DIM=2 )
- num_soil_top_cat = SIZE ( grid%soilctop , DIM=2 )
- num_soil_bot_cat = SIZE ( grid%soilcbot , DIM=2 )
- varName='GREENFRAC'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size*12,mpi_real4, &
- mpi_status_ignore, ierr)
- DO K=1,12
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%greenfrac(I,K,J)=dumdata(I,J,K)
- ENDDO
- ENDDO
- ENDDO
- varName='ALBEDO12M'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size*12,mpi_real4, &
- mpi_status_ignore, ierr)
- DO K=1,12
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%albedo12m(I,K,J)=dumdata(I,J,K)
- ENDDO
- ENDDO
- ENDDO
- varName='SOILCBOT'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size*num_soil_bot_cat,mpi_real4, &
- mpi_status_ignore, ierr)
- DO K=1,num_soil_bot_cat
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%soilcbot(I,K,J)=dumdata(I,J,K)
- ENDDO
- ENDDO
- ENDDO
- varName='SOILCAT'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%soilcat(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- write(0,*) 'veg_cat and soil_cat sizes:::: ', num_veg_cat , num_soil_top_cat
- varName='SOILCTOP'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size*num_soil_top_cat,mpi_real4, &
- mpi_status_ignore, ierr)
- DO K=1,num_soil_top_cat
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%soilctop(I,K,J)=dumdata(I,J,K)
- ENDDO
- ENDDO
- ENDDO
- varName='SOILTEMP'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%tmn_gc(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- ! varName='HGT_V'
- ! CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- ! CALL mpi_file_read_at(iunit,file_offset(index+1), &
- ! dumdata,hor_size,mpi_real4, &
- ! mpi_status_ignore, ierr)
- !
- ! DO J=JTS,min(JTE,JDE-1)
- ! DO I=ITS,min(ITE,IDE-1)
- ! grid%nmm_htv_gc(I,J)=dumdata(I,J,1)
- ! ENDDO
- ! ENDDO
- varName='HGT_M'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%ht_gc(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- varName='LU_INDEX'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%lu_index(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- varName='LANDUSEF'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size*num_veg_cat,mpi_real4, &
- mpi_status_ignore, ierr)
- DO K=1,num_veg_cat
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%landusef(I,K,J)=dumdata(I,J,K)
- ENDDO
- ENDDO
- ENDDO
- varName='LANDMASK'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%landmask(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- varName='F'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%f(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- varName='E'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%e(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- varName='COSALPHA'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%cosa(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- varName='SINALPHA'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%sina(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- varName='MAPFAC_U'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata_u,hor_size_u,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE)
- grid%msfu(I,J)=dumdata_u(I,J,1)
- !! bandaid for newly created WPS geogrid static files
- if (grid%msfu(I,J) .lt. 0.7) then
- write(0,*) 'weird msfu at I,J: ', I,J,grid%msfu(I,J)
- if(J .eq. min(JTE,JDE-1)) then
- grid%msfu(I,J)=dumdata_u(I,J-1,1)
- write(0,*) 'changing msfu to: ',I,J, grid%msfu(I,J)
- endif
-
- endif
- !! end bandaid
- ENDDO
- ENDDO
- varName='MAPFAC_V'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata_v,hor_size_v,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE)
- DO I=ITS,min(ITE,IDE-1)
- grid%msfv(I,J)=dumdata_v(I,J,1)
- if (grid%msfv(I,J) .lt. 0.7 ) then
- write(0,*) 'weird msfv at I,J: ', I,J,grid%msfv(I,J)
- grid%msfv(I,J)=dumdata_v(I,J-1,1)
- if( J .eq. min(JTE,JDE)) then
- write(0,*) 'changing msfv to: ',I,J, grid%msfv(I,J)
- endif
- endif
- ENDDO
- ENDDO
- varName='MAPFAC_M'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%msft(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- varName='CLAT'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%clat(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- varName='XLONG_U'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata_u,hor_size_u,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE)
- grid%xlong_u(I,J)=dumdata_u(I,J,1)
- ENDDO
- ENDDO
- varName='XLAT_U'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata_u,hor_size_u,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE)
- grid%xlat_u(I,J)=dumdata_u(I,J,1)
- ENDDO
- ENDDO
- varName='XLONG_V'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata_v,hor_size_v,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE)
- DO I=ITS,min(ITE,IDE-1)
- grid%xlong_v(I,J)=dumdata_v(I,J,1)
- ENDDO
- ENDDO
- varName='XLAT_V'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata_v,hor_size_v,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE)
- DO I=ITS,min(ITE,IDE-1)
- grid%xlat_v(I,J)=dumdata_v(I,J,1)
- ENDDO
- ENDDO
- varName='XLONG_M'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%xlong_gc(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- write(0,*) 'reading XLAT_M'
- varName='XLAT_M'
- CALL retrieve_index(index,VarName,varname_all,nrecs,iret)
- CALL mpi_file_read_at(iunit,file_offset(index+1), &
- dumdata,hor_size,mpi_real4, &
- mpi_status_ignore, ierr)
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- grid%xlat_gc(I,J)=dumdata(I,J,1)
- ENDDO
- ENDDO
- write(0,*) 'xlat_gc defined'
- call mpi_file_close(mpi_comm_world, ierr)
- write(0,*) 'to ST000010 def'
- varName='ST000010'
- flag_st000010 = 1
- num_st_levels_input = num_st_levels_input + 1
- st_levels_input(num_st_levels_input) = char2int2(varName(3:8))
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- st_input(I,num_st_levels_input + 1,J) = grid%st000010(i,j)
- ENDDO
- ENDDO
- write(0,*) 'past ST000010 def'
- varName='ST010040'
- flag_st010040 = 1
- num_st_levels_input = num_st_levels_input + 1
- st_levels_input(num_st_levels_input) = char2int2(varName(3:8))
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- st_input(I,num_st_levels_input + 1,J) = grid%st010040(i,j)
- ENDDO
- ENDDO
- varName='ST040100'
- flag_st040100 = 1
- num_st_levels_input = num_st_levels_input + 1
- st_levels_input(num_st_levels_input) = char2int2(varName(3:8))
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- st_input(I,num_st_levels_input + 1,J) = grid%st040100(i,j)
- ENDDO
- ENDDO
-
- varName='ST100200'
- flag_st100200 = 1
- num_st_levels_input = num_st_levels_input + 1
- st_levels_input(num_st_levels_input) = char2int2(varName(3:8))
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- st_input(I,num_st_levels_input + 1,J) = grid%st100200(i,j)
- ENDDO
- ENDDO
- varName='SM000010'
- flag_sm000010 = 1
- num_sm_levels_input = num_sm_levels_input + 1
- sm_levels_input(num_sm_levels_input) = char2int2(varName(3:8))
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- sm_input(I,num_sm_levels_input + 1,J) = grid%sm000010(i,j)
- ENDDO
- ENDDO
- varName='SM010040'
- flag_sm010040 = 1
- num_sm_levels_input = num_sm_levels_input + 1
- sm_levels_input(num_sm_levels_input) = char2int2(varName(3:8))
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- sm_input(I,num_sm_levels_input + 1,J) = grid%sm010040(i,j)
- ENDDO
- ENDDO
- varName='SM040100'
- flag_sm040100 = 1
- num_sm_levels_input = num_sm_levels_input + 1
- sm_levels_input(num_sm_levels_input) = char2int2(varName(3:8))
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- sm_input(I,num_sm_levels_input + 1,J) = grid%sm040100(i,j)
- ENDDO
- ENDDO
-
- varName='SM100200'
- flag_sm100200 = 1
- num_sm_levels_input = num_sm_levels_input + 1
- sm_levels_input(num_sm_levels_input) = char2int2(varName(3:8))
- DO J=JTS,min(JTE,JDE-1)
- DO I=ITS,min(ITE,IDE-1)
- sm_input(I,num_sm_levels_input + 1,J) = grid%sm100200(i,j)
- ENDDO
- ENDDO
- ! flag_sst = 1
- write(0,*) 'maxval st_input(1): ', maxval(st_input(:,1,:))
- write(0,*) 'maxval st_input(2): ', maxval(st_input(:,2,:))
- write(0,*) 'maxval st_input(3): ', maxval(st_input(:,3,:))
- write(0,*) 'maxval st_input(4): ', maxval(st_input(:,4,:))
- DEALLOCATE(pmsl)
- DEALLOCATE(psfc_in)
- DEALLOCATE(dumdata)
- DEALLOCATE(dumdata_u)
- DEALLOCATE(dumdata_v)
- #endif
- end subroutine read_wps
- ! -------------------------------------------------------------------------
- ! -------------------------------------------------------------------------
- !!!! MPI-IO pieces
- subroutine retrieve_index(index,string,varname_all,nrecs,iret)
- !$$$ subprogram documentation block
- ! . . . .
- ! subprogram: retrieve_index get record number of desired variable
- ! prgmmr: parrish org: np22 date: 2004-11-29
- !
- ! abstract: by examining previously generated inventory of wrf binary restart file,
- ! find record number that contains the header record for variable
- ! identified by input character variable "string".
- !
- ! program history log:
- ! 2004-11-29 parrish
- !
- ! input argument list:
- ! string - mnemonic for variable desired
- ! varname_all - list of all mnemonics obtained from inventory of file
- ! nrecs - total number of sequential records counted in wrf
- ! binary restart file
- !
- ! output argument list:
- ! index - desired record number
- ! iret - return status, set to 0 if variable was found,
- ! non-zero if not.
- !
- ! attributes:
- ! language: f90
- ! machine: ibm RS/6000 SP
- !
- !$$$
- implicit none
- integer,intent(out)::iret
- integer,intent(in)::nrecs
- integer,intent(out):: index
- character(*), intent(in):: string
- character(132),intent(in)::varname_all(nrecs)
- integer i
- iret=0
- do i=1,nrecs
- if(trim(string) == trim(varname_all(i))) then
- index=i
- return
- end if
- end do
- write(6,*)' problem reading wrf nmm binary file, rec id "',trim(string),'" not found'
- iret=-1
- end subroutine retrieve_index
- subroutine next_buf(in_unit,buf,nextbyte,locbyte,thisblock,lrecl,nreads,lastbuf)
- !$$$ subprogram documentation block
- ! . . . .
- ! subprogram: next_buf bring in next direct access block
- ! prgmmr: parrish org: np22 date: 2004-11-29
- !
- ! abstract: bring in next direct access block when needed, as the file is scanned
- ! from beginning to end during counting and invento…