SURFEX v7.3
General documentation of Surfex
|
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