source: branches/publications/ORCHIDEE_Biochar/src_math/average_weight_mod.f90 @ 7442

Last change on this file since 7442 was 6409, checked in by albert.jornet, 5 years ago

New: average_weight subroutine and its tests
Fix: pcapa_spec is now averaged
Fix: calculate rho_tot the same way pcapa is done by using 1 - poros_net instead of 1 - mcs

File size: 3.5 KB
Line 
1! =================================================================================================================================
2! MODULE       : average_weight_mod
3!
4! CONTACT      : orchidee-help _at_ listes.ipsl.fr
5!
6! LICENCE      : IPSL (2006)
7! This software is governed by the CeCILL licence see ORCHIDEE/ORCHIDEE_CeCILL.LIC
8!
9!>\BRIEF       
10!!
11!!\n DESCRIPTION :
12!!
13!! RECENT CHANGE(S) :
14!!
15!! REFERENCE(S) : None
16!!
17!! SVN          :
18!! $HeadURL: svn://forge.ipsl.jussieu.fr/orchidee/branches/ORCHIDEE-MICT/ORCHIDEE/src_sechiba/thermosoil.f90 $
19!! $Date: 2019-12-18 13:14:19 +0100 (Wed, 18 Dec 2019) $
20!! $Revision: 6406 $
21!! \n
22!_ ================================================================================================================================
23
24MODULE average_weight_mod
25
26  USE ioipsl_para
27
28  IMPLICIT NONE
29
30  INTERFACE average_weight
31    MODULE PROCEDURE average_weight_r2d, average_weight_r3d
32  END INTERFACE average_weight
33
34  !private and public routines :
35  PRIVATE :: average_weight_r3d, average_weight_r2d
36  PUBLIC :: average_weight
37
38CONTAINS
39
40!! ================================================================================================================================
41!! SUBROUTINE   : average_weight_r3d
42!!
43!>\BRIEF         Calculated the weighted average
44!!
45!! DESCRIPTION  : the array 'values' is averagely weighted into 'averaged' array
46!!                values(kjpindex,:,values to average)
47!!                weighted(kjpindex,fraction)
48!!                averaged(kjpindex,averaged values))
49!!
50!! RECENT CHANGE(S) : None
51!!
52!! MAIN OUTPUT VARIABLE(S): averaged
53!!                         
54!! REFERENCE(S) :
55!!
56!! FLOWCHART    : None
57!! \n
58!_ ================================================================================================================================
59  SUBROUTINE average_weight_r3d(values, weighted, averaged)
60    REAL(r_std), INTENT(in) :: values(:,:,:)
61    REAL(r_std), INTENT(in) :: weighted(:,:)
62    REAL(r_std), INTENT(out) :: averaged(:,:)
63    INTEGER :: i, j, k ! iterator
64
65    averaged(:,:) = 0
66
67    DO k = 1, SIZE(values, dim=3)
68      DO j = 1, SIZE(values, dim=2)
69        DO i = 1, SIZE(values, dim=1)
70          averaged(i,j) = averaged(i,j) + values(i,j,k) * weighted(i,k)
71        ENDDO !!
72      ENDDO !!
73    ENDDO !!
74
75  END SUBROUTINE average_weight_r3d
76
77!! ================================================================================================================================
78!! SUBROUTINE   : average_weight_r2d
79!!
80!>\BRIEF         Calculated the weighted average
81!!
82!! DESCRIPTION  : the array 'values' is averagely weighted into 'averaged' array
83!!                values(kjpindex,values to average)
84!!                weighted(kjpindex,fraction)
85!!                averaged(averaged values))
86!!
87!! RECENT CHANGE(S) : None
88!!
89!! MAIN OUTPUT VARIABLE(S): averaged
90!!                         
91!! REFERENCE(S) :
92!!
93!! FLOWCHART    : None
94!! \n
95!_ ================================================================================================================================
96  SUBROUTINE average_weight_r2d(values, weighted, averaged)
97    REAL(r_std), INTENT(in) :: values(:,:)
98    REAL(r_std), INTENT(in) :: weighted(:,:)
99    REAL(r_std), INTENT(out) :: averaged(:)
100    INTEGER :: i, j ! iterator
101
102    averaged(:) = 0
103
104    DO j = 1, SIZE(values, dim=2)
105      DO i = 1, SIZE(values, dim=1)
106        averaged(i) = averaged(i) + values(i,j) * weighted(i,j)
107      ENDDO !!
108    ENDDO !!
109
110  END SUBROUTINE average_weight_r2d
111
112
113END MODULE average_weight_mod
Note: See TracBrowser for help on using the repository browser.