Ignore:
Timestamp:
Feb 6, 2026, 10:20:21 PM (3 weeks ago)
Author:
mturbet
Message:

Cleaning of continuum routines following 04-02-26 hackathon. RIP our beloved bilinear and bilinearbig routines. You will be deeply missed...

Location:
trunk/LMDZ.GENERIC/libf/phygeneric
Files:
12 deleted
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.GENERIC/libf/phygeneric/callkeys_mod.F90

    r4033 r4055  
    1313      logical,save :: season,diurnal,tlocked,rings_shadow,lwrite
    1414!$OMP THREADPRIVATE(season,diurnal,tlocked,rings_shadow,lwrite)
    15       logical,save :: callgasvis,continuum,generic_continuum_database,graybody
    16 !$OMP THREADPRIVATE(callgasvis,continuum,generic_continuum_database,graybody)
     15      logical,save :: callgasvis,continuum,graybody
     16!$OMP THREADPRIVATE(callgasvis,continuum,graybody)
    1717      logical,save :: strictboundcorrk                                     
    1818!$OMP THREADPRIVATE(strictboundcorrk)
  • trunk/LMDZ.GENERIC/libf/phygeneric/inifis_mod.F90

    r4033 r4055  
    381381     call getin_p("continuum",continuum)
    382382     if (is_master) write(*,*) trim(rname)//": continuum = ",continuum
    383      
    384      if (is_master) write(*,*) trim(rname)//&
    385        ": use generic continuum opacity database ?"//&
    386        " (matters only if callrad=T)"
    387      generic_continuum_database=.true. ! default value
    388      call getin_p("generic_continuum_database",generic_continuum_database)
    389      if (is_master) write(*,*) trim(rname)//": generic_continuum_database = ", &
    390      generic_continuum_database
    391383 
    392384     if (is_master) write(*,*) trim(rname)//": version for H2H2 CIA file ?"
  • trunk/LMDZ.GENERIC/libf/phygeneric/optci.F90

    r3797 r4055  
    1111  use radinc_h, only: L_LEVELS, L_NLAYRAD, L_NSPECTI, L_NGAUSS, &
    1212                      L_NLEVRAD, L_REFVAR, naerkind
    13   use radcommon_h, only: gasi,tlimit,wrefVAR,Cmk,tgasref,pfgasref,wnoi,scalep,indi,glat_ig
     13  use radcommon_h, only: gasi,tlimit,wrefVAR,Cmk,tgasref,pfgasref,wnoi,scalep,glat_ig
    1414  use gases_h, only: gfrac, ngasmx, igas_N2, igas_He, igas_H2O, igas_H2, &
    1515                     igas_CH4, igas_CO2, igas_O2
    1616  use comcstfi_mod, only: g, r, mugaz
    17   use callkeys_mod, only: kastprof,continuum,graybody,varspec, &
    18                           generic_continuum_database
     17  use callkeys_mod, only: kastprof,continuum,graybody,varspec
    1918  use recombin_corrk_mod, only: corrk_recombin, gasi_recomb
    2019  use tpindex_mod, only: tpindex
     
    9897
    9998  integer igas, jgas
    100 
    101   integer interm
    10299 
    103100  logical :: firstcall=.true.
     
    126123  endif ! of if (firstcall)
    127124
    128   !! AS: to save time in computing continuum (see bilinearbig)
    129   IF (.not.ALLOCATED(indi)) THEN
    130       ALLOCATE(indi(L_NSPECTI,ngasmx,ngasmx))
    131       indi = -9999  ! this initial value means "to be calculated"
    132   ENDIF
    133 
    134125  !=======================================================================
    135126  !     Determine the total gas opacity throughout the column, for each
     
    191182           ! include continua if necessary
    192183           
    193            if(generic_continuum_database)then
    194184             T_cont  = dble(TMID(k))
    195185             do igas=1,ngasmx
     
    241231               
    242232             enddo ! igas=1,ngasmx
    243              
    244            else ! generic_continuum_database
    245            
    246             wn_cont = dble(wnoi(nw))
    247             T_cont  = dble(TMID(k))
    248             do igas=1,ngasmx
    249 
    250               if(gfrac(igas).eq.-1)then ! variable
    251                  p_cont  = dble(PMID(k)*scalep*QVAR(k)) ! qvar = mol/mol
    252               elseif(varspec) then
    253                  p_cont  = dble(PMID(k)*scalep*FRACVAR(igas,k)*(1.-QVAR(k)))
    254               else
    255                  p_cont  = dble(PMID(k)*scalep*gfrac(igas)*(1.-QVAR(k)))
    256               endif
    257 
    258               dtemp=0.0d0
    259               if(igas.eq.igas_N2)then
    260 
    261                  interm = indi(nw,igas,igas)
    262                  call interpolateN2N2(wn_cont,T_cont,p_cont,dtemp,.false.,interm)
    263                  indi(nw,igas,igas) = interm
    264 
    265               elseif(igas.eq.igas_H2)then
    266 
    267                  ! first do self-induced absorption
    268                  interm = indi(nw,igas,igas)
    269                  call interpolateH2H2(wn_cont,T_cont,p_cont,dtemp,.false.,interm)
    270                  indi(nw,igas,igas) = interm
    271 
    272                  ! then cross-interactions with other gases
    273                  do jgas=1,ngasmx
    274                     if(varspec) then
    275                       p_cross = dble(PMID(k)*scalep*FRACVAR(jgas,k)*(1.-QVAR(k)))
    276                     else
    277                       p_cross = dble(PMID(k)*scalep*gfrac(jgas)*(1.-QVAR(k)))
    278                     endif
    279                     dtempc  = 0.0d0
    280                     if(jgas.eq.igas_N2)then
    281                        interm = indi(nw,igas,jgas)
    282                        call interpolateN2H2(wn_cont,T_cont,p_cross,p_cont,dtempc,.false.,interm)
    283                        indi(nw,igas,jgas) = interm
    284                     elseif(jgas.eq.igas_CO2)then
    285                        interm = indi(nw,igas,jgas)
    286                        call interpolateCO2H2(wn_cont,T_cont,p_cross,p_cont,dtempc,.false.,interm)
    287                        indi(nw,igas,jgas) = interm
    288                     elseif(jgas.eq.igas_He)then
    289                        interm = indi(nw,igas,jgas)
    290                        call interpolateH2He(wn_cont,T_cont,p_cross,p_cont,dtempc,.false.,interm)
    291                        indi(nw,igas,jgas) = interm
    292                     endif
    293                     dtemp = dtemp + dtempc
    294                  enddo
    295 
    296               elseif(igas.eq.igas_CH4)then
    297 
    298                  ! first do self-induced absorption
    299                  interm = indi(nw,igas,igas)
    300                  call interpolateCH4CH4(wn_cont,T_cont,p_cont,dtemp,.false.,interm)
    301                  indi(nw,igas,igas) = interm
    302 
    303                  ! then cross-interactions with other gases
    304                  do jgas=1,ngasmx
    305                     if(varspec) then
    306                       p_cross = dble(PMID(k)*scalep*FRACVAR(jgas,k)*(1.-QVAR(k)))
    307                     else
    308                       p_cross = dble(PMID(k)*scalep*gfrac(jgas)*(1.-QVAR(k)))
    309                     endif
    310                     dtempc  = 0.0d0
    311                     if(jgas.eq.igas_H2)then
    312                        interm = indi(nw,igas,jgas)
    313                        call interpolateH2CH4(wn_cont,T_cont,p_cross,p_cont,dtempc,.false.,interm)
    314                        indi(nw,igas,jgas) = interm
    315                     elseif(jgas.eq.igas_CO2)then
    316                        interm = indi(nw,igas,jgas)
    317                        call interpolateCO2CH4(wn_cont,T_cont,p_cross,p_cont,dtempc,.false.,interm)
    318                        indi(nw,igas,jgas) = interm
    319                     elseif(jgas.eq.igas_He)then
    320                        interm = indi(nw,igas,jgas)
    321                        call interpolateHeCH4(wn_cont,T_cont,p_cross,p_cont,dtempc,.false.,interm)
    322                        indi(nw,igas,jgas) = interm
    323                     endif
    324                     dtemp = dtemp + dtempc
    325                  enddo
    326 
    327               elseif(igas.eq.igas_H2O.and.T_cont.gt.100.0)then
    328                  ! Compute self and foreign (with air) continuum of H2O
    329                  p_air = dble(PMID(k)*scalep) - p_cont ! note assumes background is air!
    330                  interm = indi(nw,igas,igas)
    331                  call interpolateH2O_self_foreign(wn_cont,T_cont,p_cont,p_air,dtemp,.false.,interm) ! MTCKD v3.3
    332                  indi(nw,igas,igas) = interm
    333 
    334               endif
    335 
    336               DCONT = DCONT + dtemp
    337 
    338            enddo
    339 
    340            ! Oobleck test
    341            !rho = PMID(k)*scalep / (TMID(k)*286.99)
    342            !if(WNOI(nw).gt.300.0 .and. WNOI(nw).lt.500.0)then
    343            !   DCONT = rho * 0.125 * 4.6e-4
    344            !elseif(WNOI(nw).gt.500.0 .and. WNOI(nw).lt.700.0)then
    345            !   DCONT = 1000*dpr(k) * 1.0 * 4.6e-4 / g
    346            !   DCONT = rho * 1.0 * 4.6e-4
    347            !elseif(WNOI(nw).gt.700.0 .and. WNOI(nw).lt.900.0)then
    348            !   DCONT = rho * 0.125 * 4.6e-4
    349            !endif
    350 
    351            endif ! generic_continuum_database
    352233           
    353234           DCONT = DCONT*dz(k)
  • trunk/LMDZ.GENERIC/libf/phygeneric/optcv.F90

    r3797 r4055  
    1010
    1111  use radinc_h, only: L_NLAYRAD, L_NLEVRAD, L_LEVELS, L_NSPECTV, L_NGAUSS, L_REFVAR, NAERKIND
    12   use radcommon_h, only: gasv, tlimit, wrefVAR, Cmk, tgasref, pfgasref,wnov,scalep,indv,glat_ig
     12  use radcommon_h, only: gasv, tlimit, wrefVAR, Cmk, tgasref, pfgasref,wnov,scalep,glat_ig
    1313  use gases_h, only: gfrac, ngasmx, igas_H2, igas_H2O, igas_He, igas_N2, &
    1414                     igas_CH4, igas_CO2, igas_O2
    1515  use comcstfi_mod, only: g, r, mugaz
    1616  use callkeys_mod, only: kastprof,continuum,graybody,callgasvis,varspec, &
    17                           generic_continuum_database,rayleigh
     17                          rayleigh
    1818  use recombin_corrk_mod, only: corrk_recombin, gasv_recomb
    1919  use tpindex_mod, only: tpindex
     
    107107  integer igas, jgas
    108108
    109   integer interm
    110 
    111109  logical :: firstcall=.true.
    112110!$OMP THREADPRIVATE(firstcall)
     
    120118    firstcall=.false.
    121119  endif ! of if (firstcall)
    122 
    123   !! AS: to save time in computing continuum (see bilinearbig)
    124   IF (.not.ALLOCATED(indv)) THEN
    125       ALLOCATE(indv(L_NSPECTV,ngasmx,ngasmx))
    126       indv = -9999 ! this initial value means "to be calculated"
    127   ENDIF
    128120
    129121  !=======================================================================
     
    211203           ! include continua if necessary
    212204           
    213           if(generic_continuum_database)then
    214205            T_cont  = dble(TMID(k))
    215206            do igas=1,ngasmx
     
    261252               
    262253            enddo ! igas=1,ngasmx
    263            
    264           else ! generic_continuum_database
    265            
    266            
    267            wn_cont = dble(wnov(nw))
    268            T_cont  = dble(TMID(k))
    269            do igas=1,ngasmx
    270 
    271               if(gfrac(igas).eq.-1)then ! variable
    272                  p_cont  = dble(PMID(k)*scalep*QVAR(k)) ! qvar = mol/mol
    273               elseif(varspec) then
    274                  p_cont  = dble(PMID(k)*scalep*FRACVAR(igas,k)*(1.-QVAR(k)))
    275               else
    276                  p_cont  = dble(PMID(k)*scalep*gfrac(igas)*(1.-QVAR(k)))
    277               endif
    278 
    279               dtemp=0.0
    280               if(igas.eq.igas_N2)then
    281 
    282                  interm = indv(nw,igas,igas)
    283 !                 call interpolateN2N2(wn_cont,T_cont,p_cont,dtemp,.false.,interm)
    284                  indv(nw,igas,igas) = interm
    285                  ! only goes to 500 cm^-1, so unless we're around a cold brown dwarf, this is irrelevant in the visible
    286 
    287               elseif(igas.eq.igas_H2)then
    288 
    289                  ! first do self-induced absorption
    290                  interm = indv(nw,igas,igas)
    291                  call interpolateH2H2(wn_cont,T_cont,p_cont,dtemp,.false.,interm)
    292                  indv(nw,igas,igas) = interm
    293 
    294                  ! then cross-interactions with other gases
    295                  do jgas=1,ngasmx
    296                     if(varspec) then
    297                       p_cross = dble(PMID(k)*scalep*FRACVAR(jgas,k)*(1.-QVAR(k)))
    298                     else
    299                       p_cross = dble(PMID(k)*scalep*gfrac(jgas)*(1.-QVAR(k)))
    300                     endif
    301                     dtempc  = 0.0
    302                     if(jgas.eq.igas_N2)then
    303                        interm = indv(nw,igas,jgas)
    304                        call interpolateN2H2(wn_cont,T_cont,p_cross,p_cont,dtempc,.false.,interm)
    305                        indv(nw,igas,jgas) = interm
    306                        ! should be irrelevant in the visible
    307                     elseif(jgas.eq.igas_CO2)then
    308                        interm = indv(nw,igas,jgas)
    309                        call interpolateCO2H2(wn_cont,T_cont,p_cross,p_cont,dtempc,.false.,interm)
    310                        indv(nw,igas,jgas) = interm
    311                        ! might not be relevant in the visible
    312                     elseif(jgas.eq.igas_He)then
    313                        interm = indv(nw,igas,jgas)
    314                        call interpolateH2He(wn_cont,T_cont,p_cross,p_cont,dtempc,.false.,interm)
    315                        indv(nw,igas,jgas) = interm
    316                     endif
    317                     dtemp = dtemp + dtempc
    318                  enddo
    319                  
    320               elseif(igas.eq.igas_CH4)then
    321 
    322                  ! first do self-induced absorption
    323                  interm = indv(nw,igas,igas)
    324                  call interpolateCH4CH4(wn_cont,T_cont,p_cont,dtemp,.false.,interm)
    325                  indv(nw,igas,igas) = interm
    326 
    327                  ! then cross-interactions with other gases
    328                  do jgas=1,ngasmx
    329                     if(varspec) then
    330                       p_cross = dble(PMID(k)*scalep*FRACVAR(jgas,k)*(1.-QVAR(k)))
    331                     else
    332                       p_cross = dble(PMID(k)*scalep*gfrac(jgas)*(1.-QVAR(k)))
    333                     endif
    334                     dtempc  = 0.0d0
    335                     if(jgas.eq.igas_H2)then
    336                        interm = indv(nw,igas,jgas)
    337                        call interpolateH2CH4(wn_cont,T_cont,p_cross,p_cont,dtempc,.false.,interm)
    338                        indv(nw,igas,jgas) = interm
    339                     elseif(jgas.eq.igas_CO2)then
    340                        interm = indv(nw,igas,jgas)
    341                        call interpolateCO2CH4(wn_cont,T_cont,p_cross,p_cont,dtempc,.false.,interm)
    342                        indv(nw,igas,jgas) = interm
    343                        ! might not be relevant in the visible
    344                     elseif(jgas.eq.igas_He)then
    345                        interm = indv(nw,igas,jgas)
    346                        call interpolateHeCH4(wn_cont,T_cont,p_cross,p_cont,dtempc,.false.,interm)
    347                        indv(nw,igas,jgas) = interm
    348                     endif
    349                     dtemp = dtemp + dtempc
    350                  enddo
    351 
    352               elseif(igas.eq.igas_H2O.and.T_cont.gt.100.0)then
    353                  ! Compute self and foreign (with air) continuum of H2O
    354                  p_air = dble(PMID(k)*scalep) - p_cont ! note assumes background is air!
    355                  interm = indv(nw,igas,igas)
    356                  call interpolateH2O_self_foreign(wn_cont,T_cont,p_cont,p_air,dtemp,.false.,interm) ! MTCKD v3.3
    357                  indv(nw,igas,igas) = interm
    358 
    359               endif
    360 
    361               DCONT = DCONT + dtemp
    362 
    363            enddo
    364 
    365           endif ! generic_continuum_database
    366254         
    367255          DCONT = DCONT*dz(k)
  • trunk/LMDZ.GENERIC/libf/phygeneric/radcommon_h.F90

    r3693 r4055  
    7373      REAL*8 blamv(L_NSPECTV+1) ! these are needed by suaer.F90
    7474!$OMP THREADPRIVATE(blami,blamv)
    75 
    76       !! AS: introduced to avoid doing same computations again for continuum
    77       INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: indi
    78       INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: indv
    79 !$OMP THREADPRIVATE(indi,indv)
    8075
    8176      !!! ALLOCATABLE STUFF SO THAT DIMENSIONS ARE READ in *.dat FILES -- AS 12/2011 
  • trunk/LMDZ.GENERIC/libf/phygeneric/sugas_corrk.F90

    r3893 r4055  
    3434      use ioipsl_getin_p_mod, only: getin_p
    3535      use callkeys_mod, only: varactive,varfixed,graybody,callgasvis,&
    36                 continuum,generic_continuum_database
     36                continuum
    3737      use tracer_h, only : nqtot, moderntracdef, is_recomb, noms
    3838      use recombin_corrk_mod, only: su_recombin,        &
     
    6262
    6363      double precision testcont ! for continuum absorption initialisation
    64 
    65       integer :: dummy
    6664
    6765      if (.not. moderntracdef) use_premix=.true. ! Added by JVO for compatibility with 'old' traceur.def
     
    717715!     Initialise the continuum absorption data
    718716      if(continuum)then
    719       if(generic_continuum_database)then
     717     
    720718       do igas=1,ngasmx ! we loop on all pairs of molecules that have data available
    721719       ! data can be downloaded from https://web.lmd.jussieu.fr/~lmdz/planets/generic/datagcm/continuum_data/
     
    806804       enddo ! igas=1,ngasmx
    807805       
    808       else ! generic_continuum_database tag
    809         do igas=1,ngasmx
    810          if (igas .eq. igas_N2) then
    811 
    812             dummy = -9999
    813             call interpolateN2N2(100.D+0,250.D+0,17500.D+0,testcont,.true.,dummy)
    814 
    815          elseif (igas .eq. igas_H2) then
    816 
    817             ! first do self-induced absorption
    818             dummy = -9999
    819             call interpolateH2H2(500.D+0,250.D+0,17500.D+0,testcont,.true.,dummy)
    820             ! then cross-interactions with other gases
    821             do jgas=1,ngasmx
    822                if (jgas .eq. igas_N2) then
    823                   dummy = -9999
    824                   call interpolateN2H2(592.D+0,278.15D+0,200000.D+0,10000.D+0,testcont,.true.,dummy)
    825                elseif (jgas .eq. igas_CO2) then
    826                   dummy = -9999
    827                   call interpolateCO2H2(592.D+0,278.15D+0,200000.D+0,10000.D+0,testcont,.true.,dummy)
    828                elseif (jgas .eq. igas_He) then
    829                   dummy = -9999
    830                   call interpolateH2He(500.D+0,250.D+0,200000.D+0,10000.D+0,testcont,.true.,dummy)
    831                endif
    832             enddo
    833                
    834          
    835          elseif (igas .eq. igas_CH4) then
    836          
    837             ! first do self-induced absorption
    838             dummy = -9999
    839             call interpolateCH4CH4(600.0,66.7,400.0,testcont,.true.,dummy)
    840             ! then cross-interactions with other gases
    841             do jgas=1,ngasmx
    842                if (jgas .eq. igas_H2) then
    843                   dummy = -9999
    844                   call interpolateH2CH4(500.D+0,250.D+0,200000.D+0,10000.D+0,testcont,.true.,dummy)
    845                elseif (jgas .eq. igas_CO2) then
    846                   dummy = -9999
    847                   call interpolateCO2CH4(592.D+0,278.15D+0,200000.D+0,10000.D+0,testcont,.true.,dummy)
    848                elseif (jgas .eq. igas_He) then
    849                   dummy = -9999
    850                   call interpolateHeCH4(500.D+0,250.D+0,200000.D+0,10000.D+0,testcont,.true.,dummy)
    851                endif
    852             enddo
    853            
    854 
    855          elseif (igas .eq. igas_H2O) then
    856 
    857             ! Compute self and foreign (with air) continuum of H2O
    858             dummy = -9999
    859             call interpolateH2O_self_foreign(990.D+0,296.D+0,683.2D+0*2,0.D+0,testcont,.true.,dummy) 
    860 
    861          endif
    862 
    863       enddo ! igas=1,ngasmx
    864       endif ! generic_continuum_database tag
    865806      endif ! continuum flag
    866807
Note: See TracChangeset for help on using the changeset viewer.