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