SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/modd_sltn.F90
Go to the documentation of this file.
00001 MODULE MODD_SLT_n
00002 
00003 !Purpose: 
00004 !Declare variables and constants necessary to do the sea salt calculations
00005 !Here are only the variables which depend on the grid!
00006 !
00007 !Author: Alf Grini / Pierre Tulet
00008 !
00009 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00010 USE PARKIND1  ,ONLY : JPRB
00011 !
00012 IMPLICIT NONE
00013 
00014 TYPE SLT_t
00015   REAL, DIMENSION(:,:,:),POINTER :: XSFSLT                      ! Sea Salt variables to be send to output
00016   REAL,DIMENSION(:), POINTER     :: XEMISRADIUS_SLT             ! Number median radius for each source mode
00017   REAL,DIMENSION(:), POINTER     :: XEMISSIG_SLT                ! sigma for each source mode
00018 END TYPE SLT_t
00019 
00020 TYPE(SLT_t), ALLOCATABLE, TARGET, SAVE :: SLT_MODEL(:)
00021 
00022 REAL, DIMENSION(:,:,:),POINTER  :: XSFSLT=>NULL()
00023 !$OMP THREADPRIVATE(XSFSLT)
00024 REAL,DIMENSION(:), POINTER      :: XEMISRADIUS_SLT=>NULL()
00025 !$OMP THREADPRIVATE(XEMISRADIUS_SLT)
00026 REAL,DIMENSION(:), POINTER      :: XEMISSIG_SLT=>NULL()
00027 !$OMP THREADPRIVATE(XEMISSIG_SLT)
00028 
00029 CONTAINS
00030 
00031 SUBROUTINE SLT_GOTO_MODEL(KFROM, KTO, LKFROM)
00032 LOGICAL, INTENT(IN) :: LKFROM
00033 INTEGER, INTENT(IN) :: KFROM, KTO
00034 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00035 !
00036 ! Save current state for allocated arrays
00037 IF (LKFROM) THEN
00038 SLT_MODEL(KFROM)%XSFSLT=>XSFSLT
00039 SLT_MODEL(KFROM)%XEMISRADIUS_SLT=>XEMISRADIUS_SLT
00040 SLT_MODEL(KFROM)%XEMISSIG_SLT=>XEMISSIG_SLT
00041 ENDIF
00042 !
00043 ! Current model is set to model KTO
00044 IF (LHOOK) CALL DR_HOOK('MODD_SLT_N:SLT_GOTO_MODEL',0,ZHOOK_HANDLE)
00045 XSFSLT=>SLT_MODEL(KTO)%XSFSLT
00046 XEMISRADIUS_SLT=>SLT_MODEL(KTO)%XEMISRADIUS_SLT
00047 XEMISSIG_SLT=>SLT_MODEL(KTO)%XEMISSIG_SLT
00048 IF (LHOOK) CALL DR_HOOK('MODD_SLT_N:SLT_GOTO_MODEL',1,ZHOOK_HANDLE)
00049 
00050 END SUBROUTINE SLT_GOTO_MODEL
00051 
00052 SUBROUTINE SLT_ALLOC(KMODEL)
00053 INTEGER, INTENT(IN) :: KMODEL
00054 INTEGER :: J
00055 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00056 IF (LHOOK) CALL DR_HOOK("MODD_SLT_N:SLT_ALLOC",0,ZHOOK_HANDLE)
00057 ALLOCATE(SLT_MODEL(KMODEL))
00058 DO J=1,KMODEL
00059   NULLIFY(SLT_MODEL(J)%XSFSLT)
00060   NULLIFY(SLT_MODEL(J)%XEMISRADIUS_SLT)
00061   NULLIFY(SLT_MODEL(J)%XEMISSIG_SLT)
00062 ENDDO
00063 IF (LHOOK) CALL DR_HOOK("MODD_SLT_N:SLT_ALLOC",1,ZHOOK_HANDLE)
00064 END SUBROUTINE SLT_ALLOC
00065 
00066 SUBROUTINE SLT_DEALLO
00067 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00068 IF (LHOOK) CALL DR_HOOK("MODD_SLT_N:SLT_DEALLO",0,ZHOOK_HANDLE)
00069 IF (ALLOCATED(SLT_MODEL)) DEALLOCATE(SLT_MODEL)
00070 IF (LHOOK) CALL DR_HOOK("MODD_SLT_N:SLT_DEALLO",1,ZHOOK_HANDLE)
00071 END SUBROUTINE SLT_DEALLO
00072 
00073 END MODULE MODD_SLT_n