46 USE yomhook
,ONLY : lhook, dr_hook
47 USE parkind1
,ONLY : jprb
96 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: pz_o_lmo
97 REAL,
DIMENSION(SIZE(PZ_O_LMO,1), &
SIZE(PZ_O_LMO,2),SIZE(PZ_O_LMO,3)) ::
businger_phim_3d
98 REAL(KIND=JPRB) :: zhook_handle
100 IF (lhook) CALL dr_hook(
'MODE_SBLS:BUSINGER_PHIM_3D',0,zhook_handle)
101 WHERE ( pz_o_lmo(:,:,:) < 0. )
106 IF (lhook) CALL dr_hook(
'MODE_SBLS:BUSINGER_PHIM_3D',1,zhook_handle)
113 REAL,
DIMENSION(:,:),
INTENT(IN) :: pz_o_lmo
115 REAL(KIND=JPRB) :: zhook_handle
117 IF (lhook) CALL dr_hook(
'MODE_SBLS:BUSINGER_PHIM_2D',0,zhook_handle)
118 WHERE ( pz_o_lmo(:,:) < 0. )
123 IF (lhook) CALL dr_hook(
'MODE_SBLS:BUSINGER_PHIM_2D',1,zhook_handle)
130 REAL,
DIMENSION(:),
INTENT(IN) :: pz_o_lmo
132 REAL(KIND=JPRB) :: zhook_handle
134 IF (lhook) CALL dr_hook(
'MODE_SBLS:BUSINGER_PHIM_1D',0,zhook_handle)
135 WHERE ( pz_o_lmo(:) < 0. )
140 IF (lhook) CALL dr_hook(
'MODE_SBLS:BUSINGER_PHIM_1D',1,zhook_handle)
147 REAL,
INTENT(IN) :: pz_o_lmo
149 REAL(KIND=JPRB) :: zhook_handle
151 IF (lhook) CALL dr_hook(
'MODE_SBLS:BUSINGER_PHIM_0D',0,zhook_handle)
152 IF ( pz_o_lmo < 0. )
THEN
157 IF (lhook) CALL dr_hook(
'MODE_SBLS:BUSINGER_PHIM_0D',1,zhook_handle)
165 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: pz_o_lmo
166 REAL,
DIMENSION(SIZE(PZ_O_LMO,1), &
SIZE(PZ_O_LMO,2),SIZE(PZ_O_LMO,3)) ::
businger_phih_3d
167 REAL(KIND=JPRB) :: zhook_handle
169 IF (lhook) CALL dr_hook(
'MODE_SBLS:BUSINGER_PHIH_3D',0,zhook_handle)
170 WHERE ( pz_o_lmo(:,:,:) < 0. )
175 IF (lhook) CALL dr_hook(
'MODE_SBLS:BUSINGER_PHIH_3D',1,zhook_handle)
182 REAL,
DIMENSION(:,:),
INTENT(IN) :: pz_o_lmo
184 REAL(KIND=JPRB) :: zhook_handle
186 IF (lhook) CALL dr_hook(
'MODE_SBLS:BUSINGER_PHIH_2D',0,zhook_handle)
187 WHERE ( pz_o_lmo(:,:) < 0. )
192 IF (lhook) CALL dr_hook(
'MODE_SBLS:BUSINGER_PHIH_2D',1,zhook_handle)
199 REAL,
DIMENSION(:),
INTENT(IN) :: pz_o_lmo
201 REAL(KIND=JPRB) :: zhook_handle
203 IF (lhook) CALL dr_hook(
'MODE_SBLS:BUSINGER_PHIH_1D',0,zhook_handle)
204 WHERE ( pz_o_lmo(:) < 0. )
209 IF (lhook) CALL dr_hook(
'MODE_SBLS:BUSINGER_PHIH_1D',1,zhook_handle)
216 REAL,
INTENT(IN) :: pz_o_lmo
218 REAL(KIND=JPRB) :: zhook_handle
220 IF (lhook) CALL dr_hook(
'MODE_SBLS:BUSINGER_PHIH_0D',0,zhook_handle)
221 IF ( pz_o_lmo < 0. )
THEN
226 IF (lhook) CALL dr_hook(
'MODE_SBLS:BUSINGER_PHIH_0D',1,zhook_handle)
235 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: pz_o_lmo
236 REAL,
DIMENSION(SIZE(PZ_O_LMO,1), &
SIZE(PZ_O_LMO,2),SIZE(PZ_O_LMO,3)) ::
businger_phie_3d
237 REAL(KIND=JPRB) :: zhook_handle
239 IF (lhook) CALL dr_hook(
'MODE_SBLS:BUSINGER_PHIE_3D',0,zhook_handle)
240 WHERE ( pz_o_lmo(:,:,:) < 0. )
242 * (1.-15.*pz_o_lmo)**(0.5)
246 IF (lhook) CALL dr_hook(
'MODE_SBLS:BUSINGER_PHIE_3D',1,zhook_handle)
254 REAL,
DIMENSION(:,:),
INTENT(IN) :: pz_o_lmo
256 REAL(KIND=JPRB) :: zhook_handle
258 IF (lhook) CALL dr_hook(
'MODE_SBLS:BUSINGER_PHIE_2D',0,zhook_handle)
259 WHERE ( pz_o_lmo(:,:) < 0. )
261 * (1.-15.*pz_o_lmo)**(0.5)
265 IF (lhook) CALL dr_hook(
'MODE_SBLS:BUSINGER_PHIE_2D',1,zhook_handle)
273 REAL,
DIMENSION(:),
INTENT(IN) :: pz_o_lmo
275 REAL(KIND=JPRB) :: zhook_handle
277 IF (lhook) CALL dr_hook(
'MODE_SBLS:BUSINGER_PHIE_1D',0,zhook_handle)
278 WHERE ( pz_o_lmo(:) < 0. )
280 * (1.-15.*pz_o_lmo)**(0.5)
284 IF (lhook) CALL dr_hook(
'MODE_SBLS:BUSINGER_PHIE_1D',1,zhook_handle)
292 REAL,
INTENT(IN):: pz_o_lmo
294 REAL(KIND=JPRB) :: zhook_handle
296 IF (lhook) CALL dr_hook(
'MODE_SBLS:BUSINGER_PHIE_0D',0,zhook_handle)
297 IF ( pz_o_lmo < 0. )
THEN
299 * (1.-15.*pz_o_lmo)**(0.5)
303 IF (lhook) CALL dr_hook(
'MODE_SBLS:BUSINGER_PHIE_0D',1,zhook_handle)
312 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: pz_o_lmo
313 REAL,
DIMENSION(SIZE(PZ_O_LMO,1), &
SIZE(PZ_O_LMO,2),SIZE(PZ_O_LMO,3)) ::
paulson_psim_3d
315 REAL,
DIMENSION(SIZE(PZ_O_LMO,1), &
SIZE(PZ_O_LMO,2),SIZE(PZ_O_LMO,3)) :: zx
316 REAL(KIND=JPRB) :: zhook_handle
318 IF (lhook) CALL dr_hook(
'MODE_SBLS:PAULSON_PSIM_3D',0,zhook_handle)
320 WHERE ( pz_o_lmo(:,:,:) < 0. )
321 zx=(1.-15.*pz_o_lmo)**(0.25)
322 paulson_psim_3d(:,:,:) = log( (1.+zx**2)*(1+zx)**2/8. ) - 2.*atan(zx) + xpi/2.
326 IF (lhook) CALL dr_hook(
'MODE_SBLS:PAULSON_PSIM_3D',1,zhook_handle)
334 REAL,
DIMENSION(:,:),
INTENT(IN) :: pz_o_lmo
337 REAL,
DIMENSION(SIZE(PZ_O_LMO,1),SIZE(PZ_O_LMO,2)) :: zx
338 REAL(KIND=JPRB) :: zhook_handle
340 IF (lhook) CALL dr_hook(
'MODE_SBLS:PAULSON_PSIM_2D',0,zhook_handle)
342 WHERE ( pz_o_lmo(:,:) < 0. )
343 zx=(1.-15.*pz_o_lmo)**(0.25)
344 paulson_psim_2d(:,:) = log( (1.+zx**2)*(1+zx)**2/8. ) - 2.*atan(zx) + xpi/2.
348 IF (lhook) CALL dr_hook(
'MODE_SBLS:PAULSON_PSIM_2D',1,zhook_handle)
356 REAL,
DIMENSION(:),
INTENT(IN) :: pz_o_lmo
359 REAL,
DIMENSION(SIZE(PZ_O_LMO,1)) :: zx
360 REAL(KIND=JPRB) :: zhook_handle
362 IF (lhook) CALL dr_hook(
'MODE_SBLS:PAULSON_PSIM_1D',0,zhook_handle)
364 WHERE ( pz_o_lmo(:) < 0. )
365 zx=(1.-15.*pz_o_lmo)**(0.25)
366 paulson_psim_1d(:) = log( (1.+zx**2)*(1+zx)**2/8. ) - 2.*atan(zx) + xpi/2.
370 IF (lhook) CALL dr_hook(
'MODE_SBLS:PAULSON_PSIM_1D',1,zhook_handle)
378 REAL,
INTENT(IN) :: pz_o_lmo
382 REAL(KIND=JPRB) :: zhook_handle
384 IF (lhook) CALL dr_hook(
'MODE_SBLS:PAULSON_PSIM_0D',0,zhook_handle)
386 IF ( pz_o_lmo < 0. )
THEN
387 zx=(1.-15.*pz_o_lmo)**(0.25)
388 paulson_psim_0d = log( (1.+zx**2)*(1+zx)**2/8. ) - 2.*atan(zx) + xpi/2.
392 IF (lhook) CALL dr_hook(
'MODE_SBLS:PAULSON_PSIM_0D',1,zhook_handle)
400 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: pz_o_lmo
401 REAL,
DIMENSION(SIZE(PZ_O_LMO,1), &
SIZE(PZ_O_LMO,2),SIZE(PZ_O_LMO,3)) ::
paulson_psih_3d
403 REAL,
DIMENSION(SIZE(PZ_O_LMO,1), &
SIZE(PZ_O_LMO,2),SIZE(PZ_O_LMO,3)) :: zy
404 REAL(KIND=JPRB) :: zhook_handle
406 IF (lhook) CALL dr_hook(
'MODE_SBLS:PAULSON_PSIH_3D',0,zhook_handle)
408 WHERE ( pz_o_lmo(:,:,:) < 0. )
409 zy=(1.-9.*pz_o_lmo)**(0.5)
414 IF (lhook) CALL dr_hook(
'MODE_SBLS:PAULSON_PSIH_3D',1,zhook_handle)
421 REAL,
DIMENSION(:,:),
INTENT(IN) :: pz_o_lmo
424 REAL,
DIMENSION(SIZE(PZ_O_LMO,1),SIZE(PZ_O_LMO,2)) :: zy
425 REAL(KIND=JPRB) :: zhook_handle
427 IF (lhook) CALL dr_hook(
'MODE_SBLS:PAULSON_PSIH_2D',0,zhook_handle)
429 WHERE ( pz_o_lmo(:,:) < 0. )
430 zy=(1.-9.*pz_o_lmo)**(0.5)
435 IF (lhook) CALL dr_hook(
'MODE_SBLS:PAULSON_PSIH_2D',1,zhook_handle)
442 REAL,
DIMENSION(:),
INTENT(IN) :: pz_o_lmo
445 REAL,
DIMENSION(SIZE(PZ_O_LMO,1)) :: zy
446 REAL(KIND=JPRB) :: zhook_handle
448 IF (lhook) CALL dr_hook(
'MODE_SBLS:PAULSON_PSIH_1D',0,zhook_handle)
450 WHERE ( pz_o_lmo(:) < 0. )
451 zy=(1.-9.*pz_o_lmo)**(0.5)
456 IF (lhook) CALL dr_hook(
'MODE_SBLS:PAULSON_PSIH_1D',1,zhook_handle)
463 REAL,
INTENT(IN) :: pz_o_lmo
467 REAL(KIND=JPRB) :: zhook_handle
469 IF (lhook) CALL dr_hook(
'MODE_SBLS:PAULSON_PSIH_0D',0,zhook_handle)
471 IF ( pz_o_lmo < 0. )
THEN
472 zy=(1.-9.*pz_o_lmo)**(0.5)
477 IF (lhook) CALL dr_hook(
'MODE_SBLS:PAULSON_PSIH_0D',1,zhook_handle)
484 FUNCTION lmo_2d(PUSTAR,PTHETA,PRV,PSFTH,PSFRV)
488 REAL,
DIMENSION(:,:),
INTENT(IN) :: pustar
489 REAL,
DIMENSION(:,:),
INTENT(IN) :: ptheta
490 REAL,
DIMENSION(:,:),
INTENT(IN) :: prv
491 REAL,
DIMENSION(:,:),
INTENT(IN) :: psfth
492 REAL,
DIMENSION(:,:),
INTENT(IN) :: psfrv
493 REAL,
DIMENSION(SIZE(PUSTAR,1),SIZE(PUSTAR,2)) ::
lmo_2d
495 REAL,
DIMENSION(SIZE(PUSTAR,1),SIZE(PUSTAR,2)) :: zthetav
496 REAL,
DIMENSION(SIZE(PUSTAR,1),SIZE(PUSTAR,2)) :: zq0
498 REAL(KIND=JPRB) :: zhook_handle
501 IF (lhook) CALL dr_hook(
'MODE_SBLS:LMO_2D',0,zhook_handle)
503 zthetav(:,:) = ptheta(:,:) * ( 1. +zeps * prv(:,:))
504 zq0(:,:) = psfth(:,:) + zthetav(:,:) * zeps * psfrv(:,:)
507 WHERE ( zq0(:,:) /=0. ) &
508 lmo_2d(:,:) = - max(pustar(:,:),1.e-6)**3 &
509 / ( xkarman * xg / zthetav(:,:) *zq0(:,:) )
512 IF (lhook) CALL dr_hook(
'MODE_SBLS:LMO_2D',1,zhook_handle)
518 FUNCTION lmo_1d(PUSTAR,PTHETA,PRV,PSFTH,PSFRV)
522 REAL,
DIMENSION(:),
INTENT(IN) :: pustar
523 REAL,
DIMENSION(:),
INTENT(IN) :: ptheta
524 REAL,
DIMENSION(:),
INTENT(IN) :: prv
525 REAL,
DIMENSION(:),
INTENT(IN) :: psfth
526 REAL,
DIMENSION(:),
INTENT(IN) :: psfrv
527 REAL,
DIMENSION(SIZE(PUSTAR)) ::
lmo_1d
529 REAL,
DIMENSION(SIZE(PUSTAR)) :: zthetav
531 REAL(KIND=JPRB) :: zhook_handle
534 IF (lhook) CALL dr_hook(
'MODE_SBLS:LMO_1D',0,zhook_handle)
537 zthetav(:) = ptheta(:) * ( 1. +zeps * prv(:))
540 WHERE ( psfth(:)/zthetav(:)+zeps*psfrv(:)/=0. ) &
541 lmo_1d(:) = - max(pustar(:),1.e-6)**3 &
543 * ( psfth(:) / zthetav(:) + zeps * psfrv(:) ) )
546 IF (lhook) CALL dr_hook(
'MODE_SBLS:LMO_1D',1,zhook_handle)
552 FUNCTION lmo_0d(PUSTAR,PTHETA,PRV,PSFTH,PSFRV)
556 REAL,
INTENT(IN) :: pustar
557 REAL,
INTENT(IN) :: ptheta
558 REAL,
INTENT(IN) :: prv
559 REAL,
INTENT(IN) :: psfth
560 REAL,
INTENT(IN) :: psfrv
565 REAL(KIND=JPRB) :: zhook_handle
568 IF (lhook) CALL dr_hook(
'MODE_SBLS:LMO_0D',0,zhook_handle)
572 zthetav = ptheta * ( 1. +zeps * prv)
575 IF ( psfth/zthetav+zeps*psfrv/=0. ) &
576 lmo_0d = - max(pustar,1.e-6)**3 &
577 / ( xkarman * ( xg / zthetav * psfth &
578 + xg * zeps * psfrv ) )
581 IF (lhook) CALL dr_hook(
'MODE_SBLS:LMO_0D',1,zhook_handle)
588 FUNCTION ustar_2d(PWIND,PZ,PZ0,PLMO)
592 REAL,
DIMENSION(:,:),
INTENT(IN) :: pwind
593 REAL,
DIMENSION(:,:),
INTENT(IN) :: pz
594 REAL,
DIMENSION(:,:),
INTENT(IN) :: pz0
595 REAL,
DIMENSION(:,:),
INTENT(IN) :: plmo
596 REAL,
DIMENSION(SIZE(PZ,1),SIZE(PZ,2)) ::
ustar_2d
598 REAL,
DIMENSION(SIZE(PZ,1),SIZE(PZ,2)) :: zz_o_lmo
599 REAL,
DIMENSION(SIZE(PZ,1),SIZE(PZ,2)) :: zz0_o_lmo
600 REAL(KIND=JPRB) :: zhook_handle
603 IF (lhook) CALL dr_hook(
'MODE_SBLS:USTAR_2D',0,zhook_handle)
605 zz_o_lmo(:,:) = xundef
606 zz0_o_lmo(:,:) = xundef
609 WHERE(abs(plmo) > 1.e-20 .AND. plmo/=xundef)
610 zz_o_lmo = pz(:,:) / plmo(:,:)
611 zz0_o_lmo = pz0(:,:) / plmo(:,:)
613 * xkarman / ( log(pz(:,:)/pz0(:,:)) &
622 * xkarman / log(pz(:,:)/pz0(:,:))
624 IF (lhook) CALL dr_hook(
'MODE_SBLS:USTAR_2D',1,zhook_handle)
630 FUNCTION ustar_1d(PWIND,PZ,PZ0,PLMO)
634 REAL,
DIMENSION(:),
INTENT(IN) :: pwind
635 REAL,
DIMENSION(:),
INTENT(IN) :: pz
636 REAL,
DIMENSION(:),
INTENT(IN) :: pz0
637 REAL,
DIMENSION(:),
INTENT(IN) :: plmo
638 REAL,
DIMENSION(SIZE(PZ)) ::
ustar_1d
640 REAL,
DIMENSION(SIZE(PZ)) :: zz_o_lmo
641 REAL,
DIMENSION(SIZE(PZ)) :: zz0_o_lmo
642 REAL(KIND=JPRB) :: zhook_handle
645 IF (lhook) CALL dr_hook(
'MODE_SBLS:USTAR_1D',0,zhook_handle)
648 zz0_o_lmo(:) = xundef
651 WHERE(abs(plmo) > 1.e-20 .AND. plmo/=xundef)
652 zz_o_lmo = pz(:) / plmo(:)
653 zz0_o_lmo = pz0(:) / plmo(:)
655 * xkarman / ( log(pz(:)/pz0(:)) &
664 * xkarman / log(pz(:)/pz0(:))
666 IF (lhook) CALL dr_hook(
'MODE_SBLS:USTAR_1D',1,zhook_handle)
672 FUNCTION ustar_0d(PWIND,PZ,PZ0,PLMO)
676 REAL,
INTENT(IN) :: pwind
677 REAL,
INTENT(IN) :: pz
678 REAL,
INTENT(IN) :: pz0
679 REAL,
INTENT(IN) :: plmo
681 REAL(KIND=JPRB) :: zhook_handle
684 IF (lhook) CALL dr_hook(
'MODE_SBLS:USTAR_0D',0,zhook_handle)
688 IF ( abs(plmo) >= 1.e-20 .AND. plmo/=xundef) &
693 ustar_0d = pwind * xkarman / log(pz/pz0)
694 IF (lhook) CALL dr_hook(
'MODE_SBLS:USTAR_0D',1,zhook_handle)
701 real function, dimension(size(pustar)) lmo_1d(PUSTAR, PTHETA, PRV, PSFTH, PSFRV)
real function, dimension(size(pz_o_lmo, 1),size(pz_o_lmo, 2), size(pz_o_lmo, 3)) businger_phih_3d(PZ_O_LMO)
real function, dimension(size(pustar, 1), size(pustar, 2)) lmo_2d(PUSTAR, PTHETA, PRV, PSFTH, PSFRV)
real function businger_phim_0d(PZ_O_LMO)
real function, dimension(size(pz_o_lmo, 1), size(pz_o_lmo, 2)) businger_phim_2d(PZ_O_LMO)
real function, dimension(size(pz_o_lmo, 1), size(pz_o_lmo, 2)) paulson_psim_2d(PZ_O_LMO)
real function businger_phih_0d(PZ_O_LMO)
real function, dimension(size(pz)) ustar_1d(PWIND, PZ, PZ0, PLMO)
real function, dimension(size(pz_o_lmo, 1), size(pz_o_lmo, 2)) paulson_psih_2d(PZ_O_LMO)
real function, dimension(size(pz_o_lmo)) businger_phih_1d(PZ_O_LMO)
real function, dimension(size(pz_o_lmo, 1)) paulson_psim_1d(PZ_O_LMO)
real function, dimension(size(pz_o_lmo, 1),size(pz_o_lmo, 2), size(pz_o_lmo, 3)) paulson_psih_3d(PZ_O_LMO)
real function, dimension(size(pz_o_lmo, 1),size(pz_o_lmo, 2), size(pz_o_lmo, 3)) businger_phie_3d(PZ_O_LMO)
real function, dimension(size(pz_o_lmo, 1),size(pz_o_lmo, 2), size(pz_o_lmo, 3)) paulson_psim_3d(PZ_O_LMO)
real function, dimension(size(pz, 1), size(pz, 2)) ustar_2d(PWIND, PZ, PZ0, PLMO)
real function, dimension(size(pz_o_lmo, 1)) businger_phie_1d(PZ_O_LMO)
real function lmo_0d(PUSTAR, PTHETA, PRV, PSFTH, PSFRV)
real function paulson_psim_0d(PZ_O_LMO)
real function paulson_psih_0d(PZ_O_LMO)
real function businger_phie_0d(PZ_O_LMO)
real function, dimension(size(pz_o_lmo, 1), size(pz_o_lmo, 2)) businger_phih_2d(PZ_O_LMO)
real function, dimension(size(pz_o_lmo)) businger_phim_1d(PZ_O_LMO)
real function ustar_0d(PWIND, PZ, PZ0, PLMO)
real function, dimension(size(pz_o_lmo, 1), size(pz_o_lmo, 2)) businger_phie_2d(PZ_O_LMO)
real function, dimension(size(pz_o_lmo, 1)) paulson_psih_1d(PZ_O_LMO)
real function, dimension(size(pz_o_lmo, 1),size(pz_o_lmo, 2), size(pz_o_lmo, 3)) businger_phim_3d(PZ_O_LMO)