SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/prep_hor_ocean_fields.F90
Go to the documentation of this file.
00001 !     #########
00002 SUBROUTINE PREP_HOR_OCEAN_FIELDS(HPROGRAM,HSURF,HFILE,HFILETYPE,KLUOUT,OUNIF)
00003 !     #######################################################
00004 !
00005 !
00006 !!****  *PREP_HOR_OCEAN_FIELDS* - prepares all oceanic fields for the 1D oceanic model
00007 !!
00008 !!    PURPOSE
00009 !!    -------
00010 !
00011 !!**  METHOD
00012 !!    ------
00013 !!
00014 !!    REFERENCE
00015 !!    ---------
00016 !!      
00017 !!
00018 !!    AUTHOR
00019 !!    ------
00020 !!     C. Lebeaupin Brossier 
00021 !!
00022 !!    MODIFICATIONS
00023 !!    -------------
00024 !!      Original    01/2008
00025 !!      Modified    07/2012, P. Le Moigne : CMO1D phasing
00026 !!------------------------------------------------------------------
00027 !
00028 !
00029 USE MODD_SURF_PAR,       ONLY : XUNDEF
00030 USE MODD_OCEAN_CSTS,     ONLY : XRHOSWREF
00031 USE MODD_SEAFLUX_n
00032 USE MODD_OCEAN_GRID_n, ONLY : NOCKMIN,NOCKMAX,XDZ1,XZHOC
00033 USE MODD_OCEAN_n
00034 USE MODD_OCEAN_REL_n
00035 !
00036 USE MODI_PREP_HOR_OCEAN_FIELD
00037 !
00038 !
00039 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00040 USE PARKIND1  ,ONLY : JPRB
00041 !
00042 IMPLICIT NONE
00043 !
00044 !*      0.1    declarations of arguments
00045 !
00046  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
00047  CHARACTER(LEN=7),   INTENT(IN)  :: HSURF     ! type of field
00048  CHARACTER(LEN=28),  INTENT(IN)  :: HFILE     ! file name
00049  CHARACTER(LEN=6),   INTENT(IN)  :: HFILETYPE ! file type
00050 INTEGER,            INTENT(IN)  :: KLUOUT    ! logical unit of output listing
00051 LOGICAL,            INTENT(IN)  :: OUNIF     ! flag for prescribed uniform field
00052 !
00053 !
00054 !*      0.2    declarations of local variables
00055 !
00056  CHARACTER(LEN=8)                    :: YSURF   ! type of field
00057  CHARACTER(LEN=28)                   :: YNCVARNAME   ! variable to read
00058 !
00059 INTEGER                             :: IL        ! number of points
00060 INTEGER                             :: IK1
00061 INTEGER                             :: J, JLEV   ! loop counters
00062 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00063 !---------------------------------------------------------------------------
00064 !
00065 !*      1.     Patch
00066 !
00067 !---------------------------------------------------------------------------
00068 !
00069 !*      3.     Treatment of oceanic temperature
00070 IF (LHOOK) CALL DR_HOOK('PREP_HOR_OCEAN_FIELDS',0,ZHOOK_HANDLE)
00071 YSURF='TEMP_OC'
00072 YNCVARNAME='temperature'
00073  CALL PREP_HOR_OCEAN_FIELD(HPROGRAM,HFILE,HFILETYPE,KLUOUT,OUNIF,YSURF,YNCVARNAME)
00074 !---------------------------------------------------------------------------
00075 !
00076 !*      4.     Treatment of oceanic salinity
00077 YSURF='SALT_OC'
00078 YNCVARNAME='salinity'
00079  CALL PREP_HOR_OCEAN_FIELD(HPROGRAM,HFILE,HFILETYPE,KLUOUT,OUNIF,YSURF,YNCVARNAME)
00080 !---------------------------------------------------------------------------
00081 !
00082 !*      5.     Treatment of oceanic current
00083 YSURF='UCUR_OC'
00084 YNCVARNAME='u'
00085  CALL PREP_HOR_OCEAN_FIELD(HPROGRAM,HFILE,HFILETYPE,KLUOUT,OUNIF,YSURF,YNCVARNAME)
00086 YSURF='VCUR_OC'
00087 YNCVARNAME='v'
00088  CALL PREP_HOR_OCEAN_FIELD(HPROGRAM,HFILE,HFILETYPE,KLUOUT,OUNIF,YSURF,YNCVARNAME)
00089 !---------------------------------------------------------------------------
00090 !
00091 IK1=NOCKMIN+1
00092 IL = SIZE(XSEAT,1)
00093 IF (IL/=0) THEN
00094   ALLOCATE(XSEAE      (SIZE(XSEAT,1),NOCKMIN:NOCKMAX))
00095   XSEAE(:,:)   =1.E-3
00096   ALLOCATE(XSEABATH   (SIZE(XSEAT,1),NOCKMIN:NOCKMAX))
00097   XSEABATH(:,:)=1.
00098   ALLOCATE(XSEAHMO    (SIZE(XSEAT,1)))
00099   XSEAHMO(:)   =XUNDEF
00100   ALLOCATE(XLE        (SIZE(XSEAT,1),NOCKMIN:NOCKMAX))
00101   ALLOCATE(XLK        (SIZE(XSEAT,1),NOCKMIN:NOCKMAX))
00102   ALLOCATE(XKMEL      (SIZE(XSEAT,1),NOCKMIN:NOCKMAX))
00103   ALLOCATE(XKMELM     (SIZE(XSEAT,1),NOCKMIN:NOCKMAX))
00104   XLE(:,:)    =XUNDEF
00105   XLK(:,:)    =XUNDEF
00106   XKMEL(:,:)  =XUNDEF
00107   XKMELM(:,:) =XUNDEF
00108   ALLOCATE(XSEATEND   (SIZE(XSEAT,1)))
00109   XSEATEND(:) =XUNDEF
00110   !
00111   ALLOCATE(XDTFNSOL   (SIZE(XSEAT,1)))
00112   XDTFNSOL(:) = XUNDEF
00113   ALLOCATE(XDTFSOL    (SIZE(XSEAT,1),NOCKMIN:NOCKMAX))
00114   XDTFSOL(:,:)= XUNDEF  
00115 !!----------------------------------------------------------------------------
00116 !!
00117 !!*      6.     Treatment of bathymetry indice and 
00118 !!              apply bathy mask
00119   DO J=1,IL
00120     DO JLEV=IK1+1,NOCKMAX
00121       IF (XSEABATHY(J)-XZHOC(JLEV)>0.) THEN
00122         XSEABATH(J,JLEV)=0.
00123         XSEAE(J,JLEV)  = XUNDEF
00124         XSEAU(J,JLEV)  = XUNDEF
00125         XSEAV(J,JLEV)  = XUNDEF
00126         XSEAT(J,JLEV)  = XUNDEF
00127         XSEAS(J,JLEV)  = XUNDEF
00128         !
00129         XSEAT_REL(J,JLEV)  = XUNDEF
00130         XSEAS_REL(J,JLEV)  = XUNDEF
00131         !
00132         XSEAU_REL(J,JLEV)  = XUNDEF
00133         XSEAV_REL(J,JLEV)  = XUNDEF
00134         !        
00135       ENDIF 
00136     ENDDO
00137   ENDDO
00138 !
00139 !---------------------------------------------------------------------------
00140 ENDIF
00141 IF (LHOOK) CALL DR_HOOK('PREP_HOR_OCEAN_FIELDS',1,ZHOOK_HANDLE)
00142 !----------------------------------------------------------------------------
00143 END SUBROUTINE PREP_HOR_OCEAN_FIELDS