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