! ================================================================================================================================= ! MODULE : average_weight_mod ! ! CONTACT : orchidee-help _at_ listes.ipsl.fr ! ! LICENCE : IPSL (2006) ! This software is governed by the CeCILL licence see ORCHIDEE/ORCHIDEE_CeCILL.LIC ! !>\BRIEF !! !!\n DESCRIPTION : !! !! RECENT CHANGE(S) : !! !! REFERENCE(S) : None !! !! SVN : !! $HeadURL: svn://forge.ipsl.jussieu.fr/orchidee/branches/ORCHIDEE-MICT/ORCHIDEE/src_sechiba/thermosoil.f90 $ !! $Date: 2019-12-18 13:14:19 +0100 (Wed, 18 Dec 2019) $ !! $Revision: 6406 $ !! \n !_ ================================================================================================================================ MODULE average_weight_mod USE ioipsl_para IMPLICIT NONE INTERFACE average_weight MODULE PROCEDURE average_weight_r2d, average_weight_r3d END INTERFACE average_weight !private and public routines : PRIVATE :: average_weight_r3d, average_weight_r2d PUBLIC :: average_weight CONTAINS !! ================================================================================================================================ !! SUBROUTINE : average_weight_r3d !! !>\BRIEF Calculated the weighted average !! !! DESCRIPTION : the array 'values' is averagely weighted into 'averaged' array !! values(kjpindex,:,values to average) !! weighted(kjpindex,fraction) !! averaged(kjpindex,averaged values)) !! !! RECENT CHANGE(S) : None !! !! MAIN OUTPUT VARIABLE(S): averaged !! !! REFERENCE(S) : !! !! FLOWCHART : None !! \n !_ ================================================================================================================================ SUBROUTINE average_weight_r3d(values, weighted, averaged) REAL(r_std), INTENT(in) :: values(:,:,:) REAL(r_std), INTENT(in) :: weighted(:,:) REAL(r_std), INTENT(out) :: averaged(:,:) INTEGER :: i, j, k ! iterator averaged(:,:) = 0 DO k = 1, SIZE(values, dim=3) DO j = 1, SIZE(values, dim=2) DO i = 1, SIZE(values, dim=1) averaged(i,j) = averaged(i,j) + values(i,j,k) * weighted(i,k) ENDDO !! ENDDO !! ENDDO !! END SUBROUTINE average_weight_r3d !! ================================================================================================================================ !! SUBROUTINE : average_weight_r2d !! !>\BRIEF Calculated the weighted average !! !! DESCRIPTION : the array 'values' is averagely weighted into 'averaged' array !! values(kjpindex,values to average) !! weighted(kjpindex,fraction) !! averaged(averaged values)) !! !! RECENT CHANGE(S) : None !! !! MAIN OUTPUT VARIABLE(S): averaged !! !! REFERENCE(S) : !! !! FLOWCHART : None !! \n !_ ================================================================================================================================ SUBROUTINE average_weight_r2d(values, weighted, averaged) REAL(r_std), INTENT(in) :: values(:,:) REAL(r_std), INTENT(in) :: weighted(:,:) REAL(r_std), INTENT(out) :: averaged(:) INTEGER :: i, j ! iterator averaged(:) = 0 DO j = 1, SIZE(values, dim=2) DO i = 1, SIZE(values, dim=1) averaged(i) = averaged(i) + values(i,j) * weighted(i,j) ENDDO !! ENDDO !! END SUBROUTINE average_weight_r2d END MODULE average_weight_mod