***s/r statfld - calcule la moyenne, la variance, le minimum et * le maximum d un champs et imprime le resultat. *subroutine statfld ( F_field, F_nv_S, F_no, F_from_S, F_r8stat_L, 3 $ minx,maxx,miny,maxy,lnk, $ F_i0,F_j0,F_k0,F_in,F_jn,F_kn ) implicit none * character*(*) F_nv_S , F_from_S logical F_r8stat_L integer minx,maxx,miny,maxy,lnk, $ F_i0,F_j0,F_k0,F_in,F_jn,F_kn,F_no,unf real F_field(minx:maxx,miny:maxy,lnk) * *author * M. Desgagne * *revision * v2_00 - Desgagne M. - initial MPI version (from MC2) * v3_00 - Desgagne & Lee - Lam configuration * *object * *arguments * Name I/O Description *---------------------------------------------------------------- * F_field I Field to be operated on * F_nv_S I User provided string to define F_field * F_no I Usually the timestep # * F_from_S I Usually the name of the calling subroutine * F_i0,F_j0 I Global lower-left indexes of the sub-domain * on which to perform statistics * F_in,F_jn I Global upper-right indexes of the sub-domain * on which to perform statistics * F_k0,F_kn I Range of levels on which to perform statistics *---------------------------------------------------------------- * *implicits # integer i,j,k,imin,jmin,kmin,imax,jmax,kmax real*8 sum,sumd2,moy,var,mind,maxd,fijk,npt_8 * *-------------------------------------------------------------------- * npt_8 = dble((F_in-F_i0+1)*(F_jn-F_j0+1)*(F_kn-F_k0+1)) * sum = 0.0 sumd2 = 0.0 imin = F_i0 jmin = F_j0 kmin = F_k0 imax = F_i0 jmax = F_j0 kmax = F_k0 maxd = F_field(F_i0,F_j0,F_k0) mind = F_field(F_i0,F_j0,F_k0) * do k=F_k0,F_kn do j=F_j0,F_jn do i=F_i0,F_in fijk = F_field(i,j,k) sum = sum + fijk sumd2 = sumd2 + fijk*fijk if (fijk .gt. maxd) then maxd = fijk imax = i jmax = j kmax = k endif if (fijk .lt. mind) then mind = fijk imin = i jmin = j kmin = k endif end do end do end do * moy = sum / npt_8 var = max(0.d0,(sumd2 + moy*moy*npt_8 - 2*moy*sum) / npt_8) var = sqrt(var) * * ** On imprime * if (F_r8stat_L) then write(6,99) F_no,F_nv_S,moy,var,imin,jmin,kmin,mind, $ imax,jmax,kmax,maxd else write(6,98) F_no,F_nv_S,moy,var,imin,jmin,kmin,mind, $ imax,jmax,kmax,maxd endif * 98 format (i5,a7,' Mean:',e14.7,' Var:',e14.7, $ ' Min:[(',i5,',',i5,',',i5,')', $ e14.7,']',' Max:[(',i5,',',i5,',',i5,')', $ e14.7,']') 99 format (i5,a7,' Mean:',e22.14,' Var:',e22.14,/ $ ' Min:[(',i5,',',i5,',',i5,')', $ e22.14,']',' Max:[(',i5,',',i5,',',i5,')', $ e22.14,']') * *---------------------------------------------------------------- * return end