Skip to content
Snippets Groups Projects
Commit f2c4480a authored by CHABOUREAU Jean-Pierre's avatar CHABOUREAU Jean-Pierre
Browse files

Jean-Pierre 26/02/2024: add wind and cloud variables, and replace negative values by XFILLVALUE

parent 5d56a9f3
Branches
Tags
No related merge requests found
...@@ -46,12 +46,6 @@ SUBROUTINE INI_COMPUTE_R00() ...@@ -46,12 +46,6 @@ SUBROUTINE INI_COMPUTE_R00()
DO WHILE (LEN_TRIM(CFILES(JF))/=0) DO WHILE (LEN_TRIM(CFILES(JF))/=0)
JF=JF+1 JF=JF+1
END DO END DO
!
IF (JF/=1) THEN
IF (CINIFILE==CFILES(JF-1)) THEN
CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'INI_COMPUTE_R00', 'initial file not treated' )
END IF
END IF
! !
! !
!* 2.0 FIND THE FILE TO BE TREATED AND THE INIT-SV FILES !* 2.0 FIND THE FILE TO BE TREATED AND THE INIT-SV FILES
...@@ -66,12 +60,11 @@ SUBROUTINE INI_COMPUTE_R00() ...@@ -66,12 +60,11 @@ SUBROUTINE INI_COMPUTE_R00()
END IF END IF
END DO END DO
! !
IF ( IFILECUR == 0) CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'COMPUTE_R00', 'problem with CINIFILE:' // TRIM(CINIFILE) )
! !
! Search the number of the files(NFILES), where the Lagrangian tracers ! Search the number of the files(NFILES), where the Lagrangian tracers
!have been reinitialized !have been reinitialized
NFILES=0 NFILES=0
DO JFILECUR=IFILECUR+1,100 DO JFILECUR=IFILECUR,100
IF (LEN_TRIM(CFILES(JFILECUR)) /= 0) THEN IF (LEN_TRIM(CFILES(JFILECUR)) /= 0) THEN
NFILES= NFILES +1 NFILES= NFILES +1
NBRFILES(NFILES)=JFILECUR ! contains the number of the files where NBRFILES(NFILES)=JFILECUR ! contains the number of the files where
...@@ -131,20 +124,31 @@ SUBROUTINE COMPUTE_R00(TPFILE) ...@@ -131,20 +124,31 @@ SUBROUTINE COMPUTE_R00(TPFILE)
! P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list ! P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
! P. Wautelet 11/04/2019: bugfix: nullify TZTRACFILE when appropriate ! P. Wautelet 11/04/2019: bugfix: nullify TZTRACFILE when appropriate
! P. Wautelet 15/02/2024: add time dimension for Lagrangian trajectories ! P. Wautelet 15/02/2024: add time dimension for Lagrangian trajectories
! J.-P. Chaboureau 26/02/2024: add thetae, wind and cloud variables,
!! and replace negative values by XFILLVALUE
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------
! !
!* 0. DECLARATIONS !* 0. DECLARATIONS
! ------------ ! ------------
! !
USE MODD_CONF USE MODD_CONF
USE MODD_CONF_n, ONLY: LUSERV, LUSERC, LUSERI
USE MODD_CST, ONLY: XALPI, XBETAI, XCPD, XGAMI, XMD, XMV, XP00, XRD, XTT
USE MODD_GRID_n USE MODD_GRID_n
use modd_field, only: NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_LEVEL, NMNHDIM_TRAJ_TIME, tfieldmetadata, TYPEREAL use modd_field, only: NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_LEVEL, NMNHDIM_TRAJ_TIME, tfieldmetadata, TYPEREAL
USE MODD_FIELD_n USE MODD_FIELD_n
USE MODD_IO, ONLY: TFILEDATA USE MODD_IO, ONLY: TFILEDATA
USE MODD_LAGR_TRAJ USE MODD_LAGR_TRAJ
USE MODD_LUNIT_n USE MODD_LUNIT_n
USE MODD_NSV, ONLY: NSV_LGBEG, NSV_LGEND USE MODD_NSV, ONLY: NSV, NSV_LGBEG, NSV_LGEND, NSV_LIMA_CCN_FREE, NSV_LIMA_CCN_ACTI, &
NSV_LIMA_IFN_FREE, NSV_LIMA_IFN_NUCL, TSVLIST
USE MODD_PARAM_n, ONLY: CCLOUD
USE MODD_PARAM_LIMA, ONLY : NMOD_CCN, NMOD_IFN
USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES, CLIMA_COLD_CONC
USE MODD_PARAM_LIMA_WARM, ONLY: CLIMA_WARM_NAMES, CLIMA_WARM_CONC
USE MODD_PARAMETERS USE MODD_PARAMETERS
USE MODD_REF_n, ONLY: XRHODREF
USE MODE_THERMO, ONLY: SM_FOES
USE MODD_TYPE_DATE USE MODD_TYPE_DATE
USE MODD_VAR_ll USE MODD_VAR_ll
! !
...@@ -169,22 +173,33 @@ INTEGER :: NIU,NJU,NKU ...@@ -169,22 +173,33 @@ INTEGER :: NIU,NJU,NKU
INTEGER :: JFILECUR INTEGER :: JFILECUR
INTEGER :: JLOOP INTEGER :: JLOOP
REAL :: ZXOR,ZYOR,ZDX,ZDY REAL :: ZXOR,ZYOR,ZDX,ZDY
REAL, ALLOCATABLE, DIMENSION(:,:,:):: ZXI, ZYI, ZZI
REAL, ALLOCATABLE, DIMENSION(:,:,:):: ZX0, ZY0, ZZ0 ! origin of the REAL, ALLOCATABLE, DIMENSION(:,:,:):: ZX0, ZY0, ZZ0 ! origin of the
! particules colocated with the mesh-grid points read in the file ! particules colocated with the mesh-grid points read in the file
REAL, ALLOCATABLE, DIMENSION(:,:,:):: ZX00, ZY00, ZZ00, ZZL ! cumulative REAL, ALLOCATABLE, DIMENSION(:,:,:):: ZX00, ZY00, ZZ00, ZZL ! cumulative
! origin for more than one restart of the tracers ! origin for more than one restart of the tracers
REAL, ALLOCATABLE, DIMENSION(:,:,:):: ZTH0 ! same fields REAL, ALLOCATABLE, DIMENSION(:,:,:):: ZTH0, ZTHE0 ! same fields
! for Theta as for the coordinates of the origin ! for Theta and ThetaE as for the coordinates of the origin
REAL, ALLOCATABLE, DIMENSION(:,:,:):: ZRV0 ! same fields REAL, ALLOCATABLE, DIMENSION(:,:,:):: ZRV0, ZRH0 ! same fields
! for Rv and RH as for the coordinates of the origin
REAL, ALLOCATABLE, DIMENSION(:,:,:):: ZRC0, ZRI0 ! same fields
REAL, ALLOCATABLE, DIMENSION(:,:,:):: ZU0, ZV0, ZW0 ! same fields
REAL, ALLOCATABLE, DIMENSION(:,:,:,:):: ZCCN_FREE0, ZIFN_FREE0
! for Rv as for the coordinates of the origin ! for Rv as for the coordinates of the origin
REAL, ALLOCATABLE, DIMENSION(:,:,:):: ZWORK1,ZWORK2,ZWORK3 REAL, ALLOCATABLE, DIMENSION(:,:,:):: ZWORK1,ZWORK2,ZWORK3
TYPE(DATE_TIME) :: TDTCUR_START TYPE(DATE_TIME) :: TDTCUR_START
CHARACTER(LEN=NMNHNAMELGTMAX) :: YMNHNAME
CHARACTER(LEN=2) :: INDICE
LOGICAL :: GLFI, GNC4 LOGICAL :: GLFI, GNC4
LOGICAL :: GSTART LOGICAL :: GSTART
INTEGER :: JI,JJ,JK,JSV,ISV ! loop index
REAL :: ZXMAX,ZYMAX,ZZMAX ! domain extrema REAL :: ZXMAX,ZYMAX,ZZMAX ! domain extrema
REAL :: XFILLVALUE = 9.9692099683868690e+36
TYPE(TFIELDMETADATA) :: TZFIELD TYPE(TFIELDMETADATA) :: TZFIELD
TYPE(TFIELDMETADATA) :: TZFIELD_X0, TZFIELD_Y0, TZFIELD_Z0 TYPE(TFIELDMETADATA) :: TZFIELD_X0, TZFIELD_Y0, TZFIELD_Z0
TYPE(TFIELDMETADATA) :: TZFIELD_TH0, TZFIELD_RV0 TYPE(TFIELDMETADATA) :: TZFIELD_U0, TZFIELD_V0, TZFIELD_W0
TYPE(TFIELDMETADATA) :: TZFIELD_TH0, TZFIELD_RV0, TZFIELD_RH0, TZFIELD_THE0
TYPE(TFIELDMETADATA) :: TZFIELD_RC0, TZFIELD_RI0
TYPE(TFILEDATA),POINTER :: TZTRACFILE TYPE(TFILEDATA),POINTER :: TZTRACFILE
! !
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------
...@@ -207,6 +222,9 @@ NIU=SIZE(XZZ,1) ...@@ -207,6 +222,9 @@ NIU=SIZE(XZZ,1)
NJU=SIZE(XZZ,2) NJU=SIZE(XZZ,2)
NKU=SIZE(XZZ,3) NKU=SIZE(XZZ,3)
! !
ALLOCATE(ZXI(NIU,NJU,NKU))
ALLOCATE(ZYI(NIU,NJU,NKU))
ALLOCATE(ZZI(NIU,NJU,NKU))
ALLOCATE(ZX0(NIU,NJU,NKU)) ALLOCATE(ZX0(NIU,NJU,NKU))
ALLOCATE(ZY0(NIU,NJU,NKU)) ALLOCATE(ZY0(NIU,NJU,NKU))
ALLOCATE(ZZ0(NIU,NJU,NKU)) ALLOCATE(ZZ0(NIU,NJU,NKU))
...@@ -218,11 +236,25 @@ ALLOCATE(ZY00(NIU,NJU,NKU)) ...@@ -218,11 +236,25 @@ ALLOCATE(ZY00(NIU,NJU,NKU))
ALLOCATE(ZZ00(NIU,NJU,NKU)) ALLOCATE(ZZ00(NIU,NJU,NKU))
ALLOCATE(ZZL(NIU,NJU,NKU)) ALLOCATE(ZZL(NIU,NJU,NKU))
ALLOCATE(ZTH0(NIU,NJU,NKU)) ALLOCATE(ZTH0(NIU,NJU,NKU))
ALLOCATE(ZRV0(NIU,NJU,NKU)) ALLOCATE(ZU0(NIU,NJU,NKU))
ALLOCATE(ZV0(NIU,NJU,NKU))
ALLOCATE(ZW0(NIU,NJU,NKU))
IF (LUSERV) THEN
ALLOCATE(ZRV0(NIU,NJU,NKU))
ALLOCATE(ZRH0(NIU,NJU,NKU))
ALLOCATE(ZTHE0(NIU,NJU,NKU))
END IF
IF (LUSERC) ALLOCATE(ZRC0(NIU,NJU,NKU))
IF (LUSERI) ALLOCATE(ZRI0(NIU,NJU,NKU))
IF (CCLOUD == 'LIMA') THEN
ALLOCATE(ZCCN_FREE0(NIU,NJU,NKU,NMOD_CCN))
ALLOCATE(ZIFN_FREE0(NIU,NJU,NKU,NMOD_IFN))
END IF
ALLOCATE( TLAGR_DATES(NTRAJSTLG) ) ALLOCATE( TLAGR_DATES(NTRAJSTLG) )
! initial values ! initial values
!PW:BUG+TODO?: ne tient pas compte de JPHEXT! + utiliser XXHATM ET XDXHAT plutot que XXHAT?
ZXOR=0.5 * (XXHAT(2)+XXHAT(3)) ZXOR=0.5 * (XXHAT(2)+XXHAT(3))
ZYOR=0.5 * (XYHAT(2)+XYHAT(3)) ZYOR=0.5 * (XYHAT(2)+XYHAT(3))
ZDX= XXHAT(3)-XXHAT(2) ZDX= XXHAT(3)-XXHAT(2)
...@@ -246,6 +278,26 @@ ZX00(:,:,:)=XSVT(:,:,:,NSV_LGBEG)*1.E-3 ! ZX0 in km ...@@ -246,6 +278,26 @@ ZX00(:,:,:)=XSVT(:,:,:,NSV_LGBEG)*1.E-3 ! ZX0 in km
ZY00(:,:,:)=XSVT(:,:,:,NSV_LGBEG+1)*1.E-3 ! ZY0 in km ZY00(:,:,:)=XSVT(:,:,:,NSV_LGBEG+1)*1.E-3 ! ZY0 in km
ZZ00(:,:,:)=XSVT(:,:,:,NSV_LGEND)*1.E-3 ! ZZ0 in km ZZ00(:,:,:)=XSVT(:,:,:,NSV_LGEND)*1.E-3 ! ZZ0 in km
! !
DO JK=1,NKU
DO JJ=1,NJU
DO JI=1,NIU-1
ZXI(JI,JJ,JK)=0.5*(XXHAT(JI)+XXHAT(JI+1))
END DO
ZXI(NIU,JJ,JK)=2.*ZXI(NIU-1,JJ,JK)-ZXI(NIU-2,JJ,JK)
END DO
END DO
ZXI=ZXI*1.E-3
!
DO JK=1,NKU
DO JI=1,NIU
DO JJ=1,NJU-1
ZYI(JI,JJ,JK)=0.5*(XYHAT(JJ)+XYHAT(JJ+1))
END DO
ZYI(JI,NJU,JK)=2.*ZYI(JI,NJU-1,JK)-ZYI(JI,NJU-2,JK)
END DO
END DO
ZYI=ZYI*1.E-3
!
IF (L2D) THEN IF (L2D) THEN
WHERE ( ZX00<ZXOR .OR. ZX00>ZXMAX .OR. & WHERE ( ZX00<ZXOR .OR. ZX00>ZXMAX .OR. &
ZZ00>ZZMAX) ZZ00>ZZMAX)
...@@ -255,7 +307,7 @@ IF (L2D) THEN ...@@ -255,7 +307,7 @@ IF (L2D) THEN
ELSE ELSE
WHERE ( ZX00<ZXOR .OR. ZX00>ZXMAX .OR. & WHERE ( ZX00<ZXOR .OR. ZX00>ZXMAX .OR. &
ZY00<ZYOR .OR. ZY00>ZYMAX .OR. & ZY00<ZYOR .OR. ZY00>ZYMAX .OR. &
ZZ00>ZZMAX) ZZ00>ZZMAX)
ZX00=NSPVAL ZX00=NSPVAL
ZY00=NSPVAL ZY00=NSPVAL
ZZ00=NSPVAL ZZ00=NSPVAL
...@@ -315,18 +367,116 @@ TZFIELD_TH0 = TFIELDMETADATA( & ...@@ -315,18 +367,116 @@ TZFIELD_TH0 = TFIELDMETADATA( &
NDIMLIST = [ NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_LEVEL, NMNHDIM_TRAJ_TIME ] ) NDIMLIST = [ NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_LEVEL, NMNHDIM_TRAJ_TIME ] )
CALL IO_FIELD_CREATE( TPFILE, TZFIELD_TH0 ) CALL IO_FIELD_CREATE( TPFILE, TZFIELD_TH0 )
TZFIELD_RV0 = TFIELDMETADATA( & TZFIELD_U0 = TFIELDMETADATA( &
CMNHNAME = 'MRV_TRAJ', & CMNHNAME = 'UT_TRAJ', &
CSTDNAME = '', &
CLONGNAME = 'UT_TRAJ', &
CUNITS = 'm s-1', &
CDIR = 'XY', &
CCOMMENT = 'X_Y_Z_'//'UT_TRAJ', &
NGRID = 1, &
NTYPE = TYPEREAL, &
NDIMS = 4, &
NDIMLIST = [ NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_LEVEL, NMNHDIM_TRAJ_TIME ] )
CALL IO_FIELD_CREATE( TPFILE, TZFIELD_U0 )
TZFIELD_V0 = TFIELDMETADATA( &
CMNHNAME = 'VT_TRAJ', &
CSTDNAME = '', &
CLONGNAME = 'VT_TRAJ', &
CUNITS = 'm s-1', &
CDIR = 'XY', &
CCOMMENT = 'X_Y_Z_'//'VT_TRAJ', &
NGRID = 1, &
NTYPE = TYPEREAL, &
NDIMS = 4, &
NDIMLIST = [ NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_LEVEL, NMNHDIM_TRAJ_TIME ] )
CALL IO_FIELD_CREATE( TPFILE, TZFIELD_V0 )
TZFIELD_W0 = TFIELDMETADATA( &
CMNHNAME = 'WT_TRAJ', &
CSTDNAME = '', & CSTDNAME = '', &
CLONGNAME = 'MRV_TRAJ', & CLONGNAME = 'WT_TRAJ', &
CUNITS = 'g kg-1', & CUNITS = 'm s-1', &
CDIR = 'XY', & CDIR = 'XY', &
CCOMMENT = 'X_Y_Z_'//'MRV_TRAJ', & CCOMMENT = 'X_Y_Z_'//'WT_TRAJ', &
NGRID = 1, & NGRID = 1, &
NTYPE = TYPEREAL, & NTYPE = TYPEREAL, &
NDIMS = 4, & NDIMS = 4, &
NDIMLIST = [ NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_LEVEL, NMNHDIM_TRAJ_TIME ] ) NDIMLIST = [ NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_LEVEL, NMNHDIM_TRAJ_TIME ] )
CALL IO_FIELD_CREATE( TPFILE, TZFIELD_RV0 ) CALL IO_FIELD_CREATE( TPFILE, TZFIELD_W0 )
IF (LUSERV) THEN
TZFIELD_RV0 = TFIELDMETADATA( &
CMNHNAME = 'MRV_TRAJ', &
CSTDNAME = '', &
CLONGNAME = 'MRV_TRAJ', &
CUNITS = 'g kg-1', &
CDIR = 'XY', &
CCOMMENT = 'X_Y_Z_'//'MRV_TRAJ', &
NGRID = 1, &
NTYPE = TYPEREAL, &
NDIMS = 4, &
NDIMLIST = [ NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_LEVEL, NMNHDIM_TRAJ_TIME ] )
CALL IO_FIELD_CREATE( TPFILE, TZFIELD_RV0 )
TZFIELD_RH0 = TFIELDMETADATA( &
CMNHNAME = 'REHU_TRAJ', &
CSTDNAME = '', &
CLONGNAME = 'REHU_TRAJ', &
CUNITS = 'percent', &
CDIR = 'XY', &
CCOMMENT = 'X_Y_Z_'//'REHU_TRAJ',&
NGRID = 1, &
NTYPE = TYPEREAL, &
NDIMS = 4, &
NDIMLIST = [ NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_LEVEL, NMNHDIM_TRAJ_TIME ] )
CALL IO_FIELD_CREATE( TPFILE, TZFIELD_RH0 )
TZFIELD_THE0 = TFIELDMETADATA( &
CMNHNAME = 'THE_TRAJ', &
CSTDNAME = '', &
CLONGNAME = 'THE_TRAJ', &
CUNITS = 'K', &
CDIR = 'XY', &
CCOMMENT = 'X_Y_Z_'//'THE_TRAJ', &
NGRID = 1, &
NTYPE = TYPEREAL, &
NDIMS = 4, &
NDIMLIST = [ NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_LEVEL, NMNHDIM_TRAJ_TIME ] )
CALL IO_FIELD_CREATE( TPFILE, TZFIELD_THE0 )
END IF
IF (LUSERC) THEN
TZFIELD_RC0 = TFIELDMETADATA( &
CMNHNAME = 'MRC_TRAJ', &
CSTDNAME = '', &
CLONGNAME = 'MRC_TRAJ', &
CUNITS = 'g kg-1', &
CDIR = 'XY', &
CCOMMENT = 'X_Y_Z_'//'MRC_TRAJ', &
NGRID = 1, &
NTYPE = TYPEREAL, &
NDIMS = 4, &
NDIMLIST = [ NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_LEVEL, NMNHDIM_TRAJ_TIME ] )
CALL IO_FIELD_CREATE( TPFILE, TZFIELD_RC0 )
END IF
IF (LUSERI) THEN
TZFIELD_RI0 = TFIELDMETADATA( &
CMNHNAME = 'MRI_TRAJ', &
CSTDNAME = '', &
CLONGNAME = 'MRI_TRAJ', &
CUNITS = 'g kg-1', &
CDIR = 'XY', &
CCOMMENT = 'X_Y_Z_'//'MRI_TRAJ', &
NGRID = 1, &
NTYPE = TYPEREAL, &
NDIMS = 4, &
NDIMLIST = [ NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_LEVEL, NMNHDIM_TRAJ_TIME ] )
CALL IO_FIELD_CREATE( TPFILE, TZFIELD_RI0 )
END IF
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------
! !
...@@ -338,9 +488,13 @@ CALL IO_FIELD_CREATE( TPFILE, TZFIELD_RV0 ) ...@@ -338,9 +488,13 @@ CALL IO_FIELD_CREATE( TPFILE, TZFIELD_RV0 )
! is performed ! is performed
DO JFILECUR=1,NFILES DO JFILECUR=1,NFILES
! !
TZTRACFILE => NULL() IF (JFILECUR==1) THEN
CALL IO_File_add2list(TZTRACFILE,CFILES(NBRFILES(JFILECUR)),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB) TZTRACFILE => LUNIT_MODEL(1)%TINIFILE
CALL IO_File_open(TZTRACFILE) ELSE
TZTRACFILE => NULL()
CALL IO_File_add2list(TZTRACFILE,CFILES(NBRFILES(JFILECUR)),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
CALL IO_File_open(TZTRACFILE)
END IF
! !
!* 4.1 check if this file is a start instant !* 4.1 check if this file is a start instant
! !
...@@ -362,30 +516,233 @@ DO JFILECUR=1,NFILES ...@@ -362,30 +516,233 @@ DO JFILECUR=1,NFILES
! !
CALL IO_Field_read(TZTRACFILE,'THT',ZTH0(:,:,:)) CALL IO_Field_read(TZTRACFILE,'THT',ZTH0(:,:,:))
! !
CALL IO_Field_read(TZTRACFILE,'RVT',ZRV0(:,:,:)) CALL IO_Field_read(TZTRACFILE,'UT',ZU0(:,:,:))
ZRV0(:,:,:)=ZRV0(:,:,:)*1.E+3 ! ZRV0 in g/kg CALL IO_Field_read(TZTRACFILE,'VT',ZV0(:,:,:))
CALL IO_Field_read(TZTRACFILE,'WT',ZW0(:,:,:))
!
IF (LUSERV) THEN
CALL IO_Field_read(TZTRACFILE,'RVT',ZRV0(:,:,:))
ZRV0(:,:,:)=ZRV0(:,:,:)*1.E+3 ! ZRV0 in g/kg
!
CALL IO_Field_read(TZTRACFILE,'PABST',ZWORK1(:,:,:))
!
ZWORK2(:,:,:)=ZTH0(:,:,:)*(ZWORK1(:,:,:)/ XP00) **(XRD/XCPD)
ZWORK3(:,:,:)=SM_FOES(ZWORK2(:,:,:))
ZWORK3(:,:,:)=(XMV/XMD)*ZWORK3(:,:,:)/(ZWORK1(:,:,:)-ZWORK3(:,:,:))
ZRH0(:,:,:)=0.1*ZRV0(:,:,:)/ZWORK3(:,:,:)
IF (LUSERI) THEN
WHERE ( ZWORK2(:,:,:)< XTT)
ZWORK3(:,:,:) = EXP( XALPI - XBETAI/ZWORK2(:,:,:) &
- XGAMI*ALOG(ZWORK2(:,:,:)) ) !saturation over ice
ZWORK3(:,:,:)=(XMV/XMD)*ZWORK3(:,:,:)/(ZWORK1(:,:,:)-ZWORK3(:,:,:))
ZRH0(:,:,:)=0.1*ZRV0(:,:,:)/ZWORK3(:,:,:)
END WHERE
END IF
!
ZWORK3(:,:,:) = MAX(ZRV0(:,:,:)*1.E-3,1.E-10)
ZTHE0(:,:,:)= ( 2840./ &
(3.5*ALOG(ZTH0(:,:,:)*( ZWORK1(:,:,:)/XP00 )**(XRD/XCPD) ) &
- ALOG( ZWORK1(:,:,:)*0.01*ZWORK3(:,:,:) / ( 0.622+ZWORK3(:,:,:) ) ) &
-4.805 ) ) + 55.
ZTHE0(:,:,:)= ZTH0(:,:,:) * EXP( (3376. / ZTHE0(:,:,:) - 2.54) &
*ZWORK3(:,:,:) *(1. +0.81 *ZWORK3(:,:,:)) )
END IF
!
IF (LUSERC) THEN
CALL IO_Field_read(TZTRACFILE,'RCT',ZRC0(:,:,:))
ZRC0(:,:,:)=ZRC0(:,:,:)*1.E+3 ! ZRC0 in g/kg
END IF
!
IF (LUSERI) THEN
CALL IO_Field_read(TZTRACFILE,'RIT',ZRI0(:,:,:))
ZRI0(:,:,:)=ZRI0(:,:,:)*1.E+3 ! ZRI0 in g/kg
END IF
!
IF (CCLOUD == 'LIMA') THEN
DO JSV = 1, NSV
TZFIELD = TSVLIST(JSV)
IF (JSV .GE. NSV_LIMA_CCN_FREE .AND. JSV .LT. NSV_LIMA_CCN_ACTI) THEN
ISV=JSV - NSV_LIMA_CCN_FREE + 1
WRITE(INDICE,'(I2.2)')(ISV)
CALL IO_Field_read(TZTRACFILE,TZFIELD,ZCCN_FREE0(:,:,:,ISV))
ZCCN_FREE0(:,:,:,ISV)=ZCCN_FREE0(:,:,:,ISV)*1.E-6*XRHODREF(:,:,:) ! in cm-3
END IF
IF (JSV .GE. NSV_LIMA_IFN_FREE .AND. JSV .LT. NSV_LIMA_IFN_NUCL) THEN
ISV=JSV - NSV_LIMA_IFN_FREE + 1
WRITE(INDICE,'(I2.2)')(ISV)
CALL IO_Field_read(TZTRACFILE,TZFIELD,ZIFN_FREE0(:,:,:,ISV))
ZIFN_FREE0(:,:,:,ISV)=ZIFN_FREE0(:,:,:,ISV)*1.E-6*XRHODREF(:,:,:) ! in cm-3
END IF
END DO
END IF
! !
! !
!* 4.3 store the X0,Y0,Z0 field for the current start before !* 4.3 store the X0,Y0,Z0 field for the current start before
! computing the new origin ! computing the new origin
! !
PRINT *,'INBR_START',NNBR_START,' NBRFILES(JFILECUR)',NBRFILES(JFILECUR) IF (JFILECUR==1) THEN
CALL IO_Field_write( TPFILE, TZFIELD_X0, RESHAPE( ZX00(:,:,:), [ SHAPE(ZX00), 1 ] ), KOFFSET = [0, 0, 0, NNBR_START ] ) ZWORK1=ZXI
CALL IO_Field_write( TPFILE, TZFIELD_Y0, RESHAPE( ZY00(:,:,:), [ SHAPE(ZY00), 1 ] ), KOFFSET = [0, 0, 0, NNBR_START ] ) ELSE
CALL IO_Field_write( TPFILE, TZFIELD_Z0, RESHAPE( ZZ00(:,:,:), [ SHAPE(ZZ00), 1 ] ), KOFFSET = [0, 0, 0, NNBR_START ] ) ZWORK1=ZX00
END IF
WHERE(ZWORK1==NSPVAL) ZWORK1=XFILLVALUE
CALL IO_Field_write( TPFILE, TZFIELD_X0, RESHAPE( ZWORK1(:,:,:), [ SHAPE(ZWORK1), 1 ] ), KOFFSET = [0, 0, 0, NNBR_START ] )
IF (JFILECUR==1) THEN
ZWORK1=ZYI
ELSE
ZWORK1=ZY00
END IF
WHERE(ZWORK1==NSPVAL) ZWORK1=XFILLVALUE
CALL IO_Field_write( TPFILE, TZFIELD_Y0, RESHAPE( ZWORK1(:,:,:), [ SHAPE(ZWORK1), 1 ] ), KOFFSET = [0, 0, 0, NNBR_START ] )
IF (JFILECUR==1) THEN
ZWORK1=ZZI
ELSE
ZWORK1=ZZ00
END IF
WHERE(ZWORK1==NSPVAL) ZWORK1=XFILLVALUE
CALL IO_Field_write( TPFILE, TZFIELD_Z0, RESHAPE( ZWORK1(:,:,:), [ SHAPE(ZWORK1), 1 ] ), KOFFSET = [0, 0, 0, NNBR_START ] )
! !
!* 4.6 compute and store potential temp and water vapor at the origin !* 4.4 store the U0,V0,W0 field for the current start before
! computing the new origin
! !
CALL INTERPXYZ( ZX00, ZY00, ZZ00, ZTH0, ZWORK1 ) IF (JFILECUR==1) THEN
CALL INTERPXYZ( ZX00, ZY00, ZZ00, ZRV0, ZWORK2 ) ZWORK1=ZU0
ELSE
CALL INTERPXYZ(ZX00,ZY00,ZZ00,ZU0,ZWORK1)
END IF
WHERE(ZWORK1==NSPVAL) ZWORK1=XFILLVALUE
CALL IO_Field_write( TPFILE, TZFIELD_U0, RESHAPE( ZWORK1(:,:,:), [ SHAPE(ZWORK1), 1 ] ), KOFFSET = [0, 0, 0, NNBR_START ] )
IF (JFILECUR==1) THEN
ZWORK1=ZV0
ELSE
CALL INTERPXYZ(ZX00,ZY00,ZZ00,ZV0,ZWORK1)
END IF
WHERE(ZWORK1==NSPVAL) ZWORK1=XFILLVALUE
CALL IO_Field_write( TPFILE, TZFIELD_V0, RESHAPE( ZWORK1(:,:,:), [ SHAPE(ZWORK1), 1 ] ), KOFFSET = [0, 0, 0, NNBR_START ] )
IF (JFILECUR==1) THEN
ZWORK1=ZW0
ELSE
CALL INTERPXYZ(ZX00,ZY00,ZZ00,ZW0,ZWORK1)
END IF
WHERE(ZWORK1==NSPVAL) ZWORK1=XFILLVALUE
CALL IO_Field_write( TPFILE, TZFIELD_W0, RESHAPE( ZWORK1(:,:,:), [ SHAPE(ZWORK1), 1 ] ), KOFFSET = [0, 0, 0, NNBR_START ] )
!
!* 4.5 compute and store potential temp and water vapor at the origin
!
IF (JFILECUR==1) THEN
ZWORK1=ZTH0
ELSE
CALL INTERPXYZ(ZX00,ZY00,ZZ00,ZTH0,ZWORK1)
END IF
WHERE(ZWORK1<0.) ZWORK1=XFILLVALUE
CALL IO_Field_write( TPFILE, TZFIELD_TH0, RESHAPE( ZWORK1(:,:,:), [ SHAPE(ZWORK1), 1 ] ), KOFFSET = [0, 0, 0, NNBR_START ] ) CALL IO_Field_write( TPFILE, TZFIELD_TH0, RESHAPE( ZWORK1(:,:,:), [ SHAPE(ZWORK1), 1 ] ), KOFFSET = [0, 0, 0, NNBR_START ] )
CALL IO_Field_write( TPFILE, TZFIELD_RV0, RESHAPE( ZWORK2(:,:,:), [ SHAPE(ZWORK2), 1 ] ), KOFFSET = [0, 0, 0, NNBR_START ] )
IF (LUSERV) THEN
IF (JFILECUR==1) THEN
ZWORK1=ZRV0
ELSE
CALL INTERPXYZ(ZX00,ZY00,ZZ00,ZRV0,ZWORK1)
END IF
WHERE(ZWORK1<0.) ZWORK1=XFILLVALUE
CALL IO_Field_write( TPFILE, TZFIELD_RV0, RESHAPE( ZWORK1(:,:,:), [ SHAPE(ZWORK1), 1 ] ), KOFFSET = [0, 0, 0, NNBR_START ] )
IF (JFILECUR==1) THEN
ZWORK1=ZRH0
ELSE
CALL INTERPXYZ(ZX00,ZY00,ZZ00,ZRH0,ZWORK1)
END IF
WHERE(ZWORK1<0.) ZWORK1=XFILLVALUE
CALL IO_Field_write( TPFILE, TZFIELD_RH0, RESHAPE( ZWORK1(:,:,:), [ SHAPE(ZWORK1), 1 ] ), KOFFSET = [0, 0, 0, NNBR_START ] )
IF (JFILECUR==1) THEN
ZWORK1=ZTHE0
ELSE
CALL INTERPXYZ(ZX00,ZY00,ZZ00,ZTHE0,ZWORK1)
END IF
WHERE(ZWORK1<0.) ZWORK1=XFILLVALUE
CALL IO_Field_write( TPFILE, TZFIELD_THE0, RESHAPE( ZWORK1(:,:,:), [ SHAPE(ZWORK1), 1 ] ), KOFFSET = [0, 0, 0, NNBR_START ] )
END IF
IF (LUSERC) THEN
IF (JFILECUR==1) THEN
ZWORK1=ZRC0
ELSE
CALL INTERPXYZ(ZX00,ZY00,ZZ00,ZRC0,ZWORK1)
END IF
WHERE(ZWORK1<0.) ZWORK1=XFILLVALUE
CALL IO_Field_write( TPFILE, TZFIELD_RC0, RESHAPE( ZWORK1(:,:,:), [ SHAPE(ZWORK1), 1 ] ), KOFFSET = [0, 0, 0, NNBR_START ] )
END IF
IF (LUSERI) THEN
IF (JFILECUR==1) THEN
ZWORK1=ZRI0
ELSE
CALL INTERPXYZ(ZX00,ZY00,ZZ00,ZRI0,ZWORK1)
END IF
WHERE(ZWORK1<0.) ZWORK1=XFILLVALUE
CALL IO_Field_write( TPFILE, TZFIELD_RI0, RESHAPE( ZWORK1(:,:,:), [ SHAPE(ZWORK1), 1 ] ), KOFFSET = [0, 0, 0, NNBR_START ] )
END IF
!
!* 4.6 compute and store potential ccn and ifn at the origin
!
IF (CCLOUD == 'LIMA') THEN
DO JSV = 1,NMOD_CCN
IF (JFILECUR==1) THEN
ZWORK1=ZCCN_FREE0(:,:,:,JSV)
ELSE
CALL INTERPXYZ(ZX00,ZY00,ZZ00,ZCCN_FREE0(:,:,:,JSV),ZWORK1)
END IF
WHERE(ZWORK1<0.) ZWORK1=XFILLVALUE
WRITE(INDICE,'(I2.2)')(JSV)
YMNHNAME = TRIM(CLIMA_WARM_CONC(3))//INDICE
TZFIELD = TFIELDMETADATA( &
CMNHNAME = TRIM(YMNHNAME)//'_TRAJ', &
CSTDNAME = '', &
CLONGNAME = TRIM(YMNHNAME)//'_TRAJ', &
CUNITS = 'cm-3', &
CDIR = 'XY', &
CCOMMENT = 'X_Y_Z_'//TRIM(YMNHNAME)//'_TRAJ',&
NGRID = 1, &
NTYPE = TYPEREAL, &
NDIMS = 3, &
LTIMEDEP = .TRUE. )
IF (JFILECUR==1) CALL IO_FIELD_CREATE( TPFILE, TZFIELD )
CALL IO_Field_write( TPFILE, TZFIELD, RESHAPE( ZWORK1(:,:,:), [ SHAPE(ZWORK1), 1 ] ), KOFFSET = [0, 0, 0, NNBR_START ] )
END DO
DO JSV = 1,NMOD_IFN
IF (JFILECUR==1) THEN
ZWORK1=ZIFN_FREE0(:,:,:,JSV)
ELSE
CALL INTERPXYZ(ZX00,ZY00,ZZ00,ZIFN_FREE0(:,:,:,JSV),ZWORK1)
END IF
WHERE(ZWORK1<0.) ZWORK1=XFILLVALUE
WRITE(INDICE,'(I2.2)')(JSV)
YMNHNAME = TRIM(CLIMA_COLD_CONC(5))//INDICE
TZFIELD = TFIELDMETADATA( &
CMNHNAME = TRIM(YMNHNAME)//'_TRAJ', &
CSTDNAME = '', &
CLONGNAME = TRIM(YMNHNAME)//'_TRAJ', &
CUNITS = 'cm-3', &
CDIR = 'XY', &
CCOMMENT = 'X_Y_Z_'//TRIM(YMNHNAME)//'_TRAJ',&
NGRID = 1, &
NTYPE = TYPEREAL, &
NDIMS = 3, &
LTIMEDEP = .TRUE. )
IF (JFILECUR==1) CALL IO_FIELD_CREATE( TPFILE, TZFIELD )
CALL IO_Field_write( TPFILE, TZFIELD, RESHAPE( ZWORK1(:,:,:), [ SHAPE(ZWORK1), 1 ] ), KOFFSET = [0, 0, 0, NNBR_START ] )
END DO
END IF
!
END IF END IF
! !
!* 4.4 compute the origin of the particules using one more segment !* 4.7 compute the origin of the particules using one more segment
! !
IF (JFILECUR /= NFILES) THEN IF (JFILECUR /= NFILES .AND. JFILECUR/=1) THEN
TZFIELD = TFIELDMETADATA(& TZFIELD = TFIELDMETADATA(&
CMNHNAME = 'LGX', & CMNHNAME = 'LGX', &
CSTDNAME = '', & CSTDNAME = '', &
...@@ -446,7 +803,7 @@ DO JFILECUR=1,NFILES ...@@ -446,7 +803,7 @@ DO JFILECUR=1,NFILES
! !
!* 4.5 close the input file !* 4.5 close the input file
! !
CALL IO_File_close(TZTRACFILE) IF (JFILECUR/=1) CALL IO_File_close(TZTRACFILE)
! !
END DO END DO
! !
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment