diff --git a/src/SURFEX/conserv_global_mass.F90 b/src/SURFEX/conserv_global_mass.F90 deleted file mode 100644 index 9162e3524c2f110741cbc2dd9a6c756f2adf765d..0000000000000000000000000000000000000000 --- a/src/SURFEX/conserv_global_mass.F90 +++ /dev/null @@ -1,187 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. - SUBROUTINE CONSERV_GLOBAL_MASS (DTCO, U, NP, NPE, PMESH_SIZE, KPATCH, & - ILUOUT, PZDG, PZDG_OLD, HNAME, PFIELD_OLD) -!! -!!**** *CONSERV_GLOBAL_MASS* - routine to conserve global 3D mass (LAND USE case) -!! -!! PURPOSE -!! ------- -!! -!! METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! AUTHOR -!! ------ -!! -!! R. Alkama Meteo-France -!! -!! MODIFICATION -!! ------------ -!! Original 07/2011 -!! -!! -!!* 0. DECLARATION -! ----------- -! -! -! -USE MODD_DATA_COVER_n, ONLY : DATA_COVER_t -USE MODD_SFX_GRID_n, ONLY : GRID_t -USE MODD_ISBA_n, ONLY : ISBA_NP_t, ISBA_NPE_t, ISBA_P_t -USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t -! -USE MODD_SURF_PAR, ONLY : XUNDEF -! -USE MODI_PACK_SAME_RANK -USE MODI_GET_SURF_MASK_n -! -USE MODD_SURFEX_MPI, ONLY : NPROC, NRANK, NPIO, NCOMM -USE MODI_GATHER_AND_WRITE_MPI -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! -#ifdef SFX_MPI -INCLUDE "mpif.h" -#endif -! -!* 0.1 Declaration of arguments -! ------------------------ -! -! -TYPE(DATA_COVER_t), INTENT(INOUT) :: DTCO -TYPE(SURF_ATM_t), INTENT(INOUT) :: U -TYPE(ISBA_NP_t), INTENT(INOUT) :: NP -TYPE(ISBA_NPE_t), INTENT(INOUT) :: NPE -REAL, DIMENSION(:), INTENT(IN) :: PMESH_SIZE -INTEGER, INTENT(IN) :: KPATCH -! -INTEGER, INTENT(IN ) :: ILUOUT -REAL, DIMENSION(:,:,:), INTENT(IN ) :: PFIELD_OLD,PZDG,PZDG_OLD - CHARACTER(LEN=3), INTENT(IN) :: HNAME -! -!* 0.2 Declaration of local variables -! ------------------------------ -! -TYPE(ISBA_P_t), POINTER :: PK -! -REAL, DIMENSION(U%NSIZE_NATURE,SIZE(NPE%AL(1)%XWG,2),KPATCH) :: ZFIELD0 -REAL, DIMENSION(U%NSIZE_NATURE) :: ZFIELD,ZFIELD_OLD, ZFRAC_NAT -INTEGER, DIMENSION(SIZE(U%XNATURE)) :: IMASK ! mask for packing from complete field to nature field -INTEGER :: INI, IPATCH, IFULL, ILEV -INTEGER :: JLEV, JP, JJ ! loop counter -REAL :: ZRATIO_TOT, ZWORK1,ZWORK2 -! -REAL, DIMENSION(:), ALLOCATABLE :: ZFIELD_TOT, ZFIELD_OLD_TOT, ZFRAC_NAT_TOT -INTEGER :: INFOMPI -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -!------------------------------------------------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('CONSERV_GLOBAL_MASS',0,ZHOOK_HANDLE) -! -IF (TRIM(HNAME)=="WG") THEN - DO JP = 1,KPATCH - ZFIELD0(:,:,JP) = NPE%AL(JP)%XWG(:,:) - ENDDO -ELSEIF (TRIM(HNAME)=="WGI") THEN - DO JP = 1,KPATCH - ZFIELD0(:,:,JP) = NPE%AL(JP)%XWGI(:,:) - ENDDO -ENDIF -! -INI = SIZE(PZDG,1) -ILEV = SIZE(PZDG,2) -IFULL = SIZE(U%XNATURE ) -! -ZFRAC_NAT = 1. - CALL GET_SURF_MASK_n(DTCO, U, 'NATURE',IFULL,IMASK,U%NSIZE_FULL,ILUOUT) - CALL PACK_SAME_RANK(IMASK,U%XNATURE,ZFRAC_NAT) -ZFRAC_NAT(:)=ZFRAC_NAT(:)*PMESH_SIZE(:) -! -ZFIELD(:) =0.0 -ZFIELD_OLD(:)=0.0 -DO JP=1,KPATCH - PK => NP%AL(JP) - DO JLEV=1,ILEV - DO JJ=1,PK%NSIZE_P - IMASK = PK%NR_P(JJ) - ! - ZFIELD(IMASK) = ZFIELD(IMASK) + ZFIELD0(JJ,JLEV,JP)*PZDG(JJ,JLEV,JP)*PK%XPATCH(JJ) - ZFIELD_OLD(IMASK)= ZFIELD_OLD(IMASK) + PFIELD_OLD(JJ,JLEV,JP)*PZDG_OLD(JJ,JLEV,JP)*PK%XPATCH_OLD(JJ) - ! - ENDDO - ENDDO -ENDDO -! -ZWORK1=0.0 -ZWORK2=0.0 -ZRATIO_TOT = 1.0 -! -IF (NPROC==1) THEN - DO JJ=1,INI - ZWORK1=ZWORK1+ZFIELD (JJ)*ZFRAC_NAT(JJ) - ZWORK2=ZWORK2+ZFIELD_OLD(JJ)*ZFRAC_NAT(JJ) - ENDDO -ELSE - IF (NRANK==NPIO) THEN - ALLOCATE(ZFIELD_TOT(U%NDIM_FULL),ZFIELD_OLD_TOT(U%NDIM_FULL),ZFRAC_NAT_TOT(U%NDIM_FULL)) - ELSE - ALLOCATE(ZFIELD_TOT(0),ZFIELD_OLD_TOT(0),ZFRAC_NAT_TOT(0)) - ENDIF - CALL GATHER_AND_WRITE_MPI(ZFIELD,ZFIELD_TOT,U%NR_NATURE) - CALL GATHER_AND_WRITE_MPI(ZFIELD_OLD,ZFIELD_OLD_TOT,U%NR_NATURE) - CALL GATHER_AND_WRITE_MPI(ZFRAC_NAT,ZFRAC_NAT_TOT,U%NR_NATURE) - IF (NRANK==NPIO) THEN - DO JJ=1,U%NDIM_FULL - IF (ZFIELD_TOT(JJ)/=XUNDEF) THEN - ZWORK1=ZWORK1+ZFIELD_TOT (JJ)*ZFRAC_NAT_TOT(JJ) - ZWORK2=ZWORK2+ZFIELD_OLD_TOT(JJ)*ZFRAC_NAT_TOT(JJ) - ENDIF - ENDDO - ENDIF -#ifdef SFX_MPI - CALL MPI_BCAST(ZWORK1,KIND(ZWORK1)/4,MPI_REAL,NPIO,NCOMM,INFOMPI) - CALL MPI_BCAST(ZWORK2,KIND(ZWORK2)/4,MPI_REAL,NPIO,NCOMM,INFOMPI) -#endif - DEALLOCATE(ZFIELD_TOT,ZFIELD_OLD_TOT,ZFRAC_NAT_TOT) -ENDIF -! -IF(ZWORK2/= 0.)THEN - ZRATIO_TOT = ZWORK1/ZWORK2 -ENDIF -! -WHERE(ZFIELD0(:,:,:)/=XUNDEF) ZFIELD0(:,:,:)= ZFIELD0(:,:,:) * ZRATIO_TOT -! -IF (TRIM(HNAME)=="WG") THEN - DO JP = 1,KPATCH - NPE%AL(JP)%XWG(:,:) = ZFIELD0(:,:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=="WGI") THEN - DO JP = 1,KPATCH - NPE%AL(JP)%XWGI(:,:) = ZFIELD0(:,:,JP) - ENDDO -ENDIF -! -!------------------------------------------------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('CONSERV_GLOBAL_MASS',1,ZHOOK_HANDLE) -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE CONSERV_GLOBAL_MASS diff --git a/src/SURFEX/ini_var_from_patch.F90 b/src/SURFEX/ini_var_from_patch.F90 deleted file mode 100644 index dca0e3d8d3f06d1e417ac23fd10894ec7933c5ac..0000000000000000000000000000000000000000 --- a/src/SURFEX/ini_var_from_patch.F90 +++ /dev/null @@ -1,436 +0,0 @@ -!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. - SUBROUTINE INI_VAR_FROM_PATCH (DTCO, UG, U, NP, NPE, KPATCH,& - HPROGRAM,KLUOUT,HNAME,KPTS,KLAYER,KLAYER2,PDEF) -!! -!! PURPOSE -!! ------- -!! -!! (1) KPTS=n interpol field with n pts -!! (2) KPTS=0 conserve cells mass -!! Case 2 : simple extrapolation based on the inside cell informations. -!! this is donne before conserving cell or global mass -!! -!! METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! AUTHOR -!! ------ -!! -!! R. Alkama Meteo-France -!! -!! MODIFICATION -!! ------------ -!! Original 12/2010 -!! -!---------------------------------------------------------------------------- -!!* 0. DECLARATION -! ----------- -! -USE MODD_DATA_COVER_n, ONLY : DATA_COVER_t -USE MODD_SURF_ATM_GRID_n, ONLY : SURF_ATM_GRID_t -USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t -! -USE MODD_ISBA_n, ONLY : ISBA_NP_t, ISBA_NPE_t, ISBA_P_t, ISBA_PE_t -! -USE MODD_SURF_PAR, ONLY : XUNDEF -! -USE MODI_GET_SURF_MASK_n -USE MODI_INTERPOL_FIELD -USE MODI_UNPACK_SAME_RANK -USE MODI_PACK_SAME_RANK -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! -!* 0.1 Declaration of arguments -! ------------------------ -! -! -TYPE(DATA_COVER_t), INTENT(INOUT) :: DTCO -TYPE(SURF_ATM_GRID_t), INTENT(INOUT) :: UG -TYPE(SURF_ATM_t), INTENT(INOUT) :: U -! -TYPE(ISBA_NP_t), INTENT(INOUT) :: NP -TYPE(ISBA_NPE_t), INTENT(INOUT) :: NPE -! -INTEGER, INTENT(IN) :: KPATCH -! - CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! host model -INTEGER, INTENT(IN) :: KLUOUT -INTEGER, INTENT(IN) :: KPTS - CHARACTER(LEN=*), INTENT(IN) :: HNAME -! -INTEGER, INTENT(IN), OPTIONAL :: KLAYER -INTEGER, INTENT(IN), OPTIONAL :: KLAYER2 -! -REAL, DIMENSION(:), OPTIONAL, INTENT(IN) :: PDEF -! -!* 0.2 Declaration of local variables -! ------------------------------ -! -TYPE(ISBA_P_t), POINTER :: PK -TYPE(ISBA_PE_t), POINTER :: PEK -LOGICAL, DIMENSION(U%NSIZE_NATURE,KPATCH) :: GVEG -REAL, DIMENSION(U%NSIZE_NATURE) :: ZFIELD1_TOT, ZFIELD2_TOT -INTEGER, DIMENSION(U%NSIZE_NATURE) :: IMASK ! mask for packing from complete field to nature field -INTEGER, DIMENSION(U%NSIZE_NATURE) :: NSIZE -INTEGER, DIMENSION(U%NSIZE_NATURE) :: NSIZE_NAT -INTEGER, DIMENSION(U%NSIZE_FULL) :: NSIZE_TOT -REAL, DIMENSION(U%NSIZE_FULL) :: ZFIELD_TOT -REAL, DIMENSION(U%NSIZE_NATURE) :: ZFIELD_NAT -REAL, DIMENSION(U%NSIZE_NATURE,KPATCH) :: ZFIELD -INTEGER :: INI, IPATCH, IFULL, INPTS, JI -INTEGER :: JP, IMASK0 ! loop counter on patch -REAL :: ZRATIO_TOT -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -!------------------------------------------------------------------------------- -! (1) & (2) INTERPOL FILED -!------------------------- -! -IF (LHOOK) CALL DR_HOOK('INI_VAR_FROM_PATCH',0,ZHOOK_HANDLE) -! -INI=U%NSIZE_NATURE -! -IF (TRIM(HNAME)=='WR') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%XWR(:) - ENDDO -ELSEIF (TRIM(HNAME)=='ICE_STO') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%XICE_STO(:) - ENDDO -ELSEIF (TRIM(HNAME)=='TEMP GRO') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%XTG(:,KLAYER) - ENDDO -ELSEIF (TRIM(HNAME)=='ALBSNOW') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%TSNOW%ALB(:) - ENDDO -ELSEIF (TRIM(HNAME)=='EMISSNOW') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%TSNOW%EMIS(:) - ENDDO -ELSEIF (TRIM(HNAME)=='TSSNOW') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%TSNOW%TS(:) - ENDDO -ELSEIF (TRIM(HNAME)=='WSNOW') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%TSNOW%WSNOW(:,KLAYER) - ENDDO -ELSEIF (TRIM(HNAME)=='TEMPSNOW') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%TSNOW%TEMP(:,KLAYER) - ENDDO -ELSEIF (TRIM(HNAME)=='HEATSNOW') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%TSNOW%HEAT(:,KLAYER) - ENDDO -ELSEIF (TRIM(HNAME)=='AGESNOW') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%TSNOW%AGE(:,KLAYER) - ENDDO -ELSEIF (TRIM(HNAME)=='TSNOW') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%TSNOW%T(:,KLAYER) - ENDDO -ELSEIF (TRIM(HNAME)=='GR1SNOW') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%TSNOW%GRAN1(:,KLAYER) - ENDDO -ELSEIF (TRIM(HNAME)=='GR2SNOW') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%TSNOW%GRAN2(:,KLAYER) - ENDDO -ELSEIF (TRIM(HNAME)=='HISTSNOW') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%TSNOW%HIST(:,KLAYER) - ENDDO -ELSEIF (TRIM(HNAME)=='WG') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%XWG(:,KLAYER) - ENDDO -ELSEIF (TRIM(HNAME)=='WGI') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%XWGI(:,KLAYER) - ENDDO -ELSEIF (TRIM(HNAME)=='RESA') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%XRESA(:) - ENDDO -ELSEIF (TRIM(HNAME)=='RHOSNOW') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%TSNOW%RHO(:,KLAYER) - ENDDO -ELSEIF (TRIM(HNAME)=='AN') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%XAN(:) - ENDDO -ELSEIF (TRIM(HNAME)=='ANDAY') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%XANDAY(:) - ENDDO -ELSEIF (TRIM(HNAME)=='ANFM') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%XANFM(:) - ENDDO -ELSEIF (TRIM(HNAME)=='LE') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%XLE(:) - ENDDO -ELSEIF (TRIM(HNAME)=='RESPBIOM') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%XRESP_BIOMASS(:,KLAYER) - ENDDO -ELSEIF (TRIM(HNAME)=='BIOMASS') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%XBIOMASS(:,KLAYER) - ENDDO -ELSEIF (TRIM(HNAME)=='LIGNINST') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%XLIGNIN_STRUC(:,KLAYER) - ENDDO -ELSEIF (TRIM(HNAME)=='LITTER') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%XLITTER(:,KLAYER,KLAYER2) - ENDDO -ELSEIF (TRIM(HNAME)=='SOILCARB') THEN - DO JP = 1,KPATCH - ZFIELD(:,JP) = NPE%AL(JP)%XSOILCARB(:,KLAYER) - ENDDO -ENDIF - -IF (KPTS>0)THEN - ! - CALL GET_SURF_MASK_n(DTCO, U, 'NATURE',INI,IMASK,U%NSIZE_FULL,KLUOUT) - ! - DO JP=1,KPATCH - ! - NSIZE(:)=0 - WHERE (ZFIELD(:,JP).NE.XUNDEF) NSIZE(:)=1 - WHERE (NP%AL(JP)%XPATCH(:)==0.) NSIZE(:)=-1 - ! - CALL UNPACK_SAME_RANK(NP%AL(JP)%NR_P,NSIZE,NSIZE_NAT,-1) - CALL UNPACK_SAME_RANK(IMASK,NSIZE_NAT,NSIZE_TOT,-1) - ! - CALL UNPACK_SAME_RANK(NP%AL(JP)%NR_P,ZFIELD(:,JP),ZFIELD_NAT) - CALL UNPACK_SAME_RANK(IMASK,ZFIELD_NAT,ZFIELD_TOT) - ! - IF(PRESENT(PDEF))THEN - CALL INTERPOL_FIELD(UG, U, & - HPROGRAM,KLUOUT,NSIZE_TOT,ZFIELD_TOT,HNAME,PDEF=PDEF(JP),KNPTS=KPTS) - ELSE - CALL INTERPOL_FIELD(UG, U, HPROGRAM,KLUOUT,NSIZE_TOT,ZFIELD_TOT,HNAME,KNPTS=KPTS) - ENDIF - ! - CALL PACK_SAME_RANK(IMASK,ZFIELD_TOT,ZFIELD_NAT) - CALL PACK_SAME_RANK(NP%AL(JP)%NR_P,ZFIELD_NAT,ZFIELD(:,JP)) - ! - ENDDO - ! -ELSE -! -!------------------------------------------------------------------------------- -! (3) Cell mass conservative + simple interpolation based on global cell -! informations -!---------------------------- -! - ! - ZFIELD1_TOT(:)=0. - ZFIELD2_TOT(:)=0. - ! - GVEG(:,:)=.TRUE. - ! - IF (TRIM(HNAME)=='WR')THEN - !no interception over soil(1), roc(2) and glaciers(3) - DO JP=1,KPATCH - PK => NP%AL(JP) - PEK => NPE%AL(JP) - - WHERE(PK%XPATCH(:) /=0. .AND. PK%XPATCH_OLD(:) ==0..AND.PEK%XLAI(:)==0.) - ZFIELD(:,JP) = 0. - GVEG (:,JP) = .FALSE. - ENDWHERE - END DO - END IF - ! - !quantity of water before restart in each grid point - ZFIELD1_TOT(:) = 0.0 - DO JP = 1,KPATCH - PK => NP%AL(JP) - DO JI = 1,PK%NSIZE_P - IMASK0 = PK%NR_P(JI) - ZFIELD1_TOT(IMASK0)=ZFIELD1_TOT(IMASK0)+ PK%XPATCH_OLD(JI) * ZFIELD(JI,JP) - ENDDO - END DO - ! - ZFIELD2_TOT(:) = 0.0 - DO JP=1,KPATCH - PK => NP%AL(JP) - DO JI = 1,PK%NSIZE_P - IMASK0 = PK%NR_P(JI) - !if a patch appears in a grid point, it takes the quantity of water in the - !whole grid point before - IF(PK%XPATCH(JI) /=0. .AND. PK%XPATCH_OLD(JI)==0. .AND. GVEG (JI,JP)) THEN - ZFIELD(JI,JP)=ZFIELD1_TOT(IMASK0) - ENDIF - !quantity of water after restart and landuse in each grid point - ZFIELD2_TOT(IMASK0)=ZFIELD2_TOT(IMASK0)+ PK%XPATCH(JI)*ZFIELD(JI,JP) - ENDDO - END DO - ! - ! Conserve cell mass if not WG and WGI - ! If WG or WGI conserve global mass via CONSERV_GLOBAL_MASS routine - ! is recomanded - ! - IF (TRIM(HNAME)/='WG' .AND. TRIM(HNAME)/='WGI') THEN - DO JP=1,KPATCH - PK => NP%AL(JP) - DO JI = 1,PK%NSIZE_P - IMASK0 = PK%NR_P(JI) - IF (ZFIELD2_TOT(IMASK0) > 1.E-12) THEN - ZFIELD(JI,JP)=(ZFIELD1_TOT(IMASK0)/ZFIELD2_TOT(IMASK0))*ZFIELD(JI,JP) - ENDIF - END DO - END DO - ENDIF - ! - DO JP = 1,KPATCH - WHERE(NP%AL(JP)%XPATCH(:) ==0.)ZFIELD(:,JP)=XUNDEF - ENDDO - ! -ENDIF -! -IF (TRIM(HNAME)=='WR') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%XWR(:) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='ICE_STO') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%XICE_STO(:) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='TEMP GRO') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%XTG(:,KLAYER) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='ALBSNOW') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%TSNOW%ALB(:) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='EMISSNOW') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%TSNOW%EMIS(:) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='TSSNOW') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%TSNOW%TS(:) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='WSNOW') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%TSNOW%WSNOW(:,KLAYER) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='TEMPSNOW') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%TSNOW%TEMP(:,KLAYER) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='HEATSNOW') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%TSNOW%HEAT(:,KLAYER) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='AGESNOW') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%TSNOW%AGE(:,KLAYER) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='TSNOW') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%TSNOW%T(:,KLAYER) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='GR1SNOW') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%TSNOW%GRAN1(:,KLAYER) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='GR2SNOW') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%TSNOW%GRAN2(:,KLAYER) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='HISTSNOW') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%TSNOW%HIST(:,KLAYER) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='WG') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%XWG(:,KLAYER) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='WGI') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%XWGI(:,KLAYER) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='RESA') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%XRESA(:) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='RHOSNOW') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%TSNOW%RHO(:,KLAYER) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='AN') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%XAN(:) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='ANDAY') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%XANDAY(:) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='ANFM') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%XANFM(:) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='LE') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%XLE(:) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='RESPBIOM') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%XRESP_BIOMASS(:,KLAYER) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='BIOMASS') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%XBIOMASS(:,KLAYER) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='LIGNINST') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%XLIGNIN_STRUC(:,KLAYER) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='LITTER') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%XLITTER(:,KLAYER,KLAYER2) = ZFIELD(:,JP) - ENDDO -ELSEIF (TRIM(HNAME)=='SOILCARB') THEN - DO JP = 1,KPATCH - NPE%AL(JP)%XSOILCARB(:,KLAYER) = ZFIELD(:,JP) - ENDDO -ENDIF -!------------------------------------------------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('INI_VAR_FROM_PATCH',1,ZHOOK_HANDLE) -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE INI_VAR_FROM_PATCH