6 iluout,pzdg,pzdg_old,pfield,pfield_old)
48 USE modi_get_surf_mask_n
50 USE yomhook
,ONLY : lhook, dr_hook
51 USE parkind1
,ONLY : jprb
60 TYPE(isba_grid_t
),
INTENT(INOUT) :: ig
61 TYPE(isba_t
),
INTENT(INOUT) :: i
64 INTEGER,
INTENT(IN ) :: iluout
65 REAL,
DIMENSION(:,:,:),
INTENT(IN ) :: pfield_old,pzdg,pzdg_old
66 REAL,
DIMENSION(:,:,:),
INTENT(INOUT) :: pfield
71 REAL,
DIMENSION(SIZE(PFIELD,1)) :: zfield,zfield_old, zfrac_nat
72 INTEGER,
DIMENSION(SIZE(U%XNATURE)) :: imask
73 INTEGER :: ini, ipatch, ifull, ilev
74 INTEGER :: jlev, jpatch, jj
75 REAL :: zratio_tot, zwork1,zwork2
77 REAL(KIND=JPRB) :: zhook_handle
81 IF (lhook) CALL dr_hook(
'CONSERV_GLOBAL_MASS',0,zhook_handle)
85 ipatch =
SIZE(pfield,3)
86 ifull =
SIZE(u%XNATURE )
90 'NATURE',ifull,imask,u%NSIZE_FULL,iluout)
92 zfrac_nat(:)=zfrac_nat(:)*ig%XMESH_SIZE(:)
99 zfield(jj) = zfield(jj) + pfield(jj,jlev,jpatch)*pzdg(jj,jlev,jpatch)*i%XPATCH(jj,jpatch)
100 zfield_old(jj)= zfield_old(jj) + pfield_old(jj,jlev,jpatch)*pzdg_old(jj,jlev,jpatch)*i%XPATCH_OLD(jj,jpatch)
110 zwork1=zwork1+zfield(jj)*zfrac_nat(jj)
111 zwork2=zwork2+zfield_old(jj)*zfrac_nat(jj)
115 zratio_tot = zwork1/zwork2
118 WHERE(pfield(:,:,:)/=xundef) pfield(:,:,:)= pfield(:,:,:) * zratio_tot
122 IF (lhook) CALL dr_hook(
'CONSERV_GLOBAL_MASS',1,zhook_handle)
subroutine conserv_global_mass(DTCO, IG, I, U, ILUOUT, PZDG, PZDG_OLD, PFIELD, PFIELD_OLD)
subroutine get_surf_mask_n(DTCO, U, HTYPE, KDIM, KMASK, KLU, KLUOUT)