SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/prep_ocean_ascllv.F90
Go to the documentation of this file.
00001 !     #################################################################################
00002 SUBROUTINE PREP_OCEAN_ASCLLV(HPROGRAM,HSURF,HFILE, & 
00003      &                       KLUOUT,PFIELD)
00004 !     #################################################################################
00005 !
00006 !!****  *PREP_OCEAN_ASCLLDV* - prepares oceanic fields from personal data in ascii
00007 !!                            formed as lat,lon, depth, value
00008 !!
00009 !!    PURPOSE
00010 !!    -------
00011 !
00012 !!**  METHOD
00013 !!    ------
00014 !!   Read the input file which must be ascii typed, lat,lon,depth, value
00015 !!   Version 1: 
00016 !!              The data must be on the same grid as the pgd and on the same
00017 !!              vertical grid as prescribed in oceanvergrid.f90
00018 !!              NDEPTH= a definirtn nlev=NOCKMAX (modd_ocean_gridn)
00019 !!              
00020 !!  Version 2: (not done yet)
00021 !!              - dummy or namlist for nb verticals levels
00022 !!              - file prescribing the vertical grid 
00023 !!
00024 !!    REFERENCE
00025 !!    ---------
00026 !!      
00027 !!
00028 !!    AUTHOR
00029 !!    ------
00030 !!     P. PEYRILLE
00031 !!
00032 !!    MODIFICATIONS
00033 !!    -------------
00034 !!      Original    01/2011
00035 !!------------------------------------------------------------------
00036 !
00037 USE MODD_PREP,       ONLY : CINTERP_TYPE, CINGRID_TYPE
00038 USE MODD_PGD_GRID,       ONLY : NL,LLATLONMASK,CGRID,XGRID_PAR,NGRID_PAR
00039 USE MODD_OCEAN_GRID_n , ONLY : NOCKMAX
00040 USE MODD_PGDWORK,        ONLY : XSUMVAL, NSIZE
00041 USE MODD_SURF_ATM_n,     ONLY : XNATURE, XSEA, XTOWN, XWATER
00042 USE MODD_SEAFLUX_GRID_n , ONLY : NDIM
00043 !
00044 USE MODI_OPEN_FILE
00045 USE MODI_CLOSE_FILE
00046 USE MODI_GET_LUOUT
00047 USE MODI_GET_LATLONMASK_n
00048 USE MODI_PACK_SAME_RANK
00049 !
00050 USE MODI_GET_TYPE_DIM_n
00051 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00052 USE PARKIND1  ,ONLY : JPRB
00053 !
00054 IMPLICIT NONE
00055 !
00056 !*      0.1    declarations of arguments
00057 !
00058  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
00059  CHARACTER(LEN=7),   INTENT(IN)  :: HSURF     ! type of field
00060  CHARACTER(LEN=28),  INTENT(IN)  :: HFILE     ! file name
00061 INTEGER,            INTENT(IN)  :: KLUOUT    ! output listing logical unit
00062 !CHARACTER(LEN=28),  INTENT(IN), OPTIONAL   :: HNCVARNAME!var to read 
00063 REAL, POINTER, DIMENSION(:,:,:)   :: PFIELD    ! field to interpolate horizontally
00064 !
00065 !
00066 !*      0.2    declarations of local variables
00067 REAL,DIMENSION(:), ALLOCATABLE :: ZLAT
00068 REAL,DIMENSION(:), ALLOCATABLE :: ZLON
00069 REAL,DIMENSION(:), ALLOCATABLE :: ZDEPTH
00070 REAL,DIMENSION(:,:,:), ALLOCATABLE :: ZFIELD
00071 REAL,DIMENSION(:,:,:,:), ALLOCATABLE :: ZFIELDR
00072 !
00073 INTEGER :: IL
00074 INTEGER :: IGLB  ! logical unit
00075 INTEGER :: IDIM, ILU
00076 INTEGER :: JI,JK
00077 !
00078 INTEGER, DIMENSION(:), POINTER :: IMASK  ! mask for packing from complete field to nature field
00079  CHARACTER(LEN=6)    :: YMASK
00080 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00081 
00082 !-------------------------------------------------------------------------------------
00083 IF (LHOOK) CALL DR_HOOK('PREP_OCEAN_ASCLLV',0,ZHOOK_HANDLE)
00084 !
00085 CINGRID_TYPE='CONF PROJ '
00086 
00087 !*      1.    get full dimension of grid
00088  CALL GET_TYPE_DIM_n('FULL  ',NL)
00089 !*      2.    get Ocean dimension
00090 !
00091  CALL GET_TYPE_DIM_n('SEA   ',IL)
00092 
00093 !*      3.    get grid informations known over full grid
00094 !
00095  CALL GET_LATLONMASK_n(LLATLONMASK,CGRID,XGRID_PAR,NGRID_PAR)
00096 !
00097 !!
00098 
00099 WRITE(KLUOUT,*) "==================================== "
00100 WRITE(KLUOUT,*) "Control print in prep_ocean_ascllv "
00101 WRITE(KLUOUT,*) "NL, NOCKMAX", NL,NOCKMAX
00102 
00103 ALLOCATE(ZLAT(NL))
00104 ALLOCATE(ZLON(NL))
00105 ALLOCATE(ZDEPTH(NOCKMAX))
00106 
00107 ALLOCATE(ZFIELDR(NL,NOCKMAX,4, 1))
00108 ALLOCATE(ZFIELD(NL,NOCKMAX, 1))
00109 
00110 
00111 WRITE(KLUOUT,*) "ZFIELDR",SHAPE(ZFIELDR)
00112 WRITE(KLUOUT,*) "File name used in ocean ascllv", HFILE
00113 
00114 WRITE(KLUOUT,*)  "USURF= " , HSURF
00115 WRITE(KLUOUT,*) "NL (dim)=", NL
00116 WRITE(KLUOUT,*) "IL (dim)=", IL
00117 !
00118 !*      2.     Reading of field
00119 !              ----------------
00120  CALL OPEN_FILE(HPROGRAM,IGLB,HFILE,'FORMATTED',HACTION='READ')
00121 !
00122 
00123 DO JI=1,NL
00124   DO JK=1,NOCKMAX
00125     READ(IGLB,*,END=99) ZLAT(JI),ZLON(JI), ZDEPTH(JK), & 
00126     ZFIELDR(JI,JK,1,1), ZFIELDR(JI,JK,2,1),ZFIELDR(JI,JK,3,1), & 
00127     ZFIELDR(JI,JK,4,1)
00128   END DO
00129 END DO
00130 
00131 
00132  
00133 !      3. Close the file
00134 99 CALL CLOSE_FILE (HPROGRAM,IGLB)
00135 
00136 WRITE(KLUOUT,*) MINVAL(ZFIELDR), MAXVAL(ZFIELDR)
00137 
00138 !
00139 ! Get the correct varaibles
00140 SELECT CASE (HSURF)
00141   CASE('TEMP_OC') 
00142   ZFIELD(:,:,1) = ZFIELDR(:,:,1,1)
00143   CASE('SALT_OC') 
00144   ZFIELD(:,:,1) = ZFIELDR(:,:,2,1)
00145   CASE('UCUR_OC') 
00146   ZFIELD(:,:,1) = ZFIELDR(:,:,3,1)
00147   CASE('VCUR_OC') 
00148   ZFIELD(:,:,1) = ZFIELDR(:,:,4,1)
00149 END SELECT
00150 
00151 
00152 
00153 !*      3.     Interpolation method
00154 !              --------------------
00155 !
00156 CINTERP_TYPE='NONE  '
00157 !CINTERP_TYPE='HORIBL'
00158 !
00159 
00160 YMASK = 'SEA   '
00161  CALL GET_TYPE_DIM_n(YMASK,IDIM)
00162 WRITE(KLUOUT,*) "IDIM (dim sea) =", IDIM
00163 
00164 ALLOCATE(PFIELD(1:IDIM,1:SIZE(ZFIELD,2),1:SIZE(ZFIELD,3)))
00165 
00166 IF (IDIM/=SIZE(PFIELD,1)) THEN
00167    WRITE(KLUOUT,*)'Wrong dimension of MASK: ',IDIM,SIZE(PFIELD)
00168    CALL ABOR1_SFX('PGD_FIELD: WRONG DIMENSION OF MASK')
00169 ENDIF
00170 
00171 ALLOCATE(IMASK(IDIM))
00172 ILU=0
00173  CALL GET_SURF_MASK_n(YMASK,IDIM,IMASK,ILU,KLUOUT)
00174 DO JK=1,NOCKMAX
00175   CALL PACK_SAME_RANK(IMASK,ZFIELD(:,JK,1),PFIELD(:,JK,1))
00176 END DO
00177 DEALLOCATE(IMASK)
00178 
00179 !*      4.     Deallocations
00180 !              -------------
00181 !
00182 IF (ALLOCATED(ZLON       ))  DEALLOCATE(ZLON  )
00183 IF (ALLOCATED(ZLAT       ))  DEALLOCATE(ZLAT  )
00184 IF (ALLOCATED(ZDEPTH      ))  DEALLOCATE(ZDEPTH )
00185 IF (ALLOCATED(ZFIELD      ))  DEALLOCATE(ZFIELD )
00186 IF (ALLOCATED(ZFIELDR     ))  DEALLOCATE(ZFIELDR )
00187 !
00188 IF (LHOOK) CALL DR_HOOK('PREP_OCEAN_ASCLLV',1,ZHOOK_HANDLE)
00189 !
00190 !-------------------------------------------------------------------------------------
00191 END SUBROUTINE PREP_OCEAN_ASCLLV