1 # 1 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_wrfda.fypp" 
    2 # 1 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/../instrumentation.fypp" 1 
    3 # 1 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/../subr_list.fypp" 1 
   12 # 926 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/../subr_list.fypp" 
   13 # 2 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/../instrumentation.fypp" 2 
   22 # 112 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/../instrumentation.fypp" 
   23 # 2 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_wrfda.fypp" 2 
   71 integer,
intent(in) :: n
 
   72 real(kind_real),
intent(in) :: a(n,n)
 
   73 real(kind_real),
intent(out) :: ainv(n,n)
 
   74 integer,
intent(in),
optional :: mmax
 
   75 real(kind_real),
intent(in),
optional :: var_th
 
   79 real(kind_real) :: evec(n,n),eval(n),evalinv(n)
 
   91 if (
present(mmax)) 
then 
   95    if (
present(var_th)) 
then 
   99       call mpl%abort(
'wrfda_pseudoinv',
'either dominant mode or variance threshold should be specified')
 
  102 if (lmmax>n) 
call mpl%abort(
'wrfda_pseudoinv',
'dominant mode should smaller than the matrix rank')
 
  106    if (abs(eval(i))>
zero) 
then 
  107       evalinv(i) = 
one/eval(i)
 
  131 integer, 
intent(in)  :: n
 
  132 real(kind_real),
intent(in) :: a(n,n)
 
  133 real(kind_real),
intent(out) :: evec(n,n)
 
  134 real(kind_real),
intent(out) :: eval(n)
 
  137 integer :: work,ierr,i
 
  138 real(kind_real) :: work_array(3*n-1),evec_copy(n,n),eval_copy(n)
 
  152 call dsyev(
'V',
'U',n,evec_copy,n,eval_copy,work_array,work,ierr)
 
  153 if (ierr/=0) 
call mpl%abort(
'wrfda_da_eof_decomposition',
'dsyev failed')
 
  157    eval(i) = eval_copy(n+1-i)
 
  158    evec(:,i) = evec_copy(:,n+1-i)
 
  175 integer, 
intent(in)  :: n
 
  184 real(
kind_real) :: total_variance,cumul_variance
 
  193 total_variance = sum(eval)
 
  196 cumul_variance = 
zero 
  199    cumul_variance = cumul_variance+eval(i)/total_variance
 
  200    if (cumul_variance>
one-var_th) 
then 
  220 integer, 
intent(in)  :: n
 
  221 integer, 
intent(in)  :: mmax
 
  222 real(kind_real),
intent(in) :: evec(n,n)
 
  223 real(kind_real),
intent(in) :: eval(n)
 
  224 real(kind_real),
intent(out) :: a(n,n)
 
  228 real(kind_real) :: tmp(n,n)
 
  240       tmp(j,i) = evec(i,j)*eval(j)
 
  247       a(i,j) = sum(evec(i,:)*tmp(:,j))
 
Generic ranks, dimensions and types.