SURFEX v8.1
General documentation of Surfex
init_chemicaln.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 !#############################################################
6 SUBROUTINE init_chemical_n(KLUOUT, KSV, HSV, SV, HCH_NAMES, HAER_NAMES, &
7  HDSTNAMES, HSLTNAMES )
8 !#############################################################
9 !
10 !!**** *INIT_CHEMICAL_n* - routine to initialize CHEMICAL SPECIES
11 !!
12 !! PURPOSE
13 !! -------
14 !!
15 !!** METHOD
16 !! ------
17 !!
18 !! EXTERNAL
19 !! --------
20 !!
21 !!
22 !! IMPLICIT ARGUMENTS
23 !! ------------------
24 !!
25 !! REFERENCE
26 !! ---------
27 !!
28 !!
29 !! AUTHOR
30 !! ------
31 !! V. Masson *Meteo France*
32 !!
33 !! MODIFICATIONS
34 !! -------------
35 !! Original 08/2011
36 !!
37 !-------------------------------------------------------------------------------
38 !
39 !* 0. DECLARATIONS
40 ! ------------
41 !
42 USE modd_sv_n, ONLY : sv_t
43 !
47 !
48 USE modi_ch_init_names
49 USE modi_dslt_init_names
50 USE modi_dslt_init_modes
51 !
52 USE yomhook ,ONLY : lhook, dr_hook
53 USE parkind1 ,ONLY : jprb
54 !
55 IMPLICIT NONE
56 !
57 !* 0.1 Declarations of arguments
58 ! -------------------------
59 !
60 INTEGER, INTENT(IN) :: KLUOUT
61 INTEGER, INTENT(IN) :: KSV ! number of scalars
62  CHARACTER(LEN=6), DIMENSION(KSV), INTENT(IN) :: HSV ! name of all scalar variables
63  TYPE(sv_t), INTENT(INOUT) :: SV
64  CHARACTER(LEN=6), DIMENSION(:), POINTER :: HCH_NAMES
65  CHARACTER(LEN=6), DIMENSION(:), POINTER :: HAER_NAMES
66 
67  CHARACTER(LEN=6), DIMENSION(:), POINTER, OPTIONAL :: HDSTNAMES
68  CHARACTER(LEN=6), DIMENSION(:), POINTER, OPTIONAL :: HSLTNAMES
69 !
70 !* 0.2 Declarations of local variables
71 ! -------------------------------
72 !
73 REAL(KIND=JPRB) :: ZHOOK_HANDLE
74 !
75 !-------------------------------------------------------------------------------
76 !
77 ! Initialisation for IO
78 !
79 !
80 IF (lhook) CALL dr_hook('INIT_CHEMICAL_n',0,zhook_handle)
81 !
82 IF (ksv /= 0) THEN
83  !
84  ALLOCATE(sv%CSV(ksv))
85  CALL ch_init_names(kluout, hsv, sv, lvarsigi, lvarsigj )
86 
87  IF (sv%NBEQ > 0 ) THEN
88  ALLOCATE(hch_names(sv%NBEQ))
89  hch_names(:) = sv%CSV(sv%NSV_CHSBEG:sv%NSV_CHSEND)
90  ELSE
91  ALLOCATE(hch_names(0))
92  END IF
93 
94  IF (sv%NAEREQ > 0 ) THEN
95  ALLOCATE(haer_names(sv%NAEREQ))
96  haer_names(:) = sv%CSV(sv%NSV_AERBEG:sv%NSV_AEREND)
97  ELSE
98  ALLOCATE(haer_names(0))
99  END IF
100  !
101  CALL dslt_init_names( &
102  kluout, &!I [idx] index of writing unit
103  'DSTM', &
104  hsv, &!I [char] list of scalar variables
105  jpmode_dst, &
106  sv%NDSTEQ, &!O [nbr] number of dust related tracers
107  sv%NSV_DSTBEG, &!O [idx] first dust related scalar variable
108  sv%NSV_DSTEND, &!O [idx] last dust related scalar variable
109  lvarsig_dst, &!O type of standard deviation (fixed or variable)
110  lrgfix_dst &!O type of mean radius (fixed or variable)
111  )
112 
113  IF (PRESENT(hdstnames)) THEN
114  IF (sv%NDSTEQ >=1) THEN
115  CALL dslt_init_modes( &
116  sv%NDSTEQ, &!I [nbr] number of dust related variables in scalar list
117  sv%NSV_DSTBEG, &!I [idx] index of first dust related variable in scalar list
118  sv%NSV_DSTEND, &!I [idx] index of last dust related variable in scalar list
119  lvarsig_dst, &!I type of standard deviation (fixed or variable)
120  lrgfix_dst, &!O type of mean radius (fixed or variable)
121  ndst_mdebeg, &!O [idx] index of mass for first mode in scalar list
122  ndstmde &!O [nbr] number of modes to be transported
123  )
124 
125  IF(.NOT. ASSOCIATED(hdstnames)) ALLOCATE (hdstnames(sv%NDSTEQ))
126  hdstnames(:) = sv%CSV(sv%NSV_DSTBEG:sv%NSV_DSTEND)
127  ENDIF
128  ENDIF
129 
130 
131  CALL dslt_init_names( &
132  kluout, &!I [idx] index of writing unit
133  'SLTM', &
134  hsv, &!I [char] list of scalar variables
135  jpmode_slt, &
136  sv%NSLTEQ, &!O [nbr] number of sea salt related tracers
137  sv%NSV_SLTBEG, &!O [idx] first sea salt related scalar variable
138  sv%NSV_SLTEND, &!O [idx] last sea salt related scalar variable
139  lvarsig_slt, &!O type of standard deviation (fixed or variable)
140  lrgfix_slt &!O type of mean radius (fixed or variable)
141  )
142 
143  IF (PRESENT(hsltnames)) THEN
144  IF (sv%NSLTEQ >=1) THEN
145  CALL dslt_init_modes( &
146  sv%NSLTEQ, &!I [nbr] number of sea salt related variables in scalar list
147  sv%NSV_SLTBEG, &!I [idx] index of first sea salt related variable in scalar list
148  sv%NSV_SLTEND, &!I [idx] index of last sea salt related variable in scalar list
149  lvarsig_slt, &!I type of standard deviation (fixed or variable)
150  lrgfix_slt, &!O type of mean radius (fixed or variable)
151  nslt_mdebeg, &!O [idx] index of mass for first mode in scalar list
152  nsltmde &!O [nbr] number of modes to be transported
153  )
154  IF(.NOT. ASSOCIATED(hsltnames)) ALLOCATE (hsltnames(sv%NSLTEQ))
155  hsltnames(:) = sv%CSV(sv%NSV_SLTBEG:sv%NSV_SLTEND)
156  ENDIF
157  END IF
158 
159 ELSE
160  ALLOCATE(sv%CSV (0))
161  IF (PRESENT(hdstnames)) ALLOCATE(hdstnames(0))
162  IF (PRESENT(hsltnames)) ALLOCATE(hsltnames(0))
163 ENDIF
164 !
165 IF (lhook) CALL dr_hook('INIT_CHEMICAL_n',1,zhook_handle)
166 !
167 END SUBROUTINE init_chemical_n
subroutine init_chemical_n(KLUOUT, KSV, HSV, SV, HCH_NAMES, HAER_NAMES, HDSTNAMES, HSLTNAMES)
subroutine dslt_init_modes(KEQ, KSV_BEG, KSV_END, OVARSIG, ORGFIX, KMDEBEG, KMDE)
subroutine ch_init_names(KLUOUT, HSV, SV, OVARSIGI, OVARSIGJ)
integer ndst_mdebeg
logical lvarsig_dst
integer jpmode_slt
logical lrgfix_dst
integer, parameter jprb
Definition: parkind1.F90:32
logical lvarsig_slt
subroutine dslt_init_names(KLUOUT, HRC1, HSV, KPMODE, KEQ, KSV_BEG, KSV_END, OVARSIG, ORGFIX)
logical lhook
Definition: yomhook.F90:15
integer jpmode_dst
integer nslt_mdebeg
logical lrgfix_slt