diff --git a/src/MNH/ini_segn.f90 b/src/MNH/ini_segn.f90 index a29d8c476a349f154f9f4597a693b8e575e775af..5f68feb68573f824f543e7915cdcea94d3aa8b39 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 d3c45c75d071ac5e8b5d4e50d3739050fbc2efc0..bd2bd2abd21ef19f83ed3ae08ae8bad5c939d8e9 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 22aaa363e3c459b46c4dbe994be1fce038b94f26..67309c8117a77c867fb4fc1beab3c1cbc929b9c8 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 17b33d299aa267e87f10925c39d5b4cc3bd75a70..00f7b613ea341f90f600b755ef294b5b2604c662 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)'