- Timestamp:
- Mar 17, 2025, 6:18:15 PM (3 months ago)
- Location:
- trunk/LMDZ.GENERIC
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/LMDZ.GENERIC/changelog.txt ¶
r3663 r3693 2029 2029 We choose the value recommended by the 2019 revision of the SI. 2030 2030 R=8.314463 J.K-1.mol-1 and NA=6.022141e23 mol-1. 2031 2032 == 17/03/2025 == EM 2033 Minor corrections: 2034 - about OpenMP in rad_common_h.F90 : (unclosed bracket in 2035 the THREADPRIVATE statement) 2036 - in interpolate_continuum.F90 : "filename" character string size 2037 must be specified as '*' (i.e. variable) and not a fixed number 2038 Took the opportunity to also clean-up interpolate_continuum.F90 by 2039 making it a module, adding some intent() statements, specifying 2040 why saved variables are not threadprivate, get rid of useless "return" 2041 statement at the end of routines, etc. -
TabularUnified trunk/LMDZ.GENERIC/libf/phystd/interpolate_continuum.F90 ¶
r3641 r3693 1 module interpolate_continuum_mod 2 3 implicit none 4 5 contains 1 6 2 7 subroutine interpolate_continuum(filename,igas_X,igas_Y,c_WN,ind_WN,temp,pres_X,pres_Y,abs_coef,firstcall) … … 30 35 31 36 ! input 32 integer ind_WN! wavenumber index33 integer igas_X! index of molecule X34 integer igas_Y! index of molecule Y35 double precision temp! temperature (Kelvin)36 double precision pres_X! partial pressure of molecule X (Pascals)37 double precision pres_Y! partial pressure of molecule Y (Pascals)38 character *200 filename! name of the lookup table39 character *2 c_WN! wavelength chanel: infrared (IR) or visible (VI)40 logical firstcall37 integer,intent(in) :: ind_WN ! wavenumber index 38 integer,intent(in) :: igas_X ! index of molecule X 39 integer,intent(in) :: igas_Y ! index of molecule Y 40 double precision,intent(in) :: temp ! temperature (Kelvin) 41 double precision,intent(in) :: pres_X ! partial pressure of molecule X (Pascals) 42 double precision,intent(in) :: pres_Y ! partial pressure of molecule Y (Pascals) 43 character(len=*),intent(in) :: filename ! name of the lookup table 44 character(len=2),intent(in) :: c_WN ! wavelength chanel: infrared (IR) or visible (VI) 45 logical,intent(in) :: firstcall 41 46 42 47 ! output 43 double precision abs_coef! absorption coefficient (m^-1)48 double precision,intent(out) :: abs_coef ! absorption coefficient (m^-1) 44 49 45 50 ! intermediate variables … … 64 69 65 70 ! Temperature array, continuum absorption grid for the pair N2-N2 66 integer num_T_N2N2 67 double precision, dimension(:), allocatable :: temp_arr_N2N2 68 double precision, dimension(:,:), allocatable :: abs_arr_N2N2_IR 69 double precision, dimension(:,:), allocatable :: abs_arr_N2N2_VI 70 save num_T_N2N2,temp_arr_N2N2,abs_arr_N2N2_IR,abs_arr_N2N2_VI !read by master 71 integer,save :: num_T_N2N2 72 double precision,save,dimension(:),allocatable :: temp_arr_N2N2 73 double precision,save,dimension(:,:),allocatable :: abs_arr_N2N2_IR 74 double precision,save,dimension(:,:),allocatable :: abs_arr_N2N2_VI 75 ! None of these saved variables are THREADPRIVATE because read by master 76 ! and then only accessed but never modified and thus can be shared 71 77 72 78 ! Temperature array, continuum absorption grid for the pair O2-O2 73 integer num_T_O2O2 74 double precision, dimension(:), allocatable :: temp_arr_O2O2 75 double precision, dimension(:,:), allocatable :: abs_arr_O2O2_IR 76 double precision, dimension(:,:), allocatable :: abs_arr_O2O2_VI 77 save num_T_O2O2,temp_arr_O2O2,abs_arr_O2O2_IR,abs_arr_O2O2_VI !read by master 79 integer,save :: num_T_O2O2 80 double precision,save,dimension(:),allocatable :: temp_arr_O2O2 81 double precision,save,dimension(:,:),allocatable :: abs_arr_O2O2_IR 82 double precision,save,dimension(:,:),allocatable :: abs_arr_O2O2_VI 83 ! None of these saved variables are THREADPRIVATE because read by master 84 ! and then only accessed but never modified and thus can be shared 78 85 79 86 ! Temperature array, continuum absorption grid for the pair H2-H2 80 integer num_T_H2H2 81 double precision, dimension(:), allocatable :: temp_arr_H2H2 82 double precision, dimension(:,:), allocatable :: abs_arr_H2H2_IR 83 double precision, dimension(:,:), allocatable :: abs_arr_H2H2_VI 84 save num_T_H2H2,temp_arr_H2H2,abs_arr_H2H2_IR,abs_arr_H2H2_VI !read by master 87 integer,save :: num_T_H2H2 88 double precision,save,dimension(:),allocatable :: temp_arr_H2H2 89 double precision,save,dimension(:,:),allocatable :: abs_arr_H2H2_IR 90 double precision,save,dimension(:,:),allocatable :: abs_arr_H2H2_VI 91 ! None of these saved variables are THREADPRIVATE because read by master 92 ! and then only accessed but never modified and thus can be shared 85 93 86 94 ! Temperature array, continuum absorption grid for the pair CO2-CO2 87 integer num_T_CO2CO2 88 double precision, dimension(:), allocatable :: temp_arr_CO2CO2 89 double precision, dimension(:,:), allocatable :: abs_arr_CO2CO2_IR 90 double precision, dimension(:,:), allocatable :: abs_arr_CO2CO2_VI 91 save num_T_CO2CO2,temp_arr_CO2CO2,abs_arr_CO2CO2_IR,abs_arr_CO2CO2_VI !read by master 95 integer,save :: num_T_CO2CO2 96 double precision,save,dimension(:),allocatable :: temp_arr_CO2CO2 97 double precision,save,dimension(:,:),allocatable :: abs_arr_CO2CO2_IR 98 double precision,save,dimension(:,:),allocatable :: abs_arr_CO2CO2_VI 99 ! None of these saved variables are THREADPRIVATE because read by master 100 ! and then only accessed but never modified and thus can be shared 92 101 93 102 ! Temperature array, continuum absorption grid for the pair CH4-CH4 94 integer num_T_CH4CH4 95 double precision, dimension(:), allocatable :: temp_arr_CH4CH4 96 double precision, dimension(:,:), allocatable :: abs_arr_CH4CH4_IR 97 double precision, dimension(:,:), allocatable :: abs_arr_CH4CH4_VI 98 save num_T_CH4CH4,temp_arr_CH4CH4,abs_arr_CH4CH4_IR,abs_arr_CH4CH4_VI !read by master 103 integer,save :: num_T_CH4CH4 104 double precision,save,dimension(:),allocatable :: temp_arr_CH4CH4 105 double precision,save,dimension(:,:),allocatable :: abs_arr_CH4CH4_IR 106 double precision,save,dimension(:,:),allocatable :: abs_arr_CH4CH4_VI 107 ! None of these saved variables are THREADPRIVATE because read by master 108 ! and then only accessed but never modified and thus can be shared 99 109 100 110 ! Temperature array, continuum absorption grid for the pair H2O-H2O 101 integer num_T_H2OH2O 102 double precision, dimension(:), allocatable :: temp_arr_H2OH2O 103 double precision, dimension(:,:), allocatable :: abs_arr_H2OH2O_IR 104 double precision, dimension(:,:), allocatable :: abs_arr_H2OH2O_VI 105 save num_T_H2OH2O,temp_arr_H2OH2O,abs_arr_H2OH2O_IR,abs_arr_H2OH2O_VI !read by master 111 integer,save :: num_T_H2OH2O 112 double precision,save,dimension(:),allocatable :: temp_arr_H2OH2O 113 double precision,save,dimension(:,:),allocatable :: abs_arr_H2OH2O_IR 114 double precision,save,dimension(:,:),allocatable :: abs_arr_H2OH2O_VI 115 ! None of these saved variables are THREADPRIVATE because read by master 116 ! and then only accessed but never modified and thus can be shared 106 117 107 118 ! Temperature array, continuum absorption grid for the pair H2-He 108 integer num_T_H2He 109 double precision, dimension(:), allocatable :: temp_arr_H2He 110 double precision, dimension(:,:), allocatable :: abs_arr_H2He_IR 111 double precision, dimension(:,:), allocatable :: abs_arr_H2He_VI 112 save num_T_H2He,temp_arr_H2He,abs_arr_H2He_IR,abs_arr_H2He_VI !read by master 119 integer,save :: num_T_H2He 120 double precision,save,dimension(:),allocatable :: temp_arr_H2He 121 double precision,save,dimension(:,:),allocatable :: abs_arr_H2He_IR 122 double precision,save,dimension(:,:),allocatable :: abs_arr_H2He_VI 123 ! None of these saved variables are THREADPRIVATE because read by master 124 ! and then only accessed but never modified and thus can be shared 113 125 114 126 ! Temperature array, continuum absorption grid for the pair H2-CH4 115 integer num_T_H2CH4 116 double precision, dimension(:), allocatable :: temp_arr_H2CH4 117 double precision, dimension(:,:), allocatable :: abs_arr_H2CH4_IR 118 double precision, dimension(:,:), allocatable :: abs_arr_H2CH4_VI 119 save num_T_H2CH4,temp_arr_H2CH4,abs_arr_H2CH4_IR,abs_arr_H2CH4_VI !read by master 127 integer,save :: num_T_H2CH4 128 double precision,save,dimension(:),allocatable :: temp_arr_H2CH4 129 double precision,save,dimension(:,:),allocatable :: abs_arr_H2CH4_IR 130 double precision,save,dimension(:,:),allocatable :: abs_arr_H2CH4_VI 131 ! None of these saved variables are THREADPRIVATE because read by master 132 ! and then only accessed but never modified and thus can be shared 120 133 121 134 ! Temperature array, continuum absorption grid for the pair CO2-H2 122 integer num_T_CO2H2 123 double precision, dimension(:), allocatable :: temp_arr_CO2H2 124 double precision, dimension(:,:), allocatable :: abs_arr_CO2H2_IR 125 double precision, dimension(:,:), allocatable :: abs_arr_CO2H2_VI 126 save num_T_CO2H2,temp_arr_CO2H2,abs_arr_CO2H2_IR,abs_arr_CO2H2_VI !read by master 135 integer,save :: num_T_CO2H2 136 double precision,save,dimension(:),allocatable :: temp_arr_CO2H2 137 double precision,save,dimension(:,:),allocatable :: abs_arr_CO2H2_IR 138 double precision,save,dimension(:,:),allocatable :: abs_arr_CO2H2_VI 139 ! None of these saved variables are THREADPRIVATE because read by master 140 ! and then only accessed but never modified and thus can be shared 127 141 128 142 ! Temperature array, continuum absorption grid for the pair CO2-CH4 129 integer num_T_CO2CH4 130 double precision, dimension(:), allocatable :: temp_arr_CO2CH4 131 double precision, dimension(:,:), allocatable :: abs_arr_CO2CH4_IR 132 double precision, dimension(:,:), allocatable :: abs_arr_CO2CH4_VI 133 save num_T_CO2CH4,temp_arr_CO2CH4,abs_arr_CO2CH4_IR,abs_arr_CO2CH4_VI !read by master 143 integer,save :: num_T_CO2CH4 144 double precision,save,dimension(:),allocatable :: temp_arr_CO2CH4 145 double precision,save,dimension(:,:),allocatable :: abs_arr_CO2CH4_IR 146 double precision,save,dimension(:,:),allocatable :: abs_arr_CO2CH4_VI 147 ! None of these saved variables are THREADPRIVATE because read by master 148 ! and then only accessed but never modified and thus can be shared 134 149 135 150 ! Temperature array, continuum absorption grid for the pair N2-H2 136 integer num_T_N2H2 137 double precision, dimension(:), allocatable :: temp_arr_N2H2 138 double precision, dimension(:,:), allocatable :: abs_arr_N2H2_IR 139 double precision, dimension(:,:), allocatable :: abs_arr_N2H2_VI 140 save num_T_N2H2,temp_arr_N2H2,abs_arr_N2H2_IR,abs_arr_N2H2_VI !read by master 151 integer,save :: num_T_N2H2 152 double precision,save,dimension(:),allocatable :: temp_arr_N2H2 153 double precision,save,dimension(:,:),allocatable :: abs_arr_N2H2_IR 154 double precision,save,dimension(:,:),allocatable :: abs_arr_N2H2_VI 155 ! None of these saved variables are THREADPRIVATE because read by master 156 ! and then only accessed but never modified and thus can be shared 141 157 142 158 ! Temperature array, continuum absorption grid for the pair N2-CH4 143 integer num_T_N2CH4 144 double precision, dimension(:), allocatable :: temp_arr_N2CH4 145 double precision, dimension(:,:), allocatable :: abs_arr_N2CH4_IR 146 double precision, dimension(:,:), allocatable :: abs_arr_N2CH4_VI 147 save num_T_N2CH4,temp_arr_N2CH4,abs_arr_N2CH4_IR,abs_arr_N2CH4_VI !read by master 159 integer,save :: num_T_N2CH4 160 double precision,save,dimension(:),allocatable :: temp_arr_N2CH4 161 double precision,save,dimension(:,:),allocatable :: abs_arr_N2CH4_IR 162 double precision,save,dimension(:,:),allocatable :: abs_arr_N2CH4_VI 163 ! None of these saved variables are THREADPRIVATE because read by master 164 ! and then only accessed but never modified and thus can be shared 148 165 149 166 ! Temperature array, continuum absorption grid for the pair CO2-O2 150 integer num_T_CO2O2 151 double precision, dimension(:), allocatable :: temp_arr_CO2O2 152 double precision, dimension(:,:), allocatable :: abs_arr_CO2O2_IR 153 double precision, dimension(:,:), allocatable :: abs_arr_CO2O2_VI 154 save num_T_CO2O2,temp_arr_CO2O2,abs_arr_CO2O2_IR,abs_arr_CO2O2_VI !read by master 167 integer,save :: num_T_CO2O2 168 double precision,save,dimension(:),allocatable :: temp_arr_CO2O2 169 double precision,save,dimension(:,:),allocatable :: abs_arr_CO2O2_IR 170 double precision,save,dimension(:,:),allocatable :: abs_arr_CO2O2_VI 171 ! None of these saved variables are THREADPRIVATE because read by master 172 ! and then only accessed but never modified and thus can be shared 155 173 156 174 ! Temperature array, continuum absorption grid for the pair N2-O2 157 integer num_T_N2O2 158 double precision, dimension(:), allocatable :: temp_arr_N2O2 159 double precision, dimension(:,:), allocatable :: abs_arr_N2O2_IR 160 double precision, dimension(:,:), allocatable :: abs_arr_N2O2_VI 161 save num_T_N2O2,temp_arr_N2O2,abs_arr_N2O2_IR,abs_arr_N2O2_VI !read by master 175 integer,save :: num_T_N2O2 176 double precision,save,dimension(:), allocatable :: temp_arr_N2O2 177 double precision,save,dimension(:,:), allocatable :: abs_arr_N2O2_IR 178 double precision,save,dimension(:,:), allocatable :: abs_arr_N2O2_VI 179 ! None of these saved variables are THREADPRIVATE because read by master 180 ! and then only accessed but never modified and thus can be shared 162 181 163 182 ! Temperature array, continuum absorption grid for the pair H2O-N2 164 integer num_T_H2ON2 165 double precision, dimension(:), allocatable :: temp_arr_H2ON2 166 double precision, dimension(:,:), allocatable :: abs_arr_H2ON2_IR 167 double precision, dimension(:,:), allocatable :: abs_arr_H2ON2_VI 168 save num_T_H2ON2,temp_arr_H2ON2,abs_arr_H2ON2_IR,abs_arr_H2ON2_VI !read by master 183 integer,save :: num_T_H2ON2 184 double precision,save,dimension(:),allocatable :: temp_arr_H2ON2 185 double precision,save,dimension(:,:),allocatable :: abs_arr_H2ON2_IR 186 double precision,save,dimension(:,:),allocatable :: abs_arr_H2ON2_VI 187 ! None of these saved variables are THREADPRIVATE because read by master 188 ! and then only accessed but never modified and thus can be shared 169 189 170 190 ! Temperature array, continuum absorption grid for the pair H2O-O2 171 integer num_T_H2OO2 172 double precision, dimension(:), allocatable :: temp_arr_H2OO2 173 double precision, dimension(:,:), allocatable :: abs_arr_H2OO2_IR 174 double precision, dimension(:,:), allocatable :: abs_arr_H2OO2_VI 175 save num_T_H2OO2,temp_arr_H2OO2,abs_arr_H2OO2_IR,abs_arr_H2OO2_VI !read by master 191 integer,save :: num_T_H2OO2 192 double precision,save,dimension(:),allocatable :: temp_arr_H2OO2 193 double precision,save,dimension(:,:),allocatable :: abs_arr_H2OO2_IR 194 double precision,save,dimension(:,:),allocatable :: abs_arr_H2OO2_VI 195 ! None of these saved variables are THREADPRIVATE because read by master 196 ! and then only accessed but never modified and thus can be shared 176 197 177 198 ! Temperature array, continuum absorption grid for the pair H2O-CO2 178 integer num_T_H2OCO2179 double precision, dimension(:),allocatable :: temp_arr_H2OCO2180 double precision, dimension(:,:),allocatable :: abs_arr_H2OCO2_IR181 double precision, dimension(:,:),allocatable :: abs_arr_H2OCO2_VI182 save num_T_H2OCO2,temp_arr_H2OCO2,abs_arr_H2OCO2_IR,abs_arr_H2OCO2_VI !read by master183 199 integer,save :: num_T_H2OCO2 200 double precision,save,dimension(:),allocatable :: temp_arr_H2OCO2 201 double precision,save,dimension(:,:),allocatable :: abs_arr_H2OCO2_IR 202 double precision,save,dimension(:,:),allocatable :: abs_arr_H2OCO2_VI 203 ! None of these saved variables are THREADPRIVATE because read by master 204 ! and then only accessed but never modified and thus can be shared 184 205 185 206 … … 203 224 write(*,*) 'https://web.lmd.jussieu.fr/~lmdz/planets/LMDZ.GENERIC/datagcm/continuum_data/' 204 225 endif 205 call abort 226 call abort_physic("interpolate_continuum","missing input file",1) 206 227 endif 207 228 … … 235 256 close(33) 236 257 237 if(.not.allocated(temp_arr))allocate(temp_arr(num_T))238 if(.not.allocated(wn_arr))allocate(wn_arr(num_wn))239 if(.not.allocated(abs_arr))allocate(abs_arr(num_wn,num_T))258 allocate(temp_arr(num_T)) 259 allocate(wn_arr(num_wn)) 260 allocate(abs_arr(num_wn,num_T)) 240 261 241 262 ! We now open and read the file a second time to extract the temperature array, wavenumber array and continuum absorption data … … 273 294 if ((igas_X .eq. igas_CO2) .and. (igas_Y .eq. igas_CO2)) then 274 295 num_T_CO2CO2=num_T 275 if(.not.allocated(temp_arr_CO2CO2))allocate(temp_arr_CO2CO2(num_T_CO2CO2))276 if(.not.allocated(abs_arr_CO2CO2_VI))allocate(abs_arr_CO2CO2_VI(L_NSPECTV,num_T_CO2CO2))277 if(.not.allocated(abs_arr_CO2CO2_IR))allocate(abs_arr_CO2CO2_IR(L_NSPECTI,num_T_CO2CO2))296 allocate(temp_arr_CO2CO2(num_T_CO2CO2)) 297 allocate(abs_arr_CO2CO2_VI(L_NSPECTV,num_T_CO2CO2)) 298 allocate(abs_arr_CO2CO2_IR(L_NSPECTI,num_T_CO2CO2)) 278 299 temp_arr_CO2CO2(:)=temp_arr(:) 279 300 abs_arr_CO2CO2_VI(:,:)=0. … … 282 303 elseif ((igas_X .eq. igas_N2) .and. (igas_Y .eq. igas_N2)) then 283 304 num_T_N2N2=num_T 284 if(.not.allocated(temp_arr_N2N2))allocate(temp_arr_N2N2(num_T_N2N2))285 if(.not.allocated(abs_arr_N2N2_VI))allocate(abs_arr_N2N2_VI(L_NSPECTV,num_T_N2N2))286 if(.not.allocated(abs_arr_N2N2_IR))allocate(abs_arr_N2N2_IR(L_NSPECTI,num_T_N2N2))305 allocate(temp_arr_N2N2(num_T_N2N2)) 306 allocate(abs_arr_N2N2_VI(L_NSPECTV,num_T_N2N2)) 307 allocate(abs_arr_N2N2_IR(L_NSPECTI,num_T_N2N2)) 287 308 temp_arr_N2N2(:)=temp_arr(:) 288 309 abs_arr_N2N2_VI(:,:)=0. … … 291 312 elseif ((igas_X .eq. igas_O2) .and. (igas_Y .eq. igas_O2)) then 292 313 num_T_O2O2=num_T 293 if(.not.allocated(temp_arr_O2O2))allocate(temp_arr_O2O2(num_T_O2O2))294 if(.not.allocated(abs_arr_O2O2_VI))allocate(abs_arr_O2O2_VI(L_NSPECTV,num_T_O2O2))295 if(.not.allocated(abs_arr_O2O2_IR))allocate(abs_arr_O2O2_IR(L_NSPECTI,num_T_O2O2))314 allocate(temp_arr_O2O2(num_T_O2O2)) 315 allocate(abs_arr_O2O2_VI(L_NSPECTV,num_T_O2O2)) 316 allocate(abs_arr_O2O2_IR(L_NSPECTI,num_T_O2O2)) 296 317 temp_arr_O2O2(:)=temp_arr(:) 297 318 abs_arr_O2O2_VI(:,:)=0. … … 300 321 elseif ((igas_X .eq. igas_CH4) .and. (igas_Y .eq. igas_CH4)) then 301 322 num_T_CH4CH4=num_T 302 if(.not.allocated(temp_arr_CH4CH4))allocate(temp_arr_CH4CH4(num_T_CH4CH4))303 if(.not.allocated(abs_arr_CH4CH4_VI))allocate(abs_arr_CH4CH4_VI(L_NSPECTV,num_T_CH4CH4))304 if(.not.allocated(abs_arr_CH4CH4_IR))allocate(abs_arr_CH4CH4_IR(L_NSPECTI,num_T_CH4CH4))323 allocate(temp_arr_CH4CH4(num_T_CH4CH4)) 324 allocate(abs_arr_CH4CH4_VI(L_NSPECTV,num_T_CH4CH4)) 325 allocate(abs_arr_CH4CH4_IR(L_NSPECTI,num_T_CH4CH4)) 305 326 temp_arr_CH4CH4(:)=temp_arr(:) 306 327 abs_arr_CH4CH4_VI(:,:)=0. … … 309 330 elseif ((igas_X .eq. igas_H2) .and. (igas_Y .eq. igas_H2)) then 310 331 num_T_H2H2=num_T 311 if(.not.allocated(temp_arr_H2H2))allocate(temp_arr_H2H2(num_T_H2H2))312 if(.not.allocated(abs_arr_H2H2_VI))allocate(abs_arr_H2H2_VI(L_NSPECTV,num_T_H2H2))313 if(.not.allocated(abs_arr_H2H2_IR))allocate(abs_arr_H2H2_IR(L_NSPECTI,num_T_H2H2))332 allocate(temp_arr_H2H2(num_T_H2H2)) 333 allocate(abs_arr_H2H2_VI(L_NSPECTV,num_T_H2H2)) 334 allocate(abs_arr_H2H2_IR(L_NSPECTI,num_T_H2H2)) 314 335 temp_arr_H2H2(:)=temp_arr(:) 315 336 abs_arr_H2H2_VI(:,:)=0. … … 318 339 elseif ((igas_X .eq. igas_H2O) .and. (igas_Y .eq. igas_H2O)) then 319 340 num_T_H2OH2O=num_T 320 if(.not.allocated(temp_arr_H2OH2O))allocate(temp_arr_H2OH2O(num_T_H2OH2O))321 if(.not.allocated(abs_arr_H2OH2O_VI))allocate(abs_arr_H2OH2O_VI(L_NSPECTV,num_T_H2OH2O))322 if(.not.allocated(abs_arr_H2OH2O_IR))allocate(abs_arr_H2OH2O_IR(L_NSPECTI,num_T_H2OH2O))341 allocate(temp_arr_H2OH2O(num_T_H2OH2O)) 342 allocate(abs_arr_H2OH2O_VI(L_NSPECTV,num_T_H2OH2O)) 343 allocate(abs_arr_H2OH2O_IR(L_NSPECTI,num_T_H2OH2O)) 323 344 temp_arr_H2OH2O(:)=temp_arr(:) 324 345 abs_arr_H2OH2O_VI(:,:)=0. … … 327 348 elseif ((igas_X .eq. igas_N2) .and. (igas_Y .eq. igas_H2)) then 328 349 num_T_N2H2=num_T 329 if(.not.allocated(temp_arr_N2H2))allocate(temp_arr_N2H2(num_T_N2H2))330 if(.not.allocated(abs_arr_N2H2_VI))allocate(abs_arr_N2H2_VI(L_NSPECTV,num_T_N2H2))331 if(.not.allocated(abs_arr_N2H2_IR))allocate(abs_arr_N2H2_IR(L_NSPECTI,num_T_N2H2))350 allocate(temp_arr_N2H2(num_T_N2H2)) 351 allocate(abs_arr_N2H2_VI(L_NSPECTV,num_T_N2H2)) 352 allocate(abs_arr_N2H2_IR(L_NSPECTI,num_T_N2H2)) 332 353 temp_arr_N2H2(:)=temp_arr(:) 333 354 abs_arr_N2H2_VI(:,:)=0. … … 336 357 elseif ((igas_X .eq. igas_N2) .and. (igas_Y .eq. igas_O2)) then 337 358 num_T_N2O2=num_T 338 if(.not.allocated(temp_arr_N2O2))allocate(temp_arr_N2O2(num_T_N2O2))339 if(.not.allocated(abs_arr_N2O2_VI))allocate(abs_arr_N2O2_VI(L_NSPECTV,num_T_N2O2))340 if(.not.allocated(abs_arr_N2O2_IR))allocate(abs_arr_N2O2_IR(L_NSPECTI,num_T_N2O2))359 allocate(temp_arr_N2O2(num_T_N2O2)) 360 allocate(abs_arr_N2O2_VI(L_NSPECTV,num_T_N2O2)) 361 allocate(abs_arr_N2O2_IR(L_NSPECTI,num_T_N2O2)) 341 362 temp_arr_N2O2(:)=temp_arr(:) 342 363 abs_arr_N2O2_VI(:,:)=0. … … 345 366 elseif ((igas_X .eq. igas_N2) .and. (igas_Y .eq. igas_CH4)) then 346 367 num_T_N2CH4=num_T 347 if(.not.allocated(temp_arr_N2CH4))allocate(temp_arr_N2CH4(num_T_N2CH4))348 if(.not.allocated(abs_arr_N2CH4_VI))allocate(abs_arr_N2CH4_VI(L_NSPECTV,num_T_N2CH4))349 if(.not.allocated(abs_arr_N2CH4_IR))allocate(abs_arr_N2CH4_IR(L_NSPECTI,num_T_N2CH4))368 allocate(temp_arr_N2CH4(num_T_N2CH4)) 369 allocate(abs_arr_N2CH4_VI(L_NSPECTV,num_T_N2CH4)) 370 allocate(abs_arr_N2CH4_IR(L_NSPECTI,num_T_N2CH4)) 350 371 temp_arr_N2CH4(:)=temp_arr(:) 351 372 abs_arr_N2CH4_VI(:,:)=0. … … 354 375 elseif ((igas_X .eq. igas_CO2) .and. (igas_Y .eq. igas_O2)) then 355 376 num_T_CO2O2=num_T 356 if(.not.allocated(temp_arr_CO2O2))allocate(temp_arr_CO2O2(num_T_CO2O2))357 if(.not.allocated(abs_arr_CO2O2_VI))allocate(abs_arr_CO2O2_VI(L_NSPECTV,num_T_CO2O2))358 if(.not.allocated(abs_arr_CO2O2_IR))allocate(abs_arr_CO2O2_IR(L_NSPECTI,num_T_CO2O2))377 allocate(temp_arr_CO2O2(num_T_CO2O2)) 378 allocate(abs_arr_CO2O2_VI(L_NSPECTV,num_T_CO2O2)) 379 allocate(abs_arr_CO2O2_IR(L_NSPECTI,num_T_CO2O2)) 359 380 temp_arr_CO2O2(:)=temp_arr(:) 360 381 abs_arr_CO2O2_VI(:,:)=0. … … 363 384 elseif ((igas_X .eq. igas_H2) .and. (igas_Y .eq. igas_CH4)) then 364 385 num_T_H2CH4=num_T 365 if(.not.allocated(temp_arr_H2CH4))allocate(temp_arr_H2CH4(num_T_H2CH4))366 if(.not.allocated(abs_arr_H2CH4_VI))allocate(abs_arr_H2CH4_VI(L_NSPECTV,num_T_H2CH4))367 if(.not.allocated(abs_arr_H2CH4_IR))allocate(abs_arr_H2CH4_IR(L_NSPECTI,num_T_H2CH4))386 allocate(temp_arr_H2CH4(num_T_H2CH4)) 387 allocate(abs_arr_H2CH4_VI(L_NSPECTV,num_T_H2CH4)) 388 allocate(abs_arr_H2CH4_IR(L_NSPECTI,num_T_H2CH4)) 368 389 temp_arr_H2CH4(:)=temp_arr(:) 369 390 abs_arr_H2CH4_VI(:,:)=0. … … 372 393 elseif ((igas_X .eq. igas_H2) .and. (igas_Y .eq. igas_He)) then 373 394 num_T_H2He=num_T 374 if(.not.allocated(temp_arr_H2He))allocate(temp_arr_H2He(num_T_H2He))375 if(.not.allocated(abs_arr_H2He_VI))allocate(abs_arr_H2He_VI(L_NSPECTV,num_T_H2He))376 if(.not.allocated(abs_arr_H2He_IR))allocate(abs_arr_H2He_IR(L_NSPECTI,num_T_H2He))395 allocate(temp_arr_H2He(num_T_H2He)) 396 allocate(abs_arr_H2He_VI(L_NSPECTV,num_T_H2He)) 397 allocate(abs_arr_H2He_IR(L_NSPECTI,num_T_H2He)) 377 398 temp_arr_H2He(:)=temp_arr(:) 378 399 abs_arr_H2He_VI(:,:)=0. … … 381 402 elseif ((igas_X .eq. igas_H2O) .and. (igas_Y .eq. igas_N2)) then 382 403 num_T_H2ON2=num_T 383 if(.not.allocated(temp_arr_H2ON2))allocate(temp_arr_H2ON2(num_T_H2ON2))384 if(.not.allocated(abs_arr_H2ON2_VI))allocate(abs_arr_H2ON2_VI(L_NSPECTV,num_T_H2ON2))385 if(.not.allocated(abs_arr_H2ON2_IR))allocate(abs_arr_H2ON2_IR(L_NSPECTI,num_T_H2ON2))404 allocate(temp_arr_H2ON2(num_T_H2ON2)) 405 allocate(abs_arr_H2ON2_VI(L_NSPECTV,num_T_H2ON2)) 406 allocate(abs_arr_H2ON2_IR(L_NSPECTI,num_T_H2ON2)) 386 407 temp_arr_H2ON2(:)=temp_arr(:) 387 408 abs_arr_H2ON2_VI(:,:)=0. … … 390 411 elseif ((igas_X .eq. igas_H2O) .and. (igas_Y .eq. igas_O2)) then 391 412 num_T_H2OO2=num_T 392 if(.not.allocated(temp_arr_H2OO2))allocate(temp_arr_H2OO2(num_T_H2OO2))393 if(.not.allocated(abs_arr_H2OO2_VI))allocate(abs_arr_H2OO2_VI(L_NSPECTV,num_T_H2OO2))394 if(.not.allocated(abs_arr_H2OO2_IR))allocate(abs_arr_H2OO2_IR(L_NSPECTI,num_T_H2OO2))413 allocate(temp_arr_H2OO2(num_T_H2OO2)) 414 allocate(abs_arr_H2OO2_VI(L_NSPECTV,num_T_H2OO2)) 415 allocate(abs_arr_H2OO2_IR(L_NSPECTI,num_T_H2OO2)) 395 416 temp_arr_H2OO2(:)=temp_arr(:) 396 417 abs_arr_H2OO2_VI(:,:)=0. … … 399 420 elseif ((igas_X .eq. igas_H2O) .and. (igas_Y .eq. igas_CO2)) then 400 421 num_T_H2OCO2=num_T 401 if(.not.allocated(temp_arr_H2OCO2))allocate(temp_arr_H2OCO2(num_T_H2OCO2))402 if(.not.allocated(abs_arr_H2OCO2_VI))allocate(abs_arr_H2OCO2_VI(L_NSPECTV,num_T_H2OCO2))403 if(.not.allocated(abs_arr_H2OCO2_IR))allocate(abs_arr_H2OCO2_IR(L_NSPECTI,num_T_H2OCO2))422 allocate(temp_arr_H2OCO2(num_T_H2OCO2)) 423 allocate(abs_arr_H2OCO2_VI(L_NSPECTV,num_T_H2OCO2)) 424 allocate(abs_arr_H2OCO2_IR(L_NSPECTI,num_T_H2OCO2)) 404 425 temp_arr_H2OCO2(:)=temp_arr(:) 405 426 abs_arr_H2OCO2_VI(:,:)=0. … … 408 429 elseif ((igas_X .eq. igas_CO2) .and. (igas_Y .eq. igas_CO2)) then 409 430 num_T_CO2CO2=num_T 410 if(.not.allocated(temp_arr_CO2CO2))allocate(temp_arr_CO2CO2(num_T_CO2CO2))411 if(.not.allocated(abs_arr_CO2CO2_VI))allocate(abs_arr_CO2CO2_VI(L_NSPECTV,num_T_CO2CO2))412 if(.not.allocated(abs_arr_CO2CO2_IR))allocate(abs_arr_CO2CO2_IR(L_NSPECTI,num_T_CO2CO2))431 allocate(temp_arr_CO2CO2(num_T_CO2CO2)) 432 allocate(abs_arr_CO2CO2_VI(L_NSPECTV,num_T_CO2CO2)) 433 allocate(abs_arr_CO2CO2_IR(L_NSPECTI,num_T_CO2CO2)) 413 434 temp_arr_CO2CO2(:)=temp_arr(:) 414 435 abs_arr_CO2CO2_VI(:,:)=0. … … 417 438 elseif ((igas_X .eq. igas_CO2) .and. (igas_Y .eq. igas_H2)) then 418 439 num_T_CO2H2=num_T 419 if(.not.allocated(temp_arr_CO2H2))allocate(temp_arr_CO2H2(num_T_CO2H2))420 if(.not.allocated(abs_arr_CO2H2_VI))allocate(abs_arr_CO2H2_VI(L_NSPECTV,num_T_CO2H2))421 if(.not.allocated(abs_arr_CO2H2_IR))allocate(abs_arr_CO2H2_IR(L_NSPECTI,num_T_CO2H2))440 allocate(temp_arr_CO2H2(num_T_CO2H2)) 441 allocate(abs_arr_CO2H2_VI(L_NSPECTV,num_T_CO2H2)) 442 allocate(abs_arr_CO2H2_IR(L_NSPECTI,num_T_CO2H2)) 422 443 temp_arr_CO2H2(:)=temp_arr(:) 423 444 abs_arr_CO2H2_VI(:,:)=0. … … 426 447 elseif ((igas_X .eq. igas_CO2) .and. (igas_Y .eq. igas_CH4)) then 427 448 num_T_CO2CH4=num_T 428 if(.not.allocated(temp_arr_CO2CH4))allocate(temp_arr_CO2CH4(num_T_CO2CH4))429 if(.not.allocated(abs_arr_CO2CH4_VI))allocate(abs_arr_CO2CH4_VI(L_NSPECTV,num_T_CO2CH4))430 if(.not.allocated(abs_arr_CO2CH4_IR))allocate(abs_arr_CO2CH4_IR(L_NSPECTI,num_T_CO2CH4))449 allocate(temp_arr_CO2CH4(num_T_CO2CH4)) 450 allocate(abs_arr_CO2CH4_VI(L_NSPECTV,num_T_CO2CH4)) 451 allocate(abs_arr_CO2CH4_IR(L_NSPECTI,num_T_CO2CH4)) 431 452 temp_arr_CO2CH4(:)=temp_arr(:) 432 453 abs_arr_CO2CH4_VI(:,:)=0. … … 628 649 !print*,'So the absorption is ',abs_coef,' m^-1' 629 650 630 return631 651 end subroutine interpolate_continuum 632 652 … … 653 673 654 674 integer iW, iB, count_norm 655 integer num_T656 integer num_wn657 double precision wn_arr(num_wn)658 double precision abs_arr_in(num_wn,num_T)659 double precision abs_arr_out_IR(L_NSPECTI,num_T)660 double precision abs_arr_out_VI(L_NSPECTV,num_T)675 integer,intent(in) :: num_T 676 integer,intent(in) :: num_wn 677 double precision,intent(in) :: wn_arr(num_wn) 678 double precision,intent(in) :: abs_arr_in(num_wn,num_T) 679 double precision,intent(out) :: abs_arr_out_IR(L_NSPECTI,num_T) 680 double precision,intent(out) :: abs_arr_out_VI(L_NSPECTV,num_T) 661 681 662 682 ! First visible (VI) chanel … … 710 730 endif 711 731 712 return713 732 end subroutine interpolate_wn_abs_coeff 714 733 … … 733 752 implicit none 734 753 735 double precision z_temp 736 double precision temp 737 integer num_T 738 double precision temp_arr(num_T) 754 double precision,intent(out) :: z_temp 755 double precision,intent(in) :: temp 756 integer,intent(in) :: num_T 757 double precision,intent(in) :: temp_arr(num_T) 758 759 character(len=22) :: rname = "T_boundaries_continuum" 739 760 740 761 z_temp=temp … … 746 767 print*, 'Minimum temperature is ', minval(temp_arr), ' K' 747 768 endif 748 stop769 call abort_physic(rname,"temperature too low",1) 749 770 else 750 771 z_temp=minval(temp_arr) … … 756 777 print*, 'Maximum temperature is ', maxval(temp_arr), ' K' 757 778 endif 758 stop779 call abort_physic(rname,"temperature too low",1) 759 780 else 760 781 z_temp=maxval(temp_arr) … … 762 783 endif 763 784 764 return765 785 end subroutine T_boundaries_continuum 766 786 … … 806 826 807 827 808 return809 828 end subroutine interpolate_T_abs_coeff 829 830 end module interpolate_continuum_mod -
TabularUnified trunk/LMDZ.GENERIC/libf/phystd/optci.F90 ¶
r3663 r3693 19 19 use recombin_corrk_mod, only: corrk_recombin, gasi_recomb 20 20 use tpindex_mod, only: tpindex 21 use interpolate_continuum_mod, only: interpolate_continuum 21 22 22 23 implicit none -
TabularUnified trunk/LMDZ.GENERIC/libf/phystd/optcv.F90 ¶
r3663 r3693 18 18 use recombin_corrk_mod, only: corrk_recombin, gasv_recomb 19 19 use tpindex_mod, only: tpindex 20 use interpolate_continuum_mod, only: interpolate_continuum 20 21 21 22 implicit none -
TabularUnified trunk/LMDZ.GENERIC/libf/phystd/radcommon_h.F90 ¶
r3654 r3693 68 68 !$OMP THREADPRIVATE(WNOI,DWNI,WAVEI,& 69 69 !$OMP WNOV,DWNV,WAVEV,& 70 !$OMP STELLARF 70 !$OMP STELLARF) 71 71 72 72 REAL*8 blami(L_NSPECTI+1) -
TabularUnified trunk/LMDZ.GENERIC/libf/phystd/sugas_corrk.F90 ¶
r3641 r3693 38 38 use recombin_corrk_mod, only: su_recombin, & 39 39 corrk_recombin, use_premix, nrecomb_tot, rcb2tot_idx 40 use interpolate_continuum_mod, only: interpolate_continuum 40 41 implicit none 41 42
Note: See TracChangeset
for help on using the changeset viewer.