From 3d0333f36480b7f72f311625ada27b49c67bc623 Mon Sep 17 00:00:00 2001
From: Gaelle Tanguy <gaelle.tanguy@meteo.fr>
Date: Thu, 10 Apr 2014 14:29:46 +0000
Subject: [PATCH] Gaelle 10/04/2014 : add LCOUPLING

---
 src/MNH/ini_segn.f90       |  40 +++-
 src/MNH/modd_conf.f90      |   4 +
 src/MNH/prep_real_case.f90 |  18 +-
 src/MNH/write_lfin.f90     | 380 +------------------------------------
 4 files changed, 51 insertions(+), 391 deletions(-)

diff --git a/src/MNH/ini_segn.f90 b/src/MNH/ini_segn.f90
index a29d8c476..5f68feb68 100644
--- a/src/MNH/ini_segn.f90
+++ b/src/MNH/ini_segn.f90
@@ -231,6 +231,7 @@ LOGICAL            :: GPASPOL
 LOGICAL            :: GFOREFIRE
 #endif
 LOGICAL            :: GCONDSAMP
+LOGICAL            :: GCHTRANS 
                                                   ! These variables
                                                   ! are used to locally store 
 INTEGER            :: ISV                         ! the value read in DESFM 
@@ -339,6 +340,41 @@ IF (CPROGRAM=='MESONH') THEN
   HINIFILE=CINIFILE_n
   CALL FMOPEN_ll(HINIFILE,'READ',HLUOUT,0,2,NVERB,ININAR,IRESP)
 END IF
+
+IF (CPROGRAM=='MESONH') THEN
+  IF (IMASDEV > 49) THEN
+    YRECFM='COUPLING' 
+    YDIR='--'
+    CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,LCOUPLING,IGRID,ILENCH,YCOMMENT,IRESP)
+    IF (LCOUPLING) THEN
+    WRITE(ILUOUT,*) 'Error with the initial file'
+    WRITE(ILUOUT,*) 'The file',HINIFILE,' was created with LCOUPLING=.TRUE.'
+    WRITE(ILUOUT,*) 'You can not use it as initial file, only as coupling file'
+    WRITE(ILUOUT,*) 'Run PREP_REAL_CASE with LCOUPLING=.FALSE.'
+    !callabortstop
+    CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP)
+    CALL ABORT
+    ENDIF
+  ENDIF
+END IF
+
+IF (CPROGRAM=='SPAWN ') THEN
+  IF (IMASDEV > 49) THEN
+    YRECFM='COUPLING' 
+    YDIR='--'
+    CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,LCOUPLING,IGRID,ILENCH,YCOMMENT,IRESP)
+    IF (LCOUPLING) THEN
+    WRITE(ILUOUT,*) 'Error with the initial file'
+    WRITE(ILUOUT,*) 'The file',HINIFILE,' was created with LCOUPLING=.TRUE.'
+    WRITE(ILUOUT,*) 'You can not use it as initial file, only as coupling file'
+    WRITE(ILUOUT,*) 'Run PREP_REAL_CASE with LCOUPLING=.FALSE.'
+    !callabortstop
+    CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP)
+    CALL ABORT
+    ENDIF
+  ENDIF
+END IF
+
 !
 !-------------------------------------------------------------------------------
 !
@@ -405,7 +441,7 @@ YDESFM=TRIM(ADJUSTL(HINIFILE))//'.des'
 CALL READ_DESFM_n(KMI,YDESFM,HLUOUT,YCONF,GFLAT,GUSERV,GUSERC,              &
                 GUSERR,GUSERI,GUSECI,GUSERS,GUSERG,GUSERH,GUSECHEM,GUSECHAQ,&
                 GUSECHIC,GCH_PH,GCH_CONV_LINOX,GSALT,GDEPOS_SLT,GDUST,      &
-                GDEPOS_DST, GORILAM,  &
+                GDEPOS_DST, GCHTRANS, GORILAM,                              &
                 GDEPOS_AER, GLG, GPASPOL, &
 #ifdef MNH_FOREFIRE
                 GFOREFIRE, &
@@ -425,7 +461,7 @@ CALL READ_DESFM_n(KMI,YDESFM,HLUOUT,YCONF,GFLAT,GUSERV,GUSERC,              &
 CALL READ_EXSEG_n(KMI,YEXSEG,HLUOUT,YCONF,GFLAT,GUSERV,GUSERC,              &
                 GUSERR,GUSERI,GUSECI,GUSERS,GUSERG,GUSERH,GUSECHEM,         &
                 GUSECHAQ,GUSECHIC,GCH_PH,                                   &
-                GCH_CONV_LINOX,GSALT,GDEPOS_SLT,GDUST,GDEPOS_DST,           &
+                GCH_CONV_LINOX,GSALT,GDEPOS_SLT,GDUST,GDEPOS_DST,GCHTRANS,  &
                 GORILAM,GDEPOS_AER,GLG,GPASPOL, &
 #ifdef MNH_FOREFIRE
                 GFOREFIRE, &
diff --git a/src/MNH/modd_conf.f90 b/src/MNH/modd_conf.f90
index d3c45c75d..bd2bd2abd 100644
--- a/src/MNH/modd_conf.f90
+++ b/src/MNH/modd_conf.f90
@@ -48,6 +48,8 @@
 !!      P. Jabouille                  26/06/01   lagrangian variables
 !!      V. Masson                     09/07/01   add LNEUTRAL switch
 !!      P. Jabouille                  18/04/02   add NBUGFIX and CBIBUSER
+!!      C. Lac                        01/04/14   add LCHECK     
+!!      G. Tanguy                     01/04/14   add LCOUPLING
 !!
 !-------------------------------------------------------------------------------
 !
@@ -117,6 +119,8 @@ LOGICAL,SAVE      :: LNOMIXLG    ! to use turbulence for lagrangian variables
 LOGICAL,SAVE      :: LNEUTRAL ! True if ref. theta field is uniform
 !
 LOGICAL,SAVE      :: LCPL_AROME  ! true if coupling file are issued from AROME
+LOGICAL,SAVE      :: LCOUPLING   ! true if coupling file (and not intial file)
+                                 ! (with LCOUPLING=T in PREP_REAL_CASE)
 !
 LOGICAL,SAVE      :: LCHECK ! To test reproducibility
 !
diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90
index 22aaa363e..67309c811 100644
--- a/src/MNH/prep_real_case.f90
+++ b/src/MNH/prep_real_case.f90
@@ -414,7 +414,6 @@ USE MODI_MNHREAD_ZS_DUMMY_n
 USE MODI_MNHWRITE_ZS_DUMMY_n
 USE MODI_COMPARE_DAD 
 USE MODI_PREP_SURF_MNH
-USE MODI_ICE_ADJUST_BIS
 !
 USE MODD_CONF            ! declaration modules
 USE MODD_CONF_n
@@ -510,7 +509,7 @@ LOGICAL  :: LUSECHIC
 !              ------------------------
 !
 NAMELIST/NAM_REAL_CONF/ NVERB, CEQNSYS, CPRESOPT, LSHIFT, LDUMMY_REAL, &
-                        LRES, XRES, NITR
+                        LRES, XRES, NITR,LCOUPLING
 ! Filtering and balancing of the large-scale and radar tropical cyclone
 NAMELIST/NAM_HURR_CONF/ LFILTERING, CFILTERING,   &
 XLAMBDA, NK, XLATGUESS, XLONGUESS, XBOXWIND, XRADGUESS, NPHIL, NDIAG_FILT,   &
@@ -583,6 +582,7 @@ ELSE
 END IF
 !                             
 LCPL_AROME=.FALSE.
+LCOUPLING=.FALSE.
 !
 ! GSMONOPROC set by INITIO_ll
 ! NPROC not yet set (done by INI_PARA_ll later)
@@ -954,13 +954,6 @@ IF (ALLOCATED(XZSMT_LS)) DEALLOCATE(XZSMT_LS)
 !
 !-------------------------------------------------------------------------------
 !
-!
-!*      13.    MICROPHYSICAL ADJUSTMENT
-!              ------------------------
-!CALL ICE_ADJUST_BIS(XPABST,XTHT,XRT)
-!
-!-------------------------------------------------------------------------------
-!
 !*      13.    ANELASTIC CORRECTION
 !              --------------------
 !
@@ -971,13 +964,6 @@ ZDYN = ZTIME2 - ZTIME1
 !
 !-------------------------------------------------------------------------------
 !
-!*      13.    MICROPHYSICAL ADJUSTMENT
-!              ------------------------
-!
-!CALL ICE_ADJUST_BIS(XPABST,XTHT,XRT)
-!
-!-------------------------------------------------------------------------------
-!
 !*      14.    INITIALIZATION OF THE REMAINING PROGNOSTIC VARIABLES (COPIES)
 !              -------------------------------------------------------------
 !
diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90
index 17b33d299..00f7b613e 100644
--- a/src/MNH/write_lfin.f90
+++ b/src/MNH/write_lfin.f90
@@ -601,6 +601,12 @@ IGRID=0
 ILENCH=LEN(YCOMMENT)
 CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,LCPL_AROME,IGRID,ILENCH,YCOMMENT,IRESP)
 !
+YRECFM='COUPLING'
+YCOMMENT='Logical for coupling file'
+IGRID=0
+ILENCH=LEN(YCOMMENT)
+CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,LCOUPLING,IGRID,ILENCH,YCOMMENT,IRESP)
+!
 !*       1.4    Prognostic variables :
 !
 YDIR='XY'
@@ -949,6 +955,7 @@ IF (NSV >=1) THEN
     ILENCH=LEN(YCOMMENT)
     CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
                 YCOMMENT,IRESP)
+    JSA=JSA+1
   END DO
  END IF
 #endif
@@ -1279,379 +1286,6 @@ END IF
 CALL WRITE_LB_n(HFMFILE)
 !
 !
-IF (CSTORAGE_TYPE/='TT') THEN
-!
-!*       1.4.2  Time t:
-!   
-YRECFM='UT'
-YCOMMENT='X_Y_Z_U component of wind (m/s)'
-IGRID=2
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XUT,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='VT'
-YCOMMENT='X_Y_Z_V component of wind (m/s)'
-IGRID=3
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XVT,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='WT'
-YCOMMENT='X_Y_Z_vertical wind (m/s)'
-IGRID=4
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XWT,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-YRECFM='THT'
-YCOMMENT='X_Y_Z_potential temperature (K)'
-IGRID=1
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XTHT,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-IF(CTURB/='NONE') THEN
-  YRECFM='TKET'
-  YCOMMENT='X_Y_Z_Turbulent Kinetic Energy (M**2/S**2)'
-  IGRID=1
-  ILENCH=LEN(YCOMMENT)
-  CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XTKET,IGRID,ILENCH,YCOMMENT,IRESP)
-END IF
-!
-!
-YRECFM='PABST'
-YCOMMENT='X_Y_Z_ABSolute Pressure (Pa)'
-IGRID=1
-ILENCH=LEN(YCOMMENT)
-CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XPABST,IGRID,ILENCH,YCOMMENT,IRESP)
-!
-IF (NRR >=1) THEN
-IRR=0
-  IGRID=1                                    ! individually in file 
-  IF (LUSERV) THEN
-    IRR   = IRR+1 
-    YRECFM= 'RVT'
-    YCOMMENT='X_Y_Z_Vapor mixing Ratio (KG/KG)'
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XRT(:,:,:,IRR),IGRID,ILENCH,  &
-                YCOMMENT,IRESP)
-  END IF 
-  IF (LUSERC) THEN
-    IRR   = IRR+1 
-    YRECFM= 'RCT'
-    YCOMMENT='X_Y_Z_Cloud mixing Ratio (KG/KG)'
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XRT(:,:,:,IRR),IGRID,ILENCH,  &
-                YCOMMENT,IRESP)
-  END IF
-  IF (LUSERR) THEN
-    IRR   = IRR+1 
-    YRECFM= 'RRT'
-    YCOMMENT='X_Y_Z_Rain mixing Ratio (KG/KG)'
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XRT(:,:,:,IRR),IGRID,ILENCH,  &
-                YCOMMENT,IRESP)
-  END IF 
-  IF (LUSERI) THEN
-    IRR   = IRR+1 
-    YRECFM= 'RIT'
-    YCOMMENT='X_Y_Z_Ice mixing Ratio (KG/KG)'
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XRT(:,:,:,IRR),IGRID,ILENCH,  &
-                YCOMMENT,IRESP)
-    IF ( CPROGRAM == 'MESONH' .AND. CCLOUD(1:3) == 'ICE') THEN
-      YRECFM= 'CIT'
-      YCOMMENT='X_Y_Z_Cloud Ice concentration (/M3)'
-      ILENCH=LEN(YCOMMENT)
-      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XCIT(:,:,:),   IGRID,ILENCH,  &
-                  YCOMMENT,IRESP)
-    END IF
- END IF 
-  IF (LUSERS) THEN
-    IRR   = IRR+1 
-    YRECFM= 'RST'
-    YCOMMENT='X_Y_Z_Snow mixing Ratio (KG/KG)'
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XRT(:,:,:,IRR),IGRID,ILENCH,  &
-                YCOMMENT,IRESP)
-  END IF
-  IF (LUSERG) THEN
-    IRR   = IRR+1 
-    YRECFM= 'RGT'
-    YCOMMENT='X_Y_Z_Graupel mixing Ratio (KG/KG)'
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XRT(:,:,:,IRR),IGRID,ILENCH,  &
-                YCOMMENT,IRESP)
-  END IF 
-  IF (LUSERH) THEN
-    IRR   = IRR+1 
-    YRECFM= 'RHT'
-    YCOMMENT='X_Y_Z_Hail mixing Ratio (KG/KG)'
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XRT(:,:,:,IRR),IGRID,ILENCH,  &
-                YCOMMENT,IRESP)
-  END IF 
-END IF
-!
-IF (NSV >=1) THEN
-  IGRID=1                                       ! individually in the file
-  ! User scalar variables
-  DO JSV = 1,NSV_USER
-    WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV
-    WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (KG/KG)'
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
-  END DO
-  ! microphysical C2R2 scheme scalar variables
-  DO JSV = NSV_C2R2BEG,NSV_C2R2END
-    YRECFM=TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))//'T'
-    WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (KG/KG)'
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
-  END DO
-  ! microphysical C3R5 scheme additional scalar variables
-  DO JSV = NSV_C1R3BEG,NSV_C1R3END
-    YRECFM=TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))//'T'
-    WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (/M3)'
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
-  END DO
-  ! electrical scalar variables
-  DO JSV = NSV_ELECBEG,NSV_ELECEND
-    YRECFM=TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))//'T'
-    WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (C/m3)'
-    ILENCH=LEN(YCOMMENT)
-    ZWORK3D(:,:,:) = 0.
-    ZWORK3D(:,:,:) = XSVT(:,:,:,JSV) * XRHODREF(:,:,:) ! C/kg --> C/m3
-    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,ZWORK3D(:,:,:),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
-  END DO
-
-  ! Passive scalar variables        
- IF (LPASPOL) THEN
-  DO JSV = NSV_PPBEG,NSV_PPEND
-    WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV
-    WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (KG/KG)'
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
-  END DO
- END IF
-#ifdef MNH_FOREFIRE
- IF (LFOREFIRE) THEN
-  DO JSV = NSV_FFBEG,NSV_FFEND
-    WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV
-    WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (KG/KG)'
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
-  END DO
- END IF
-#endif
-  ! Conditional sampling variables        
- IF (LCONDSAMP) THEN
-  DO JSV = NSV_CSBEG,NSV_CSEND
-    WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV
-    WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (KG/KG)'
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
-  END DO
- END IF
-  ! chemical scalar variables
-  IF (LUSECHEM) THEN
-    DO JSV = NSV_CHEMBEG,NSV_CHEMEND
-      YRECFM=TRIM(UPCASE(CNAMES(JSV-NSV_CHEMBEG+1)))//'T'
-      WRITE(YCOMMENT,'(A6,A3,I3.3,A)') 'X_Y_Z_','SVT',JSV,' (ppp)'
-      ILENCH=LEN(YCOMMENT)
-      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
-                  YCOMMENT,IRESP)
-    END DO
-    IF (LUSECHIC) THEN
-      DO JSV = NSV_CHICBEG,NSV_CHICEND
-        YRECFM=TRIM(UPCASE(CICNAMES(JSV-NSV_CHICBEG+1)))//'T'
-        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)'
-        ILENCH=LEN(YCOMMENT)
-        CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
-                    YCOMMENT,IRESP)
-      END DO
-    ENDIF
-    IF (LUSECHAQ.AND.LCH_PH) THEN  ! pH values in cloud
-      YRECFM = 'PHC'
-      YCOMMENT='X_Y_Z_PHC'
-      ILENCH=LEN(YCOMMENT)
-      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XPHC,IGRID,ILENCH,YCOMMENT,IRESP)
-      IF (NRR>=3) THEN
-        YRECFM = 'PHR'
-        YCOMMENT='X_Y_Z_PHR'
-        ILENCH=LEN(YCOMMENT)
-        CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XPHR,IGRID,ILENCH,YCOMMENT,IRESP)
-      ENDIF
-    ENDIF
-   ! linox scalar variables
-  ELSE IF (LCH_CONV_LINOX) THEN
-    DO JSV = NSV_LNOXBEG,NSV_LNOXEND
-      YRECFM='LINOXT'
-      WRITE(YCOMMENT,'(A6,A3,I3.3,A)') 'X_Y_Z_','SVT',JSV,' (ppp)'
-      ILENCH=LEN(YCOMMENT)
-      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH, &
-                  YCOMMENT,IRESP)
-    END DO
-  ENDIF  
-  ! aerosol scalar variables
-  IF (LORILAM) THEN
-    IF ((CPROGRAM == 'REAL  ').AND.(NSV_AER > 1).AND.(IMI==1))  &
-      CALL CH_AER_REALLFI_n(XSVT(:,:,:,NSV_AERBEG:NSV_AEREND),XSVT(:,:,:,NSV_CHEMBEG-1+JP_CH_CO), XRHODREF)
-    IF ((CPROGRAM == 'IDEAL ').AND.(NSV_AER > 1).AND.(IMI==1))  &
-      CALL CH_AER_REALLFI_n(XSVT(:,:,:,NSV_AERBEG:NSV_AEREND),XSVT(:,:,:,NSV_CHEMBEG-1+JP_CH_CO),  XRHODREF)
-    DO JSV = NSV_AERBEG,NSV_AEREND
-      YRECFM=TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))//'T'
-      WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)'
-      ILENCH=LEN(YCOMMENT)
-      CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
-                  YCOMMENT,IRESP)
-    END DO
-    IF (LDEPOS_AER(IMI)) THEN
-      DO JSV = NSV_AERDEPBEG,NSV_AERDEPEND
-        YRECFM=TRIM(CDEAERNAMES(JSV-NSV_AERDEPBEG+1))//'T'
-        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)'
-        ILENCH=LEN(YCOMMENT)
-        CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,  &
-                    YCOMMENT,IRESP)
-      END DO   ! Loop on aq dust scalar variables        
-    ENDIF
-  END IF
-   ! dust scalar variables
-  IF (LDUST) THEN
-    IF ((CPROGRAM == 'REAL  ').AND.(NSV_DST > 1).AND.(IMI==1).AND.(LDSTINIT)) &
-      CALL DUSTLFI_n(XSVT(:,:,:,NSV_DSTBEG:NSV_DSTEND), XRHODREF)
-    IF ((CPROGRAM == 'IDEAL ').AND.(NSV_DST > 1).AND.(IMI==1)) &
-      CALL DUSTLFI_n(XSVT(:,:,:,NSV_DSTBEG:NSV_DSTEND), XRHODREF)
-    !At this point, we have the tracer array in order of importance, i.e.
-    !if mode 2 is most important it will occupy place 1-3 of XSVM  
-    IF ((CPROGRAM == 'REAL  ').OR.(CPROGRAM == 'IDEAL ')) THEN
-      ! In this case CDUSTNAMES is not allocated. We will use YPDUST_INI,
-      !but remember that this variable does not follow JPDUSTORDER
-      IMOMENTS = INT(NSV_DSTEND - NSV_DSTBEG+1)/NMODE_DST  
-      !Should equal 3 at this point
-      IF (IMOMENTS > 3) THEN
-        WRITE(ILUOUT,*) 'Error in write_lfin: number of moments must be 3'
-        WRITE(ILUOUT,*) NSV_DSTBEG, NSV_DSTEND,NMODE_DST,IMOMENTS
- !callabortstop
-        CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-        CALL ABORT
-        STOP
-      END IF
-      DO JMODE=1, NMODE_DST
-        DO JMOM = 1, IMOMENTS
-          !Index from which names are picked
-          ISV_NAME_IDX = (JPDUSTORDER(JMODE)-1)*IMOMENTS + JMOM 
-          !Index which counts in the XSVT
-          JSV = (JMODE-1)*IMOMENTS      & !Number of moments previously counted
-               + JMOM                   & !Number of moments in this mode
-               + (NSV_DSTBEG -1)          !Previous list of tracers 
-          YRECFM = TRIM(YPDUST_INI(ISV_NAME_IDX))//'T'  !The refererence which will be written to file
-          WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)'
-          ILENCH=LEN(YCOMMENT)
-          CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH, &
-                      YCOMMENT,IRESP)
-        END DO ! Loop on moments
-      END DO   ! Loop on modes
-      !
-    ELSE 
-      ! We are in the subprogram MESONH, CDUSTNAMES are allocated and are 
-      !in the same order as the variables in XSVM (i.e. following JPDUSTORDER)
-      DO JSV = NSV_DSTBEG,NSV_DSTEND
-        YRECFM=TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))//'T'
-        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)'
-        ILENCH=LEN(YCOMMENT)
-        CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,  &
-                    YCOMMENT,IRESP)
-      END DO   ! Loop on dust scalar variables
-    END IF 
-  ! Loop on aq dust scalar variables
-    IF (LDEPOS_DST(IMI)) THEN
-      DO JSV = NSV_DSTDEPBEG,NSV_DSTDEPEND
-        YRECFM=TRIM(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))//'T'
-        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)'
-        ILENCH=LEN(YCOMMENT)
-        CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,  &
-                    YCOMMENT,IRESP)
-      END DO   ! Loop on aq dust scalar variables        
-    ENDIF
-  ENDIF  
-  !
-   ! sea salt scalar variables
-  IF (LSALT) THEN
-    IF ((CPROGRAM == 'REAL  ').AND.(NSV_SLT > 1).AND.(IMI==1)) &
-      CALL SALTLFI_n(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND), XRHODREF)
-    IF ((CPROGRAM == 'IDEAL ').AND.(NSV_SLT > 1).AND.(IMI==1)) &
-      CALL SALTLFI_n(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND), XRHODREF)
-    !At this point, we have the tracer array in order of importance, i.e.
-    !if mode 2 is most important it will occupy place 1-3 of XSVM  
-    IF ((CPROGRAM == 'REAL  ').OR.(CPROGRAM == 'IDEAL ')) THEN
-      ! In this case CSALTNAMES is not allocated. We will use YPSALT_INI,
-      !but remember that this variable does not follow JPSALTORDER
-      IMOMENTS = INT(NSV_SLTEND - NSV_SLTBEG+1)/NMODE_SLT  
-      !Should equal 3 at this point
-      IF (IMOMENTS .NE. 3) THEN
-        WRITE(ILUOUT,*) 'Error in write_lfin: number of moments must be 3'
-        WRITE(ILUOUT,*) NSV_SLTBEG, NSV_SLTEND,NMODE_SLT,IMOMENTS
- !callabortstop
-        CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-        CALL ABORT
-        STOP
-      END IF
-      DO JMODE=1, NMODE_SLT
-        DO JMOM = 1, IMOMENTS
-          !Index from which names are picked
-          ISV_NAME_IDX = (JPSALTORDER(JMODE)-1)*IMOMENTS + JMOM 
-          !Index which counts in the XSVT
-          JSV = (JMODE-1)*IMOMENTS      & !Number of moments previously counted
-               + JMOM                   & !Number of moments in this mode
-               + (NSV_SLTBEG -1)          !Previous list of tracers 
-          YRECFM = TRIM(YPSALT_INI(ISV_NAME_IDX))//'T'  !The refererence which will be written to file
-          WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)'
-          ILENCH=LEN(YCOMMENT)
-          CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH, &
-                      YCOMMENT,IRESP)
-        END DO ! Loop on moments
-      END DO   ! Loop on modes
-      !
-    ELSE 
-      ! We are in the subprogram MESONH, CSALTNAMES are allocated and are 
-      !in the same order as the variables in XSVM (i.e. following JPSALTORDER)
-      DO JSV = NSV_SLTBEG,NSV_SLTEND
-        YRECFM=TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))//'T'
-        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)'
-        ILENCH=LEN(YCOMMENT)
-        CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,  &
-                    YCOMMENT,IRESP)
-      END DO   ! Loop on sea salt scalar variables
-    END IF 
-    IF (LDEPOS_SLT(IMI)) THEN
-      DO JSV = NSV_SLTDEPBEG,NSV_SLTDEPEND
-        YRECFM=TRIM(CDESLTNAMES(JSV-NSV_SLTDEPBEG+1))//'T'
-        WRITE(YCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)'
-        ILENCH=LEN(YCOMMENT)
-        CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,  &
-                    YCOMMENT,IRESP)
-      END DO   ! Loop on aq dust scalar variables        
-    ENDIF
-  ENDIF  
-  !
-   ! lagrangian variables
-  DO JSV = NSV_LGBEG,NSV_LGEND
-    YRECFM=TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T'
-    WRITE(YCOMMENT,'(A6,A3,I3.3,A)') 'X_Y_Z_','SVT',JSV,' (M)'
-    ILENCH=LEN(YCOMMENT)
-    CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,XSVT(:,:,:,JSV),IGRID,ILENCH,    &
-                YCOMMENT,IRESP)
-  END DO
-END IF
-!
-END IF ! test on CSTORAGE_TYPE
-!
 YRECFM='DRYMASST'
 YDIR='--'
 YCOMMENT='Total Dry Mass (KG)'
-- 
GitLab