-
Notifications
You must be signed in to change notification settings - Fork 22
/
Copy pathmod_stat.F90
44 lines (32 loc) · 1.11 KB
/
mod_stat.F90
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
module mod_stat
contains
subroutine stat(file,mask,fileNorm,mean,stddev)
use ufileformat
implicit none
real,pointer :: file(:,:,:),mask(:,:)
real,pointer :: fileNorm(:,:,:)
real,intent(out) :: mean,stddev
real,parameter :: valexNorm = 9999.
real :: var
integer :: N,i,j,t
allocate(fileNorm(size(file,1),size(file,2),size(file,3)))
! where (spread(mask,3,size(file,3)).eq.valexNorm) file = valexNorm
!
! probably more efficient
do t=1,size(file,3)
do j=1,size(file,2)
do i=1,size(file,1)
if (mask(i,j).eq.valexNorm) file(i,j,t) = valexNorm
enddo
enddo
enddo
N = count(file.ne.valexNorm)
mean = sum(file,file.ne.valexNorm)/N
var = sum((file-mean)**2,file.ne.valexNorm)/N
stddev = sqrt(var)
! l = maxloc(file,file.ne.valex)
! m = minloc(file,file.ne.valex)
where(file.ne.valexNorm) fileNorm=(file-mean)/stddev
where(file.eq.valexNorm) fileNorm=valexNorm
end subroutine stat
end module mod_stat