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...

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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)
Note: See TracChangeset for help on using the changeset viewer.