Index: trunk/LMDZ.GENERIC/changelog.txt
===================================================================
--- trunk/LMDZ.GENERIC/changelog.txt	(revision 3788)
+++ trunk/LMDZ.GENERIC/changelog.txt	(revision 3793)
@@ -2080,2 +2080,5 @@
 Minor fix in interpolate_continuum: handle the extreme case when temperature
 is below minimum value in the table.
+
+== 05/06/2025 == MT
+Update + fix a bug for the new continuum interpolate routine (in optci and optcv routines)
Index: trunk/LMDZ.GENERIC/libf/phystd/optci.F90
===================================================================
--- trunk/LMDZ.GENERIC/libf/phystd/optci.F90	(revision 3788)
+++ trunk/LMDZ.GENERIC/libf/phystd/optci.F90	(revision 3793)
@@ -203,61 +203,45 @@
                endif
 	     
-	       dtemp=0.0
+               do jgas=1,ngasmx
+                 if(gfrac(jgas).eq.-1)then ! variable
+                   p_cross  = dble(PMID(k)*scalep*QVAR(k)) ! qvar = mol/mol
+                 elseif(varspec) then
+                   p_cross  = dble(PMID(k)*scalep*FRACVAR(jgas,k)*(1.-QVAR(k)))
+                 else
+                   p_cross  = dble(PMID(k)*scalep*gfrac(jgas)*(1.-QVAR(k)))
+                 endif
 	       
-	       if (igas .eq. igas_N2) then
-	        call interpolate_continuum('',igas_N2,igas_N2,'IR',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-                do jgas=1,ngasmx
-                 if (jgas .eq. igas_H2) then
-		  call interpolate_continuum('',igas_N2,igas_H2,'IR',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-                 elseif (jgas .eq. igas_O2) then
-		  call interpolate_continuum('',igas_N2,igas_O2,'IR',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-                 elseif (jgas .eq. igas_CH4) then
-		  call interpolate_continuum('',igas_N2,igas_CH4,'IR',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-                 endif
-                enddo
-               elseif (igas .eq. igas_O2) then
-	        call interpolate_continuum('',igas_O2,igas_O2,'IR',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-	        do jgas=1,ngasmx
-                 if (jgas .eq. igas_CO2) then
-		  call interpolate_continuum('',igas_CO2,igas_O2,'IR',nw,T_cont,p_cont,p_cont,dtemp,.false.)
+                 dtemp=0.0
+
+	         if ( ((igas .eq. igas_N2) .and. (jgas .eq. igas_N2)) .or.   &
+		     ((igas .eq. igas_N2) .and. (jgas .eq. igas_H2)) .or.    &
+		     ((igas .eq. igas_N2) .and. (jgas .eq. igas_O2)) .or.    &
+		     ((igas .eq. igas_N2) .and. (jgas .eq. igas_CH4)) .or.   &
+		     ((igas .eq. igas_O2) .and. (jgas .eq. igas_O2)) .or.    &
+		     ((igas .eq. igas_CO2) .and. (jgas .eq. igas_O2)) .or.   &
+		     ((igas .eq. igas_H2) .and. (jgas .eq. igas_H2)) .or.    &
+		     ((igas .eq. igas_H2) .and. (jgas .eq. igas_CH4)) .or.   &
+		     ((igas .eq. igas_H2) .and. (jgas .eq. igas_He)) .or.    &
+		     ((igas .eq. igas_CH4) .and. (jgas .eq. igas_CH4)) .or.  &
+		     ((igas .eq. igas_H2O) .and. (jgas .eq. igas_H2O)) .or.  &
+		     ((igas .eq. igas_H2O) .and. (jgas .eq. igas_N2)) .or.   &
+		     ((igas .eq. igas_H2O) .and. (jgas .eq. igas_O2)) .or.   &
+		     ((igas .eq. igas_H2O) .and. (jgas .eq. igas_CO2)) .or.  &
+		     ((igas .eq. igas_CO2) .and. (jgas .eq. igas_CO2)) .or.  &
+		     ((igas .eq. igas_CO2) .and. (jgas .eq. igas_H2)) .or.   &
+		     ((igas .eq. igas_CO2) .and. (jgas .eq. igas_CH4))  ) then
+
+	           call interpolate_continuum('',igas,jgas,'IR',nw,T_cont,p_cont,p_cross,dtemp,.false.)
+
 	         endif
-                enddo
-               elseif (igas .eq. igas_H2) then
-	        call interpolate_continuum('',igas_H2,igas_H2,'IR',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-                do jgas=1,ngasmx
-                 if (jgas .eq. igas_CH4) then
-		  call interpolate_continuum('',igas_H2,igas_CH4,'IR',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-                 elseif (jgas .eq. igas_He) then
-		  call interpolate_continuum('',igas_H2,igas_He,'IR',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-                 endif
-                enddo	 
-               elseif (igas .eq. igas_CH4) then
-	        call interpolate_continuum('',igas_CH4,igas_CH4,'IR',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-               elseif (igas .eq. igas_H2O) then
-	        call interpolate_continuum('',igas_H2O,igas_H2O,'IR',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-                do jgas=1,ngasmx
-                 if (jgas .eq. igas_N2) then
-		  call interpolate_continuum('',igas_H2O,igas_N2,'IR',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-                 elseif (jgas .eq. igas_O2) then
-		  call interpolate_continuum('',igas_H2O,igas_O2,'IR',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-                 elseif (jgas .eq. igas_CO2) then
-		  call interpolate_continuum('',igas_H2O,igas_CO2,'IR',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-                 endif
-                enddo	 
-               elseif (igas .eq. igas_CO2) then
-	        call interpolate_continuum('',igas_CO2,igas_CO2,'IR',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-	        do jgas=1,ngasmx
-                 if (jgas .eq. igas_H2) then
-		  call interpolate_continuum('',igas_CO2,igas_H2,'IR',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-	         elseif (jgas .eq. igas_CH4) then
-		  call interpolate_continuum('',igas_CO2,igas_CH4,'IR',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-                 endif
-                enddo
-               endif
 	       
-	       DCONT = DCONT + dtemp
+	         DCONT = DCONT + dtemp
+		 
+               enddo ! jgas=1,ngasmx
 	       
 	     enddo ! igas=1,ngasmx
+	     
 	   else ! generic_continuum_database
+	   
             wn_cont = dble(wnoi(nw))
             T_cont  = dble(TMID(k))
Index: trunk/LMDZ.GENERIC/libf/phystd/optcv.F90
===================================================================
--- trunk/LMDZ.GENERIC/libf/phystd/optcv.F90	(revision 3788)
+++ trunk/LMDZ.GENERIC/libf/phystd/optcv.F90	(revision 3793)
@@ -195,8 +195,9 @@
   
   !     we ignore K=1...
+  
   do K=2,L_LEVELS
 
      do NW=1,L_NSPECTV
-
+     
         DRAYAER = TRAY(K,NW)
         !     DRAYAER is Tau RAYleigh scattering, plus AERosol opacity
@@ -222,58 +223,40 @@
               endif
 	     
-	      dtemp=0.0
-	      
-	      if (igas .eq. igas_N2) then
-	       call interpolate_continuum('',igas_N2,igas_N2,'VI',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-               do jgas=1,ngasmx
-                if (jgas .eq. igas_H2) then
-		 call interpolate_continuum('',igas_N2,igas_H2,'VI',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-                elseif (jgas .eq. igas_O2) then
-		 call interpolate_continuum('',igas_N2,igas_O2,'VI',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-                elseif (jgas .eq. igas_CH4) then
-		 call interpolate_continuum('',igas_N2,igas_CH4,'VI',nw,T_cont,p_cont,p_cont,dtemp,.false.)
+              do jgas=1,ngasmx
+                if(gfrac(jgas).eq.-1)then ! variable
+                  p_cross  = dble(PMID(k)*scalep*QVAR(k)) ! qvar = mol/mol
+                elseif(varspec) then
+                  p_cross  = dble(PMID(k)*scalep*FRACVAR(jgas,k)*(1.-QVAR(k)))
+                else
+                  p_cross  = dble(PMID(k)*scalep*gfrac(jgas)*(1.-QVAR(k)))
                 endif
-               enddo
-              elseif (igas .eq. igas_O2) then
-	       call interpolate_continuum('',igas_O2,igas_O2,'VI',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-	       do jgas=1,ngasmx
-                if (jgas .eq. igas_CO2) then
-		 call interpolate_continuum('',igas_CO2,igas_O2,'VI',nw,T_cont,p_cont,p_cont,dtemp,.false.)
+	       
+                dtemp=0.0
+
+	        if ( ((igas .eq. igas_N2) .and. (jgas .eq. igas_N2)) .or.    &
+		     ((igas .eq. igas_N2) .and. (jgas .eq. igas_H2)) .or.    &
+		     ((igas .eq. igas_N2) .and. (jgas .eq. igas_O2)) .or.    &
+		     ((igas .eq. igas_N2) .and. (jgas .eq. igas_CH4)) .or.   &
+		     ((igas .eq. igas_O2) .and. (jgas .eq. igas_O2)) .or.    &
+		     ((igas .eq. igas_CO2) .and. (jgas .eq. igas_O2)) .or.   &
+		     ((igas .eq. igas_H2) .and. (jgas .eq. igas_H2)) .or.    &
+		     ((igas .eq. igas_H2) .and. (jgas .eq. igas_CH4)) .or.   &
+		     ((igas .eq. igas_H2) .and. (jgas .eq. igas_He)) .or.    &
+		     ((igas .eq. igas_CH4) .and. (jgas .eq. igas_CH4)) .or.  &
+		     ((igas .eq. igas_H2O) .and. (jgas .eq. igas_H2O)) .or.  &
+		     ((igas .eq. igas_H2O) .and. (jgas .eq. igas_N2)) .or.   &
+		     ((igas .eq. igas_H2O) .and. (jgas .eq. igas_O2)) .or.   &
+		     ((igas .eq. igas_H2O) .and. (jgas .eq. igas_CO2)) .or.  &
+		     ((igas .eq. igas_CO2) .and. (jgas .eq. igas_CO2)) .or.  &
+		     ((igas .eq. igas_CO2) .and. (jgas .eq. igas_H2)) .or.   &
+		     ((igas .eq. igas_CO2) .and. (jgas .eq. igas_CH4)) ) then
+
+                  call interpolate_continuum('',igas,jgas,'VI',nw,T_cont,p_cont,p_cross,dtemp,.false.)
+
 	        endif
-               enddo
-              elseif (igas .eq. igas_H2) then
-	       call interpolate_continuum('',igas_H2,igas_H2,'VI',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-               do jgas=1,ngasmx
-                if (jgas .eq. igas_CH4) then
-		 call interpolate_continuum('',igas_H2,igas_CH4,'VI',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-                elseif (jgas .eq. igas_He) then
-		 call interpolate_continuum('',igas_H2,igas_He,'VI',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-                endif
-               enddo	 
-              elseif (igas .eq. igas_CH4) then
-	       call interpolate_continuum('',igas_CH4,igas_CH4,'VI',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-              elseif (igas .eq. igas_H2O) then
-	       call interpolate_continuum('',igas_H2O,igas_H2O,'VI',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-               do jgas=1,ngasmx
-                if (jgas .eq. igas_N2) then
-		 call interpolate_continuum('',igas_H2O,igas_N2,'VI',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-                elseif (jgas .eq. igas_O2) then
-		 call interpolate_continuum('',igas_H2O,igas_O2,'VI',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-                elseif (jgas .eq. igas_CO2) then
-		 call interpolate_continuum('',igas_H2O,igas_CO2,'VI',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-                endif
-               enddo	 
-              elseif (igas .eq. igas_CO2) then
-	       call interpolate_continuum('',igas_CO2,igas_CO2,'VI',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-	       do jgas=1,ngasmx
-                if (jgas .eq. igas_H2) then
-		 call interpolate_continuum('',igas_CO2,igas_H2,'VI',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-	        elseif (jgas .eq. igas_CH4) then
-		 call interpolate_continuum('',igas_CO2,igas_CH4,'VI',nw,T_cont,p_cont,p_cont,dtemp,.false.)
-                endif
-               enddo
-              endif
-	       
-	      DCONT = DCONT + dtemp
+		
+	        DCONT = DCONT + dtemp
+		
+	      enddo ! jgas=1,ngasmx
 	       
 	    enddo ! igas=1,ngasmx
@@ -456,5 +439,4 @@
   end do
 
-
   !=======================================================================
   !     Now the full treatment for the layers, where besides the opacity
