Evaluate total volume and average surface
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(t_sol_var_MHD3D), | intent(in) | :: | dofs_in |
input solution |
||
| real(kind=wp), | intent(out) | :: | vol |
total integral of the volume |
||
| real(kind=wp), | intent(out) | :: | surfAvg |
average polodial surface |
SUBROUTINE EvalTotals(dofs_in,vol,surfAvg) ! MODULES USE MODgvec_globals , ONLY: TWOPI USE MODgvec_MPI , ONLY: par_Reduce USE MODgvec_sol_var_MHD3D, ONLY: t_sol_var_MHD3D IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES CLASS(t_sol_var_MHD3D), INTENT(IN ) :: dofs_in !! input solution !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES REAL(wp) , INTENT(OUT) :: vol !! total integral of the volume REAL(wp) , INTENT(OUT) :: surfAvg !! average polodial surface !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES INTEGER :: iGP,i_mn,JacCheck !=================================================================================================================================== JacCheck=2 CALL EvalAux(dofs_in,JacCheck) IF(JacCheck.EQ.-1) THEN CALL abort(__STAMP__, & ' detJ<0 in EvalAux, called from EvalTotals!!!' ) END IF vol=0.0_wp surfAvg=0.0_wp !$OMP PARALLEL DO & !$OMP SCHEDULE(STATIC) DEFAULT(NONE) & !$OMP REDUCTION(+:vol,surfAvg) PRIVATE(iGP,i_mn) & !$OMP SHARED(nGP_str,nGP_end,mn_IP,J_h,J_p,w_GP) DO iGP=nGP_str,nGP_end DO i_mn=1,mn_IP vol =vol +ABS(J_h(i_mn,iGP)*J_p(i_mn,iGP))*w_GP(iGP) surfAvg=surfAvg+ABS(J_p(i_mn,iGP))*w_GP(iGP) END DO END DO !$OMP END PARALLEL DO CALL par_Reduce(vol,'SUM',0) CALL par_Reduce(surfAvg,'SUM',0) vol = dthet_dzeta *vol surfAvg = dthet_dzeta *surfAvg /TWOPI END SUBROUTINE EvalTotals