1 # 1 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/external/tools_wrfda.fypp"
2 # 1 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/external/../instrumentation.fypp" 1
3 # 1 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/external/../subr_list.fypp" 1
12 # 726 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/external/../subr_list.fypp"
13 # 2 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/external/../instrumentation.fypp" 2
22 # 112 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/external/../instrumentation.fypp"
23 # 2 "/Users/miesch/JEDI/code/working_copy/public/fv3-bundle/saber/src/saber/external/tools_wrfda.fypp" 2
65 integer,
intent(in) :: n
66 real(kind_real),
intent(in) :: a(n,n)
67 real(kind_real),
intent(out) :: c(n,n)
68 integer,
intent(in),
optional :: mmax
69 real(kind_real),
intent(in),
optional :: var_th
72 integer :: k,k2,m,lmmax
73 real(kind_real),
allocatable :: work(:,:),evec(:,:),eval(:),laminvet(:,:)
74 real(kind_real),
allocatable :: summ,total_variance,cumul_variance
86 allocate(laminvet(n,n))
96 if (
present(mmax))
then
100 if (
present(var_th))
then
106 total_variance = summ
107 cumul_variance =
zero
110 cumul_variance = cumul_variance+eval(m)/total_variance
111 if (cumul_variance>
one-var_th )
then
117 call mpl%abort(
'wrfda_pseudoinv',
'either dominant mode or variance threshold should be specified')
120 if (lmmax>n)
call mpl%abort(
'wrfda_pseudoinv',
'dominant mode should smaller than the matrix rank')
125 laminvet(m,k) = evec(k,m)/eval(m)
134 summ = summ+evec(k,m)*laminvet(m,k2)
169 integer,
intent(in) :: kz
170 real(kind_real),
intent(in) :: bx(1:kz,1:kz)
171 real(kind_real),
intent(out) :: e(1:kz,1:kz)
172 real(kind_real),
intent(out) :: l(1:kz)
175 integer :: work,ierr,m
176 real(kind_real) :: work_array(1:3*kz-1),ecopy(1:kz,1:kz),lcopy(1:kz)
190 call dsyev(
'V',
'U',kz,ecopy,kz,lcopy,work_array,work,ierr)
191 if (ierr/=0)
call mpl%abort(
'wrfda_da_eof_decomposition',
'dsyev failed')
196 e(1:kz,m) = ecopy(1:kz,kz+1-m)
Generic ranks, dimensions and types.