diff --git a/tools/diachro/src/DIAPRO/caresolv.f90 b/tools/diachro/src/DIAPRO/caresolv.f90
index 44800d0534f97ae4a5b1626750b268761cf15fa4..2adabcfaef5a7f7d0687abb8912e52872a11bcee 100644
--- a/tools/diachro/src/DIAPRO/caresolv.f90
+++ b/tools/diachro/src/DIAPRO/caresolv.f90
@@ -326,6 +326,7 @@ INTEGER   ::   INDNPHCOL6,INDNPHCOL7,INDNPHCOL8
 INTEGER   ::   INDNPHSTY1,INDNPHSTY2,INDNPHSTY3,INDNPHSTY4,INDNPHSTY5
 INTEGER   ::   INDNPHSTY6,INDNPHSTY7,INDNPHSTY8
 INTEGER   ::   INDLPHCOLUSER,INDLPHSTYUSER
+INTEGER   ::   INDLPATCH
 #ifdef RHODES
 INTEGER          :: ISTAF
 #endif
@@ -341,7 +342,7 @@ INTEGER   ::   INBV, IND9999
 INTEGER   ::   INDQ1,INDQ2
 INTEGER,DIMENSION(30,100) :: IIMIN
 !!!!!!!!!!!!JOEL!!!!!!!!!!
-INTEGER,DIMENSION(602)     :: IT
+INTEGER,DIMENSION(603)     :: IT
 REAL,DIMENSION(100) :: ZISOLEV
 REAL      ::   ZISO, ZX, ZY
 LOGICAl   ::   GXI=.FALSE., GXJ=.FALSE.
@@ -1168,6 +1169,7 @@ INDL90TITYT=INDEX(YCARIN,'L90TITYT')
 INDL90TITYM=INDEX(YCARIN,'L90TITYM')
 INDL90TITYB=INDEX(YCARIN,'L90TITYB')
 !
+INDLPATCH=INDEX(YCARIN,'LPATCH')
 if(nverbia >0)then
   print *,' ***caresolv AV CARMEMORY'
 endif
@@ -1307,7 +1309,7 @@ endif
    INDCVARNPV11+INDCVARNPV12+INDCVARNPV13+INDCVARNPV14+INDCVARNPV15+&
    INDL90TITYT+INDL90TITYM+INDL90TITYB+&
    INDLVARNPHUSER + INDCVARNPH1+INDCVARNPH2+INDCVARNPH3+INDCVARNPH4+&
-   INDCVARNPH5+ INDCVARNPH6+INDCVARNPH7+INDCVARNPH8
+   INDCVARNPH5+ INDCVARNPH6+INDCVARNPH7+INDCVARNPH8+INDLPATCH
 !  print *,' ***caresolv INDPARTIEL D ',INDPARTIEL
 !  
    IF(INDPARTIEL + &
@@ -2166,6 +2168,10 @@ ENDIF
 IF(INDL90TITYB /= 0)THEN
   CALL RESOLVL(YCARIN(1:LEN_TRIM(YCARIN)),INDL90TITYB,L90TITYB)
 ENDIF
+IF(INDLPATCH /= 0)THEN
+  CALL RESOLVL(YCARIN(1:LEN_TRIM(YCARIN)),INDLPATCH,LPATCH)
+ENDIF
+
 !!! NOV 2009
 IF(NVERBIA > 0)THEN
 print *,' CARESOLV LDEFCV2,LDEFCV2LL,LDEFCV2IND,LDEFCV2CC ',LDEFCV2,LDEFCV2LL,LDEFCV2IND,LDEFCV2CC
@@ -4550,7 +4556,7 @@ IT(592)=INDCVARNPH4; IT(593)=INDCVARNPH5; IT(594)=INDCVARNPH6
 IT(594)=INDCVARNPH7; IT(596)=INDCVARNPH8;
 IT(597)=INDXPOSTITYT; IT(598)=INDXPOSTITYM;IT(599)=INDXPOSTITYB
 IT(600)=INDXYPOSTITYT; IT(601)=INDXYPOSTITYM;IT(602)=INDXYPOSTITYB
-
+IT(603)=INDLPATCH
 DO J=1,SIZE(IT)
   IF(IT(J) /=0 )THEN
     INDIM=MIN(INDIM,IT(J))
@@ -4560,7 +4566,11 @@ if(nverbia >0)then
   print *,'*** CARESOLV INDIM ',INDIM
 endif
 
-INDP = INDEX(YCARIN,'_P_')
+IF (LPATCH) THEN
+  INDP = 0
+ELSE
+  INDP = INDEX(YCARIN,'_P_')
+ENDIF
 INDT = INDEX(YCARIN,'_T_')
 INDK = INDEX(YCARIN,'_K_')
 INDZ = INDEX(YCARIN,'_Z_')
@@ -4835,7 +4845,11 @@ ELSE
     CALL EXTRACT_AND_OPEN_FILES(YCARIN(1:LEN_TRIM(YCARIN)),YCAROUT)
     ENDIF
     NFILESCUR(J)=NUMFILECUR
-    INDP = INDEX(YCARIN,'_P_')
+    IF (LPATCH) THEN
+      INDP = 0
+    ELSE
+      INDP = INDEX(YCARIN,'_P_')
+    ENDIF
     INDT = INDEX(YCARIN,'_T_')
     INDK = INDEX(YCARIN,'_K_')
     INDZ = INDEX(YCARIN,'_Z_')