SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/modd_svn.F90
Go to the documentation of this file.
00001 !        ###############
00002          MODULE MODD_SV_n
00003 !        ###############
00004 !
00005 !!****  *MODD_NSV* - declaration of scalar variables numbers
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !!       Arrays to store the per-model NSV_* values number (suffix _A denote an array)
00010 !!
00011 !!    AUTHOR
00012 !!    ------
00013 !!      P. Tulet   Meteo-France
00014 !!
00015 !!    MODIFICATIONS
00016 !!    -------------
00017 !!      Original  01/2004
00018 !!
00019 !-------------------------------------------------------------------------------
00020 !
00021 !*       0.   DECLARATIONS
00022 !             ------------
00023 !
00024 !
00025 !
00026 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00027 USE PARKIND1  ,ONLY : JPRB
00028 !
00029 IMPLICIT NONE
00030 
00031 TYPE SV_t
00032 !
00033 !###############################################################################
00034 !
00035 ! variables updated for the current model
00036 !
00037   CHARACTER(LEN=6), DIMENSION(:), POINTER :: CSV ! name of the scalar variables
00038   INTEGER    :: NSV_CHSBEG, NSV_CHSEND    !  index of first and last gas chemistry related scalar variable
00039   INTEGER    :: NBEQ                      ! number of chemical gas species in the surface scheme
00040   INTEGER    :: NSV_DSTBEG, NSV_DSTEND    ! index of first and last dust related scalar variable
00041   INTEGER    :: NDSTEQ                    ! number of dust related species in scalar variables list
00042   INTEGER    :: NSV_SLTBEG, NSV_SLTEND    ! index of first and last sea salt related scalar variable
00043   INTEGER    :: NSLTEQ                    ! number of sea salt related species in scalar variables list
00044   INTEGER    :: NSV_AERBEG, NSV_AEREND    ! index of first and last aerosol related scalar variabl
00045   INTEGER    :: NAEREQ                    ! number of aerosols variables
00046 
00047 !
00048 !
00049 END TYPE SV_t
00050 
00051 TYPE(SV_t), ALLOCATABLE, TARGET, SAVE :: SV_MODEL(:)
00052 
00053  CHARACTER(LEN=6), DIMENSION(:), POINTER :: CSV=>NULL()
00054 !$OMP THREADPRIVATE(CSV)
00055 INTEGER, POINTER :: NSV_CHSBEG=>NULL(), NSV_CHSEND=>NULL()
00056 !$OMP THREADPRIVATE(NSV_CHSBEG, NSV_CHSEND)
00057 INTEGER, POINTER :: NBEQ=>NULL()
00058 !$OMP THREADPRIVATE(NBEQ)
00059 INTEGER, POINTER :: NSV_DSTBEG=>NULL(), NSV_DSTEND=>NULL()
00060 !$OMP THREADPRIVATE(NSV_DSTBEG, NSV_DSTEND)
00061 INTEGER, POINTER :: NDSTEQ=>NULL()
00062 !$OMP THREADPRIVATE(NDSTEQ)
00063 INTEGER, POINTER :: NSV_SLTBEG=>NULL(), NSV_SLTEND=>NULL()
00064 !$OMP THREADPRIVATE(NSV_SLTBEG, NSV_SLTEND)
00065 INTEGER, POINTER :: NSLTEQ=>NULL()
00066 !$OMP THREADPRIVATE(NSLTEQ)
00067 INTEGER, POINTER :: NSV_AERBEG=>NULL(), NSV_AEREND=>NULL()
00068 !$OMP THREADPRIVATE(NSV_AERBEG, NSV_AEREND)
00069 INTEGER, POINTER :: NAEREQ=>NULL()
00070 !$OMP THREADPRIVATE(NAEREQ)
00071 
00072 CONTAINS
00073 
00074 SUBROUTINE SV_GOTO_MODEL(KFROM, KTO, LKFROM)
00075 LOGICAL, INTENT(IN) :: LKFROM
00076 INTEGER, INTENT(IN) :: KFROM, KTO
00077 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00078 !
00079 ! Save current state for allocated arrays
00080 IF (LKFROM) THEN
00081 SV_MODEL(KFROM)%CSV=>CSV
00082 ENDIF
00083 !
00084 ! Current model is set to model KTO
00085 IF (LHOOK) CALL DR_HOOK('MODD_SV_N:SV_GOTO_MODEL',0,ZHOOK_HANDLE)
00086 CSV=>SV_MODEL(KTO)%CSV
00087 NSV_CHSBEG=>SV_MODEL(KTO)%NSV_CHSBEG
00088 NSV_CHSEND=>SV_MODEL(KTO)%NSV_CHSEND
00089 NBEQ=>SV_MODEL(KTO)%NBEQ
00090 NSV_DSTBEG=>SV_MODEL(KTO)%NSV_DSTBEG
00091 NSV_DSTEND=>SV_MODEL(KTO)%NSV_DSTEND
00092 NDSTEQ=>SV_MODEL(KTO)%NDSTEQ
00093 NSV_SLTBEG=>SV_MODEL(KTO)%NSV_SLTBEG
00094 NSV_SLTEND=>SV_MODEL(KTO)%NSV_SLTEND
00095 NSLTEQ=>SV_MODEL(KTO)%NSLTEQ
00096 NSV_AERBEG=>SV_MODEL(KTO)%NSV_AERBEG
00097 NSV_AEREND=>SV_MODEL(KTO)%NSV_AEREND
00098 NAEREQ=>SV_MODEL(KTO)%NAEREQ
00099 IF (LHOOK) CALL DR_HOOK('MODD_SV_N:SV_GOTO_MODEL',1,ZHOOK_HANDLE)
00100 
00101 END SUBROUTINE SV_GOTO_MODEL
00102 
00103 SUBROUTINE SV_ALLOC(KMODEL)
00104 INTEGER, INTENT(IN) :: KMODEL
00105 INTEGER :: J
00106 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00107 IF (LHOOK) CALL DR_HOOK("MODD_SV_N:SV_ALLOC",0,ZHOOK_HANDLE)
00108 ALLOCATE(SV_MODEL(KMODEL))
00109 DO J=1,KMODEL
00110   NULLIFY(SV_MODEL(J)%CSV)
00111 ENDDO
00112 SV_MODEL(:)%NBEQ=0
00113 SV_MODEL(:)%NSV_CHSBEG=0
00114 SV_MODEL(:)%NSV_CHSEND=0
00115 SV_MODEL(:)%NSV_DSTBEG=0
00116 SV_MODEL(:)%NSV_DSTEND=0
00117 SV_MODEL(:)%NDSTEQ=0
00118 SV_MODEL(:)%NSV_SLTBEG=0
00119 SV_MODEL(:)%NSV_SLTEND=0
00120 SV_MODEL(:)%NSLTEQ=0
00121 SV_MODEL(:)%NSV_AERBEG=0
00122 SV_MODEL(:)%NSV_AEREND=0
00123 SV_MODEL(:)%NAEREQ=0
00124 IF (LHOOK) CALL DR_HOOK("MODD_SV_N:SV_ALLOC",1,ZHOOK_HANDLE)
00125 END SUBROUTINE SV_ALLOC
00126 
00127 SUBROUTINE SV_DEALLO
00128 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00129 IF (LHOOK) CALL DR_HOOK("MODD_SV_N:SV_DEALLO",0,ZHOOK_HANDLE)
00130 IF (ALLOCATED(SV_MODEL)) DEALLOCATE(SV_MODEL)
00131 IF (LHOOK) CALL DR_HOOK("MODD_SV_N:SV_DEALLO",1,ZHOOK_HANDLE)
00132 END SUBROUTINE SV_DEALLO
00133 
00134 END MODULE MODD_SV_n