5 SUBROUTINE outer_product(KENS,KX,KY,PX,PY,PA,PC,OPB_CORRELATIONS,HVAR,HOBS)
15 USE yomhook
,ONLY : lhook, dr_hook
16 USE parkind1
,ONLY : jprb
20 INTEGER,
INTENT(IN) :: kens, kx, ky
21 LOGICAL,
INTENT(IN) :: opb_correlations
22 CHARACTER(LEN=3),
DIMENSION(KX),
INTENT(IN) :: hvar
23 CHARACTER(LEN=3),
DIMENSION(KY),
INTENT(IN) :: hobs
24 REAL,
DIMENSION(KX,KENS),
INTENT(IN) :: px
25 REAL,
DIMENSION(KY,KENS),
INTENT(IN) :: py
26 REAL,
DIMENSION(KX,KY),
INTENT(OUT) :: pa
27 REAL,
DIMENSION(KY,KY),
INTENT(OUT) :: pc
29 REAL,
DIMENSION(KX,KENS) :: zxpert
30 REAL,
DIMENSION(KY,KENS) :: zypert
31 REAL,
DIMENSION(KENS,KY) :: zyt
32 REAL,
DIMENSION(KX) :: zxm
33 REAL,
DIMENSION(KY) :: zym
37 REAL(KIND=JPRB) :: zhook_handle
39 IF (lhook) CALL dr_hook(
'OUTER_PRODUCT',0,zhook_handle)
43 zxm(l) = sum(px(l,:))/
REAL(kens)
44 zxpert(l,:) = px(l,:)-zxm(l)
49 zym(k) = sum(py(k,:))/
REAL(kens)
50 zypert(k,:) = py(k,:)-zym(k)
53 IF (opb_correlations)
THEN
55 pa(:,:)=matmul(zxpert(:,:),transpose(zypert(:,:)))
56 pc(:,:)=matmul(zypert(:,:),transpose(zypert(:,:)))
62 IF (hvar(l).EQ.hobs(k))
THEN
63 pa(l,k) = dot_product(zxpert(l,:),zypert(k,:))
71 pa = pa /
REAL(kens - 1)
72 pc = pc /
REAL(kens - 1)
74 IF (lhook) CALL dr_hook(
'OUTER_PRODUCT',1,zhook_handle)
subroutine outer_product(KENS, KX, KY, PX, PY, PA, PC, OPB_CORRELATIONS, HVAR, HOBS)