Changeset 15540 for NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS
- Timestamp:
- 2021-11-26T12:27:56+01:00 (3 years ago)
- Location:
- NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS
- Files:
-
- 28 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/diaobs.F90
r14986 r15540 88 88 INTEGER , DIMENSION(:), ALLOCATABLE :: nextrprof, nextrsurf ! Number of profile & surface extra variables 89 89 INTEGER , DIMENSION(:), ALLOCATABLE :: n2dintsurf ! Interpolation option for surface variables 90 REAL( wp), DIMENSION(:), ALLOCATABLE :: zavglamscl, zavgphiscl ! E/W & N/S diameter of averaging footprint for surface variables90 REAL(dp), DIMENSION(:), ALLOCATABLE :: zavglamscl, zavgphiscl ! E/W & N/S diameter of averaging footprint for surface variables 91 91 LOGICAL , DIMENSION(:), ALLOCATABLE :: lfpindegs ! T=> surface obs footprint size specified in degrees, F=> in metres 92 92 LOGICAL , DIMENSION(:), ALLOCATABLE :: llnightav ! Logical for calculating night-time averages … … 169 169 REAL(wp) :: ztype_avglamscl ! Local version of rn_*_avglamscl 170 170 REAL(wp) :: ztype_avgphiscl ! Local version of rn_*_avgphiscl 171 REAL( wp), DIMENSION(:,:,:), ALLOCATABLE :: zglam ! Model longitudes for profile variables172 REAL( wp), DIMENSION(:,:,:), ALLOCATABLE :: zgphi ! Model latitudes for profile variables173 REAL( wp), DIMENSION(:,:,:,:), ALLOCATABLE :: zmask ! Model land/sea mask associated with variables171 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: zglam ! Model longitudes for profile variables 172 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: zgphi ! Model latitudes for profile variables 173 REAL(dp), DIMENSION(:,:,:,:), ALLOCATABLE :: zmask ! Model land/sea mask associated with variables 174 174 !! 175 175 NAMELIST/namobs/ln_diaobs, ln_t3d, ln_s3d, ln_sla, & … … 628 628 INTEGER :: jvar ! Variable number 629 629 INTEGER :: ji, jj, jk ! Loop counters 630 REAL( wp), DIMENSION(:,:,:,:), ALLOCATABLE :: &630 REAL(dp), DIMENSION(:,:,:,:), ALLOCATABLE :: & 631 631 & zprofvar ! Model values for variables in a prof ob 632 REAL( wp), DIMENSION(:,:,:,:), ALLOCATABLE :: &632 REAL(dp), DIMENSION(:,:,:,:), ALLOCATABLE :: & 633 633 & zprofmask ! Mask associated with zprofvar 634 REAL( wp), DIMENSION(jpi,jpj) :: &634 REAL(dp), DIMENSION(jpi,jpj) :: & 635 635 & zsurfvar, & ! Model values equivalent to surface ob. 636 636 & zsurfmask ! Mask associated with surface variable 637 REAL( wp), DIMENSION(:,:,:), ALLOCATABLE :: &637 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: & 638 638 & zglam, & ! Model longitudes for prof variables 639 639 & zgphi ! Model latitudes for prof variables 640 REAL( wp), DIMENSION(:,:,:), ALLOCATABLE :: zdept, zdepw640 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: zdept, zdepw 641 641 642 642 !----------------------------------------------------------------------- … … 787 787 INTEGER :: jtype ! Data set loop variable 788 788 INTEGER :: jo, jvar, jk 789 REAL(wp), DIMENSION(:), ALLOCATABLE :: & 790 & zu, & 791 & zv 789 REAL(dp), DIMENSION(:), ALLOCATABLE :: zu, zv 790 791 792 792 793 793 794 !----------------------------------------------------------------------- … … 1083 1084 INTEGER, DIMENSION(ntypes), INTENT(INOUT) :: & 1084 1085 & n2dint 1085 REAL(wp), DIMENSION(ntypes), INTENT(INOUT) :: & 1086 & ravglamscl, ravgphiscl 1086 REAL(dp), DIMENSION(ntypes), INTENT(INOUT) :: ravglamscl, ravgphiscl 1087 1088 1087 1089 LOGICAL, DIMENSION(ntypes), INTENT(INOUT) :: & 1088 1090 & lfpindegs, lavnight -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/grt_cir_dis.h90
r13226 r15540 5 5 !!---------------------------------------------------------------------- 6 6 7 REAL(KIND= wp) FUNCTION grt_cir_dis( pa1, pa2, pb1, pb2, pc1, pc2 )7 REAL(KIND=dp) FUNCTION grt_cir_dis( pa1, pa2, pb1, pb2, pc1, pc2 ) 8 8 !!---------------------------------------------------------------------- 9 9 !! *** FUNCTION grt_cir_dis *** … … 21 21 22 22 !! * Arguments 23 REAL(KIND= wp) :: pa1 ! sin(lat1)24 REAL(KIND= wp) :: pa2 ! sin(lat2)25 REAL(KIND= wp) :: pb1 ! cos(lat1) * cos(lon1)26 REAL(KIND= wp) :: pb2 ! cos(lat2) * cos(lon2)27 REAL(KIND= wp) :: pc1 ! cos(lat1) * sin(lon1)28 REAL(KIND= wp) :: pc2 ! cos(lat2) * sin(lon2)23 REAL(KIND=dp) :: pa1 ! sin(lat1) 24 REAL(KIND=dp) :: pa2 ! sin(lat2) 25 REAL(KIND=dp) :: pb1 ! cos(lat1) * cos(lon1) 26 REAL(KIND=dp) :: pb2 ! cos(lat2) * cos(lon2) 27 REAL(KIND=dp) :: pc1 ! cos(lat1) * sin(lon1) 28 REAL(KIND=dp) :: pc2 ! cos(lat2) * sin(lon2) 29 29 30 REAL(KIND= wp) :: cosdist ! cosine of great circle distance30 REAL(KIND=dp) :: cosdist ! cosine of great circle distance 31 31 32 32 ! Compute cosine of great circle distance, constraining it to be between -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/grt_cir_dis_saa.h90
r10068 r15540 5 5 !!---------------------------------------------------------------------- 6 6 7 REAL(KIND= wp) FUNCTION grt_cir_dis_saa( pa, pb, pc )7 REAL(KIND=dp) FUNCTION grt_cir_dis_saa( pa, pb, pc ) 8 8 !!---------------------------------------------------------------------- 9 9 !! *** FUNCTION grt_cir_dis_saa *** … … 23 23 24 24 !! * Arguments 25 REAL(KIND= wp) :: pa ! lon1 - lon226 REAL(KIND= wp) :: pb ! lat1 - lat227 REAL(KIND= wp) :: pc ! cos(lat2)25 REAL(KIND=dp) :: pa ! lon1 - lon2 26 REAL(KIND=dp) :: pb ! lat1 - lat2 27 REAL(KIND=dp) :: pc ! cos(lat2) 28 28 29 29 grt_cir_dis_saa = SQRT( pa * pa + ( pb * pc )**2 ) -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/jul2greg.h90
r9690 r15540 52 52 & iyea, & 53 53 & iref 54 REAL(KIND=wp) :: & 55 & zday, & 56 & zref 54 REAL(KIND=dp) :: zday, zref 55 56 57 57 58 CHARACTER(len=200) :: & 58 59 & cerr -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/linquad.h90
r10068 r15540 24 24 25 25 !! * Arguments 26 REAL(KIND=wp), INTENT(IN) :: px ! (lon) of the point P(x,y) 27 REAL(KIND=wp), INTENT(IN) :: py ! (lat) of the point P(x,y) 28 REAL(KIND=wp), DIMENSION(4), INTENT(IN) :: & 29 & pxv, & ! (lon, lat) of the surrounding cell 30 & pyv 26 REAL(KIND=dp), INTENT(IN) :: px ! (lon) of the point P(x,y) 27 REAL(KIND=dp), INTENT(IN) :: py ! (lat) of the point P(x,y) 28 REAL(KIND=dp), DIMENSION(4), INTENT(IN) :: pxv, pyv ! (lon, lat) of the surrounding cell 29 30 31 31 32 32 33 !! * Local declarations 33 REAL(KIND= wp) :: zst134 REAL(KIND= wp) :: zst235 REAL(KIND= wp) :: zst336 REAL(KIND= wp) :: zst434 REAL(KIND=dp) :: zst1 35 REAL(KIND=dp) :: zst2 36 REAL(KIND=dp) :: zst3 37 REAL(KIND=dp) :: zst4 37 38 38 39 !----------------------------------------------------------------------- -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/maxdist.h90
r14894 r15540 5 5 !!---------------------------------------------------------------------- 6 6 7 REAL( wp) FUNCTION maxdist( pxv, pyv )7 REAL(dp) FUNCTION maxdist( pxv, pyv ) 8 8 !!---------------------------------------------------------------------- 9 9 !! *** FUNCTION maxdist *** … … 27 27 28 28 !! * Local declarations 29 REAL(KIND=wp), DIMENSION(4) :: & 30 & zxv, & 31 & zyv, & 32 & za, & 33 & zb, & 34 & zc 35 REAL(KIND=wp) :: zdist 29 REAL(KIND=dp), DIMENSION(4) :: zxv, zyv, za, zb, zc 30 31 32 33 34 35 36 REAL(KIND=dp) :: zdist 36 37 37 38 INTEGER :: ji -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/obs_averg_h2d.F90
r14644 r15540 82 82 & kmaxjfp, & ! Max size of model points in j-direction for obs footprint 83 83 & k2dint ! Averaging scheme options - see header 84 REAL(KIND= wp), INTENT(INOUT) :: &84 REAL(KIND=dp), INTENT(INOUT) :: & 85 85 & plam, & ! Geographical (lat,lon) coordinates of 86 86 & pphi ! observation 87 REAL(KIND= wp), DIMENSION(kmaxifp,kmaxjfp), INTENT(IN) :: &87 REAL(KIND=dp), DIMENSION(kmaxifp,kmaxjfp), INTENT(IN) :: & 88 88 & pglam, & ! Model variable lon 89 89 & pgphi ! Model variable lat 90 REAL(KIND= wp), DIMENSION(kmaxifp+1,kmaxjfp+1), INTENT(IN) :: &90 REAL(KIND=dp), DIMENSION(kmaxifp+1,kmaxjfp+1), INTENT(IN) :: & 91 91 & pglamf, & ! Model variable lon at corners of grid-boxes 92 92 & pgphif ! Model variable lat at corners of grid-boxes 93 REAL(KIND= wp), DIMENSION(kmaxifp,kmaxjfp,kpk2), INTENT(IN) :: &93 REAL(KIND=dp), DIMENSION(kmaxifp,kmaxjfp,kpk2), INTENT(IN) :: & 94 94 & pmask ! Model variable mask 95 REAL(KIND= wp), INTENT(IN) :: &95 REAL(KIND=dp), INTENT(IN) :: & 96 96 & plamscl, & ! Diameter (lat,lon) of obs footprint in metres 97 97 & pphiscl ! This is the full width (rather than half-width) 98 98 LOGICAL, INTENT(IN) :: & 99 99 & lindegrees ! T=> obs footprint specified in degrees, F=> in metres 100 REAL(KIND= wp), DIMENSION(kmaxifp,kmaxjfp,kpk2), INTENT(OUT) :: &100 REAL(KIND=dp), DIMENSION(kmaxifp,kmaxjfp,kpk2), INTENT(OUT) :: & 101 101 & pweig ! Weights for averaging 102 102 INTEGER, INTENT(IN), OPTIONAL :: & … … 170 170 & kmaxjfp ! Max size of model points in j-direction for obs footprint 171 171 172 REAL(KIND=wp), INTENT(IN) :: & 173 & plam, & 174 & pphi ! Geographical (lat,lon) coordinates of 172 REAL(KIND=dp), INTENT(IN) :: plam, pphi 173 174 175 175 176 ! observation 176 REAL(KIND= wp), INTENT(IN) :: &177 REAL(KIND=dp), INTENT(IN) :: & 177 178 & plamscl, & ! Diameter (lat,lon) of obs footprint in metres or degrees (see below) 178 179 & pphiscl ! This is the full width (rather than half-width) 179 180 LOGICAL, INTENT(IN) :: & 180 181 & lindegrees ! T=>scales specified in degrees, F=> in metres 181 REAL(KIND= wp), DIMENSION(kmaxifp,kmaxjfp,kpk2), INTENT(IN) :: &182 REAL(KIND=dp), DIMENSION(kmaxifp,kmaxjfp,kpk2), INTENT(IN) :: & 182 183 & pmask ! Model variable mask 183 REAL(KIND= wp), DIMENSION(kmaxifp,kmaxjfp), INTENT(IN) :: &184 REAL(KIND=dp), DIMENSION(kmaxifp,kmaxjfp), INTENT(IN) :: & 184 185 & pglam, & ! Model variable lon 185 186 & pgphi ! Model variable lat 186 REAL(KIND= wp), DIMENSION(kmaxifp+1,kmaxjfp+1), INTENT(IN) :: &187 REAL(KIND=dp), DIMENSION(kmaxifp+1,kmaxjfp+1), INTENT(IN) :: & 187 188 & pglamf, & ! Model variable lon at corners of grid boxes 188 189 & pgphif ! Model variable lat at corners of grid boxes 189 REAL(KIND= wp), DIMENSION(kmaxifp,kmaxjfp,kpk2), INTENT(OUT) :: &190 REAL(KIND=dp), DIMENSION(kmaxifp,kmaxjfp,kpk2), INTENT(OUT) :: & 190 191 & pweig ! Weights for interpolation 191 192 … … 197 198 & jnumsubgrid = 20 ! The number of sub grid-boxes (in x and y directions) used to approximate area of obs fp 198 199 199 REAL(KIND= wp), DIMENSION(4) :: &200 REAL(KIND=dp), DIMENSION(4) :: & 200 201 & zxvert, zyvert, & ! The lon/lat of the vertices(corners) of the grid box in m relative to centre of obs fp 201 202 & zdist ! Distance of each vertex to the centre of the obs footprint 202 REAL(KIND= wp), DIMENSION(4) :: &203 REAL(KIND=dp), DIMENSION(4) :: & 203 204 & zxgrid, zygrid, & ! Distance of each vertex of grid box to the centre of the grid box in x/y directions 204 205 & zdgrid 205 REAL(KIND= wp) :: &206 REAL(KIND=dp) :: & 206 207 & zdx, zdy, & ! The sub grid-box sizes (in metres) 207 208 & zarea_subbox, & ! The area of each sub grid-box (in metres squared) … … 210 211 & zarea_fp, & ! Total area of obs footprint within the grid box 211 212 & zareabox ! Total area of the grid box 212 REAL(KIND= wp) :: &213 REAL(KIND=dp) :: & 213 214 & zphiscl_m, & ! Diameter of obs footprint in metres 214 215 & zlamscl_m … … 353 354 & kmaxjfp ! Max size of model points in j-direction for obs footprint 354 355 355 REAL(KIND=wp), INTENT(IN) :: & 356 & plam, & 357 & pphi ! Geographical (lat,lon) coordinates of 356 REAL(KIND=dp), INTENT(IN) :: plam, pphi ! Geographical (lat,lon) coordinates of 357 358 359 358 360 ! observation 359 REAL(KIND=wp), INTENT(IN) :: & 360 & plamscl, & 361 & pphiscl ! Width in x/y directions of obs footprint in metres 361 REAL(KIND=dp), INTENT(IN) :: plamscl, pphiscl ! Width in x/y directions of obs footprint in metres 362 363 364 362 365 ! This is the full width (rather than half-width) 363 366 LOGICAL, INTENT(IN) :: & 364 367 & lindegrees !T=> scales specified in degrees, F=> in metres 365 REAL(KIND= wp), DIMENSION(kmaxifp,kmaxjfp,kpk2), INTENT(IN) :: &368 REAL(KIND=dp), DIMENSION(kmaxifp,kmaxjfp,kpk2), INTENT(IN) :: & 366 369 & pmask ! Model variable mask 367 REAL(KIND= wp), DIMENSION(kmaxifp,kmaxjfp), INTENT(IN) :: &370 REAL(KIND=dp), DIMENSION(kmaxifp,kmaxjfp), INTENT(IN) :: & 368 371 & pglam, & ! Model variable lat at centre of grid boxes 369 372 & pgphi ! Model variable lon at centre of grid boxes 370 REAL(KIND= wp), DIMENSION(kmaxifp+1,kmaxjfp+1), INTENT(IN) :: &373 REAL(KIND=dp), DIMENSION(kmaxifp+1,kmaxjfp+1), INTENT(IN) :: & 371 374 & pglamf, & ! Model variable lat at corners of grid boxes 372 375 & pgphif ! Model variable lon at corners of grid boxes 373 REAL(KIND= wp), DIMENSION(kmaxifp,kmaxjfp,kpk2), INTENT(OUT) :: &376 REAL(KIND=dp), DIMENSION(kmaxifp,kmaxjfp,kpk2), INTENT(OUT) :: & 374 377 & pweig ! Weights for interpolation 375 378 … … 379 382 INTEGER, DIMENSION(4) :: & 380 383 & jnumvert 381 REAL(KIND= wp), DIMENSION(4) :: &384 REAL(KIND=dp), DIMENSION(4) :: & 382 385 & zxvert, zyvert ! The lon/lat of the vertices(corners) of the grid box in m relative to centre of obs fp 383 REAL(KIND= wp), DIMENSION(4) :: &386 REAL(KIND=dp), DIMENSION(4) :: & 384 387 & zdist ! Distance of each vertex to the centre of the obs footprint 385 REAL(KIND= wp), DIMENSION(4) :: &388 REAL(KIND=dp), DIMENSION(4) :: & 386 389 & zxgrid, zygrid, & ! Distance of each vertex of grid box to the centre of the grid box in x/y directions 387 390 & zdgrid 388 REAL(KIND= wp) :: &391 REAL(KIND=dp) :: & 389 392 & zareabox, & ! Total area of grid box 390 393 & zarea_fp, & ! Total area of obs footprint 391 394 & zarea_intersect ! Area of the intersection between the grid box and the obs footprint 392 REAL(KIND= wp) :: &395 REAL(KIND=dp) :: & 393 396 & zlamscl_m, & 394 397 & zphiscl_m ! Total width (lat,lon) of obs footprint in metres 395 REAL(KIND= wp) :: &398 REAL(KIND=dp) :: & 396 399 & z_awidth, z_aheight, & ! Width and height of model grid box 397 400 & z_cwidth, z_cheight ! Width and height of union of model grid box and obs footprint 398 REAL(KIND= wp) :: &401 REAL(KIND=dp) :: & 399 402 & zleft, zright, & ! Distance (metres) of corners area of intersection 400 403 & ztop, zbottom ! between grid box and obs footprint … … 507 510 & kmaxifp, & ! Max size of model points in i-direction for obs footprint 508 511 & kmaxjfp ! Max size of model points in j-direction for obs footprint 509 REAL(KIND= wp), DIMENSION(kmaxifp,kmaxjfp,kpk2), INTENT(IN) :: &512 REAL(KIND=dp), DIMENSION(kmaxifp,kmaxjfp,kpk2), INTENT(IN) :: & 510 513 & pweig ! Interpolation weights 511 REAL(KIND= wp), DIMENSION(kmaxifp,kmaxjfp,kpk2), INTENT(IN) :: &514 REAL(KIND=dp), DIMENSION(kmaxifp,kmaxjfp,kpk2), INTENT(IN) :: & 512 515 & pmod ! Model variable to interpolate 513 REAL(KIND= wp), DIMENSION(kpk2), INTENT(OUT) :: &516 REAL(KIND=dp), DIMENSION(kpk2), INTENT(OUT) :: & 514 517 & pobsk ! Model profile interpolated to obs (i,j) pt 515 518 … … 518 521 INTEGER :: & 519 522 & ikmax 520 REAL(KIND=wp) :: & 521 & zsum 523 REAL(KIND=dp) :: zsum 524 525 522 526 523 527 !------------------------------------------------------------------------ … … 574 578 INTEGER , INTENT(IN) :: & 575 579 & k2dint !Type of interpolation/averaging used 576 REAL(KIND= wp), INTENT(IN) :: &580 REAL(KIND=dp), INTENT(IN) :: & 577 581 & plamscl, & !Total width/radius in metres of the observation footprint 578 582 & pphiscl ! 579 583 LOGICAL, INTENT(IN) :: & 580 584 & lindegrees !T=> plamscl and pphiscl are specified in degrees 581 REAL(KIND= wp), DIMENSION(jpi,jpj), INTENT(IN) :: &585 REAL(KIND=dp), DIMENSION(jpi,jpj), INTENT(IN) :: & 582 586 & pmask !Land/sea mask 583 587 !F=> plamscl and pphiscl are specified in metres … … 587 591 588 592 !! * Local variables 589 REAL(KIND= wp) :: &593 REAL(KIND=dp) :: & 590 594 & ze1min, & !Minimum global grid-size in i,j directions 591 595 & ze2min 592 REAL(KIND= wp) :: &596 REAL(KIND=dp) :: & 593 597 & zphiscl_m, & 594 598 & zlamscl_m … … 605 609 !If the scales are specified in degrees, work out the max 606 610 !distance (metres) in x/y directions 607 CALL obs_deg2dist( jpi, jpj, CASTWP(glamt), CASTWP(gphit), &611 CALL obs_deg2dist( jpi, jpj, glamt, gphit, & 608 612 & plamscl, pphiscl, zlamscl_m, zphiscl_m ) 609 613 ELSE … … 655 659 INTEGER , INTENT(IN) :: & 656 660 & ki, kj !x/y dimensions of input lat/lon variables 657 REAL(KIND= wp), INTENT(IN), DIMENSION(ki,kj) :: &661 REAL(KIND=dp), INTENT(IN), DIMENSION(ki,kj) :: & 658 662 & pglam, pgphi !Longitude and latitudes of grid points 659 REAL(KIND= wp), INTENT(IN) :: &663 REAL(KIND=dp), INTENT(IN) :: & 660 664 & plamscl_deg, & !Size in degrees of the observation footprint 661 665 & pphiscl_deg ! 662 REAL(KIND= wp), INTENT(OUT) :: &666 REAL(KIND=dp), INTENT(OUT) :: & 663 667 & plamscl_max, & !Maximum size of obs footprint in metres 664 668 & pphiscl_max … … 667 671 INTEGER :: & 668 672 & ji, jj !Counters 669 REAL(KIND= wp) :: &673 REAL(KIND=dp) :: & 670 674 & zlon1, zlon2, & !Lon values surrounding centre of grid point 671 675 & zlat1, zlat2, & !Lat values surrounding centre of grid point 672 676 & zdlat, zdlon !Distance in radians in lat/lon directions 673 REAL(KIND= wp) :: &677 REAL(KIND=dp) :: & 674 678 & za1, za2, za, zc, zd 675 679 … … 740 744 !! * Modules used 741 745 !! * Arguments 742 REAL(KIND= wp), INTENT(IN) :: &746 REAL(KIND=dp), INTENT(IN) :: & 743 747 & pglam_bl, pglam_br, & !lon at corners of grid box 744 748 & pglam_tl, pglam_tr 745 REAL(KIND= wp), INTENT(IN) :: &749 REAL(KIND=dp), INTENT(IN) :: & 746 750 & pgphi_bl, pgphi_br, & !lat at corners of grid box 747 751 & pgphi_tl, pgphi_tr 748 REAL(KIND= wp), INTENT(IN) :: &752 REAL(KIND=dp), INTENT(IN) :: & 749 753 & pphi, plam !lat/lon of centre of obs footprint 750 REAL(KIND= wp), DIMENSION(4), INTENT(OUT) :: &754 REAL(KIND=dp), DIMENSION(4), INTENT(OUT) :: & 751 755 & pxvert, pyvert !x/y location (in metres relative to centre of obs footprint) of corners 752 REAL(KIND= wp), DIMENSION(4), INTENT(OUT) :: &756 REAL(KIND=dp), DIMENSION(4), INTENT(OUT) :: & 753 757 & pdist !distance (in metres) of each corner relative to centre of obs footprint 754 758 … … 756 760 INTEGER :: & 757 761 & jvert !Counter for corners 758 REAL(KIND= wp) :: &762 REAL(KIND=dp) :: & 759 763 & zphi, zlam !Local values for lon/lat of corners 760 REAL(KIND= wp) :: &764 REAL(KIND=dp) :: & 761 765 & za1, za2, & !For great circle distance calculations 762 766 & zb1, zb2, & 763 767 & zc1, zc2 764 REAL(KIND= wp) :: &768 REAL(KIND=dp) :: & 765 769 & zdist_centre_lat, & !Distances in lat/lon directions (in metres) 766 770 & zdist_centre_lon -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/obs_conv.F90
r10068 r15540 20 20 !! * Modules used 21 21 USE par_kind, ONLY : & ! Precision variables 22 & wp22 & dp, wp 23 23 IMPLICIT NONE 24 24 -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/obs_conv_functions.h90
r10068 r15540 5 5 !!---------------------------------------------------------------------- 6 6 7 REAL(KIND= wp) FUNCTION potemp( ps, pt, pp, ppr )7 REAL(KIND=dp) FUNCTION potemp( ps, pt, pp, ppr ) 8 8 !!---------------------------------------------------------------------- 9 9 !! *** FUNCTION potemp *** … … 32 32 REAL(KIND=wp), INTENT(IN) :: ps 33 33 REAL(KIND=wp), INTENT(IN) :: pt 34 REAL(KIND= wp), INTENT(IN) :: pp34 REAL(KIND=dp), INTENT(IN) :: pp 35 35 REAL(KIND=wp), INTENT(IN) :: ppr 36 36 37 37 !! * Local declarations 38 REAL(KIND= wp) :: zpol39 REAL(KIND= wp), PARAMETER :: a1 = 1.067610e-0540 REAL(KIND= wp), PARAMETER :: a2 = -1.434297e-0641 REAL(KIND= wp), PARAMETER :: a3 = -7.566349e-0942 REAL(KIND= wp), PARAMETER :: a4 = -8.535585e-0643 REAL(KIND= wp), PARAMETER :: a5 = 3.074672e-0844 REAL(KIND= wp), PARAMETER :: a6 = 1.918639e-0845 REAL(KIND= wp), PARAMETER :: a7 = 1.788718e-1038 REAL(KIND=dp) :: zpol 39 REAL(KIND=dp), PARAMETER :: a1 = 1.067610e-05 40 REAL(KIND=dp), PARAMETER :: a2 = -1.434297e-06 41 REAL(KIND=dp), PARAMETER :: a3 = -7.566349e-09 42 REAL(KIND=dp), PARAMETER :: a4 = -8.535585e-06 43 REAL(KIND=dp), PARAMETER :: a5 = 3.074672e-08 44 REAL(KIND=dp), PARAMETER :: a6 = 1.918639e-08 45 REAL(KIND=dp), PARAMETER :: a7 = 1.788718e-10 46 46 47 47 zpol = a1 + a2 * ps + a3 * ( pp + ppr ) + a4 * pt & … … 52 52 END FUNCTION potemp 53 53 54 REAL(KIND= wp) FUNCTION fspott( pft, pfs, pfp )54 REAL(KIND=dp) FUNCTION fspott( pft, pfs, pfp ) 55 55 !!---------------------------------------------------------------------- 56 56 !! *** FUNCTION fspott *** … … 71 71 72 72 !! * Arguments 73 REAL(KIND= wp) :: pft ! in situ temperature in degrees Celsius74 REAL(KIND= wp) :: pfs ! salinity in psu75 REAL(KIND= wp) :: pfp ! pressure in bars73 REAL(KIND=dp) :: pft ! in situ temperature in degrees Celsius 74 REAL(KIND=dp) :: pfs ! salinity in psu 75 REAL(KIND=dp) :: pfp ! pressure in bars 76 76 77 77 fspott = & … … 91 91 END FUNCTION fspott 92 92 93 REAL(KIND= wp) FUNCTION atg( p_s, p_t, p_p )93 REAL(KIND=dp) FUNCTION atg( p_s, p_t, p_p ) 94 94 !!---------------------------------------------------------------------- 95 95 !! *** FUNCTION atg *** … … 115 115 116 116 REAL(KIND=wp), INTENT(IN) :: p_s ! Salinity in PSU 117 REAL(KIND= wp), INTENT(IN) :: p_t ! Temperature in centigrades118 REAL(KIND= wp), INTENT(IN) :: p_p ! Pressure in decibars.119 120 !! * Local declarations 121 122 REAL(KIND= wp) :: z_ds117 REAL(KIND=dp), INTENT(IN) :: p_t ! Temperature in centigrades 118 REAL(KIND=dp), INTENT(IN) :: p_p ! Pressure in decibars. 119 120 !! * Local declarations 121 122 REAL(KIND=dp) :: z_ds 123 123 124 124 z_ds = p_s - 35.0 … … 131 131 END FUNCTION atg 132 132 133 REAL(KIND= wp) FUNCTION theta( p_s, p_t0, p_p0, p_pr )133 REAL(KIND=dp) FUNCTION theta( p_s, p_t0, p_p0, p_pr ) 134 134 !!---------------------------------------------------------------------- 135 135 !! *** FUNCTION theta *** … … 159 159 160 160 !! * Local declarations 161 REAL(KIND= wp) :: z_p162 REAL(KIND= wp) :: z_t163 REAL(KIND= wp) :: z_h164 REAL(KIND= wp) :: z_xk165 REAL(KIND= wp) :: z_q161 REAL(KIND=dp) :: z_p 162 REAL(KIND=dp) :: z_t 163 REAL(KIND=dp) :: z_h 164 REAL(KIND=dp) :: z_xk 165 REAL(KIND=dp) :: z_q 166 166 167 167 z_p = p_p0 … … 184 184 END FUNCTION theta 185 185 186 REAL(KIND= wp) FUNCTION depth( p_p, p_lat )186 REAL(KIND=dp) FUNCTION depth( p_p, p_lat ) 187 187 !!---------------------------------------------------------------------- 188 188 !! *** FUNCTION depth *** … … 210 210 211 211 !! * Local declarations 212 REAL(KIND= wp) :: z_x213 REAL(KIND= wp) :: z_gr212 REAL(KIND=dp) :: z_x 213 REAL(KIND=dp) :: z_gr 214 214 215 215 z_x = SIN( p_lat / 57.29578 ) … … 221 221 END FUNCTION depth 222 222 223 REAL(KIND= wp) FUNCTION p_to_dep( p_p, p_lat )223 REAL(KIND=dp) FUNCTION p_to_dep( p_p, p_lat ) 224 224 !!---------------------------------------------------------------------- 225 225 !! *** FUNCTION p_to_dep *** … … 245 245 246 246 !! * Local declarations 247 REAL(KIND= wp) :: z_x248 REAL(KIND= wp) :: z_c1249 REAL(KIND= wp) :: z_c2247 REAL(KIND=dp) :: z_x 248 REAL(KIND=dp) :: z_c1 249 REAL(KIND=dp) :: z_c2 250 250 251 251 z_x = SIN( p_lat / 57.29578 ) … … 257 257 END FUNCTION p_to_dep 258 258 259 REAL(KIND= wp) FUNCTION dep_to_p( p_dep, p_lat )259 REAL(KIND=dp) FUNCTION dep_to_p( p_dep, p_lat ) 260 260 !!---------------------------------------------------------------------- 261 261 !! *** FUNCTION dep_to_p *** … … 280 280 281 281 !! * Local declarations 282 REAL(KIND= wp) :: z_x283 REAL(KIND= wp) :: z_c1284 REAL(KIND= wp) :: z_c2285 REAL(KIND= wp) :: z_d282 REAL(KIND=dp) :: z_x 283 REAL(KIND=dp) :: z_c1 284 REAL(KIND=dp) :: z_c2 285 REAL(KIND=dp) :: z_d 286 286 287 287 z_x = SIN( p_lat / 57.29578 ) -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/obs_grd_bruteforce.h90
r10068 r15540 34 34 INTEGER, INTENT(IN) :: kmyproc ! Processor number for MPP 35 35 INTEGER, INTENT(IN) :: ktotproc ! Total number of processors 36 REAL(KIND= wp), DIMENSION(kpi,kpj), INTENT(IN) :: &36 REAL(KIND=dp), DIMENSION(kpi,kpj), INTENT(IN) :: & 37 37 & pglam, & ! Grid point longitude 38 38 & pgphi, & ! Grid point latitude 39 39 & pmask ! Grid point mask 40 40 INTEGER,INTENT(IN) :: kobs ! Size of the observation arrays 41 REAL(KIND= wp), DIMENSION(kobs), INTENT(IN) :: &41 REAL(KIND=dp), DIMENSION(kobs), INTENT(IN) :: & 42 42 & plam, & ! Longitude of obsrvations 43 43 & pphi ! Latitude of observations … … 48 48 49 49 !! * Local declarations 50 REAL(wp), DIMENSION(:), ALLOCATABLE :: & 51 & zplam, zpphi 52 REAL(wp) :: zlammax 53 REAL(wp) :: zlam 50 REAL(dp), DIMENSION(:), ALLOCATABLE :: zplam, zpphi 51 REAL(dp) :: zlammax 52 REAL(dp) :: zlam 54 53 INTEGER :: ji 55 54 INTEGER :: jj … … 60 59 INTEGER :: joffset 61 60 INTEGER :: jostride 62 REAL(KIND= wp), DIMENSION(:,:), ALLOCATABLE :: &61 REAL(KIND=dp), DIMENSION(:,:), ALLOCATABLE :: & 63 62 & zlamg, & 64 63 & zphig, & … … 70 69 LOGICAL, DIMENSION(:,:), ALLOCATABLE :: & 71 70 & llinvalidcell 72 REAL( wp), DIMENSION(:,:,:), ALLOCATABLE :: &71 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: & 73 72 & zlamtm, & 74 73 & zphitm -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/obs_grid.F90
r14894 r15540 55 55 INTEGER, PRIVATE :: gsearch_nlons_def ! Num of longitudes 56 56 INTEGER, PRIVATE :: gsearch_nlats_def ! Num of latitudes 57 REAL( wp), PRIVATE :: gsearch_lonmin_def ! Min longitude58 REAL( wp), PRIVATE :: gsearch_latmin_def ! Min latitude59 REAL( wp), PRIVATE :: gsearch_dlon_def ! Lon spacing60 REAL( wp), PRIVATE :: gsearch_dlat_def ! Lat spacing57 REAL(dp), PRIVATE :: gsearch_lonmin_def ! Min longitude 58 REAL(dp), PRIVATE :: gsearch_latmin_def ! Min latitude 59 REAL(dp), PRIVATE :: gsearch_dlon_def ! Lon spacing 60 REAL(dp), PRIVATE :: gsearch_dlat_def ! Lat spacing 61 61 !! Variable versions 62 62 INTEGER, PRIVATE :: nlons ! Num of longitudes 63 63 INTEGER, PRIVATE :: nlats ! Num of latitudes 64 REAL( wp), PRIVATE :: lonmin ! Min longitude65 REAL( wp), PRIVATE :: latmin ! Min latitude66 REAL( wp), PRIVATE :: dlon ! Lon spacing67 REAL( wp), PRIVATE :: dlat ! Lat spacing64 REAL(dp), PRIVATE :: lonmin ! Min longitude 65 REAL(dp), PRIVATE :: latmin ! Min latitude 66 REAL(dp), PRIVATE :: dlon ! Lon spacing 67 REAL(dp), PRIVATE :: dlat ! Lat spacing 68 68 69 69 INTEGER, PRIVATE :: maxxdiff, maxydiff ! Max diffs between model points … … 71 71 72 72 ! Data storage 73 REAL(wp), PRIVATE, DIMENSION(:,:), ALLOCATABLE :: & 74 & lons, & 75 & lats 73 REAL(dp), PRIVATE, DIMENSION(:,:), ALLOCATABLE :: lons, lats 74 75 76 76 77 INTEGER, PRIVATE, DIMENSION(:,:), ALLOCATABLE :: & 77 78 & ixpos, & … … 115 116 INTEGER :: & 116 117 & kobsin ! Size of the observation arrays 117 REAL(KIND= wp), DIMENSION(kobsin), INTENT(IN) :: &118 REAL(KIND=dp), DIMENSION(kobsin), INTENT(IN) :: & 118 119 & plam, & ! Longitude of obsrvations 119 120 & pphi ! Latitude of observations … … 135 136 & 1, jpi, 1, jpj, & 136 137 & narea-1, jpnij, & 137 & CASTWP(glamt), CASTWP(gphit), tmask, &138 & glamt, gphit, tmask, & 138 139 & kobsin, plam, pphi, & 139 140 & kobsi, kobsj, kproc ) … … 156 157 & 1, jpi, 1, jpj, & 157 158 & narea-1, jpnij, & 158 & CASTWP(glamf), CASTWP(gphif), fmask, &159 & glamf, gphif, fmask, & 159 160 & kobsin, plam, pphi, & 160 161 & kobsi, kobsj, kproc ) … … 190 191 !! * Arguments 191 192 INTEGER :: kobs ! Size of the observation arrays 192 REAL(KIND= wp), DIMENSION(kobs), INTENT(IN) :: &193 REAL(KIND=dp), DIMENSION(kobs), INTENT(IN) :: & 193 194 & plam, & ! Longitude of obsrvations 194 195 & pphi ! Latitude of observations … … 199 200 200 201 !! * Local declarations 201 REAL(KIND=wp), DIMENSION(:), ALLOCATABLE :: & 202 & zplam 203 REAL(wp) :: zlammax 204 REAL(wp) :: zlam 202 REAL(KIND=dp), DIMENSION(:), ALLOCATABLE :: zplam 203 REAL(dp) :: zlammax 204 REAL(dp) :: zlam 205 205 INTEGER :: ji 206 206 INTEGER :: jj … … 228 228 INTEGER :: joffset 229 229 INTEGER :: jostride 230 REAL(KIND= wp), DIMENSION(:,:), ALLOCATABLE :: &230 REAL(KIND=dp), DIMENSION(:,:), ALLOCATABLE :: & 231 231 & zlamg, & 232 232 & zphig, & … … 238 238 LOGICAL, DIMENSION(:,:), ALLOCATABLE :: & 239 239 & llinvalidcell 240 REAL( wp), DIMENSION(:,:,:), ALLOCATABLE :: &240 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: & 241 241 & zlamtm, & 242 242 & zphitm … … 669 669 INTEGER, DIMENSION(2) :: incdim 670 670 CHARACTER(LEN=20) :: datestr=" ",timestr=" " 671 REAL( wp) :: tmpx1, tmpx2, tmpy1, tmpy2672 REAL( wp) :: meanxdiff, meanydiff673 REAL( wp) :: meanxdiff1, meanydiff1674 REAL( wp) :: meanxdiff2, meanydiff2671 REAL(dp) :: tmpx1, tmpx2, tmpy1, tmpy2 672 REAL(dp) :: meanxdiff, meanydiff 673 REAL(dp) :: meanxdiff1, meanydiff1 674 REAL(dp) :: meanxdiff2, meanydiff2 675 675 INTEGER :: numx1, numx2, numy1, numy2, df 676 676 INTEGER :: jimin, jimax, jjmin, jjmax 677 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: & 678 & lonsi, & 679 & latsi 677 REAL(dp), DIMENSION(:,:), ALLOCATABLE :: lonsi, latsi 680 678 INTEGER, DIMENSION(:,:), ALLOCATABLE :: & 681 679 & ixposi, & … … 685 683 INTEGER, DIMENSION(histsize) :: & 686 684 & histx1, histx2, histy1, histy2 687 REAL( wp), DIMENSION(histsize) :: &685 REAL(dp), DIMENSION(histsize) :: & 688 686 & fhistx1, fhistx2, fhisty1, fhisty2 689 REAL( wp) :: histtol687 REAL(dp) :: histtol 690 688 CHARACTER(LEN=26) :: clfmt ! writing format 691 689 INTEGER :: idg ! number of digits … … 825 823 & 1, jpi, 1, jpj, & 826 824 & narea-1, jpnij, & 827 & CASTWP(glamt), CASTWP(gphit), tmask, &825 & glamt, gphit, tmask, & 828 826 & nlons*nlats, lonsi, latsi, & 829 827 & ixposi, iyposi, iproci ) -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/obs_inter_sup.F90
r10068 r15540 64 64 INTEGER, OPTIONAL, DIMENSION(kptsi,kptsj,kobs), INTENT(IN) :: & 65 65 & kproc ! Precomputed processor for each i,j,iobs points 66 REAL(KIND= wp), DIMENSION(kpi,kpj,kpk), INTENT(IN) ::&66 REAL(KIND=dp), DIMENSION(kpi,kpj,kpk), INTENT(IN) ::& 67 67 & pval ! Local 3D array to extract data from 68 REAL(KIND= wp), DIMENSION(kptsi,kptsj,kpk,kobs), INTENT(OUT) ::&68 REAL(KIND=dp), DIMENSION(kptsi,kptsj,kpk,kobs), INTENT(OUT) ::& 69 69 & pgval ! Stencil at each point 70 70 !! * Local declarations … … 119 119 INTEGER, OPTIONAL, DIMENSION(kptsi,kptsj,kobs), INTENT(IN) :: & 120 120 & kproc ! Precomputed processor for each i,j,iobs points 121 REAL(KIND= wp), DIMENSION(kpi,kpj), INTENT(IN) ::&121 REAL(KIND=dp), DIMENSION(kpi,kpj), INTENT(IN) ::& 122 122 & pval ! Local 3D array to extra data from 123 REAL(KIND= wp), DIMENSION(kptsi,kptsj,kobs), INTENT(OUT) ::&123 REAL(KIND=dp), DIMENSION(kptsi,kptsj,kobs), INTENT(OUT) ::& 124 124 & pgval ! Stencil at each point 125 125 !! * Local declarations 126 REAL(KIND=wp), DIMENSION(jpi,jpj,1) :: zval 127 REAL(KIND=wp), DIMENSION(kptsi,kptsj,1,kobs) ::& 128 & zgval 126 REAL(KIND=dp), DIMENSION(jpi,jpj,1) :: zval 127 REAL(KIND=dp), DIMENSION(kptsi,kptsj,1,kobs) :: zgval 129 128 130 129 ! Set up local "3D" buffer … … 179 178 INTEGER, OPTIONAL, DIMENSION(kptsi,kptsj,kobs), INTENT(IN) :: & 180 179 & kproc ! Precomputed processor for each i,j,iobs points 181 REAL(KIND= wp), DIMENSION(kpi,kpj,kpk), INTENT(IN) ::&180 REAL(KIND=dp), DIMENSION(kpi,kpj,kpk), INTENT(IN) ::& 182 181 & pval ! Local 3D array to extract data from 183 REAL(KIND= wp), DIMENSION(kptsi,kptsj,kpk,kobs), INTENT(OUT) ::&182 REAL(KIND=dp), DIMENSION(kptsi,kptsj,kpk,kobs), INTENT(OUT) ::& 184 183 & pgval ! Stencil at each point 185 184 !! * Local declarations 186 REAL(KIND= wp), DIMENSION(:,:), ALLOCATABLE :: &185 REAL(KIND=dp), DIMENSION(:,:), ALLOCATABLE :: & 187 186 & zsend, & 188 187 & zrecv … … 348 347 & kgrdi, & ! i,j indicies for each stencil 349 348 & kgrdj 350 REAL(KIND= wp), DIMENSION(kpi,kpj,kpk), INTENT(IN) ::&349 REAL(KIND=dp), DIMENSION(kpi,kpj,kpk), INTENT(IN) ::& 351 350 & pval ! Local 3D array to extract data from 352 REAL(KIND= wp), DIMENSION(kptsi,kptsj,kpk,kobs), INTENT(OUT) ::&351 REAL(KIND=dp), DIMENSION(kptsi,kptsj,kpk,kobs), INTENT(OUT) ::& 353 352 & pgval ! Stencil at each point 354 353 !! * Local declarations -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/obs_inter_z1d.F90
r10068 r15540 13 13 !! * Modules used 14 14 USE par_kind, ONLY : & ! Precision variables 15 & wp15 & dp, wp 16 16 17 17 IMPLICIT NONE -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/obs_level_search.h90
r10068 r15540 25 25 !! * Arguments 26 26 INTEGER, INTENT(IN) :: kgrd ! Number of gridpoints 27 REAL(KIND= wp), DIMENSION(kgrd), INTENT(INOUT) :: &27 REAL(KIND=dp), DIMENSION(kgrd), INTENT(INOUT) :: & 28 28 & pgrddep ! Depths of gridpoints 29 29 INTEGER, INTENT(IN) :: & 30 30 & kobs ! Number of observations 31 REAL(KIND= wp), DIMENSION(kobs), INTENT(INOUT) :: &31 REAL(KIND=dp), DIMENSION(kobs), INTENT(INOUT) :: & 32 32 & pobsdep ! Depths of observations 33 33 INTEGER ,DIMENSION(kobs), INTENT(OUT) :: & -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/obs_mpp.F90
r14650 r15540 265 265 !! References : http://www.mpi-forum.org 266 266 !!---------------------------------------------------------------------- 267 REAL(KIND= wp), DIMENSION(jpiglo,jpjglo), INTENT(inout) :: pval268 ! 269 INTEGER :: ierr 270 ! 271 #if ! defined key_mpi_off 272 ! 273 INCLUDE 'mpif.h' 274 REAL(KIND=wp), DIMENSION(:,:), ALLOCATABLE :: zcp 267 REAL(KIND=dp), DIMENSION(jpiglo,jpjglo), INTENT(inout) :: pval 268 ! 269 INTEGER :: ierr 270 ! 271 #if ! defined key_mpi_off 272 ! 273 REAL(KIND=dp), DIMENSION(:,:), ALLOCATABLE :: zcp 274 INCLUDE 'mpif.h' 275 275 !!---------------------------------------------------------------------- 276 276 … … 361 361 #if ! defined key_mpi_off 362 362 ! 363 INCLUDE 'mpif.h'364 363 INTEGER, DIMENSION(jpnij) :: irdsp, isdsp 364 INCLUDE 'mpif.h' 365 365 !----------------------------------------------------------------------- 366 366 ! Compute displacements … … 405 405 INTEGER , INTENT(in ) :: knoout 406 406 INTEGER , DIMENSION(jpnij) , INTENT(in ) :: kinv, koutv 407 REAL( wp), DIMENSION(knoin) , INTENT(in ) :: pvalsin408 REAL( wp), DIMENSION(knoout), INTENT( out) :: pvalsout407 REAL(dp), DIMENSION(knoin) , INTENT(in ) :: pvalsin 408 REAL(dp), DIMENSION(knoout), INTENT( out) :: pvalsout 409 409 !! 410 410 INTEGER :: ierr … … 413 413 #if ! defined key_mpi_off 414 414 ! 415 INCLUDE 'mpif.h'416 415 INTEGER, DIMENSION(jpnij) :: irdsp, isdsp 416 INCLUDE 'mpif.h' 417 417 !!---------------------------------------------------------------------- 418 418 ! -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/obs_oper.F90
r14219 r15540 108 108 INTEGER , INTENT(in ) :: kdaystp ! Number of time steps per day 109 109 INTEGER , INTENT(in ) :: kvar ! Number of variables in prodatqc 110 REAL(KIND= wp) , INTENT(in ), DIMENSION(kpi,kpj,kpk) :: pvar ! Model field111 REAL(KIND= wp) , INTENT(in ), DIMENSION(kpi,kpj,kpk) :: pmask ! Land-sea mask112 REAL(KIND= wp) , INTENT(in ), DIMENSION(kpi,kpj) :: plam ! Model longitude113 REAL(KIND= wp) , INTENT(in ), DIMENSION(kpi,kpj) :: pphi ! Model latitudes114 REAL(KIND= wp) , INTENT(in ), DIMENSION(kpi,kpj,kpk) :: pgdept, pgdepw ! depth of T and W levels110 REAL(KIND=dp) , INTENT(in ), DIMENSION(kpi,kpj,kpk) :: pvar ! Model field 111 REAL(KIND=dp) , INTENT(in ), DIMENSION(kpi,kpj,kpk) :: pmask ! Land-sea mask 112 REAL(KIND=dp) , INTENT(in ), DIMENSION(kpi,kpj) :: plam ! Model longitude 113 REAL(KIND=dp) , INTENT(in ), DIMENSION(kpi,kpj) :: pphi ! Model latitudes 114 REAL(KIND=dp) , INTENT(in ), DIMENSION(kpi,kpj,kpk) :: pgdept, pgdepw ! depth of T and W levels 115 115 INTEGER, DIMENSION(imaxavtypes), OPTIONAL :: kdailyavtypes ! Types for daily averages 116 116 … … 135 135 INTEGER, ALLOCATABLE, DIMENSION(:) :: iv_indic 136 136 137 REAL(KIND= wp) :: zlam138 REAL(KIND= wp) :: zphi139 REAL(KIND= wp) :: zdaystp140 REAL(KIND= wp), DIMENSION(kpk) :: &137 REAL(KIND=dp) :: zlam 138 REAL(KIND=dp) :: zphi 139 REAL(KIND=dp) :: zdaystp 140 REAL(KIND=dp), DIMENSION(kpk) :: & 141 141 & zobsk, & 142 142 & zobs2k 143 REAL(KIND= wp), DIMENSION(2,2,1) :: &143 REAL(KIND=dp), DIMENSION(2,2,1) :: & 144 144 & zweig1, & 145 145 & zweig 146 REAL( wp), DIMENSION(:,:,:,:), ALLOCATABLE :: &146 REAL(dp), DIMENSION(:,:,:,:), ALLOCATABLE :: & 147 147 & zmask, & 148 148 & zint, & … … 150 150 & zgdept, & 151 151 & zgdepw 152 REAL( wp), DIMENSION(:,:,:), ALLOCATABLE :: &152 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: & 153 153 & zglam, & 154 154 & zgphi 155 REAL(KIND= wp), DIMENSION(1) :: zmsk156 REAL(KIND= wp), DIMENSION(:,:,:), ALLOCATABLE :: interp_corner155 REAL(KIND=dp), DIMENSION(1) :: zmsk 156 REAL(KIND=dp), DIMENSION(:,:,:), ALLOCATABLE :: interp_corner 157 157 158 158 LOGICAL :: ld_dailyav … … 492 492 INTEGER, INTENT(IN) :: kdaystp ! Number of time steps per day 493 493 INTEGER, INTENT(IN) :: k2dint ! Horizontal interpolation type (see header) 494 REAL( wp), INTENT(IN), DIMENSION(kpi,kpj) :: &494 REAL(dp), INTENT(IN), DIMENSION(kpi,kpj) :: & 495 495 & psurf, & ! Model surface field 496 496 & psurfmask ! Land-sea mask 497 497 LOGICAL, INTENT(IN) :: ldnightav ! Logical for averaging night-time data 498 REAL(KIND= wp), INTENT(IN) :: &498 REAL(KIND=dp), INTENT(IN) :: & 499 499 & plamscl, & ! Diameter in metres of obs footprint in E/W, N/S directions 500 500 & pphiscl ! This is the full width (rather than half-width) … … 520 520 & icount_night, & 521 521 & imask_night 522 REAL( wp) :: zlam523 REAL( wp) :: zphi524 REAL( wp), DIMENSION(1) :: zext, zobsmask525 REAL( wp) :: zdaystp526 REAL( wp), DIMENSION(:,:,:), ALLOCATABLE :: &522 REAL(dp) :: zlam 523 REAL(dp) :: zphi 524 REAL(dp), DIMENSION(1) :: zext, zobsmask 525 REAL(dp) :: zdaystp 526 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: & 527 527 & zweig, & 528 528 & zmask, & … … 535 535 & zgphif 536 536 537 REAL( wp), DIMENSION(:,:), SAVE, ALLOCATABLE :: &537 REAL(dp), DIMENSION(:,:), SAVE, ALLOCATABLE :: & 538 538 & zintmp, & 539 539 & zouttmp, & … … 655 655 656 656 CALL obs_int_comm_2d( imaxifp, imaxjfp, isurf, kpi, kpj, & 657 & igrdi, igrdj, CASTWP(glamt), zglam )657 & igrdi, igrdj, glamt, zglam ) 658 658 CALL obs_int_comm_2d( imaxifp, imaxjfp, isurf, kpi, kpj, & 659 & igrdi, igrdj, CASTWP(gphit), zgphi )659 & igrdi, igrdj, gphit, zgphi ) 660 660 CALL obs_int_comm_2d( imaxifp, imaxjfp, isurf, kpi, kpj, & 661 661 & igrdi, igrdj, psurfmask, zmask ) … … 663 663 & igrdi, igrdj, psurf, zsurf ) 664 664 CALL obs_int_comm_2d( imaxifp+1, imaxjfp+1, isurf, kpi, kpj, & 665 & igrdip1, igrdjp1, CASTWP(glamf), zglamf )665 & igrdip1, igrdjp1, glamf, zglamf ) 666 666 CALL obs_int_comm_2d( imaxifp+1, imaxjfp+1, isurf, kpi, kpj, & 667 & igrdip1, igrdjp1, CASTWP(gphif), zgphif )667 & igrdip1, igrdjp1, gphif, zgphif ) 668 668 669 669 ! At the end of the day get interpolated means -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/obs_prep.F90
r14986 r15540 154 154 & surfdata%mi, surfdata%mj, & 155 155 & surfdata%rlam, surfdata%rphi, & 156 & CASTWP(glamt), CASTWP(gphit), &156 & glamt, gphit, & 157 157 & tmask(:,:,1), surfdata%nqc, & 158 158 & iosdsobs, ilansobs, & … … 279 279 INTEGER, DIMENSION(imaxavtypes), OPTIONAL :: & 280 280 & kdailyavtypes ! Types for daily averages 281 REAL( wp), INTENT(IN), DIMENSION(kpi,kpj,kpk,profdata%nvar) :: &281 REAL(dp), INTENT(IN), DIMENSION(kpi,kpj,kpk,profdata%nvar) :: & 282 282 & zmask 283 REAL( wp), INTENT(IN), DIMENSION(kpi,kpj,profdata%nvar) :: &283 REAL(dp), INTENT(IN), DIMENSION(kpi,kpj,profdata%nvar) :: & 284 284 & pglam, & 285 285 & pgphi … … 609 609 INTEGER :: iskip 610 610 INTEGER :: idaystp 611 REAL(KIND= wp) :: zminstp612 REAL(KIND= wp) :: zhoustp613 REAL(KIND= wp) :: zobsstp611 REAL(KIND=dp) :: zminstp 612 REAL(KIND=dp) :: zhoustp 613 REAL(KIND=dp) :: zobsstp 614 614 INTEGER, DIMENSION(12) :: imonth_len !: length in days of the months of the current year 615 615 … … 887 887 INTEGER , INTENT(in ) :: kpi , kpj ! Number of grid points in (i,j) 888 888 INTEGER , INTENT(in ), DIMENSION(kobsno) :: kobsi , kobsj ! Observation (i,j) coordinates 889 REAL( wp), INTENT(in ), DIMENSION(kobsno) :: pobslam, pobsphi ! Observation (lon,lat) coordinates890 REAL( wp), INTENT(in ), DIMENSION(kpi,kpj) :: plam , pphi ! Model (lon,lat) coordinates891 REAL( wp), INTENT(in ), DIMENSION(kpi,kpj) :: pmask ! Land mask array889 REAL(dp), INTENT(in ), DIMENSION(kobsno) :: pobslam, pobsphi ! Observation (lon,lat) coordinates 890 REAL(dp), INTENT(in ), DIMENSION(kpi,kpj) :: plam , pphi ! Model (lon,lat) coordinates 891 REAL(dp), INTENT(in ), DIMENSION(kpi,kpj) :: pmask ! Land mask array 892 892 INTEGER , INTENT(inout), DIMENSION(kobsno) :: kobsqc ! Observation quality control 893 893 INTEGER , INTENT(inout) :: kosdobs ! Observations outside space domain … … 899 899 INTEGER , INTENT(in ) :: kqc_cutoff ! Cutoff QC value 900 900 ! 901 REAL(KIND= wp), DIMENSION(2,2,kobsno) :: zgmsk ! Grid mask902 REAL(KIND= wp), DIMENSION(2,2,kobsno) :: zbmsk ! Boundary mask903 REAL(KIND= wp), DIMENSION(jpi,jpj) :: zbdymask904 REAL(KIND= wp), DIMENSION(2,2,kobsno) :: zglam, zgphi ! Model Lon/lat at grid points901 REAL(KIND=dp), DIMENSION(2,2,kobsno) :: zgmsk ! Grid mask 902 REAL(KIND=dp), DIMENSION(2,2,kobsno) :: zbmsk ! Boundary mask 903 REAL(KIND=dp), DIMENSION(jpi,jpj) :: zbdymask 904 REAL(KIND=dp), DIMENSION(2,2,kobsno) :: zglam, zgphi ! Model Lon/lat at grid points 905 905 INTEGER , DIMENSION(2,2,kobsno) :: igrdi, igrdj ! Grid i,j 906 906 LOGICAL :: lgridobs ! Is observation on a model grid point. … … 1096 1096 INTEGER, DIMENSION(kobsno), INTENT(IN) :: & 1097 1097 & kobsk ! Observation k coordinate 1098 REAL(KIND= wp), DIMENSION(kprofno), INTENT(IN) :: &1098 REAL(KIND=dp), DIMENSION(kprofno), INTENT(IN) :: & 1099 1099 & pobslam, & ! Observation (lon,lat) coordinates 1100 1100 & pobsphi 1101 REAL(KIND= wp), DIMENSION(kobsno), INTENT(INOUT) :: &1101 REAL(KIND=dp), DIMENSION(kobsno), INTENT(INOUT) :: & 1102 1102 & pobsdep ! Observation depths 1103 REAL(KIND= wp), DIMENSION(kpi,kpj), INTENT(IN) :: &1103 REAL(KIND=dp), DIMENSION(kpi,kpj), INTENT(IN) :: & 1104 1104 & plam, pphi ! Model (lon,lat) coordinates 1105 REAL(KIND= wp), DIMENSION(kpk), INTENT(IN) :: &1105 REAL(KIND=dp), DIMENSION(kpk), INTENT(IN) :: & 1106 1106 & pdep ! Model depth coordinates 1107 REAL(KIND= wp), DIMENSION(kpi,kpj,kpk), INTENT(IN) :: &1107 REAL(KIND=dp), DIMENSION(kpi,kpj,kpk), INTENT(IN) :: & 1108 1108 & pmask ! Land mask array 1109 1109 INTEGER, DIMENSION(kprofno), INTENT(INOUT) :: & … … 1121 1121 1122 1122 !! * Local declarations 1123 REAL(KIND= wp), DIMENSION(2,2,kpk,kprofno) :: &1123 REAL(KIND=dp), DIMENSION(2,2,kpk,kprofno) :: & 1124 1124 & zgmsk ! Grid mask 1125 REAL(KIND= wp), DIMENSION(2,2,kprofno) :: &1125 REAL(KIND=dp), DIMENSION(2,2,kprofno) :: & 1126 1126 & zbmsk ! Boundary mask 1127 REAL(KIND= wp), DIMENSION(jpi,jpj) :: zbdymask1128 REAL(KIND= wp), DIMENSION(2,2,kpk,kprofno) :: &1127 REAL(KIND=dp), DIMENSION(jpi,jpj) :: zbdymask 1128 REAL(KIND=dp), DIMENSION(2,2,kpk,kprofno) :: & 1129 1129 & zgdepw 1130 REAL(KIND= wp), DIMENSION(2,2,kprofno) :: &1130 REAL(KIND=dp), DIMENSION(2,2,kprofno) :: & 1131 1131 & zglam, & ! Model longitude at grid points 1132 1132 & zgphi ! Model latitude at grid points 1133 REAL( wp), DIMENSION(jpi,jpj,jpk) :: zdepw1133 REAL(dp), DIMENSION(jpi,jpj,jpk) :: zdepw 1134 1134 INTEGER, DIMENSION(2,2,kprofno) :: & 1135 1135 & igrdi, & ! Grid i,j -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/obs_profiles_def.F90
r14650 r15540 69 69 & idqc !: Depth QC flag 70 70 71 REAL(KIND= wp), POINTER, DIMENSION(:) :: &71 REAL(KIND=dp), POINTER, DIMENSION(:) :: & 72 72 & vdep, & !: Depth coordinate of profile data 73 73 & vobs, & !: Profile data 74 74 & vmod !: Model counterpart of the profile data vector 75 75 76 REAL(KIND= wp), POINTER, DIMENSION(:,:) :: &76 REAL(KIND=dp), POINTER, DIMENSION(:,:) :: & 77 77 & vext !: Extra variables 78 78 … … 127 127 & itqc !: Time QC 128 128 129 REAL(KIND= wp), POINTER, DIMENSION(:) :: &129 REAL(KIND=dp), POINTER, DIMENSION(:) :: & 130 130 & rlam, & !: Longitude coordinate of profile data 131 131 & rphi !: Latitude coordinate of profile data … … 176 176 ! variables 177 177 178 REAL(KIND= wp), POINTER, DIMENSION(:,:,:,:) :: &178 REAL(KIND=dp), POINTER, DIMENSION(:,:,:,:) :: & 179 179 & vdmean !: Daily averaged model field 180 180 -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/obs_read_altbias.F90
r14219 r15540 92 92 INTEGER :: i_var_id 93 93 94 REAL( wp), DIMENSION(1) :: &94 REAL(dp), DIMENSION(1) :: & 95 95 & zext, & 96 96 & zobsmask 97 REAL( wp), DIMENSION(2,2,1) :: &97 REAL(dp), DIMENSION(2,2,1) :: & 98 98 & zweig 99 REAL( wp), DIMENSION(:,:,:), ALLOCATABLE :: &99 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: & 100 100 & zmask, & 101 101 & zbias, & 102 102 & zglam, & 103 103 & zgphi 104 REAL( wp), DIMENSION(jpi,jpj) :: z_altbias105 REAL( wp) :: zlam106 REAL( wp) :: zphi104 REAL(dp), DIMENSION(jpi,jpj) :: z_altbias 105 REAL(dp) :: zlam 106 REAL(dp) :: zphi 107 107 INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: & 108 108 & igrdi, & … … 166 166 167 167 CALL obs_int_comm_2d( 2, 2, sladata%nsurf, jpi, jpj, & 168 & igrdi, igrdj, CASTWP(glamt), zglam )169 CALL obs_int_comm_2d( 2, 2, sladata%nsurf, jpi, jpj, & 170 & igrdi, igrdj, CASTWP(gphit), zgphi )168 & igrdi, igrdj, glamt, zglam ) 169 CALL obs_int_comm_2d( 2, 2, sladata%nsurf, jpi, jpj, & 170 & igrdi, igrdj, gphit, zgphi ) 171 171 CALL obs_int_comm_2d( 2, 2, sladata%nsurf, jpi, jpj, & 172 172 & igrdi, igrdj, tmask(:,:,1), zmask ) -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/obs_read_prof.F90
r14644 r15540 130 130 INTEGER, DIMENSION(kvars) :: & 131 131 & iv3dt 132 REAL( wp), DIMENSION(:), ALLOCATABLE :: &132 REAL(dp), DIMENSION(:), ALLOCATABLE :: & 133 133 & zphi, & 134 134 & zlam -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/obs_read_surf.F90
r14644 r15540 110 110 & ifileidx, & 111 111 & isurfidx 112 REAL( wp), DIMENSION(:), ALLOCATABLE :: &112 REAL(dp), DIMENSION(:), ALLOCATABLE :: & 113 113 & zphi, & 114 114 & zlam -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/obs_readmdt.F90
r14219 r15540 74 74 INTEGER :: nummdt 75 75 ! 76 REAL( wp), DIMENSION(1) :: zext, zobsmask77 REAL( wp), DIMENSION(2,2,1) :: zweig78 ! 79 REAL( wp), DIMENSION(:,:,:), ALLOCATABLE :: zmask, zmdtl, zglam, zgphi76 REAL(dp), DIMENSION(1) :: zext, zobsmask 77 REAL(dp), DIMENSION(2,2,1) :: zweig 78 ! 79 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: zmask, zmdtl, zglam, zgphi 80 80 INTEGER , DIMENSION(:,:,:), ALLOCATABLE :: igrdi, igrdj 81 81 ! 82 REAL( wp), DIMENSION(jpi,jpj) :: z_mdt, mdtmask82 REAL(dp), DIMENSION(jpi,jpj) :: z_mdt, mdtmask 83 83 84 REAL( wp) :: zlam, zphi, zfill, zinfill ! local scalar84 REAL(dp) :: zlam, zphi, zfill, zinfill ! local scalar 85 85 !!---------------------------------------------------------------------- 86 86 … … 137 137 END DO 138 138 139 CALL obs_int_comm_2d( 2, 2, sladata%nsurf, jpi, jpj, igrdi, igrdj, CASTWP(glamt), zglam )140 CALL obs_int_comm_2d( 2, 2, sladata%nsurf, jpi, jpj, igrdi, igrdj, CASTWP(gphit), zgphi )139 CALL obs_int_comm_2d( 2, 2, sladata%nsurf, jpi, jpj, igrdi, igrdj, glamt , zglam ) 140 CALL obs_int_comm_2d( 2, 2, sladata%nsurf, jpi, jpj, igrdi, igrdj, gphit , zgphi ) 141 141 CALL obs_int_comm_2d( 2, 2, sladata%nsurf, jpi, jpj, igrdi, igrdj, mdtmask, zmask ) 142 142 CALL obs_int_comm_2d( 2, 2, sladata%nsurf, jpi, jpj, igrdi, igrdj, z_mdt , zmdtl ) … … 189 189 INTEGER, INTENT(IN) :: kpi, kpj 190 190 INTEGER, INTENT(IN) :: Kmm 191 REAL( wp), DIMENSION(kpi,kpj), INTENT(INOUT) :: mdt ! MDT used on the model grid192 REAL( wp) , INTENT(IN ) :: zfill191 REAL(dp), DIMENSION(kpi,kpj), INTENT(INOUT) :: mdt ! MDT used on the model grid 192 REAL(dp) , INTENT(IN ) :: zfill 193 193 ! 194 194 INTEGER :: ji, jj 195 REAL( wp) :: zdxdy, zarea, zeta1, zeta2, zcorr_mdt, zcorr_bcketa, zcorr ! local scalar196 REAL( wp), DIMENSION(jpi,jpj) :: zpromsk195 REAL(dp) :: zdxdy, zarea, zeta1, zeta2, zcorr_mdt, zcorr_bcketa, zcorr ! local scalar 196 REAL(dp), DIMENSION(jpi,jpj) :: zpromsk 197 197 CHARACTER(LEN=14), PARAMETER :: cpname = 'obs_offset_mdt' 198 198 !!---------------------------------------------------------------------- -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/obs_rot_vel.F90
r10068 r15540 58 58 TYPE(obs_prof), INTENT(INOUT) :: profdata ! Profile data to be read 59 59 INTEGER, INTENT(IN) :: k2dint ! Horizontal interpolation methed 60 REAL( wp), DIMENSION(*) :: &60 REAL(dp), DIMENSION(*) :: & 61 61 & pu, & 62 62 & pv 63 63 !! * Local declarations 64 REAL( wp), DIMENSION(2,2,1) :: zweig65 REAL( wp), DIMENSION(:,:,:), ALLOCATABLE :: &64 REAL(dp), DIMENSION(2,2,1) :: zweig 65 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: & 66 66 & zmasku, & 67 67 & zmaskv, & … … 74 74 & zglamv, & 75 75 & zgphiv 76 REAL( wp), DIMENSION(1) :: &76 REAL(dp), DIMENSION(1) :: & 77 77 & zsinu, & 78 78 & zcosu, & 79 79 & zsinv, & 80 80 & zcosv 81 REAL( wp) :: zsin82 REAL( wp) :: zcos83 REAL( wp), DIMENSION(1) :: zobsmask84 REAL( wp), DIMENSION(jpi,jpj) :: zsingu,zcosgu,zsingv,zcosgv81 REAL(dp) :: zsin 82 REAL(dp) :: zcos 83 REAL(dp), DIMENSION(1) :: zobsmask 84 REAL(dp), DIMENSION(jpi,jpj) :: zsingu,zcosgu,zsingv,zcosgv 85 85 INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: & 86 86 & igrdiu, & -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/obs_sstbias.F90
r14219 r15540 82 82 INTEGER, DIMENSION(knumtypes) :: & 83 83 & ibiastypes ! Array of the bias types in each file 84 REAL( wp), DIMENSION(jpi,jpj,knumtypes) :: &84 REAL(dp), DIMENSION(jpi,jpj,knumtypes) :: & 85 85 & z_sstbias ! Array to store the SST bias values 86 REAL( wp), DIMENSION(jpi,jpj) :: &86 REAL(dp), DIMENSION(jpi,jpj) :: & 87 87 & z_sstbias_2d ! Array to store the SST bias values 88 REAL( wp), DIMENSION(1) :: &88 REAL(dp), DIMENSION(1) :: & 89 89 & zext, & 90 90 & zobsmask 91 REAL( wp), DIMENSION(2,2,1) :: &91 REAL(dp), DIMENSION(2,2,1) :: & 92 92 & zweig 93 REAL( wp), DIMENSION(:,:,:), ALLOCATABLE :: &93 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: & 94 94 & zmask, & 95 95 & zglam, & 96 96 & zgphi 97 REAL( wp), DIMENSION(:,:,:), ALLOCATABLE :: &97 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: & 98 98 & zmask_tmp, & 99 99 & zglam_tmp, & 100 100 & zgphi_tmp 101 REAL( wp), ALLOCATABLE, DIMENSION(:,:,:) :: zbias102 REAL( wp) :: zlam103 REAL( wp) :: zphi101 REAL(dp), ALLOCATABLE, DIMENSION(:,:,:) :: zbias 102 REAL(dp) :: zlam 103 REAL(dp) :: zphi 104 104 INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: & 105 105 & igrdi, & … … 171 171 END DO 172 172 CALL obs_int_comm_2d( 2, 2, sstdata%nsurf, jpi, jpj, & 173 & igrdi, igrdj, CASTWP(glamt), zglam )173 & igrdi, igrdj, glamt, zglam ) 174 174 CALL obs_int_comm_2d( 2, 2, sstdata%nsurf, jpi, jpj, & 175 & igrdi, igrdj, CASTWP(gphit), zgphi )175 & igrdi, igrdj, gphit, zgphi ) 176 176 CALL obs_int_comm_2d( 2, 2, sstdata%nsurf, jpi, jpj, & 177 177 & igrdi, igrdj, tmask(:,:,1), zmask ) -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/obs_surf_def.F90
r14650 r15540 20 20 !! * Modules used 21 21 USE par_kind, ONLY : & ! Precision variables 22 & wp22 & dp, wp 23 23 USE obs_mpp, ONLY : & ! MPP tools 24 24 obs_mpp_sum_integer … … 75 75 & cwmo !: WMO indentifier 76 76 77 REAL(KIND= wp), POINTER, DIMENSION(:) :: &77 REAL(KIND=dp), POINTER, DIMENSION(:) :: & 78 78 & rlam, & !: Longitude coordinate of surface observation 79 79 & rphi !: Latitude coordinate of surface observation 80 80 81 REAL(KIND= wp), POINTER, DIMENSION(:,:) :: &81 REAL(KIND=dp), POINTER, DIMENSION(:,:) :: & 82 82 & robs, & !: Surface observation 83 83 & rmod !: Model counterpart of the surface observation vector 84 84 85 REAL(KIND= wp), POINTER, DIMENSION(:,:) :: &85 REAL(KIND=dp), POINTER, DIMENSION(:,:) :: & 86 86 & rext !: Extra fields interpolated to observation points 87 87 88 REAL(KIND= wp), POINTER, DIMENSION(:,:) :: &88 REAL(KIND=dp), POINTER, DIMENSION(:,:) :: & 89 89 & vdmean !: Time averaged of model field 90 90 -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/obs_write.F90
r14644 r15540 100 100 INTEGER :: iadd 101 101 INTEGER :: iext 102 REAL( wp) :: zpres102 REAL(dp) :: zpres 103 103 104 104 IF ( PRESENT( padd ) ) THEN … … 586 586 INTEGER :: inumgoodobs 587 587 INTEGER :: inumgoodobsmpp 588 REAL( wp) :: zsumx589 REAL( wp) :: zsumx2590 REAL( wp) :: zomb588 REAL(dp) :: zsumx 589 REAL(dp) :: zsumx2 590 REAL(dp) :: zomb 591 591 592 592 -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/obsinter_h2d.h90
r10353 r15540 86 86 ! = 3 bilinear (quadrilateral grid) 87 87 ! = 4 polynomial (quadrilateral grid) 88 REAL(KIND= wp), INTENT(INOUT) :: &88 REAL(KIND=dp), INTENT(INOUT) :: & 89 89 & plam, & 90 90 & pphi ! Geographical (lat,lon) coordinates of 91 91 ! observation 92 REAL(KIND= wp), DIMENSION(2,2), INTENT(IN) :: &92 REAL(KIND=dp), DIMENSION(2,2), INTENT(IN) :: & 93 93 & pglam, & ! Model variable lat 94 94 & pgphi ! Model variable lon 95 REAL(KIND= wp), DIMENSION(2,2,kpk2), INTENT(IN) :: &95 REAL(KIND=dp), DIMENSION(2,2,kpk2), INTENT(IN) :: & 96 96 & pmask ! Model variable mask 97 REAL(KIND= wp), DIMENSION(2,2,kpk2), INTENT(OUT) :: &97 REAL(KIND=dp), DIMENSION(2,2,kpk2), INTENT(OUT) :: & 98 98 & pweig ! Weights for interpolation 99 REAL(KIND= wp), DIMENSION(kpk2), INTENT(OUT) :: &99 REAL(KIND=dp), DIMENSION(kpk2), INTENT(OUT) :: & 100 100 & pobsmask ! Vertical mask for observations 101 101 INTEGER, INTENT(IN), OPTIONAL :: & … … 110 110 & iamb1, & 111 111 & iamb2 112 REAL(KIND= wp) :: &112 REAL(KIND=dp) :: & 113 113 & zphimm, & 114 114 & zphimp, & … … 123 123 & zlammin, & 124 124 & zlammax 125 REAL(KIND= wp), DIMENSION(kpk2) :: &125 REAL(KIND=dp), DIMENSION(kpk2) :: & 126 126 & z2dmm, & 127 127 & z2dmp, & … … 390 390 & kpk, & ! Parameter values for automatic arrays 391 391 & kpk2 392 REAL(KIND= wp), DIMENSION(2,2,kpk2), INTENT(IN) :: &392 REAL(KIND=dp), DIMENSION(2,2,kpk2), INTENT(IN) :: & 393 393 & pweig ! Interpolation weights 394 REAL(KIND= wp), DIMENSION(2,2,kpk2), INTENT(IN) :: &394 REAL(KIND=dp), DIMENSION(2,2,kpk2), INTENT(IN) :: & 395 395 & pmod ! Model variable to interpolate 396 REAL(KIND= wp), DIMENSION(kpk2), INTENT(OUT) :: &396 REAL(KIND=dp), DIMENSION(kpk2), INTENT(OUT) :: & 397 397 & pobsk ! Model profile interpolated to obs (i,j) pt 398 398 … … 402 402 INTEGER :: & 403 403 & ikmax 404 REAL(KIND= wp) :: &404 REAL(KIND=dp) :: & 405 405 & zsum 406 406 !------------------------------------------------------------------------ … … 462 462 & kpk2, & ! Parameter values for automatic arrays 463 463 & kmax 464 REAL(KIND= wp), INTENT(IN) :: &464 REAL(KIND=dp), INTENT(IN) :: & 465 465 & pphi, & ! Geographical location of observation 466 466 & plam, & … … 473 473 & plampm, & 474 474 & plampp 475 REAL(KIND= wp), DIMENSION(2,2,kpk2), INTENT(IN) :: &475 REAL(KIND=dp), DIMENSION(2,2,kpk2), INTENT(IN) :: & 476 476 & pmask ! Model variable mask 477 REAL(KIND= wp), DIMENSION(kpk2), INTENT(OUT) :: &477 REAL(KIND=dp), DIMENSION(kpk2), INTENT(OUT) :: & 478 478 & p2dmm, & ! Interpolation weights 479 479 & p2dmp, & … … 484 484 INTEGER :: & 485 485 & jk 486 REAL(KIND= wp) :: &486 REAL(KIND=dp) :: & 487 487 & zphi2, & 488 488 & zlam2, & … … 611 611 & kpk2, & ! Parameter values for automatic arrays 612 612 & kmax 613 REAL(KIND= wp), INTENT(IN) :: &613 REAL(KIND=dp), INTENT(IN) :: & 614 614 & pphi, & ! Geographical location of observation 615 615 & plam, & … … 622 622 & plampm, & 623 623 & plampp 624 REAL(KIND= wp), DIMENSION(2,2,kpk2), INTENT(IN) :: &624 REAL(KIND=dp), DIMENSION(2,2,kpk2), INTENT(IN) :: & 625 625 & pmask ! Model variable mask 626 REAL(KIND= wp), DIMENSION(kpk2), INTENT(OUT) :: &626 REAL(KIND=dp), DIMENSION(kpk2), INTENT(OUT) :: & 627 627 & p2dmm, & ! Interpolation weights 628 628 & p2dmp, & … … 633 633 INTEGER :: & 634 634 & jk 635 REAL(KIND= wp) :: &635 REAL(KIND=dp) :: & 636 636 & zcosp, & 637 637 & zdlmm, & … … 709 709 & kpk2, & ! Parameter values for automatic arrays 710 710 & kmax 711 REAL(KIND= wp), INTENT(IN) :: &711 REAL(KIND=dp), INTENT(IN) :: & 712 712 & pphi, & ! Geographical location of observation 713 713 & plam, & … … 716 716 & plammp, & 717 717 & plampp 718 REAL(KIND= wp), DIMENSION(2,2,kpk2), INTENT(IN) :: &718 REAL(KIND=dp), DIMENSION(2,2,kpk2), INTENT(IN) :: & 719 719 & pmask ! Model variable mask 720 REAL(KIND= wp), DIMENSION(kpk2), INTENT(OUT) :: &720 REAL(KIND=dp), DIMENSION(kpk2), INTENT(OUT) :: & 721 721 & p2dmm, & ! Interpolation weights 722 722 & p2dmp, & … … 727 727 INTEGER :: & 728 728 & jk 729 REAL(KIND= wp) :: &729 REAL(KIND=dp) :: & 730 730 & zdlmp, & 731 731 & zdppm, & … … 776 776 & kpk2, & ! Parameter values for automatic arrays 777 777 & kmax 778 REAL(KIND= wp), INTENT(IN) :: &778 REAL(KIND=dp), INTENT(IN) :: & 779 779 & pphi, & ! Geographical location of observation 780 780 & plam, & … … 787 787 & plampm, & 788 788 & plampp 789 REAL(KIND= wp), DIMENSION(2,2,kpk2), INTENT(IN) :: &789 REAL(KIND=dp), DIMENSION(2,2,kpk2), INTENT(IN) :: & 790 790 & pmask ! Model variable mask 791 REAL(KIND= wp), DIMENSION(kpk2), INTENT(OUT) :: &791 REAL(KIND=dp), DIMENSION(kpk2), INTENT(OUT) :: & 792 792 & p2dmm, & ! Interpolation weights 793 793 & p2dmp, & … … 799 799 INTEGER :: & 800 800 & jk 801 REAL(KIND= wp) :: &801 REAL(KIND=dp) :: & 802 802 & zbiwmm, & 803 803 & zbiwmp, & … … 858 858 & kpk2, & ! Parameter values for automatic arrays 859 859 & kmax 860 REAL(KIND= wp), INTENT(IN) :: &860 REAL(KIND=dp), INTENT(IN) :: & 861 861 & pphi, & ! Geographical location of observation 862 862 & plam, & … … 869 869 & plampm, & 870 870 & plampp 871 REAL(KIND= wp), DIMENSION(2,2,kpk2), INTENT(IN) :: &871 REAL(KIND=dp), DIMENSION(2,2,kpk2), INTENT(IN) :: & 872 872 & pmask ! Model variable mask 873 REAL(KIND= wp), DIMENSION(kpk2), INTENT(OUT) :: &873 REAL(KIND=dp), DIMENSION(kpk2), INTENT(OUT) :: & 874 874 & p2dmm, & ! Interpolation weights 875 875 & p2dmp, & … … 880 880 INTEGER :: & 881 881 & jk 882 REAL(KIND= wp) :: &882 REAL(KIND=dp) :: & 883 883 & zplp 884 REAL(KIND= wp), DIMENSION(4,4) :: &884 REAL(KIND=dp), DIMENSION(4,4) :: & 885 885 & zmat, & 886 886 & zmati … … 960 960 961 961 !! * Arguments 962 REAL(KIND= wp), INTENT(IN) :: &962 REAL(KIND=dp), INTENT(IN) :: & 963 963 & pphi, & ! Geographical location of observation 964 964 & plam, & … … 971 971 & plampm, & 972 972 & plampp 973 REAL(KIND= wp), INTENT(OUT) :: &973 REAL(KIND=dp), INTENT(OUT) :: & 974 974 & pbiwmm, & ! Interpolation weights 975 975 & pbiwmp, & … … 984 984 INTEGER :: & 985 985 & itermax 986 REAL(KIND= wp) :: &986 REAL(KIND=dp) :: & 987 987 & zphi, & ! Geographical location of observation 988 988 & zlam, & … … 1161 1161 INTEGER, INTENT(IN) :: & 1162 1162 & kdim ! Array dimension 1163 REAL(KIND= wp), DIMENSION(kdim,kdim), INTENT(IN) :: &1163 REAL(KIND=dp), DIMENSION(kdim,kdim), INTENT(IN) :: & 1164 1164 & pmatin 1165 REAL(KIND= wp), DIMENSION(kdim,kdim), INTENT(OUT) :: &1165 REAL(KIND=dp), DIMENSION(kdim,kdim), INTENT(OUT) :: & 1166 1166 & pmatou 1167 1167 … … 1172 1172 INTEGER, DIMENSION(kdim) :: & 1173 1173 & indx 1174 REAL(KIND= wp), DIMENSION(kdim,kdim) :: &1174 REAL(KIND=dp), DIMENSION(kdim,kdim) :: & 1175 1175 & zmat 1176 REAL(KIND= wp) :: &1176 REAL(KIND=dp) :: & 1177 1177 & zd 1178 1178 … … 1217 1217 INTEGER, DIMENSION(kdim1), INTENT(OUT) :: & 1218 1218 & kindex 1219 REAL(KIND= wp), INTENT(OUT) :: &1219 REAL(KIND=dp), INTENT(OUT) :: & 1220 1220 & pflt 1221 REAL(KIND= wp), DIMENSION(kdim2,kdim2), INTENT(INOUT) :: &1221 REAL(KIND=dp), DIMENSION(kdim2,kdim2), INTENT(INOUT) :: & 1222 1222 & pmatin 1223 1223 … … 1225 1225 INTEGER, PARAMETER :: & 1226 1226 & jpmax = 100 1227 REAL(KIND= wp), PARAMETER :: &1227 REAL(KIND=dp), PARAMETER :: & 1228 1228 & pptiny = 1.0e-20_wp 1229 REAL(KIND= wp), DIMENSION(jpmax) :: &1229 REAL(KIND=dp), DIMENSION(jpmax) :: & 1230 1230 & zvv 1231 1231 INTEGER :: & … … 1235 1235 INTEGER :: & 1236 1236 & imax 1237 REAL(KIND= wp) :: &1237 REAL(KIND=dp) :: & 1238 1238 & zsum, & 1239 1239 & zdum, & … … 1320 1320 INTEGER, DIMENSION(kdim1), INTENT(IN) :: & 1321 1321 & kindex 1322 REAL(KIND= wp), DIMENSION(kdim1), INTENT(INOUT) :: &1322 REAL(KIND=dp), DIMENSION(kdim1), INTENT(INOUT) :: & 1323 1323 & pvect 1324 REAL(KIND= wp), DIMENSION(kdim2,kdim2), INTENT(IN) :: &1324 REAL(KIND=dp), DIMENSION(kdim2,kdim2), INTENT(IN) :: & 1325 1325 & pmat 1326 1326 … … 1331 1331 & jj, & 1332 1332 & jll 1333 REAL(KIND= wp) :: &1333 REAL(KIND=dp) :: & 1334 1334 & zsum 1335 1335 -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/OBS/obsinter_z1d.h90
r13226 r15540 34 34 INTEGER, INTENT(IN), DIMENSION(kdep) :: & 35 35 & kkco ! Array indicies for interpolation 36 REAL(KIND= wp), INTENT(IN), DIMENSION(kdep) :: &36 REAL(KIND=dp), INTENT(IN), DIMENSION(kdep) :: & 37 37 & pobsdep ! Depth of the observation 38 REAL(KIND= wp), INTENT(IN), DIMENSION(kpk) :: &38 REAL(KIND=dp), INTENT(IN), DIMENSION(kpk) :: & 39 39 & pobsk, & ! Model profile at a given (lon,lat) 40 40 & pobs2k, & ! 2nd derivative of the interpolating function 41 41 & pdep, & ! Model depth array 42 42 & pobsmask ! Vertical mask 43 REAL(KIND= wp), INTENT(OUT), DIMENSION(kdep) :: &43 REAL(KIND=dp), INTENT(OUT), DIMENSION(kdep) :: & 44 44 & pobs ! Model equivalent at observation point 45 45 46 46 !! * Local declarations 47 REAL(KIND= wp) :: z1dm ! Distance above and below obs to model grid points48 REAL(KIND= wp) :: z1dp49 REAL(KIND= wp) :: zsum ! Dummy variables for computation50 REAL(KIND= wp) :: zsum247 REAL(KIND=dp) :: z1dm ! Distance above and below obs to model grid points 48 REAL(KIND=dp) :: z1dp 49 REAL(KIND=dp) :: zsum ! Dummy variables for computation 50 REAL(KIND=dp) :: zsum2 51 51 INTEGER :: jdep ! Observation depths loop variable 52 52 … … 122 122 !! * Arguments 123 123 INTEGER, INTENT(IN) :: kpk ! Number of vertical levels 124 REAL(KIND= wp), INTENT(IN), DIMENSION(kpk) :: &124 REAL(KIND=dp), INTENT(IN), DIMENSION(kpk) :: & 125 125 & pobsk, & ! Model profile at a given (lon,lat) 126 126 & pdep, & ! Model depth array 127 127 & pobsmask ! Vertical mask 128 REAL(KIND= wp), INTENT(OUT), DIMENSION(kpk) :: &128 REAL(KIND=dp), INTENT(OUT), DIMENSION(kpk) :: & 129 129 & pobs2k ! 2nd derivative of the interpolating function 130 130 131 131 !! * Local declarations 132 132 INTEGER :: jk 133 REAL(KIND= wp) :: za134 REAL(KIND= wp) :: zb135 REAL(KIND= wp) :: zc136 REAL(KIND= wp) :: zpa137 REAL(KIND= wp) :: zkm138 REAL(KIND= wp) :: zkp139 REAL(KIND= wp) :: zk140 REAL(KIND= wp), DIMENSION(kpk-1) :: &133 REAL(KIND=dp) :: za 134 REAL(KIND=dp) :: zb 135 REAL(KIND=dp) :: zc 136 REAL(KIND=dp) :: zpa 137 REAL(KIND=dp) :: zkm 138 REAL(KIND=dp) :: zkp 139 REAL(KIND=dp) :: zk 140 REAL(KIND=dp), DIMENSION(kpk-1) :: & 141 141 & zs, & 142 142 & zp, &
Note: See TracChangeset
for help on using the changeset viewer.