SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/modd_data_seafluxn.F90
Go to the documentation of this file.
00001 !     ##########################
00002       MODULE MODD_DATA_SEAFLUX_n
00003 !     ##########################
00004 !
00005 !!****  *MODD_DATA_SEAFLUX - declaration of SEAFLUX surface parameters for SEAFLUX scheme
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !
00010 !!
00011 !!**  IMPLICIT ARGUMENTS
00012 !!    ------------------
00013 !!      None 
00014 !!
00015 !!    REFERENCE
00016 !!    ---------
00017 !!
00018 !!    AUTHOR
00019 !!    ------
00020 !!      P. Le Moigne  *Meteo France*
00021 !!
00022 !!    MODIFICATIONS
00023 !!    -------------
00024 !!      Original       09/2007
00025 !
00026 !*       0.   DECLARATIONS
00027 !             ------------
00028 !
00029 !
00030 USE MODD_TYPE_DATE_SURF
00031 !      
00032 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00033 USE PARKIND1  ,ONLY : JPRB
00034 !
00035 IMPLICIT NONE
00036 
00037 TYPE DATA_SEAFLUX_t
00038 !-------------------------------------------------------------------------------
00039 !
00040 TYPE (DATE_TIME), POINTER, DIMENSION(:)  :: TDATA_SST  ! date of sst field 
00041 !
00042 !-------------------------------------------------------------------------------
00043 !
00044   REAL, POINTER, DIMENSION(:,:)  :: XDATA_SST       ! sea surface temperature for
00045 !                                                   ! each grid mesh                   (-)
00046 !
00047 !-------------------------------------------------------------------------------
00048 !
00049   INTEGER                        :: NTIME           ! number of time data
00050 !                                                   ! for SST
00051 !
00052 !-------------------------------------------------------------------------------
00053 !
00054   LOGICAL                        :: LSST_DATA       ! flag to use SST data
00055 !
00056 !-------------------------------------------------------------------------------
00057 END TYPE DATA_SEAFLUX_t
00058 
00059 TYPE(DATA_SEAFLUX_t), ALLOCATABLE, TARGET, SAVE :: DATA_SEAFLUX_MODEL(:)
00060 
00061 INTEGER, POINTER :: NTIME=>NULL()
00062 !$OMP THREADPRIVATE(NTIME)
00063 REAL, POINTER, DIMENSION(:,:)    :: XDATA_SST=>NULL()
00064 !$OMP THREADPRIVATE(XDATA_SST)
00065 TYPE (DATE_TIME), POINTER, DIMENSION(:)  :: TDATA_SST=>NULL()
00066 !$OMP THREADPRIVATE(TDATA_SST)
00067 LOGICAL, POINTER :: LSST_DATA=>NULL()
00068 !$OMP THREADPRIVATE(LSST_DATA)
00069 
00070 CONTAINS
00071 
00072 SUBROUTINE DATA_SEAFLUX_GOTO_MODEL(KFROM, KTO, LKFROM)
00073 LOGICAL, INTENT(IN) :: LKFROM
00074 INTEGER, INTENT(IN) :: KFROM, KTO
00075 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00076 !
00077 ! Save current state for allocated arrays
00078 IF (LKFROM) THEN
00079 DATA_SEAFLUX_MODEL(KFROM)%XDATA_SST=>XDATA_SST
00080 DATA_SEAFLUX_MODEL(KFROM)%TDATA_SST=>TDATA_SST
00081 ENDIF
00082 !
00083 ! Current model is set to model KTO
00084 IF (LHOOK) CALL DR_HOOK('MODD_DATA_SEAFLUX_N:DATA_SEAFLUX_GOTO_MODEL',0,ZHOOK_HANDLE)
00085 NTIME=>DATA_SEAFLUX_MODEL(KTO)%NTIME
00086 XDATA_SST=>DATA_SEAFLUX_MODEL(KTO)%XDATA_SST
00087 TDATA_SST=>DATA_SEAFLUX_MODEL(KTO)%TDATA_SST
00088 LSST_DATA=>DATA_SEAFLUX_MODEL(KTO)%LSST_DATA
00089 IF (LHOOK) CALL DR_HOOK('MODD_DATA_SEAFLUX_N:DATA_SEAFLUX_GOTO_MODEL',1,ZHOOK_HANDLE)
00090 
00091 END SUBROUTINE DATA_SEAFLUX_GOTO_MODEL
00092 
00093 SUBROUTINE DATA_SEAFLUX_ALLOC(KMODEL)
00094 INTEGER, INTENT(IN) :: KMODEL
00095 INTEGER :: J
00096 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00097 IF (LHOOK) CALL DR_HOOK("MODD_DATA_SEAFLUX_N:DATA_SEAFLUX_ALLOC",0,ZHOOK_HANDLE)
00098 ALLOCATE(DATA_SEAFLUX_MODEL(KMODEL))
00099 DO J=1,KMODEL
00100   NULLIFY(DATA_SEAFLUX_MODEL(J)%XDATA_SST)
00101 ENDDO
00102 DATA_SEAFLUX_MODEL(:)%NTIME=0
00103 DATA_SEAFLUX_MODEL(:)%LSST_DATA=.FALSE.
00104 IF (LHOOK) CALL DR_HOOK("MODD_DATA_SEAFLUX_N:DATA_SEAFLUX_ALLOC",1,ZHOOK_HANDLE)
00105 END SUBROUTINE DATA_SEAFLUX_ALLOC
00106 
00107 SUBROUTINE DATA_SEAFLUX_DEALLO
00108 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00109 IF (LHOOK) CALL DR_HOOK("MODD_DATA_SEAFLUX_N:DATA_SEAFLUX_DEALLO",0,ZHOOK_HANDLE)
00110 IF (ALLOCATED(DATA_SEAFLUX_MODEL)) DEALLOCATE(DATA_SEAFLUX_MODEL)
00111 IF (LHOOK) CALL DR_HOOK("MODD_DATA_SEAFLUX_N:DATA_SEAFLUX_DEALLO",1,ZHOOK_HANDLE)
00112 END SUBROUTINE DATA_SEAFLUX_DEALLO
00113 
00114 END MODULE MODD_DATA_SEAFLUX_n