SUBROUTINE MAT_VEC (imeta,jmeta,NLEV,X) ! *********************************************** ! * * ! * MATRIX-VECTOR MULTIPLICATION * ! * y = P_inv * x (P_inv is diagonal) * ! * * ! *********************************************** INCLUDE 'mpif.h' !----------------------------------------------------------------------- REAL,ALLOCATABLE :: WPEN(:) REAL X(1:imeta,1:jmeta,1:NLEV) !================================================================= !--- read penalty weights (fine resolution in this case) ALLOCATE(WPEN(1:NLEV)) IWPEN=53 CLOSE(IWPEN) OPEN(IWPEN,file='wpen',status='unknown',form='unformatted') READ(IWPEN) WPEN CLOSE(IWPEN,STATUS='KEEP') !! write(*,*) "READ WPEN: min,max WPEN=",minval(WPEN),maxval(WPEN) !================================================================= !--- MULTIPLICATION DO L=1,NLEV if(WPEN(L).LT.1.E19) then sqrtwpen=sqrt(WPEN(L)) X(:,:,L)=X(:,:,L)*sqrtwpen else X(:,:,L)=0.0 end if ENDDO DEALLOCATE(WPEN) !------------------------------------------------------------------ RETURN END