[1885] | 1 | MODULE dotprodfld |
---|
| 2 | !!====================================================================== |
---|
| 3 | !! *** MODULE dotprodfld *** |
---|
| 4 | !! NEMOVAR dotprodfld : Computes dot prodoct for 3D and 2D fields |
---|
| 5 | !!====================================================================== |
---|
| 6 | |
---|
| 7 | !!---------------------------------------------------------------------- |
---|
| 8 | !! dot_product : Computes the dot_product for two 3D/2D fields |
---|
| 9 | !!---------------------------------------------------------------------- |
---|
| 10 | !! * Modules used |
---|
| 11 | USE par_kind |
---|
[2587] | 12 | USE dom_oce, ONLY : & |
---|
| 13 | & nldi, & |
---|
| 14 | & nldj, & |
---|
| 15 | & nlei, & |
---|
| 16 | & nlej |
---|
| 17 | USE par_oce , ONLY: & ! Ocean space and time domain variables |
---|
| 18 | & jpi, & |
---|
| 19 | & jpj, & |
---|
| 20 | & jpk |
---|
| 21 | |
---|
[1885] | 22 | USE mppsumtam |
---|
| 23 | |
---|
| 24 | IMPLICIT NONE |
---|
| 25 | |
---|
| 26 | !! * Routine accessibility |
---|
| 27 | PRIVATE |
---|
| 28 | |
---|
| 29 | PUBLIC & |
---|
| 30 | & dot_product |
---|
| 31 | |
---|
| 32 | !! * Interfaces |
---|
| 33 | |
---|
| 34 | INTERFACE dot_product |
---|
| 35 | MODULE PROCEDURE dot_product_3d |
---|
| 36 | MODULE PROCEDURE dot_product_2d |
---|
| 37 | END INTERFACE |
---|
| 38 | |
---|
| 39 | CONTAINS |
---|
| 40 | |
---|
| 41 | FUNCTION dot_product_3d( pvec1, pvec2 ) |
---|
| 42 | !!---------------------------------------------------------------------- |
---|
| 43 | !! *** ROUTINE dot_product_3d *** |
---|
| 44 | !! |
---|
| 45 | !! ** Purpose : Computes the dot_product for two 3D fields |
---|
| 46 | !! |
---|
| 47 | !! ** Method : Use the mppsum module |
---|
| 48 | !! |
---|
| 49 | !! ** Action : |
---|
| 50 | !! |
---|
| 51 | !! References : |
---|
| 52 | !! |
---|
| 53 | !! History : |
---|
| 54 | !! ! 07-08 (K. Mogensen) Original code |
---|
| 55 | !!---------------------------------------------------------------------- |
---|
| 56 | !! * Function return |
---|
| 57 | REAL(wp) dot_product_3d |
---|
| 58 | !! * Arguments |
---|
| 59 | REAL(wp), INTENT(IN), DIMENSION(jpi,jpj,jpk) :: & |
---|
| 60 | & pvec1, & ! 3D fielss to compute dot_product of |
---|
| 61 | & pvec2 |
---|
| 62 | !! * Local declarations |
---|
| 63 | |
---|
| 64 | dot_product_3d = mpp_sum_inter( & |
---|
| 65 | & PACK( pvec1(nldi:nlei,nldj:nlej,:),.TRUE.) * & |
---|
| 66 | & PACK( pvec2(nldi:nlei,nldj:nlej,:),.TRUE.), & |
---|
| 67 | & (nlei-nldi+1) * (nlej-nldj+1) * jpk ) |
---|
| 68 | |
---|
| 69 | END FUNCTION dot_product_3d |
---|
| 70 | |
---|
| 71 | FUNCTION dot_product_2d( pvec1, pvec2 ) |
---|
| 72 | !!---------------------------------------------------------------------- |
---|
| 73 | !! *** ROUTINE dot_product_2d *** |
---|
| 74 | !! |
---|
| 75 | !! ** Purpose : Computes the dot_product for two 2D fields |
---|
| 76 | !! |
---|
| 77 | !! ** Method : Use the mppsum module |
---|
| 78 | !! |
---|
| 79 | !! ** Action : |
---|
| 80 | !! |
---|
| 81 | !! References : |
---|
| 82 | !! |
---|
| 83 | !! History : |
---|
| 84 | !! ! 07-08 (K. Mogensen) Original code |
---|
| 85 | !!---------------------------------------------------------------------- |
---|
| 86 | !! * Function return |
---|
| 87 | REAL(wp) dot_product_2d |
---|
| 88 | !! * Arguments |
---|
| 89 | REAL(wp), INTENT(IN), DIMENSION(jpi,jpj) :: & |
---|
| 90 | & pvec1, & ! 2D fields to compute dot_product of |
---|
| 91 | & pvec2 |
---|
| 92 | !! * Local declarations |
---|
| 93 | |
---|
| 94 | dot_product_2d = mpp_sum_inter( & |
---|
| 95 | & PACK( pvec1(nldi:nlei,nldj:nlej),.TRUE.) * & |
---|
| 96 | & PACK( pvec2(nldi:nlei,nldj:nlej),.TRUE.), & |
---|
| 97 | & (nlei-nldi+1) * (nlej-nldj+1) ) |
---|
| 98 | |
---|
| 99 | END FUNCTION dot_product_2d |
---|
| 100 | |
---|
| 101 | END MODULE dotprodfld |
---|