47 USE yomlun    ,ONLY : nulout, nulerr
 
   75 INTEGER(KIND=JPIM) :: mp                   
 
   76 INTEGER(KIND=JPIM) :: mp0                  
 
   77 INTEGER(KIND=JPIM) :: mp9                  
 
   78 INTEGER(KIND=JPIM) :: mp1                  
 
   79 INTEGER(KIND=JPIM) :: mp5                  
 
   80 INTEGER(KIND=JPIM) :: igrbcode             
 
   81 CHARACTER(LEN=16)  :: cname                
 
   82 REAL(KIND=JPRB)    :: refvali              
 
   83 INTEGER(KIND=JPIM) :: nreqin               
 
   86 INTEGER(KIND=JPIM) :: itraj                
 
   93 INTEGER(KIND=JPIM) :: mp   
 
   94 INTEGER(KIND=JPIM) :: mp0  
 
   95 INTEGER(KIND=JPIM) :: mp9  
 
   96 INTEGER(KIND=JPIM) :: mp1  
 
   97 INTEGER(KIND=JPIM) :: mp5  
 
   98 INTEGER(KIND=JPIM),
POINTER :: igrbcode(:)  
 
   99 CHARACTER(LEN=16) ,
POINTER :: cname(:)     
 
  100 REAL(KIND=JPRB)   ,
POINTER :: refvali(:)   
 
  101 INTEGER(KIND=JPIM),
POINTER :: nreqin(:)    
 
  104 INTEGER(KIND=JPIM) :: itraj                
 
  111 INTEGER(KIND=JPIM) :: numflds         
 
  112 INTEGER(KIND=JPIM) :: ndim            
 
  113 INTEGER(KIND=JPIM) :: nlevs           
 
  114 INTEGER(KIND=JPIM) :: iptr            
 
  115 INTEGER(KIND=JPIM) :: iptr5           
 
  116 INTEGER(KIND=JPIM) :: ndim5           
 
  119 CHARACTER(LEN=16)  :: cgrpname        
 
  126 INTEGER(KIND=JPIM) :: igrbcode
 
  128 CHARACTER(LEN=16)  :: cname
 
  129 INTEGER(KIND=JPIM) :: ifldnum
 
  130 REAL(KIND=JPRB)    :: value
 
  131 INTEGER(KIND=JPIM) :: iptrsurf
 
  133 INTEGER(KIND=JPIM) :: icount
 
  413 REAL(KIND=JPRB),
ALLOCATABLE :: 
sp_sb (:,:,:,:)
 
  418 REAL(KIND=JPRB),
ALLOCATABLE :: 
sp_sg (:,:,:)
 
  423 REAL(KIND=JPRB),
ALLOCATABLE :: 
sp_rr (:,:,:)
 
  429 REAL(KIND=JPRB),
ALLOCATABLE :: 
sp_ep (:,:,:,:)
 
  434 REAL(KIND=JPRB),
ALLOCATABLE :: 
sp_x2 (:,:,:)
 
  439 REAL(KIND=JPRB),
ALLOCATABLE :: 
sp_ci (:,:,:)
 
  446 REAL(KIND=JPRB),
ALLOCATABLE :: 
sd_vf (:,:,:)
 
  451 REAL(KIND=JPRB),
ALLOCATABLE :: 
sd_vp (:,:,:)
 
  456 REAL(KIND=JPRB),
ALLOCATABLE :: 
sd_vv (:,:,:)
 
  461 REAL(KIND=JPRB),
ALLOCATABLE :: 
sd_vn (:,:,:)
 
  466 REAL(KIND=JPRB),
ALLOCATABLE :: 
sd_vh (:,:,:)
 
  471 REAL(KIND=JPRB),
ALLOCATABLE :: 
sd_va (:,:,:)
 
  476 REAL(KIND=JPRB),
ALLOCATABLE :: 
sd_vc (:,:,:)
 
  481 REAL(KIND=JPRB),
ALLOCATABLE :: 
sd_vd (:,:,:)
 
  486 REAL(KIND=JPRB),
ALLOCATABLE :: 
sd_ws (:,:,:)
 
  491 REAL(KIND=JPRB),
ALLOCATABLE :: 
sd_vx (:,:,:)
 
  497 REAL(KIND=JPRB),
ALLOCATABLE :: 
sd_xa (:,:,:,:)
 
  503 REAL(KIND=JPRB),
ALLOCATABLE :: 
sd_x2 (:,:,:)
 
  525 SUBROUTINE ini_sflp3(YDSC,YD,KFLDS,KLEVS,LDMTL,CDGRPNAME)
 
  529 INTEGER(KIND=JPIM),
INTENT(IN)        :: KFLDS
 
  530 INTEGER(KIND=JPIM),
INTENT(IN)        :: KLEVS
 
  531 LOGICAL,
INTENT(IN)                   :: LDMTL
 
  532 CHARACTER(LEN=*),
INTENT(IN)          :: CDGRPNAME
 
  534 INTEGER(KIND=JPIM) :: JFLD, IMAXF
 
  535 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 
  539 IF (
lhook) 
CALL dr_hook(
'SURFACE_FIELDS:INI_SFLP3',0,zhook_handle)
 
  546 ydsc%CGRPNAME = cdgrpname
 
  560     ydsc%NDIM = 2*ydsc%NUMFLDS
 
  562     ydsc%NDIM = 3*ydsc%NUMFLDS
 
  565   ydsc%NDIM = ydsc%NUMFLDS
 
  571   ALLOCATE(yd(jfld)%IGRBCODE(klevs))
 
  572   ALLOCATE(yd(jfld)%CNAME(klevs))
 
  573   ALLOCATE(yd(jfld)%REFVALI(klevs))
 
  574   ALLOCATE(yd(jfld)%NREQIN(klevs))
 
  575   yd(jfld)%IGRBCODE(:) = -999
 
  576   yd(jfld)%CNAME(:) = 
'' 
  577   yd(jfld)%REFVALI(:) = 0.0_jprb
 
  578   yd(jfld)%NREQIN(:) = -1
 
  581     yd(jfld)%MP0 = yd(jfld)%MP
 
  583       yd(jfld)%MP9 = yd(jfld)%MP0
 
  584       yd(jfld)%MP1 = yd(jfld)%MP0+ydsc%NUMFLDS
 
  586       yd(jfld)%MP9 = yd(jfld)%MP0+ydsc%NUMFLDS
 
  587       yd(jfld)%MP1 = yd(jfld)%MP0+2*ydsc%NUMFLDS
 
  598 DO jfld=kflds+1,imaxf
 
  607 WRITE(nulout,*) 
'INITIALIZING 3-D SURFACE FIELD GROUP ', ydsc%CGRPNAME
 
  608 WRITE(nulout,*) 
'NUMFLDS=',ydsc%NUMFLDS,
' NLEVS=',ydsc%NLEVS,
' LMTL=',ydsc%LMTL 
 
  610 IF (
lhook) 
CALL dr_hook(
'SURFACE_FIELDS:INI_SFLP3',1,zhook_handle)
 
  615 SUBROUTINE setup_sflp3(YDSC,YD,KGRIB,CDNAME,PDEFAULT,KTRAJ,KREQIN)
 
  619 INTEGER(KIND=JPIM),
OPTIONAL,
INTENT(IN) :: KGRIB(:)
 
  620 CHARACTER(LEN=16) ,
OPTIONAL,
INTENT(IN) :: CDNAME(:)
 
  621 REAL(KIND=JPRB)   ,
OPTIONAL,
INTENT(IN) :: PDEFAULT(:)
 
  622 INTEGER(KIND=JPIM),
OPTIONAL,
INTENT(IN) :: KTRAJ
 
  623 INTEGER(KIND=JPIM),
OPTIONAL,
INTENT(IN) :: KREQIN(:)
 
  625 INTEGER(KIND=JPIM) :: IPTR,JLEV
 
  626 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 
  630 IF (
lhook) 
CALL dr_hook(
'SURFACE_FIELDS:SETUP_SFLP3',0,zhook_handle)
 
  632 IF(iptr > ydsc%NUMFLDS) 
THEN 
  633   WRITE(nulerr,*) 
'SURFACE FIELDS UNDER-DIMENSINED - GROUP ',&
 
  634    & ydsc%CGRPNAME,ydsc%NUMFLDS,kgrib(1),cdname(1)
 
  635   CALL abor1(
'IPTR > YDSC%NUMFLDS')
 
  637 IF(
PRESENT(kgrib)) 
THEN 
  638   yd%IGRBCODE(:) = kgrib(:)
 
  640 IF(
PRESENT(kreqin)) 
THEN 
  641   yd%NREQIN(:) = kreqin(:)
 
  643 IF(
PRESENT(cdname)) 
THEN 
  644   yd%CNAME(:)    = cdname(:)
 
  646 IF(
PRESENT(pdefault)) 
THEN 
  647   yd%REFVALI(:) = pdefault
 
  649 IF(
PRESENT(ktraj)) 
THEN 
  655   ELSEIF(ktraj == 2) 
THEN 
  657   ELSEIF(ktraj /= 0) 
THEN 
  658     CALL abor1(
'SURFACE_FIELDS:SETUP_SFLP3 - UNKNOWN KTRAJ')
 
  661   ydsc%NDIM5 = ydsc%NDIM5+1
 
  666     WRITE(nulout,
'(1X,A,2I4,1X,A,6I4)') &
 
  667      & ydsc%CGRPNAME(1:6),ydsc%IPTR,jlev,yd%CNAME(jlev),yd%IGRBCODE(jlev),&
 
  668      & yd%MP0,yd%MP9,yd%MP1,yd%ITRAJ,yd%NREQIN(jlev)
 
  670     WRITE(nulout,
'(1X,A,2I4,1X,A,4I4)') &
 
  671      & ydsc%CGRPNAME(1:6),ydsc%IPTR,jlev,yd%CNAME(jlev),yd%IGRBCODE(jlev),&
 
  672      & yd%MP,yd%ITRAJ,yd%NREQIN(jlev)
 
  675 ydsc%IPTR = ydsc%IPTR+1
 
  677 IF (
lhook) 
CALL dr_hook(
'SURFACE_FIELDS:SETUP_SFLP3',1,zhook_handle)
 
  682 SUBROUTINE ini_sflp2(YDSC,YD,KFLDS,LDMTL,CDGRPNAME)
 
  686 INTEGER(KIND=JPIM),
INTENT(IN)        :: KFLDS
 
  687 LOGICAL,
INTENT(IN)                   :: LDMTL
 
  688 CHARACTER(LEN=*),
INTENT(IN)          :: CDGRPNAME
 
  690 INTEGER(KIND=JPIM) :: JFLD, IMAXF
 
  691 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 
  695 IF (
lhook) 
CALL dr_hook(
'SURFACE_FIELDS:INI_SFLP2',0,zhook_handle)
 
  702 ydsc%CGRPNAME = cdgrpname
 
  716     ydsc%NDIM = 2*ydsc%NUMFLDS
 
  718     ydsc%NDIM = 3*ydsc%NUMFLDS
 
  721   ydsc%NDIM = ydsc%NUMFLDS
 
  726   yd(jfld)%IGRBCODE = -999
 
  728   yd(jfld)%REFVALI = 0.0_jprb
 
  732     yd(jfld)%MP0 = yd(jfld)%MP
 
  734       yd(jfld)%MP9 = yd(jfld)%MP0
 
  735       yd(jfld)%MP1 = yd(jfld)%MP0+ydsc%NUMFLDS
 
  737       yd(jfld)%MP9 = yd(jfld)%MP0+ydsc%NUMFLDS
 
  738       yd(jfld)%MP1 = yd(jfld)%MP0+2*ydsc%NUMFLDS
 
  749 DO jfld=kflds+1,imaxf
 
  758 WRITE(nulout,*) 
'INITIALIZING 2-D SURFACE FIELD GROUP ', ydsc%CGRPNAME
 
  759 WRITE(nulout,*) 
'NUMFLDS=',ydsc%NUMFLDS,
' LMTL=',ydsc%LMTL 
 
  761 IF (
lhook) 
CALL dr_hook(
'SURFACE_FIELDS:INI_SFLP2',1,zhook_handle)
 
  766 SUBROUTINE setup_sflp2(YDSC,YD,KGRIB,CDNAME,PDEFAULT,KTRAJ,KREQIN)
 
  770 INTEGER(KIND=JPIM),
OPTIONAL,
INTENT(IN) :: KGRIB
 
  771 CHARACTER(LEN=16) ,
OPTIONAL,
INTENT(IN) :: CDNAME
 
  772 REAL(KIND=JPRB)   ,
OPTIONAL,
INTENT(IN) :: PDEFAULT
 
  773 INTEGER(KIND=JPIM),
OPTIONAL,
INTENT(IN) :: KTRAJ
 
  774 INTEGER(KIND=JPIM),
OPTIONAL,
INTENT(IN) :: KREQIN
 
  776 INTEGER(KIND=JPIM) :: IPTR
 
  777 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 
  781 IF (
lhook) 
CALL dr_hook(
'SURFACE_FIELDS:SETUP_SFLP2',0,zhook_handle)
 
  783 IF(iptr > ydsc%NUMFLDS) 
THEN 
  784   WRITE(nulerr,*) 
'SURFACE FIELDS UNDER-DIMENSINED - GROUP ',ydsc%CGRPNAME,ydsc%NUMFLDS,kgrib,cdname
 
  785   CALL abor1(
'IPTR > YDSC%NUMFLDS')
 
  787 IF(
PRESENT(kgrib)) 
THEN 
  790 IF(
PRESENT(kreqin)) 
THEN 
  793 IF(
PRESENT(cdname)) 
THEN 
  796 IF(
PRESENT(pdefault)) 
THEN 
  797   yd%REFVALI = pdefault
 
  799 IF(
PRESENT(ktraj)) 
THEN 
  803   ELSEIF(ktraj == 2) 
THEN 
  805   ELSEIF(ktraj /= 0) 
THEN 
  806     CALL abor1(
'SURFACE_FIELDS:SETUP_SFLP2 - UNKNOWN KTRAJ')
 
  809   ydsc%NDIM5 = ydsc%NDIM5+1
 
  813   WRITE(nulout,
'(1X,A,I4,1X,A,6I4)') &
 
  814    & ydsc%CGRPNAME(1:6),ydsc%IPTR,yd%CNAME,yd%IGRBCODE,&
 
  815    & yd%MP0,yd%MP9,yd%MP1,yd%ITRAJ,yd%NREQIN
 
  817   WRITE(nulout,
'(1X,A,I4,1X,A,4I4)') &
 
  818    & ydsc%CGRPNAME(1:6),ydsc%IPTR,yd%CNAME,yd%IGRBCODE,yd%MP,yd%ITRAJ,yd%NREQIN
 
  821 ydsc%IPTR = ydsc%IPTR+1
 
  822 IF (
lhook) 
CALL dr_hook(
'SURFACE_FIELDS:SETUP_SFLP2',1,zhook_handle)
 
  827 SUBROUTINE gppoper(CDACT,KBL,PSP_SB,PSP_SG,PSP_RR,PSP_EP,PSP_X2,YDCOM)
 
  829 CHARACTER(LEN=*),
INTENT(IN)            :: CDACT
 
  830 INTEGER(KIND=JPIM),
OPTIONAL,
INTENT(IN) :: KBL
 
  831 REAL(KIND=JPRB),
OPTIONAL,
INTENT(INOUT) :: PSP_SB(:,:,:)
 
  832 REAL(KIND=JPRB),
OPTIONAL,
INTENT(INOUT) :: PSP_SG(:,:)
 
  833 REAL(KIND=JPRB),
OPTIONAL,
INTENT(INOUT) :: PSP_RR(:,:)
 
  834 REAL(KIND=JPRB),
OPTIONAL,
INTENT(INOUT) :: PSP_EP(:,:,:)
 
  835 REAL(KIND=JPRB),
OPTIONAL,
INTENT(INOUT) :: PSP_X2(:,:)
 
  839 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 
  843 IF (
lhook) 
CALL dr_hook(
'SURFACE_FIELDS:GPPOPER',0,zhook_handle)
 
  844 IF(
PRESENT(kbl)) 
THEN 
  857 IF (
lhook) 
CALL dr_hook(
'SURFACE_FIELDS:GPPOPER',1,zhook_handle)
 
  862 SUBROUTINE gpoper(CDACT,KBL,PSP_SB,PSP_SG,PSP_RR,PSD_VF,PSD_VV,YDCOM,PFIELD,PFIELD2)
 
  864 CHARACTER(LEN=*),
INTENT(IN)            :: CDACT
 
  865 INTEGER(KIND=JPIM),
OPTIONAL,
INTENT(IN) :: KBL
 
  866 REAL(KIND=JPRB),
OPTIONAL,
INTENT(INOUT) :: PSP_SB(:,:,:)
 
  867 REAL(KIND=JPRB),
OPTIONAL,
INTENT(INOUT) :: PSP_SG(:,:)
 
  868 REAL(KIND=JPRB),
OPTIONAL,
INTENT(INOUT) :: PSP_RR(:,:)
 
  869 REAL(KIND=JPRB),
OPTIONAL,
INTENT(INOUT) :: PSD_VF(:,:)
 
  870 REAL(KIND=JPRB),
OPTIONAL,
INTENT(INOUT) :: PSD_VV(:,:)
 
  872 REAL(KIND=JPRB),
OPTIONAL,
INTENT(INOUT) :: PFIELD(:,:)
 
  873 REAL(KIND=JPRB),
OPTIONAL,
INTENT(INOUT) :: PFIELD2(:,:)
 
  874 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 
  878 IF (
lhook) 
CALL dr_hook(
'SURFACE_FIELDS:GPOPER',0,zhook_handle)
 
  879 IF(cdact == 
'PUTALLFLDS' .OR. cdact == 
'GETALLFLDS'   .OR.&
 
  880  & cdact == 
'TRAJSTORE'  .OR. cdact == 
'TRAJSTORECST' .OR. &
 
  881  & cdact == 
'SET0TOTRAJ' .OR. cdact == 
'GETTRAJ'          ) 
THEN 
  882   IF(.NOT.
PRESENT(pfield)) 
CALL abor1(
'SURFACE_FIELDS:GPOPER - PFIELD MISSING')
 
  883   IF(
SIZE(pfield,1) < 
nproma)  
CALL abor1(
'SURFACE_FIELDS:GPOPER - SIZE(PFIELD,1) < NPROMA)')
 
  885 IF(cdact == 
'PUTALLFLDS' .OR. cdact == 
'GETALLFLDS') 
THEN 
  886   IF(
SIZE(pfield,2) < 
nprogsurfl) 
CALL abor1(
'SURFACE_FIELDS:GPOPER - SIZE(PFIELD,2) < NPROGSURFL)')
 
  888 IF(cdact == 
'GETTRAJ') 
THEN 
  889   IF(.NOT.
PRESENT(pfield2)) 
CALL abor1(
'SURFACE_FIELDS:GPOPER - PFIELD2 MISSING')
 
  890   IF(
SIZE(pfield2,1) < 
nproma)  
CALL abor1(
'SURFACE_FIELDS:GPOPER - SIZE(PFIELD2,1) < NPROMA)')
 
  892 IF(
PRESENT(ydcom)) 
THEN 
  899 IF(
PRESENT(kbl)) 
THEN 
  953     IF(
PRESENT(psp_sb)) &
 
  957     IF(
PRESENT(psp_sg)) &
 
  961     IF(
PRESENT(psp_rr)) &
 
  965     IF(
PRESENT(psd_vf)) &
 
  969     IF(
PRESENT(psd_vv)) &
 
  973 IF (
lhook) 
CALL dr_hook(
'SURFACE_FIELDS:GPOPER',1,zhook_handle)
 
  978 SUBROUTINE gpoper_2(CDACT,PFLD,YDSC,YD,YDCOM,PFIELD,PFIELD2)
 
  980 CHARACTER(LEN=*),
INTENT(IN)                :: CDACT
 
  981 REAL(KIND=JPRB),
INTENT(INOUT)              :: PFLD(:,:)
 
  985 REAL(KIND=JPRB),
OPTIONAL,
INTENT(INOUT)     :: PFIELD(:,:)
 
  986 REAL(KIND=JPRB),
OPTIONAL,
INTENT(INOUT)     :: PFIELD2(:,:)
 
  988 INTEGER(KIND=JPIM) :: J,IPTR,IPTR2
 
  989 REAL(KIND=JPRB) :: ZZPHY
 
  990 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 
  994 IF (
lhook) 
CALL dr_hook(
'SURFACE_FIELDS:GPOPER_2',0,zhook_handle)
 
  995 IF(cdact == 
'SET9TO0') 
THEN 
  996   IF( .NOT. ydsc%LMTL) 
CALL abor1(
'SURFACE_FIELDS:GPOPER_2 : FIELD NOT MULTI-TIME LEVEL')
 
  998     pfld(:,yd(j)%MP9) = pfld(:,yd(j)%MP0)
 
 1000 ELSEIF(cdact == 
'SET1TO0') 
THEN 
 1001   IF( .NOT. ydsc%LMTL) 
CALL abor1(
'SURFACE_FIELDS:GPOPER_2 : FIELD NOT MULTI-TIME LEVEL')
 
 1003     pfld(:,yd(j)%MP1) = pfld(:,yd(j)%MP0)
 
 1005 ELSEIF(cdact == 
'SET1TO9') 
THEN 
 1006   IF( .NOT. ydsc%LMTL) 
CALL abor1(
'SURFACE_FIELDS:GPOPER_2 : FIELD NOT MULTI-TIME LEVEL')
 
 1008     pfld(:,yd(j)%MP1) = pfld(:,yd(j)%MP9)
 
 1010 ELSEIF(cdact == 
'SET1TO9AD') 
THEN 
 1011   IF( .NOT. ydsc%LMTL) 
CALL abor1(
'SURFACE_FIELDS:GPOPER_2 : FIELD NOT MULTI-TIME LEVEL')
 
 1013     pfld(:,yd(j)%MP0) = pfld(:,yd(j)%MP9)+pfld(:,yd(j)%MP1)
 
 1014     pfld(:,yd(j)%MP1) = 0.0_jprb
 
 1016 ELSEIF(cdact == 
'SET0TO1') 
THEN 
 1017   IF( .NOT. ydsc%LMTL) 
CALL abor1(
'SURFACE_FIELDS:GPOPER_2 : FIELD NOT MULTI-TIME LEVEL')
 
 1019     pfld(:,yd(j)%MP0) = pfld(:,yd(j)%MP1)
 
 1021 ELSEIF(cdact == 
'SET0TO1AD') 
THEN 
 1022   IF( .NOT. ydsc%LMTL) 
CALL abor1(
'SURFACE_FIELDS:GPOPER_2 : FIELD NOT MULTI-TIME LEVEL')
 
 1024     pfld(:,yd(j)%MP1) = pfld(:,yd(j)%MP1)+pfld(:,yd(j)%MP0)
 
 1025     pfld(:,yd(j)%MP0) = 0.0_jprb
 
 1027 ELSEIF(cdact == 
'SET9TO1') 
THEN 
 1028   IF( .NOT. ydsc%LMTL) 
CALL abor1(
'SURFACE_FIELDS:GPOPER_2 : FIELD NOT MULTI-TIME LEVEL')
 
 1030     pfld(:,yd(j)%MP9) = pfld(:,yd(j)%MP1)
 
 1032 ELSEIF(cdact == 
'PHTFILT') 
THEN 
 1033   IF( .NOT. ydsc%LMTL) 
CALL abor1(
'SURFACE_FIELDS:GPOPER_2 : FIELD NOT MULTI-TIME LEVEL')
 
 1036     pfld(:,yd(j)%MP9) = 
repsp1*pfld(:,yd(j)%MP1)+zzphy*pfld(:,yd(j)%MP0)
 
 1037     pfld(:,yd(j)%MP0) = pfld(:,yd(j)%MP1)
 
 1039 ELSEIF(cdact == 
'PHTFILTAD') 
THEN 
 1040   IF( .NOT. ydsc%LMTL) 
CALL abor1(
'SURFACE_FIELDS:GPOPER_2 : FIELD NOT MULTI-TIME LEVEL')
 
 1043     pfld(:,yd(j)%MP1) = pfld(:,yd(j)%MP1)+pfld(:,yd(j)%MP0)
 
 1044     pfld(:,yd(j)%MP0) = 0.0_jprb
 
 1045     pfld(:,yd(j)%MP1) = pfld(:,yd(j)%MP1)+
repsp1*pfld(:,yd(j)%MP9)
 
 1046     pfld(:,yd(j)%MP0) = pfld(:,yd(j)%MP0)+zzphy *pfld(:,yd(j)%MP9)
 
 1047     pfld(:,yd(j)%MP9) = 0.0_jprb
 
 1049 ELSEIF(cdact == 
'SET0TOVAL') 
THEN 
 1050   IF( .NOT. ydsc%LMTL) 
CALL abor1(
'SURFACE_FIELDS:GPOPER_2 : FIELD NOT MULTI-TIME LEVEL')
 
 1052     pfld(:,yd(j)%MP0) = ydcom%VALUE
 
 1054 ELSEIF(cdact == 
'SET9TOVAL') 
THEN 
 1055   IF( .NOT. ydsc%LMTL) 
CALL abor1(
'SURFACE_FIELDS:GPOPER_2 : FIELD NOT MULTI-TIME LEVEL')
 
 1057     pfld(:,yd(j)%MP9) = ydcom%VALUE
 
 1059 ELSEIF(cdact == 
'SET1TOVAL') 
THEN 
 1060   IF( .NOT. ydsc%LMTL) 
CALL abor1(
'SURFACE_FIELDS:GPOPER_2 : FIELD NOT MULTI-TIME LEVEL')
 
 1062     pfld(:,yd(j)%MP1) = ydcom%VALUE
 
 1064 ELSEIF(cdact == 
'SETALLTOVAL') 
THEN 
 1066     pfld(:,j) = ydcom%VALUE
 
 1068 ELSEIF(cdact == 
'SETDEFAULT') 
THEN 
 1070     IF(yd(j)%NREQIN == -1) 
THEN 
 1071       pfld(:,yd(j)%MP) = yd(j)%REFVALI
 
 1074 ELSEIF(cdact == 
'TRAJSTORE') 
THEN 
 1075   IF(ydsc%NDIM5 > 0 ) 
THEN 
 1076     iptr = ydsc%NOFFTRAJ
 
 1078       IF(yd(j)%ITRAJ == 1) 
THEN 
 1080         pfield(:,iptr) = pfld(:,yd(j)%MP)
 
 1084 ELSEIF(cdact == 
'TRAJSTORECST') 
THEN 
 1085   IF(ydsc%NDIM5 > 0 ) 
THEN 
 1086     iptr2 = ydsc%NOFFTRAJ_CST
 
 1088       IF(yd(j)%ITRAJ == 2) 
THEN 
 1090         pfield(:,iptr2) = pfld(:,yd(j)%MP)
 
 1094 ELSEIF(cdact == 
'SET0TOTRAJ') 
THEN 
 1095   IF(ydsc%NDIM5 > 0 ) 
THEN 
 1096     iptr = ydsc%NOFFTRAJ
 
 1098       IF(yd(j)%ITRAJ == 1) 
THEN 
 1100         pfld(:,yd(j)%MP) = pfield(:,iptr)
 
 1104 ELSEIF(cdact == 
'GETTRAJ') 
THEN 
 1105   IF(ydsc%NDIM5 > 0 ) 
THEN 
 1106     iptr = ydsc%NOFFTRAJ
 
 1107     iptr2 = ydsc%NOFFTRAJ_CST
 
 1109       IF(yd(j)%ITRAJ == 1) 
THEN 
 1111         pfld(:,yd(j)%MP5) = pfield(:,iptr)
 
 1112       ELSEIF(yd(j)%ITRAJ == 2) 
THEN 
 1114         pfld(:,yd(j)%MP5) = pfield2(:,iptr2)
 
 1118 ELSEIF(cdact == 
'GETALLFLDS') 
THEN 
 1123 ELSEIF(cdact == 
'PUTALLFLDS') 
THEN 
 1128 ELSEIF(cdact == 
'GETGRIBPOS') 
THEN 
 1130     ydcom%IPTRSURF = ydcom%IPTRSURF+1
 
 1131     IF(yd(j)%IGRBCODE == ydcom%IGRBCODE) 
THEN 
 1132       ydcom%IFLDNUM  = ydcom%IPTRSURF
 
 1136 ELSEIF(cdact == 
'GETFIELD') 
THEN 
 1138     ydcom%IPTRSURF = ydcom%IPTRSURF+1
 
 1139     IF(ydcom%IPTRSURF == ydcom%IFLDNUM) 
THEN 
 1140       pfield(:,1) = pfld(:,j)
 
 1144 ELSEIF(cdact == 
'GRIBIN') 
THEN 
 1146     ydcom%IPTRSURF = ydcom%IPTRSURF+1
 
 1147     IF(yd(j)%NREQIN == 1) 
THEN 
 1148       ydcom%ICOUNT = ydcom%ICOUNT+1
 
 1149       ydcom%ICODES(ydcom%ICOUNT) = yd(j)%IGRBCODE
 
 1153   WRITE(nulout,*) 
'SURFACE_FIELD:GPPOPER UNKNOWN ACTION - ',cdact
 
 1154   CALL abor1(
'SURFACE_FIELD:GPPOPER - UNKNOWN ACTION')
 
 1156 IF (
lhook) 
CALL dr_hook(
'SURFACE_FIELDS:GPOPER_2',1,zhook_handle)
 
 1161 SUBROUTINE gpoper_3(CDACT,PFLD,YDSC,YD,YDCOM,PFIELD,PFIELD2)
 
 1163 CHARACTER(LEN=*),
INTENT(IN)                :: CDACT
 
 1164 REAL(KIND=JPRB),
INTENT(INOUT)              :: PFLD(:,:,:)
 
 1168 REAL(KIND=JPRB),
OPTIONAL,
INTENT(INOUT)     :: PFIELD(:,:)
 
 1169 REAL(KIND=JPRB),
OPTIONAL,
INTENT(INOUT)     :: PFIELD2(:,:)
 
 1171 INTEGER(KIND=JPIM) :: J,JLEV,IPTR,IPTR2
 
 1172 REAL(KIND=JPRB) :: ZZPHY
 
 1173 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 
 1177 IF (
lhook) 
CALL dr_hook(
'SURFACE_FIELDS:GPOPER_3',0,zhook_handle)
 
 1178 IF(cdact == 
'SET9TO0') 
THEN 
 1179   IF( .NOT. ydsc%LMTL) 
CALL abor1(
'SURFACE_FIELDS:GPOPER_3 : FIELD NOT MULTI-TIME LEVEL')
 
 1181     pfld(:,:,yd(j)%MP9) = pfld(:,:,yd(j)%MP0)
 
 1183 ELSEIF(cdact == 
'SET1TO0') 
THEN 
 1184   IF( .NOT. ydsc%LMTL) 
CALL abor1(
'SURFACE_FIELDS:GPOPER_3 : FIELD NOT MULTI-TIME LEVEL')
 
 1186     pfld(:,:,yd(j)%MP1) = pfld(:,:,yd(j)%MP0)
 
 1188 ELSEIF(cdact == 
'SET1TO9') 
THEN 
 1189   IF( .NOT. ydsc%LMTL) 
CALL abor1(
'SURFACE_FIELDS:GPOPER_3 : FIELD NOT MULTI-TIME LEVEL')
 
 1191     pfld(:,:,yd(j)%MP1) = pfld(:,:,yd(j)%MP9)
 
 1193 ELSEIF(cdact == 
'SET1TO9AD') 
THEN 
 1194   IF( .NOT. ydsc%LMTL) 
CALL abor1(
'SURFACE_FIELDS:GPOPER_3 : FIELD NOT MULTI-TIME LEVEL')
 
 1196     pfld(:,:,yd(j)%MP9) = pfld(:,:,yd(j)%MP9)+pfld(:,:,yd(j)%MP1)
 
 1197     pfld(:,:,yd(j)%MP1) = 0.0_jprb
 
 1199 ELSEIF(cdact == 
'SET0TO1') 
THEN 
 1200   IF( .NOT. ydsc%LMTL) 
CALL abor1(
'SURFACE_FIELDS:GPOPER_3 : FIELD NOT MULTI-TIME LEVEL')
 
 1202     pfld(:,:,yd(j)%MP0) = pfld(:,:,yd(j)%MP1)
 
 1204 ELSEIF(cdact == 
'SET0TO1AD') 
THEN 
 1205   IF( .NOT. ydsc%LMTL) 
CALL abor1(
'SURFACE_FIELDS:GPOPER_3 : FIELD NOT MULTI-TIME LEVEL')
 
 1207     pfld(:,:,yd(j)%MP1) = pfld(:,:,yd(j)%MP1)+pfld(:,:,yd(j)%MP0)
 
 1208     pfld(:,:,yd(j)%MP0) = 0.0_jprb
 
 1210 ELSEIF(cdact == 
'SET9TO1') 
THEN 
 1211   IF( .NOT. ydsc%LMTL) 
CALL abor1(
'SURFACE_FIELDS:GPOPER_3 : FIELD NOT MULTI-TIME LEVEL')
 
 1213     pfld(:,:,yd(j)%MP9) = pfld(:,:,yd(j)%MP1)
 
 1215 ELSEIF(cdact == 
'PHTFILT') 
THEN 
 1216   IF( .NOT. ydsc%LMTL) 
CALL abor1(
'SURFACE_FIELDS:GPOPER_3 : FIELD NOT MULTI-TIME LEVEL')
 
 1219     pfld(:,:,yd(j)%MP9) = 
repsp1*pfld(:,:,yd(j)%MP1)+zzphy*pfld(:,:,yd(j)%MP0)
 
 1220     pfld(:,:,yd(j)%MP0) = pfld(:,:,yd(j)%MP1)
 
 1222 ELSEIF(cdact == 
'PHTFILTAD') 
THEN 
 1223   IF( .NOT. ydsc%LMTL) 
CALL abor1(
'SURFACE_FIELDS:GPOPER_3 : FIELD NOT MULTI-TIME LEVEL')
 
 1226     pfld(:,:,yd(j)%MP1) = pfld(:,:,yd(j)%MP1)+pfld(:,:,yd(j)%MP0)
 
 1227     pfld(:,:,yd(j)%MP0) = 0.0_jprb
 
 1228     pfld(:,:,yd(j)%MP1) = pfld(:,:,yd(j)%MP1)+
repsp1*pfld(:,:,yd(j)%MP9)
 
 1229     pfld(:,:,yd(j)%MP0) = pfld(:,:,yd(j)%MP0)+zzphy *pfld(:,:,yd(j)%MP9)
 
 1230     pfld(:,:,yd(j)%MP9) = 0.0_jprb
 
 1232 ELSEIF(cdact == 
'SET0TOVAL') 
THEN 
 1233   IF( .NOT. ydsc%LMTL) 
CALL abor1(
'SURFACE_FIELDS:GPOPER_3 : FIELD NOT MULTI-TIME LEVEL')
 
 1235     pfld(:,:,yd(j)%MP0) = ydcom%VALUE
 
 1237 ELSEIF(cdact == 
'SET9TOVAL') 
THEN 
 1238   IF( .NOT. ydsc%LMTL) 
CALL abor1(
'SURFACE_FIELDS:GPOPER_3 : FIELD NOT MULTI-TIME LEVEL')
 
 1240     pfld(:,:,yd(j)%MP9) = ydcom%VALUE
 
 1242 ELSEIF(cdact == 
'SET1TOVAL') 
THEN 
 1243   IF( .NOT. ydsc%LMTL) 
CALL abor1(
'SURFACE_FIELDS:GPOPER_3 : FIELD NOT MULTI-TIME LEVEL')
 
 1245     pfld(:,:,yd(j)%MP1) = ydcom%VALUE
 
 1247 ELSEIF(cdact == 
'SETALLTOVAL') 
THEN 
 1249     pfld(:,:,j) = ydcom%VALUE
 
 1251 ELSEIF(cdact == 
'SETDEFAULT') 
THEN 
 1253     DO jlev=1,ydsc%NLEVS
 
 1254       IF(yd(j)%NREQIN(jlev) == -1) 
THEN 
 1255         pfld(:,jlev,yd(j)%MP) = yd(j)%REFVALI(jlev)
 
 1259 ELSEIF(cdact == 
'TRAJSTORE') 
THEN 
 1260   IF(ydsc%NDIM5 > 0 ) 
THEN 
 1261     iptr = ydsc%NOFFTRAJ
 
 1263       IF(yd(j)%ITRAJ == 1) 
THEN 
 1264         DO jlev=1,ydsc%NLEVS
 
 1266           pfield(:,iptr) = pfld(:,jlev,yd(j)%MP)
 
 1271 ELSEIF(cdact == 
'TRAJSTORECST') 
THEN 
 1272   IF(ydsc%NDIM5 > 0 ) 
THEN 
 1273     iptr2 = ydsc%NOFFTRAJ_CST
 
 1275       IF(yd(j)%ITRAJ == 2) 
THEN 
 1276         DO jlev=1,ydsc%NLEVS
 
 1278           pfield(:,iptr2) = pfld(:,jlev,yd(j)%MP)
 
 1283 ELSEIF(cdact == 
'SET0TOTRAJ') 
THEN 
 1284   IF(ydsc%NDIM5 > 0 ) 
THEN 
 1285     iptr = ydsc%NOFFTRAJ
 
 1287       IF(yd(j)%ITRAJ == 1) 
THEN 
 1288         DO jlev=1,ydsc%NLEVS
 
 1290           pfld(:,jlev,yd(j)%MP) = pfield(:,iptr)
 
 1295 ELSEIF(cdact == 
'GETTRAJ') 
THEN 
 1296   IF(ydsc%NDIM5 > 0 ) 
THEN 
 1297     iptr = ydsc%NOFFTRAJ
 
 1298     iptr2 = ydsc%NOFFTRAJ_CST
 
 1300       IF(yd(j)%ITRAJ == 1) 
THEN 
 1301         DO jlev=1,ydsc%NLEVS
 
 1303           pfld(:,jlev,yd(j)%MP5) = pfield(:,iptr)
 
 1305       ELSEIF(yd(j)%ITRAJ == 2) 
THEN 
 1306         DO jlev=1,ydsc%NLEVS
 
 1308           pfld(:,jlev,yd(j)%MP5) = pfield2(:,iptr2)
 
 1313 ELSEIF(cdact == 
'GETALLFLDS') 
THEN 
 1315     DO jlev=1,ydsc%NLEVS
 
 1317       pfield(:,
nptrsurf) = pfld(:,jlev,j)
 
 1320 ELSEIF(cdact == 
'PUTALLFLDS') 
THEN 
 1322     DO jlev=1,ydsc%NLEVS
 
 1324       pfld(:,jlev,j) = pfield(:,
nptrsurf)
 
 1327 ELSEIF(cdact == 
'GETGRIBPOS') 
THEN 
 1329     DO jlev=1,ydsc%NLEVS
 
 1330       ydcom%IPTRSURF = ydcom%IPTRSURF+1
 
 1331       IF(yd(j)%IGRBCODE(jlev) == ydcom%IGRBCODE) 
THEN 
 1332         ydcom%IFLDNUM  = ydcom%IPTRSURF
 
 1337 ELSEIF(cdact == 
'GETFIELD') 
THEN 
 1339     DO jlev=1,ydsc%NLEVS
 
 1340       ydcom%IPTRSURF = ydcom%IPTRSURF+1
 
 1341       IF(ydcom%IPTRSURF == ydcom%IFLDNUM) 
THEN 
 1342         pfield(:,1) = pfld(:,jlev,j)
 
 1347 ELSEIF(cdact == 
'GRIBIN') 
THEN 
 1349     DO jlev=1,ydsc%NLEVS
 
 1350       ydcom%IPTRSURF = ydcom%IPTRSURF+1
 
 1351       IF(yd(j)%NREQIN(jlev) == 1) 
THEN 
 1352         ydcom%ICOUNT = ydcom%ICOUNT+1
 
 1353         ydcom%ICODES(ydcom%ICOUNT) = yd(j)%IGRBCODE(jlev)
 
 1358   WRITE(nulout,*) 
'SURFACE_FIELD:GPPOPER UNKNOWN ACTION - ',cdact
 
 1359   CALL abor1(
'SURFACE_FIELD:GPPOPER - UNKNOWN ACTION')
 
 1361 IF (
lhook) 
CALL dr_hook(
'SURFACE_FIELDS:GPOPER_3',1,zhook_handle)
 
 1368 INTEGER(KIND=JPIM) :: JBL
 
 1369 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 
 1371 IF (
lhook) 
CALL dr_hook(
'SURFACE_FIELDS:SURF_STORE',0,zhook_handle)
 
 1376 IF (
lhook) 
CALL dr_hook(
'SURFACE_FIELDS:SURF_STORE',1,zhook_handle)
 
 1383 INTEGER(KIND=JPIM) :: JBL
 
 1384 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 
 1386 IF (
lhook) 
CALL dr_hook(
'SURFACE_FIELDS:SURF_RESTORE',0,zhook_handle)
 
 1388  & 
CALL abor1(
'SURFACE_FIELDS:SURF_RESTORE - SURF_STORE NOT ALLOCATED')
 
 1393 IF (
lhook) 
CALL dr_hook(
'SURFACE_FIELDS:SURF_RESTORE',1,zhook_handle)
 
 1401 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 
 1403 IF (
lhook) 
CALL dr_hook(
'SURFACE_FIELDS:ALLO_SURF',0,zhook_handle)
 
 1423 IF (
lhook) 
CALL dr_hook(
'SURFACE_FIELDS:ALLO_SURF',1,zhook_handle)
 
 1430 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 
 1432 IF (
lhook) 
CALL dr_hook(
'SURFACE_FIELDS:DEALLO_SURF',0,zhook_handle)
 
 1451 IF (
lhook) 
CALL dr_hook(
'SURFACE_FIELDS:DEALLO_SURF',1,zhook_handle)
 
subroutine ini_sflp2(YDSC, YD, KFLDS, LDMTL, CDGRPNAME)
 
integer(kind=jpim) nofftraj_cst
 
real(kind=jprb), dimension(:,:,:), allocatable sd_vh
 
integer(kind=jpim) nundefld
 
type(type_sfl_vextr2) ysd_x2
 
type(type_sfl_vclix) ysd_vx
 
real(kind=jprb), dimension(:,:,:,:), allocatable sp_sb
 
type(type_sfl_vclia) ysd_va
 
type(type_surf_gen) ysp_x2d
 
type(type_surf_gen) ysd_xad
 
subroutine gpoper(CDACT, KBL, PSP_SB, PSP_SG, PSP_RR, PSD_VF, PSD_VV, YDCOM, PFIELD, PFIELD2)
 
type(type_sfl_vclin) ysd_vn
 
type(type_surf_gen) ysd_vvd
 
type(type_surf_gen) ysd_vfd
 
type(type_surf_gen) ysd_vxd
 
integer(kind=jpim) nsurfl
 
real(kind=jprb), dimension(:,:,:), allocatable sd_vd
 
type(type_sfl_waves) ysd_ws
 
real(kind=jprb), dimension(:,:,:), allocatable sp_rr
 
real(kind=jprb), dimension(:,:,:), allocatable sd_ws
 
real(kind=jprb), dimension(:,:,:), allocatable sd_vn
 
real(kind=jprb), dimension(:,:,:), allocatable sp_x2
 
integer(kind=jpim) nproma
 
real(kind=jprb), dimension(:,:,:), allocatable sd_vx
 
type(type_surf_gen) ysd_vcd
 
type(type_sfl_canri) ysp_ci
 
type(type_sfl_vclih) ysd_vh
 
type(type_sfl_resvr) ysp_rr
 
real(kind=jprb), dimension(:,:,:), allocatable sp_sg
 
real(kind=jprb), dimension(:,:,:,:), allocatable sp_ep
 
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
 
subroutine ini_sflp3(YDSC, YD, KFLDS, KLEVS, LDMTL, CDGRPNAME)
 
type(type_surf_gen) ysd_vhd
 
real(kind=jprb), dimension(:,:,:), allocatable sp_ci
 
type(type_sfl_vdiag) ysd_vd
 
real(kind=jprb), dimension(:,:,:), allocatable sd_vp
 
type(type_sfl_extrp) ysp_ep
 
real(kind=jprb), dimension(:,:,:,:), allocatable sd_xa
 
integer(kind=jpim), parameter jpmaxsflds
 
integer(kind=jpim) nprogsurfl
 
type(type_surf_gen) ysd_vdd
 
subroutine setup_sflp2(YDSC, YD, KGRIB, CDNAME, PDEFAULT, KTRAJ, KREQIN)
 
subroutine gppoper(CDACT, KBL, PSP_SB, PSP_SG, PSP_RR, PSP_EP, PSP_X2, YDCOM)
 
type(type_sfl_varsf) ysd_vf
 
real(kind=jprb), dimension(:,:,:), allocatable surf_store_array
 
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
 
integer(kind=jpim), dimension(jpmaxstraj) nstrajgrib
 
type(type_surf_gen) ysp_rrd
 
subroutine setup_sflp3(YDSC, YD, KGRIB, CDNAME, PDEFAULT, KTRAJ, KREQIN)
 
integer(kind=jpim) ndimsurf
 
type(type_surf_gen) ysp_sgd
 
type(type_sfl_xtrp2) ysp_x2
 
type(type_sfl_vo3abc) ysd_vc
 
subroutine gpoper_2(CDACT, PFLD, YDSC, YD, YDCOM, PFIELD, PFIELD2)
 
type(type_sfl_soilb) ysp_sb
 
type(type_sfl_vextra) ysd_xa
 
type(type_sfl_snowg) ysp_sg
 
real(kind=jprb), dimension(:,:,:), allocatable sd_va
 
integer(kind=jpim) nprogsurf
 
subroutine dr_hook(CDNAME, KSWITCH, PKEY)
 
type(type_surf_gen) ysd_vad
 
type(type_surf_gen) ysp_sbd
 
type(type_sfl_vclip) ysd_vp
 
subroutine gpoper_3(CDACT, PFLD, YDSC, YD, YDCOM, PFIELD, PFIELD2)
 
integer(kind=jpim), parameter jpmaxstraj
 
type(type_surf_gen) ysp_epd
 
integer(kind=jpim) ngpblks
 
type(type_surf_gen) ysd_x2d
 
real(kind=jprb), dimension(:,:,:), allocatable sd_vv
 
real(kind=jprb), dimension(:,:,:), allocatable sd_vf
 
type(type_sfl_vcliv) ysd_vv
 
real(kind=jprb), dimension(:,:,:), allocatable sd_x2
 
real(kind=jprb), dimension(:,:,:), allocatable sd_vc
 
type(type_surf_gen) ysd_vpd
 
integer(kind=jpim) ndimsurfl
 
type(type_surf_gen) ysd_wsd
 
integer(kind=jpim) nofftraj
 
type(type_surf_gen) ysp_cid
 
integer(kind=jpim) nptrsurf
 
type(type_surf_gen) ysd_vnd