Changeset 3693 for trunk


Ignore:
Timestamp:
Mar 17, 2025, 6:18:15 PM (3 months ago)
Author:
emillour
Message:

Generic PCM:
Minor corrections:

  • about OpenMP in rad_common_h.F90 : (unclosed bracket in the THREADPRIVATE statement)
  • in interpolate_continuum.F90 : "filename" character string size must be specified as '*' (i.e. variable) and not a fixed number

Took the opportunity to also clean-up interpolate_continuum.F90 by
making it a module, adding some intent() statements, specifying
why saved variables are not threadprivate, get rid of useless "return"
statement at the end of routines, etc.
EM

Location:
trunk/LMDZ.GENERIC
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/LMDZ.GENERIC/changelog.txt

    r3663 r3693  
    20292029We choose the value recommended by the 2019 revision of the SI.
    20302030R=8.314463 J.K-1.mol-1 and NA=6.022141e23 mol-1.
     2031
     2032== 17/03/2025 == EM
     2033Minor 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
     2038Took the opportunity to also clean-up interpolate_continuum.F90 by
     2039making it a module, adding some intent() statements, specifying
     2040why saved variables are not threadprivate, get rid of useless "return"
     2041statement at the end of routines, etc.
  • TabularUnified trunk/LMDZ.GENERIC/libf/phystd/interpolate_continuum.F90

    r3641 r3693  
     1module interpolate_continuum_mod
     2
     3implicit none
     4
     5contains
    16
    27     subroutine interpolate_continuum(filename,igas_X,igas_Y,c_WN,ind_WN,temp,pres_X,pres_Y,abs_coef,firstcall)
     
    3035
    3136      ! input
    32       integer ind_WN                      ! wavenumber index
    33       integer igas_X                      ! index of molecule X
    34       integer igas_Y                      ! index of molecule Y
    35       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 table
    39       character*2 c_WN                    ! wavelength chanel: infrared (IR) or visible (VI)
    40       logical firstcall
     37      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
    4146
    4247      ! output
    43       double precision abs_coef          ! absorption coefficient (m^-1)
     48      double precision,intent(out) :: abs_coef ! absorption coefficient (m^-1)
    4449
    4550      ! intermediate variables
     
    6469
    6570      ! 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
    7177
    7278      ! 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
    7885
    7986      ! 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
    8593
    8694      ! 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
    92101
    93102      ! 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
    99109
    100110      ! 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
    106117
    107118      ! 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
    113125
    114126      ! 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
    120133
    121134      ! 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
    127141
    128142      ! 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
    134149
    135150      ! 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
    141157
    142158      ! 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
    148165
    149166      ! 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
    155173
    156174      ! 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
    162181
    163182      ! 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
    169189
    170190      ! 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
    176197
    177198      ! Temperature array, continuum absorption grid for the pair H2O-CO2
    178       integer num_T_H2OCO2
    179       double precision, dimension(:), allocatable :: temp_arr_H2OCO2
    180       double precision, dimension(:,:), allocatable :: abs_arr_H2OCO2_IR
    181       double precision, dimension(:,:), allocatable :: abs_arr_H2OCO2_VI
    182       save num_T_H2OCO2,temp_arr_H2OCO2,abs_arr_H2OCO2_IR,abs_arr_H2OCO2_VI !read by master
    183 
     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
    184205
    185206
     
    203224            write(*,*) 'https://web.lmd.jussieu.fr/~lmdz/planets/LMDZ.GENERIC/datagcm/continuum_data/'
    204225          endif
    205           call abort
     226          call abort_physic("interpolate_continuum","missing input file",1)
    206227        endif
    207228
     
    235256        close(33)
    236257
    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))
    240261       
    241262        ! We now open and read the file a second time to extract the temperature array, wavenumber array and continuum absorption data
     
    273294        if ((igas_X .eq. igas_CO2) .and. (igas_Y .eq. igas_CO2)) then
    274295          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))
    278299          temp_arr_CO2CO2(:)=temp_arr(:)
    279300          abs_arr_CO2CO2_VI(:,:)=0.
     
    282303        elseif ((igas_X .eq. igas_N2) .and. (igas_Y .eq. igas_N2)) then
    283304          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))
    287308          temp_arr_N2N2(:)=temp_arr(:)
    288309          abs_arr_N2N2_VI(:,:)=0.
     
    291312        elseif ((igas_X .eq. igas_O2) .and. (igas_Y .eq. igas_O2)) then
    292313          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))
    296317          temp_arr_O2O2(:)=temp_arr(:)
    297318          abs_arr_O2O2_VI(:,:)=0.
     
    300321        elseif ((igas_X .eq. igas_CH4) .and. (igas_Y .eq. igas_CH4)) then
    301322          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))
    305326          temp_arr_CH4CH4(:)=temp_arr(:)
    306327          abs_arr_CH4CH4_VI(:,:)=0.
     
    309330        elseif ((igas_X .eq. igas_H2) .and. (igas_Y .eq. igas_H2)) then
    310331          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))
    314335          temp_arr_H2H2(:)=temp_arr(:)
    315336          abs_arr_H2H2_VI(:,:)=0.
     
    318339        elseif ((igas_X .eq. igas_H2O) .and. (igas_Y .eq. igas_H2O)) then
    319340          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))
    323344          temp_arr_H2OH2O(:)=temp_arr(:)
    324345          abs_arr_H2OH2O_VI(:,:)=0.
     
    327348        elseif ((igas_X .eq. igas_N2) .and. (igas_Y .eq. igas_H2)) then
    328349          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))
    332353          temp_arr_N2H2(:)=temp_arr(:)
    333354          abs_arr_N2H2_VI(:,:)=0.
     
    336357        elseif ((igas_X .eq. igas_N2) .and. (igas_Y .eq. igas_O2)) then
    337358          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))
    341362          temp_arr_N2O2(:)=temp_arr(:)
    342363          abs_arr_N2O2_VI(:,:)=0.
     
    345366        elseif ((igas_X .eq. igas_N2) .and. (igas_Y .eq. igas_CH4)) then
    346367          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))
    350371          temp_arr_N2CH4(:)=temp_arr(:)
    351372          abs_arr_N2CH4_VI(:,:)=0.
     
    354375        elseif ((igas_X .eq. igas_CO2) .and. (igas_Y .eq. igas_O2)) then
    355376          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))
    359380          temp_arr_CO2O2(:)=temp_arr(:)
    360381          abs_arr_CO2O2_VI(:,:)=0.
     
    363384        elseif ((igas_X .eq. igas_H2) .and. (igas_Y .eq. igas_CH4)) then
    364385          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))
    368389          temp_arr_H2CH4(:)=temp_arr(:)
    369390          abs_arr_H2CH4_VI(:,:)=0.
     
    372393        elseif ((igas_X .eq. igas_H2) .and. (igas_Y .eq. igas_He)) then
    373394          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))
    377398          temp_arr_H2He(:)=temp_arr(:)
    378399          abs_arr_H2He_VI(:,:)=0.
     
    381402        elseif ((igas_X .eq. igas_H2O) .and. (igas_Y .eq. igas_N2)) then
    382403          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))
    386407          temp_arr_H2ON2(:)=temp_arr(:)
    387408          abs_arr_H2ON2_VI(:,:)=0.
     
    390411        elseif ((igas_X .eq. igas_H2O) .and. (igas_Y .eq. igas_O2)) then
    391412          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))
    395416          temp_arr_H2OO2(:)=temp_arr(:)
    396417          abs_arr_H2OO2_VI(:,:)=0.
     
    399420        elseif ((igas_X .eq. igas_H2O) .and. (igas_Y .eq. igas_CO2)) then
    400421          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))
    404425          temp_arr_H2OCO2(:)=temp_arr(:)
    405426          abs_arr_H2OCO2_VI(:,:)=0.
     
    408429        elseif ((igas_X .eq. igas_CO2) .and. (igas_Y .eq. igas_CO2)) then
    409430          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))
    413434          temp_arr_CO2CO2(:)=temp_arr(:)
    414435          abs_arr_CO2CO2_VI(:,:)=0.
     
    417438        elseif ((igas_X .eq. igas_CO2) .and. (igas_Y .eq. igas_H2)) then
    418439          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))
    422443          temp_arr_CO2H2(:)=temp_arr(:)
    423444          abs_arr_CO2H2_VI(:,:)=0.
     
    426447        elseif ((igas_X .eq. igas_CO2) .and. (igas_Y .eq. igas_CH4)) then
    427448          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))
    431452          temp_arr_CO2CH4(:)=temp_arr(:)
    432453          abs_arr_CO2CH4_VI(:,:)=0.
     
    628649      !print*,'So the absorption is ',abs_coef,' m^-1'
    629650     
    630       return
    631651    end subroutine interpolate_continuum
    632652   
     
    653673           
    654674      integer iW, iB, count_norm
    655       integer num_T
    656       integer num_wn
    657       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)
    661681
    662682      ! First visible (VI) chanel
     
    710730      endif
    711731       
    712       return
    713732    end subroutine interpolate_wn_abs_coeff
    714733
     
    733752      implicit none
    734753     
    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"
    739760     
    740761      z_temp=temp
     
    746767            print*, 'Minimum temperature is ', minval(temp_arr), ' K'
    747768          endif
    748           stop
     769          call abort_physic(rname,"temperature too low",1)
    749770        else
    750771          z_temp=minval(temp_arr)
     
    756777            print*, 'Maximum temperature is ', maxval(temp_arr), ' K'
    757778          endif
    758           stop
     779          call abort_physic(rname,"temperature too low",1)
    759780        else
    760781          z_temp=maxval(temp_arr)
     
    762783      endif
    763784     
    764       return
    765785    end subroutine T_boundaries_continuum
    766786
     
    806826
    807827     
    808       return
    809828    end subroutine interpolate_T_abs_coeff
     829
     830end module interpolate_continuum_mod
  • TabularUnified trunk/LMDZ.GENERIC/libf/phystd/optci.F90

    r3663 r3693  
    1919  use recombin_corrk_mod, only: corrk_recombin, gasi_recomb
    2020  use tpindex_mod, only: tpindex
     21  use interpolate_continuum_mod, only: interpolate_continuum
    2122
    2223  implicit none
  • TabularUnified trunk/LMDZ.GENERIC/libf/phystd/optcv.F90

    r3663 r3693  
    1818  use recombin_corrk_mod, only: corrk_recombin, gasv_recomb
    1919  use tpindex_mod, only: tpindex
     20  use interpolate_continuum_mod, only: interpolate_continuum
    2021
    2122  implicit none
  • TabularUnified trunk/LMDZ.GENERIC/libf/phystd/radcommon_h.F90

    r3654 r3693  
    6868!$OMP THREADPRIVATE(WNOI,DWNI,WAVEI,&
    6969        !$OMP WNOV,DWNV,WAVEV,&
    70         !$OMP STELLARF
     70        !$OMP STELLARF)
    7171
    7272      REAL*8 blami(L_NSPECTI+1)
  • TabularUnified trunk/LMDZ.GENERIC/libf/phystd/sugas_corrk.F90

    r3641 r3693  
    3838      use recombin_corrk_mod, only: su_recombin,        &
    3939                corrk_recombin, use_premix, nrecomb_tot, rcb2tot_idx
     40      use interpolate_continuum_mod, only: interpolate_continuum
    4041      implicit none
    4142
Note: See TracChangeset for help on using the changeset viewer.